|
|
@@ -1,12 +1,19 @@
|
|
|
package com.yc.ship.module.product.service.voyagestockdetail;
|
|
|
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailBatchSaveReqVO;
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailRespNewVO;
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
|
|
|
+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.voyagestock.VoyageStockMapper;
|
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
|
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;
|
|
|
@@ -22,6 +29,7 @@ import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailM
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
@@ -46,6 +54,9 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
|
|
|
@Resource
|
|
|
private RedissonClient redissonClient;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private ShipApi shipApi;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean createVoyageStock(List<VoyageStockDetailSaveReqVO> createReqVO) {
|
|
|
@@ -93,6 +104,90 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
|
|
|
stockDO.setShareNum(stockDO.getTotalNum().subtract(distributeNum));
|
|
|
voyageStockMapper.updateById(stockDO);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<VoyageStockDetailRespNewVO> getInitByShip(Long shipId) {
|
|
|
+ List<VoyageStockDetailDO> result = new ArrayList<>();
|
|
|
+ List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(shipId);
|
|
|
+ list.stream().forEach(item -> {
|
|
|
+ VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
|
|
|
+ stockDetailDO.setRoomModelId(item.getRoomModelId());
|
|
|
+ stockDetailDO.setRoomModelName(item.getRoomModelName());
|
|
|
+ stockDetailDO.setFloor(item.getFloor());
|
|
|
+ stockDetailDO.setTotalNum(BigDecimal.valueOf(item.getNum()));
|
|
|
+ stockDetailDO.setRealTotalNum(BigDecimal.valueOf(item.getNum()));
|
|
|
+ stockDetailDO.setShelfNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setNotShelfNum(BigDecimal.valueOf(item.getNum()));
|
|
|
+ stockDetailDO.setShelfedNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setBookNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setCanSellNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setOversoldNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+ stockDetailDO.setSurplusNum(BigDecimal.valueOf(item.getNum()));
|
|
|
+ result.add(stockDetailDO);
|
|
|
+ });
|
|
|
+ int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
|
|
|
+ BigDecimal sum = BigDecimal.valueOf(intSum);
|
|
|
+ VoyageStockDetailDO voyageStockDO = new VoyageStockDetailDO();
|
|
|
+ voyageStockDO.setTotalNum(sum);
|
|
|
+ voyageStockDO.setRealTotalNum(sum);
|
|
|
+ voyageStockDO.setNotShelfNum(sum);
|
|
|
+ voyageStockDO.setShelfedNum(BigDecimal.ZERO);
|
|
|
+ voyageStockDO.setBookNum(BigDecimal.ZERO);
|
|
|
+ voyageStockDO.setCanSellNum(BigDecimal.ZERO);
|
|
|
+ voyageStockDO.setVirtualNum(BigDecimal.ZERO);
|
|
|
+ voyageStockDO.setOversoldNum(BigDecimal.ZERO);
|
|
|
+ voyageStockDO.setSurplusNum(sum);
|
|
|
+ voyageStockDO.setRoomModelName("合计");
|
|
|
+ voyageStockDO.setFloor(0);
|
|
|
+ result.add(voyageStockDO);
|
|
|
+ return BeanUtils.toBean(result, VoyageStockDetailRespNewVO.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean batchCreateVoyageStock(VoyageStockDetailBatchSaveReqVO createReqVO) {
|
|
|
+ if(createReqVO.getList().isEmpty()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ Long shipId = createReqVO.getShipId();
|
|
|
+ Integer type = createReqVO.getType();
|
|
|
+ //TODO: 该处type不应使用魔法值,后续优化
|
|
|
+ // 批量初始化库存,1表示该邮轮的全部航次,2表示指定航次
|
|
|
+ if(type == 1) {
|
|
|
+ //查询该邮轮未设置库存的航次
|
|
|
+ List<Long> voyageIds = voyageStockMapper.selectNoShelfdNumVoyageIdsByShipId(shipId);
|
|
|
+ handleBatchCreateVoyageStock(voyageIds, createReqVO);
|
|
|
+ }else if(type == 2){
|
|
|
+ List<Long> voyageIds = createReqVO.getVoyageIds();
|
|
|
+ List<Long> voyageIdsNew = voyageStockMapper.selectNoShelfdNumVoyageIdsByVoyageIds(voyageIds);
|
|
|
+ handleBatchCreateVoyageStock(voyageIdsNew, createReqVO);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Boolean handleBatchCreateVoyageStock(List<Long> voyageIds, VoyageStockDetailBatchSaveReqVO createReqVO) {
|
|
|
+ if(voyageIds.isEmpty()) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ List<VoyageStockDetailDO> list = BeanUtils.toBean(createReqVO.getList(), VoyageStockDetailDO.class);
|
|
|
+ List<VoyageStockDetailDO> insertList = new ArrayList<>();
|
|
|
+ voyageIds.stream().forEach(voyageId -> {
|
|
|
+ voyageStockDetailMapper.deleteByVoyageId(voyageId);
|
|
|
+ list.stream().forEach(item -> {
|
|
|
+ item.setVoyageId(voyageId);
|
|
|
+ if(ProductStockStaticsName.TOTAL.equals(item.getRoomModelName())) {
|
|
|
+ VoyageStockDO stockDO = BeanUtils.toBean(item, VoyageStockDO.class);
|
|
|
+ stockDO.setShareNum(stockDO.getTotalNum());
|
|
|
+ voyageStockMapper.updateById(stockDO);
|
|
|
+ }else {
|
|
|
+ insertList.add(item);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return voyageStockDetailMapper.insertBatch(insertList);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void updateVoyageStock(VoyageStockDetailSaveReqVO updateReqVO) {
|
|
|
// 更新
|