Prechádzať zdrojové kódy

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server

lishiqiang 2 týždňov pred
rodič
commit
f7cbb9a569

+ 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();
+    }
 }

+ 3 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockBaseVO.java

@@ -74,4 +74,7 @@ public class VoyageStockBaseVO {
     private Long routeId;
 
     private Integer direction;
+
+    @Schema(description = "营销政策库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private BigDecimal policyNum;
 }

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestock/VoyageStockServiceImpl.java

@@ -2,6 +2,7 @@ package com.yc.ship.module.product.service.voyagestock;
 
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.collection.MapUtils;
+import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import org.springframework.stereotype.Service;
@@ -17,6 +18,7 @@ import com.yc.ship.framework.common.util.object.BeanUtils;
 
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -37,6 +39,9 @@ public class VoyageStockServiceImpl implements VoyageStockService {
     @Resource
     private ShipApi shipApi;
 
+    @Resource
+    private VoyageStockDistributeNewMapper voyageStockDistributeNewMapper;
+
 
     @Transactional(rollbackFor = Exception.class)
     @Override
@@ -79,7 +84,14 @@ public class VoyageStockServiceImpl implements VoyageStockService {
         List<Long> shipIds = CollectionUtils.convertList(list, VoyageStockRespVO::getShipId);
         Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
         list.stream().forEach(item -> {
+            // 根据航次查询是否有营销政策(暂时包含当天)
+            BigDecimal policyNum = voyageStockDistributeNewMapper.selectIsPolicy(item.getVoyageId());
             MapUtils.findAndThen(shipMap, item.getShipId(), ship -> item.setShipName(ship.getName()));
+            if(policyNum!= null){
+                item.setPolicyNum(policyNum);
+            }else {
+                item.setPolicyNum(BigDecimal.ZERO);
+            }
         });
         return page;
     }

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -269,4 +269,6 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
 
     @TenantIgnore
     List<TradeOrderDO> getCanContractOrder();
+
+    List<TradeOrderDO> getValidSimpleOrderInfoByVoyageId(@Param("voyageId") Long voyageId);
 }

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java

@@ -133,4 +133,7 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
     @Update("UPDATE trade_visitor SET deleted = #{deleted},update_time = now() WHERE id = #{id}")
     @TenantIgnore
     void updateDeletedById(@Param("id") Long id, @Param("deleted")  int deleted);
+
+    List<TradeVisitorDO> getValidSimpleVisitorInfoByVoyageIdAndOrderId(@Param("voyageId") Long voyageId, @Param("orderId")Long orderId);
+
 }

+ 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){

+ 8 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -2988,5 +2988,13 @@
     <select id="getCanContractOrder" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO">
         SELECT  * FROM trade_order WHERE is_contract is null and travel_date BETWEEN CONCAT(DATE_ADD(CURDATE(),INTERVAL 1 DAY),' 00:00:00') and CONCAT(DATE_ADD(CURDATE(),INTERVAL 2 DAY), ' 23:59:59')
     </select>
+    
+    <select id="getValidSimpleOrderInfoByVoyageId"
+            resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO">
+        select id,order_no
+        from trade_order
+        where deleted=0 and voyage_id=#{voyageId} and order_status in (1,6,9,13,14,15)
+        order by substring_index(order_no, '-', -1)*1
+    </select>
 </mapper>
 

+ 12 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -548,4 +548,16 @@
     <delete id="deleteAllByOrderId">
         delete from trade_visitor where order_id = #{orderId}
     </delete>
+    
+    <select id="getValidSimpleVisitorInfoByVoyageIdAndOrderId"
+            resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
+        select a.id,a.name
+        from trade_visitor a
+        join trade_order b on a.order_id=b.id
+        where a.deleted=0 and b.deleted=0
+        and b.voyage_id=#{voyageId}
+        and b.order_status in (1,6,9,13,14,15)
+        <if test="orderId != null" >and a.order_id=#{orderId}</if>
+        order by substring_index(b.order_no, '-', -1)*1 ,a.id
+    </select>
 </mapper>