From 0a0aca0ce4696a228b55d4957f9cb634279970e0 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 17 一月 2026 14:56:01 +0800
Subject: [PATCH] 工序新增bug+工序bom工艺路线删除的时候校验

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java         |    5 +-
 src/main/java/com/ruoyi/production/controller/ProcessRouteController.java             |    7 ---
 src/main/java/com/ruoyi/production/controller/ProductProcessController.java           |    5 --
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java |    4 +-
 src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java        |   23 +++++++++++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                |    2 
 src/main/java/com/ruoyi/production/controller/ProductBomController.java               |    8 +++
 src/main/java/com/ruoyi/production/service/ProcessRouteService.java                   |    4 ++
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java          |   27 +++++++++++++
 src/main/java/com/ruoyi/production/service/ProductProcessService.java                 |    2 +
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                             |    2 
 11 files changed, 70 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
index 31ff3fb..50ac4a8 100644
--- a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -23,9 +23,6 @@
     @Autowired
     private ProcessRouteService processRouteService;
 
-    @Autowired
-    private ProcessRouteItemService processRouteItemService;
-
     @GetMapping("page")
     @ApiOperation("鍒嗛〉鏌ヨ")
     public R page(Page<ProcessRouteDto>  page, ProcessRouteDto processRouteDto) {
@@ -45,8 +42,6 @@
     @ApiOperation("鍒犻櫎宸ヨ壓璺嚎")
     @DeleteMapping("/{ids}")
     public R delete(@PathVariable("ids") Long[] ids) {
-        //鍒犻櫎宸ヨ壓璺嚎璇︽儏
-        processRouteItemService.remove(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId,Arrays.asList(ids)));
-        return R.ok(processRouteService.removeBatchByIds(Arrays.asList(ids)));
+        return R.ok(processRouteService.batchDelete(Arrays.asList(ids)));
     }
 }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
index b8d9416..7279862 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductBomController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -11,8 +11,10 @@
 import com.ruoyi.production.pojo.ProcessRoute;
 import com.ruoyi.production.pojo.ProductBom;
 import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.pojo.ProductProcessRoute;
 import com.ruoyi.production.service.ProcessRouteService;
 import com.ruoyi.production.service.ProductBomService;
+import com.ruoyi.production.service.ProductProcessRouteService;
 import com.ruoyi.production.service.ProductProcessService;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
@@ -39,6 +41,9 @@
 
     @Autowired
     private ProcessRouteService processRouteService;
+
+    @Autowired
+    private ProductProcessRouteService productProcessRouteService;
 
     @GetMapping("/listPage")
     @Log(title = "BOM-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
@@ -67,7 +72,8 @@
     @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
     public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
         List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids));
-        if (list.size()>0){
+        List<ProductProcessRoute> list2 = productProcessRouteService.list(Wrappers.<ProductProcessRoute>lambdaQuery().in(ProductProcessRoute::getBomId, ids));
+        if (list.size()>0 || list2.size()>0){
             return AjaxResult.error("璇OM宸茬粡瀛樺湪瀵瑰簲鐨勫伐鑹鸿矾绾�,鏃犳硶杩涜鍒犻櫎");
         }
         if(CollectionUtils.isEmpty(ids)){
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
index cff0c60..c25f2cc 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -59,10 +59,7 @@
     @DeleteMapping("/batchDelete")
     @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
     public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
-        if(CollectionUtils.isEmpty(ids)){
-            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
-        }
-        return AjaxResult.success(productProcessService.removeBatchByIds(ids));
+        return AjaxResult.success(productProcessService.batchDelete(ids));
     }
 
     @ApiOperation("鏌ヨ鎵�鏈夊伐搴�")
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index c729ea9..dae49a7 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -34,7 +34,7 @@
     private Long productModelId;
 
     /**
-     * 宸ヨ壓璺嚎id
+     * 妯$増鐨勫伐鑹鸿矾绾縤d
      */
     @ApiModelProperty(value = "宸ヨ壓璺嚎id")
     private Long routeId;
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
index bd26b0b..6b408cf 100644
--- a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -7,9 +7,13 @@
 import com.ruoyi.production.pojo.ProcessRoute;
 import io.swagger.models.auth.In;
 
+import java.util.List;
+
 public interface ProcessRouteService extends IService<ProcessRoute> {
 
     IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto);
 
     Integer saveProcessRoute(ProcessRoute processRoute);
+
+    int batchDelete(List<Long> ids);
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessService.java b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
index a5ab6c3..8b61bdd 100644
--- a/src/main/java/com/ruoyi/production/service/ProductProcessService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
@@ -23,4 +23,6 @@
     AjaxResult add(ProductProcessDto productProcessDto);
 
     AjaxResult importData(MultipartFile file);
+
+    String batchDelete(List<Integer> ids);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
index a5427d2..b3beded 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -1,11 +1,18 @@
 package com.ruoyi.production.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
 import com.ruoyi.production.mapper.ProcessRouteMapper;
+import com.ruoyi.production.mapper.ProductOrderMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteMapper;
 import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRoute;
 import com.ruoyi.production.service.ProcessRouteService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +22,8 @@
 
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
+import java.util.List;
 
 @Service
 @AllArgsConstructor
@@ -23,6 +32,12 @@
 
     @Autowired
     private ProcessRouteMapper processRouteMapper;
+
+    @Autowired
+    private ProcessRouteItemMapper processRouteItemMapper;
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
 
     @Override
     public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
@@ -40,4 +55,16 @@
         processRoute.setProcessRouteCode(newProductCode);
         return processRouteMapper.updateById(processRoute);
     }
