update 物料BOM递归优化

master
yinq
parent 1828a93655
commit 33a4847aa7

@ -238,7 +238,7 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService {
topProdMaterialBomVo.setMaterialTypeId(1L); topProdMaterialBomVo.setMaterialTypeId(1L);
prodMaterialBomVos.add(topProdMaterialBomVo); prodMaterialBomVos.add(topProdMaterialBomVo);
List<Long> tempList = prodMaterialBomVos.stream().map(ProdMaterialBomVo::getMaterialBomId).collect(Collectors.toList()); List<Long> tempList = prodMaterialBomVos.stream().map(ProdMaterialBomVo::getMaterialBomId).toList();
for (ProdMaterialBomVo prodMaterialBomVo : prodMaterialBomVos) { for (ProdMaterialBomVo prodMaterialBomVo : prodMaterialBomVos) {
// 如果是顶级节点, 遍历该父节点的所有子节点 // 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(prodMaterialBomVo.getParentId())) { if (!tempList.contains(prodMaterialBomVo.getParentId())) {
@ -267,33 +267,29 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService {
/** /**
* *
*/ */
private void recursionFn(List<ProdMaterialBomVo> list, ProdMaterialBomVo t) { private void recursionFn(List<ProdMaterialBomVo> list, ProdMaterialBomVo parent) {
// 得到子节点列表 // 获取子节点
List<ProdMaterialBomVo> childList = getChildList(list, t); List<ProdMaterialBomVo> childList = getChildList(list, parent);
t.setChildren(childList); parent.setChildren(childList);
for (ProdMaterialBomVo tChild : childList) {
if (hasChild(list, tChild)) { // 递归处理子节点
recursionFn(list, tChild); for (ProdMaterialBomVo child : childList) {
// 确保子节点继承 BOM 版本信息
if (StringUtils.isBlank(child.getMaterialBomVersion()) && StringUtils.isNotBlank(parent.getMaterialBomVersion())) {
child.setMaterialBomVersion(parent.getMaterialBomVersion());
} }
recursionFn(list, child);
} }
} }
/** /**
* *
*/ */
private List<ProdMaterialBomVo> getChildList(List<ProdMaterialBomVo> list, ProdMaterialBomVo t) { private List<ProdMaterialBomVo> getChildList(List<ProdMaterialBomVo> list, ProdMaterialBomVo parent) {
List<ProdMaterialBomVo> tlist = new ArrayList<ProdMaterialBomVo>(); return list.stream()
Iterator<ProdMaterialBomVo> it = list.iterator(); .filter(n -> StringUtils.isNotNull(n.getParentId()) &&
while (it.hasNext()) { n.getParentId().equals(parent.getMaterialBomId()))
ProdMaterialBomVo n = (ProdMaterialBomVo) it.next(); .collect(Collectors.toList());
if(StringUtils.isNotBlank(t.getMaterialBomVersion())){
n.setMaterialBomVersion(t.getMaterialBomVersion());
}
if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getMaterialBomId().longValue()) {
tlist.add(n);
}
}
return tlist;
} }
/** /**

@ -27,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="parentId != null ">and pmb.parent_id = #{parentId}</if> <if test="parentId != null ">and pmb.parent_id = #{parentId}</if>
</where> </where>
order by pmb.material_bom_id desc order by pmb.material_bom_id, pmb.material_bom_version desc
</select> </select>

Loading…
Cancel
Save