Browse Source

fix: 修改有搜索航次的搜索方式,旅行社端的航次库存详情可以显示共享库存的数据

luofeiyun 3 days ago
parent
commit
b545a6fca3
16 changed files with 122 additions and 10 deletions
  1. 3 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyagePageReqVO.java
  2. 7 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java
  3. 4 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyagePageReqVO.java
  4. 3 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockPageReqVO.java
  5. 3 3
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/VoyageStockDistributeNewController.java
  6. 6 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewDetailReqVO.java
  7. 4 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewPageReqVO.java
  8. 1 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java
  9. 7 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java
  10. 1 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockMapper.java
  11. 7 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageService.java
  12. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java
  13. 2 2
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java
  14. 2 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewService.java
  15. 65 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java
  16. 2 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml

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

@@ -44,4 +44,7 @@ public class PriceVoyagePageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "航次ID列表")
+    private List<Long> voyageIds;
+
 }

+ 7 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java

@@ -120,6 +120,13 @@ public class VoyageController {
         return success(BeanUtils.toBean(list, VoyageRespVO.class));
     }
 
+    @GetMapping("/listByShipId")
+    @Operation(summary = "获得资源管理-航次列表")
+    public CommonResult<List<VoyageRespVO>> listByShipId(Long shipId) {
+        List<VoyageDO> list = voyageService.getListByShipId(shipId);
+        return success(BeanUtils.toBean(list, VoyageRespVO.class));
+    }
+
     @GetMapping("/list-calendar")
     @Operation(summary = "获得资源管理-航次列表-日历")
     public CommonResult<List<VoyageRespVO>> getVoyageListCalendar(VoyageCalendarReqVO reqVO) {

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyagePageReqVO.java

@@ -8,6 +8,7 @@ import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
@@ -57,4 +58,7 @@ public class VoyagePageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "航次ID列表")
+    private List<Long> voyageIds;
+
 }

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

@@ -21,4 +21,7 @@ public class VoyageStockPageReqVO extends PageParam {
     @Schema(description = "船ID", example = "6357")
     private Long shipId;
 
+    @Schema(description = "航次ID列表", example = "1,2")
+    private List<Long> voyageIds;
+
 }

+ 3 - 3
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/VoyageStockDistributeNewController.java

@@ -35,10 +35,10 @@ public class VoyageStockDistributeNewController {
 
 
     @Operation(summary = "创建航次库存分配")
-    @PostMapping("/create")
+    @PostMapping("/create/{voyageId}/{type}")
     @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute-new:create')")
-    public CommonResult<Boolean> createVoyageStockDistribute(@Valid @RequestBody List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
-        voyageStockDistributeNewService.createVoyageStockDistributeNew(createReqVO);
+    public CommonResult<Boolean> createVoyageStockDistribute(@PathVariable("voyageId") Long voyageId,@PathVariable("type") Integer type,@Valid @RequestBody List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
+        voyageStockDistributeNewService.createVoyageStockDistributeNew(voyageId,type,createReqVO);
         return success(true);
     }
 

+ 6 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewDetailReqVO.java

@@ -18,6 +18,12 @@ public class VoyageStockDistributeNewDetailReqVO {
     @Schema(description = "航次ID", example = "6756")
     private Long voyageId;
 
+    @Schema(description = "船ID", example = "6756")
+    private Long shipId;
+
     @Schema(description = "1分销商 2门店", example = "1")
     private Integer type;
+
+    @Schema(description = "是否启用共享库存", example = "1")
+    private Integer enableShare;
 }

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewPageReqVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
+import java.util.List;
 
 @Schema(description = "管理后台 - 航次库存分配保存 Request VO")
 @Data
@@ -31,6 +32,9 @@ public class VoyageStockDistributeNewPageReqVO extends PageParam {
     @Schema(description = "是否启用共享库存", example = "1")
     private Integer enableShare;
 
+    @Schema(description = "航次ID", example = "1")
+    private List<Long> voyageIds;
+
 
 
 

+ 1 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java

@@ -34,6 +34,7 @@ public interface PriceVoyageMapper extends BaseMapperX<PriceVoyageDO> {
                 .betweenIfPresent(PriceVoyageDO::getValidateTime, reqVO.getValidateTime())
                 .eqIfPresent(PriceVoyageDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(PriceVoyageDO::getCreateTime, reqVO.getCreateTime())
+                .inIfPresent(PriceVoyageDO::getVoyageId, reqVO.getVoyageIds())
                 .orderByDesc(PriceVoyageDO::getId));
     }
 

+ 7 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java

@@ -35,6 +35,7 @@ public interface VoyageMapper extends BaseMapperX<VoyageDO> {
                 .eqIfPresent(VoyageDO::getTransfer, reqVO.getTransfer())
                 .eqIfPresent(VoyageDO::getShelfStatus, reqVO.getShelfStatus())
                 .betweenIfPresent(VoyageDO::getCreateTime, reqVO.getCreateTime())
+                .inIfPresent(VoyageDO::getId, reqVO.getVoyageIds())
                 .orderByDesc(VoyageDO::getId));
     }
 
@@ -83,4 +84,10 @@ public interface VoyageMapper extends BaseMapperX<VoyageDO> {
                 .likeIfPresent(VoyageDO::getChannel, reqVO.getChannel())
                 .orderByAsc(VoyageDO::getStartTime));
     }
+
+    default List<VoyageDO> selectListByShipId(Long shipId) {
+        return selectList(new LambdaQueryWrapperX<VoyageDO>()
+                .eq(VoyageDO::getShipId, shipId)
+                .orderByAsc(VoyageDO::getStartTime));
+    }
 }

