手动分配子项修改
This commit is contained in:
+40
-6
@@ -119,7 +119,7 @@ public class ShiftMaterialDetailApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 性能优化:批量获取批次属性,避免N+1查询问题
|
// 性能优化:批量获取批次属性,避免N+1查询问题
|
||||||
// 1. 收集所有唯一的materialBaseInfoId
|
// 1. 收集所有唯一的materialBaseInfoId(包括子项的,此时子项还未构建,所以直接遍历所有项)
|
||||||
Set<Long> materialBaseInfoIdSet = list.stream()
|
Set<Long> materialBaseInfoIdSet = list.stream()
|
||||||
.map(ShiftMaterialDetailPO::getMaterialBaseInfoId)
|
.map(ShiftMaterialDetailPO::getMaterialBaseInfoId)
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
@@ -146,18 +146,47 @@ public class ShiftMaterialDetailApplicationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 为每个物料明细设置更多属性(从库存表中获取值)
|
// 3. 构建父子关系(类似queryListChildren的逻辑)
|
||||||
setMaterialMoreDetailListFromInventory(list, batchDetailMap);
|
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 shiftMaterialDetailPOList 移位物料明细列表
|
||||||
* @param batchDetailMap 批次属性Map
|
* @param batchDetailMap 批次属性Map
|
||||||
*/
|
*/
|
||||||
private void setMaterialMoreDetailListFromInventory(List<ShiftMaterialDetailPO> shiftMaterialDetailPOList,
|
private void setMaterialMoreDetailListFromInventoryRecursively(List<ShiftMaterialDetailPO> shiftMaterialDetailPOList,
|
||||||
Map<Long, List<BatchDetailFeignPO>> batchDetailMap) {
|
Map<Long, List<BatchDetailFeignPO>> batchDetailMap) {
|
||||||
if (CollectionUtils.isEmpty(shiftMaterialDetailPOList)) {
|
if (CollectionUtils.isEmpty(shiftMaterialDetailPOList)) {
|
||||||
return;
|
return;
|
||||||
@@ -235,6 +264,11 @@ public class ShiftMaterialDetailApplicationService {
|
|||||||
shiftMaterialDetailPO.getUniqueId(), shiftMaterialDetailPO.getMaterialBaseInfoId(),
|
shiftMaterialDetailPO.getUniqueId(), shiftMaterialDetailPO.getMaterialBaseInfoId(),
|
||||||
shiftMaterialDetailPO.getMaterialInventoryId(),
|
shiftMaterialDetailPO.getMaterialInventoryId(),
|
||||||
materialMoreDetailList != null ? materialMoreDetailList.size() : 0);
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -113,7 +114,9 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
|||||||
setWarehouseInfo(e);
|
setWarehouseInfo(e);
|
||||||
//设置物料信息
|
//设置物料信息
|
||||||
setMaterialDetailInfo(e);
|
setMaterialDetailInfo(e);
|
||||||
e.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
// 设置父级信息
|
||||||
|
Long parentUniqueId = idGenerator.snowflakeId(SnowFlakeConstants.wmsId);
|
||||||
|
e.setUniqueId(parentUniqueId);
|
||||||
e.setShiftNumber(shiftManage.getShiftNumber());
|
e.setShiftNumber(shiftManage.getShiftNumber());
|
||||||
e.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
e.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||||
e.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
e.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||||
@@ -125,10 +128,74 @@ public class ShiftManageImpl extends ServiceImpl<ShiftManageMapper, ShiftManage>
|
|||||||
e.setUpdateBy(loginUser.getUserid());
|
e.setUpdateBy(loginUser.getUserid());
|
||||||
e.setUpdateTime(new Date());
|
e.setUpdateTime(new Date());
|
||||||
e.setSerialNumberManage(e.getSerialNumberManage());
|
e.setSerialNumberManage(e.getSerialNumberManage());
|
||||||
|
// 设置父级level为1
|
||||||
|
if (e.getLevel() == null) {
|
||||||
|
e.setLevel(1);
|
||||||
|
}
|
||||||
ShiftMaterialDetail shiftMaterialDetail = new ShiftMaterialDetail();
|
ShiftMaterialDetail shiftMaterialDetail = new ShiftMaterialDetail();
|
||||||
BeanUtils.copyProperties(e, shiftMaterialDetail);
|
BeanUtils.copyProperties(e, shiftMaterialDetail);
|
||||||
shiftMaterialDetail.setNewStorageLocationName(newStorageLocationName);
|
shiftMaterialDetail.setNewStorageLocationName(newStorageLocationName);
|
||||||
shiftMaterialDetailList.add(shiftMaterialDetail);
|
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);
|
iShiftMaterialDetailService.saveBatch(shiftMaterialDetailList);
|
||||||
Boolean b;
|
Boolean b;
|
||||||
|
|||||||
Reference in New Issue
Block a user