From 654f4eebf519f015506b90d71637e6aad75e5b5c Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期三, 25 六月 2025 14:33:26 +0800
Subject: [PATCH] 视频评论点赞通过mq异步添加数据库,点赞数缓存redis

---
 framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java            |   22 ++
 framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml                          |   15 +
 framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java             |    4 
 framework/src/main/java/cn/lili/modules/lmk/mapper/VideoCommentMapper.java              |    7 
 framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml                        |   15 +
 config/application.yml                                                                  |    2 
 consumer/src/main/java/cn/lili/listener/CommentMessageListener.java                     |   93 +++++++++++
 framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java          |    7 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java   |   99 +++++++++--
 framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java            |    7 
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/CollectTypeNumVO.java             |    2 
 consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java                 |    9 -
 /dev/null                                                                               |   22 --
 framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java        |   27 +++
 framework/src/main/java/cn/lili/common/properties/RocketmqCustomProperties.java         |    6 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java |    6 
 consumer/pom.xml                                                                        |    6 
 framework/src/main/java/cn/lili/rocketmq/tags/CommentTagsEnum.java                      |   32 ++++
 framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java         |   45 +++++
 lmk-job/src/main/java/cn/lili/job/VideoJob.java                                         |   17 ++
 20 files changed, 385 insertions(+), 58 deletions(-)

diff --git a/config/application.yml b/config/application.yml
index 0902162..a44c47e 100644
--- a/config/application.yml
+++ b/config/application.yml
@@ -282,6 +282,8 @@
     rocketmq:
       promotion-topic: shop_lili_promotion_topic
       promotion-group: shop_lili_promotion_group
+      comment-topic: lmk_comment_topic  # 璇勮
+      comment-group: lmk_comment_group
       msg-ext-topic: shop_lili_msg_topic
       msg-ext-group: shop_lili_msg_group
       goods-topic: shop_lili_goods_topic
diff --git a/consumer/pom.xml b/consumer/pom.xml
index fad02f7..d971f7e 100644
--- a/consumer/pom.xml
+++ b/consumer/pom.xml
@@ -18,11 +18,7 @@
             <artifactId>framework</artifactId>
             <version>${revision}</version>
         </dependency>
-        <dependency>
-            <groupId>com.xuxueli</groupId>
-            <artifactId>xxl-job-core</artifactId>
-            <version>${xxl-job}</version>
-        </dependency>
+
     </dependencies>
 
     <repositories>
diff --git a/consumer/src/main/java/cn/lili/config/XxlJobConfig.java b/consumer/src/main/java/cn/lili/config/XxlJobConfig.java
deleted file mode 100644
index 24052c8..0000000
--- a/consumer/src/main/java/cn/lili/config/XxlJobConfig.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package cn.lili.config;
-
-import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * xxl-job config
- *
- * @author xuxueli 2017-04-28
- */
-@Configuration
-public class XxlJobConfig {
-    private final Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
-
-    @Value("${xxl.job.admin.addresses:}")
-    private String adminAddresses;
-
-    @Value("${xxl.job.accessToken:}")
-    private String accessToken;
-
-    @Value("${xxl.job.executor.appname}")
-    private String appname;
-
-    @Value("${xxl.job.executor.address}")
-    private String address;
-
-    @Value("${xxl.job.executor.ip}")
-    private String ip;
-
-    @Value("${xxl.job.executor.port}")
-    private int port;
-
-    @Value("${xxl.job.executor.logpath}")
-    private String logPath;
-
-    @Value("${xxl.job.executor.logretentiondays}")
-    private int logRetentionDays;
-
-
-    @Bean
-    public XxlJobSpringExecutor xxlJobExecutor() {
-        logger.info(">>>>>>>>>>> xxl-job config init.");
-        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
-        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
-        xxlJobSpringExecutor.setAppname(appname);
-        xxlJobSpringExecutor.setAddress(address);
-        xxlJobSpringExecutor.setIp(ip);
-        xxlJobSpringExecutor.setPort(port);
-        xxlJobSpringExecutor.setAccessToken(accessToken);
-        xxlJobSpringExecutor.setLogPath(logPath);
-        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
-
-        return xxlJobSpringExecutor;
-    }
-
-    /**
-     * 閽堝澶氱綉鍗°�佸鍣ㄥ唴閮ㄧ讲绛夋儏鍐碉紝鍙�熷姪 "spring-cloud-commons" 鎻愪緵鐨� "InetUtils" 缁勪欢鐏垫椿瀹氬埗娉ㄥ唽IP锛�
-     *
-     *      1銆佸紩鍏ヤ緷璧栵細
-     *          <dependency>
-     *             <groupId>org.springframework.cloud</groupId>
-     *             <artifactId>spring-cloud-commons</artifactId>
-     *             <version>${version}</version>
-     *         </dependency>
-     *
-     *      2銆侀厤缃枃浠讹紝鎴栬�呭鍣ㄥ惎鍔ㄥ彉閲�
-     *          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
-     *
-     *      3銆佽幏鍙朓P
-     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
-     */
-
-
-}
diff --git a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java
index d7cf46c..b64b996 100644
--- a/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java
+++ b/consumer/src/main/java/cn/lili/event/impl/DistributionOrderExecute.java
@@ -1,20 +1,11 @@
 package cn.lili.event.impl;
 
-import cn.hutool.core.date.DateField;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.json.JSONUtil;
 import cn.lili.event.AfterSaleStatusChangeEvent;
 import cn.lili.event.OrderStatusChangeEvent;
-import cn.lili.modules.distribution.entity.enums.DistributionOrderStatusEnum;
 import cn.lili.modules.distribution.service.DistributionOrderService;
 import cn.lili.modules.order.aftersale.entity.dos.AfterSale;
 import cn.lili.modules.order.order.entity.dto.OrderMessage;
 import cn.lili.modules.order.trade.entity.enums.AfterSaleStatusEnum;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.DistributionSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryDayExecute;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/consumer/src/main/java/cn/lili/listener/CommentMessageListener.java b/consumer/src/main/java/cn/lili/listener/CommentMessageListener.java
