Преглед на файлове

feat: 扫描库表补偿发货单MQ消息

seamew преди 2 години
родител
ревизия
9e2bc0ce5b
променени са 25 файла, в които са добавени 497 реда и са изтрити 20 реда
  1. 2 0
      lottery-application/src/main/java/com/seamew/lottery/application/process/impl/ActivityProcessImpl.java
  2. 77 0
      lottery-application/src/main/java/com/seamew/lottery/application/worker/LotteryXxlJob.java
  3. 9 0
      lottery-domain/src/main/java/com/seamew/lottery/domain/activity/repository/IUserTakeActivityRepository.java
  4. 29 5
      lottery-domain/src/main/java/com/seamew/lottery/domain/activity/service/partake/IActivityPartake.java
  5. 21 0
      lottery-domain/src/main/java/com/seamew/lottery/domain/activity/service/partake/impl/ActivityPartakeImpl.java
  6. 2 1
      lottery-domain/src/main/java/com/seamew/lottery/domain/strategy/service/draw/impl/DrawExecImpl.java
  7. 10 0
      lottery-infrastructure/src/main/java/com/seamew/lottery/infrastructure/dao/IUserStrategyExportDao.java
  8. 22 0
      lottery-infrastructure/src/main/java/com/seamew/lottery/infrastructure/repository/UserTakeActivityRepository.java
  9. 1 1
      lottery-interfaces/src/main/java/com/seamew/lottery/interfaces/facade/LotteryActivityBooth.java
  10. 1 1
      lottery-interfaces/src/main/resources/application.yaml
  11. 7 0
      lottery-interfaces/src/main/resources/mybatis/mapper/UserStrategyExport_Mapper.xml
  12. 15 11
      lottery-interfaces/src/test/java/com/seamew/lottery/test/application/ActivityProcessTest.java
  13. 1 1
      pom.xml
  14. 10 0
      xxl-job/jobhandler/2023-03-02/10.log
  15. 36 0
      xxl-job/jobhandler/2023-03-02/12.log
  16. 29 0
      xxl-job/jobhandler/2023-03-02/13.log
  17. 36 0
      xxl-job/jobhandler/2023-03-02/14.log
  18. 29 0
      xxl-job/jobhandler/2023-03-02/15.log
  19. 36 0
      xxl-job/jobhandler/2023-03-02/16.log
  20. 36 0
      xxl-job/jobhandler/2023-03-02/17.log
  21. 29 0
      xxl-job/jobhandler/2023-03-02/21.log
  22. 36 0
      xxl-job/jobhandler/2023-03-02/22.log
  23. 10 0
      xxl-job/jobhandler/2023-03-02/23.log
  24. 3 0
      xxl-job/jobhandler/2023-03-02/8.log
  25. 10 0
      xxl-job/jobhandler/2023-03-02/9.log

+ 2 - 0
lottery-application/src/main/java/com/seamew/lottery/application/process/impl/ActivityProcessImpl.java

