PDA按单移位修改
This commit is contained in:
+33
-14
@@ -1,4 +1,4 @@
|
||||
package com.mhd.wms.domain.shiftManage.service;
|
||||
package com.mhd.wms.domain.shiftManage.service;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
@@ -674,7 +674,14 @@ public class ShiftManageDomainService {
|
||||
shiftManage.setShiftQuantity(shiftManageDO.getShiftQuantity());
|
||||
shiftManage.setShiftMaterialQuantity(shiftManageDO.getShiftMaterialQuantity());
|
||||
int shiftStatus = 3;
|
||||
if(shiftManageDO.getShiftQuantity().compareTo(shiftManagePO.getQuantity()) >= 0){
|
||||
// 多条物料时,需要查询所有明细,判断是否全部已完成移位(shiftQuantity >= quantity),才能置为已完成
|
||||
ShiftMaterialDetailDO queryDetailDO = new ShiftMaterialDetailDO();
|
||||
queryDetailDO.setShiftNumber(shiftManagePO.getShiftNumber());
|
||||
List<ShiftMaterialDetailPO> allDetails = shiftMaterialDetailService.queryList(queryDetailDO);
|
||||
boolean allDone = !allDetails.isEmpty() && allDetails.stream().allMatch(d ->
|
||||
d.getShiftQuantity() != null && d.getQuantity() != null
|
||||
&& d.getShiftQuantity().compareTo(d.getQuantity()) >= 0);
|
||||
if (allDone) {
|
||||
shiftStatus = 4;
|
||||
}
|
||||
shiftManage.setShiftStatus(shiftStatus);
|
||||
@@ -705,32 +712,44 @@ public class ShiftManageDomainService {
|
||||
ShiftMaterialDetailDO shiftMaterialDetailDO = new ShiftMaterialDetailDO();
|
||||
shiftMaterialDetailDO.setShiftNumber(shiftNumber);
|
||||
List<ShiftMaterialDetailPO> shiftMaterialDetailPOList = shiftMaterialDetailService.queryListChildren(shiftMaterialDetailDO);
|
||||
// 避免 NPE:getMaterialMoreDetailList 可能为 null;同一 shift 下 shiftNumber 重复需合并
|
||||
Map<String, List<MaterialMoreDetailPO>> MaterialMoreDetailMap = shiftMaterialDetailList.stream()
|
||||
.filter(d -> d.getShiftNumber() != null)
|
||||
.collect(Collectors.toMap(
|
||||
ShiftMaterialDetailDO::getShiftNumber,
|
||||
d -> d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>(),
|
||||
(a, b) -> a
|
||||
));
|
||||
// key by uniqueId so each detail maps to its own materialMoreDetailList
|
||||
Map<Long, List<MaterialMoreDetailPO>> materialMoreDetailMap = new java.util.HashMap<>();
|
||||
for (ShiftMaterialDetailDO d : shiftMaterialDetailList) {
|
||||
if (d.getUniqueId() != null) {
|
||||
materialMoreDetailMap.put(d.getUniqueId(),
|
||||
d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(d.getChildren())) {
|
||||
for (ShiftMaterialDetailDO child : d.getChildren()) {
|
||||
if (child.getUniqueId() != null) {
|
||||
materialMoreDetailMap.put(child.getUniqueId(),
|
||||
child.getMaterialMoreDetailList() != null ? child.getMaterialMoreDetailList()
|
||||
: (d.getMaterialMoreDetailList() != null ? d.getMaterialMoreDetailList() : new ArrayList<>()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (ShiftMaterialDetailPO shiftMaterialDetailPO : shiftMaterialDetailPOList){
|
||||
MaterialInventory materialInventoryOldDb = materialInventoryService.getById(shiftMaterialDetailPO.getMaterialInventoryId());
|
||||
List<ShiftMaterialDetailPO> shiftMaterialDetailPOChildrenList = shiftMaterialDetailPO.getChildren();
|
||||
boolean hasChildren = !CollectionUtils.isEmpty(shiftMaterialDetailPOChildrenList);
|
||||
// 有子项时仅用子项参与库存计算,避免父项+子项重复累加(容器移位已改为扁平结构无子项,此处主要防护按单移位的父子同目标场景)
|
||||
BigDecimal shiftQuantity;
|
||||
if (hasChildren) {
|
||||
shiftQuantity = shiftMaterialDetailPOChildrenList.stream()
|
||||
.map(c -> c.getShiftQuantity() != null ? c.getShiftQuantity() : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
shiftMaterialDetailPO.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber()));
|
||||
shiftMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId()));
|
||||
for (ShiftMaterialDetailPO shiftMaterialDetailPOChildren : shiftMaterialDetailPOChildrenList) {
|
||||
shiftMaterialDetailPOChildren.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber()));
|
||||
List<MaterialMoreDetailPO> childMoreDetail = materialMoreDetailMap.get(shiftMaterialDetailPOChildren.getUniqueId());
|
||||
if (childMoreDetail == null) {
|
||||
childMoreDetail = materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId());
|
||||
}
|
||||
shiftMaterialDetailPOChildren.setMaterialMoreDetailList(childMoreDetail);
|
||||
materialInventoryNowList.add(genMaterialInventory(shiftMaterialDetailPOChildren));
|
||||
}
|
||||
} else {
|
||||
shiftQuantity = shiftMaterialDetailPO.getShiftQuantity() != null ? shiftMaterialDetailPO.getShiftQuantity() : BigDecimal.ZERO;
|
||||
shiftMaterialDetailPO.setMaterialMoreDetailList(MaterialMoreDetailMap.get(shiftMaterialDetailPO.getShiftNumber()));
|
||||
shiftMaterialDetailPO.setMaterialMoreDetailList(materialMoreDetailMap.get(shiftMaterialDetailPO.getUniqueId()));
|
||||
materialInventoryNowList.add(genMaterialInventory(shiftMaterialDetailPO));
|
||||
}
|
||||
if (materialInventoryOldDb.getInventoryQuantity().compareTo(shiftQuantity) < 0){
|
||||
|
||||
@@ -6,6 +6,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<resultMap type="com.mhd.wms.domain.shiftMaterialDetail.repository.po.ShiftMaterialDetailPO" id="ShiftMaterialDetailResult">
|
||||
<result property="shiftIoDetailId" column="shift_io_detail_id" />
|
||||
<result property="materialInventoryId" column="material_inventory_id" />
|
||||
<result property="organizationId" column="organization_id" />
|
||||
<result property="organizationName" column="organization_name" />
|
||||
<result property="topOrganizationId" column="top_organization_id" />
|
||||
|
||||
Reference in New Issue
Block a user