+
+    @Override
+    public int batchDelete(List<Long> ids) {
+        //鍏堝垽鏂槸鍚﹀凡缁忓紩鐢ㄤ簡
+        List<ProductOrder> productOrders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery().in(ProductOrder::getRouteId, ids));
+        if (productOrders.size()>0){
+            throw new RuntimeException("璇ュ伐鑹鸿矾绾跨敓浜у凡寮曠敤锛屼笉鑳藉垹闄�");
+        }
+        //鍒犻櫎宸ヨ壓璺嚎璇︽儏
+        processRouteItemMapper.delete(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId, ids));
+        return processRouteMapper.deleteBatchIds(ids);
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
index 6a8cf73..1f6dd1b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -2,14 +2,19 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.pojo.Customer;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
 import com.ruoyi.production.mapper.ProductProcessMapper;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+import com.ruoyi.production.pojo.ProcessRouteItem;
 import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
 import com.ruoyi.production.service.ProductProcessService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +28,10 @@
 public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService {
     @Autowired
     private ProductProcessMapper productProcessMapper;
+    @Autowired
+    private ProcessRouteItemMapper processRouteItemMapper;
+    @Autowired
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
 
     @Override
     public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
@@ -34,7 +43,7 @@
         ProductProcess productProcess = new ProductProcess();
         BeanUtils.copyProperties(productProcessDto,productProcess);
         boolean save = productProcessMapper.insert(productProcess) > 0;
-        if (save && ObjectUtils.isNotNull(productProcessDto.getNo())) {
+        if (save && ObjectUtils.isNull(productProcessDto.getNo())) {
             // 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
             String no = "GX" + String.format("%08d", productProcess.getId());
             productProcess.setNo(no);
@@ -60,4 +69,16 @@
             return AjaxResult.error("瀵煎叆澶辫触");
         }
     }
+
+    @Override
+    public String batchDelete(List<Integer> ids) {
+        //鏌ヨ鏄惁鐢熶骇涓凡缁忓紩鐢ㄤ簡杩欎簺宸ュ簭
+        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getProcessId, ids));
+        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().in(ProductProcessRouteItem::getProcessId, ids));
+        if (!CollectionUtils.isEmpty(processRouteItems) || !CollectionUtils.isEmpty(productProcessRouteItems)){
+            throw new RuntimeException("璇ュ伐搴忓凡缁忚浣跨敤锛屾棤娉曞垹闄�");
+        }
+        productProcessMapper.deleteBatchIds(ids);
+        return null;
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index b21de5f..ed978b6 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -160,10 +160,10 @@
             Product product = productMapper.selectById(productModel1.getProductId());
             BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
             if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {
-                throw new RuntimeException(product.getProductName() + "搴撳瓨涓�0");
+                throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹负0");
             }
             if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) {
-                throw new RuntimeException(product.getProductName() + "搴撳瓨涓嶈冻");
+                throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹笉瓒�");
             }
             ProductionProductInput productionProductInput = new ProductionProductInput();
             productionProductInput.setProductModelId(productStructureDto.getProductModelId());
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 14c0e7d..a044c11 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
@@ -202,7 +203,7 @@
             ProcessRoute processRoute = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
                     .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
                     .orderByDesc(ProcessRoute::getCreateTime)).get(0);
-            if (processRoute != null) {
+            if (ObjectUtils.isNotNull(processRoute)) {
                 //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
                 ProductProcessRoute productProcessRoute = new ProductProcessRoute();
                 productProcessRoute.setProductModelId(processRoute.getProductModelId());
@@ -258,8 +259,6 @@
                 productOrder.setRouteId(processRoute.getId());
                 productOrderMapper.updateById(productOrder);
             }
-
-
         } else {
             salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
             result = salesLedgerProductMapper.updateById(salesLedgerProduct);
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 9e94a27..4f65d1f 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -705,7 +705,7 @@
                 ProcessRoute processRoute = processRouteMapper.selectList(new QueryWrapper<ProcessRoute>().lambda()
                         .eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId())
                         .orderByDesc(ProcessRoute::getCreateTime)).get(0);
-                if (processRoute != null) {
+                if (ObjectUtils.isNotNull(processRoute)) {
                     //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
                     ProductProcessRoute productProcessRoute = new ProductProcessRoute();
                     productProcessRoute.setProductModelId(processRoute.getProductModelId());

--
Gitblit v1.9.3