PDA内容修改

This commit is contained in:
秦鸿展
2026-03-14 19:24:43 +08:00
parent 0d61ae880b
commit 998f58c586
7 changed files with 104 additions and 41 deletions
@@ -27,7 +27,6 @@ public class ReceiptMaterialDetailApplicationService {
/**
* 分页查询物料明细列表
*/
public List<ReceiptMaterialDetailPO> queryList(ReceiptMaterialDetailDO receiptMaterialDetailDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
if (loginUser != null){
@@ -24,6 +24,8 @@ import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
import com.mhd.wms.domain.outMaterialDetail.repository.mapper.OutMaterialDetailMapper;
import com.mhd.wms.domain.outOrderAbnormal.repository.facade.IOutOrderAbnormalService;
import com.mhd.wms.domain.outOrderAbnormal.repository.todo.OutOrderAbnormalBaseDO;
import com.mhd.wms.domain.pickingMaterialDetail.entity.PickingMaterialDetail;
import com.mhd.wms.domain.pickingMaterialDetail.repository.facade.IPickingMaterialDetailService;
import com.mhd.wms.domain.pickingOrder.entity.PickingOrder;
import com.mhd.wms.domain.pickingOrder.repository.facade.IPickingOrderService;
import com.mhd.wms.domain.pickingOrder.repository.po.PickingOrderPO;
@@ -75,6 +77,8 @@ public class StockOutTaskOrderDomainService {
@Autowired
private IPickingOrderService pickingOrderService;
@Autowired
private IPickingMaterialDetailService pickingMaterialDetailService;
@Autowired
private IStockOutOrderService stockOutOrderService;
@Autowired
private IWaveOutOrderService waveOutOrderService;
@@ -519,8 +523,10 @@ public class StockOutTaskOrderDomainService {
@Transactional(rollbackFor = Exception.class)
public Boolean updateStockOutOrder(PickingOrderPO pickingOrderPODb) {
LoginUser loginUser = SecurityUtils.getLoginUser();
// 与 PickingOrderDomainService 一致:只统计已拣货(status=3)的拣货单数量,确保完成拣货后出库单状态正确更新
List<PickingOrder> pickingOrderList = pickingOrderService.list(new QueryWrapper<PickingOrder>().lambda()
.eq(PickingOrder::getDelFlag, 1)
.eq(PickingOrder::getStatus, 3)
.eq(PickingOrder::getOrderNumber, pickingOrderPODb.getOrderNumber()));
BigDecimal pickingQuantity = pickingOrderList.stream().map(PickingOrder::getPickingQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
if (1 == pickingOrderPODb.getType()){
@@ -536,10 +542,29 @@ public class StockOutTaskOrderDomainService {
genStockInOrder(stockOutOrderDb);
}
}
// 根据拣货单明细更新出库单物料明细的拣货数量(与 PickingOrderDomainService 一致)
for (PickingOrder pickingOrder : pickingOrderList) {
List<PickingMaterialDetail> list = pickingMaterialDetailService.list(new QueryWrapper<PickingMaterialDetail>().lambda()
.eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrder.getPickingOrderNumber()));
for (PickingMaterialDetail pickingMaterialDetail : list) {
OutMaterialDetail outMaterialDetail = outMaterialDetailMapper.selectOne(new QueryWrapper<OutMaterialDetail>().lambda()
.eq(OutMaterialDetail::getUniqueId, pickingMaterialDetail.getOutUniqueId())
.eq(OutMaterialDetail::getDelFlag, 1));
if (outMaterialDetail != null) {
outMaterialDetail.setPickingQuantity(pickingMaterialDetail.getPickingQuantity());
outMaterialDetail.setTotalNetWeight(pickingMaterialDetail.getTotalNetWeight());
outMaterialDetail.setTotalGrossWeight(pickingMaterialDetail.getTotalGrossWeight());
outMaterialDetail.setTotalVolume(pickingMaterialDetail.getTotalVolume());
outMaterialDetail.setTotalArea(pickingMaterialDetail.getTotalArea());
outMaterialDetailMapper.updateById(outMaterialDetail);
}
}
}
StockOutOrder stockOutOrder = new StockOutOrder();
stockOutOrder.setOutOrderNumber(pickingOrderPODb.getOrderNumber());
//1-已创建 2-已审核 3-部分分配 4-已分配 5-波次中 6-拣货中 7-拣货完成 8-复核中 9-已出库 10-已取消 11-已关闭
stockOutOrder.setStatus(status);
stockOutOrder.setPickingQuantity(pickingQuantity);
stockOutOrder.setUpdateBy(loginUser.getUserid());
stockOutOrder.setUpdateByName(loginUser.getUsername());
stockOutOrder.setUpdateTime(new Date());
@@ -228,23 +228,11 @@ public class StockReceiptOrderDomainService {
receiptMaterialDetailPOChildren.setQuantity(null);
});
} else {
// 主项无子项时:添加 parent_copy 到 children,供详情页展示(详情页从 children 读取数据)
// 主项无子项时:添加 parent_copy,避免 PDA 端重复显示两条记录;主项自身已有全部数据,详情页可直接从主项读取
if (CollectionUtils.isEmpty(receiptMaterialDetailPO.getMaterialMoreDetailList())) {
receiptMaterialDetailPO.setMaterialMoreDetailList(getMaterialMoreDetail(receiptMaterialDetailPO));
}
ReceiptMaterialDetailPO parentCopy = new ReceiptMaterialDetailPO();
BeanUtils.copyProperties(receiptMaterialDetailPO, parentCopy, "children");
parentCopy.setLevel(2);
parentCopy.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
parentCopy.setQuantity(null);
parentCopy.setChildren(new ArrayList<>());
if (CollectionUtils.isEmpty(parentCopy.getMaterialMoreDetailList())) {
parentCopy.setMaterialMoreDetailList(receiptMaterialDetailPO.getMaterialMoreDetailList());
}
List<InMaterialDetailSerialNumberPO> serialList = inMaterialDetailSerialNumberMap.get(receiptMaterialDetailPO.getUniqueId());
parentCopy.setMaterialDetailSerialNumberList(serialList != null ? serialList : new ArrayList<>());
receiptMaterialDetailPOChildrenList = new ArrayList<>();
receiptMaterialDetailPOChildrenList.add(parentCopy);
}
receiptMaterialDetailPO.setChildren(receiptMaterialDetailPOChildrenList != null ? receiptMaterialDetailPOChildrenList : new ArrayList<>());
});
@@ -235,28 +235,19 @@ public class StockShelfOrderDomainService {
MaterialMoreDetailDO materialMoreDetailDO = new MaterialMoreDetailDO();
materialMoreDetailDO.setOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
shelfMaterialDetailPOList.forEach(shelfMaterialDetailPO -> {
List<ShelfMaterialDetailPO> shelfMaterialDetailPOChildrenNowList = new ArrayList<>();
ShelfMaterialDetailPO shelfMaterialDetailPOChildrenNow = new ShelfMaterialDetailPO();
BeanUtils.copyProperties(shelfMaterialDetailPO, shelfMaterialDetailPOChildrenNow, "children");
List<InMaterialDetailSerialNumberPO> materialDetailSerialNumberList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId());
if (!CollectionUtils.isEmpty(materialDetailSerialNumberList)){
shelfMaterialDetailPOChildrenNow.setMaterialDetailSerialNumberList(materialDetailSerialNumberList);
}else {
shelfMaterialDetailPOChildrenNow.setMaterialDetailSerialNumberList(new ArrayList<>());
}
shelfMaterialDetailPOChildrenNowList.add(shelfMaterialDetailPOChildrenNow);
//子集
// 不添加 parent_copy,避免 PDA 端重复显示两条记录;主项自身已有全部数据,详情页可直接从主项读取
List<ShelfMaterialDetailPO> shelfMaterialDetailPOChildrenList = shelfMaterialDetailPO.getChildren();
shelfMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> {
List<InMaterialDetailSerialNumberPO> materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId());
if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)){
receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(materialDetailSerialNumberChildrenList);
}else {
receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(new ArrayList<>());
}
});
shelfMaterialDetailPOChildrenNowList.addAll(shelfMaterialDetailPOChildrenList);
shelfMaterialDetailPO.setChildren(shelfMaterialDetailPOChildrenNowList);
if (!CollectionUtils.isEmpty(shelfMaterialDetailPOChildrenList)) {
shelfMaterialDetailPOChildrenList.forEach(receiptMaterialDetailPOChildren -> {
List<InMaterialDetailSerialNumberPO> materialDetailSerialNumberChildrenList = inMaterialDetailSerialNumberMap.get(shelfMaterialDetailPO.getUniqueId());
if (!CollectionUtils.isEmpty(materialDetailSerialNumberChildrenList)){
receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(materialDetailSerialNumberChildrenList);
}else {
receiptMaterialDetailPOChildren.setMaterialDetailSerialNumberList(new ArrayList<>());
}
});
}
shelfMaterialDetailPO.setChildren(shelfMaterialDetailPOChildrenList != null ? shelfMaterialDetailPOChildrenList : new ArrayList<>());
});
stockShelfOrderPO.setMaterialDetailList(shelfMaterialDetailPOList);
return stockShelfOrderPO;
@@ -160,12 +160,36 @@ public class TaskPickingMaterialDetailImpl extends ServiceImpl<TaskPickingMateri
}
outMaterialDetailSerialNumberList.addAll(genMaterialDetailSerialNumber(taskPickingMaterialDetailDO));
}
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
pickingMaterialDetailDO.setUniqueId(taskPickingMaterialDetailDb.getPickingUniqueId());
// 拣货增量用 actualQuantitypicking_quantity += actualQuantity
pickingMaterialDetailDO.setPickingQuantity(taskPickingMaterialDetailDO.getActualQuantity() != null ? taskPickingMaterialDetailDO.getActualQuantity() : BigDecimal.ZERO);
pickingMaterialDetailList.add(pickingMaterialDetailDO);
totalPickingQuantity = totalPickingQuantity.add(taskPickingMaterialDetailDO.getActualQuantity());
Long pickingUniqueId = taskPickingMaterialDetailDb.getPickingUniqueId();
BigDecimal qty = taskPickingMaterialDetailDO.getActualQuantity() != null ? taskPickingMaterialDetailDO.getActualQuantity() : BigDecimal.ZERO;
// pickingUniqueId 聚合同一拣货明细可能对应多条任务明细
PickingMaterialDetailDO existing = pickingMaterialDetailList.stream()
.filter(p -> pickingUniqueId.equals(p.getUniqueId())).findFirst().orElse(null);
if (existing != null) {
existing.setPickingQuantity((existing.getPickingQuantity() != null ? existing.getPickingQuantity() : BigDecimal.ZERO).add(qty));
if (taskPickingMaterialDetailDO.getTotalNetWeight() != null) {
existing.setTotalNetWeight((existing.getTotalNetWeight() != null ? existing.getTotalNetWeight() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalNetWeight()));
}
if (taskPickingMaterialDetailDO.getTotalGrossWeight() != null) {
existing.setTotalGrossWeight((existing.getTotalGrossWeight() != null ? existing.getTotalGrossWeight() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalGrossWeight()));
}
if (taskPickingMaterialDetailDO.getTotalVolume() != null) {
existing.setTotalVolume((existing.getTotalVolume() != null ? existing.getTotalVolume() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalVolume()));
}
if (taskPickingMaterialDetailDO.getTotalArea() != null) {
existing.setTotalArea((existing.getTotalArea() != null ? existing.getTotalArea() : BigDecimal.ZERO).add(taskPickingMaterialDetailDO.getTotalArea()));
}
} else {
PickingMaterialDetailDO pickingMaterialDetailDO = new PickingMaterialDetailDO();
pickingMaterialDetailDO.setUniqueId(pickingUniqueId);
pickingMaterialDetailDO.setPickingQuantity(qty);
pickingMaterialDetailDO.setTotalNetWeight(taskPickingMaterialDetailDO.getTotalNetWeight());
pickingMaterialDetailDO.setTotalGrossWeight(taskPickingMaterialDetailDO.getTotalGrossWeight());
pickingMaterialDetailDO.setTotalVolume(taskPickingMaterialDetailDO.getTotalVolume());
pickingMaterialDetailDO.setTotalArea(taskPickingMaterialDetailDO.getTotalArea());
pickingMaterialDetailList.add(pickingMaterialDetailDO);
}
totalPickingQuantity = totalPickingQuantity.add(qty);
}
//保存物料明细信息
saveOrUpdateBatch(taskPickingMaterialDetailList);
@@ -207,4 +207,20 @@ public class TaskPickingMaterialDetailDO extends BaseVOEntity {
@ApiModelProperty("序列号")
private List<OutMaterialDetailSerialNumberDO> materialDetailSerialNumberList;
@ApiModelProperty("总净重(KG)")
@Excel(name = "总净重(KG)")
private BigDecimal totalNetWeight;
@ApiModelProperty("总毛重(KG)")
@Excel(name = "总毛重(KG)")
private BigDecimal totalGrossWeight;
@ApiModelProperty("总体积(CBM)")
@Excel(name = "总体积(CBM)")
private BigDecimal totalVolume;
@ApiModelProperty("总面积(SQM)")
@Excel(name = "总面积(SQM)")
private BigDecimal totalArea;
}