Explorar o código

Merge branch 'dev' into 'mp-server-test'

优化

See merge request quanshu/mp-server!544
jiang hao %!s(int64=2) %!d(string=hai) anos
pai
achega
f9745d2fff

+ 48 - 43
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -309,7 +309,6 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     }
 
     @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)) {
@@ -342,52 +341,13 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         }
         String lockKey = String.format(MARKETING_REAL_NUM_LOCK, marketing.getId());
 
-        if (!distributedLocker.tryLock(lockKey)) {
+        if (!distributedLocker.tryLock(lockKey,3,30,TimeUnit.SECONDS)) {
             throw new ServiceException("活动太火爆了,请稍后重试!");
         }
         try {
 
-            // 判断是否已经助力过
-            int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
-                    .eq(MarketingUserCode::getHelpUserId, userId));
-            if (count > 0) {
-                throw new ServiceException("您已经助力过了");
-            }
-            // 生成抽奖码
-            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);
-
-
-            // 获取最新活动信息
-            Marketing marketingParam = this.getById(marketing.getId());
-            marketingParam.setRealNum(marketingParam.getRealNum() + 1);
-            int randomNum = (int) 1 + (int) (Math.random() * 10);
-            marketingParam.setFakeNum(marketingParam.getFakeNum() + randomNum);
-            // 更新活动参与人数
-            boolean rtn = this.updateById(marketingParam);
-            Assert.isTrue(rtn, "更新活动参与人数异常。marketingId:" + marketing.getId());
+            // 处理助力信息
+            updateMarketingHelpInfo(marketingHelpParam, userId, marketing, helpedUserId);
 
             // 给被助力人发送成功消息
             wxSubscribeMessage.sendMarketingHelp(helpedUserId, marketing);
@@ -398,6 +358,51 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
 
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void updateMarketingHelpInfo(MarketingHelpParam marketingHelpParam, Long userId, Marketing marketing, Long helpedUserId) {
+        // 判断是否已经助力过
+        int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
+                .eq(MarketingUserCode::getHelpUserId, userId));
+        if (count > 0) {
+            throw new ServiceException("您已经助力过了");
+        }
+        // 生成抽奖码
+        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);
+
+
+        // 获取最新活动信息
+        Marketing marketingParam = this.getById(marketing.getId());
+        marketingParam.setRealNum(marketingParam.getRealNum() + 1);
+        int randomNum = (int) 1 + (int) (Math.random() * 10);
+        marketingParam.setFakeNum(marketingParam.getFakeNum() + randomNum);
+        // 更新活动参与人数
+        boolean rtn = this.updateById(marketingParam);
+        Assert.isTrue(rtn, "更新活动参与人数异常。marketingId:" + marketing.getId());
+    }
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)