@@ -63,6 +63,8 @@ public class ActivityProcessImpl implements IActivityProcess {
         // 2. 执行抽奖
         DrawResult drawResult = drawExec.doDrawExec(new DrawReq(req.getUId(), strategyId));
         if (Constants.DrawState.FAIL.getCode().equals(drawResult.getDrawState())) {
+            // 未中奖也要将记录锁住
+            activityPartake.lockTackActivity(req.getUId(), req.getActivityId(), takeId);
             return new DrawProcessResult(Constants.ResponseCode.LOSING_DRAW.getCode(), Constants.ResponseCode.LOSING_DRAW.getInfo());
         }
         DrawAwardVO drawAwardVO = drawResult.getDrawAwardInfo();

+ 77 - 0
lottery-application/src/main/java/com/seamew/lottery/application/worker/LotteryXxlJob.java

@@ -1,14 +1,22 @@
 package com.seamew.lottery.application.worker;
 
 import com.alibaba.fastjson2.JSON;
+import com.seamew.lottery.application.mq.producer.KafkaProducer;
 import com.seamew.lottery.common.Constants;
 import com.seamew.lottery.common.Result;
 import com.seamew.lottery.domain.activity.model.vo.ActivityVO;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
 import com.seamew.lottery.domain.activity.service.deploy.IActivityDeploy;
+import com.seamew.lottery.domain.activity.service.partake.IActivityPartake;
 import com.seamew.lottery.domain.activity.service.stateflow.IStateHandler;
+import com.seamew.middleware.db.router.strategy.IDBRouterStrategy;
+import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.kafka.support.SendResult;
 import org.springframework.stereotype.Component;
+import org.springframework.util.concurrent.ListenableFuture;
+import org.springframework.util.concurrent.ListenableFutureCallback;
 
 import javax.annotation.Resource;
 import java.util.Date;
@@ -27,9 +35,19 @@ public class LotteryXxlJob {
     @Resource
     private IActivityDeploy activityDeploy;
 
+    @Resource
+    private IActivityPartake activityPartake;
+
     @Resource
     private IStateHandler stateHandler;
 
+    @Resource
+    private IDBRouterStrategy dbRouter;
+
+
+    @Resource
+    private KafkaProducer kafkaProducer;
+
     @XxlJob("lotteryActivityStateJobHandler")
     public void lotteryActivityStateJobHandler() throws Exception {
         log.info("扫描活动状态 Begin");
@@ -69,4 +87,63 @@ public class LotteryXxlJob {
         log.info("扫描活动状态 End");
 
     }
+
+    @XxlJob("lotteryOrderMQStateJobHandler")
+    public void lotteryOrderMQStateJobHandler() throws Exception {
+        // 验证参数
+        String jobParam = XxlJobHelper.getJobParam();
+        if (null == jobParam) {
+            log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 错误 params is null");
+            return;
+        }
+
+        // 获取分布式任务配置参数信息 参数配置格式:1,2,3 也可以是指定扫描一个,也可以配置多个库,按照部署的任务集群进行数量配置,均摊分别扫描效率更高
+        String[] params = jobParam.split(",");
+        log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 开始 params:{}", JSON.toJSONString(params));
+
+        if (params.length == 0) {
+            log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 结束 params is null");
+            return;
+        }
+
+        // 获取分库分表配置下的分表数
+        int tbCount = dbRouter.tbCount();
+
+        // 循环获取指定扫描库
+        for (String param : params) {
+            // 获取当前任务扫描的指定分库
+            int dbCount = Integer.parseInt(param);
+
+            // 判断配置指定扫描库数,是否存在
+            if (dbCount > dbRouter.dbCount()) {
+                log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 结束 dbCount not exist");
+                continue;
+            }
+
+            // 循环扫描对应表
+            for (int i = 0; i < tbCount; i++) {
+
+                // 扫描库表数据
+                List<InvoiceVO> invoiceVOList = activityPartake.scanInvoiceMqState(dbCount, i);
+                log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 扫描库:{} 扫描表:{} 扫描数:{}", dbCount, i, invoiceVOList.size());
+
+                // 补偿 MQ 消息
+                for (InvoiceVO invoiceVO : invoiceVOList) {
+                    kafkaProducer
+                            .sendLotteryInvoice(invoiceVO)
+                            .addCallback(success -> {
+                                // MQ 消息发送完成,更新数据库表 user_strategy_export.mq_state = 1
+                                activityPartake.updateInvoiceMqState(invoiceVO.getUId(), invoiceVO.getOrderId(), Constants.MQState.COMPLETE.getCode());
+                            }, error -> {
+                                // MQ 消息发送失败,更新数据库表 user_strategy_export.mq_state = 2 【等待定时任务扫码补偿MQ消息】
+                                activityPartake.updateInvoiceMqState(invoiceVO.getUId(), invoiceVO.getOrderId(), Constants.MQState.FAIL.getCode());
+                            });
+                }
+            }
+
+        }
+
+        log.info("扫描用户抽奖奖品发放MQ状态[Table = 2*4] 完成 param:{}", JSON.toJSONString(params));
+
+    }
 }

+ 9 - 0
lottery-domain/src/main/java/com/seamew/lottery/domain/activity/repository/IUserTakeActivityRepository.java

@@ -1,9 +1,11 @@
 package com.seamew.lottery.domain.activity.repository;
 
 import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
 import com.seamew.lottery.domain.activity.model.vo.UserTakeActivityVO;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: seamew
@@ -76,4 +78,11 @@ public interface IUserTakeActivityRepository {
      * @param mqState MQ 发送状态
      */
     void updateInvoiceMqState(String uId, Long orderId, Integer mqState);
+
+    /**
+     * 扫描发货单 MQ 状态,把未发送 MQ 的单子扫描出来,做补偿
+     *
+     * @return 发货单
+     */
+    List<InvoiceVO> scanInvoiceMqState();
 }

+ 29 - 5
lottery-domain/src/main/java/com/seamew/lottery/domain/activity/service/partake/IActivityPartake.java

@@ -4,6 +4,9 @@ import com.seamew.lottery.common.Result;
 import com.seamew.lottery.domain.activity.model.req.PartakeReq;
 import com.seamew.lottery.domain.activity.model.res.PartakeResult;
 import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
+
+import java.util.List;
 
 /**
  * @Author: seamew
@@ -15,23 +18,44 @@ import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
 public interface IActivityPartake {
     /**
      * 参与活动
+     *
      * @param req 入参
-     * @return    领取结果
+     * @return 领取结果
      */
     PartakeResult doPartake(PartakeReq req);
 
     /**
      * 保存奖品单
+     *
      * @param drawOrder 奖品单
-     * @return          保存结果
+     * @return 保存结果
      */
     Result recordDrawOrder(DrawOrderVO drawOrder);
 
     /**
      * 更新发货单MQ状态
-     *  @param uId      用户ID
-     * @param orderId   订单ID
-     * @param mqState   MQ 发送状态
+     *
+     * @param uId     用户ID
+     * @param orderId 订单ID
+     * @param mqState MQ 发送状态
      */
     void updateInvoiceMqState(String uId, Long orderId, Integer mqState);
+
+    /**
+     * 锁定抽奖记录
+     *
+     * @param uId 用户ID
+     * @param activityId 活动ID
+     * @param takeId 活动领取ID
+     */
+    void lockTackActivity(String uId, Long activityId, Long takeId);
+
+    /**
+     * 扫描发货单 MQ 状态,把未发送 MQ 的单子扫描出来,做补偿
+     *
+     * @param dbCount 指定分库
+     * @param tbCount 指定分表
+     * @return 发货单
+     */
+    List<InvoiceVO> scanInvoiceMqState(int dbCount, int tbCount);
 }

+ 21 - 0
lottery-domain/src/main/java/com/seamew/lottery/domain/activity/service/partake/impl/ActivityPartakeImpl.java

@@ -5,6 +5,7 @@ import com.seamew.lottery.common.Result;
 import com.seamew.lottery.domain.activity.model.req.PartakeReq;
 import com.seamew.lottery.domain.activity.model.vo.ActivityBillVO;
 import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
 import com.seamew.lottery.domain.activity.model.vo.UserTakeActivityVO;
 import com.seamew.lottery.domain.activity.repository.IUserTakeActivityRepository;
 import com.seamew.lottery.domain.activity.service.partake.BaseActivityPartake;
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.support.TransactionTemplate;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -138,8 +140,27 @@ public class ActivityPartakeImpl extends BaseActivityPartake {
         }
     }
 
