فهرست منبع

Merge branch 'dev/2024/0715/update-admin-Y' of feifan/mall-backend-admin into master

更新使用注解定时器运行计算程序
Yangzw 11 ماه پیش
والد
کامیت
b7ac43bc8a

+ 22 - 11
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -26,8 +26,11 @@ import cn.newfeifan.mall.module.distri.service.ptprofitlog.PtProfitLogService;
 import cn.newfeifan.mall.module.distri.service.ptprofitlogdetails.PtProfitLogDetailsService;
 import cn.newfeifan.mall.module.distri.service.sharepath.SharePathService;
 import cn.newfeifan.mall.module.distri.service.shopsettlement.ShopSettlementService;
+import cn.newfeifan.mall.module.infra.dal.dataobject.job.JobDO;
+import cn.newfeifan.mall.module.infra.dal.dataobject.job.JobLogDO;
 import cn.newfeifan.mall.module.infra.dal.mysql.job.JobLogMapper;
 import cn.newfeifan.mall.module.infra.dal.mysql.job.JobMapper;
+import cn.newfeifan.mall.module.infra.enums.job.JobLogStatusEnum;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
@@ -197,17 +200,25 @@ public class OrderCalcServiceImpl implements OrderCalcService {
             System.out.println("=================计算程序结束====================");
         }
 
-//        // 不是用的quzt 手动加上日志
-//        JobDO job = jobMapper.selectOne(JobDO::getHandlerName, "tradeOrderAutoCalcJob");
-//        JobLogDO log = new JobLogDO();
-//        log.setBeginTime(LocalDateTime.now());
-//        log.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
-//        log.setJobId(job.getId());
-//        log.setHandlerName(job.getHandlerName());
-//        log.setHandlerParam(job.getHandlerParam());
-//        log.setExecuteIndex(1);
-//
-//        jobLogMapper.insert(log);
+        // 不是用的quzt 手动加上日志
+        JobDO job = jobMapper.selectOne(JobDO::getHandlerName, "tradeOrderAutoCalcJob");
+
+        Long count = jobLogMapper.getJobLogCount(job.getHandlerName());
+
+        // 如果今天有记录并且是成功的那就不加了
+        if(count > 0){
+            return;
+        }
+
+        JobLogDO log = new JobLogDO();
+        log.setBeginTime(LocalDateTime.now());
+        log.setStatus(JobLogStatusEnum.SUCCESS.getStatus());
+        log.setJobId(job.getId());
+        log.setHandlerName(job.getHandlerName());
+        log.setHandlerParam(job.getHandlerParam());
+        log.setExecuteIndex(1);
+
+        jobLogMapper.insert(log);
     }
 
     /**

+ 9 - 0
feifan-module-infra/feifan-module-infra-biz/src/main/java/cn/newfeifan/mall/module/infra/dal/mysql/job/JobLogMapper.java

@@ -5,6 +5,8 @@ import cn.newfeifan.mall.framework.mybatis.core.mapper.BaseMapperX;
 import cn.newfeifan.mall.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.newfeifan.mall.module.infra.controller.admin.job.vo.log.JobLogPageReqVO;
 import cn.newfeifan.mall.module.infra.dal.dataobject.job.JobLogDO;
+import cn.newfeifan.mall.module.infra.enums.job.JobLogStatusEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -40,4 +42,11 @@ public interface JobLogMapper extends BaseMapperX<JobLogDO> {
     @Delete("DELETE FROM infra_job_log WHERE create_time < #{createTime} LIMIT #{limit}")
     Integer deleteByCreateTimeLt(@Param("createTime") LocalDateTime createTime, @Param("limit") Integer limit);
 
+    default Long getJobLogCount(String tradeOrderAutoCalcJob){
+        return selectCount(new LambdaQueryWrapper<JobLogDO>()
+                .eq(JobLogDO::getHandlerName, tradeOrderAutoCalcJob)
+                .eq(JobLogDO::getStatus, JobLogStatusEnum.SUCCESS.getStatus())
+                .apply("date(create_time) = date(now())")
+        );
+    }
 }

+ 42 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/job/order/TestJob.java

@@ -0,0 +1,42 @@
+package cn.newfeifan.mall.module.trade.job.order;
+
+import cn.newfeifan.mall.module.distri.mq.message.order.CalcMessage;
+import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
+import cn.newfeifan.mall.module.distri.mq.message.order.OrderCalcMessage;
+import cn.newfeifan.mall.module.trade.mq.producer.order.DistriOrderProducer;
+import cn.newfeifan.mall.module.trade.service.order.TradeOrderQueryService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Component
+@Slf4j
+public class TestJob {
+
+    @Resource
+    private DistriOrderProducer distriOrderProducer;
+
+    @Resource
+    private TradeOrderQueryService tradeOrderQueryService;
+
+    @Scheduled(cron = "0 0 3 * * ?")
+    public void execute() {
+        //发货七天前订单
+        List<DistriOrderMessage> appTradeOrderDetailRespVos = tradeOrderQueryService.queryAllOrder();
+        List<OrderCalcMessage> orderCalcMessages = tradeOrderQueryService.getOrderCalcMessage(appTradeOrderDetailRespVos);
+
+        //每日订单
+        List<DistriOrderMessage> appTradeOrderDetailRespVos2 = tradeOrderQueryService.queryDailyOrder();
+        List<OrderCalcMessage> orderCalcMessages2 = tradeOrderQueryService.getOrderCalcMessage(appTradeOrderDetailRespVos2);
+
+        CalcMessage calcMessage = CalcMessage.builder().orderCalcMessages(orderCalcMessages).bonusQuotaOrderDO(orderCalcMessages2).distriOrderMessages(appTradeOrderDetailRespVos).build();
+        distriOrderProducer.sendDistriOrderMessage(calcMessage);
+
+        log.info("========执行计算程序============");
+        log.info("定时任务执行时间:{}", LocalDateTime.now());
+    }
+}

+ 2 - 1
feifan-server/src/main/java/cn/newfeifan/mall/server/FeifanServerApplication.java

@@ -2,10 +2,10 @@ package cn.newfeifan.mall.server;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 项目的启动类
- *
  * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
  * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
  * 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
@@ -16,6 +16,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication(scanBasePackages = {"${feifan.info.base-package}.server",
         "${feifan.info.base-package}.module",
         "${feifan.info.base-package}.sale" })
+@EnableScheduling
 public class FeifanServerApplication {
 
     public static void main(String[] args) {