Przeglądaj źródła

活动通知消息生成调整

cup 2 lat temu
rodzic
commit
3d61ce9691

+ 56 - 3
mp-quartz/src/main/java/com/qs/mp/quartz/task/MarketingTask.java

@@ -105,11 +105,64 @@ public class MarketingTask {
 
 
     /**
-     * 发送活动开始通知
+     * 活动通知消息生成
+     * @param type 消息类型,1活动开奖通知,2活动开始通知
      */
-    public void sendMessage() {
+    public void sendMessage(Integer type) {
         MarketingTask proxy = (MarketingTask) AopContext.currentProxy();
-        proxy.saveMarketingMsg();
+        if (type == 1) {
+            proxy.saveMarketingLotteryMsg();
+        } else if (type == 2) {
+            proxy.saveMarketingMsg();
+        }
+    }
+
+    /**
+     * 生成开奖发送消息
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void saveMarketingLotteryMsg() {
+        // 获取已开奖,且未发送开奖通知的活动
+        List<Marketing> marketingList = marketingService.list(new LambdaQueryWrapper<Marketing>()
+            .eq(Marketing::getTriggerStatus, 1)
+            .eq(Marketing::getIsOn, MarketingStatusEnum.ON.getValue())
+            .eq(Marketing::getIsSendLottery, 0));
+        if (CollectionUtils.isEmpty(marketingList)) {
+            return;
+        }
+
+        for (Marketing marketing : marketingList) {
+            // 保存开奖消息
+            // 获取所有的参与用户的用户id去重
+            List<MarketingUserCode> sendMsgUserList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
+                .select(MarketingUserCode::getUserId)
+                .eq(MarketingUserCode::getMarketingId, marketing.getId())
+                .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
+                .groupBy(MarketingUserCode::getUserId));
+            if (CollectionUtils.isEmpty(sendMsgUserList)) {
+                marketingService.update(new LambdaUpdateWrapper<Marketing>()
+                    .set(Marketing::getIsSendLottery, 1)
+                    .eq(Marketing::getId, marketing.getId()));
+                continue;
+            }
+            List<MarketingMsg> marketingMsgList = new ArrayList<>();
+            for (MarketingUserCode marketingUserCode : sendMsgUserList) {
+                // 封装开奖订阅消息
+                MarketingMsg marketingMsg = new MarketingMsg();
+                marketingMsg.setType(1);
+                marketingMsg.setMarketingId(marketing.getId());
+                marketingMsg.setContext(marketing.getTitle());
+                marketingMsg.setUserId(marketingUserCode.getUserId());
+                marketingMsgList.add(marketingMsg);
+            }
+            boolean rtn = marketingMsgService.saveBatch(marketingMsgList);
+            Assert.isTrue(rtn, "保存活动开奖消息失败。marketingId:" + marketing.getId());
+
+            rtn = marketingService.update(new LambdaUpdateWrapper<Marketing>()
+                .set(Marketing::getIsSendLottery, 1)
+                .eq(Marketing::getId, marketing.getId()));
+            Assert.isTrue(rtn, "更新活动开奖信息发送状态失败。marketingId:" + marketing.getId());
+        }
 
     }
 

+ 4 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/Marketing.java

@@ -105,6 +105,10 @@ public class Marketing implements Serializable {
     @TableField("is_send")
     private Integer isSend;
 
+    @ApiModelProperty("是否发送开奖通知:0未发送,1已发送")
+    @TableField("is_send_lottery")
+    private Integer isSendLottery;
+
     /**
      * 创建时间
      */