+    @Override
+    public void lockTackActivity(String uId, Long activityId, Long takeId) {
+        userTakeActivityRepository.lockTackActivity(uId, activityId, takeId);
+    }
+
     @Override
     public void updateInvoiceMqState(String uId, Long orderId, Integer mqState) {
         userTakeActivityRepository.updateInvoiceMqState(uId, orderId, mqState);
     }
+
+    @Override
+    public List<InvoiceVO> scanInvoiceMqState(int dbCount, int tbCount) {
+        try {
+            // 设置路由
+            dbRouter.setDBKey(dbCount);
+            dbRouter.setTBKey(tbCount);
+
+            // 查询数据
+            return userTakeActivityRepository.scanInvoiceMqState();
+        } finally {
+            dbRouter.clear();
+        }
+    }
 }

+ 2 - 1
lottery-domain/src/main/java/com/seamew/lottery/domain/strategy/service/draw/impl/DrawExecImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
 import com.seamew.lottery.domain.strategy.service.algorithm.IDrawAlgorithm;
 import com.seamew.lottery.domain.strategy.service.draw.AbstractDrawBase;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -32,7 +33,7 @@ public class DrawExecImpl extends AbstractDrawBase {
         String awardId = drawAlgorithm.randomDraw(strategyId, excludeAwardIds);
 
         // 判断抽奖结果
-        if (null == awardId) {
+        if (StringUtils.isEmpty(awardId)) {
             return null;
         }
 

+ 10 - 0
lottery-infrastructure/src/main/java/com/seamew/lottery/infrastructure/dao/IUserStrategyExportDao.java

@@ -4,6 +4,8 @@ import com.seamew.lottery.infrastructure.po.UserStrategyExport;
 import com.seamew.middleware.db.router.annotation.DBRouter;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @Author: seamew
  * @Title: IUserStrategyExportDao
@@ -45,4 +47,12 @@ public interface IUserStrategyExportDao {
      */
     @DBRouter(splitTable = true)
     void updateInvoiceMqState(UserStrategyExport userStrategyExport);
+
+    /**
+     * 扫描发货单 MQ 状态,把未发送 MQ 的单子扫描出来,做补偿
+     *
+     * @return 发货单
+     */
+    @DBRouter(splitTable = true)
+    List<UserStrategyExport> scanInvoiceMqState();
 }

+ 22 - 0
lottery-infrastructure/src/main/java/com/seamew/lottery/infrastructure/repository/UserTakeActivityRepository.java

@@ -2,6 +2,7 @@ package com.seamew.lottery.infrastructure.repository;
 
 import com.seamew.lottery.common.Constants;
 import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
 import com.seamew.lottery.domain.activity.model.vo.UserTakeActivityVO;
 import com.seamew.lottery.domain.activity.repository.IUserTakeActivityRepository;
 import com.seamew.lottery.infrastructure.dao.IUserStrategyExportDao;
@@ -13,7 +14,9 @@ import com.seamew.lottery.infrastructure.po.UserTakeActivityCount;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Author: seamew
@@ -136,4 +139,23 @@ public class UserTakeActivityRepository implements IUserTakeActivityRepository {
         userStrategyExportDao.updateInvoiceMqState(userStrategyExport);
     }
 
+    @Override
+    public List<InvoiceVO> scanInvoiceMqState() {
+        // 查询发送MQ失败和超时30分钟,未发送MQ的数据
+        List<UserStrategyExport> userStrategyExportList = userStrategyExportDao.scanInvoiceMqState();
+        // 转换对象
+        List<InvoiceVO> invoiceVOList = new ArrayList<>(userStrategyExportList.size());
+        for (UserStrategyExport userStrategyExport : userStrategyExportList) {
+            InvoiceVO invoiceVO = new InvoiceVO();
+            invoiceVO.setUId(userStrategyExport.getUId());
+            invoiceVO.setOrderId(userStrategyExport.getOrderId());
+            invoiceVO.setAwardId(userStrategyExport.getAwardId());
+            invoiceVO.setAwardType(userStrategyExport.getAwardType());
+            invoiceVO.setAwardName(userStrategyExport.getAwardName());
+            invoiceVO.setAwardContent(userStrategyExport.getAwardContent());
+            invoiceVOList.add(invoiceVO);
+        }
+        return invoiceVOList;
+    }
+
 }

+ 1 - 1
lottery-interfaces/src/main/java/com/seamew/lottery/interfaces/facade/LotteryActivityBooth.java

@@ -43,7 +43,7 @@ public class LotteryActivityBooth implements ILotteryActivityBooth {
             // 1. 执行抽奖
             DrawProcessResult drawProcessResult = activityProcess.doDrawProcess(new DrawProcessReq(drawReq.getUId(), drawReq.getActivityId()));
             if (!Constants.ResponseCode.SUCCESS.getCode().equals(drawProcessResult.getCode())) {
-                log.error("抽奖,失败(抽奖过程异常) uId:{} activityId:{}", drawReq.getUId(), drawReq.getActivityId());
+                log.error("抽奖结果未中奖(抽奖过程异常) uId:{} activityId:{}", drawReq.getUId(), drawReq.getActivityId());
                 return new DrawRes(drawProcessResult.getCode(), drawProcessResult.getInfo());
             }
 

+ 1 - 1
lottery-interfaces/src/main/resources/application.yaml

@@ -55,7 +55,7 @@ xxl:
       appname: lottery-job
       ip:
       port: 9998
-      logpath: ./xxl-job/jobhandler
+      logpath: ../xxl-job/jobhandler
       logretentiondays: 50
     accessToken: default_token
 

+ 7 - 0
lottery-interfaces/src/main/resources/mybatis/mapper/UserStrategyExport_Mapper.xml

@@ -55,4 +55,11 @@
           AND order_id = #{orderId}
     </update>
 
+    <select id="scanInvoiceMqState" resultType="com.seamew.lottery.infrastructure.po.UserStrategyExport">
+        SELECT u_id, order_id, award_id, award_type, award_name, award_content
+        FROM user_strategy_export
+        WHERE mq_state = 2
+           OR (mq_state = 0 AND now() - create_time > 1800000)
+    </select>
+
 </mapper>

+ 15 - 11
lottery-interfaces/src/test/java/com/seamew/lottery/test/application/ActivityProcessTest.java

@@ -5,6 +5,7 @@ import com.seamew.lottery.application.process.IActivityProcess;
 import com.seamew.lottery.application.process.req.DrawProcessReq;
 import com.seamew.lottery.application.process.res.DrawProcessResult;
 import com.seamew.lottery.common.Constants;
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
 import com.seamew.lottery.domain.activity.service.partake.IActivityPartake;
 import com.seamew.middleware.db.router.strategy.IDBRouterStrategy;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +16,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @Author: seamew
@@ -52,17 +54,19 @@ public class ActivityProcessTest {
 
     @Test
     public void test_router() throws Exception {
-        DrawProcessReq req = new DrawProcessReq();
-        req.setUId("fustack");
-        req.setActivityId(100001L);
-        DrawProcessResult drawProcessResult = activityProcess.doDrawProcess(req);
-
-        log.info("请求入参:{}", JSON.toJSONString(req));
-        log.info("测试结果:{}", JSON.toJSONString(drawProcessResult));
-
-        while (true) {
-            Thread.sleep(30000);
-        }
+        // DrawProcessReq req = new DrawProcessReq();
+        // req.setUId("fustack");
+        // req.setActivityId(100001L);
+        // DrawProcessResult drawProcessResult = activityProcess.doDrawProcess(req);
+        //
+        // log.info("请求入参:{}", JSON.toJSONString(req));
+        // log.info("测试结果:{}", JSON.toJSONString(drawProcessResult));
+        //
+        // while (true) {
+        //     Thread.sleep(30000);
+        // }
+        List<InvoiceVO> invoiceVOList = activityPartake.scanInvoiceMqState(1, 0);
+        log.info("size:{}", invoiceVOList.size());
     }
 
     @Test

+ 1 - 1
pom.xml

@@ -102,7 +102,7 @@
             <dependency>
                 <groupId>com.seamew</groupId>
                 <artifactId>db-router-spring-boot-starter</artifactId>
-                <version>1.1-SNAPSHOT</version>
+                <version>1.2-SNAPSHOT</version>
             </dependency>
         </dependencies>
     </dependencyManagement>

+ 10 - 0
xxl-job/jobhandler/2023-03-02/10.log

@@ -0,0 +1,10 @@
+2023-03-02 10:31:11 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677724271650] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 10:33:50 [com.xxl.job.core.thread.JobThread#run]-[179]-[xxl-job, JobThread-3-1677724271650] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
+2023-03-02 10:33:50 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 10:33:56 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677724271650] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 10:33:56 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677724271650] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 36 - 0
xxl-job/jobhandler/2023-03-02/12.log

@@ -0,0 +1,36 @@
+2023-03-02 10:54:56 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677725696702] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 10:57:13 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677725696702] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 10:57:13 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 10:58:02 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677725696702] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 10:58:02 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677725696702] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 29 - 0
xxl-job/jobhandler/2023-03-02/13.log

