From 62a8267fe595c5d1b404e4a821f2e5d93f949320 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 25 四月 2026 17:34:52 +0800
Subject: [PATCH] feat(production): 生产订单的bom的增删改
---
src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java | 5 +
src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java | 93 +++++++++++++++++++++++++++++-
src/main/java/com/ruoyi/production/bean/dto/ProductionBomStructureDto.java | 31 ++++++++++
src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java | 2
src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java | 12 ++-
src/main/resources/mapper/production/ProductionOrderMapper.xml | 6 ++
6 files changed, 141 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionBomStructureDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionBomStructureDto.java
new file mode 100644
index 0000000..c898c56
--- /dev/null
+++ b/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;
+}
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
index 9921344..4b0a711 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionOrderDto.java
+++ b/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;
}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java b/src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
index 2ff08ba..dd1d50e 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionBomStructureController.java
+++ b/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 = "鏂板鎴栦慨鏀笲OM缁撴瀯")
+ public R addProductionBomStructure(@RequestBody ProductionBomStructureDto productionBomStructureDto) {
+ return R.ok(productionBomStructureService.addProductionBomStructure(productionBomStructureDto));
+ }
+
}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java b/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java
index f102cbd..6e63dfe 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionBomStructureService.java
+++ b/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);
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
index 00ab057..cbae0dc 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionBomStructureServiceImpl.java
+++ b/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);
+ }
+ }
+
}
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 8166dad..c799d3d 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/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>
--
Gitblit v1.9.3