Explorar o código

下单时营销政策当前库存范围内的,等到审核那一步扣库存会自动判断
当前库存范围外的,就直接抛异常不让下单

ZHOUTD hai 2 semanas
pai
achega
80a7f1886a

+ 2 - 0
ship-module-marketing/ship-module-marketing-api/src/main/java/com/yc/ship/module/marketing/api/policy/PolicyApi.java

@@ -22,4 +22,6 @@ public interface PolicyApi {
      * @return true-剩余数量充足
      */
     Boolean checkPolicySurplusNum(Long policyId,Long voyageId, BigDecimal num);
+
+    BigDecimal getPolicySurplusNum(Long policyId, Long voyageId);
 }

+ 15 - 1
ship-module-marketing/ship-module-marketing-biz/src/main/java/com/yc/ship/module/marketing/api/policy/PolicyApiImpl.java

@@ -1,6 +1,9 @@
 package com.yc.ship.module.marketing.api.policy;
 
+import com.yc.ship.framework.common.exception.ErrorCode;
+import com.yc.ship.module.marketing.dal.dataobject.policy.PolicyDO;
 import com.yc.ship.module.marketing.dal.dataobject.policydetail.PolicyDetailDO;
+import com.yc.ship.module.marketing.dal.mysql.policy.PolicyMapper;
 import com.yc.ship.module.marketing.dal.mysql.policydetail.PolicyDetailMapper;
 import org.springframework.stereotype.Service;
 
@@ -15,14 +18,19 @@ public class PolicyApiImpl implements PolicyApi{
 
     @Resource
     private PolicyDetailMapper policyDetailMapper;
+    @Resource
+    private PolicyMapper policyMapper;
     @Override
     public void updatePolicySurplusNum(Long policyId, Long voyageId, BigDecimal num) {
         PolicyDetailDO policyDetailDO = policyDetailMapper.selectByPolicyIdAndVoyageId(policyId, voyageId);
+        PolicyDO policyDO = policyMapper.selectById(policyId);
         if(policyDetailDO == null) {
             throw exception(POLICY_NOT_EXISTS);
         }
         if(policyDetailDO.getSurplusNum().compareTo(num) < 0) {
-            throw exception(POLICY_OVER_NUM);
+            throw exception(new ErrorCode(POLICY_OVER_NUM.getCode(),
+                    "营销政策-"+policyDO.getName()+
+                            "剩余房间不足,当前剩余房间数量:"+policyDetailDO.getSurplusNum()+",本次使用房间数:"+num));
         }
         policyDetailDO.setSurplusNum(policyDetailDO.getSurplusNum().subtract(num));
         policyDetailMapper.updateById(policyDetailDO);
@@ -39,4 +47,10 @@ public class PolicyApiImpl implements PolicyApi{
         }
         return true;
     }
+
+    @Override
+    public BigDecimal getPolicySurplusNum(Long policyId, Long voyageId) {
+        PolicyDetailDO policyDetailDO = policyDetailMapper.selectByPolicyIdAndVoyageId(policyId, voyageId);
+        return policyDetailDO.getSurplusNum();
+    }
 }

+ 17 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yc.ship.framework.common.enums.UserTypeEnum;
+import com.yc.ship.framework.common.exception.ErrorCode;
 import com.yc.ship.framework.common.lang.Asserts;
 import com.yc.ship.framework.common.pojo.CommonResult;
 import com.yc.ship.framework.common.pojo.PageResult;
@@ -164,8 +165,10 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.framework.common.util.collection.CollectionUtils.convertList;
 import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.*;
+import static com.yc.ship.module.marketing.enums.ErrorCodeConstants.POLICY_OVER_NUM;
 import static com.yc.ship.module.trade.enums.ApiConstants.ORDER_CHANGE_TYPE_NEW;
 import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
 
@@ -2610,6 +2613,13 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     orderPolicyDO.setPreUseNum(policy.getUseNum());
                     // 只要不是审核,都是预占,实占和预占一样,不用区分了,其实实占没有意义了
                     orderPolicyDO.setRealUseNum(BigDecimal.ZERO);
+                    //判断当前库存够不够
+                    if(!policyApi.checkPolicySurplusNum(policy.getPolicyId(),voyageId,policy.getUseNum())){
+                        BigDecimal policySurplusNum = policyApi.getPolicySurplusNum(policy.getPolicyId(), voyageId);
+                        throw exception(new ErrorCode(POLICY_OVER_NUM.getCode(),
+                                "营销政策-"+policy.getPolicyName()+
+                                        "剩余房间不足,当前剩余房间数量:"+policySurplusNum+",本次使用房间数:"+policy.getUseNum()));
+                    }
 //                    if (createVO.getIsYd() != null && createVO.getIsYd() == 1) {
 //                        orderPolicyDO.setPreUseNum(policy.getUseNum());
 //                        orderPolicyDO.setRealUseNum(BigDecimal.ZERO);
@@ -3068,6 +3078,13 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     orderPolicyDO.setPreUseNum(policy.getUseNum());
                     // 只要不是审核,都是预占,实占和预占一样,不用区分了,其实实占没有意义了
                     orderPolicyDO.setRealUseNum(policy.getUseNum());
+                    //判断当前库存够不够
+                    if(!policyApi.checkPolicySurplusNum(policy.getPolicyId(),voyageId,policy.getUseNum())){
+                        BigDecimal policySurplusNum = policyApi.getPolicySurplusNum(policy.getPolicyId(), voyageId);
+                        throw exception(new ErrorCode(POLICY_OVER_NUM.getCode(),
+                                "营销政策-"+policy.getPolicyName()+
+                                        "剩余房间不足,当前剩余房间数量:"+policySurplusNum+",本次使用房间数:"+policy.getUseNum()));
+                    }
                     orderPolicyDO.setAmount(policy.getAmount());
                     orderPolicyDO.setRooms(policy.getRooms());
                     if(policy.getId()!=null){