Răsfoiți Sursa

加锁调整

yzc 2 ani în urmă
părinte
comite
f10828c38f

+ 4 - 0
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/constant/RedisConstant.java

@@ -33,6 +33,10 @@ public class RedisConstant {
      * 更新贸易订单委托量、已履约量锁key
      */
     public static final String TORDER_UPDATE_AMOUNT_KEY = "sckw:trade:order:update:amount:%s";
+    /**
+     * 合同签约完成更新贸易订单状态锁key
+     */
+    public static final String TORDER_CONTRACT_UPDATE_KEY = "sckw:trade:order:contract:update:%s";
 
     /**
      * 消费请求有效时间(秒)

+ 1 - 1
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java

@@ -35,7 +35,7 @@ public class SckwSmsHandlerService {
         String type = sckwSms.getType();
         String phone = sckwSms.getPhone();
         String requestKey = getKey(RedisConstant.MESSAGE_SMS_VERIFY_CODE_REQUEST_KEY, type, phone);
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(requestKey, 10L, 30L))) {
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(requestKey, 5L, 10L))) {
             log.info("获取发送短信锁失败,不处理");
             return;
         }

+ 43 - 29
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -58,6 +58,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult updateOrderStatus(UpdateOrderStatusParam param) {
+        log.info("更新订单状态入参:{}", JSON.toJSONString(param));
         if (Objects.isNull(param.getUpdateBy()) || StringUtils.isBlank(param.getUpdateByName())) {
             return HttpResult.error("操作人信息不能为空!");
         }
@@ -102,6 +103,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult createOrCancelLogisticsOrder(CreateOrCancelLogisticsOrderParam param) {
+        log.info("生成或撤销物流订单入参:{}", JSON.toJSONString(param));
         Long id = param.getTOrderId();
         BigDecimal entrustAmount = param.getEntrustAmount();
         Long updateBy = param.getUpdateBy();
@@ -113,7 +115,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             return HttpResult.error("任务量不能为空!");
         }
         String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
         try {
@@ -135,15 +137,16 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount)
                     .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
             saveMongoDb(updateParam);
-            return HttpResult.ok();
         } finally {
             RedissonUtils.unlock(lockKey);
         }
+        return HttpResult.ok();
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResult completeLogisticsOrder(CompleteLogisticsOrderParam param) {
+        log.info("物流订单完结入参:{}", JSON.toJSONString(param));
         Long id = param.getTOrderId();
         BigDecimal entrustAmount = param.getEntrustAmount();
         BigDecimal actualLoadAmount = param.getActualLoadAmount();
@@ -160,7 +163,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             return HttpResult.error("物流订单是否已全部完结不能为空!");
         }
         String lockKey = String.format(RedisConstant.TORDER_UPDATE_AMOUNT_KEY, id);
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");
         }
         try {
@@ -192,47 +195,58 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             updateParam.setTOrderId(order.getId()).setEntrustAmount(totalEntrustAmount).setActualAmount(totalActualAmount)
                     .setStatus(order.getStatus()).setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
             saveMongoDb(updateParam);
-            return HttpResult.ok();
         } finally {
             RedissonUtils.unlock(lockKey);
         }
+        return HttpResult.ok();
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void contractSignCompleted(ContractSignCompletedParam param) {
+        log.info("合同签约完成入参:{}", JSON.toJSONString(param));
         if (Objects.isNull(param.getUpdateBy()) || StringUtils.isBlank(param.getUpdateByName())) {
             throw new BusinessException("操作人信息不能为空!");
         }
         Long contractId = param.getContractId();
         Long updateBy = param.getUpdateBy();
-        List<KwoTradeOrderContract> contracts = kwoTradeOrderContractService.getByContractId(contractId);
-        if (CollectionUtils.isEmpty(contracts)) {
-            log.info("合同:{}无相关联待签约的贸易订单", contractId);
-            return;
+
+        String lockKey = String.format(RedisConstant.TORDER_CONTRACT_UPDATE_KEY, param.getContractId());
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
+            throw new BusinessException("业务繁忙,请稍后再试!");
         }
-        List<Long> tOrderIds = contracts.stream().map(KwoTradeOrderContract::getTOrderId).toList();
-        List<KwoTradeOrder> orders = kwoTradeOrderService.getWaitSignByIds(tOrderIds);
-        if (CollectionUtils.isEmpty(orders)) {
-            log.info("合同:{}无相关联待签约的贸易订单", contractId);
-            return;
+        try {
+            List<KwoTradeOrderContract> contracts = kwoTradeOrderContractService.getByContractId(contractId);
+            if (CollectionUtils.isEmpty(contracts)) {
+                log.info("合同:{}无相关联待签约的贸易订单", contractId);
+                return;
+            }
+            List<Long> tOrderIds = contracts.stream().map(KwoTradeOrderContract::getTOrderId).toList();
+            List<KwoTradeOrder> orders = kwoTradeOrderService.getWaitSignByIds(tOrderIds);
+            if (CollectionUtils.isEmpty(orders)) {
+                log.info("合同:{}无相关联待签约的贸易订单", contractId);
+                return;
+            }
+            List<KwoTradeOrderTrack> tracks = Lists.newArrayList();
+            List<SckwTradeOrder> tradeOrders = Lists.newArrayList();
+            List<Long> ids = orders.stream().map(KwoTradeOrder::getId).toList();
+
+            kwoTradeOrderService.contractCompletedUpdate(ids, updateBy);
+            orders.forEach(e -> {
+                KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+                track.setTOrderId(e.getId()).setTOrderNo(e.getTOrderNo()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()))
+                        .setCreateBy(updateBy).setUpdateBy(updateBy);
+                tracks.add(track);
+                SckwTradeOrder updateParam = new SckwTradeOrder();
+                updateParam.setTOrderId(e.getId()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()))
+                        .setUpdateBy(updateBy).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
+                tradeOrders.add(updateParam);
+            });
+            kwoTradeOrderTrackService.insertBatch(tracks);
+            tradeOrders.forEach(this::saveMongoDb);
+        } finally {
+            RedissonUtils.unlock(lockKey);
         }
-        List<KwoTradeOrderTrack> tracks = Lists.newArrayList();
-        List<SckwTradeOrder> tradeOrders = Lists.newArrayList();
-        List<Long> ids = orders.stream().map(KwoTradeOrder::getId).toList();
-        kwoTradeOrderService.contractCompletedUpdate(ids, updateBy);
-        orders.forEach(e -> {
-            KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-            track.setTOrderId(e.getId()).setTOrderNo(e.getTOrderNo()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()))
-                    .setCreateBy(updateBy).setUpdateBy(updateBy);
-            tracks.add(track);
-            SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(e.getId()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()))
-                    .setUpdateBy(updateBy).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
-            tradeOrders.add(updateParam);
-        });
-        kwoTradeOrderTrackService.insertBatch(tracks);
-        tradeOrders.forEach(this::saveMongoDb);
     }
 
     /**

+ 2 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/dubbo/GoodsInfoServiceImpl.java

@@ -44,6 +44,7 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
 
     @Override
     public Map<Long, KwpGoods> getGoodsByIds(List<Long> ids) {
+        log.info("批量获取商品基本信息,ids:{}", ids);
         if (CollectionUtils.isEmpty(ids)) {
             return Collections.emptyMap();
         }
@@ -56,6 +57,7 @@ public class GoodsInfoServiceImpl implements GoodsInfoService {
 
     @Override
     public HttpResult updateGoodsAmount(Long id, BigDecimal amount) {
+        log.info("更新商品库存id:{},amount:{}", id, amount);
         String lockKey = String.format(RedisConstant.GOODS_UPDATE_AMOUNT_KEY, id);
         if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 10L, 30L))) {
             return HttpResult.error("业务繁忙,请稍后再试!");