优化bom结构树查询接口
This commit is contained in:
+22
-3
@@ -8,11 +8,12 @@ import com.zzsmart.qomo.kn.cost.manage.service.BomTreeService;
|
|||||||
import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
|
import com.zzsmart.qomo.kn.cost.manage.util.BomTreeBuilder;
|
||||||
import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
|
import com.zzsmart.qomo.kn.cost.manage.vo.BomTreeInfoVO;
|
||||||
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
|
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
|
||||||
|
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 java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class BomTreeServiceImpl implements BomTreeService {
|
public class BomTreeServiceImpl implements BomTreeService {
|
||||||
@@ -38,7 +39,25 @@ public class BomTreeServiceImpl implements BomTreeService {
|
|||||||
wrapper.like("c2.version_number", version_number);
|
wrapper.like("c2.version_number", version_number);
|
||||||
}
|
}
|
||||||
List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
|
List<CostStandardDetailVO> costStandardDetailVOS = costStandardDetailMapper.queryListResult(wrapper);
|
||||||
List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS);
|
//查询所有满足条件的父节点
|
||||||
|
Map<String, CostStandardDetailVO> parentDataMap = new TreeMap<>();
|
||||||
|
if ((StrUtil.isNotEmpty(materialNumber) || StrUtil.isNotEmpty(version_number)) && costStandardDetailVOS.size() > 0) {
|
||||||
|
parentDataMap = costStandardDetailVOS.stream().collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
||||||
|
//查询所有父节点下的子节点
|
||||||
|
QueryWrapper<CostStandardDetail> wrapper1 = new QueryWrapper<>();
|
||||||
|
for (String materialNumber1 : parentDataMap.keySet()) {
|
||||||
|
wrapper1.like("parent_material_number", materialNumber1);
|
||||||
|
}
|
||||||
|
List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
|
||||||
|
costStandardDetailVOS=new ArrayList<>();
|
||||||
|
for (int i=0;i<costStandardDetails.size();i++){
|
||||||
|
CostStandardDetail costStandardDetail = costStandardDetails.get(i);
|
||||||
|
CostStandardDetailVO vo=new CostStandardDetailVO();
|
||||||
|
BeanUtils.copyProperties(costStandardDetail,vo);
|
||||||
|
costStandardDetailVOS.add(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
|
||||||
return bomTreeInfoVOS;
|
return bomTreeInfoVOS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -11,15 +11,17 @@ import java.util.Map;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class BomTreeBuilder {
|
public class BomTreeBuilder {
|
||||||
public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData) {
|
public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData, Map<String, CostStandardDetailVO> parentDataMap) {
|
||||||
List<BomTreeInfoVO> result = new ArrayList<>();
|
List<BomTreeInfoVO> result = new ArrayList<>();
|
||||||
if (sourceData == null || (sourceData != null && sourceData.size() < 1)) {
|
if ((sourceData == null || (sourceData != null && sourceData.size() < 1))&& (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
//1.把BOM信息分成按照物料号分组
|
//1.把BOM信息分成按照物料号分组
|
||||||
Map<String, CostStandardDetailVO> materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
Map<String, CostStandardDetailVO> materialMap = sourceData.stream().filter(s -> s.getMaterialNumber() != null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
||||||
//查找最顶端的父类节点
|
//查找最顶端的父类节点
|
||||||
Map<String, CostStandardDetailVO> parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
if (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1)) {
|
||||||
|
parentDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() == null).collect(Collectors.toMap(CostStandardDetailVO::getMaterialNumber, vo -> vo));
|
||||||
|
}
|
||||||
//查找有父节点的子节点
|
//查找有父节点的子节点
|
||||||
Map<String, List<CostStandardDetailVO>> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
|
Map<String, List<CostStandardDetailVO>> childDataMap = sourceData.stream().filter(s -> s.getParentMaterialNumber() != null).collect(Collectors.groupingBy(CostStandardDetailVO::getParentMaterialNumber));
|
||||||
//查找有父节点的子节点
|
//查找有父节点的子节点
|
||||||
|
|||||||
Reference in New Issue
Block a user