|
@@ -9,6 +9,8 @@ import com.yc.ship.module.otc.api.store.dto.StoreInfoRespDTO;
|
|
|
import com.yc.ship.module.otc.api.store.dto.StoreRespDTO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
|
|
|
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeLogDO;
|
|
|
+import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeLogMapper;
|
|
|
import com.yc.ship.module.product.service.distributorDiscount.DistributorDiscountService;
|
|
|
import com.yc.ship.module.product.service.voyage.VoyageService;
|
|
|
import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService;
|
|
@@ -18,6 +20,8 @@ import org.springframework.validation.annotation.Validated;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
|
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
@@ -41,6 +45,9 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
|
|
|
@Resource
|
|
|
private VoyageStockDistributeMapper voyageStockDistributeMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private VoyageStockDistributeLogMapper voyageStockDistributeLogMapper;
|
|
|
+
|
|
|
@Resource
|
|
|
private VoyageStockDetailService voyageStockDetailService;
|
|
|
|
|
@@ -53,13 +60,72 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
|
|
|
@Resource
|
|
|
private StoreApi storeApi;
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public Long createVoyageStockDistribute(VoyageStockDistributeSaveReqVO createReqVO) {
|
|
|
- // 插入
|
|
|
- VoyageStockDistributeDO voyageStockDistribute = BeanUtils.toBean(createReqVO, VoyageStockDistributeDO.class);
|
|
|
- voyageStockDistributeMapper.insert(voyageStockDistribute);
|
|
|
- // 返回
|
|
|
- return voyageStockDistribute.getId();
|
|
|
+ public void createVoyageStockDistribute(List<VoyageStockDistributeSaveReqVO> createReqVO) {
|
|
|
+ // 插入库存设置日志表
|
|
|
+ List<VoyageStockDistributeLogDO> logList = BeanUtils.toBean(createReqVO, VoyageStockDistributeLogDO.class);
|
|
|
+ voyageStockDistributeLogMapper.insertBatch(logList);
|
|
|
+ Long voyageId = logList.get(0).getVoyageId();
|
|
|
+
|
|
|
+ //修改或插入库存表
|
|
|
+ List<VoyageStockDistributeDO> list = voyageStockDistributeMapper.selectListByVoyageId(voyageId);
|
|
|
+ if(CollectionUtils.isAnyEmpty(list)) {//为空则新增
|
|
|
+ list = BeanUtils.toBean(createReqVO, VoyageStockDistributeDO.class);
|
|
|
+ list.stream().forEach(item -> {
|
|
|
+ item.setBookNum(0);
|
|
|
+ item.setSurplusNum(item.getNum());
|
|
|
+ item.setRoomModelNum(item.getNum());
|
|
|
+ });
|
|
|
+ voyageStockDistributeMapper.insertBatch(list);
|
|
|
+ }else { //不为空则修改库存
|
|
|
+ Map<String, Integer> roomNumMap = CollectionUtils.convertMap(createReqVO, item -> {
|
|
|
+ //key为航次ID_分销商类型_分销商ID_门店ID_房型ID_楼层号作为唯一
|
|
|
+ return item.getVoyageId() + "_" + item.getDistributorType()
|
|
|
+ + "_" + item.getDistributorId() + "_" + item.getStoreId()
|
|
|
+ + "_" + item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ }, item -> item.getNum());
|
|
|
+ Map<String, Integer> roomModelNumMap = CollectionUtils.convertMap(createReqVO, item -> {
|
|
|
+ //key为航次ID_分销商类型_分销商ID_门店ID_房型ID_楼层号作为唯一
|
|
|
+ return item.getVoyageId() + "_" + item.getDistributorType()
|
|
|
+ + "_" + item.getDistributorId() + "_" + item.getStoreId()
|
|
|
+ + "_" + item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ }, item -> item.getRoomModelNum());
|
|
|
+
|
|
|
+
|
|
|
+ list.stream().forEach(item -> {
|
|
|
+ String key = item.getVoyageId() + "_" + item.getDistributorType()
|
|
|
+ + "_" + item.getDistributorId() + "_" + item.getStoreId()
|
|
|
+ + "_" + item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ item.setNum(item.getNum()+roomNumMap.get(key));
|
|
|
+ item.setSurplusNum(item.getSurplusNum()+roomNumMap.get(key));
|
|
|
+ item.setRoomModelNum(item.getRoomModelNum()+roomModelNumMap.get(key));
|
|
|
+ });
|
|
|
+ voyageStockDistributeMapper.updateBatch(list);
|
|
|
+
|
|
|
+ //找出多了的分销商或者门店
|
|
|
+ List<String> keys = CollectionUtils.convertList(list, item -> {
|
|
|
+ return item.getDistributorId() + "_" + item.getDistributorType()
|
|
|
+ + "_" + item.getDistributorId() + "_" + item.getStoreId()
|
|
|
+ + "_" + item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ });
|
|
|
+ List<VoyageStockDistributeSaveReqVO> newList = createReqVO.stream().filter(item -> {
|
|
|
+ String key = item.getVoyageId() + "_" + item.getDistributorType()
|
|
|
+ + "_" + item.getDistributorId() + "_" + item.getStoreId()
|
|
|
+ + "_" + item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ return !keys.contains(key);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ if(!CollectionUtils.isAnyEmpty(newList)) {
|
|
|
+ List<VoyageStockDistributeDO> addList = BeanUtils.toBean(newList, VoyageStockDistributeDO.class);
|
|
|
+ addList.stream().forEach(item -> {
|
|
|
+ item.setBookNum(0);
|
|
|
+ item.setSurplusNum(item.getNum());
|
|
|
+ item.setRoomModelNum(item.getNum());
|
|
|
+ });
|
|
|
+ voyageStockDistributeMapper.insertBatch(addList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -89,12 +155,43 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
|
|
|
|
|
|
@Override
|
|
|
public List<VoyageStockDistributeDO> getListByVoyageId(Long voyageId) {
|
|
|
- List<VoyageStockDistributeDO> list = voyageStockDistributeMapper.selectListByVoyageId(voyageId);
|
|
|
+ List<VoyageStockDistributeDO> list = new ArrayList<>();
|
|
|
VoyageDO voyage = voyageService.getVoyage(voyageId);
|
|
|
- if(list.isEmpty()) {
|
|
|
-// list = new ArrayList<>();
|
|
|
- List<VoyageStockDetailDO> stockDetailDOS = voyageStockDetailService.getListByVoyageId(voyageId);
|
|
|
- // OTA分销商类型数据
|
|
|
+ List<VoyageStockDetailDO> stockDetailDOS = voyageStockDetailService.getListByVoyageId(voyageId);
|
|
|
+ // OTA分销商类型数据
|
|
|
+ stockDetailDOS.stream().forEach(item -> {
|
|
|
+ VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
+ stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
+ stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
+ stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
+ stockDistributeDO.setFloor(item.getFloor());
|
|
|
+ stockDistributeDO.setNum(0);
|
|
|
+ stockDistributeDO.setDistributorType(DistributorTypeEnum.OTA.getType());
|
|
|
+ stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTA.getName());
|
|
|
+ stockDistributeDO.setDistributorId(null);
|
|
|
+ stockDistributeDO.setStoreId(null);
|
|
|
+ stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
+ list.add(stockDistributeDO);
|
|
|
+ });
|
|
|
+ //旅行社分销商类型数据
|
|
|
+ stockDetailDOS.stream().forEach(item -> {
|
|
|
+ VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
+ stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
+ stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
+ stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
+ stockDistributeDO.setFloor(item.getFloor());
|
|
|
+ stockDistributeDO.setNum(0);
|
|
|
+ stockDistributeDO.setDistributorType(DistributorTypeEnum.OTC.getType());
|
|
|
+ stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTC.getName());
|
|
|
+ stockDistributeDO.setDistributorId(null);
|
|
|
+ stockDistributeDO.setStoreId(null);
|
|
|
+ stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
+ list.add(stockDistributeDO);
|
|
|
+ });
|
|
|
+
|
|
|
+ //OTA分销商类型的分销商数据
|
|
|
+ List<DistributorRespDTO> otaDistributorList = otaDistributorApi.getDistributorList(DistributorTypeEnum.OTA.getType());
|
|
|
+ otaDistributorList.stream().forEach(distributor -> {
|
|
|
stockDetailDOS.stream().forEach(item -> {
|
|
|
VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
@@ -104,12 +201,17 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
|
|
|
stockDistributeDO.setNum(0);
|
|
|
stockDistributeDO.setDistributorType(DistributorTypeEnum.OTA.getType());
|
|
|
stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTA.getName());
|
|
|
- stockDistributeDO.setDistributorId(null);
|
|
|
+ stockDistributeDO.setDistributorId(distributor.getId());
|
|
|
+ stockDistributeDO.setDistributorName(distributor.getName());
|
|
|
stockDistributeDO.setStoreId(null);
|
|
|
stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
list.add(stockDistributeDO);
|
|
|
});
|
|
|
- //旅行社分销商类型数据
|
|
|
+ });
|
|
|
+ //旅行社分销商类型的分销商数据
|
|
|
+ List<DistributorRespDTO> otcDistributorList = otaDistributorApi.getDistributorList(DistributorTypeEnum.OTC.getType());
|
|
|
+ Map<Long, DistributorRespDTO> otcIdDistributorMap = CollectionUtils.convertMap(otcDistributorList, DistributorRespDTO::getId);
|
|
|
+ otcDistributorList.stream().forEach(distributor -> {
|
|
|
stockDetailDOS.stream().forEach(item -> {
|
|
|
VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
@@ -119,72 +221,33 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
|
|
|
stockDistributeDO.setNum(0);
|
|
|
stockDistributeDO.setDistributorType(DistributorTypeEnum.OTC.getType());
|
|
|
stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTC.getName());
|
|
|
- stockDistributeDO.setDistributorId(null);
|
|
|
+ stockDistributeDO.setDistributorId(distributor.getId());
|
|
|
+ stockDistributeDO.setDistributorName(distributor.getName());
|
|
|
stockDistributeDO.setStoreId(null);
|
|
|
stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
list.add(stockDistributeDO);
|
|
|
});
|
|
|
-
|
|
|
- //OTA分销商类型的分销商数据
|
|
|
- List<DistributorRespDTO> otaDistributorList = otaDistributorApi.getDistributorList(DistributorTypeEnum.OTA.getType());
|
|
|
- otaDistributorList.stream().forEach(distributor -> {
|
|
|
- stockDetailDOS.stream().forEach(item -> {
|
|
|
- VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
- stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
- stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
- stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
- stockDistributeDO.setFloor(item.getFloor());
|
|
|
- stockDistributeDO.setNum(0);
|
|
|
- stockDistributeDO.setDistributorType(DistributorTypeEnum.OTA.getType());
|
|
|
- stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTA.getName());
|
|
|
- stockDistributeDO.setDistributorId(distributor.getId());
|
|
|
- stockDistributeDO.setDistributorName(distributor.getName());
|
|
|
- stockDistributeDO.setStoreId(null);
|
|
|
- stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
- list.add(stockDistributeDO);
|
|
|
- });
|
|
|
- });
|
|
|
- //旅行社分销商类型的分销商数据
|
|
|
- List<DistributorRespDTO> otcDistributorList = otaDistributorApi.getDistributorList(DistributorTypeEnum.OTC.getType());
|
|
|
- Map<Long, DistributorRespDTO> otcIdDistributorMap = CollectionUtils.convertMap(otcDistributorList, DistributorRespDTO::getId);
|
|
|
- otcDistributorList.stream().forEach(distributor -> {
|
|
|
- stockDetailDOS.stream().forEach(item -> {
|
|
|
- VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
- stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
- stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
- stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
- stockDistributeDO.setFloor(item.getFloor());
|
|
|
- stockDistributeDO.setNum(0);
|
|
|
- stockDistributeDO.setDistributorType(DistributorTypeEnum.OTC.getType());
|
|
|
- stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTC.getName());
|
|
|
- stockDistributeDO.setDistributorId(distributor.getId());
|
|
|
- stockDistributeDO.setDistributorName(distributor.getName());
|
|
|
- stockDistributeDO.setStoreId(null);
|
|
|
- stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
- list.add(stockDistributeDO);
|
|
|
- });
|
|
|
- });
|
|
|
- //获取旅行社门店的库存数据
|
|
|
- List<StoreInfoRespDTO> storeList = storeApi.getStoreList();
|
|
|
- storeList.stream().forEach(store -> {
|
|
|
- stockDetailDOS.stream().forEach(item -> {
|
|
|
- VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
- stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
- stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
- stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
- stockDistributeDO.setFloor(item.getFloor());
|
|
|
- stockDistributeDO.setNum(0);
|
|
|
- stockDistributeDO.setDistributorType(DistributorTypeEnum.OTC.getType());
|
|
|
- stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTC.getName());
|
|
|
- stockDistributeDO.setDistributorId(store.getAgencyId());
|
|
|
- stockDistributeDO.setDistributorName(otcIdDistributorMap.get(store.getAgencyId()).getName());
|
|
|
- stockDistributeDO.setStoreId(store.getId());
|
|
|
- stockDistributeDO.setStoreName(store.getStoreName());
|
|
|
- stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
- list.add(stockDistributeDO);
|
|
|
- });
|
|
|
+ });
|
|
|
+ //获取旅行社门店的库存数据
|
|
|
+ List<StoreInfoRespDTO> storeList = storeApi.getStoreList();
|
|
|
+ storeList.stream().forEach(store -> {
|
|
|
+ stockDetailDOS.stream().forEach(item -> {
|
|
|
+ VoyageStockDistributeDO stockDistributeDO = new VoyageStockDistributeDO();
|
|
|
+ stockDistributeDO.setVoyageId(item.getVoyageId());
|
|
|
+ stockDistributeDO.setRoomModelId(item.getRoomModelId());
|
|
|
+ stockDistributeDO.setRoomModelName(item.getRoomModelName());
|
|
|
+ stockDistributeDO.setFloor(item.getFloor());
|
|
|
+ stockDistributeDO.setNum(0);
|
|
|
+ stockDistributeDO.setDistributorType(DistributorTypeEnum.OTC.getType());
|
|
|
+ stockDistributeDO.setDistributorTypeName(DistributorTypeEnum.OTC.getName());
|
|
|
+ stockDistributeDO.setDistributorId(store.getAgencyId());
|
|
|
+ stockDistributeDO.setDistributorName(otcIdDistributorMap.get(store.getAgencyId()).getName());
|
|
|
+ stockDistributeDO.setStoreId(store.getId());
|
|
|
+ stockDistributeDO.setStoreName(store.getStoreName());
|
|
|
+ stockDistributeDO.setShipId(voyage.getShipId());
|
|
|
+ list.add(stockDistributeDO);
|
|
|
});
|
|
|
- }
|
|
|
+ });
|
|
|
return list;
|
|
|
}
|
|
|
|