cup пре 2 година
родитељ
комит
fa99246d2b

+ 1 - 59
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/MarketingController.java

@@ -74,65 +74,7 @@ public class MarketingController extends BaseApiController {
             return AjaxResult.error("用户未登录");
         }
 
-
-        String inviteCode = marketingHelpParam.getInviteCode();
-        if (StringUtils.isBlank(inviteCode)) {
-            return AjaxResult.error("邀请码不能为空");
-        }
-
-        Marketing marketing = marketingService.getById(marketingHelpParam.getMarketingId());
-        if (Objects.isNull(marketing)) {
-            return AjaxResult.error("活动不存在");
-        }
-        // 未开启的活动不能助力
-        if (MarketingStatusEnum.ON.getValue().equals(marketing.getIsOn())) {
-            return AjaxResult.error("活动未开启~");
-        }
-        Date now = DateUtils.getNowDate();
-        // 结束的活动不支持助力
-        if (marketing.getTriggerStatus() == 1 || marketing.getEndTime().before(now)) {
-            return AjaxResult.error("活动已过期~");
-        }
-        // 未开始的活动不能助力
-        if (marketing.getStartTime().after(now)) {
-            return AjaxResult.error("活动未开始~");
-        }
-
-
-        // 判断是否已经助力过
-        int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
-                .eq(MarketingUserCode::getUserId, userId)
-                .eq(MarketingUserCode::getMarketingId, marketingHelpParam.getMarketingId()));
-        if (count > 0) {
-            return AjaxResult.error("您已经助力过了");
-        }
-
-        // 邀请码解码,被助力人id
-        Long helpedUserId = MarketingUtils.decodeInviteCode(inviteCode);
-
-        // 生成抽奖码
-        String code = "";
-        while (true) {
-            code = MarketingUtils.generatePrizeCode();
-            // 判断抽奖码是否已经存在
-            int codeCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
-                    .eq(MarketingUserCode::getCode, code));
-            if (codeCount > 0) {
-                continue;
-            }
-            break;
-        }
-
-        MarketingUserCode marketingUserCode = new MarketingUserCode();
-        marketingUserCode.setMarketingId(marketingHelpParam.getMarketingId());
-        marketingUserCode.setCode(code);
-        // 设置被助力人
-        marketingUserCode.setUserId(helpedUserId);
-        // 设置助力人
-        marketingUserCode.setHelpUserId(userId);
-        marketingUserCode.setUserType(UserTypeEnum.ORDINARY.getValue());
-
-        marketingUserCodeService.save(marketingUserCode);
+        marketingService.help(marketingHelpParam, userId);
         return AjaxResult.success("助力成功");
     }
 

+ 2 - 2
mp-common/src/main/java/com/qs/mp/common/core/redis/RedissonDistributedLocker.java