new file mode 100644
index 0000000..5d87495
--- /dev/null
+++ b/consumer/src/main/java/cn/lili/listener/CommentMessageListener.java
@@ -0,0 +1,93 @@
+package cn.lili.listener;
+
+import cn.lili.base.Result;
+import cn.lili.cache.Cache;
+import cn.lili.cache.CachePrefix;
+import cn.lili.common.security.context.UserContext;
+import cn.lili.modules.lmk.constant.RedisKeyExpireConstant;
+import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
+import cn.lili.modules.lmk.domain.entity.VideoComment;
+import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
+import cn.lili.modules.lmk.service.ThumbsUpRecordService;
+import cn.lili.modules.lmk.service.VideoCommentService;
+import cn.lili.rocketmq.tags.CommentTagsEnum;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.common.message.MessageExt;
+import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
+import org.apache.rocketmq.spring.core.RocketMQListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 璇勮娑堟伅娑堣垂鑰�
+ *
+ * @author paulG
+ * @since 2020/12/9
+ **/
+@Component
+@Slf4j
+@RocketMQMessageListener(topic = "${lili.data.rocketmq.comment-topic}", consumerGroup = "${lili.data.rocketmq.comment-group}")
+public class CommentMessageListener implements RocketMQListener<MessageExt> {
+
+    @Autowired
+    private ThumbsUpRecordService thumbsUpRecordService;
+
+    @Autowired
+    private VideoCommentService videoCommentService;
+
+    /**
+     * 缂撳瓨
+     */
+    @Autowired
+    private Cache<Object> cache;
+
+    @Override
+    public void onMessage(MessageExt messageExt) {
+        try {
+            String msg = new String(messageExt.getBody());
+            if (StringUtils.isBlank(msg)) {
+                log.error("comment msg is null, cant not consumer");
+                return;
+            }
+            switch (CommentTagsEnum.valueOf(messageExt.getTags())) {
+                case THUMBS_UP:
+                    this.thumbsUp(msg);
+                    break;
+                case CANCEL_THUMBS_UP:
+                    this.cancelThumbsUp(msg);
+                    break;
+                default:
+                    log.error("comment msg not match correct tag, consumer err");
+                    break;
+            }
+        } catch (Exception e) {
+            log.error("comment msg consumer err", e);
+        }
+    }
+
+    /**
+     * 璇勮鐐硅禐
+     *
+     * @param msg
+     */
+    public void thumbsUp(String msg) {
+        ThumbsUpRecord record = JSON.parseObject(msg, ThumbsUpRecord.class);
+        videoCommentService.mqThumbsUp(record);
+    }
+
+    /**
+     * 璇勮鍙栨秷鐐硅禐
+     *
+     * @param msg
+     */
+    public void cancelThumbsUp(String msg) {
+        ThumbsUpRecordForm form = JSON.parseObject(msg, ThumbsUpRecordForm.class);
+        videoCommentService.mqCancelThumbsUp(form);
+    }
+}
diff --git a/consumer/src/main/java/cn/lili/timetask/TimedTaskJobHandler.java b/consumer/src/main/java/cn/lili/timetask/TimedTaskJobHandler.java
deleted file mode 100644
index b898358..0000000
--- a/consumer/src/main/java/cn/lili/timetask/TimedTaskJobHandler.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package cn.lili.timetask;
-
-import cn.lili.timetask.handler.EveryDayExecute;
-import cn.lili.timetask.handler.EveryHourExecute;
-import cn.lili.timetask.handler.EveryMinuteExecute;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.handler.annotation.XxlJob;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 瀹氭椂鍣ㄤ换鍔�
- *
- * @author Chopper
- * @version v1.0
- * 2020-12-24 11:51
- */
-@Slf4j
-@Component
-public class TimedTaskJobHandler {
-
-    @Autowired(required = false)
-    private List<EveryMinuteExecute> everyMinuteExecutes;
-
-
-    @Autowired(required = false)
-    private List<EveryHourExecute> everyHourExecutes;
-
-
-    @Autowired(required = false)
-    private List<EveryDayExecute> everyDayExecutes;
-
-    /**
-     * 姣忓垎閽熶换鍔�
-     *
-     * @throws Exception
-     */
-    @XxlJob("everyMinuteExecute")
-    public ReturnT<String> everyMinuteExecute(String param)  {
-        log.info("姣忓垎閽熶换鍔℃墽琛�");
-        if (everyMinuteExecutes == null || everyMinuteExecutes.size() == 0) {
-            return ReturnT.SUCCESS;
-        }
-
-        for (int i = 0; i < everyMinuteExecutes.size(); i++) {
-            try {
-                everyMinuteExecutes.get(i).execute();
-            } catch (Exception e) {
-                log.error("姣忓垎閽熶换鍔″紓甯�", e);
-            }
-        }
-        return ReturnT.SUCCESS;
-    }
-
-    /**
-     * 姣忓皬鏃朵换鍔�
-     *
-     * @throws Exception
-     */
-    @XxlJob("everyHourExecuteJobHandler")
-    public ReturnT<String> everyHourExecuteJobHandler(String param) {
-        log.info("姣忓皬鏃朵换鍔℃墽琛�");
-        if (everyHourExecutes == null || everyHourExecutes.size() == 0) {
-            return ReturnT.SUCCESS;
-        }
-
-        for (int i = 0; i < everyHourExecutes.size(); i++) {
-            try {
-                everyHourExecutes.get(i).execute();
-            } catch (Exception e) {
-                log.error("姣忓皬鏃朵换鍔″紓甯�", e);
-            }
-        }
-        return ReturnT.SUCCESS;
-    }
-
-    /**
-     * 姣忔棩浠诲姟
-     *
-     * @throws Exception
-     */
-    @XxlJob("everyDayExecuteJobHandler")
-    public ReturnT<String> everyDayExecuteJobHandler(String param) {
-
-        log.info("姣忔棩浠诲姟鎵ц");
-        if (everyDayExecutes == null || everyDayExecutes.size() == 0) {
-            return ReturnT.SUCCESS;
-        }
-
-        for (int i = 0; i < everyDayExecutes.size(); i++) {
-            try {
-                everyDayExecutes.get(i).execute();
-            } catch (Exception e) {
-                log.error("姣忔棩浠诲姟寮傚父", e);
-            }
-        }
-        return ReturnT.SUCCESS;
-    }
-
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/EveryDayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/EveryDayExecute.java
deleted file mode 100644
index e5fc9a5..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/EveryDayExecute.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package cn.lili.timetask.handler;
-
-/**
- * 姣忔棩浠诲姟
- * 姣忔棩鍑屾櫒1鐐规墽琛�
- *
- * @author Chopper
- * @since 2020/12/24 11:52
- */
-public interface EveryDayExecute {
-
-    /**
-     * 鎵ц姣忔棩浠诲姟
-     */
-    void execute();
-
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/EveryHourExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/EveryHourExecute.java
deleted file mode 100644
index 4604220..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/EveryHourExecute.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.lili.timetask.handler;
-
-/**
- * 姣忓皬鏃朵换鍔�
- *
- * @author Chopper
- * @since 2020/12/24 11:52
- */
-public interface EveryHourExecute {
-
-    /**
-     * 鎵ц
-     */
-    void execute();
-
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/EveryMinuteExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/EveryMinuteExecute.java
deleted file mode 100644
index e1960e2..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/EveryMinuteExecute.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cn.lili.timetask.handler;
-
-/**
- * 姣忓垎閽熶换鍔�
- *
- * @author Chopper
- * @since 2020/12/24 11:52
- */
-public interface EveryMinuteExecute {
-
-    /**
-     * 鎵ц
-     */
-    void execute();
-
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java
deleted file mode 100644
index 6be091e..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/broadcast/BroadcastExecute.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package cn.lili.timetask.handler.impl.broadcast;
-
-import cn.lili.modules.goods.service.CommodityService;
-import cn.lili.timetask.handler.EveryHourExecute;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 灏忕▼搴忕洿鎾姸鎬佽幏鍙�
- *
- * @author Bulbasaur
- * @since 2021/5/20 2:52 涓嬪崍
- */
-@Component
-public class BroadcastExecute implements EveryHourExecute {
-
-    @Autowired
-    private CommodityService commodityService;
-
-    @Override
-    public void execute() {
-        //鍚屾鐩存挱鍟嗗搧鐘舵��
-        commodityService.getGoodsWareHouse();
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java
deleted file mode 100644
index acb0503..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/coupon/CouponExecute.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package cn.lili.timetask.handler.impl.coupon;
-
-import cn.lili.modules.promotion.entity.dos.MemberCoupon;
-import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum;
-import cn.lili.modules.promotion.service.MemberCouponService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * 浼樻儬鍒哥姸鎬佺洃娴�
- *
- * @author Bulbasaur
- * @since 2021/5/24 10:08 涓婂崍
- */
-@Component
-public class CouponExecute implements EveryDayExecute {
-
-    /**
-     * 杩囨湡甯搁噺锛岃繃鏈熷悗鎴栬�呬娇鐢ㄥ悗涓�瀹氭椂闂村唴锛屽垹闄ゆ棤鏁堢殑浼樻儬鍒革紝鐗╃悊鍒犻櫎
-     */
-    static final int EXPIRATION_DAY = 3;
-
-    @Autowired
-    private MemberCouponService memberCouponService;
-
-    /**
-     * 妫�娴嬩紭鎯犲埜鐨勪娇鐢ㄦ椂闂达紝瓒呮湡鏈娇鐢ㄥ垯澶辨晥
-     * 姝ゆ柟娉曠敤浜庨鍙�*澶╁悗澶辨晥浼樻儬鍒镐娇鐢�
-     */
-    @Override
-    public void execute() {
-        //灏嗚繃鏈熶紭鎯犲埜鍙樻洿涓鸿繃鏈熺姸鎬�
-        LambdaUpdateWrapper<MemberCoupon> updateWrapper = new LambdaUpdateWrapper<MemberCoupon>()
-                .eq(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.NEW.name())
-                .le(MemberCoupon::getEndTime, new Date())
-                .set(MemberCoupon::getMemberCouponStatus, MemberCouponStatusEnum.EXPIRE.name());
-        this.memberCouponService.update(updateWrapper);
-
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - EXPIRATION_DAY);
-        Date removeTime = calendar.getTime();
-        //鍒犻櫎杩囨湡/宸蹭娇鐢ㄧ殑浼樻儬鍒�
-        LambdaUpdateWrapper<MemberCoupon> deleteWrapper = new LambdaUpdateWrapper<MemberCoupon>()
-                //濡傛灉缁撴潫鏃堕棿灏忎簬 褰撳墠鏃堕棿澧炲姞鎸囧畾鍒犻櫎鏃ユ湡锛屽垯鍒犻櫎
-                .le(MemberCoupon::getEndTime, removeTime);
-        this.memberCouponService.remove(deleteWrapper);
-
-
-    }
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java
deleted file mode 100644
index 2956c45..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/goods/GoodsExecute.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package cn.lili.timetask.handler.impl.goods;
-
-import cn.hutool.core.convert.Convert;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.lili.modules.goods.service.GoodsService;
-import cn.lili.modules.member.service.MemberEvaluationService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 鍟嗗搧瀹氭椂鍣�
- *
- * @author Chopper
- * @since 2021/3/18 3:23 涓嬪崍
- */
-@Component
-public class GoodsExecute implements EveryDayExecute {
-    /**
-     * 浼氬憳璇勪环
-     */
-    @Autowired
-    private MemberEvaluationService memberEvaluationService;
-    /**
-     * 鍟嗗搧
-     */
-    @Autowired
-    private GoodsService goodsService;
-
-    /**
-     * 鏌ヨ宸蹭笂鏋剁殑鍟嗗搧鐨勮瘎浠锋暟閲忓苟璧嬪��
-     */
-    @Override
-    public void execute() {
-
-        //鏌ヨ涓婃缁熻鍒版湰娆$殑璇勪环鏁伴噺
-        List<Map<String, Object>> list = memberEvaluationService.memberEvaluationNum(DateUtil.yesterday(), new DateTime());
-
-        for (Map<String, Object> map : list) {
-            goodsService.addGoodsCommentNum(Convert.toInt(map.get("num").toString()), map.get("goods_id").toString());
-        }
-
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java
deleted file mode 100644
index ecf63d5..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/hotwords/HotWordsEveryDayTaskExecute.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package cn.lili.timetask.handler.impl.hotwords;
-
-import cn.hutool.json.JSONUtil;
-import cn.lili.cache.Cache;
-import cn.lili.cache.CachePrefix;
-import cn.lili.common.utils.StringUtils;
-import cn.lili.modules.search.entity.dos.HotWordsHistory;
-import cn.lili.modules.search.service.HotWordsHistoryService;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.HotWordsSetting;
-import cn.lili.modules.system.entity.dto.HotWordsSettingItem;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.DefaultTypedTuple;
-import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.*;
-
-/**
- * @author paulG
- * @since 2021/3/11
- **/
-@Slf4j
-@Component
-public class HotWordsEveryDayTaskExecute implements EveryDayExecute {
-
-    @Autowired
-    private Cache cache;
-
-    @Autowired
-    private HotWordsHistoryService hotWordsHistoryService;
-    @Autowired
-    private SettingService settingService;
-
-    /**
-     * 鎵ц姣忔棩浠诲姟
-     */
-    @Override
-    public void execute() {
-        //鑾峰彇澶т簬0鍒嗙殑鐑瘝
-        Set<DefaultTypedTuple> tuples = cache.zRangeByScore(CachePrefix.HOT_WORD.getPrefix(), 1, Integer.MAX_VALUE);
-        //濡傛灉浠诲姟涓嶄负绌�
-        if (!CollectionUtils.isEmpty(tuples)) {
-
-            //鍥犱负鏄浜屽ぉ缁熻绗竴澶╃殑鏁版嵁锛屾墍浠ヨ繖閲岃幏鍙栨槰澶╁噷鏅ㄧ殑鏃堕棿
-            Calendar calendar = Calendar.getInstance();
-            calendar.set(Calendar.HOUR_OF_DAY, 0);
-            calendar.set(Calendar.SECOND, 0);
-            calendar.set(Calendar.MILLISECOND, 0);
-            calendar.set(Calendar.MINUTE, 0);
-            calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1);
-
-            //鎵归噺淇濆瓨鐑瘝
-            List<HotWordsHistory> hotWordsHistories = new ArrayList<>();
-            for (DefaultTypedTuple tuple : tuples) {
-                String keywords = (String) tuple.getValue();
-                Double score = tuple.getScore();
-                hotWordsHistories.add(new HotWordsHistory(keywords, score.intValue(), calendar.getTime()));
-            }
-
-            hotWordsHistoryService.saveBatch(hotWordsHistories);
-        }
-        //绉婚櫎鏄ㄦ棩鐨勭儹鎼滆瘝
-        cache.remove(CachePrefix.HOT_WORD.getPrefix());
-
-        //璁剧疆浠婃棩榛樿鐑瘝
-        Setting setting = settingService.get(SettingEnum.HOT_WORDS.name());
-        if (setting == null) {
-            return;
-        }
-        HotWordsSetting hotWordsSetting = JSONUtil.toBean(setting.getSettingValue(), HotWordsSetting.class);
-        List<HotWordsSettingItem> hotWordsSettingItems = hotWordsSetting.getHotWordsSettingItems();
-        if (hotWordsSettingItems != null && !hotWordsSettingItems.isEmpty()) {
-            for (HotWordsSettingItem hotWordsSettingItem : hotWordsSettingItems) {
-                cache.zAdd(CachePrefix.HOT_WORD.getPrefix(), hotWordsSettingItem.getScore(), hotWordsSettingItem.getKeywords());
-            }
-        }
-    }
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java
deleted file mode 100644
index 93b14e4..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.lili.timetask.handler.impl.order;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.json.JSONUtil;
-import cn.lili.modules.order.order.entity.dos.Order;
-import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
-import cn.lili.modules.order.order.service.OrderService;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.OrderSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryMinuteExecute;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 璁㈠崟鑷姩鍙栨秷锛堟瘡鍒嗛挓鎵ц锛�
- *
- * @author paulG
- * @since 2021/3/11
- **/
-@Slf4j
-@Component
-public class CancelOrderTaskExecute implements EveryMinuteExecute {
-    /**
-     * 璁㈠崟
-     */
-    @Autowired
-    private OrderService orderService;
-    /**
-     * 璁剧疆
-     */
-    @Autowired
-    private SettingService settingService;
-
-
-    @Override
-    public void execute() {
-        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
-        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
-        if (orderSetting != null && orderSetting.getAutoCancel() != null) {
-            //璁㈠崟鑷姩鍙栨秷鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍙栨秷鏃堕棿鍒嗛挓鏁�
-            DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel());
-            LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.UNPAID.name());
-            //璁㈠崟鍒涘缓鏃堕棿 <= 璁㈠崟鑷姩鍙栨秷鏃堕棿
-            queryWrapper.le(Order::getCreateTime, cancelTime);
-            List<Order> list = orderService.list(queryWrapper);
-            List<String> cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList());
-            for (String sn : cancelSnList) {
-                orderService.systemCancel(sn, "瓒呮椂鏈敮浠樿嚜鍔ㄥ彇娑�",false);
-            }
-        }
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java
deleted file mode 100644
index b7edf22..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package cn.lili.timetask.handler.impl.order;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.json.JSONUtil;
-import cn.lili.common.enums.ResultCode;
-import cn.lili.common.exception.ServiceException;
-import cn.lili.modules.distribution.service.DistributionOrderService;
-import cn.lili.modules.member.entity.dto.MemberEvaluationDTO;
-import cn.lili.modules.member.entity.enums.EvaluationGradeEnum;
-import cn.lili.modules.member.service.MemberEvaluationService;
-import cn.lili.modules.order.order.entity.dos.Order;
-import cn.lili.modules.order.order.entity.dos.OrderItem;
-import cn.lili.modules.order.order.entity.dto.OrderItemOperationDTO;
-import cn.lili.modules.order.order.entity.enums.CommentStatusEnum;
-import cn.lili.modules.order.order.entity.enums.OrderComplaintStatusEnum;
-import cn.lili.modules.order.order.entity.enums.OrderItemAfterSaleStatusEnum;
-import cn.lili.modules.order.order.entity.enums.OrderStatusEnum;
-import cn.lili.modules.order.order.service.OrderItemService;
-import cn.lili.modules.order.order.service.OrderService;
-import cn.lili.modules.order.order.service.StoreFlowService;
-import cn.lili.modules.store.entity.dto.StoreSettlementDay;
-import cn.lili.modules.store.service.BillService;
-import cn.lili.modules.store.service.StoreDetailService;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.OrderSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import java.util.List;
-import java.util.stream.Collectors;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.messaging.handler.annotation.SendTo;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-/**
- * @author paulG
- * @since 2021/3/11
- **/
-@Slf4j
-@Component
-
-public class OrderEveryDayTaskExecute implements EveryDayExecute {
-
-    /**
-     * 璁㈠崟
-     */
-    @Autowired
-    private OrderService orderService;
-    /**
-     * 璁㈠崟璐х墿
-     */
-    @Autowired
-    private OrderItemService orderItemService;
-    /**
-     * 璁剧疆
-     */
-    @Autowired
-    private SettingService settingService;
-    /**
-     * 浼氬憳璇勪环
-     */
-    @Autowired
-    private MemberEvaluationService memberEvaluationService;
-
-    @Autowired
-    private DistributionOrderService distributionOrderService;
-
-    @Autowired
-    private StoreFlowService storeFlowService;
-
-    /**
-     * 缁撶畻鍗�
-     */
-    @Autowired
-    private BillService billService;
-    /**
-     * 搴楅摵璇︽儏
-     */
-    @Autowired
-    private StoreDetailService storeDetailService;
-
-    /**
-     * 鎵ц姣忔棩浠诲姟
-     */
-    @Override
-    public void execute() {
-
-        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
-        //璁㈠崟璁剧疆
-        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
-        if (orderSetting == null) {
-            throw new ServiceException(ResultCode.ORDER_SETTING_ERROR);
-        }
-
-        try {
-            //鑷姩纭鏀惰揣
-            completedOrder(orderSetting);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-        try {
-            //鑷姩濂借瘎
-            memberEvaluation(orderSetting);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-        try {
-            //鍏抽棴鍏佽鍞悗鐢宠
-            this.closeAfterSale(orderSetting);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-        try {
-            //鍏抽棴鍏佽鎶曡瘔
-            closeComplaint(orderSetting);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-
-        //淇敼鍒嗚处鐘舵��
-        try {
-            storeFlowService.updateProfitSharingStatus();
-        } catch (Exception e) {
-            log.error("淇敼鍒嗚处鐘舵�佸け璐�", e);
-        }
-
-        //鐢熸垚搴楅摵缁撶畻鍗�
-        try {
-            createBill();
-        } catch (Exception e) {
-            log.error("鐢熸垚搴楅摵缁撶畻鍗�", e);
-        }
-
-
-    }
-
-    /**
-     * 鑷姩纭鏀惰幏锛岃鍗曞畬鎴�
-     *
-     * @param orderSetting 璁㈠崟璁剧疆
-     */
-    private void completedOrder(OrderSetting orderSetting) {
-
-        //璁㈠崟鑷姩鏀惰揣鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鏀惰揣鏃堕棿澶╂暟
-        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive());
-        LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name());
-
-        //璁㈠崟鍙戣揣鏃堕棿 >= 璁㈠崟鑷姩鏀惰揣鏃堕棿
-        queryWrapper.le(Order::getLogisticsTime, receiveTime);
-        List<Order> list = orderService.list(queryWrapper);
-
-        try {
-            //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛岃繘琛岃鍗曞畬鎴愬鐞�
-            if (!list.isEmpty()) {
-                List<String> receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList());
-                for (String orderSn : receiveSnList) {
-                    orderService.systemComplete(orderSn);
-                }
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-        }
-    }
-
-    /**
-     * 鑷姩濂借瘎
-     *
-     * @param orderSetting 璁㈠崟璁剧疆
-     */
-    private void memberEvaluation(OrderSetting orderSetting) {
-        //璁㈠崟鑷姩鏀惰揣鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鏀惰揣鏃堕棿澶╂暟
-        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation());
-
-        //璁㈠崟瀹屾垚鏃堕棿 <= 璁㈠崟鑷姩濂借瘎鏃堕棿
-        OrderItemOperationDTO orderItemOperationDTO =
-            OrderItemOperationDTO.builder().receiveTime(receiveTime).commentStatus(CommentStatusEnum.UNFINISHED.name())
-                .build();
-        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(orderItemOperationDTO);
-
-        //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛岃繘琛岃嚜鍔ㄨ瘎浠峰鐞�
-        if (!orderItems.isEmpty()) {
-            for (OrderItem orderItem : orderItems) {
-                MemberEvaluationDTO memberEvaluationDTO = new MemberEvaluationDTO();
-                memberEvaluationDTO.setOrderItemSn(orderItem.getSn());
-                memberEvaluationDTO.setContent("绯荤粺榛樿濂借瘎");
-                memberEvaluationDTO.setGoodsId(orderItem.getGoodsId());
-                memberEvaluationDTO.setSkuId(orderItem.getSkuId());
-                memberEvaluationDTO.setGrade(EvaluationGradeEnum.GOOD.name());
-                memberEvaluationDTO.setDeliveryScore(5);
-                memberEvaluationDTO.setDescriptionScore(5);
-                memberEvaluationDTO.setServiceScore(5);
-
-                try {
-                    memberEvaluationService.addMemberEvaluation(memberEvaluationDTO, false);
-
-                } catch (Exception e) {
-                    log.error(e.getMessage(), e);
-                }
-            }
-        }
-    }
-
-    /**
-     * 鍏抽棴鍏佽鍞悗鐢宠
-     *
-     * @param orderSetting 璁㈠崟璁剧疆
-     */
-    @Transactional(rollbackFor = Exception.class)
-    public void closeAfterSale(OrderSetting orderSetting) {
-        //璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍏抽棴鍞悗鐢宠澶╂暟
-        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseAfterSale());
-
-//        OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
-//            .afterSaleStatus(OrderItemAfterSaleStatusEnum.NOT_APPLIED.name()).build();
-//        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
-        //鍏抽棴鍞悗璁㈠崟=鏈敭鍚庤鍗�+灏忎簬璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿
-        orderItemService.expiredAfterSaleStatus(receiveTime);
-
-    }
-
-    /**
-     * 鍏抽棴鍏佽浜ゆ槗鎶曡瘔
-     *
-     * @param orderSetting 璁㈠崟璁剧疆
-     */
-    private void closeComplaint(OrderSetting orderSetting) {
-
-        //涓�0鍒欎笉闄愬埗
-        if (orderSetting.getCloseComplaint() == null || orderSetting.getCloseComplaint() == 0) {
-            return;
-        }
-        //璁㈠崟鍏抽棴浜ゆ槗鎶曡瘔鐢宠鏃堕棿 = 褰撳墠鏃堕棿 - 鑷姩鍏抽棴浜ゆ槗鎶曡瘔鐢宠澶╂暟
-        DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getCloseComplaint());
-
-        //鍏抽棴鍞悗璁㈠崟=鏈敭鍚庤鍗�+灏忎簬璁㈠崟鍏抽棴鍞悗鐢宠鏃堕棿
-        OrderItemOperationDTO build = OrderItemOperationDTO.builder().receiveTime(receiveTime)
-            .complainStatus(OrderComplaintStatusEnum.NO_APPLY.name()).build();
-        List<OrderItem> orderItems = orderItemService.waitOperationOrderItem(build);
-
-        //鍒ゆ柇鏄惁鏈夌鍚堟潯浠剁殑璁㈠崟锛屽叧闂厑璁稿敭鍚庣敵璇峰鐞�
-        if (!orderItems.isEmpty()) {
-
-            //鑾峰彇璁㈠崟璐х墿ID
-            List<String> orderItemIdList = orderItems.stream().map(OrderItem::getId).collect(Collectors.toList());
-
-            //淇敼璁㈠崟鎶曡瘔鐘舵��
-            LambdaUpdateWrapper<OrderItem> lambdaUpdateWrapper =
-                new LambdaUpdateWrapper<OrderItem>().set(OrderItem::getComplainStatus,
-                    OrderItemAfterSaleStatusEnum.EXPIRED.name()).in(OrderItem::getId, orderItemIdList);
-            orderItemService.update(lambdaUpdateWrapper);
-        }
-
-    }
-
-    /**
-     * 1.鏌ヨ浠婃棩寰呯粨绠楃殑鍟嗗
-     * 2.鏌ヨ鍟嗗涓婃缁撶畻鏃ユ湡锛岀敓鎴愭湰娆$粨绠楀崟
-     * 3.璁板綍鍟嗗缁撶畻鏃�
-     */
-    private void createBill() {
-        //鑾峰彇褰撳墠澶╂暟
-        int day = DateUtil.date().dayOfMonth();
-
-        //鑾峰彇寰呯粨绠楀晢瀹跺垪琛�
-        List<StoreSettlementDay> storeList = storeDetailService.getSettlementStore(day);
-
-        //鑾峰彇褰撳墠鏃堕棿
-        DateTime endTime = DateUtil.date();
-        //鎵归噺鍟嗗缁撶畻
-        for (StoreSettlementDay storeSettlementDay : storeList) {
-
-            //鐢熸垚缁撶畻鍗�
-            billService.createBill(storeSettlementDay.getStoreId(), storeSettlementDay.getSettlementDay(), endTime);
-
-            //淇敼搴楅摵缁撶畻鏃堕棿
-            storeDetailService.updateSettlementDay(storeSettlementDay.getStoreId(), endTime);
-        }
-    }
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java
deleted file mode 100644
index e0ca23a..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/RechargeOrderTaskExecute.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cn.lili.timetask.handler.impl.order;
-
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.json.JSONUtil;
-import cn.lili.modules.order.order.entity.enums.PayStatusEnum;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.OrderSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.modules.wallet.entity.dos.Recharge;
-import cn.lili.modules.wallet.service.RechargeService;
-import cn.lili.timetask.handler.EveryMinuteExecute;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 鍏呭�艰鍗曡嚜鍔ㄥ彇娑堬紙姣忓垎閽熸墽琛岋級
- *
- * @author zhuhai
- * @since 2021/3/11
- **/
-@Slf4j
-@Component
-public class RechargeOrderTaskExecute implements EveryMinuteExecute {
-    /**
-     * 鍏呭��
-     */
-    @Autowired
-    private RechargeService rechargeService;
-    /**
-     * 璁剧疆
-     */
-    @Autowired
-    private SettingService settingService;
-
-
-    @Override
-    public void execute() {
-        Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name());
-        OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class);
-        if (orderSetting != null && orderSetting.getAutoCancel() != null) {
-            //鍏呭�艰鍗曡嚜鍔ㄥ彇娑堟椂闂� = 褰撳墠鏃堕棿 - 鑷姩鍙栨秷鏃堕棿鍒嗛挓鏁�
-            DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel());
-            LambdaQueryWrapper<Recharge> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(Recharge::getPayStatus, PayStatusEnum.UNPAID.name());
-            //鍏呭�艰鍗曞垱寤烘椂闂� <= 璁㈠崟鑷姩鍙栨秷鏃堕棿
-            queryWrapper.le(Recharge::getCreateTime, cancelTime);
-            List<Recharge> list = rechargeService.list(queryWrapper);
-            List<String> cancelSnList = list.stream().map(Recharge::getRechargeSn).collect(Collectors.toList());
-            for (String sn : cancelSnList) {
-                rechargeService.rechargeOrderCancel(sn);
-            }
-        }
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/MemberCouponSignEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/MemberCouponSignEverydayExecute.java
deleted file mode 100644
index 13a5e7a..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/MemberCouponSignEverydayExecute.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.lili.timetask.handler.impl.promotion;
-
-import cn.lili.common.enums.PromotionTypeEnum;
-import cn.lili.modules.promotion.entity.dos.Seckill;
-import cn.lili.modules.promotion.service.MemberCouponSignService;
-import cn.lili.modules.promotion.service.SeckillService;
-import cn.lili.modules.promotion.tools.PromotionTools;
-import cn.lili.modules.search.service.EsGoodsIndexService;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.SeckillSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.google.gson.Gson;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 淇冮攢娲诲姩姣忔棩瀹氭椂鍣�
- *
- * @author Chopper
- * @since 2021/3/18 3:23 涓嬪崍
- */
-@Slf4j
-@Component
-public class MemberCouponSignEverydayExecute implements EveryDayExecute {
-
-    @Autowired
-    private MemberCouponSignService memberCouponSignService;
-
-    /**
-     * 灏嗗凡杩囨湡鐨勪績閿�娲诲姩缃负缁撴潫
-     */
-    @Override
-    public void execute() {
-        try {
-            memberCouponSignService.clean();
-        } catch (Exception e) {
-            log.error("娓呴櫎棰嗗彇浼樻儬鍒告爣璁板紓甯�", e);
-        }
-
-    }
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java
deleted file mode 100644
index a9fa7fc..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package cn.lili.timetask.handler.impl.promotion;
-
-import cn.lili.common.enums.PromotionTypeEnum;
-import cn.lili.modules.promotion.entity.dos.Seckill;
-import cn.lili.modules.promotion.service.SeckillService;
-import cn.lili.modules.promotion.tools.PromotionTools;
-import cn.lili.modules.search.service.EsGoodsIndexService;
-import cn.lili.modules.system.entity.dos.Setting;
-import cn.lili.modules.system.entity.dto.SeckillSetting;
-import cn.lili.modules.system.entity.enums.SettingEnum;
-import cn.lili.modules.system.service.SettingService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.google.gson.Gson;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-/**
- * 淇冮攢娲诲姩姣忔棩瀹氭椂鍣�
- *
- * @author Chopper
- * @since 2021/3/18 3:23 涓嬪崍
- */
-@Slf4j
-@Component
-public class PromotionEverydayExecute implements EveryDayExecute {
-
-    /**
-     * ES鍟嗗搧绱㈠紩
-     */
-    @Autowired
-    private EsGoodsIndexService esGoodsIndexService;
-    /**
-     * 绯荤粺璁剧疆
-     */
-    @Autowired
-    private SettingService settingService;
-    /**
-     * 绉掓潃娲诲姩
-     */
-    @Autowired
-    private SeckillService seckillService;
-
-    /**
-     * 灏嗗凡杩囨湡鐨勪績閿�娲诲姩缃负缁撴潫
-     */
-    @Override
-    public void execute() {
-        try {
-            //娓呴櫎鎵�鏈夊晢鍝佺储寮曠殑鏃犳晥淇冮攢娲诲姩
-            this.esGoodsIndexService.cleanInvalidPromotion();
-        } catch (Exception e) {
-            log.error("娓呮鍟嗗搧绱㈠紩涓棤鏁堜績閿�寮傚父", e);
-        }
-        try {
-            //瀹氭椂鍒涘缓娲诲姩
-            addSeckill();
-        } catch (Exception e) {
-            log.error("绉掓潃娲诲姩娣诲姞寮傚父", e);
-        }
-
-    }
-
-    /**
-     * 娣诲姞绉掓潃娲诲姩
-     * 浠庣郴缁熻缃腑鑾峰彇绉掓潃娲诲姩鐨勯厤缃�
-     * 娣诲姞鏄庡ぉ鍚庣殑绉掓潃娲诲姩
-     */
-    private void addSeckill() {
-        Setting setting = settingService.get(SettingEnum.SECKILL_SETTING.name());
-        SeckillSetting seckillSetting = new Gson().fromJson(setting.getSettingValue(), SeckillSetting.class);
-        log.info("鐢熸垚绉掓潃娲诲姩璁剧疆锛歿}", seckillSetting);
-        for (int i = 1; i <= SeckillService.PRE_CREATION; i++) {
-            Seckill seckill = new Seckill(i, seckillSetting.getHours(), seckillSetting.getSeckillRule());
-            seckill.setApplyEndTime(null);
-
-            //濡傛灉宸茬粡瀛樺湪淇冮攢锛屽垯涓嶅啀娆′繚瀛�
-            if (seckillService.list(
-                    PromotionTools.checkActiveTime(seckill.getStartTime(), seckill.getEndTime(), PromotionTypeEnum.SECKILL, null, seckill.getId())).isEmpty()) {
-                boolean result = seckillService.savePromotions(seckill);
-                log.info("鐢熸垚绉掓潃娲诲姩鍙傛暟锛歿},缁撴灉锛歿}", seckill, result);
-            }
-        }
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java
deleted file mode 100644
index b349250..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/MemberStatisticsExecute.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package cn.lili.timetask.handler.impl.statistics;
-
-import cn.lili.modules.statistics.entity.dos.MemberStatisticsData;
-import cn.lili.modules.statistics.service.MemberStatisticsService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * 浼氬憳鏁版嵁缁熻
- *
- * @author Chopper
- * @since 2021-03-02 14:56
- */
-@Slf4j
-@Component
-public class MemberStatisticsExecute implements EveryDayExecute {
-
-    /**
-     * 浼氬憳缁熻
-     */
-    @Autowired
-    private MemberStatisticsService memberStatisticsService;
-
-    @Override
-    public void execute() {
-
-        try {
-            //缁熻鐨勬椂闂达紙寮�濮嬨�傜粨鏉熸椂闂达級
-            Date startTime, endTime;
-            //鍒濆鍊�
-            Calendar calendar = Calendar.getInstance();
-            calendar.set(Calendar.SECOND, 0);
-            calendar.set(Calendar.MILLISECOND, 1);
-            calendar.set(Calendar.MINUTE, 0);
-            calendar.set(Calendar.HOUR_OF_DAY, 0);
-            endTime = calendar.getTime();
-            //-1澶╋紝鍗充负寮�濮嬫椂闂�
-            calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
-            startTime = calendar.getTime();
-            MemberStatisticsData memberStatisticsData = new MemberStatisticsData();
-            memberStatisticsData.setMemberCount(memberStatisticsService.memberCount(endTime));
-            memberStatisticsData.setCreateDate(startTime);
-            memberStatisticsData.setActiveQuantity(memberStatisticsService.activeQuantity(startTime));
-            memberStatisticsData.setNewlyAdded(memberStatisticsService.newlyAdded(startTime, endTime));
-            memberStatisticsService.save(memberStatisticsData);
-        } catch (Exception e) {
-            log.error("姣忔棩浼氬憳缁熻鍔熻兘寮傚父锛�", e);
-        }
-    }
-}
\ No newline at end of file
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java
deleted file mode 100644
index 19f90bb..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/statistics/OnlineMemberStatistics.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package cn.lili.timetask.handler.impl.statistics;
-
-import cn.lili.cache.Cache;
-import cn.lili.cache.CachePrefix;
-import cn.lili.common.security.enums.UserEnums;
-import cn.lili.common.properties.StatisticsProperties;
-import cn.lili.modules.statistics.entity.vo.OnlineMemberVO;
-import cn.lili.timetask.handler.EveryHourExecute;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.Collectors;
-
-/**
- * 瀹炴椂鍦ㄧ嚎浜烘暟缁熻
- *
- * @author Chopper
- * @since 2021-02-21 09:47
- */
-@Component
-public class OnlineMemberStatistics implements EveryHourExecute {
-
-    /**
-     * 缂撳瓨
-     */
-    @Autowired
-    private Cache<List<OnlineMemberVO>> cache;
-    /**
-     * 缁熻灏忔椂
-     */
-    @Autowired
-    private StatisticsProperties statisticsProperties;
-
-
-    @Override
-    public void execute() {
-
-        Calendar calendar = Calendar.getInstance();
-
-        List<OnlineMemberVO> onlineMemberVOS = cache.get(CachePrefix.ONLINE_MEMBER.getPrefix());
-
-        if (onlineMemberVOS == null) {
-            onlineMemberVOS = new ArrayList<>();
-        }
-
-        //杩囨护 鏈夋晥缁熻鏃堕棿
-        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - statisticsProperties.getOnlineMember());
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-
-        Calendar finalCalendar = calendar;
-
-        AtomicReference<Integer> lastNum = new AtomicReference<>(0);
-        onlineMemberVOS = onlineMemberVOS.stream()
-                .filter(onlineMemberVO -> {
-                    //濡傛灉涓鸿繃婊ゅ弬鏁帮紝鍒欒褰曚负杩囨湡鍙傛暟锛屽垯涓虹粺涓�鏃舵涓婁竴鍛ㄦ湡鐨勫湪绾夸汉鏁�
-                    if (!onlineMemberVO.getDate().after(finalCalendar.getTime())) {
-                        lastNum.set(onlineMemberVO.getNum());
-                    }
-                    return onlineMemberVO.getDate().after(finalCalendar.getTime());
-                })
-                .collect(Collectors.toList());
-
-        //璁″叆鏂版暟鎹�
-        calendar = Calendar.getInstance();
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        onlineMemberVOS.add(new OnlineMemberVO(calendar.getTime(), cache.keys(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER) + "*").size(),
-                lastNum.get()));
-
-        //鍐欏叆缂撳瓨
-        cache.put(CachePrefix.ONLINE_MEMBER.getPrefix(), onlineMemberVOS);
-    }
-
-
-    /**
-     * 鎵嬪姩璁剧疆鏌愪竴鏃堕棿锛屾椿璺冧汉鏁�
-     *
-     * @param time 鏃堕棿
-     * @param num  浜烘暟
-     */
-    public void execute(Date time, Integer num) {
-
-        List<OnlineMemberVO> onlineMemberVOS = cache.get(CachePrefix.ONLINE_MEMBER.getPrefix());
-
-        if (onlineMemberVOS == null) {
-            onlineMemberVOS = new ArrayList<>();
-        }
-
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(time);
-        //杩囨护 鏈夋晥缁熻鏃堕棿
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 48);
-
-        onlineMemberVOS = onlineMemberVOS.stream()
-                .filter(onlineMemberVO -> onlineMemberVO.getDate().after(calendar.getTime()))
-                .collect(Collectors.toList());
-        onlineMemberVOS.add(new OnlineMemberVO(time, num, num));
-
-        //鍐欏叆缂撳瓨
-        cache.put(CachePrefix.ONLINE_MEMBER.getPrefix(), onlineMemberVOS);
-    }
-
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreExecute.java
deleted file mode 100644
index 283a155..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreExecute.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package cn.lili.timetask.handler.impl.store;
-
-import cn.lili.modules.goods.service.GoodsSkuService;
-import cn.lili.modules.store.entity.dos.Store;
-import cn.lili.modules.store.entity.enums.StoreStatusEnum;
-import cn.lili.modules.store.service.StoreService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 搴楅摵淇℃伅鏇存柊
- *
- * @author Chopper
- * @since 2021/3/15 5:30 涓嬪崍
- */
-@Component
-@Slf4j
-public class StoreExecute implements EveryDayExecute {
-    /**
-     * 搴楅摵
-     */
-    @Autowired
-    private StoreService storeService;
-
-    @Autowired
-    private GoodsSkuService goodsSkuService;
-
-    @Override
-    public void execute() {
-        //鑾峰彇鎵�鏈夊紑鍚殑搴楅摵
-        List<Store> storeList = storeService.list(new LambdaQueryWrapper<Store>().eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()));
-
-        for (Store store : storeList) {
-            try {
-                Long num = goodsSkuService.countSkuNum(store.getId());
-                storeService.updateStoreGoodsNum(store.getId(), num);
-            } catch (Exception e) {
-                log.error("搴楅摵id涓簕},鏇存柊鍟嗗搧鏁伴噺澶辫触", store.getId(), e);
-            }
-        }
-
-
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreRatingExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreRatingExecute.java
deleted file mode 100644
index fe07139..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/store/StoreRatingExecute.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package cn.lili.timetask.handler.impl.store;
-
-import cn.lili.common.enums.SwitchEnum;
-import cn.lili.modules.member.entity.vo.StoreRatingVO;
-import cn.lili.modules.member.service.MemberEvaluationService;
-import cn.lili.modules.store.entity.dos.Store;
-import cn.lili.modules.store.entity.enums.StoreStatusEnum;
-import cn.lili.modules.store.service.StoreService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.List;
-
-/**
- * 搴楅摵璇勫垎
- *
- * @author Chopper
- * @since 2021/3/15 5:30 涓嬪崍
- */
-@Component
-public class StoreRatingExecute implements EveryDayExecute {
-    /**
-     * 搴楅摵
-     */
-    @Autowired
-    private StoreService storeService;
-    /**
-     * 浼氬憳璇勪环
-     */
-    @Autowired
-    private MemberEvaluationService memberEvaluationService;
-
-
-    @Override
-    public void execute() {
-        //鑾峰彇鎵�鏈夊紑鍚殑搴楅摵
-        List<Store> storeList = storeService.list(new LambdaQueryWrapper<Store>().eq(Store::getStoreDisable, StoreStatusEnum.OPEN.name()));
-        for (Store store : storeList) {
-            //搴楅摵鎵�鏈夊紑鍚殑璇勪环
-            StoreRatingVO storeRatingVO = memberEvaluationService.getStoreRatingVO(store.getId(), SwitchEnum.OPEN.name());
-
-            if (storeRatingVO != null) {
-                //淇濆瓨璇勫垎
-                LambdaUpdateWrapper<Store> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
-                lambdaUpdateWrapper.eq(Store::getId, store.getId());
-                lambdaUpdateWrapper.set(Store::getDescriptionScore, storeRatingVO.getDescriptionScore());
-                lambdaUpdateWrapper.set(Store::getDeliveryScore, storeRatingVO.getDeliveryScore());
-                lambdaUpdateWrapper.set(Store::getServiceScore, storeRatingVO.getServiceScore());
-                storeService.update(lambdaUpdateWrapper);
-            }
-
-        }
-
-
-    }
-}
diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java
deleted file mode 100644
index 0783517..0000000
--- a/consumer/src/main/java/cn/lili/timetask/handler/impl/view/PageViewStatisticsExecute.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package cn.lili.timetask.handler.impl.view;
-
-import cn.hutool.core.convert.Convert;
-import cn.lili.cache.Cache;
-import cn.lili.cache.CachePrefix;
-import cn.lili.common.utils.BeanUtil;
-import cn.lili.modules.statistics.entity.dos.PlatformViewData;
-import cn.lili.modules.statistics.service.PlatformViewService;
-import cn.lili.timetask.handler.EveryDayExecute;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 缁熻 鍏ュ簱
- *
- * @author Chopper
- * @since 2021-01-15 18:20
- */
-@Slf4j
-@Component
-public class PageViewStatisticsExecute implements EveryDayExecute {
-    /**
-     * 缂撳瓨
-     */
-    @Autowired
-    private Cache cache;
-    /**
-     * 骞冲彴PV缁熻
-     */
-    @Autowired
-    private PlatformViewService platformViewService;
-
-    @Override
-    public void execute() {
-
-        //1銆佺紦瀛榢eys 妯$硦鍖归厤
-        //2銆佽繃婊や粖鏃ョ殑鏁版嵁锛屽嵆浠婂ぉ鍙兘缁熻浠婃棩浠ュ墠鐨勬暟鎹�
-        //4瀵筴ey value 鍒嗗埆浠h〃骞冲彴PV銆佸钩鍙癠V銆佸簵閾篜V銆佸簵閾篣V
-        List<String> pvKeys = filterKeys(cache.keys(CachePrefix.PV.getPrefix() + "*"));
-        List<Integer> pvValues = cache.multiGet(pvKeys);
-
-        List<String> storePVKeys = filterKeys(cache.keys(CachePrefix.STORE_PV.getPrefix() + "*"));
-        List<Integer> storePvValues = cache.multiGet(storePVKeys);
-
-        //澶囦唤UV鏁版嵁锛岃繖閲岃祴鍊间箣鍚庯紝浼氳鍒犻櫎
-        List<String> uvKeys = new ArrayList<>();
-        List<String> storeUvKeys = new ArrayList<>();
-
-        log.debug("寮�濮嬬粺璁″钩鍙版暟鎹紝PV鍏辫銆恵}銆戞潯", pvKeys.size());
-        log.debug("寮�濮嬬粺璁″簵閾烘暟鎹紝PV鍏辫銆恵}銆戞潯", storePvValues.size());
-
-        //瀹氫箟瑕佺粺璁$殑鏁版嵁
-        List<PlatformViewData> platformViewDataList = new ArrayList<>();
-
-        //PV 缁熻
-        if (pvKeys.size() > 0) {
-            for (int i = 0; i < pvKeys.size(); i++) {
-                String key = pvKeys.get(i);
-                PageViewStatistics pageViewStatistics = new PageViewStatistics(key);
-                PlatformViewData platformPVData = new PlatformViewData();
-                BeanUtil.copyProperties(pageViewStatistics, platformPVData);
-                platformPVData.setPvNum(pvValues.get(i).longValue());
-                //鏍规嵁pvkey 鑾峰彇 uvkey
-                String uvKey = getUvKey(key);
-                uvKeys.add(uvKey);
-                platformPVData.setUvNum(cache.counter(uvKey));
-                platformPVData.setStoreId("-1");
-                platformViewDataList.add(platformPVData);
-            }
-            batchSave(pvKeys, uvKeys, platformViewDataList);
-        }
-        //搴楅摵 PV 缁熻
-        if (storePVKeys.size() > 0) {
-            platformViewDataList = new ArrayList<>();
-            for (int i = 0; i < storePVKeys.size(); i++) {
-                String key = storePVKeys.get(i);
-                PageViewStatistics pageViewStatistics = new PageViewStatistics(key);
-                PlatformViewData storePVData = new PlatformViewData();
-                BeanUtil.copyProperties(pageViewStatistics, storePVData);
-                storePVData.setPvNum(storePvValues.get(i).longValue());
-                //鏍规嵁pvkey 鑾峰彇 uvkey
-                String uvKey = getUvKey(key);
-                uvKeys.add(uvKey);
-                storePVData.setUvNum(cache.counter(uvKey));
-                platformViewDataList.add(storePVData);
-            }
-            batchSave(storePVKeys, storeUvKeys, platformViewDataList);
-        }
-    }
-
-    /**
-     * 鏍规嵁缂撳瓨鐨凱Vkey 鑾峰彇瀵瑰簲鐨刄Vkey
-     *
-     * @param key
-     * @return
-     */
-    private String getUvKey(String key) {
-        if (StringUtils.isNotEmpty(key)) {
-
-            key = key.replace(CachePrefix.PV.getPrefix(), CachePrefix.UV.getPrefix());
-            key = key.replace(CachePrefix.STORE_PV.getPrefix(), CachePrefix.STORE_UV.getPrefix());
-            return key;
-        }
-        return key;
-    }
-
-    /**
-     * 鎵归噺淇濆瓨鏁版嵁&&娓呴櫎淇濆瓨鏁版嵁鐨勭紦瀛�
-     *
-     * @param pvKeys           PV key
-     * @param uvKeys           UV key
-     * @param platformViewData DOS
-     */
-    @Transactional(rollbackFor = Exception.class)
-    void batchSave(List<String> pvKeys, List<String> uvKeys, List<PlatformViewData> platformViewData) {
-        log.debug("鎵归噺淇濆瓨娴侀噺鏁版嵁锛屽叡璁°�恵}銆戞潯", platformViewData.size());
-        platformViewService.saveBatch(platformViewData);
-        //鎵归噺鍒犻櫎缂撳瓨key
-        cache.multiDel(pvKeys);
-        cache.multiDel(uvKeys);
-        log.debug("娴侀噺鏁版嵁淇濆瓨瀹屾垚");
-    }
-
-
-    /**
-     * 杩囨护缂撳瓨key
-     *
-     * @param keys 缂撳瓨key闆嗗悎
-     */
-    private static List<String> filterKeys(List<String> keys) {
-
-        //鍙粺璁′竴澶╁墠鐨勬暟鎹�
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(Calendar.HOUR_OF_DAY, -24);
-
-        List<String> result = new ArrayList<>();
-        for (String key : keys) {
-            PageViewStatistics temp = new PageViewStatistics(key);
-            //濡傛灉闇�瑕佺粺璁★紝鍒欏皢key鍐欏叆闆嗗悎
-            if (temp.getDate().before(calendar.getTime())) {
-                result.add(key);
-            }
-        }
-
-        return result;
-    }
-
-}
-
-/**
- * 鏍规嵁缂撳瓨key 鑾峰彇鍏朵腑闇�瑕佺殑鍙傛暟锛屽勾鏈堟棩锛屼互鍙婂簵閾轰俊鎭�
- */
-@Data
-class PageViewStatistics {
-    /**
-     * 骞� 銆� 鏈� 銆� 鏃� 銆� 搴楅摵id
-     */
-    private Date date;
-    private String storeId;
-
-    public PageViewStatistics(String str) {
-        //灏嗗瓧绗︿覆瑙f瀽鎴愰渶瑕佺殑瀵硅薄
-        str = str.substring(str.indexOf("}") + 2);
-        String[] dateStr = str.split("-");
-        Integer year = Convert.toInt(dateStr[0]);
-        Integer month = Convert.toInt(dateStr[1]);
-        Integer day;
-        //鏄惁鏈夊簵閾篿d
-        if (dateStr.length > 3) {
-            day = Convert.toInt(dateStr[2]);
-            this.storeId = dateStr[3];
-        } else {
-            day = Convert.toInt(dateStr[2]);
-        }
-        Calendar calendar = Calendar.getInstance();
-        calendar.set(Calendar.YEAR, year);
-        calendar.set(Calendar.MONTH, month - 1);
-        calendar.set(Calendar.DAY_OF_MONTH, day);
-        calendar.set(Calendar.HOUR_OF_DAY, 0);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        this.date = calendar.getTime();
-    }
-
-}
diff --git a/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java b/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java
deleted file mode 100644
index bc88236..0000000
--- a/consumer/src/test/java/cn/lili/buyer/test/cart/MemberStatisticsTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package cn.lili.buyer.test.cart;
-
-import cn.lili.timetask.handler.impl.statistics.MemberStatisticsExecute;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-
-
-@ExtendWith(SpringExtension.class)
-@SpringBootTest
-class MemberStatisticsTest {
-
-    @Autowired
-    private MemberStatisticsExecute memberStatisticsExecute;
-
-    @Test
-    void customSetting() {
-        memberStatisticsExecute.execute();
-    }
-}
diff --git a/framework/src/main/java/cn/lili/common/properties/RocketmqCustomProperties.java b/framework/src/main/java/cn/lili/common/properties/RocketmqCustomProperties.java
index cfc001f..2a6e0dc 100644
--- a/framework/src/main/java/cn/lili/common/properties/RocketmqCustomProperties.java
+++ b/framework/src/main/java/cn/lili/common/properties/RocketmqCustomProperties.java
@@ -19,6 +19,12 @@
 @ConfigurationProperties(prefix = "lili.data.rocketmq")
 public class RocketmqCustomProperties {
 
+    /**
+     * 璇勮
+     */
+    private String commentTopic;
+
+    private String commentGroup;
 
     private String promotionTopic;
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java b/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java
new file mode 100644
index 0000000..73873eb
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/constant/RedisKeyExpireConstant.java
@@ -0,0 +1,27 @@
+package cn.lili.modules.lmk.constant;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * redis key杩囨湡鏃堕棿
+ *
+ * @author锛歺p
+ * @date锛�2025/6/25 10:31
+ */
+public class RedisKeyExpireConstant {
+
+    /**
+     * 璇勮鏁�
+     */
+    public static final Long COMMENT_NUM_EXPIRE = 15l;
+
+
+    /**
+     * 杩囨湡鏃堕棿鍗曚綅
+     */
+    public static final TimeUnit EXPIRE_DAY = TimeUnit.DAYS;  // 澶�
+    public static final TimeUnit EXPIRE_SED = TimeUnit.SECONDS;  // 绉�
+    public static final TimeUnit EXPIRE_HOUR = TimeUnit.HOURS;  // 灏忔椂
+    public static final TimeUnit EXPIRE_MINUTES = TimeUnit.MINUTES;  // 鍒嗛挓
+
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java
index b13ac36..3cb1a3b 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/VideoComment.java
@@ -54,6 +54,10 @@
     /** 鐐硅禐鏁伴噺 */
     private Long thumbsUpNum;
 
+    @TableField("thumbs_up_job")
+    /** 鏄惁闇�瑕佸畾鏃朵换鍔℃洿鏂扮偣璧炴暟 */
+    private Boolean thumbsUpJob;
+
     @TableField("user_nickname")
     /** 璇勮浜烘樀绉� */
     private String userNickname;
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CollectTypeNumVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CollectTypeNumVO.java
index 2097361..41ef46c 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CollectTypeNumVO.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/CollectTypeNumVO.java
@@ -10,7 +10,7 @@
 public class CollectTypeNumVO {
 
     /**
-     * 瑙嗛id
+     * id
      */
     private String id;
 
diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java
new file mode 100644
index 0000000..f8374f2
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/ThumbsUpTypeEnum.java
@@ -0,0 +1,45 @@
+package cn.lili.modules.lmk.enums.general;
+
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * 鐐硅禐涓氬姟绫诲瀷
+ *
+ * @author锛歺p
+ * @date锛�2025/5/14 10:30
+ */
+@Getter
+public enum ThumbsUpTypeEnum {
+
+    VIDEO_COMMENT("video_comment", "瑙嗛璇勮"),
+    ;
+
+    private final String value;
+
+
+    private final String desc;
+
+    ThumbsUpTypeEnum(String value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    /**
+     * 鑾峰彇鍚箟
+     *
+     * @param value
+     * @return
+     */
+    public static String getDescByValue(String value) {
+        if (StringUtils.isBlank(value)) {
+            return null;
+        }
+        for (ThumbsUpTypeEnum e : ThumbsUpTypeEnum.values()){
+            if (value.equals(e.getValue())) {
+                return e.getDesc();
+            }
+        }
+        return null;
+    }
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java
index 124dbb0..013bc58 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ThumbsUpRecordMapper.java
@@ -1,6 +1,7 @@
 package cn.lili.modules.lmk.mapper;
 
 import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
+import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import cn.lili.modules.lmk.domain.vo.ThumbsUpRecordVO;
@@ -31,4 +32,10 @@
     */
     IPage getPage(IPage page, @Param("query") ThumbsUpRecordQuery query);
 
+    /**
+     * 缁熻璇勮鐐硅禐鏁伴噺
+     *
+     * @return
+     */
+    List<CollectTypeNumVO> countNumGroupByComment();
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoCommentMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoCommentMapper.java
index a632138..d05610e 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoCommentMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/VideoCommentMapper.java
@@ -54,4 +54,11 @@
      * @return
      */
     List<CollectTypeNumVO> countNumGroupByVideo();
+
+    /**
+     * 鎵归噺鏇存柊瑙嗛璇勮鐐硅禐鏁�
+     *
+     * @param chunk
+     */
+    void updateCommentThumbsUpNumBatch(@Param("list") List<CollectTypeNumVO> chunk);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java
index 0612b04..24a2102 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/ThumbsUpRecordService.java
@@ -4,6 +4,7 @@
 import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.query.ThumbsUpRecordQuery;
+import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
@@ -50,4 +51,10 @@
      */
     Result all();
 
+    /**
+     * 缁熻璇勮鐨勭偣璧炴暟
+     *
+     * @return
+     */
+    List<CollectTypeNumVO> countNumGroupByComment();
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java b/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java
index fd159c4..0825f82 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/VideoCommentService.java
@@ -1,5 +1,6 @@
 package cn.lili.modules.lmk.service;
 
+import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
 import cn.lili.modules.lmk.domain.entity.VideoComment;
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
@@ -82,10 +83,31 @@
     Result thumbsUp(ThumbsUpRecordForm form);
 
     /**
+     * mq鎵ц鐐硅禐璇勮閫昏緫
+     *
+     * @param form
+     */
+    void mqThumbsUp(ThumbsUpRecord form);
+
+    /**
      * 鍙栨秷鐐硅禐璇勮
      *
      * @param form
      * @return
      */
     Result cancelThumbsUp(ThumbsUpRecordForm form);
+
+    /**
+     * mq鐨勫彇娑堢偣璧為�昏緫
+     *
+     * @param form
+     */
+    void mqCancelThumbsUp(ThumbsUpRecordForm form);
+
+    /**
+     * 鎵归噺鏇存柊璇勮鐐硅禐鏁�
+     *
+     * @param numList
+     */
+    void updateCommentThumbsUpNumBatch(List<CollectTypeNumVO> numList);
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java
index dad82ef..44570b1 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ThumbsUpRecordServiceImpl.java
@@ -1,5 +1,6 @@
 package cn.lili.modules.lmk.service.impl;
 
+import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
 import cn.lili.modules.lmk.mapper .ThumbsUpRecordMapper;
@@ -88,4 +89,9 @@
                 .collect(Collectors.toList());
         return Result.ok().data(vos);
     }
+
+    @Override
+    public List<CollectTypeNumVO> countNumGroupByComment() {
+        return baseMapper.countNumGroupByComment();
+    }
 }
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
index fecee7f..6d4047b 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/VideoCommentServiceImpl.java
@@ -6,11 +6,16 @@
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.sensitive.SensitiveWordsFilter;
+import cn.lili.modules.lmk.constant.RedisKeyExpireConstant;
 import cn.lili.modules.lmk.domain.entity.ThumbsUpRecord;
 import cn.lili.modules.lmk.domain.form.ThumbsUpRecordForm;
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import cn.lili.modules.lmk.enums.general.VideoCommentStatusEnum;
 import cn.lili.modules.lmk.service.ThumbsUpRecordService;
+import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
+import cn.lili.rocketmq.tags.CommentTagsEnum;
+import cn.lili.rocketmq.tags.OrderTagsEnum;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import cn.lili.modules.lmk.domain.entity.VideoComment;
 import cn.lili.modules.lmk.mapper.VideoCommentMapper;
@@ -22,7 +27,10 @@
 import cn.lili.modules.lmk.domain.form.VideoCommentForm;
 import cn.lili.modules.lmk.domain.vo.VideoCommentVO;
 import cn.lili.modules.lmk.domain.query.VideoCommentQuery;
+import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.rocketmq.client.producer.DefaultMQProducer;
+import org.apache.rocketmq.common.MixAll;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
@@ -176,40 +184,75 @@
 
     @Override
     public Result thumbsUp(ThumbsUpRecordForm form) {
-        boolean exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper())
-                .eq(ThumbsUpRecord::getRefId, form.getRefId())
-                .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId())
-                .exists();
-        if (exists) {
-            return Result.ok();
-        }
         ThumbsUpRecord record = ThumbsUpRecordForm.getEntityByForm(form, null);
         record.setUserId(UserContext.getCurrentUserId());
-        thumbsUpRecordService.save(record);
-        if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()))) {
-            cache.incr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()));
-        } else {
-            VideoComment comment = baseMapper.selectById(form.getRefId());
-            if (Objects.nonNull(comment)) {
-                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, EXPIRE_TIME, TimeUnit.DAYS);
-            }
-        }
-        // TODO 浣跨敤rocketmq寮傛鍐欏叆鍒癿ysql涓�
-//        rocketMQTemplate.asyncSend();
+
+        // 璧癿q寮傛澶勭悊
+        String destination = rocketmqCustomProperties.getCommentTopic() + ":" + CommentTagsEnum.THUMBS_UP.name();
+        rocketMQTemplate.asyncSend(destination, JSON.toJSONString(record), RocketmqSendCallbackBuilder.commonCallback());
         return Result.ok();
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void mqThumbsUp(ThumbsUpRecord record) {
+        boolean exists = new LambdaQueryChainWrapper<>(thumbsUpRecordService.getBaseMapper())
+                .eq(ThumbsUpRecord::getRefId, record.getRefId())
+                .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId())
+                .exists();
+        if (exists) {
+            return;
+        }
+        thumbsUpRecordService.save(record);
+        VideoComment comment = this.getById(record.getRefId());
+        if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()))) {
+            cache.incr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(record.getRefId()));
+        } else {
+            if (Objects.nonNull(comment)) {
+                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() + 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
+            }
+        }
+        // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁�
+        if (Objects.nonNull(comment) && ! comment.getThumbsUpJob()) {
+            new LambdaUpdateChainWrapper<>(baseMapper)
+                    .eq(VideoComment::getId, comment.getId())
+                    .set(VideoComment::getThumbsUpJob, Boolean.TRUE)
+                    .update();
+        }
+    }
+
+    @Override
     public Result cancelThumbsUp(ThumbsUpRecordForm form) {
+        // 璧癿q寮傛澶勭悊
+        String destination = rocketmqCustomProperties.getCommentTopic() + ":" + CommentTagsEnum.CANCEL_THUMBS_UP.name();
+        rocketMQTemplate.asyncSend(destination, JSON.toJSONString(form), RocketmqSendCallbackBuilder.commonCallback());
+        return Result.ok();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void mqCancelThumbsUp(ThumbsUpRecordForm form) {
         new LambdaUpdateChainWrapper<>(thumbsUpRecordService.getBaseMapper())
                 .eq(ThumbsUpRecord::getRefId, form.getRefId())
                 .eq(ThumbsUpRecord::getThumbsUpType, form.getThumbsUpType())
                 .eq(ThumbsUpRecord::getUserId, UserContext.getCurrentUserId())
                 .remove();
         // redis鏁伴噺鍑忎竴
-        cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()));
-        // TODO mq寮傛鍚屾鍒癿ysql
-        return Result.ok();
+        VideoComment comment = this.getById(form.getRefId());
+        if (cache.exist(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()))) {
+            cache.decr(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(form.getRefId()));
+        } else {
+            if (Objects.nonNull(comment)) {
+                cache.put(CachePrefix.VIDEO_COMMENT_LIKE_NUM.getPrefixWithId(comment.getId()), comment.getThumbsUpNum() - 1, RedisKeyExpireConstant.COMMENT_NUM_EXPIRE, RedisKeyExpireConstant.EXPIRE_DAY);
+            }
+        }
+        // 鏍囪瘑璇ヨ瘎璁洪渶瑕侀�氳繃瀹氭椂浠诲姟缁熻鐐硅禐鏁�
+        if (Objects.nonNull(comment) && ! comment.getThumbsUpJob()) {
+            new LambdaUpdateChainWrapper<>(baseMapper)
+                    .eq(VideoComment::getId, comment.getId())
+                    .set(VideoComment::getThumbsUpJob, Boolean.TRUE)
+                    .update();
+        }
     }
 
     /**
@@ -228,4 +271,18 @@
         }
         return Long.valueOf((Integer) redisNum);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateCommentThumbsUpNumBatch(List<CollectTypeNumVO> numList) {
+        // 鎸�500鏉℃暟鎹繘琛屾媶鍒�
+        List<List<CollectTypeNumVO>> chunks = ListUtils.partition(numList, 500);
+        for (List<CollectTypeNumVO> chunk : chunks) {
+            baseMapper.updateCommentThumbsUpNumBatch(chunk);
+            new LambdaUpdateChainWrapper<>(baseMapper)
+                    .in(VideoComment::getId, chunk.stream().map(CollectTypeNumVO::getId).collect(Collectors.toList()))
+                    .set(VideoComment::getThumbsUpJob, Boolean.FALSE)
+                    .update();
+        }
+    }
 }
diff --git a/framework/src/main/java/cn/lili/rocketmq/tags/CommentTagsEnum.java b/framework/src/main/java/cn/lili/rocketmq/tags/CommentTagsEnum.java
new file mode 100644
index 0000000..b993f6e
--- /dev/null
+++ b/framework/src/main/java/cn/lili/rocketmq/tags/CommentTagsEnum.java
@@ -0,0 +1,32 @@
+package cn.lili.rocketmq.tags;
+
+/**
+ * rocketmq鐐硅禐tag
+ *
+ * @author paulG
+ * @since 2020/12/9
+ **/
+public enum CommentTagsEnum {
+
+    /**
+     * 鐐硅禐
+     */
+    THUMBS_UP("鐐硅禐"),
+    /**
+     * 鍙栨秷鐐硅禐
+     */
+    CANCEL_THUMBS_UP("璁㈠崟鐘舵�佹敼鍙�");
+
+
+    private final String description;
+
+    CommentTagsEnum(String description) {
+        this.description = description;
+    }
+
+    public String description() {
+        return description;
+    }
+
+
+}
diff --git a/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml
index 674236c..1e1c362 100644
--- a/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/ThumbsUpRecordMapper.xml
@@ -41,4 +41,19 @@
             LTUR.delete_flag = 0
     </select>
 
