소스 검색

拼团活动成团开奖消息通知

Chris-zy 1 년 전
부모
커밋
bd93c51960

+ 124 - 0
mp-quartz/src/main/java/com/qs/mp/quartz/task/GroupBuyingTask.java

@@ -0,0 +1,124 @@
+package com.qs.mp.quartz.task;
+
+import cn.hutool.core.util.RandomUtil;
+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.GroupBuyingMsg;
+import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.MarketingMsg;
+import com.qs.mp.admin.domain.vo.GroupBuying;
+import com.qs.mp.admin.service.IGroupBuyingMsgService;
+import com.qs.mp.admin.service.IMarketingMsgService;
+import com.qs.mp.admin.service.IMarketingService;
+import com.qs.mp.common.core.redis.DistributedLocker;
+import com.qs.mp.common.enums.MarketingStatusEnum;
+import com.qs.mp.common.enums.UserTypeEnum;
+import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.framework.redis.RedisLockKey;
+import com.qs.mp.framework.service.IWxSubscribeMessage;
+import com.qs.mp.user.domain.MarketingUserCode;
+import com.qs.mp.user.service.IMarketingUserCodeService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 拼团活动相关任务
+ *
+ * @author yang.zhao
+ */
+@Component("groupBuyingTask")
+public class GroupBuyingTask {
+
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+
+
+    @Autowired
+    private DistributedLocker distributedLocker;
+
+
+    @Autowired
+    private IWxSubscribeMessage wxSubscribeMessage;
+
+
+    @Autowired
+    private IMarketingMsgService marketingMsgService;
+
+    @Autowired
+    private IGroupBuyingMsgService groupBuyingMsgService;
+
+
+
+
+    /**
+     * 定时发送一定数量的活动订阅消息
+     * @param limit
+     * @param type 1开奖消息,2活动开始消息
+     */
+    public void sendMsgByLimit(Integer limit, Integer type) {
+
+        String lockKey = "GROUPBUYING_SEND_MSG_LIMIT_KEY";
+        // 同时只能有一个线程发送活动通知任务,自动续期
+        if (!distributedLocker.tryLock(lockKey,0, -1, TimeUnit.SECONDS)) {
+            return;
+        }
+
+        try {
+            List<GroupBuyingMsg> groupBuyingMsgList = new ArrayList<>();
+            if (1 == type){
+                groupBuyingMsgList = groupBuyingMsgService.list(new LambdaQueryWrapper<GroupBuyingMsg>()
+                        .eq(GroupBuyingMsg::getType, type)
+                        .last("limit " + limit));
+            }
+
+            // 获取活动通知信息
+            /*marketingMsgList = marketingMsgService.list(new LambdaQueryWrapper<MarketingMsg>()
+                    .select(MarketingMsg::getMarketingId, MarketingMsg::getUserId, MarketingMsg::getContext)
+                    .eq(MarketingMsg::getType, 3)
+                    .groupBy(MarketingMsg::getMarketingId, MarketingMsg::getUserId, MarketingMsg::getContext)
+                    .last("limit " + limit));*/
+
+
+            if (CollectionUtils.isEmpty(groupBuyingMsgList)) {
+                return;
+            }
+
+            for (GroupBuyingMsg groupBuyingMsg : groupBuyingMsgList) {
+                Marketing marketing = new Marketing();
+                marketing.setId(groupBuyingMsg.getGroupbuyingId());
+                marketing.setTitle(groupBuyingMsg.getContext());
+
+                if (type == 1) {
+                    // 发送活动开奖通知
+                    wxSubscribeMessage.sendMarketingLottery(groupBuyingMsg.getUserId(), marketing);
+                } else if (type == 2){
+                    // 发送活动开始通知
+                    wxSubscribeMessage.sendMarketingStart(groupBuyingMsg.getUserId(), marketing);
+                }
+            }
+
+            // 删除已发送的消息
+            marketingMsgService.removeByIds(groupBuyingMsgList.stream().map(GroupBuyingMsg::getId).collect(Collectors.toList()));
+
+        } catch (Exception e) {
+            LogUtil.error(logger, e, "发送拼团活动订阅通知异常");
+        } finally {
+            distributedLocker.unlock(lockKey);
+        }
+    }
+
+
+
+}

+ 50 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/GroupBuyingMsg.java

@@ -0,0 +1,50 @@
+package com.qs.mp.admin.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @describe 拼团活动消息表实体类
+ * @auther yang.zhao
+ */
+@TableName("mp_groupbuying_msg")
+@Data
+public class GroupBuyingMsg implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("groupbuying_id")
+    private Long groupbuyingId;
+
+    @TableField("group_id")
+    private Long groupId;
+
+    @TableField("user_id")
+    private Long userId;
+
+    @TableField("context")
+    private String context;
+
+    @TableField("type")
+    private Integer type;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    @TableField("is_delete")
+    private Integer isDelete;
+
+
+}

+ 12 - 0
mp-service/src/main/java/com/qs/mp/admin/mapper/GroupBuyingMsgMapper.java

@@ -0,0 +1,12 @@
+package com.qs.mp.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qs.mp.admin.domain.GroupBuyingMsg;
+
+/**
+ * @auther yang.zhao
+ * @describe 拼团活动订阅消息表mapper类
+ */
+public interface GroupBuyingMsgMapper extends BaseMapper<GroupBuyingMsg> {
+
+}

+ 15 - 0
mp-service/src/main/java/com/qs/mp/admin/service/IGroupBuyingMsgService.java

@@ -0,0 +1,15 @@
+package com.qs.mp.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.admin.domain.GroupBuyingMsg;
+
+/**
+ * <p>
+ * 拼团活动订阅消息表 服务类
+ * </p>
+ *
+ * @author yang.zhao
+ */
+public interface IGroupBuyingMsgService extends IService<GroupBuyingMsg> {
+
+}

+ 19 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/GroupBuyingMsgServiceImpl.java

@@ -0,0 +1,19 @@
+package com.qs.mp.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.admin.domain.GroupBuyingMsg;
+import com.qs.mp.admin.mapper.GroupBuyingMsgMapper;
+import com.qs.mp.admin.service.IGroupBuyingMsgService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 拼团活动订阅消息表 服务实现类
+ * </p>
+ *
+ * @author yang.zhao
+ */
+@Service
+public class GroupBuyingMsgServiceImpl extends ServiceImpl<GroupBuyingMsgMapper, GroupBuyingMsg> implements IGroupBuyingMsgService {
+
+}

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

@@ -2,6 +2,7 @@ package com.qs.mp.framework.service;
 
 
 import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.vo.GroupBuying;
 
 /**
  * @author zhongcp
@@ -27,5 +28,4 @@ public interface IWxSubscribeMessage {
      */
     public void sendMarketingHelp(Long userId, Marketing marketing);
 
-
 }

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

@@ -2,6 +2,7 @@ package com.qs.mp.framework.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.qs.mp.admin.domain.Marketing;
+import com.qs.mp.admin.domain.vo.GroupBuying;
 import com.qs.mp.common.enums.AppSourceEnum;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;