手动分配子项修改
This commit is contained in:
+40
-6
@@ -119,7 +119,7 @@ public class ShiftMaterialDetailApplicationService {
|
||||
}
|
||||
|
||||
// 性能优化:批量获取批次属性,避免N+1查询问题
|
||||
// 1. 收集所有唯一的materialBaseInfoId
|
||||
// 1. 收集所有唯一的materialBaseInfoId(包括子项的,此时子项还未构建,所以直接遍历所有项)
|
||||
Set<Long> materialBaseInfoIdSet = list.stream()
|
||||
.map(ShiftMaterialDetailPO::getMaterialBaseInfoId)
|
||||
.filter(Objects::nonNull)
|
||||
@@ -146,18 +146,47 @@ public class ShiftMaterialDetailApplicationService {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 为每个物料明细设置更多属性(从库存表中获取值)
|
||||
setMaterialMoreDetailListFromInventory(list, batchDetailMap);
|
||||
// 3. 构建父子关系(类似queryListChildren的逻辑)
|
||||
List<ShiftMaterialDetailPO> parentList = list.stream()
|
||||
.filter(e -> e.getLevel() != null && e.getLevel() == 1)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return list;
|
||||
// 递归构建子项关系
|
||||
parentList.forEach(parent -> {
|
||||
List<ShiftMaterialDetailPO> children = getChildren(parent.getUniqueId(), list, 2);
|
||||
parent.setChildren(children);
|
||||
});
|
||||
|
||||
// 4. 为每个物料明细(包括子项)设置更多属性(从库存表中获取值)
|
||||
setMaterialMoreDetailListFromInventoryRecursively(parentList, batchDetailMap);
|
||||
|
||||
return parentList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为移位物料明细设置更多属性(从库存表中获取值)
|
||||
* 递归获取子项
|
||||
*/
|
||||
private List<ShiftMaterialDetailPO> getChildren(Long parentUniqueId, List<ShiftMaterialDetailPO> allList, Integer maxLevel) {
|
||||
List<ShiftMaterialDetailPO> childrenList = allList.stream()
|
||||
.filter(materialDetailPO -> parentUniqueId != null && parentUniqueId.equals(materialDetailPO.getParentUniqueId()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (!CollectionUtils.isEmpty(childrenList)) {
|
||||
childrenList.forEach(child -> {
|
||||
if (child.getLevel() != null && child.getLevel() < maxLevel) {
|
||||
child.setChildren(getChildren(child.getUniqueId(), allList, maxLevel));
|
||||
}
|
||||
});
|
||||
}
|
||||
return childrenList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 为移位物料明细设置更多属性(从库存表中获取值),递归处理子项
|
||||
* @param shiftMaterialDetailPOList 移位物料明细列表
|
||||
* @param batchDetailMap 批次属性Map
|
||||
*/
|
||||
private void setMaterialMoreDetailListFromInventory(List<ShiftMaterialDetailPO> shiftMaterialDetailPOList,
|
||||
private void setMaterialMoreDetailListFromInventoryRecursively(List<ShiftMaterialDetailPO> shiftMaterialDetailPOList,
|
||||
Map<Long, List<BatchDetailFeignPO>> batchDetailMap) {
|
||||
if (CollectionUtils.isEmpty(shiftMaterialDetailPOList)) {
|
||||
return;
|
||||
@@ -235,6 +264,11 @@ public class ShiftMaterialDetailApplicationService {
|
||||
shiftMaterialDetailPO.getUniqueId(), shiftMaterialDetailPO.getMaterialBaseInfoId(),
|
||||
shiftMaterialDetailPO.getMaterialInventoryId(),
|
||||
materialMoreDetailList != null ? materialMoreDetailList.size() : 0);
|
||||
|
||||
// 递归处理子项
|
||||
if (!CollectionUtils.isEmpty(shiftMaterialDetailPO.getChildren())) {
|
||||
setMaterialMoreDetailListFromInventoryRecursively(shiftMaterialDetailPO.getChildren(), batchDetailMap);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+68
-1
@@ -41,6 +41,7 @@ import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
@@ -113,7 +114,9 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
||||
setWarehouseInfo(e);
|
||||
//设置物料信息
|
||||
setMaterialDetailInfo(e);
|
||||
e.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
||||
// 设置父级信息
|
||||
Long parentUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId);
|
||||
e.setUniqueId(parentUniqueId);
|
||||
e.setShiftNumber(shiftManage.getShiftNumber());
|
||||
e.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
e.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
@@ -125,10 +128,74 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
||||
e.setUpdateBy(loginUser.getUserid());
|
||||
e.setUpdateTime(new Date());
|
||||
e.setSerialNumberManage(e.getSerialNumberManage());
|
||||
// 设置父级level为1
|
||||
if (e.getLevel() == null) {
|
||||
e.setLevel(1);
|
||||
}
|
||||
ShiftMaterialDetail shiftMaterialDetail = new ShiftMaterialDetail();
|
||||
BeanUtils.copyProperties(e, shiftMaterialDetail);
|
||||
shiftMaterialDetail.setNewStorageLocationName(newStorageLocationName);
|
||||
shiftMaterialDetailList.add(shiftMaterialDetail);
|
||||
|
||||
// 处理子项
|
||||
List<ShiftMaterialDetailDO> shiftMaterialDetailDOChildList = e.getChildren();
|
||||
if (!CollectionUtils.isEmpty(shiftMaterialDetailDOChildList)) {
|
||||
for (ShiftMaterialDetailDO shiftMaterialDetailDOChild : shiftMaterialDetailDOChildList) {
|
||||
// 如果子项没有materialInventoryId,则从父级继承库存相关信息
|
||||
if (shiftMaterialDetailDOChild.getMaterialInventoryId() == null) {
|
||||
// 从父级继承库存相关信息
|
||||
shiftMaterialDetailDOChild.setMaterialInventoryId(e.getMaterialInventoryId());
|
||||
shiftMaterialDetailDOChild.setMaterialBaseInfoId(e.getMaterialBaseInfoId());
|
||||
shiftMaterialDetailDOChild.setMaterialCode(e.getMaterialCode());
|
||||
shiftMaterialDetailDOChild.setMaterialName(e.getMaterialName());
|
||||
shiftMaterialDetailDOChild.setBarCode(e.getBarCode());
|
||||
shiftMaterialDetailDOChild.setInventoryQuantity(e.getInventoryQuantity());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseId(e.getOldWarehouseId());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseCode(e.getOldWarehouseCode());
|
||||
shiftMaterialDetailDOChild.setOldWarehouseName(e.getOldWarehouseName());
|
||||
shiftMaterialDetailDOChild.setOldStorageSectionId(e.getOldStorageSectionId());
|
||||
shiftMaterialDetailDOChild.setOldStorageCode(e.getOldStorageCode());
|
||||
shiftMaterialDetailDOChild.setOldStorageName(e.getOldStorageName());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationId(e.getOldStorageLocationId());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationCode(e.getOldStorageLocationCode());
|
||||
shiftMaterialDetailDOChild.setOldStorageLocationName(e.getOldStorageLocationName());
|
||||
shiftMaterialDetailDOChild.setBatchNumber(e.getBatchNumber());
|
||||
shiftMaterialDetailDOChild.setMaterialStatusCode(e.getMaterialStatusCode());
|
||||
shiftMaterialDetailDOChild.setMaterialStatusName(e.getMaterialStatusName());
|
||||
shiftMaterialDetailDOChild.setContainerId(e.getContainerId());
|
||||
shiftMaterialDetailDOChild.setContainerCode(e.getContainerCode());
|
||||
shiftMaterialDetailDOChild.setContainerType(e.getContainerType());
|
||||
shiftMaterialDetailDOChild.setContainerTypeName(e.getContainerTypeName());
|
||||
} else {
|
||||
// 如果子项有materialInventoryId,则设置库存信息
|
||||
setMaterialInventory(shiftMaterialDetailDOChild);
|
||||
}
|
||||
// 设置库位信息和物料信息
|
||||
setWarehouseInfo(shiftMaterialDetailDOChild);
|
||||
setMaterialDetailInfo(shiftMaterialDetailDOChild);
|
||||
|
||||
// 设置子项的uniqueId和parentUniqueId
|
||||
Long childUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId);
|
||||
shiftMaterialDetailDOChild.setUniqueId(childUniqueId);
|
||||
shiftMaterialDetailDOChild.setParentUniqueId(parentUniqueId);
|
||||
shiftMaterialDetailDOChild.setShiftNumber(shiftManage.getShiftNumber());
|
||||
shiftMaterialDetailDOChild.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
shiftMaterialDetailDOChild.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
shiftMaterialDetailDOChild.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
shiftMaterialDetailDOChild.setCreateByName(loginUser.getUsername());
|
||||
shiftMaterialDetailDOChild.setCreateBy(loginUser.getUserid());
|
||||
shiftMaterialDetailDOChild.setCreateTime(new Date());
|
||||
shiftMaterialDetailDOChild.setUpdateByName(loginUser.getUsername());
|
||||
shiftMaterialDetailDOChild.setUpdateBy(loginUser.getUserid());
|
||||
shiftMaterialDetailDOChild.setUpdateTime(new Date());
|
||||
// 设置子项level为2
|
||||
shiftMaterialDetailDOChild.setLevel(2);
|
||||
|
||||
ShiftMaterialDetail shiftMaterialDetailChild = new ShiftMaterialDetail();
|
||||
BeanUtils.copyProperties(shiftMaterialDetailDOChild, shiftMaterialDetailChild);
|
||||
shiftMaterialDetailList.add(shiftMaterialDetailChild);
|
||||
}
|
||||
}
|
||||
});
|
||||
iShiftMaterialDetailService.saveBatch(shiftMaterialDetailList);
|
||||
Boolean b;
|
||||
|
||||
Reference in New Issue
Block a user