+
+    <select id="countNumGroupByComment" resultType="cn.lili.modules.lmk.domain.vo.CollectTypeNumVO">
+        SELECT
+               LTUR.ref_id as id,
+               count(LTUR.ref_id) as countNum
+        FROM
+             lmk_thumbs_up_record LTUR
+                INNER JOIN lmk_video_comment LVC ON LTUR.ref_id = LVC.id AND LVC.thumbs_up_job = 1 AND LVC.delete_flag = 0
+        WHERE
+             LTUR.thumbs_up_type = 'video_comment'
+             AND LTUR.delete_flag = 0
+        GROUP BY
+             LTUR.ref_id
+    </select>
+
 </mapper>
diff --git a/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml b/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml
index 759dfc5..2c1c43a 100644
--- a/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/VideoCommentMapper.xml
@@ -155,4 +155,19 @@
               video_id
     </select>
 
+
+    <update id="updateCommentThumbsUpNumBatch">
+        UPDATE lmk_video_comment
+        SET thumbs_up_num = CASE id
+        <foreach collection="list" item="comment">
+            WHEN #{comment.id} THEN #{comment.countNum}
+        </foreach>
+        ELSE thumbs_up_num
+        END
+        WHERE id IN
+        <foreach collection="list" item="comment" open="(" separator="," close=")">
+            #{comment.id}
+        </foreach>
+    </update>
+
 </mapper>
