fix:批量更新优化

This commit is contained in:
zhangzq
2026-08-03 17:14:39 +08:00
parent 079d066f8f
commit 29149ab39a

View File

@@ -238,6 +238,12 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
if (count>0){
throw new BadRequestException("下推失败,单据状态不为已分配不能下推");
}
final int disCount = this.count(new LambdaQueryWrapper<PmDemand>()
.eq(PmDemand::getId, pmDemandDtos.stream().map(PmDemandDto::getId).collect(Collectors.toList()))
.eq(PmDemand::getStatus,DemandStatus.DIS.getValue()));
if (disCount<pmDemandDtos.size()){
throw new BadRequestException("下推失败,单据状态不为已分配不能下推");
}
// 一次性分成两组
Param zdStorParam = iSysParamService.findByCode(EXTConstant.ZD_STOR_SET);
List ZD_STOR_SET;
@@ -260,44 +266,51 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
.map(PmDemandDto::getId).collect(Collectors.toList())));
}
if (!CollectionUtils.isEmpty(zdDemands)) {
for (PmDemandDto zdDemand : zdDemands) {
Map<String, List<PmDemandDto>> groupByWorkOrder = zdDemands.stream()
.collect(Collectors.groupingBy(PmDemandDto::getWorkOrder));
//判断是否存在其他工单的数据是则保存
for (String workOrder : groupByWorkOrder.keySet()) {
final List<PmDemandDto> demandDtos = groupByWorkOrder.get(workOrder);
final int orderCount = this.count(new LambdaQueryWrapper<PmDemand>()
.eq(PmDemand::getWork_order, workOrder));
if (orderCount > demandDtos.size()){
throw new BadRequestException("工单"+workOrder+"下推中鼎失败,存在未勾选的单子");
}
List<PmDemandDto> zd = new ArrayList<>();
List<AddInvParam> addInvParams = new ArrayList<>();
List<InFinishParam> inFinishParams = new ArrayList<>();
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
.eq(Structattr::getSect_code, zdDemand.getTargetHouseCode())
.isNotNull(Structattr::getStoragevehicle_code)
.last("limit 1"));
AddInvParam addInvParam = new AddInvParam();
addInvParam.setMaterialCode(zdDemand.getSkuCode());
addInvParam.setUnitId("1");
addInvParam.setUnitName(zdDemand.getUnit());
addInvParam.setPcsn("1");
addInvParam.setStoragevehicleCode(structattr.getStoragevehicle_code());
addInvParam.setQty(zdDemand.getQty());
addInvParam.setStorCode(structattr.getStor_code());
addInvParam.setSectCode(structattr.getSect_code());
addInvParam.setStructCode(structattr.getStruct_code());
addInvParams.add(addInvParam);
InFinishParam inFinishParam = new InFinishParam();
BeanUtils.copyProperties(addInvParam,inFinishParam);
inFinishParam.setRemark("中鼎需求单变动");
inFinishParams.add(inFinishParam);
List<PmDemandDto> zd = new ArrayList<>();
zd.add(zdDemand);
for (PmDemandDto zdDemand : demandDtos) {
Structattr structattr = iStructattrService.getOne(new LambdaQueryWrapper<Structattr>()
.eq(Structattr::getSect_code, zdDemand.getTargetHouseCode())
.isNotNull(Structattr::getStoragevehicle_code)
.last("limit 1"));
AddInvParam addInvParam = new AddInvParam();
addInvParam.setMaterialCode(zdDemand.getSkuCode());
addInvParam.setUnitId("1");
addInvParam.setUnitName(zdDemand.getUnit());
addInvParam.setPcsn("1");
addInvParam.setStoragevehicleCode(structattr.getStoragevehicle_code());
addInvParam.setQty(zdDemand.getQty());
addInvParam.setStorCode(structattr.getStor_code());
addInvParam.setSectCode(structattr.getSect_code());
addInvParam.setStructCode(structattr.getStruct_code());
addInvParam.setRemark("中鼎需求单变动");
addInvParams.add(addInvParam);
InFinishParam inFinishParam = new InFinishParam();
BeanUtils.copyProperties(addInvParam,inFinishParam);
inFinishParams.add(inFinishParam);
zd.add(zdDemand);
}
wmsToZDWmdService.syncDemandOrder(zd);
try {
iStInventoryService.changeInventory(InventoryChangeType.ADD_INV, addInvParams);
iStInventoryService.changeInventory(InventoryChangeType.IN_FINISH, inFinishParams);
this.update(new LambdaUpdateWrapper<PmDemand>()
.set(PmDemand::getStatus,DemandStatus.FINISH.getValue())
.in(PmDemand::getId,zdDemands.stream()
.in(PmDemand::getId,demandDtos.stream()
.map(PmDemandDto::getId).collect(Collectors.toList())));
}catch (Exception ex){
log.error("回传中鼎成功,WMS库存变动失败"+ex.getMessage());
this.update(new LambdaUpdateWrapper<PmDemand>()
.set(PmDemand::getStatus,DemandStatus.CANCEL.getValue())
.in(PmDemand::getId,zdDemands.stream()
.map(PmDemandDto::getId).collect(Collectors.toList())));
}
}
}