Răsfoiți Sursa

通知发送

cup 2 ani în urmă
părinte
comite
195606a124

+ 53 - 0
mp-quartz/src/main/java/com/qs/mp/quartz/task/MarketingTask.java

@@ -1,6 +1,7 @@
 package com.qs.mp.quartz.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.qs.mp.admin.domain.Marketing;
 import com.qs.mp.admin.service.IMarketingAwardsService;
@@ -39,6 +40,8 @@ public class MarketingTask {
 
     public static final String MARKETING_LOTTERY_KEY = "MARKETING_LOTTERY_KEY:%s";
 
+    public static final String MARKETING_SEND_KEY = "MARKETING_SEND_KEY";
+
 
     @Autowired
     private DistributedLocker distributedLocker;
@@ -95,6 +98,56 @@ public class MarketingTask {
             }
         }
 
+    }
+
+
+    /**
+     * 发送活动开始通知
+     */
+    public void sendMessage() {
+        // 加锁防止频繁发送
+        if (!distributedLocker.tryLock(MARKETING_SEND_KEY)) {
+            return;
+        }
+
+        try{
+            // 获取开始时间小于等于当前时间且未发开始通知的活动
+            Date now = DateUtils.getNowDate();
+            List<Marketing> marketingList = marketingService.list(new LambdaQueryWrapper<Marketing>()
+                    .eq(Marketing::getTriggerStatus, 0)
+                    .eq(Marketing::getIsOn, MarketingStatusEnum.ON.getValue())
+                    .eq(Marketing::getIsSend, 0)
+                    .le(Marketing::getStartTime, now));
+            if (CollectionUtils.isEmpty(marketingList)) {
+                return;
+            }
+
+            // 获取所有参与过活动的普通用户
+            List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
+                    .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue()));
+            if (CollectionUtils.isEmpty(userCodeList)) {
+                return;
+            }
+
+            for (Marketing marketing : marketingList) {
+                for (MarketingUserCode marketingUserCode : userCodeList) {
+                    // 发送开始订阅通知
+                    wxSubscribeMessage.sendMarketingStart(marketingUserCode.getUserId(), marketing);
+                }
+
+                // 更新活动通知发送状态
+                marketingService.update(new LambdaUpdateWrapper<Marketing>()
+                        .set(Marketing::getIsSend, 1)
+                        .eq(Marketing::getId, marketing.getId()));
+            }
+
+
+        } finally {
+            // 释放锁
+            distributedLocker.unlock(MARKETING_SEND_KEY);
+        }
+
+
 
 
     }

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

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

+ 8 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -17,6 +17,7 @@ import com.qs.mp.common.enums.*;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.bean.BeanUtils;
+import com.qs.mp.framework.service.IWxSubscribeMessage;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.system.service.id.BizIdGenerator;
@@ -93,6 +94,10 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     private BizIdGenerator bizIdGenerator;
 
 
+    @Autowired
+    private IWxSubscribeMessage wxSubscribeMessage;
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void lottery(Marketing marketing) {
@@ -355,6 +360,9 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         // 保存助力信息
         marketingUserCodeService.save(marketingUserCode);
 
+        // 给被助力人发送成功消息
+        wxSubscribeMessage.sendMarketingHelp(helpedUserId, marketing);
+
         // 增加活动参与人数
         int userCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
                 .eq(MarketingUserCode::getMarketingId, marketing.getId())

+ 44 - 2
mp-service/src/main/java/com/qs/mp/framework/domain/WxSubscribeMessage.java

@@ -78,11 +78,53 @@ public class WxSubscribeMessage {
 
 
     /**
-     * 活动开奖消息
+     * 活动助力成功通知消息
+     * @param marketing
      */
+    public void buildMarketingHelpSuccessMessage(Marketing marketing){
+        template_id = "92xxL8XTRPLROyNUtmN04OT0kyq4iwSCH3sz-j6zbZs";
+        page = "/packageOperate/activity/index?id=" + marketing.getId();
+
+        /**
+         * 活动名称
+         * {{thing1.DATA}}
+         *
+         * 温馨提示
+         * {{thing3.DATA}}
+         */
+        data.put("thing1", new WeappDataValue(marketing.getTitle()));
+        data.put("thing3", new WeappDataValue("获得一个抽奖码,点击查看>>"));
+    }
+
+
+
+    /**
+     * 活动开始提醒消息
+     * @param marketing
+     */
+    public void buildMarketingStartSuccessMessage(Marketing marketing){
+        template_id = "FGcPOV1j9ApESr3VUlWjFr6E1vF4X_h0LLN82T2CLL0";
+        page = "/pages/activity/index";
+
+        /**
+         * 活动名称
+         * {{thing1.DATA}}
+         *
+         * 温馨提示
+         * {{thing5.DATA}}
+         */
+        data.put("thing1", new WeappDataValue(marketing.getTitle()));
+        data.put("thing5", new WeappDataValue("点击马上参与>>"));
+    }
+
+
+
+        /**
+         * 活动开奖消息
+         */
     public void buildMarketingLotterySuccessMessage(Marketing marketing){
         template_id = "3y_My-yRmqmGd3-f-vAwNaK4LQeehzXBSNDi_5wcnFI";
-//        page = "/pages/bills/detail?id=" + merchantBill.getBillId() + "&custId=" + merchantBill.getCustId();
+        page = "/packageOperate/activity/record?id=" + marketing.getId();
         /**
          * 活动名称
          * {{thing1.DATA}}

+ 10 - 0
mp-service/src/main/java/com/qs/mp/framework/service/IWxSubscribeMessage.java

@@ -17,5 +17,15 @@ public interface IWxSubscribeMessage {
      */
     public boolean sendMarketingLottery(Long userId, Marketing marketing);
 
+    /**
+     * 活动开始提醒消息
+     */
+    public boolean sendMarketingStart(Long userId, Marketing marketing);
+
+    /**
+     * 助力成功提醒消息
+     */
+    public boolean sendMarketingHelp(Long userId, Marketing marketing);
+
 
 }

+ 16 - 0
mp-service/src/main/java/com/qs/mp/framework/service/impl/WxSubscribeMessageImpl.java

@@ -41,6 +41,22 @@ public class WxSubscribeMessageImpl implements IWxSubscribeMessage {
   @Value("${miniprogram.state}")
   private String state;
 
+  @Override
+  public boolean sendMarketingStart(Long userId, Marketing marketing) {
+    String openId = getOpenIdByUserId(userId);
+    WxSubscribeMessage wxSubscribeMessage = new WxSubscribeMessage(userAppId, openId, state);
+    wxSubscribeMessage.buildMarketingStartSuccessMessage(marketing);
+    return this.sendNotify(userId, marketing.getId().toString(), wxSubscribeMessage);
+  }
+
+  @Override
+  public boolean sendMarketingHelp(Long userId, Marketing marketing) {
+    String openId = getOpenIdByUserId(userId);
+    WxSubscribeMessage wxSubscribeMessage = new WxSubscribeMessage(userAppId, openId, state);
+    wxSubscribeMessage.buildMarketingHelpSuccessMessage(marketing);
+    return this.sendNotify(userId, marketing.getId().toString(), wxSubscribeMessage);
+  }
+
   @Override
   public boolean sendMarketingLottery(Long userId, Marketing marketing) {
     String openId = getOpenIdByUserId(userId);