From 252cc09cb2664dc69da22b4b47654f075bb96a51 Mon Sep 17 00:00:00 2001 From: chengkun <2500338766@qq.com> Date: Fri, 13 May 2022 17:38:29 +0800 Subject: [PATCH] =?UTF-8?q?feature1.0.0:=E6=B7=BB=E5=8A=A0=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E9=87=8F=E3=80=81=E7=82=B9=E8=B5=9E=E3=80=81=E4=B8=8B?= =?UTF-8?q?=E8=BD=BDxxl-job=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bnyer/img/config/XxlJobConfig.java | 23 ++++++------ .../bnyer/img/constants/RedisKeyConstant.java | 5 +++ .../img/controller/TiktokMiniController.java | 3 +- .../com/bnyer/img/mapper/TiktokImgMapper.java | 2 +- .../bnyer/img/mapper/TiktokLikeMapper.java | 9 ++++- .../bnyer/img/service/TiktokImgService.java | 11 ++++++ .../service/{impl => }/TiktokLikeService.java | 2 +- .../impl/TiktokCollectionServiceImpl.java | 12 +++++-- .../service/impl/TiktokImgServiceImpl.java | 33 +++++++++++++++++ .../service/impl/TiktokLikeServiceImpl.java | 36 +++++++++++++++---- .../bnyer/img/task/CollectionSyncTask.java | 28 +++++++++++++++ .../com/bnyer/img/task/DownloadSyncTask.java | 28 +++++++++++++++ .../java/com/bnyer/img/task/LikeSyncTask.java | 27 +++++++++----- .../com/bnyer/img/mapper/TiktokImgMapper.xml | 4 +-- .../com/bnyer/img/mapper/TiktokLikeMapper.xml | 11 +++++- 15 files changed, 197 insertions(+), 37 deletions(-) rename bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/{impl => }/TiktokLikeService.java (95%) create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/CollectionSyncTask.java create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/XxlJobConfig.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/XxlJobConfig.java index a260ce3..e4d0cd0 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/XxlJobConfig.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/XxlJobConfig.java @@ -3,7 +3,6 @@ package com.bnyer.img.config; import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,11 +19,11 @@ public class XxlJobConfig { @Value("${xxl-job.addresses}") private String adminAddresses; -// @Value("${xxl.job.executor.appname}") -// private String appName; -// -// @Value("${xxl.job.executor.ip}") -// private String ip; + @Value("${xxl-job.appname}") + private String appName; + + @Value("${xxl-job.ip}") + private String ip; @Value("${xxl-job.port}") private int port; @@ -35,21 +34,21 @@ public class XxlJobConfig { @Value("${xxl-job.logpath}") private String logPath; - //@Value("${xxl.job.executor.logretentiondays}") - //private int logRetentionDays; + @Value("${xxl-job.logretentiondays}") + private int logRetentionDays; - @Bean(initMethod = "start", destroyMethod = "destroy") + @Bean public XxlJobSpringExecutor xxlJobExecutor() { log.info(">>>>>>>>>>> xxl-job 配置初始化开始 <<<<<<<<<<<<."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); - //xxlJobSpringExecutor.setAppName(appName); - //xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setAppName(appName); + xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); - //xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); log.info(">>>>>>>>>>> xxl-job 配置初始化结束 <<<<<<<<<<<<."); return xxlJobSpringExecutor; } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java index 6fa729e..f87e981 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java @@ -27,6 +27,11 @@ public class RedisKeyConstant { */ public static final String TIKTOK_IMG_LIKE_NUM_KEY = "bnyer.tiktok.likeNum"; + /** + * 抖音小程序图片下载数量键 + */ + public static final String TIKTOK_IMG_DOWNLOAD_NUM_KEY = "bnyer.tiktok.downloadNum"; + /** * 抖音小程序用户登录键 */ diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java index 2ac9ba7..bc4872c 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java @@ -1,14 +1,13 @@ package com.bnyer.img.controller; import com.alibaba.fastjson.JSON; -import com.bnyer.common.core.annotation.TokenCheck; import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.img.domain.Feedback; import com.bnyer.img.domain.TiktokImg; import com.bnyer.img.dto.*; import com.bnyer.img.service.*; -import com.bnyer.img.service.impl.TiktokLikeService; +import com.bnyer.img.service.TiktokLikeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java index 721a7ce..22258aa 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java @@ -39,4 +39,4 @@ public interface TiktokImgMapper extends BaseMapper { * @return - */ TiktokImgVo queryDetails(@Param("imgId") String imgId); -} \ No newline at end of file +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokLikeMapper.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokLikeMapper.java index f7b28f3..5f25efe 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokLikeMapper.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokLikeMapper.java @@ -4,10 +4,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.bnyer.img.domain.TiktokLike; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * @author chengkun * @date 2022/4/21 9:50 */ @Mapper public interface TiktokLikeMapper extends BaseMapper { -} \ No newline at end of file + /** + * 批量插入点赞数据 + * @param list 点赞数据列表 + */ + void insertBatch(List list); +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java index e3c7558..f4cf469 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java @@ -90,4 +90,15 @@ public interface TiktokImgService { * @return - */ int changeHot(Long id,String status); + + /** + * 图片下载数量写入缓存 + * @param imgId 图片id + */ + void writeDownloadNum(Long imgId); + + /** + * 同步图片下载数量到db + */ + void insertDownloadNum(); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokLikeService.java similarity index 95% rename from bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeService.java rename to bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokLikeService.java index 80a1086..ca7a68b 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokLikeService.java @@ -1,4 +1,4 @@ -package com.bnyer.img.service.impl; +package com.bnyer.img.service; import java.util.List; diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokCollectionServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokCollectionServiceImpl.java index ae9803b..ea0a19a 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokCollectionServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokCollectionServiceImpl.java @@ -19,6 +19,7 @@ import org.springframework.data.redis.core.Cursor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -48,13 +49,18 @@ public class TiktokCollectionServiceImpl implements TiktokCollectionService { String imgId = (String) next.getKey(); Long imgLongId = Long.parseLong(imgId); Integer collectNum = (Integer) next.getValue(); + TiktokImg img = tiktokImgMapper.selectById(imgLongId); + if(img == null){ + redisService.deleteHashKey(imgCollectNumKey, imgId); + continue; + } TiktokImg tiktokImg = new TiktokImg(); tiktokImg.setId(imgLongId); tiktokImg.setUpdateTime(new Date()); - tiktokImg.setCollectionNum(collectNum); + tiktokImg.setCollectionNum(collectNum+img.getCollectionNum()); tiktokImgMapper.updateById(tiktokImg); - //保存后从 Redis 中删除 - redisService.deleteHashKey(imgCollectNumKey,imgId); + //删除缓存 + redisService.deleteHashKey(imgCollectNumKey, imgId); } log.info("==============redis同步图片收藏数量到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java index d4b54fe..92c91ef 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java @@ -135,4 +135,37 @@ public class TiktokImgServiceImpl implements TiktokImgService { img.setIsHot(status); return tiktokImgMapper.update(img,wrapper); } + + @Override + public void writeDownloadNum(Long imgId) { + String redisKey = RedisKeyConstant.TIKTOK_IMG_DOWNLOAD_NUM_KEY; + redisService.hashIncr(redisKey,String.valueOf(imgId), 1); + } + + @Override + public void insertDownloadNum() { + log.info("==============redis同步图片下载数量到db数据开始!==============="); + long startTime = System.currentTimeMillis(); + String redisKey = RedisKeyConstant.TIKTOK_IMG_DOWNLOAD_NUM_KEY; + Cursor> download = redisService.getHashScan(redisKey); + while (download.hasNext()){ + Map.Entry next = download.next(); + String imgId = (String) next.getKey(); + Long imgLongId = Long.parseLong(imgId); + Integer downloadNum = (Integer) next.getValue(); + TiktokImg img = tiktokImgMapper.selectById(imgLongId); + if(img == null){ + redisService.deleteHashKey(redisKey, imgId); + continue; + } + TiktokImg tiktokImg = new TiktokImg(); + tiktokImg.setId(imgLongId); + tiktokImg.setUpdateTime(new Date()); + tiktokImg.setDownloadNum(downloadNum+img.getDownloadNum()); + tiktokImgMapper.updateById(tiktokImg); + //删除缓存 + redisService.deleteHashKey(redisKey, imgId); + } + log.info("==============redis同步图片下载数量到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime); + } } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java index 77b0cb8..5ed35cd 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokLikeServiceImpl.java @@ -8,12 +8,14 @@ import com.bnyer.img.domain.TiktokLike; import com.bnyer.img.enums.TiktokLikeEnum; import com.bnyer.img.mapper.TiktokImgMapper; import com.bnyer.img.mapper.TiktokLikeMapper; +import com.bnyer.img.service.TiktokLikeService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.Cursor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -43,6 +45,8 @@ public class TiktokLikeServiceImpl implements TiktokLikeService { //拿缓存 String redisKey = RedisKeyConstant.TIKTOK_USER_LIKE_KEY; Cursor> like = redisService.getHashScan(redisKey); + List list = new ArrayList<>(); + List keyList = new ArrayList<>(); while (like.hasNext()){ Map.Entry next = like.next(); String key = (String) next.getKey(); @@ -52,14 +56,29 @@ public class TiktokLikeServiceImpl implements TiktokLikeService { Long userLongId = Long.parseLong(userId); String imgId = split[1]; Long imgLongId = Long.parseLong(imgId); + //判断图片是否存在 + TiktokImg img = tiktokImgMapper.selectById(imgLongId); + if(img == null){ + //不存在则图片Id加入删除列表,遍历完删除 + keyList.add(key); + continue; + } TiktokLike tiktokLike = new TiktokLike(); tiktokLike.setUserId(userLongId); tiktokLike.setImgId(imgLongId); + tiktokLike.setIsShow("1"); + tiktokLike.setSort(0); tiktokLike.setCreateTime(new Date()); tiktokLike.setUpdateTime(new Date()); - tiktokLikeMapper.insert(tiktokLike); - //保存后从 Redis 中删除 - redisService.deleteHashKey(redisKey,key); + list.add(tiktokLike); + keyList.add(key); + } + //数据插入数据库并删除缓存 + tiktokLikeMapper.insertBatch(list); + if(keyList.size() > 0){ + for (String key : keyList) { + redisService.deleteHashKey(redisKey, key); + } } log.info("==============redis同步点赞记录到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime); } @@ -76,13 +95,18 @@ public class TiktokLikeServiceImpl implements TiktokLikeService { String imgId = (String) next.getKey(); Long imgLongId = Long.parseLong(imgId); Integer greatNum = (Integer) next.getValue(); + TiktokImg img = tiktokImgMapper.selectById(imgLongId); + if(img == null){ + redisService.deleteHashKey(imgLikeNumKey, imgId); + continue; + } TiktokImg tiktokImg = new TiktokImg(); tiktokImg.setId(imgLongId); tiktokImg.setUpdateTime(new Date()); - tiktokImg.setGreatNum(greatNum); + tiktokImg.setGreatNum(greatNum+img.getGreatNum()); tiktokImgMapper.updateById(tiktokImg); - //保存后从 Redis 中删除 - redisService.deleteHashKey(imgLikeNumKey,imgId); + //删除缓存 + redisService.deleteHashKey(imgLikeNumKey, imgId); } log.info("==============redis同步图片点赞数量到db数据完成,耗时【{}】毫秒!===============",System.currentTimeMillis() - startTime); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/CollectionSyncTask.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/CollectionSyncTask.java new file mode 100644 index 0000000..f9f5f37 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/CollectionSyncTask.java @@ -0,0 +1,28 @@ +package com.bnyer.img.task; + +import com.bnyer.img.service.TiktokCollectionService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author chengkun + * @date 2022/5/12 18:13 + */ +@Component +@Slf4j +public class CollectionSyncTask { + + @Autowired + private TiktokCollectionService tiktokCollectionService; + + @XxlJob("collectionSyncTask") + public ReturnT syncCollection(String param) throws Exception { + tiktokCollectionService.insertNum(); + XxlJobLogger.log("{} 我执行了同步收藏记录任务", System.currentTimeMillis()); + return ReturnT.SUCCESS; + } +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java new file mode 100644 index 0000000..98a4815 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/DownloadSyncTask.java @@ -0,0 +1,28 @@ +package com.bnyer.img.task; + +import com.bnyer.img.service.TiktokImgService; +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author chengkun + * @date 2022/5/12 18:13 + */ +@Component +@Slf4j +public class DownloadSyncTask { + + @Autowired + private TiktokImgService tiktokImgService; + + @XxlJob("collectionSyncTask") + public ReturnT syncDownload(String param) throws Exception { + tiktokImgService.insertDownloadNum(); + XxlJobLogger.log("{} 我执行了同步图片下载数量任务", System.currentTimeMillis()); + return ReturnT.SUCCESS; + } +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/LikeSyncTask.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/LikeSyncTask.java index ac36a57..7ab7b44 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/LikeSyncTask.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/task/LikeSyncTask.java @@ -1,10 +1,11 @@ package com.bnyer.img.task; +import com.bnyer.img.service.TiktokLikeService; import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.handler.IJobHandler; -import com.xxl.job.core.handler.annotation.JobHandler; import com.xxl.job.core.handler.annotation.XxlJob; +import com.xxl.job.core.log.XxlJobLogger; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** @@ -13,12 +14,22 @@ import org.springframework.stereotype.Component; */ @Component @Slf4j -@JobHandler(value = "likeSyncTask") -public class LikeSyncTask extends IJobHandler { +public class LikeSyncTask{ - @Override - public ReturnT execute(String param) throws Exception { - System.out.println("123125123123123"); - return null; + @Autowired + private TiktokLikeService tiktokLikeService; + + @XxlJob("likeSyncTask") + public ReturnT syncLike(String param) throws Exception { + tiktokLikeService.insertRecord(); + XxlJobLogger.log("{} 我执行了同步点赞记录任务", System.currentTimeMillis()); + return ReturnT.SUCCESS; + } + + @XxlJob("likeNumSyncTask") + public ReturnT syncLikeNum(String param) throws Exception { + tiktokLikeService.insertNum(); + XxlJobLogger.log("{} 我执行了同步点赞数量任务", System.currentTimeMillis()); + return ReturnT.SUCCESS; } } diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml index 5865b4c..ca21f40 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml @@ -20,7 +20,7 @@ - id, img_url, user_id, type_id, download_num, great_num, collection_num, `status`, + id, img_url, user_id, type_id, download_num, great_num, collection_num, `status`, is_hot, is_show, create_time, update_time, sort - \ No newline at end of file + diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokLikeMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokLikeMapper.xml index 4417816..d807397 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokLikeMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokLikeMapper.xml @@ -16,4 +16,13 @@ id, user_id, img_id, is_show, create_time, update_time, sort - \ No newline at end of file + + + insert into img_tiktok_like + (user_id, img_id, is_show,create_time,update_time,sort) + VALUES + + (#{item.userId}, #{item.imgId}, #{item.isShow}, #{item.createTime}, #{item.updateTime}, #{item.sort}) + + +