src/main/java/com/ruoyi/production/bean/dto/ProductionBomStructureDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.production.bean.dto; import com.ruoyi.production.pojo.ProductionBomStructure; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.List; @Data @EqualsAndHashCode(callSuper = true) public class ProductionBomStructureDto extends ProductionBomStructure { @Schema(description = "å·¥åºåç§°") private String operationName; @Schema(description = "产ååç§°") private String productName; @Schema(description = "产åID") private Long productId; @Schema(description = "è§æ ¼åå·") private String model; private String tempId; private String parentTempId; private List<ProductionBomStructureDto> children; } src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
@@ -9,4 +9,9 @@ @Data @Schema(name = "ProductionOrderDto", description = "çäº§è®¢åæ¥è¯¢å¯¹è±¡") public class ProductionOrderDto extends ProductionOrder { @Schema(description = "产ååç§°") private String productName; @Schema(description = "è§æ ¼åå·") private String model; } src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
@@ -1,14 +1,12 @@ package com.ruoyi.production.controller; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.bean.dto.ProductionBomStructureDto; import com.ruoyi.production.bean.vo.ProductionBomStructureVo; import com.ruoyi.production.service.ProductionBomStructureService; import io.swagger.v3.oas.annotations.Operation; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -33,4 +31,10 @@ return R.ok(productionBomStructureService.listByBomId(bomId)); } @PostMapping("/addOrUpdateBomStructs") @Operation(summary = "æ°å¢æä¿®æ¹BOMç»æ") public R addProductionBomStructure(@RequestBody ProductionBomStructureDto productionBomStructureDto) { return R.ok(productionBomStructureService.addProductionBomStructure(productionBomStructureDto)); } } src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java
@@ -1,6 +1,7 @@ package com.ruoyi.production.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.bean.dto.ProductionBomStructureDto; import com.ruoyi.production.bean.vo.ProductionBomStructureVo; import com.ruoyi.production.pojo.ProductionBomStructure; @@ -18,4 +19,5 @@ List<ProductionBomStructureVo> listByBomId(Long bomId); Boolean addProductionBomStructure(ProductionBomStructureDto productionBomStructureDto); } src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
@@ -1,17 +1,18 @@ package com.ruoyi.production.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.production.bean.dto.ProductionBomStructureDto; import com.ruoyi.production.bean.vo.ProductionBomStructureVo; import com.ruoyi.production.mapper.ProductionBomStructureMapper; import com.ruoyi.production.pojo.ProductionBomStructure; import com.ruoyi.production.service.ProductionBomStructureService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * <p> @@ -54,4 +55,88 @@ return tree; } @Override @Transactional(rollbackFor = Exception.class) public Boolean addProductionBomStructure(ProductionBomStructureDto dto) { Long orderBomId = dto.getProductionOrderBomId(); List<ProductionBomStructureDto> flatDtoList = new ArrayList<>(); flattenTree(dto.getChildren(), flatDtoList); List<ProductionBomStructure> dbList = this.list(new LambdaQueryWrapper<ProductionBomStructure>() .eq(ProductionBomStructure::getProductionOrderBomId, orderBomId)); Set<Long> frontendIds = new HashSet<>(); for (ProductionBomStructureDto item : flatDtoList) { if (item.getId() != null) { frontendIds.add(item.getId()); } } Set<Long> deleteIds = new HashSet<>(); for (ProductionBomStructure dbItem : dbList) { if (!frontendIds.contains(dbItem.getId())) { deleteIds.add(dbItem.getId()); } } if (!deleteIds.isEmpty()) { this.removeByIds(deleteIds); } List<ProductionBomStructure> insertList = new ArrayList<>(); List<ProductionBomStructure> updateList = new ArrayList<>(); Map<String, ProductionBomStructure> tempEntityMap = new HashMap<>(); for (ProductionBomStructureDto item : flatDtoList) { ProductionBomStructure entity = new ProductionBomStructure(); BeanUtils.copyProperties(item, entity); entity.setProductionOrderBomId(orderBomId); 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<ProductionBomStructure> parentFixList = new ArrayList<>(); for (ProductionBomStructureDto item : flatDtoList) { if (item.getId() == null && item.getParentTempId() != null) { ProductionBomStructure child = tempEntityMap.get(item.getTempId()); if (child == null) { continue; } ProductionBomStructure 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; } /** * å°æ å½¢ç»ææå¹³æå表ï¼ä¾¿äºç»ä¸ä¿åã */ private void flattenTree(List<ProductionBomStructureDto> source, List<ProductionBomStructureDto> result) { if (source == null) { return; } for (ProductionBomStructureDto node : source) { result.add(node); flattenTree(node.getChildren(), result); } } } src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -65,6 +65,12 @@ <if test="c.id != null"> and po.id = #{c.id} </if> <if test="c.productName != null and c.productName != ''"> and p.product_name like concat('%', #{c.productName}, '%') </if> <if test="c.model != null and c.model != ''"> and pm.model like concat('%', #{c.model}, '%') </if> <if test="c.productModelId != null"> and po.product_model_id = #{c.productModelId} </if>