@@ -45,8 +45,8 @@ public class RedissonDistributedLocker implements DistributedLocker {
 
     @Override
     public boolean tryLock(String lockKey) {
-        // -1则会自动续期
-        return tryLock(lockKey, 10, -1, TimeUnit.SECONDS);
+        // leaseTime = -1则会自动续期
+        return tryLock(lockKey, 0, -1, TimeUnit.SECONDS);
     }
 
     @Override

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

@@ -6,6 +6,7 @@ import com.qs.mp.admin.domain.param.MarketingCreateParam;
 import com.qs.mp.admin.domain.param.MarketingQueryParam;
 import com.qs.mp.admin.domain.param.MarketingUpdateParam;
 import com.qs.mp.admin.domain.vo.MarketingListVO;
+import com.qs.mp.user.domain.param.MarketingHelpParam;
 
 import java.util.List;
 
@@ -43,4 +44,11 @@ public interface IMarketingService extends IService<Marketing> {
      * @param id
      */
     void deleteById(Long id);
+
+    /**
+     * 活动助力
+     * @param marketingHelpParam
+     * @param userId
+     */
+    void help(MarketingHelpParam marketingHelpParam, Long userId);
 }

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

@@ -1,5 +1,6 @@
 package com.qs.mp.admin.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -9,11 +10,17 @@ import com.qs.mp.admin.domain.vo.MarketingListVO;
 import com.qs.mp.admin.mapper.MarketingMapper;
 import com.qs.mp.admin.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.enums.MarketingStatusEnum;
 import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.enums.UserTypeEnum;
 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.user.domain.MarketingUserCode;
+import com.qs.mp.user.domain.param.MarketingHelpParam;
+import com.qs.mp.user.service.IMarketingUserCodeService;
+import com.qs.mp.utils.MarketingUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -52,6 +59,92 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     @Autowired
     private IMarketingAwardsPrizeService marketingAwardsPrizeService;
 
+    @Autowired
+    private IMarketingUserCodeService marketingUserCodeService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void help(MarketingHelpParam marketingHelpParam, Long userId) {
+        String inviteCode = marketingHelpParam.getInviteCode();
+        if (com.qs.mp.common.utils.StringUtils.isBlank(inviteCode)) {
+            throw new ServiceException("邀请码不能为空");
+        }
+
+        Marketing marketing = this.getById(marketingHelpParam.getMarketingId());
+        if (Objects.isNull(marketing)) {
+            throw new ServiceException("活动不存在");
+        }
+        // 未开启的活动不能助力
+        if (MarketingStatusEnum.ON.getValue().equals(marketing.getIsOn())) {
+            throw new ServiceException("活动未开启~");
+        }
+        Date now = DateUtils.getNowDate();
+        // 结束的活动不支持助力
+        if (marketing.getTriggerStatus() == 1 || marketing.getEndTime().before(now)) {
+            throw new ServiceException("活动已过期~");
+        }
+        // 未开始的活动不能助力
+        if (marketing.getStartTime().after(now)) {
+            throw new ServiceException("活动未开始~");
+        }
+
+
+        // 判断是否已经助力过
+        int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                .eq(MarketingUserCode::getUserId, userId)
+                .eq(MarketingUserCode::getMarketingId, marketingHelpParam.getMarketingId()));
+        if (count > 0) {
+            throw new ServiceException("您已经助力过了");
+        }
+
+        // 邀请码解码,被助力人id
+        Long helpedUserId = MarketingUtils.decodeInviteCode(inviteCode);
+
+        // 生成抽奖码
+        String code = "";
+        while (true) {
+            code = MarketingUtils.generatePrizeCode();
+            // 判断抽奖码是否已经存在
+            int codeCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                    .eq(MarketingUserCode::getMarketingId,marketing.getId())
+                    .eq(MarketingUserCode::getCode, code));
+            if (codeCount > 0) {
+                continue;
+            }
+            break;
+        }
+
+        MarketingUserCode marketingUserCode = new MarketingUserCode();
+        marketingUserCode.setMarketingId(marketingHelpParam.getMarketingId());
+        marketingUserCode.setCode(code);
+        // 设置被助力人
+        marketingUserCode.setUserId(helpedUserId);
+        // 设置助力人
+        marketingUserCode.setHelpUserId(userId);
+        marketingUserCode.setUserType(UserTypeEnum.ORDINARY.getValue());
+
+
+        // 保存助力信息
+        marketingUserCodeService.save(marketingUserCode);
+
+        // 增加活动参与人数
+        int userCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                .eq(MarketingUserCode::getMarketingId, marketing.getId())
+                .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
+                .groupBy(MarketingUserCode::getMarketingId));
+
+        Marketing marketingParam = new Marketing();
+        marketingParam.setId(marketing.getId());
+        marketingParam.setRealNum(userCount);
+        int randomNum = (int) 1 + (int) (Math.random() * 10);
+        marketingParam.setFakeNum(marketing.getFakeNum() + randomNum);
+
+        // 更新活动参与人数
+        this.updateById(marketingParam);
+
+    }
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteById(Long id) {