Jelajahi Sumber

feat: 完善航次库存管理

luofeiyun 2 minggu lalu
induk
melakukan
d15f860b3f

+ 1 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ProductStockStaticsName.java

@@ -9,4 +9,5 @@ public interface ProductStockStaticsName {
     public static final String CAN_SELL_NUM = "可售房间数";
     public static final String OVERSOLD_NUM = "超卖房间数";
     public static final String SURPLUS_NUM = "剩余房间数";
+    public static final String TOTAL = "合计";
 }

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

@@ -73,6 +73,12 @@ public class VoyageStockDetailController {
         return success(BeanUtils.toBean(voyageStock, VoyageStockDetailRespVO.class));
     }
 
+    /**
+     * 已废弃,请使用getByVoyageIdNew
+     * @param voyageId
+     * @return
+     */
+    @Deprecated
     @GetMapping("/getByVoyageId")
     @Operation(summary = "获得航次库存")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
@@ -142,6 +148,15 @@ public class VoyageStockDetailController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     public CommonResult<List<VoyageStockDetailRespNewVO>> getVoyageStockByVoyageIdNew(@RequestParam("voyageId") Long voyageId) {
         List<VoyageStockDetailDO> list = voyageStockDetailService.getListByVoyageId(voyageId);
+        VoyageStockDO voyageStock = voyageStockService.getVoyageStock(voyageId);
+        VoyageStockDetailDO voyageStockDetailDO = BeanUtils.toBean(voyageStock, VoyageStockDetailDO.class);
+        voyageStockDetailDO.setRoomModelName("合计");
+        voyageStockDetailDO.setFloor(0);
+        voyageStockDetailDO.setShelfNum(0);
+        list.add(voyageStockDetailDO);
+        list.stream().forEach(detail -> {
+            detail.setShelfNum(0);
+        });
         return success(BeanUtils.toBean(list, VoyageStockDetailRespNewVO.class));
     }
 

+ 1 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestock/VoyageStockDO.java

@@ -26,7 +26,7 @@ public class VoyageStockDO extends TenantBaseDO {
     /**
      * 航次ID
      */
-    @TableId
+    @TableId(type = IdType.ASSIGN_ID)
     private Long voyageId;
 
     /**

+ 45 - 5
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java

@@ -8,14 +8,19 @@ import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 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.dal.mysql.voyage.VoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
+import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
+import com.yc.ship.module.resource.api.ship.ShipApi;
+import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -38,6 +43,12 @@ public class VoyageServiceImpl implements VoyageService {
     @Resource
     private VoyageStockMapper voyageStockMapper;
 
+    @Resource
+    private ShipApi shipApi;
+
+    @Resource
+    private VoyageStockDetailMapper voyageStockDetailMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createVoyage(VoyageSaveReqVO createReqVO) {
@@ -46,7 +57,7 @@ public class VoyageServiceImpl implements VoyageService {
         voyageMapper.insert(voyage);
         Long id = voyage.getId();
 
-        saveOrUpdateVoyageStock(createReqVO);
+        saveOrUpdateVoyageStock(createReqVO, id);
         // 返回
         return id;
     }
@@ -59,22 +70,51 @@ public class VoyageServiceImpl implements VoyageService {
         // 更新
         VoyageDO updateObj = BeanUtils.toBean(updateReqVO, VoyageDO.class);
         voyageMapper.updateById(updateObj);
-        saveOrUpdateVoyageStock(updateReqVO);
+        saveOrUpdateVoyageStock(updateReqVO, updateReqVO.getId());
 
     }
 
-    private void saveOrUpdateVoyageStock(VoyageSaveReqVO reqVO) {
+    private void saveOrUpdateVoyageStock(VoyageSaveReqVO reqVO,Long voyageId) {
         VoyageStockDO voyageStockDO = new VoyageStockDO();
-        voyageStockDO.setVoyageId(reqVO.getId());
+        voyageStockDO.setVoyageId(voyageId);
         voyageStockDO.setVoyageName(reqVO.getName());
         voyageStockDO.setShipId(reqVO.getShipId());
         voyageStockDO.setType(reqVO.getType());
 
-        VoyageStockDO stockDO = voyageStockMapper.selectById(reqVO.getId());
+        VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
         if(stockDO != null) {
             voyageStockMapper.updateById(voyageStockDO);
         }else {
+            //新增时添加统计数据
+            List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
+            int sum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
+            voyageStockDO.setTotalNum(sum);
+            voyageStockDO.setNotShelfNum(sum);
+            voyageStockDO.setShelfedNum(0);
+            voyageStockDO.setBookNum(0);
+            voyageStockDO.setCanSellNum(0);
+            voyageStockDO.setOversoldNum(0);
+            voyageStockDO.setSurplusNum(sum);
             voyageStockMapper.insert(voyageStockDO);
+            //添加库存详情
+            List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
+            list.stream().forEach(item -> {
+                VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
+                stockDetailDO.setVoyageId(voyageId);
+                stockDetailDO.setRoomModelId(item.getRoomModelId());
+                stockDetailDO.setRoomModelName(item.getRoomModelName());
+                stockDetailDO.setFloor(item.getFloor());
+                stockDetailDO.setTotalNum(item.getNum());
+                stockDetailDO.setShelfNum(0);
+                stockDetailDO.setNotShelfNum(item.getNum());
+                stockDetailDO.setShelfedNum(0);
+                stockDetailDO.setBookNum(0);
+                stockDetailDO.setCanSellNum(0);
+                stockDetailDO.setOversoldNum(0);
+                stockDetailDO.setSurplusNum(item.getNum());
+                stockDetailDOS.add(stockDetailDO);
+            });
+            voyageStockDetailMapper.insertBatch(stockDetailDOS);
         }
     }
 

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

@@ -3,8 +3,11 @@ package com.yc.ship.module.product.service.voyagestockdetail;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
+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.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.enums.ProductStockStaticsName;
+import com.yc.ship.module.product.service.voyagestock.VoyageStockService;
 import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 
@@ -17,6 +20,7 @@ import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailM
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Stream;
 
 /**
  * 航次库存 Service 实现类
@@ -30,6 +34,9 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
     @Resource
     private VoyageStockDetailMapper voyageStockDetailMapper;
 
+    @Resource
+    private VoyageStockMapper voyageStockMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean createVoyageStock(List<VoyageStockDetailSaveReqVO> createReqVO) {
@@ -39,7 +46,16 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
         Long voyageId = createReqVO.get(0).getVoyageId();
         voyageStockDetailMapper.deleteByVoyageId(voyageId);
         List<VoyageStockDetailDO> list = BeanUtils.toBean(createReqVO, VoyageStockDetailDO.class);
-        return voyageStockDetailMapper.insertBatch(list);
+        List<VoyageStockDetailDO> insertList = new ArrayList<>();
+        list.stream().forEach(item -> {
+            if(ProductStockStaticsName.TOTAL.equals(item.getRoomModelName())) {
+                VoyageStockDO stockDO = BeanUtils.toBean(item, VoyageStockDO.class);
+                voyageStockMapper.updateById(stockDO);
+            }else {
+                insertList.add(item);
+            }
+        });
+        return voyageStockDetailMapper.insertBatch(insertList);
     }
 
     @Override

+ 2 - 1
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/ShipApi.java

@@ -1,5 +1,6 @@
 package com.yc.ship.module.resource.api.ship;
 
+import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 
 import java.util.List;
@@ -21,6 +22,6 @@ public interface ShipApi {
      * @param shipId
      * @return
      */
-    Map<Long, Integer> queryRoomModelFloorToNum(Long shipId);
+    List<RoomModelFloorNumDTO> queryRoomModelFloorToNum(Long shipId);
 
 }