+ 1 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockMapper.java

@@ -23,6 +23,7 @@ public interface VoyageStockMapper extends BaseMapperX<VoyageStockDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<VoyageStockDO>()
                 .likeIfPresent(VoyageStockDO::getVoyageName, reqVO.getVoyageName())
                 .eqIfPresent(VoyageStockDO::getShipId, reqVO.getShipId())
+                .inIfPresent(VoyageStockDO::getVoyageId, reqVO.getVoyageIds())
                 .orderByAsc(VoyageStockDO::getVoyageId));
     }
 

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

@@ -78,4 +78,11 @@ public interface VoyageService {
      * @return
      */
     List<VoyageDO> getListCalendar(VoyageCalendarReqVO reqVO);
+
+    /**
+     * 根据游轮ID获取航次列表
+     * @param shipId
+     * @return
+     */
+    List<VoyageDO> getListByShipId(Long shipId);
 }

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

@@ -383,4 +383,9 @@ public class VoyageServiceImpl implements VoyageService {
         return voyageMapper.selectListCalendar(reqVO);
     }
 
+    @Override
+    public List<VoyageDO> getListByShipId(Long shipId) {
+        return voyageMapper.selectListByShipId(shipId);
+    }
+
 }

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

@@ -101,7 +101,7 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
         if(distributeNum == null) {
             distributeNum = BigDecimal.ZERO;
         }
-        stockDO.setShareNum(stockDO.getTotalNum().subtract(distributeNum));
+        stockDO.setShareNum(stockDO.getCanSellNum().subtract(distributeNum));
         voyageStockMapper.updateById(stockDO);
     }
 
