Explorar o código

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

lishiqiang hai 1 semana
pai
achega
c4601ab40e

+ 2 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/VoyageStockDetailController.java

@@ -1,15 +1,11 @@
 package com.yc.ship.module.product.controller.admin.voyagestockdetail;
 
-import com.alibaba.fastjson.JSONObject;
-import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import com.yc.ship.module.product.enums.ProductStockStaticsName;
 import com.yc.ship.module.product.service.voyagestock.VoyageStockService;
 import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService;
-import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
-import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -159,10 +155,12 @@ public class VoyageStockDetailController {
     public CommonResult<List<VoyageStockDetailRespNewVO>> getVoyageStockByVoyageIdNew(@RequestParam("voyageId") Long voyageId) {
         List<VoyageStockDetailDO> list = voyageStockDetailService.getListByVoyageId(voyageId);
         VoyageStockDO voyageStock = voyageStockService.getVoyageStock(voyageId);
+        VoyageStockDetailDO insideCabin = voyageStockDetailService.getVoyageStockTotalRow(voyageId);
         VoyageStockDetailDO voyageStockDetailDO = BeanUtils.toBean(voyageStock, VoyageStockDetailDO.class);
         voyageStockDetailDO.setRoomModelName("合计");
         voyageStockDetailDO.setFloor(0);
         voyageStockDetailDO.setShelfNum(BigDecimal.ZERO);
+        list.add(insideCabin);
         list.add(voyageStockDetailDO);
         list.stream().forEach(detail -> {
             detail.setShelfNum(BigDecimal.ZERO);

+ 29 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdetail/VoyageStockDetailMapper.java

@@ -5,7 +5,10 @@ import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -36,4 +39,30 @@ public interface VoyageStockDetailMapper extends BaseMapperX<VoyageStockDetailDO
         delete(new LambdaQueryWrapperX<VoyageStockDetailDO>()
                 .in(VoyageStockDetailDO::getVoyageId, voyageIds));
     }
+
+    /**
+     * 从 system_dist_data 表查询实际房间数据
+     *
+     * @param voyageId 航次ID
+     * @return 实际房间数
+     */
+    @Select("SELECT IFNULL(value, 0) FROM system_dict_data WHERE dict_type= 'inside_cabin_count' and status = 0 and deleted = 0 LIMIT 1")
+    @TenantIgnore
+    BigDecimal selectRealTotalNumFromDistData(@Param("voyageId") Long voyageId);
+
+    /**
+     * 根据航次ID查询已分配房间数
+     * 已分配房间数 = (领队数 leader_total_num + 陪同数 with_total_num) / 2
+     *
+     * @param voyageId 航次ID
+     * @return 已分配房间数
+     */
+    @Select("SELECT IFNULL(SUM(t.leader_total_num + t.with_total_num) / 2.0, 0) " +
+            "FROM trade_order_total t " +
+            "INNER JOIN trade_order o ON t.old_order_id = o.id or  t.order_id = o.id  " +
+            "WHERE o.voyage_id = #{voyageId} AND o.deleted = 0 AND t.deleted = 0")
+    @TenantIgnore
+    Double selectAllocatedRoomCountByVoyageId(@Param("voyageId") Long voyageId);
+
+
 }

+ 7 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailService.java

@@ -50,6 +50,13 @@ public interface VoyageStockDetailService {
 
     List<VoyageStockDetailDO> getListByVoyageId(Long voyageId);
 
+    /**
+     * 计算并返回航次库存内舱房合计行
+     *
+     * @param voyageId 航次ID
+     * @return 航次库存合计对象
+     */
+    VoyageStockDetailDO getVoyageStockTotalRow(Long voyageId);
 
     /**
      * 处理共享库存

+ 21 - 6
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java

@@ -16,8 +16,6 @@ import com.yc.ship.module.product.enums.ProductStockStaticsName;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
-import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
-import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -32,10 +30,7 @@ import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -248,4 +243,24 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
         return voyageStockDetailMapper.selectListByVoyageId(voyageId);
     }
 
+    @Override
+    public VoyageStockDetailDO getVoyageStockTotalRow(Long voyageId) {
+        // 查询航次实际总库存数
+        BigDecimal realTotalNum = Optional.ofNullable(voyageStockDetailMapper.selectRealTotalNumFromDistData(voyageId)).orElse(BigDecimal.ZERO);
+        // 查询已分配房间数(领队数 + 陪同数)/ 2
+        Double allocatedRoomCount = voyageStockDetailMapper.selectAllocatedRoomCountByVoyageId(voyageId);
+        BigDecimal allocatedRoomNum = BigDecimal.valueOf(allocatedRoomCount != null ? allocatedRoomCount : 0);
+        // 计算剩余库存 = 实际总库存 - 已分配房间数
+        BigDecimal surplusNum = realTotalNum.subtract(allocatedRoomNum);
+        // 构建汇总行数据
+        VoyageStockDetailDO voyageStockDetailDO = new VoyageStockDetailDO();
+        voyageStockDetailDO.setRoomModelName("内舱房");
+        voyageStockDetailDO.setFloor(0);
+        voyageStockDetailDO.setShelfNum(BigDecimal.ZERO);
+        voyageStockDetailDO.setRealTotalNum(realTotalNum);
+        voyageStockDetailDO.setBookNum(allocatedRoomNum);
+        voyageStockDetailDO.setSurplusNum(surplusNum);
+        return voyageStockDetailDO;
+    }
+
 }