+ 7 - 2
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/ship/ShipApiImpl.java

@@ -2,8 +2,10 @@ package com.yc.ship.module.resource.api.ship;
 
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
+import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
 import com.yc.ship.module.resource.service.ship.ResourceShipService;
 import org.springframework.stereotype.Service;
 
@@ -16,6 +18,9 @@ public class ShipApiImpl implements ShipApi {
 
     @Resource
     private ResourceShipService shipService;
+
+    @Resource
+    private ResourceRoomMapper roomMapper;
     @Override
     public Map<Long, ShipRespDTO> queryShip(List<Long> ids) {
         List<ResourceShipDO> list = shipService.getList(ids);
@@ -25,7 +30,7 @@ public class ShipApiImpl implements ShipApi {
     }
 
     @Override
-    public Map<Long, Integer> queryRoomModelFloorToNum(Long shipId) {
-        return null;
+    public List<RoomModelFloorNumDTO> queryRoomModelFloorToNum(Long shipId) {
+        return roomMapper.selectRoomModelFloorToNum(shipId);
     }
 }

+ 6 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/room/ResourceRoomMapper.java

@@ -3,9 +3,11 @@ package com.yc.ship.module.resource.dal.mysql.room;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
 import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
 import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 import java.util.stream.Collectors;
@@ -51,4 +53,8 @@ public interface ResourceRoomMapper extends BaseMapperX<ResourceRoomDO> {
                 .inIfPresent(ResourceRoomDO::getRoomNum, roomNums));
         return list.stream().map(ResourceRoomDO::getRoomNum).map(String::valueOf).collect(Collectors.toList());
     }
+
+    @Select("select t1.room_model_id as roomModelId, t1.floors as floor, count(t1.id) as num, t2.name as room_model_name from resource_room t1 left JOIN resource_room_model t2 on t1.room_model_id = t2.id where t1.ship_id = #{shipId} group by t1.room_model_id, t1.floors")
+    List<RoomModelFloorNumDTO> selectRoomModelFloorToNum(Long shipId);
+
 }