@ -1503,6 +1503,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
HashSet < String > storeName = new HashSet < > ( ) ;
HashSet < String > receivingUnit = new HashSet < > ( ) ;
newStockArticle . forEach ( ( k , v ) - > {
List < Long > packageLockIds = new ArrayList < > ( ) ;
if ( Func . isEmpty ( oldStockArticle . get ( k ) ) ) {
//这里发生了新增订单的操作
AtomicInteger packageNum = new AtomicInteger ( ) ;
@ -1517,6 +1518,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
reservationPackageEntity . setPacketBarCode ( p . getOrderPackageCode ( ) ) ;
reservationPackageEntity . setParceListId ( p . getId ( ) ) ;
reservationPackageEntity . setReservationId ( id ) ;
packageLockIds . add ( p . getId ( ) ) ;
distributionReservationPackageService . save ( reservationPackageEntity ) ;
packageNum . getAndAdd ( p . getQuantity ( ) ) ;
DistributionParcelListEntity parcelListEntity = distributionParcelListService . getById ( p . getId ( ) ) ;
@ -1537,6 +1539,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
DistributionReservationPackageEntity distributionReservationPackageEntity = new DistributionReservationPackageEntity ( ) ;
distributionReservationPackageEntity . setReservationId ( id ) ;
distributionReservationPackageEntity . setParceListId ( dp . getId ( ) ) ;
packageLockIds . add ( dp . getId ( ) ) ;
distributionReservationPackageEntity . setStockArticleId ( distributionStockArticleDTO . getId ( ) ) ;
distributionReservationPackageEntity . setPacketBarCode ( dp . getOrderPackageCode ( ) ) ;
//维护订单下包件信息
@ -1580,6 +1583,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionReservationZeroPackageEntity . setType ( DistributionTypeConstant . shipie . getValue ( ) ) ;
distributionReservationZeroPackageEntity . setZeroPackageStatus ( ReservationOrderStatusConstant . zhengchang . getValue ( ) ) ;
distributionReservationZeroPackageService . save ( distributionReservationZeroPackageEntity ) ;
packageLockIds . add ( p . getParcelListId ( ) ) ;
//统计数量
zeroPackageNum . getAndAdd ( distributionReservationZeroPackageEntity . getQuantity ( ) ) ;
//维护零担订单品类对应数量的冻结数量
@ -1607,20 +1611,9 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
DistributionParcelNumberEntity parcelNumberEntity = distributionParcelNumberService . getById ( l . getId ( ) ) ;
parcelNumberEntity . setDeliveryQuantity ( parcelNumberEntity . getDeliveryQuantity ( ) + l . getReservationNum ( ) ) ;
distributionParcelNumberService . updateById ( parcelNumberEntity ) ;
packageLockIds . add ( l . getParcelListId ( ) ) ;
} ) ;
}
// DistributionReservationStockarticleEntity reservationStockarticleEntity = new DistributionReservationStockarticleEntity();
//
// //首先这里需要进行
// reservationStockarticleEntity.setIsZero(IsOrNoConstant.yes.getValue());
// reservationStockarticleEntity.setReservationId(id);
// reservationStockarticleEntity.setStockArticleId(distributionStockArticleDTO.getId());
// reservationStockarticleEntity.setStockArticleStatus(ReservationOrderStatusConstant.zhengchang.getValue());
// reservationStockarticleEntity.setStockArticleCode(distributionStockArticleDTO.getOrderCode());
// reservationStockarticleEntity.setIsHaveData(distributionStockArticleDTO.getIsHaveData());
// reservationStockarticleEntity.setReservationNum(zeroPackageNum.get());
// distributionReservationStockarticleService.save(reservationStockarticleEntity);
// packTotal.getAndAdd(reservationStockarticleEntity.getReservationNum());
}
DistributionReservationStockarticleEntity reservationStockarticleEntity = new DistributionReservationStockarticleEntity ( ) ;
reservationStockarticleEntity . setStockArticleStatus ( ReservationOrderStatusConstant . zengjia . getValue ( ) ) ;
@ -1666,6 +1659,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
reservationPackageEntity . setPacketBarCode ( distributionParcelListEntity . getOrderPackageCode ( ) ) ;
reservationPackageEntity . setParceListId ( distributionParcelListEntity . getId ( ) ) ;
reservationPackageEntity . setReservationId ( id ) ;
packageLockIds . add ( distributionParcelListEntity . getId ( ) ) ;
distributionReservationPackageService . save ( reservationPackageEntity ) ;
packageNum . getAndAdd ( distributionParcelListEntity . getQuantity ( ) ) ;
DistributionParcelListEntity parcelListEntity = distributionParcelListService . getById ( distributionParcelListEntity . getId ( ) ) ;
@ -1688,6 +1682,15 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
DistributionParcelListEntity parcelListEntity = distributionParcelListService . getById ( reservationPackageEntity . getParceListId ( ) ) ;
parcelListEntity . setOrderPackageReservationStatus ( OrderPackageReservationStatusConstant . daiyuyue . getValue ( ) ) ;
distributionParcelListService . updateById ( parcelListEntity ) ;
if ( Func . isNotEmpty ( bladeRedis . get ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + parcelListEntity . getOrderCode ( ) ) ) ) {
List < Long > ids = bladeRedis . get ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + parcelListEntity . getOrderCode ( ) ) ;
int indexOf = ids . indexOf ( parcelListEntity . getId ( ) ) ;
if ( indexOf > 0 ) {
ids . remove ( indexOf ) ;
bladeRedis . set ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + parcelListEntity . getOrderCode ( ) , ids ) ;
}
}
//移除缓存
} ) ;
reservationStockarticleEntity . setReservationNum ( packageNum . get ( ) ) ;
distributionReservationStockarticleService . updateById ( reservationStockarticleEntity ) ;
@ -1745,6 +1748,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
zeroPackageEntity . setParcelListId ( p . getParcelListId ( ) ) ;
zeroPackageEntity . setCategoryName ( p . getFirsts ( ) ) ;
zeroPackageEntity . setQuantity ( p . getReservationNum ( ) ) ;
packageLockIds . add ( p . getParcelListId ( ) ) ;
zeroPackageEntity . setZeroPackageStatus ( ReservationOrderStatusConstant . zengjia . getValue ( ) ) ;
zeroPackageEntity . setType ( DistributionTypeConstant . shipie . getValue ( ) ) ;
zeroPackageEntity . setReservationId ( id ) ;
@ -1787,11 +1791,26 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
// stockArticleEntity.setReservationStatus(status);
// distributionStockArticleService.updateById(stockArticleEntity);
}
//添加缓存
if ( ! packageLockIds . isEmpty ( ) ) {
List < Long > a = bladeRedis . get ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + v . get ( 0 ) . getOrderCode ( ) ) ;
if ( Func . isNotEmpty ( a ) ) {
boolean flag = a . stream ( ) . anyMatch ( f - > packageLockIds . contains ( f ) ) ;
if ( flag ) {
log . error ( "###############预约新增订单同时操作" ) ;
//当前操作包件存在于缓存中,此次操作无效
throw new RuntimeException ( v . get ( 0 ) . getOrderCode ( ) + "正在操作,请刷新后尝试" ) ;
} else {
bladeRedis . setEx ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + v . get ( 0 ) . getOrderCode ( ) , packageLockIds , 5 * 60L ) ;
}
}
}
} ) ;
if ( Func . isNotEmpty ( oldStockArticle ) ) {
oldStockArticle . forEach ( ( i , j ) - > {
//这里就是需要进行取消的订单信息
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService . getById ( i ) ;
DistributionReservationStockarticleEntity reservationStockarticleEntity = j . get ( 0 ) ;
if ( reservationStockarticleEntity . getIsZero ( ) . equals ( IsOrNoConstant . no . getValue ( ) ) ) {
reservationStockarticleEntity . setStockArticleStatus ( ReservationOrderStatusConstant . quxiao . getValue ( ) ) ;
@ -1803,6 +1822,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
DistributionParcelListEntity parcelListEntity = distributionParcelListService . getById ( p . getParceListId ( ) ) ;
parcelListEntity . setOrderPackageReservationStatus ( OrderPackageReservationStatusConstant . daiyuyue . getValue ( ) ) ;
distributionParcelListService . updateById ( parcelListEntity ) ;
bladeRedis . del ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + stockArticleEntity . getOrderCode ( ) ) ;
} ) ;
} else {
//订单零担移除
@ -1822,12 +1842,12 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
zp . setQuantity ( 0 ) ;
zp . setZeroPackageStatus ( ReservationOrderStatusConstant . quxiao . getValue ( ) ) ;
distributionReservationZeroPackageService . updateById ( zp ) ;
bladeRedis . del ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + stockArticleEntity . getOrderCode ( ) ) ;
} ) ;
reservationStockarticleEntity . setReservationNum ( 0 ) ;
reservationStockarticleEntity . setStockArticleStatus ( ReservationOrderStatusConstant . quxiao . getValue ( ) ) ;
}
//需要修改订单的状态
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService . getById ( i ) ;
DistributionStockArticleDTO stockArticleDTO = Func . copy ( stockArticleEntity , DistributionStockArticleDTO . class ) ;
//维护订单信息
distributionStockArticleService . maintenanceOrderInfo ( stockArticleDTO . getOrderCode ( ) , myCurrentWarehouse . getId ( ) ) ;
@ -2121,6 +2141,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
//运单客户收货单位
HashSet < String > consignee = new HashSet < > ( ) ;
v . forEach ( s - > {
List < Long > packageLockIds = new ArrayList < > ( ) ;
DistributionStockArticleDTO stockArticleDTO = Func . copy ( s , DistributionStockArticleDTO . class ) ;
// WarehouseWaybillEntity warehouseWaybillEntity = warehouseWaybillClient.findByWaybillNo(s.getWaybillNumber());
// if (Func.isNotEmpty(warehouseWaybillEntity.getConsigneeMobile())){
@ -2197,6 +2218,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionReservationPackageService . save ( reservationPackageEntity ) ;
p . setOrderPackageReservationStatus ( OrderPackageReservationStatusConstant . yiyueyue . getValue ( ) ) ;
distributionParcelListService . updateById ( p ) ;
packageLockIds . add ( p . getId ( ) ) ;
//这里根据包件进行订单状态的改变
// distributionAsyncService.checkStockArticleReservationStatus(p);
} ) ;
@ -2230,7 +2252,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
dp . setOrderPackageReservationStatus ( OrderPackageReservationStatusConstant . yiyueyue . getValue ( ) ) ;
distributionParcelListService . updateById ( dp ) ;
distributionAsyncService . checkStockArticleReservationStatus ( dp ) ;
packageLockIds . add ( dp . getId ( ) ) ;
}
}
@ -2265,6 +2287,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionParcelNumberService . updateById ( p ) ;
reservationOrderNum . getAndAdd ( distributionReservationZeroPackageEntity . getQuantity ( ) ) ;
distributionAsyncService . checkZeroStockArticleReservationStatus ( Func . copy ( p , DistributionParcelNumberEntity . class ) ) ;
packageLockIds . add ( p . getParcelListId ( ) ) ;
}
} ) ;
} else {
@ -2298,6 +2322,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionStockArticleService . maintenanceOrderInfo ( s . getOrderCode ( ) , s . getWarehouseId ( ) ) ;
//维护包件状态
distributionParcelListService . maintenanceZeroPackageInfo ( l . getParcelListId ( ) , l . getWarehouseId ( ) ) ;
packageLockIds . add ( l . getParcelListId ( ) ) ;
}
} ) ;
} else {
@ -2321,6 +2347,19 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
packageTotal . getAndAdd ( reservationStockarticleEntity . getReservationNum ( ) ) ;
orderTotal . getAndIncrement ( ) ;
distributionAsyncService . changeOrderReservationStatus ( stockArticleDTO ) ;
//进行订单的缓存添加
if ( ! packageLockIds . isEmpty ( ) ) {
List < Long > a = bladeRedis . get ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + s . getOrderCode ( ) ) ;
if ( Func . isNotEmpty ( a ) ) {
boolean flag = a . stream ( ) . anyMatch ( f - > packageLockIds . contains ( f ) ) ;
if ( flag ) {
log . info ( "###################商配存在同时操作订单,订单号:" + s . getOrderCode ( ) + "###################" ) ;
throw new RuntimeException ( s . getOrderCode ( ) + "正在操作,请刷新后尝试" ) ;
}
} else {
bladeRedis . setEx ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + s . getOrderCode ( ) , packageLockIds , 5 * 60L ) ;
}
}
} ) ;
//维护备货任务
DistributionStockupInfoEntity stockupInfoEntity = new DistributionStockupInfoEntity ( ) ;
@ -2613,6 +2652,11 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
@Override
@Transactional
public boolean cancelReservation ( DistributionReservationDTO reservationDTO ) {
BasicdataWarehouseEntity myCurrentWarehouse = basicdataWarehouseClient . getMyCurrentWarehouse ( ) ;
if ( Func . isEmpty ( myCurrentWarehouse ) ) {
log . error ( "cancelReservation未授权warehouseId>>>{}" , myCurrentWarehouse . getId ( ) ) ;
return false ;
}
if ( Func . isEmpty ( reservationDTO ) ) {
log . error ( "参数异常allocationDTO>>>{}" , reservationDTO ) ;
return false ;
@ -2686,7 +2730,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionReservationStockarticleService . updateById ( rs ) ;
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService . getById ( rs . getStockArticleId ( ) ) ;
distributionStockArticleService . maintenanceOrderInfo ( stockArticleEntity . getOrderCode ( ) , stockArticleEntity . getWarehouseId ( ) ) ;
//清除缓存
bladeRedis . del ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + stockArticleEntity . getOrderCode ( ) ) ;
} ) ;
}
@ -3103,6 +3148,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
return R . fail ( "订单已预约!!!" ) ;
}
stockArticleList . forEach ( s - > {
List < Long > packageLockIds = new ArrayList < > ( ) ;
if ( Func . isNotEmpty ( s . getAllocation ( ) ) ) {
s . setAllocation ( null ) ;
}
@ -3158,8 +3204,11 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
log . error ( "#########################无可用包件,订单ID为‘;:{}" , s . getId ( ) ) ;
throw new RuntimeException ( s . getOrderCode ( ) + "无可用包件!!!" ) ;
}
List < Long > packageIds = distributionParcelListEntities . stream ( ) . map ( DistributionParcelListEntity : : getId ) . collect ( Collectors . toList ( ) ) ;
packageLockIds . addAll ( packageIds ) ;
distributionParcelListEntities . forEach ( dp - > {
if ( ! dp . getOrderPackageStatus ( ) . equals ( OrderPackageStatusConstant . yiqianshou . getValue ( ) ) ) {
if ( ! Func . equals ( dp . getOrderPackageFreezeStatus ( ) , OrderPackageFreezeStatusConstant . yidongjie . getValue ( ) ) & & ! Func . equals ( dp . getOrderPackageReservationStatus ( ) , OrderPackageReservationStatusConstant . yiyueyue . getValue ( ) ) ) {
DistributionReservationPackageEntity distributionReservationPackageEntity = new DistributionReservationPackageEntity ( ) ;
distributionReservationPackageEntity . setReservationId ( reservationId ) ;
@ -3190,6 +3239,8 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
} else {
//维护选中的包件信息
List < Long > packageIds = packageList . stream ( ) . map ( DistributionParcelListEntity : : getId ) . collect ( Collectors . toList ( ) ) ;
packageLockIds . addAll ( packageIds ) ;
packageList . forEach ( p - > {
if ( ! p . getOrderPackageStatus ( ) . equals ( OrderPackageStatusConstant . yiqianshou . getValue ( ) ) ) {
if ( ! Func . equals ( p . getOrderPackageFreezeStatus ( ) , OrderPackageFreezeStatusConstant . yidongjie . getValue ( ) ) & & ! Func . equals ( p . getOrderPackageReservationStatus ( ) , OrderPackageReservationStatusConstant . yiyueyue . getValue ( ) ) ) {
@ -3273,6 +3324,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
parcelNumberEntity . setDeliveryQuantity ( parcelNumberEntity . getDeliveryQuantity ( ) + distributionReservationZeroPackageEntity . getQuantity ( ) ) ;
distributionParcelNumberService . updateById ( parcelNumberEntity ) ;
// distributionAsyncService.checkZeroStockArticleReservationStatus(parcelNumberEntity);
packageLockIds . add ( p . getParcelListId ( ) ) ;
}
} ) ;
} else {
@ -3299,6 +3351,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
parcelNumberEntity . setDeliveryQuantity ( parcelNumberEntity . getDeliveryQuantity ( ) + distributionReservationZeroPackageEntity . getQuantity ( ) ) ;
distributionParcelNumberService . updateById ( parcelNumberEntity ) ;
// distributionAsyncService.checkZeroStockArticleReservationStatus(parcelNumberEntity);
packageLockIds . add ( l . getParcelListId ( ) ) ;
}
} ) ;
}
@ -3322,13 +3375,26 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
distributionReservationStockarticleService . save ( distributionReservationStockarticleEntity ) ;
packageTotal . getAndAdd ( distributionReservationStockarticleEntity . getReservationNum ( ) ) ;
// distributionAsyncService.changeOrderReservationStatus(stockArticleDTO);
distributionStockArticleService . maintenanceOrderInfo ( s . getOrderCode ( ) , s . getWarehouseId ( ) ) ;
// WarehouseWaybillEntity byWaybillNo = warehouseWaybillClient.findByWaybillNo();
// String consigneeMobile = byWaybillNo.getConsigneeMobile();
if ( ! packageLockIds . isEmpty ( ) ) {
//判断此类包件是否还存在于缓存中
List < Long > a = bladeRedis . get ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + s . getOrderCode ( ) ) ;
if ( Func . isNotEmpty ( a ) ) {
boolean b = a . stream ( ) . anyMatch ( f - > packageLockIds . contains ( f ) ) ;
if ( b ) {
log . error ( "###############预约新增订单同时操作" ) ;
//当前操作包件存在于缓存中,此次操作无效
throw new RuntimeException ( s . getOrderCode ( ) + "正在操作,请刷新后尝试" ) ;
} else {
bladeRedis . setEx ( "warehouseId:" + myCurrentWarehouse . getId ( ) + s . getOrderCode ( ) , packageLockIds , 5 * 60L ) ;
}
} else {
bladeRedis . setEx ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + s . getOrderCode ( ) , packageLockIds , 5 * 60L ) ;
}
}
} ) ;
}
//存在库存品构建预约库存品关联信息
@ -3697,6 +3763,7 @@ public class DistributionReservationServiceImpl extends BaseServiceImpl<Distribu
log . error ( method + "计划存在相同ID包件:{}" , distributionCancelReservationPackageDTO . getPackageIds ( ) ) ;
return R . fail ( "此包件异常,请联系管理员...." ) ;
}
bladeRedis . del ( "warehouseId:" + myCurrentWarehouse . getId ( ) + "orderCode:" + cancelPackage . get ( 0 ) . getOrderCode ( ) ) ;
}
}
distributionStockArticleService . maintenanceOrderInfo ( orderCodes , myCurrentWarehouse . getId ( ) ) ;