@@ -0,0 +1,29 @@
+2023-03-02 10:58:20 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677725900737] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 10:58:40 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677725900737] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 10:58:40 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

+ 36 - 0
xxl-job/jobhandler/2023-03-02/14.log

@@ -0,0 +1,36 @@
+2023-03-02 10:59:01 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677725900737] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:04:05 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677725900737] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:04:05 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 11:04:05 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677725900737] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 11:04:05 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677725900737] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 29 - 0
xxl-job/jobhandler/2023-03-02/15.log

@@ -0,0 +1,29 @@
+2023-03-02 11:04:23 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677726263800] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:04:32 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726263800] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:04:32 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

+ 36 - 0
xxl-job/jobhandler/2023-03-02/16.log

@@ -0,0 +1,36 @@
+2023-03-02 11:04:43 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677726263800] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:05:08 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726263800] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:05:08 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 11:05:08 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677726263800] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 11:05:08 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726263800] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 36 - 0
xxl-job/jobhandler/2023-03-02/17.log

@@ -0,0 +1,36 @@
+2023-03-02 11:05:23 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677726323526] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:05:23 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726323526] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:05:23 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 11:06:10 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677726323526] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 11:06:10 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726323526] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 29 - 0
xxl-job/jobhandler/2023-03-02/21.log

