|
|
@@ -1,16 +1,25 @@
|
|
|
package com.yc.ship.module.product.service.voyagestockdistribute;
|
|
|
|
|
|
-import com.yc.ship.module.ota.api.OtaDistributorApi;
|
|
|
-import com.yc.ship.module.otc.api.store.StoreApi;
|
|
|
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeLogMapper;
|
|
|
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
|
|
|
-import com.yc.ship.module.product.service.voyage.VoyageService;
|
|
|
-import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService;
|
|
|
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
|
+import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewSaveReqVO;
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributorRoomRespVO;
|
|
|
+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.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
|
import com.yc.ship.module.resource.api.room.RoomApi;
|
|
|
+import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 航次库存分配 Service 实现类
|
|
|
@@ -22,26 +31,94 @@ import javax.annotation.Resource;
|
|
|
public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistributeNewService {
|
|
|
|
|
|
@Resource
|
|
|
- private VoyageStockDistributeMapper voyageStockDistributeMapper;
|
|
|
+ private VoyageStockDistributeNewMapper voyageStockDistributeNewMapper;
|
|
|
|
|
|
- @Resource
|
|
|
- private VoyageStockDistributeLogMapper voyageStockDistributeLogMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private VoyageStockDetailService voyageStockDetailService;
|
|
|
+ private VoyageStockDistributeRoomService voyageStockDistributeRoomService;
|
|
|
|
|
|
@Resource
|
|
|
- private VoyageService voyageService;
|
|
|
+ private RoomApi roomApi;
|
|
|
|
|
|
- @Resource
|
|
|
- private OtaDistributorApi otaDistributorApi;
|
|
|
|
|
|
- @Resource
|
|
|
- private StoreApi storeApi;
|
|
|
|
|
|
- @Resource
|
|
|
- private RoomApi roomApi;
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
|
|
|
+ BigDecimal zero = BigDecimal.ZERO;
|
|
|
+ Long voyageId = createReqVO.get(0).getVoyageId();
|
|
|
+ //删除分配的房间
|
|
|
+ voyageStockDistributeRoomService.deleteByVoyageId(voyageId);
|
|
|
+ // 分配的房间列表
|
|
|
+ List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
|
|
|
+ createReqVO.stream().forEach(item -> {
|
|
|
+ if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
|
|
|
+ roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
|
|
|
+ //修改或插入库存表
|
|
|
+ List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId);
|
|
|
+ if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
|
|
|
+ list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
|
|
|
+ list.stream().forEach(item -> {
|
|
|
+ item.setBookNum(zero);
|
|
|
+ });
|
|
|
+ if(!CollectionUtils.isAnyEmpty(list)) {
|
|
|
+ voyageStockDistributeNewMapper.insertBatch(list);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
|
|
|
+ Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+ List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+ Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+ List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
|
|
|
+ List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); // 修改数据
|
|
|
+ map.keySet().stream().forEach(key -> {
|
|
|
+ if(existList.contains(key)) { //存在,做修改
|
|
|
+ VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
|
|
|
+ voyageStockDistributeNewDO.setNum(map.get(key));
|
|
|
+ voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
|
|
|
+ updateList.add(voyageStockDistributeNewDO);
|
|
|
+ }else { //不存在,做插入
|
|
|
+ VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
|
|
|
+ insertList.add(voyageStockDistributeNewDO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if(!CollectionUtils.isAnyEmpty(updateList)) {
|
|
|
+ voyageStockDistributeNewMapper.updateBatch(updateList);
|
|
|
+ }
|
|
|
+ if(!CollectionUtils.isAnyEmpty(insertList)) {
|
|
|
+ voyageStockDistributeNewMapper.insertBatch(insertList);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<VoyageStockDistributeNewRespVO> getByVoyageId(Long voyageId) {
|
|
|
+ List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId);
|
|
|
+ List<VoyageStockDistributeNewRespVO> respList = BeanUtils.toBean(list, VoyageStockDistributeNewRespVO.class);
|
|
|
+ List<VoyageStockDistributeRoomDO> roomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId);
|
|
|
+ Map<String, List<VoyageStockDistributeRoomDO>> map = CollectionUtils.convertMultiMap(roomList, (item) -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+ respList.stream().forEach(item -> {
|
|
|
+ item.setRoomList(BeanUtils.toBean(map.get(item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor()), VoyageStockDistributorRoomRespVO.class));
|
|
|
+ });
|
|
|
+ return respList;
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<RoomRespDTO> getRoomList(Long voyageId, Long shipId) {
|
|
|
+ //获取该游轮的所有房间
|
|
|
+ List<RoomRespDTO> roomList = roomApi.getRoomList(shipId);
|
|
|
+ // 获取已被分配的房间
|
|
|
+ List<VoyageStockDistributeRoomDO> distributeRoomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId);
|
|
|
+ List<Long> selectedRoomIds = CollectionUtils.convertList(distributeRoomList, VoyageStockDistributeRoomDO::getRoomId);
|
|
|
+ roomList.stream().forEach(item -> {
|
|
|
+ item.setIsSelected(selectedRoomIds.contains(item.getId()));
|
|
|
+ //TODO 待完善,已被销售的房间不可操作
|
|
|
+ item.setDisabled(false);//当前全部都可操作
|
|
|
+ });
|
|
|
+ return roomList;
|
|
|
+ }
|
|
|
}
|