diff --git a/lmk-job/src/main/java/cn/lili/job/VideoJob.java b/lmk-job/src/main/java/cn/lili/job/VideoJob.java
index 7b3b710..9ff9d00 100644
--- a/lmk-job/src/main/java/cn/lili/job/VideoJob.java
+++ b/lmk-job/src/main/java/cn/lili/job/VideoJob.java
@@ -3,6 +3,7 @@
 import cn.lili.modules.lmk.domain.vo.CollectTypeNumVO;
 import cn.lili.modules.lmk.enums.general.CollectTypeEnum;
 import cn.lili.modules.lmk.service.MyCollectService;
+import cn.lili.modules.lmk.service.ThumbsUpRecordService;
 import cn.lili.modules.lmk.service.VideoCommentService;
 import cn.lili.modules.lmk.service.VideoService;
 import com.xxl.job.core.context.XxlJobHelper;
@@ -26,6 +27,7 @@
     private final VideoService videoService;
     private final MyCollectService myCollectService;
     private final VideoCommentService videoCommentService;
+    private final ThumbsUpRecordService thumbsUpRecordService;
 
     /**
      * 瑙嗛鏀惰棌鏁扮粺璁�
@@ -55,4 +57,19 @@
         }
     }
 
+    /**
+     * 瑙嗛璇勮鐐硅禐鏁扮粺璁�
+     *
+     * @throws Exception
+     */
+    @XxlJob("videoCommentThumbsUpNumJob")
+    public void videoCommentThumbsUpNumJob() throws Exception {
+        XxlJobHelper.log("寮�濮嬫墽琛岋細璇勮鐐硅禐鏁扮粺璁�");
+
+        List<CollectTypeNumVO> numList = thumbsUpRecordService.countNumGroupByComment();
+        if (CollectionUtils.isNotEmpty(numList)) {
+            videoCommentService.updateCommentThumbsUpNumBatch(numList);
+        }
+    }
+
 }

--
Gitblit v1.8.0