@@ -0,0 +1,29 @@
+2023-03-02 11:07:11 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677726431458] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:07:11 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726431458] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:07:11 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

+ 36 - 0
xxl-job/jobhandler/2023-03-02/22.log

@@ -0,0 +1,36 @@
+2023-03-02 11:07:54 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677726431458] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 11:07:54 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726431458] <br>----------- JobThread Exception:java.lang.reflect.InvocationTargetException
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:166)
+Caused by: java.lang.NullPointerException
+	at com.seamew.middleware.db.router.strategy.impl.DBRouterStrategyHashCode.doRouter(DBRouterStrategyHashCode.java:30)
+	at com.seamew.middleware.db.router.DBRouterJoinPoint.doRouter(DBRouterJoinPoint.java:61)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
+	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
+	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)
+	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
+	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
+	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
+	at com.sun.proxy.$Proxy90.scanInvoiceMqState(Unknown Source)
+	at com.seamew.lottery.infrastructure.repository.UserTakeActivityRepository.scanInvoiceMqState(UserTakeActivityRepository.java:145)
+	at com.seamew.lottery.domain.activity.service.partake.impl.ActivityPartakeImpl.scanInvoiceMqState(ActivityPartakeImpl.java:156)
+	at com.seamew.lottery.application.worker.LotteryXxlJob.lotteryOrderMQStateJobHandler(LotteryXxlJob.java:127)
+	... 6 more
+<br>----------- xxl-job job execute end(error) -----------
+2023-03-02 11:07:54 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 11:08:34 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677726431458] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 11:08:34 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677726431458] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 10 - 0
xxl-job/jobhandler/2023-03-02/23.log