@@ -178,7 +178,7 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
                 item.setVoyageId(voyageId);
                 if(ProductStockStaticsName.TOTAL.equals(item.getRoomModelName())) {
                     VoyageStockDO stockDO = BeanUtils.toBean(item, VoyageStockDO.class);
-                    stockDO.setShareNum(stockDO.getTotalNum());
+                    stockDO.setShareNum(stockDO.getCanSellNum());
                     voyageStockMapper.updateById(stockDO);
                 }else {
                     insertList.add(item);

+ 2 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewService.java

@@ -17,9 +17,10 @@ public interface VoyageStockDistributeNewService {
 
     /**
      * 创建分配库存
+     * @param voyageId
      * @param createReqVO
      */
-    void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO);
+    void createVoyageStockDistributeNew(Long voyageId, Integer type, List<VoyageStockDistributeNewSaveReqVO> createReqVO);
 
     /**
      * 获取航次库存分配

+ 65 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java

@@ -8,6 +8,7 @@ import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockRes
 import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.*;
 import com.yc.ship.module.product.controller.app.voyage.vo.AppCanSelectRoomReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockRoomUsedDO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockRoomUsedMapper;
@@ -74,15 +75,13 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
+    public void createVoyageStockDistributeNew(Long voyageId, Integer type, List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
         BigDecimal zero = BigDecimal.ZERO;
-        Long voyageId = createReqVO.get(0).getVoyageId();
         //现在给整个航次的库存加锁
         String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
         RLock lock = redissonClient.getLock(lockKey);
         try {
             lock.lock(60, TimeUnit.SECONDS);
-            Integer type = createReqVO.get(0).getType();
             //删除分配的房间
             voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
             // 分配的房间列表
@@ -242,9 +241,71 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
 
     @Override
     public List<VoyageStockDistributeNewRespVO> getDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
+        Integer enableShare = reqVO.getEnableShare();
+        if(enableShare.equals(YesOrNoEnum.YES.getType())) {
+            return getShareStockDetail(reqVO);
+        }else {
+            return getDistributorStockDetail(reqVO);
+        }
+    }
+
+    /**
+     * 获取共享库存详情
+     * @param reqVO
+     */
+    private List<VoyageStockDistributeNewRespVO> getShareStockDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
+        List<VoyageStockDistributeNewRespVO> list = new ArrayList<>();
+        //该游轮所以的房间
+        List<RoomRespDTO> roomList = roomApi.getRoomList(reqVO.getShipId());
+        //1.排除已被分配的房间
+        List<VoyageStockDistributeRoomDO> distributeRoomList = voyageStockDistributeRoomService.getListByVoyageId(reqVO.getVoyageId(), reqVO.getType());
+        List<Long> roomIds = CollectionUtils.convertList(distributeRoomList, VoyageStockDistributeRoomDO::getRoomId);
+        List<RoomRespDTO> roomList1 = roomList.stream().filter(item -> !roomIds.contains(item.getId())).collect(Collectors.toList());
+        //2.排除已被售卖的房间
+        List<VoyageStockRoomUsedDO> usedRoomList = voyageStockRoomUsedMapper.selectListByVoyageId(reqVO.getVoyageId());
+        List<Long> usedRoomIds = CollectionUtils.convertList(usedRoomList, VoyageStockRoomUsedDO::getRoomId);
+        List<RoomRespDTO> roomList2 = roomList1.stream().filter(item -> !usedRoomIds.contains(item.getId())).collect(Collectors.toList());
+        List<VoyageStockDistributorRoomRespVO> voyageStockDistributorRoomRespVOS = new ArrayList<>();
+        roomList2.stream().forEach(item -> {
+            VoyageStockDistributorRoomRespVO respVO = new VoyageStockDistributorRoomRespVO();
+            respVO.setRoomNum(item.getRoomNum())
+                    .setFloor(item.getFloors())
+                    .setRoomModelId(item.getRoomModelId());
+            voyageStockDistributorRoomRespVOS.add(respVO);
+        });
+        Map<String, List<VoyageStockDistributorRoomRespVO>> map = CollectionUtils.convertMultiMap(voyageStockDistributorRoomRespVOS, (item) -> item.getRoomModelId() + "_" + item.getFloor());
+
+        // 获取所有库存
+        List<VoyageStockDetailDO> stockDetailDOList = voyageStockDetailService.getListByVoyageId(reqVO.getVoyageId());
+        List<VoyageStockDetailDO> stockDetailDOList1 = stockDetailDOList.stream().filter(item -> item.getCanSellNum().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
+
+        //减去已分配的库存,剩下的就是共享库存
+        List<VoyageStockDistributeNewDO> distributeNewDOS = voyageStockDistributeNewMapper.selectListByVoyageId(reqVO.getVoyageId(), reqVO.getType());
+        Map<String, BigDecimal> distributeNewMap = CollectionUtils.convertMap(distributeNewDOS, item -> item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
+
+        stockDetailDOList1.stream().forEach(item -> {
+            BigDecimal bigDecimal = distributeNewMap.get(item.getRoomModelId() + "_" + item.getFloor());
+            if (bigDecimal == null) {
+                bigDecimal = BigDecimal.ZERO;
+            }
+            VoyageStockDistributeNewRespVO respVO = new VoyageStockDistributeNewRespVO();
+            respVO.setNum(item.getCanSellNum().subtract(bigDecimal))
+                    .setFloor(item.getFloor())
+                    .setRoomModelId(item.getRoomModelId())
+                    .setRoomModelName(item.getRoomModelName());
+            respVO.setRoomList(map.get(item.getRoomModelId() + "_" + item.getFloor()));
+            list.add(respVO);
+        });
+       return list;
+    }
+
+    /**
+     * 获取分销商库存详情
+     * @param reqVO
+     */
+    private List<VoyageStockDistributeNewRespVO> getDistributorStockDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
         List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageIdAndObjectId(reqVO);
         List<VoyageStockDistributeNewRespVO> respVO = BeanUtils.toBean(list, VoyageStockDistributeNewRespVO.class);
-
         List<VoyageStockDistributeRoomDO> roomList = voyageStockDistributeRoomService.getListByVoyageIdAndObjectId(reqVO);
         List<VoyageStockDistributorRoomRespVO> roomRespList = BeanUtils.toBean(roomList, VoyageStockDistributorRoomRespVO.class);
         List<Long> roomIds = CollectionUtils.convertList(roomRespList, VoyageStockDistributorRoomRespVO::getRoomId);

+ 2 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml

@@ -37,6 +37,8 @@
         </if>
         GROUP BY
         t1.id
+        order by
+        t1.start_time ASC
 
     </select>
     <select id="selectRoomModelListByVoyageId"