|
@@ -1,10 +1,8 @@
|
|
|
package com.yc.ship.module.product.service.voyage;
|
|
|
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
-import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
-import com.yc.ship.framework.common.exception.ServiceException;
|
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
|
import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
@@ -16,9 +14,7 @@ import com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper;
|
|
|
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.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
|
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
|
-import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
|
|
|
import com.yc.ship.module.product.enums.YesOrNoEnum;
|
|
|
import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
|
|
|
import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
|
|
@@ -113,55 +109,51 @@ public class VoyageServiceImpl implements VoyageService {
|
|
|
|
|
|
VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
|
|
|
//现在给整个航次的库存加锁
|
|
|
- RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
|
|
|
+ String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
|
|
|
+ RLock lock = redissonClient.getLock(lockKey);
|
|
|
try {
|
|
|
- if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
|
|
|
- if(stockDO != null) {
|
|
|
- voyageStockMapper.updateById(voyageStockDO);
|
|
|
- }else {
|
|
|
- //新增时添加统计数据
|
|
|
- List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
|
|
|
- int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
|
|
|
- BigDecimal sum = BigDecimal.valueOf(intSum);
|
|
|
- voyageStockDO.setTotalNum(sum);
|
|
|
- voyageStockDO.setShareNum(BigDecimal.ZERO);
|
|
|
- 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.setVoyageId(voyageId);
|
|
|
- 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(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()));
|
|
|
- stockDetailDOS.add(stockDetailDO);
|
|
|
- });
|
|
|
- voyageStockDetailMapper.insertBatch(stockDetailDOS);
|
|
|
- }
|
|
|
+ lock.lock(60, TimeUnit.SECONDS);
|
|
|
+ if(stockDO != null) {
|
|
|
+ voyageStockMapper.updateById(voyageStockDO);
|
|
|
+ }else {
|
|
|
+ //新增时添加统计数据
|
|
|
+ List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
|
|
|
+ int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
|
|
|
+ BigDecimal sum = BigDecimal.valueOf(intSum);
|
|
|
+ voyageStockDO.setTotalNum(sum);
|
|
|
+ voyageStockDO.setShareNum(BigDecimal.ZERO);
|
|
|
+ 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.setVoyageId(voyageId);
|
|
|
+ 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(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()));
|
|
|
+ stockDetailDOS.add(stockDetailDO);
|
|
|
+ });
|
|
|
+ voyageStockDetailMapper.insertBatch(stockDetailDOS);
|
|
|
}
|
|
|
- }catch (ServiceException e) {
|
|
|
- log.error("创建航次失败:",e);
|
|
|
- }catch (Exception e) {
|
|
|
- log.error("创建航次失败:",e);
|
|
|
}finally {
|
|
|
if(lock.isHeldByCurrentThread() && lock.isLocked()){
|
|
|
lock.unlock();
|