@@ -0,0 +1,10 @@
+2023-03-02 11:08:03 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-2-1677726483254] <br>----------- xxl-job job execute start -----------<br>----------- Param:
+2023-03-02 11:08:04 [com.xxl.job.core.thread.JobThread#run]-[179]-[xxl-job, JobThread-2-1677726483254] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
+2023-03-02 11:08:04 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 11:08:34 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-2-1677726483254] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 11:08:34 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-2-1677726483254] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------

+ 3 - 0
xxl-job/jobhandler/2023-03-02/8.log

@@ -0,0 +1,3 @@
+2023-03-02 10:28:27 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677724107980] <br>----------- xxl-job job execute start -----------<br>----------- Param:1
+2023-03-02 10:28:28 [com.xxl.job.core.thread.JobThread#run]-[179]-[xxl-job, JobThread-3-1677724107980] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
+2023-03-02 10:28:28 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.

+ 10 - 0
xxl-job/jobhandler/2023-03-02/9.log

@@ -0,0 +1,10 @@
+2023-03-02 10:29:11 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1677724107980] <br>----------- xxl-job job execute start -----------<br>----------- Param:1,2
+2023-03-02 10:29:55 [com.xxl.job.core.thread.JobThread#run]-[179]-[xxl-job, JobThread-3-1677724107980] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
+2023-03-02 10:29:55 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
+2023-03-02 10:30:00 [com.xxl.job.core.thread.JobThread#run]-[194]-[xxl-job, JobThread-3-1677724107980] <br>----------- JobThread toStop, stopReason:web container destroy and kill the job.
+2023-03-02 10:30:00 [com.xxl.job.core.thread.JobThread#run]-[204]-[xxl-job, JobThread-3-1677724107980] <br>----------- JobThread Exception:java.lang.InterruptedException
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
+	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
+	at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
+	at com.xxl.job.core.thread.JobThread.run(JobThread.java:114)
+<br>----------- xxl-job job execute end(error) -----------