|
@@ -1,6 +1,7 @@
|
|
package com.qs.mp.quartz.task;
|
|
package com.qs.mp.quartz.task;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
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.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.qs.mp.admin.domain.Marketing;
|
|
import com.qs.mp.admin.domain.Marketing;
|
|
import com.qs.mp.admin.service.IMarketingAwardsService;
|
|
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_LOTTERY_KEY = "MARKETING_LOTTERY_KEY:%s";
|
|
|
|
|
|
|
|
+ public static final String MARKETING_SEND_KEY = "MARKETING_SEND_KEY";
|
|
|
|
+
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private DistributedLocker distributedLocker;
|
|
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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|