@ -48,11 +48,14 @@ import lombok.extern.log4j.Log4j2;
import org.springblade.common.constant.DictBizConstant ;
import org.springblade.common.constant.Inventory.InventoryStockUpStatusConstant ;
import org.springblade.common.constant.billLading.BillLadingStatusConstant ;
import org.springblade.common.constant.common.IsOrNoConstant ;
import org.springblade.common.constant.order.OrderReservationStatusConstant ;
import org.springblade.common.constant.order.OrderStatusConstant ;
import org.springblade.common.constant.orderpackage.OrderPackageLoadingStatusConstant ;
import org.springblade.common.constant.orderpackage.OrderPackageReservationStatusConstant ;
import org.springblade.common.constant.orderpackage.OrderPackageStatusConstant ;
import org.springblade.common.constant.pda.PdaAudioLingoStatus ;
import org.springblade.common.constant.reservation.ReservationOrderStatusConstant ;
import org.springblade.common.constant.reservation.ReservationPackageStatusConstant ;
import org.springblade.common.constant.stockup.StockAssignStatusConstant ;
import org.springblade.common.constant.stockup.StockupStatusConstant ;
@ -68,6 +71,8 @@ import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil ;
import org.springblade.system.cache.DictBizCache ;
import org.springframework.beans.BeanUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.context.annotation.Lazy ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
@ -87,46 +92,58 @@ import java.util.stream.Collectors;
* @since 2023 - 06 - 14
* /
@Service
@AllArgsConstructor
@Log4j2
public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl < DistrilbutionBillLadingMapper , DistrilbutionBillLadingEntity > implements IDistrilbutionBillLadingService {
private final IDistributionDeliveryChargeService distributionDeliveryChargeService ;
private final IDistributionDeliveryDetailsService distributionDeliveryDetailsService ;
private final IDistributionReservationService distributionReservationService ;
private final IDistributionPrintService distributionPrintService ;
private final IDistributionStockArticleService distributionStockArticleService ;
private final IDistributionParcelListService distributionParcelListService ;
private final IDistributionBillLadingScanService distributionBillLadingScanService ;
private final IDistrilbutionBillStockService distrilbutionBillStockService ;
private final IDistributionStockupScanService distributionStockupScanService ;
private final IDistributionStockListService distributionStockListService ;
private final DistributionStockListMapper distributionStockListMapper ;
private final IDistributionAsyncService distributionAsyncService ;
private final IDistributionStockService distributionStockService ;
private final IDistributionStockupService distributionStockupService ;
private final IDistributionStockupInfoService distributionStockupInfoService ;
private final IBasicdataWarehouseClient basicdataWarehouseClient ;
private final IDistributionReservationZeroPackageService distributionZeroPackageService ; //零担配送记录
private final IDistributionParcelNumberService distributionParcelNumberService ; //零担配送数量记录
private final IDistrilbutionBillPackageService distrilbutionBillPackageService ;
private final IBasicdataWarehouseClient warehouseClient ;
private final IWarehouseUpdownTypeClient warehouseUpdownTypeClient ;
private final IDisStockListDetailService disStockListDetailService ;
private final BladeRedis redis ;
@Autowired
private IDistributionDeliveryChargeService distributionDeliveryChargeService ;
@Autowired
private IDistributionDeliveryDetailsService distributionDeliveryDetailsService ;
@Autowired
private IDistributionReservationService distributionReservationService ;
@Autowired
private IDistributionPrintService distributionPrintService ;
@Autowired
private IDistributionStockArticleService distributionStockArticleService ;
@Autowired
private IDistributionParcelListService distributionParcelListService ;
@Autowired
private IDistributionBillLadingScanService distributionBillLadingScanService ;
@Autowired
private IDistrilbutionBillStockService distrilbutionBillStockService ;
@Autowired
private IDistributionStockupScanService distributionStockupScanService ;
@Autowired
private IDistributionStockListService distributionStockListService ;
@Autowired
private DistributionStockListMapper distributionStockListMapper ;
@Autowired
private IDistributionAsyncService distributionAsyncService ;
@Autowired
private IDistributionStockService distributionStockService ;
@Autowired
@Lazy
private IDistributionStockupService distributionStockupService ;
@Autowired
private IDistributionStockupInfoService distributionStockupInfoService ;
@Autowired
private IBasicdataWarehouseClient basicdataWarehouseClient ;
@Autowired
private IDistributionReservationZeroPackageService distributionZeroPackageService ; //零担配送记录
@Autowired
private IDistributionParcelNumberService distributionParcelNumberService ; //零担配送数量记录
@Autowired
private IDistrilbutionBillPackageService distrilbutionBillPackageService ;
@Autowired
private IBasicdataWarehouseClient warehouseClient ;
@Autowired
private IWarehouseUpdownTypeClient warehouseUpdownTypeClient ;
@Autowired
private IDisStockListDetailService disStockListDetailService ;
@Autowired
private BladeRedis redis ;
@Override
@ -479,105 +496,312 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
throw new ServiceException ( "请选择仓库在操作!!!" ) ;
}
distrilbutionBillLading . setWarehouseId ( myCurrentWarehouse . getId ( ) ) ;
List < DistributionParcelListDTO > parcelLisList = distrilbutionBillLading . getParcelLisList ( ) ;
// List<DistributionParcelListDTO> parcelLisList = distrilbutionBillLading.getParcelLisList();
Map < Long , List < DistributionParcelListEntity > > packageMap = null ;
if ( Func . isNotEmpty ( distrilbutionBillLading . getBillPackageEntityList ( ) ) ) {
List < DistrilbutionBillPackageEntity > packageEntityList = distrilbutionBillLading . getBillPackageEntityList ( ) ;
List < Long > packageisd = packageEntityList . stream ( ) . map ( DistrilbutionBillPackageEntity : : getParceListId ) . collect ( Collectors . toList ( ) ) ;
List < DistributionParcelListEntity > distributionParcelListEntities = distributionParcelListService . listByIds ( packageisd ) ;
if ( Func . isNotEmpty ( distributionParcelListEntities ) ) {
packageMap = distributionParcelListEntities . stream ( ) . collect ( Collectors . groupingBy ( DistributionParcelListEntity : : getStockArticleId ) ) ;
}
}
Map < Long , List < DistributionParcelListDTO > > zeroPackageMap = null ;
if ( Func . isNotEmpty ( distrilbutionBillLading . getParcelLisList ( ) ) ) {
List < DistributionParcelListDTO > zeroPackageList = distrilbutionBillLading . getParcelLisList ( ) ;
zeroPackageMap = zeroPackageList . stream ( ) . collect ( Collectors . groupingBy ( DistributionParcelListDTO : : getStockArticleId ) ) ;
}
this . saveDistrilbutionBillLading ( distrilbutionBillLading ) ;
//修改订单状态
// if (StringUtils.isNotBlank(distrilbutionBillLading.getStockArticleId())) {
// String[] split = distrilbutionBillLading.getStockArticleId().split(",");
//// for (String s : split) {
//// //查询订单信息
//// DistributionStockArticleEntity byId = distributionStockArticleService.getById(s);
//// //查询是否创建过
//// DistributionStockArticleEntity distributionStockArticle = new DistributionStockArticleEntity();
//// //添加订单和提货单关联
//// DistrilbutionBillStockEntity distrilbutionBillStock = new DistrilbutionBillStockVO();
//// distrilbutionBillStock.setBillLadingId(distrilbutionBillLading.getId());
//// distrilbutionBillStock.setStockArticleId(Long.parseLong(s));
//// distrilbutionBillStock.setConditions(BillLadingStatusConstant.daitihuo.getValue());
//// distrilbutionBillStock.setOrderStatus("1");
//// distrilbutionBillStockService.save(distrilbutionBillStock);
//// List<DistrilbutionBillPackageEntity> packageEntityList = new ArrayList<>();
//// if (ObjectUtils.isNotNull(distrilbutionBillLading.getBillPackageEntityList())) {
//// //添加自提包件信息
////// List<DistrilbutionBillPackageEntity> collect = new ArrayList<>();
//// List<DistrilbutionBillPackageEntity> collect = distrilbutionBillLading.getBillPackageEntityList().stream().filter(qqq -> qqq.getStockArticleId().toString().equals(s)).collect(Collectors.toList());
//// if (!collect.isEmpty()) {
//// //有包件
//// collect.stream().forEach(ss -> {
//// DistrilbutionBillPackageEntity billPackageEntity = new DistrilbutionBillPackageEntity();
//// billPackageEntity.setBillLadingId(distrilbutionBillLading.getId());
//// billPackageEntity.setPacketBarCode(ss.getPacketBarCode());
//// billPackageEntity.setPacketBarStatus(1);
//// billPackageEntity.setParceListId(ss.getParceListId());
//// billPackageEntity.setStockArticleId(ss.getStockArticleId());
//// billPackageEntity.setPacketNumber(1);
//// billPackageEntity.setBillType(byId.getIsZero().equals("1") ? "2" : "1");
//// packageEntityList.add(billPackageEntity);
//// });
////
//// List<Long> collect1 = collect.stream().map(DistrilbutionBillPackageEntity::getParceListId).collect(Collectors.toList());
//// distributionAsyncService.updateParcelListReservation(collect1);
////
////// //判断是否全部修改
////// int i = byId.getHandQuantity() - collect.size();
////// if (i > 0) {
////// //部分
////// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.bufenyuyue.getValue());
////// }
//// } else {
//// //没有包件 查询包件信息
//// List<DistrilbutionBillPackageEntity> packageEntityList1 = billPackInfo(s, distrilbutionBillLading.getId(), parcelLisList, byId);
//// if (packageEntityList1.isEmpty()) {
//// throw new ServiceException(byId.getOrderCode() + "没有可用包件信息!");
//// }
//// packageEntityList.addAll(packageEntityList1);
////
////// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
//// }
//// } else {
//// //没有包件 查询包件信息
//// List<DistrilbutionBillPackageEntity> packageEntityList1 = billPackInfo(s, distrilbutionBillLading.getId(), parcelLisList, byId);
//// if (packageEntityList1.isEmpty()) {
//// throw new ServiceException(byId.getOrderCode() + "没有可用包件信息!");
//// }
//// packageEntityList.addAll(packageEntityList1);
////
////// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
//// }
////
////// int i1 = byId.getHandQuantity() + byId.getSigninQuantity(); //总数
//// if (byId.getCompleteSet() == 2) {
//// //全部
//// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
////
//// } else {
//// //部分
//// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.bufenyuyue.getValue());
//// }
////
//// //判断是否改为已预约
//// List<DistributionParcelNumberEntity> parcelNumberList = distributionParcelNumberService.list(Wrappers.<DistributionParcelNumberEntity>query().lambda()
//// .eq(DistributionParcelNumberEntity::getStockArticleId, s)
//// );
//// if (!parcelNumberList.isEmpty()) {
//// //零担
//// int handQuantity = parcelNumberList.stream().mapToInt(DistributionParcelNumberEntity::getHandQuantity).sum(); //在库总数量
//// int sum = parcelNumberList.stream().mapToInt(DistributionParcelNumberEntity::getDeliveryQuantity).sum(); //配送数量
//// int i = handQuantity - sum;
//// if (i > 0) {
//// //部分
//// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.bufenyuyue.getValue());
//// } else if (i == 0) {
//// //全部
//// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
//// }
//// }
//// distrilbutionBillPackageService.saveBatch(packageEntityList);
////// distributionStockArticle.setId(Long.parseLong(s));
////// distributionStockArticleService.updateById(distributionStockArticle);
//// distributionStockArticleService.maintenanceOrderInfo(distributionStockArticle.getOrderCode(),myCurrentWarehouse.getId());
//// }
// }
List < DistrilbutionBillPackageEntity > packageEntityList = new ArrayList < > ( ) ;
if ( StringUtils . isNotBlank ( distrilbutionBillLading . getStockArticleId ( ) ) ) {
String [ ] split = distrilbutionBillLading . getStockArticleId ( ) . split ( "," ) ;
for ( String s : split ) {
//查询订单信息
DistributionStockArticleEntity byId = distributionStockArticleService . getById ( s ) ;
//查询是否创建过
DistributionStockArticleEntity distributionStockArticle = new DistributionStockArticleEntity ( ) ;
//添加订单和提货单关联
DistrilbutionBillStockEntity distrilbutionBillStock = new DistrilbutionBillStockVO ( ) ;
//构建订单
List < Long > packageIds = new ArrayList < > ( ) ;
List < Long > zeroPackageIds = new ArrayList < > ( ) ;
DistributionStockArticleEntity stockArticleEntity = distributionStockArticleService . getById ( s ) ;
DistrilbutionBillStockEntity distrilbutionBillStock = new DistrilbutionBillStockEntity ( ) ;
distrilbutionBillStock . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
distrilbutionBillStock . setStockArticleId ( Long . parseLong ( s ) ) ;
distrilbutionBillStock . setConditions ( BillLadingStatusConstant . daitihuo . getValue ( ) ) ;
distrilbutionBillStock . setOrderStatus ( "1" ) ;
distrilbutionBillStockService . save ( distrilbutionBillStock ) ;
List < DistrilbutionBillPackageEntity > packageEntityList = new ArrayList < > ( ) ;
if ( ObjectUtils . isNotNull ( distrilbutionBillLading . getBillPackageEntityList ( ) ) ) {
//添加自提包件信息
// List<DistrilbutionBillPackageEntity> collect = new ArrayList<>();
List < DistrilbutionBillPackageEntity > collect = distrilbutionBillLading . getBillPackageEntityList ( ) . stream ( ) . filter ( qqq - > qqq . getStockArticleId ( ) . toString ( ) . equals ( s ) ) . collect ( Collectors . toList ( ) ) ;
if ( ! collect . isEmpty ( ) ) {
//有包件
collect . stream ( ) . forEach ( ss - > {
DistrilbutionBillPackageEntity billPackageEntity = new DistrilbutionBillPackageEntity ( ) ;
billPackageEntity . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
billPackageEntity . setPacketBarCode ( ss . getPacketBarCode ( ) ) ;
billPackageEntity . setPacketBarStatus ( 1 ) ;
billPackageEntity . setParceListId ( ss . getParceListId ( ) ) ;
billPackageEntity . setStockArticleId ( ss . getStockArticleId ( ) ) ;
billPackageEntity . setPacketNumber ( 1 ) ;
billPackageEntity . setBillType ( byId . getIsZero ( ) . equals ( "1" ) ? "2" : "1" ) ;
packageEntityList . add ( billPackageEntity ) ;
} ) ;
List < Long > collect1 = collect . stream ( ) . map ( DistrilbutionBillPackageEntity : : getParceListId ) . collect ( Collectors . toList ( ) ) ;
distributionAsyncService . updateParcelListReservation ( collect1 ) ;
//判断是否全部修改
int i = byId . getHandQuantity ( ) - collect . size ( ) ;
if ( i > 0 ) {
//部分
distributionStockArticle . setReservationStatus ( OrderReservationStatusConstant . bufenyuyue . getValue ( ) ) ;
if ( Func . isNotEmpty ( stockArticleEntity ) ) {
if ( IsOrNoConstant . no . getValue ( ) . equals ( stockArticleEntity . getIsZero ( ) ) ) {
//查询此订单是否能够从包件列表获取到信息
if ( Func . isNotEmpty ( packageMap ) ) {
if ( Func . isNotEmpty ( packageMap . get ( Long . parseLong ( s ) ) ) ) {
//存在勾选包件信息
for ( DistributionParcelListEntity distrilbutionBillPackageEntity : packageMap . get ( Long . parseLong ( s ) ) ) {
DistrilbutionBillPackageEntity aaa = new DistrilbutionBillPackageEntity ( ) ;
aaa . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
aaa . setPacketBarStatus ( 1 ) ;
aaa . setBillType ( "1" ) ;
aaa . setPacketNumber ( distrilbutionBillPackageEntity . getQuantity ( ) ) ;
//进行包件的预约状态修改
packageEntityList . add ( aaa ) ;
packageIds . add ( aaa . getParceListId ( ) ) ;
}
} else {
//没有进行包件的勾选,默认添加所有可用包件至计划下
List < DistributionParcelListEntity > parcelListEntities = distributionParcelListService . list ( Wrappers . < DistributionParcelListEntity > query ( ) . lambda ( )
. eq ( DistributionParcelListEntity : : getOrderPackageReservationStatus , OrderPackageReservationStatusConstant . daiyuyue . getValue ( ) )
. eq ( DistributionParcelListEntity : : getOrderPackageLoadingStatus , OrderPackageLoadingStatusConstant . weizhuancghe . getValue ( ) )
. eq ( DistributionParcelListEntity : : getConditions , 1 )
. eq ( DistributionParcelListEntity : : getStockArticleId , Long . parseLong ( s ) )
. eq ( DistributionParcelListEntity : : getWarehouseId , myCurrentWarehouse . getId ( ) )
. ne ( DistributionParcelListEntity : : getOrderPackageStatus , OrderPackageStatusConstant . yiqianshou . getValue ( ) )
. ne ( DistributionParcelListEntity : : getOrderPackageStatus , OrderPackageStatusConstant . yichuku . getValue ( ) )
) ;
if ( ! Func . isEmpty ( parcelListEntities ) ) {
for ( DistributionParcelListEntity parcelListEntity : parcelListEntities ) {
DistrilbutionBillPackageEntity billPackageEntity = new DistrilbutionBillPackageEntity ( ) ;
billPackageEntity . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
billPackageEntity . setPacketBarStatus ( 1 ) ;
billPackageEntity . setBillType ( "1" ) ;
billPackageEntity . setPacketNumber ( parcelListEntity . getQuantity ( ) ) ;
billPackageEntity . setParceListId ( parcelListEntity . getId ( ) ) ;
billPackageEntity . setStockArticleId ( parcelListEntity . getStockArticleId ( ) ) ;
billPackageEntity . setPacketBarCode ( parcelListEntity . getOrderPackageCode ( ) ) ;
packageEntityList . add ( billPackageEntity ) ;
packageIds . add ( parcelListEntity . getId ( ) ) ;
}
} else {
log . error ( "#####################自提计划订单无可用包件:{}" , s ) ;
throw new ServiceException ( stockArticleEntity . getOrderCode ( ) + "订单无可用包件!!!" ) ;
}
}
} else {
//没有进行包件的勾选,默认添加所有可用包件至计划下
List < DistributionParcelListEntity > parcelListEntities = distributionParcelListService . list ( Wrappers . < DistributionParcelListEntity > query ( ) . lambda ( )
. eq ( DistributionParcelListEntity : : getOrderPackageReservationStatus , OrderPackageReservationStatusConstant . daiyuyue . getValue ( ) )
. eq ( DistributionParcelListEntity : : getOrderPackageLoadingStatus , OrderPackageLoadingStatusConstant . weizhuancghe . getValue ( ) )
. eq ( DistributionParcelListEntity : : getConditions , 1 )
. eq ( DistributionParcelListEntity : : getStockArticleId , Long . parseLong ( s ) )
. eq ( DistributionParcelListEntity : : getWarehouseId , myCurrentWarehouse . getId ( ) )
. ne ( DistributionParcelListEntity : : getOrderPackageStatus , OrderPackageStatusConstant . yiqianshou . getValue ( ) )
. ne ( DistributionParcelListEntity : : getOrderPackageStatus , OrderPackageStatusConstant . yichuku . getValue ( ) )
) ;
if ( ! Func . isEmpty ( parcelListEntities ) ) {
for ( DistributionParcelListEntity parcelListEntity : parcelListEntities ) {
DistrilbutionBillPackageEntity billPackageEntity = new DistrilbutionBillPackageEntity ( ) ;
billPackageEntity . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
billPackageEntity . setPacketBarStatus ( 1 ) ;
billPackageEntity . setBillType ( "1" ) ;
billPackageEntity . setPacketNumber ( parcelListEntity . getQuantity ( ) ) ;
billPackageEntity . setParceListId ( parcelListEntity . getId ( ) ) ;
billPackageEntity . setStockArticleId ( parcelListEntity . getStockArticleId ( ) ) ;
billPackageEntity . setPacketBarCode ( parcelListEntity . getOrderPackageCode ( ) ) ;
packageEntityList . add ( billPackageEntity ) ;
packageIds . add ( parcelListEntity . getId ( ) ) ;
}
} else {
log . error ( "#####################自提计划订单无可用包件:{}" , s ) ;
throw new ServiceException ( stockArticleEntity . getOrderCode ( ) + "订单无可用包件!!!" ) ;
}
}
} else {
//没有包件 查询包件信息
List < DistrilbutionBillPackageEntity > packageEntityList1 = billPackInfo ( s , distrilbutionBillLading . getId ( ) , parcelLisList , byId ) ;
if ( packageEntityList1 . isEmpty ( ) ) {
throw new ServiceException ( byId . getOrderCode ( ) + "没有可用包件信息!" ) ;
} else if ( IsOrNoConstant . yes . getValue ( ) . equals ( stockArticleEntity . getIsZero ( ) ) ) {
boolean a = false ;
if ( Func . isNotEmpty ( zeroPackageMap ) ) {
if ( Func . isNotEmpty ( zeroPackageMap . get ( Long . parseLong ( s ) ) ) ) {
a = true ;
}
}
if ( a ) {
//存在数量填写
for ( DistributionParcelListDTO distributionParcelListDTO : zeroPackageMap . get ( Long . parseLong ( s ) ) ) {
if ( distributionParcelListDTO . getQuantity ( ) > 0 | | Func . isEmpty ( distributionParcelListDTO . getQuantity ( ) ) ) {
DistributionReservationZeroPackageEntity distributionReservationZeroPackageEntity = new DistributionReservationZeroPackageEntity ( ) ;
distributionReservationZeroPackageEntity . setParcelListId ( distributionParcelListDTO . getId ( ) ) ;
distributionReservationZeroPackageEntity . setCategoryName ( distributionParcelListDTO . getFirsts ( ) ) ;
distributionReservationZeroPackageEntity . setQuantity ( distributionParcelListDTO . getTiQuantity ( ) ) ;
distributionReservationZeroPackageEntity . setType ( "3" ) ;
distributionReservationZeroPackageEntity . setReservationId ( distrilbutionBillLading . getId ( ) ) ;
distributionReservationZeroPackageEntity . setStockArticleId ( distributionParcelListDTO . getStockArticleId ( ) ) ;
distributionReservationZeroPackageEntity . setRealityQuantity ( 0 ) ;
distributionReservationZeroPackageEntity . setZeroPackageStatus ( "1" ) ;
distributionZeroPackageService . save ( distributionReservationZeroPackageEntity ) ;
zeroPackageIds . add ( distributionReservationZeroPackageEntity . getParcelListId ( ) ) ;
//维护对应零担包件的配送数量
DistributionParcelNumberEntity distributionParcelNumberEntity = distributionParcelNumberService . getOne ( Wrappers . < DistributionParcelNumberEntity > query ( ) . lambda ( )
. eq ( DistributionParcelNumberEntity : : getStockArticleId , distributionParcelListDTO . getStockArticleId ( ) )
. eq ( DistributionParcelNumberEntity : : getParcelListId , distributionParcelListDTO . getId ( ) )
) ;
int num = distributionParcelNumberEntity . getDeliveryQuantity ( ) + distributionParcelListDTO . getTiQuantity ( ) ;
distributionParcelNumberEntity . setDeliveryQuantity ( num ) ;
if ( distributionParcelListDTO . getTiQuantity ( ) > ( distributionParcelNumberEntity . getHandQuantity ( ) - distributionParcelNumberEntity . getDeliveryQuantity ( ) ) ) {
throw new ServiceException ( stockArticleEntity . getOrderCode ( ) + "订单在库数量不足!!!" ) ;
}
distributionParcelNumberService . updateById ( distributionParcelNumberEntity ) ;
}
}
} else {
//查询此订单下可用零担数量
List < DistributionParcelNumberVO > zeroOrderDetail = distributionStockArticleService . getZeroOrderDetail ( Long . parseLong ( s ) ) ;
if ( Func . isNotEmpty ( zeroOrderDetail ) ) {
for ( DistributionParcelNumberVO distributionParcelNumberVO : zeroOrderDetail ) {
DistributionReservationZeroPackageEntity distributionReservationZeroPackageEntity = new DistributionReservationZeroPackageEntity ( ) ;
distributionReservationZeroPackageEntity . setRealityQuantity ( 0 ) ;
distributionReservationZeroPackageEntity . setReservationId ( distrilbutionBillLading . getId ( ) ) ;
distributionReservationZeroPackageEntity . setType ( "3" ) ;
distributionReservationZeroPackageEntity . setStockArticleId ( Long . parseLong ( s ) ) ;
int num = distributionParcelNumberVO . getHandQuantity ( ) - distributionParcelNumberVO . getDeliveryQuantity ( ) ;
distributionReservationZeroPackageEntity . setQuantity ( num ) ;
distributionReservationZeroPackageEntity . setParcelListId ( distributionParcelNumberVO . getParcelListId ( ) ) ;
distributionReservationZeroPackageEntity . setZeroPackageStatus ( "1" ) ;
distributionReservationZeroPackageEntity . setCategoryName ( distributionParcelNumberVO . getFirsts ( ) ) ;
distributionZeroPackageService . save ( distributionReservationZeroPackageEntity ) ;
//维护零担品类配送数量
DistributionParcelNumberEntity distributionParcelNumberEntity = new DistributionParcelNumberEntity ( ) ;
distributionParcelNumberEntity . setId ( distributionParcelNumberVO . getId ( ) ) ;
distributionParcelNumberEntity . setDeliveryQuantity ( distributionParcelNumberVO . getDeliveryQuantity ( ) + num ) ;
distributionParcelNumberService . updateById ( distributionParcelNumberEntity ) ;
zeroPackageIds . add ( distributionReservationZeroPackageEntity . getParcelListId ( ) ) ;
}
} else {
log . error ( "#####################订单无可用零担:{}" , s ) ;
throw new ServiceException ( stockArticleEntity . getOrderCode ( ) + "订单无在库零担!!!" ) ;
}
}
packageEntityList . addAll ( packageEntityList1 ) ;
// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
}
} else {
//没有包件 查询包件信息
List < DistrilbutionBillPackageEntity > packageEntityList1 = billPackInfo ( s , distrilbutionBillLading . getId ( ) , parcelLisList , byId ) ;
if ( packageEntityList1 . isEmpty ( ) ) {
throw new ServiceException ( byId . getOrderCode ( ) + "没有可用包件信息!" ) ;
} else {
log . error ( "#####################订单isZero字段错误orderId:{}" , s ) ;
throw new ServiceException ( stockArticleEntity . getOrderCode ( ) + "订单数据错误!!!" ) ;
}
packageEntityList . addAll ( packageEntityList1 ) ;
// distributionStockArticle.setReservationStatus(OrderReservationStatusConstant.yiyueyue.getValue());
} else {
log . error ( "#####################自提添加错误订单orderId:{}" , s ) ;
throw new ServiceException ( "订单数据错误!!!" ) ;
}
//构建自提订单中间表信息
distrilbutionBillStock . setBillLadingId ( distrilbutionBillLading . getId ( ) ) ;
distrilbutionBillStock . setStockArticleId ( Long . parseLong ( s ) ) ;
distrilbutionBillStock . setConditions ( "10" ) ;
distrilbutionBillStock . setOrderStatus ( ReservationOrderStatusConstant . zhengchang . getValue ( ) ) ;
distrilbutionBillStockService . save ( distrilbutionBillStock ) ;
//对计划包件进行批量预约状态修改
// int i1 = byId.getHandQuantity() + byId.getSigninQuantity(); //总数
if ( byId . getCompleteSet ( ) = = 2 ) {
//全部
distributionStockArticle . setReservationStatus ( OrderReservationStatusConstant . yiyueyue . getValue ( ) ) ;
} else {
//部分
distributionStockArticle . setReservationStatus ( OrderReservationStatusConstant . bufenyuyue . getValue ( ) ) ;
if ( Func . isNotEmpty ( zeroPackageIds ) ) {
List < DistributionParcelNumberEntity > parcelNumberEntityList = distributionParcelNumberService . list ( Wrappers . < DistributionParcelNumberEntity > query ( ) . lambda ( )
. in ( DistributionParcelNumberEntity : : getParcelListId , zeroPackageIds )
) ;
List < Long > ids = parcelNumberEntityList . stream ( ) . filter ( f - > f . getQuantity ( ) = = ( f . getOutboundQuantity ( ) + f . getDeliveryQuantity ( ) ) ) . map ( DistributionParcelNumberEntity : : getParcelListId ) . collect ( Collectors . toList ( ) ) ;
packageIds . addAll ( ids ) ;
}
//判断是否改为已预约
List < DistributionParcelNumberEntity > parcelNumberList = distributionParcelNumberService . list ( Wrappers . < DistributionParcelNumberEntity > query ( ) . lambda ( )
. eq ( DistributionParcelNumberEntity : : getStockArticleId , s )
) ;
if ( ! parcelNumberList . isEmpty ( ) ) {
//零担
int handQuantity = parcelNumberList . stream ( ) . mapToInt ( DistributionParcelNumberEntity : : getHandQuantity ) . sum ( ) ; //在库总数量
int sum = parcelNumberList . stream ( ) . mapToInt ( DistributionParcelNumberEntity : : getDeliveryQuantity ) . sum ( ) ; //配送数量
int i = handQuantity - sum ;
if ( i > 0 ) {
//部分
distributionStockArticle . setReservationStatus ( OrderReservationStatusConstant . bufenyuyue . getValue ( ) ) ;
} else if ( i = = 0 ) {
//全部
distributionStockArticle . setReservationStatus ( OrderReservationStatusConstant . yiyueyue . getValue ( ) ) ;
}
if ( ! Func . isEmpty ( packageIds ) ) {
distributionParcelListService . update ( new UpdateWrapper < DistributionParcelListEntity > ( ) . lambda ( )
. in ( DistributionParcelListEntity : : getId , packageIds )
. set ( DistributionParcelListEntity : : getOrderPackageReservationStatus , OrderPackageReservationStatusConstant . yiyueyue . getValue ( ) )
) ;
}
distributionStockArticleService . maintenanceOrderInfo ( stockArticleEntity . getOrderCode ( ) , stockArticleEntity . getWarehouseId ( ) ) ;
}
if ( Func . isNotEmpty ( packageEntityList ) ) {
distrilbutionBillPackageService . saveBatch ( packageEntityList ) ;
distributionStockArticle . setId ( Long . parseLong ( s ) ) ;
distributionStockArticleService . updateById ( distributionStockArticle ) ;
}
}
//操作图片
if ( ! distrilbutionBillLading . getPrintList ( ) . isEmpty ( ) ) {
addPrint ( distrilbutionBillLading ) ;
@ -759,6 +983,15 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
}
}
/ * *
* @param reservationId
* @return
* /
@Override
public List < DistributionStockupOrderListVO > selectBillLadingZeroPackageList ( Long reservationId ) {
return baseMapper . selectBillLadingZeroPackageList ( reservationId ) ;
}
@Transactional
private Integer cancelBillLodingPackage ( List < Long > ids ) {
String method = "##########类DistrilbutionBillLadingServiceImpl执行方法cancelBillLoding," ;
@ -958,6 +1191,8 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
public int updetaParcelNum ( DistrilbutionBillLadingDTO distrilbutionBillLadingDTO ) {
List < DistributionReservationZeroPackageEntity > list = distributionZeroPackageService . list ( Wrappers . < DistributionReservationZeroPackageEntity > query ( ) . lambda ( )
. eq ( DistributionReservationZeroPackageEntity : : getReservationId , distrilbutionBillLadingDTO . getId ( ) )
. ne ( DistributionReservationZeroPackageEntity : : getZeroPackageStatus , "2" )
. eq ( DistributionReservationZeroPackageEntity : : getType , "3" )
) ; //数据库的品分类数据
List < DistributionParcelListDTO > parcelLisList = distrilbutionBillLadingDTO . getParcelLisList ( ) ; //品类信息
if ( ! list . isEmpty ( ) ) {
@ -972,11 +1207,11 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
DistributionParcelListDTO next = iterator . next ( ) ;
if ( next . getId ( ) . equals ( i . getParcelListId ( ) ) ) {
if ( i . getRealityQuantity ( ) > 0 ) {
throw new ServiceException ( "已备货无法修改备货 数量!" ) ;
throw new ServiceException ( "已备货无法修改数量!" ) ;
}
//获取修改的数量
Integer quantity = i . getQuantity ( ) ; //原预约数量
Integer quantity1 = next . getQuantity ( ) ; //改变的数量
Integer quantity1 = next . getTi Quantity ( ) ; //改变的数量
int i1 = quantity - quantity1 ;
if ( i1 > 0 ) {
//减少了
@ -991,19 +1226,22 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
//修改预约数量
DistributionReservationZeroPackageEntity zeroPackage = new DistributionReservationZeroPackageEntity ( ) ;
zeroPackage . setId ( i . getId ( ) ) ;
zeroPackage . setQuantity ( next . getQuantity ( ) ) ;
zeroPackage . setQuantity ( next . getTi Quantity ( ) ) ;
distributionZeroPackageService . updateById ( zeroPackage ) ;
iterator . remove ( ) ;
}
}
} else {
//不存在
longs . add ( i . getId ( ) ) ;
longs . add ( i . getParcelList Id ( ) ) ;
}
} ) ;
if ( ! longs . isEmpty ( ) ) {
distributionZeroPackageService . deleteLogic ( longs ) ;
// distributionZeroPackageService.deleteLogic(longs);
//进行零担在库数量恢复
distributionZeroPackageService . recoverZeroPackage ( distrilbutionBillLadingDTO . getId ( ) , longs ) ;
// distributionZeroPackageService.cancelZeroPackage(longs);
}
// TODo 添加新的品类
List < DistributionReservationZeroPackageEntity > packageEntityList = new ArrayList < > ( ) ;
@ -2344,60 +2582,60 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
isZeroType = true ;
}
this . save ( distrilbutionBillLading ) ;
if ( isZeroType ) {
if ( list . isEmpty ( ) ) {
throw new ServiceException ( "类型数据未填写!!!" ) ;
}
List < DistributionReservationZeroPackageEntity > zeroPackageEntityList = new ArrayList < > ( ) ;
List < DistributionParcelNumberEntity > parcelNumberEntityList = new ArrayList < > ( ) ;
AtomicInteger nu = new AtomicInteger ( ) ;
//是 添加物料信息
list . forEach ( i - > {
if ( i . getQuantity ( ) ! = 0 ) {
DistributionReservationZeroPackageEntity zeroPackageEntity = new DistributionReservationZeroPackageEntity ( ) ;
zeroPackageEntity . setQuantity ( i . getQuantity ( ) ) ;
zeroPackageEntity . setReservationId ( distrilbutionBillLading . getId ( ) ) ;
zeroPackageEntity . setType ( "3" ) ;
zeroPackageEntity . setCategoryName ( i . getFirsts ( ) ) ;
zeroPackageEntity . setZeroPackageStatus ( "1" ) ;
zeroPackageEntity . setStockArticleId ( i . getStockArticleId ( ) ) ;
zeroPackageEntity . setRealityQuantity ( 0 ) ;
//修改包件配送数量
//查询
DistributionStockArticleEntity byId = distributionStockArticleService . getById ( i . getStockArticleId ( ) ) ;
DistributionParcelNumberEntity one = distributionParcelNumberService . getOne ( Wrappers . < DistributionParcelNumberEntity > query ( ) . lambda ( ) . eq ( DistributionParcelNumberEntity : : getParcelListId , i . getId ( ) ) ) ;
int i1 = one . getDeliveryQuantity ( ) + i . getQuantity ( ) ;
//全部数据不能大于预约数
if ( ObjectUtils . isNotNull ( one ) & & i1 < = one . getHandQuantity ( ) ) {
nu . addAndGet ( i . getQuantity ( ) ) ;
DistributionParcelNumberEntity parcelNumberEntity = new DistributionParcelNumberEntity ( ) ;
parcelNumberEntity . setId ( one . getId ( ) ) ;
parcelNumberEntity . setDeliveryQuantity ( one . getDeliveryQuantity ( ) + i . getQuantity ( ) ) ;
parcelNumberEntity . setHandQuantity ( byId . getHandQuantity ( ) ) ;
parcelNumberEntityList . add ( parcelNumberEntity ) ;
zeroPackageEntity . setParcelListId ( one . getParcelListId ( ) ) ;
zeroPackageEntityList . add ( zeroPackageEntity ) ;
} else {
throw new ServiceException ( "配送数量大于在库数量!!" ) ;
}
}
} ) ;
if ( ! parcelNumberEntityList . isEmpty ( ) ) {
parcelNumberEntityList . forEach ( p - > {
if ( nu . get ( ) < = p . getHandQuantity ( ) ) {
p . setHandQuantity ( null ) ;
distributionParcelNumberService . updateById ( p ) ;
} else {
throw new ServiceException ( "预约数量大于在库数量!!" ) ;
}
} ) ;
} else {
throw new ServiceException ( "数据异常,请联系管理员!!" ) ;
}
distributionZeroPackageService . saveBatch ( zeroPackageEntityList ) ;
}
// if (isZeroType) {
// if (list.isEmpty()) {
// throw new ServiceException("类型数据未填写!!!");
// }
// List<DistributionReservationZeroPackageEntity> zeroPackageEntityList = new ArrayList<>();
// List<DistributionParcelNumberEntity> parcelNumberEntityList = new ArrayList<>();
// AtomicInteger nu = new AtomicInteger();
// //是 添加物料信息
// list.forEach(i -> {
// if (i.getQuantity() != 0) {
// DistributionReservationZeroPackageEntity zeroPackageEntity = new DistributionReservationZeroPackageEntity();
// zeroPackageEntity.setQuantity(i.getQuantity());
// zeroPackageEntity.setReservationId(distrilbutionBillLading.getId());
// zeroPackageEntity.setType("3");
// zeroPackageEntity.setCategoryName(i.getFirsts());
// zeroPackageEntity.setZeroPackageStatus("1");
// zeroPackageEntity.setStockArticleId(i.getStockArticleId());
// zeroPackageEntity.setRealityQuantity(0);
// //修改包件配送数量
// //查询
// DistributionStockArticleEntity byId = distributionStockArticleService.getById(i.getStockArticleId());
// DistributionParcelNumberEntity one = distributionParcelNumberService.getOne(Wrappers.<DistributionParcelNumberEntity>query().lambda().eq(DistributionParcelNumberEntity::getParcelListId, i.getId()));
//
// int i1 = one.getDeliveryQuantity() + i.getQuantity();
// //全部数据不能大于预约数
// if (ObjectUtils.isNotNull(one) && i1 <= one.getHandQuantity()) {
// nu.addAndGet(i.getQuantity());
// DistributionParcelNumberEntity parcelNumberEntity = new DistributionParcelNumberEntity();
// parcelNumberEntity.setId(one.getId());
// parcelNumberEntity.setDeliveryQuantity(one.getDeliveryQuantity() + i.getQuantity());
// parcelNumberEntity.setHandQuantity(byId.getHandQuantity());
// parcelNumberEntityList.add(parcelNumberEntity);
// zeroPackageEntity.setParcelListId(one.getParcelListId());
// zeroPackageEntityList.add(zeroPackageEntity);
// } else {
// throw new ServiceException("配送数量大于在库数量!!");
// }
//
// }
// });
// if (!parcelNumberEntityList.isEmpty()) {
// parcelNumberEntityList.forEach(p -> {
// if (nu.get() <= p.getHandQuantity()) {
// p.setHandQuantity(null);
// distributionParcelNumberService.updateById(p);
// } else {
// throw new ServiceException("预约数量大于在库数量!!");
// }
// });
// } else {
// throw new ServiceException("数据异常,请联系管理员!!");
// }
// distributionZeroPackageService.saveBatch(zeroPackageEntityList);
// }
// 创建备货任务
DistributionStockupEntity distributionStockupEntity = buildDistributionStockupEntityBydistrilbutionBillLading ( distrilbutionBillLading ) ;
@ -2627,10 +2865,12 @@ public class DistrilbutionBillLadingServiceImpl extends BaseServiceImpl<Distrilb
List < DistributionBillLadingScanEntity > list1 = distributionBillLadingScanService . list ( Wrappers . < DistributionBillLadingScanEntity > query ( ) . lambda ( )
. eq ( DistributionBillLadingScanEntity : : getBillLadingId , billLadingAppDTO . getBillLadingId ( ) )
. eq ( DistributionBillLadingScanEntity : : getStockArticleId , k )
. eq ( DistributionBillLadingScanEntity : : getParcelListId , k )
// .eq(DistributionBillLadingScanEntity::getParcelListId, k)
) ;
if ( ! list1 . isEmpty ( ) ) {
zeroOrderVO . setSignforQuantity ( list1 . stream ( ) . mapToInt ( DistributionBillLadingScanEntity : : getQuantity ) . sum ( ) ) ;
} else {
zeroOrderVO . setSignforQuantity ( 0 ) ;
}
billLadingZeroOrderVOS . add ( zeroOrderVO ) ;