From 3aeb90eaaf54e1a1af32de5efb9c944910ac9005 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 26 三月 2026 10:45:01 +0800
Subject: [PATCH] bom改变规格后,修改关联数据规格

---
 src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java |   97 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 93 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
index 2554b5e..b7b67bb 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -15,10 +15,8 @@
 import com.ruoyi.production.dto.BomImportDto;
 import com.ruoyi.production.dto.ProductBomDto;
 import com.ruoyi.production.dto.ProductStructureDto;
-import com.ruoyi.production.mapper.ProductBomMapper;
-import com.ruoyi.production.pojo.ProductBom;
-import com.ruoyi.production.pojo.ProductProcess;
-import com.ruoyi.production.pojo.ProductStructure;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductBomService;
 import com.ruoyi.production.service.ProductProcessService;
 import com.ruoyi.production.service.ProductStructureService;
@@ -59,6 +57,18 @@
     @Autowired
     private ProductProcessService productProcessService;
 
+    @Autowired
+    private ProductStructureMapper productStructureMapper;
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+
+    @Autowired
+    private ProductProcessRouteMapper productProcessRouteMapper;
+
+    @Autowired
+    private ProcessRouteMapper processRouteMapper;
+
     @Override
     public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
         return productBomMapper.listPage(page, productBomDto);
@@ -99,6 +109,85 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public AjaxResult update(ProductBom productBom) {
+        //  鏌ヨ鍑轰骇鍝佹ā鍨嬩俊鎭�
+        if (productBom.getProductModelId() == null) {
+            throw new ServiceException("璇烽�夋嫨浜у搧妯″瀷");
+        }
+
+        ProductBom oldBom = productBomMapper.selectById(productBom.getId());
+        // 濡傛灉瑙勬牸鏀瑰彉锛屽叧鑱旂殑鐢熶骇璁㈠崟濡傛灉璁㈠崟瀹屾垚鏁伴噺>0锛屽垯涓嶈鏀筨om锛涘惁鍒欏垹闄や箣鍓嶅叧鑱旂殑浜у搧缁撴瀯, 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
+        if (!oldBom.getProductModelId().equals(productBom.getProductModelId())) {
+            ProductModel productModel = productModelService.getById(productBom.getProductModelId());
+            if (productModel == null) {
+                throw new ServiceException("閫夋嫨鐨勪骇鍝佹ā鍨嬩笉瀛樺湪");
+            }
+
+            // 鍏宠仈鐨勭敓浜ц鍗曞鏋滆鍗曞畬鎴愭暟閲�>0锛屽垯涓嶈鏀筨om
+            // 鍏堟煡璇笌璇OM鍏宠仈鐨勫伐鑹鸿矾绾�
+            List<ProductProcessRoute> productProcessRoutes = productProcessRouteMapper.selectList(new LambdaQueryWrapper<ProductProcessRoute>()
+                    .eq(ProductProcessRoute::getBomId, oldBom.getId()));
+
+            // 妫�鏌ユ槸鍚︽湁鍏宠仈鐨勫伐鑹鸿矾绾�
+            if (!productProcessRoutes.isEmpty()) {
+                // 鎻愬彇宸ヨ壓璺嚎鍏宠仈鐨勭敓浜ц鍗旾D
+                List<Long> orderIds = productProcessRoutes.stream()
+                        .map(ProductProcessRoute::getProductOrderId)
+                        .filter(Objects::nonNull)
+                        .collect(Collectors.toList());
+
+                // 鏌ヨ鍏宠仈鐨勭敓浜ц鍗�
+                if (!orderIds.isEmpty()) {
+                    List<ProductOrder> productOrders = productOrderMapper.selectList(new LambdaQueryWrapper<ProductOrder>()
+                            .in(ProductOrder::getId, orderIds));
+
+                    // 妫�鏌ヨ鍗曞畬鎴愭暟閲�
+                    for (ProductOrder order : productOrders) {
+                        if (order.getCompleteQuantity() != null && order.getCompleteQuantity().compareTo(BigDecimal.ZERO) > 0) {
+                            throw new ServiceException("璇OM宸插叧鑱旂敓浜ц鍗曚笖鏈夊畬鎴愭暟閲忥紝鏃犳硶淇敼");
+                        } else {
+                            // 淇敼鍏宠仈璁㈠崟鐨勪骇鍝佷俊鎭�
+                            order.setProductModelId(productBom.getProductModelId());
+                            productOrderMapper.updateById(order);
+                        }
+                    }
+                }
+
+                // 淇敼鍏宠仈浜у搧宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
+                for (ProductProcessRoute route : productProcessRoutes) {
+                    route.setProductModelId(productBom.getProductModelId());
+                    productProcessRouteMapper.updateById(route);
+                }
+
+                // 鏌ヨ鍏宠仈鐨勫伐鑹鸿矾绾�
+                List<ProcessRoute> processRoutes = processRouteMapper.selectList(new LambdaQueryWrapper<ProcessRoute>()
+                        .eq(ProcessRoute::getBomId, oldBom.getId()));
+                if (!processRoutes.isEmpty()) {
+                    // 淇敼鍏宠仈宸ヨ壓璺嚎鐨勪骇鍝佷俊鎭�
+                    for (ProcessRoute route : processRoutes) {
+                        route.setProductModelId(productBom.getProductModelId());
+                        processRouteMapper.updateById(route);
+                    }
+                }
+            }
+
+            // 鍒犻櫎涔嬪墠鍏宠仈鐨勪骇鍝佺粨鏋�
+            productStructureMapper.delete(new LambdaQueryWrapper<ProductStructure>().eq(ProductStructure::getBomId, productBom.getId()));
+
+            // 鍏宠仈鏂扮殑浜у搧缁撴瀯
+            ProductStructure productStructure = new ProductStructure();
+            productStructure.setProductModelId(productBom.getProductModelId());
+            productStructure.setUnit(productModel.getUnit());
+            productStructure.setUnitQuantity(BigDecimal.valueOf(1));
+            productStructure.setBomId(productBom.getId());
+            productStructureService.save(productStructure);
+        }
+        productBomMapper.updateById(productBom);
+        return AjaxResult.success();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult uploadBom(MultipartFile file) {
         ExcelUtil<BomImportDto> util = new ExcelUtil<>(BomImportDto.class);
         List<BomImportDto> list;

--
Gitblit v1.9.3