| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.ruoyi.technology.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.technology.bean.dto.TechnologyBomStructureDto; |
| | | import com.ruoyi.technology.bean.vo.TechnologyBomStructureVo; |
| | | import com.ruoyi.technology.mapper.TechnologyBomStructureMapper; |
| | | import com.ruoyi.technology.pojo.TechnologyBomStructure; |
| | | import com.ruoyi.technology.service.TechnologyBomStructureService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class TechnologyBomStructureServiceImpl extends ServiceImpl<TechnologyBomStructureMapper, TechnologyBomStructure> implements TechnologyBomStructureService { |
| | | |
| | | private final TechnologyBomStructureMapper technologyBomStructureMapper; |
| | | |
| | | /** |
| | | * ä¿åBOMç»ææ ï¼å¤çæ°å¢ãæ´æ°åå é¤èç¹ã |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Boolean addTechnologyBomStructure(TechnologyBomStructureDto dto) { |
| | | Long bomId = dto.getBomId(); |
| | | List<TechnologyBomStructureDto> flatDtoList = new ArrayList<>(); |
| | | flattenTree(dto.getChildren(), flatDtoList); |
| | | |
| | | List<TechnologyBomStructure> dbList = this.list(new LambdaQueryWrapper<TechnologyBomStructure>() |
| | | .eq(TechnologyBomStructure::getBomId, bomId)); |
| | | |
| | | Set<Long> frontendIds = new HashSet<>(); |
| | | for (TechnologyBomStructureDto item : flatDtoList) { |
| | | if (item.getId() != null) { |
| | | frontendIds.add(item.getId()); |
| | | } |
| | | } |
| | | |
| | | Set<Long> deleteIds = new HashSet<>(); |
| | | for (TechnologyBomStructure dbItem : dbList) { |
| | | if (!frontendIds.contains(dbItem.getId())) { |
| | | deleteIds.add(dbItem.getId()); |
| | | } |
| | | } |
| | | if (!deleteIds.isEmpty()) { |
| | | this.removeByIds(deleteIds); |
| | | } |
| | | |
| | | List<TechnologyBomStructure> insertList = new ArrayList<>(); |
| | | List<TechnologyBomStructure> updateList = new ArrayList<>(); |
| | | Map<String, TechnologyBomStructure> tempEntityMap = new HashMap<>(); |
| | | |
| | | for (TechnologyBomStructureDto item : flatDtoList) { |
| | | TechnologyBomStructure entity = new TechnologyBomStructure(); |
| | | BeanUtils.copyProperties(item, entity); |
| | | entity.setBomId(bomId); |
| | | if (item.getId() == null) { |
| | | entity.setParentId(null); |
| | | insertList.add(entity); |
| | | tempEntityMap.put(item.getTempId(), entity); |
| | | } else { |
| | | updateList.add(entity); |
| | | } |
| | | } |
| | | |
| | | if (!insertList.isEmpty()) { |
| | | this.saveBatch(insertList); |
| | | } |
| | | |
| | | List<TechnologyBomStructure> parentFixList = new ArrayList<>(); |
| | | for (TechnologyBomStructureDto item : flatDtoList) { |
| | | if (item.getId() == null && item.getParentTempId() != null) { |
| | | TechnologyBomStructure child = tempEntityMap.get(item.getTempId()); |
| | | if (child == null) { |
| | | continue; |
| | | } |
| | | TechnologyBomStructure parent = tempEntityMap.get(item.getParentTempId()); |
| | | Long realParentId = parent != null ? parent.getId() : Long.valueOf(item.getParentTempId()); |
| | | child.setParentId(realParentId); |
| | | parentFixList.add(child); |
| | | } |
| | | } |
| | | |
| | | if (!parentFixList.isEmpty()) { |
| | | this.updateBatchById(parentFixList); |
| | | } |
| | | if (!updateList.isEmpty()) { |
| | | this.updateBatchById(updateList); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * æ ¹æ®BOMæ¥è¯¢å¹¶ç»è£
ç»ææ ã |
| | | */ |
| | | @Override |
| | | public List<TechnologyBomStructureVo> listByBomId(Long bomId) { |
| | | List<TechnologyBomStructureVo> list = technologyBomStructureMapper.listByBomId(bomId); |
| | | Map<Long, TechnologyBomStructureVo> map = new HashMap<>(); |
| | | for (TechnologyBomStructureVo node : list) { |
| | | node.setChildren(new ArrayList<>()); |
| | | map.put(node.getId(), node); |
| | | } |
| | | |
| | | List<TechnologyBomStructureVo> tree = new ArrayList<>(); |
| | | for (TechnologyBomStructureVo node : list) { |
| | | Long parentId = node.getParentId(); |
| | | if (parentId == null || parentId == 0L) { |
| | | tree.add(node); |
| | | continue; |
| | | } |
| | | TechnologyBomStructureVo parent = map.get(parentId); |
| | | if (parent != null) { |
| | | parent.getChildren().add(node); |
| | | } |
| | | } |
| | | return tree; |
| | | } |
| | | |
| | | /** |
| | | * å°æ å½¢ç»ææå¹³æå表ï¼ä¾¿äºç»ä¸ä¿åã |
| | | */ |
| | | private void flattenTree(List<TechnologyBomStructureDto> source, List<TechnologyBomStructureDto> result) { |
| | | if (source == null) { |
| | | return; |
| | | } |
| | | for (TechnologyBomStructureDto node : source) { |
| | | result.add(node); |
| | | flattenTree(node.getChildren(), result); |
| | | } |
| | | } |
| | | } |