Selaa lähdekoodia

增加休眠时间,减少冲突

周箭河 4 vuotta sitten
vanhempi
commit
368e55dafd

+ 5 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -299,28 +299,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("订单金额异常");
         }
 
-        if(chargeInfo.getMaxNum() != null) {
-            //重试避免人数过多频繁冲突
-            boolean flag = false;
-            int max = 100, min = 1;
-            int ran2 = (int) (Math.random() * (max - min) + min);
-            for (int i = 1; i <= 100; i++) {
-                if (i == ran2) {
-                    Thread.sleep(ran2);
-                }
-                chargeInfo = sporadicChargeInfoDao.get(sporadicPayDto.getSporadicId());
-                if (chargeInfo.getMaxNum() <= chargeInfo.getPaidNum()) {
-                    throw new BizException("活动人数暂时已满,请稍后再试");
-                }
-                chargeInfo.setPaidNum(chargeInfo.getPaidNum() + 1);
-                chargeInfo.setUpdateTime(new Date());
-                int update = sporadicChargeInfoDao.update(chargeInfo);
-                if (update > 0) {
-                    flag = true;
-                    break;
-                }
-            }
-            if (!flag) {
+        if (chargeInfo.getMaxNum() != null) {
+            chargeInfo.setPaidNum(chargeInfo.getPaidNum() + 1);
+            chargeInfo.setUpdateTime(new Date());
+            int update = sporadicChargeInfoDao.update(chargeInfo);
+            if (update <= 0) {
                 throw new BizException("活动火爆,请稍后再试");
             }
         }

+ 6 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -140,25 +140,12 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         }
         if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             if (info.getMaxNum() != null && info.getPaidNum() > 0) {
-                //重试避免人数过多频繁冲突
-                boolean flag = false;
-                int max = 100, min = 1;
-                int ran2 = (int) (Math.random() * (max - min) + min);
-                for (int i = 1; i <= 100; i++) {
-                    if (i == ran2) {
-                        Thread.sleep(ran2);
-                    }
-                    info = sporadicChargeInfoDao.get(info.getId());
-                    info.setPaidNum(info.getPaidNum() - 1);
-                    info.setUpdateTime(new Date());
-                    int update = sporadicChargeInfoDao.update(info);
-                    if (update > 0) {
-                        flag = true;
-                        break;
-                    }
-                }
-                if (!flag) {
-                    throw new BizException("活动火爆,请稍后再试");
+                info = sporadicChargeInfoDao.get(info.getId());
+                info.setPaidNum(info.getPaidNum() - 1);
+                info.setUpdateTime(new Date());
+                int update = sporadicChargeInfoDao.update(info);
+                if (update <= 0) {
+                    throw new BizException("人数更新失败,请重试");
                 }
             }
             if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {

+ 9 - 2
mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java

@@ -40,7 +40,7 @@ public class SporadicChargeInfoController extends BaseController {
     @ApiOperation(value = "单查询")
     @GetMapping("/get")
     public Object get(Integer id, Integer userId) {
-        return succeed(sporadicChargeInfoService.findDetail(id,userId));
+        return succeed(sporadicChargeInfoService.findDetail(id, userId));
     }
 
 
@@ -68,6 +68,13 @@ public class SporadicChargeInfoController extends BaseController {
                 return failed(HttpStatus.CONTINUE, "您有待支付的订单");
             }
         }
+        SporadicChargeInfo info = sporadicChargeInfoService.get(sporadicPayDto.getSporadicId());
+        if (info.getMaxNum() != null) {
+            int max = 100, min = 1;
+            int ran2 = (int) (Math.random() * (max - min) + min);
+            Thread.sleep(ran2);
+        }
+
         Map payMap = musicGroupService.sporadicPay(sporadicPayDto);
         if (payMap.containsKey("tradeState")) {
             return failed(HttpStatus.CREATED, "恭喜您,支付成功!");
@@ -93,7 +100,7 @@ public class SporadicChargeInfoController extends BaseController {
             return failed("参数不合法");
         }
         SporadicChargeInfo chargeInfo = sporadicChargeInfoService.findByOrganIdAndType(organId, type);
-        if(chargeInfo == null){
+        if (chargeInfo == null) {
             return failed("分部活动不存在");
         }
         return succeed(chargeInfo);