From f0bcc6b51f4a272321710650800486d7d2f019fd Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 10 四月 2026 17:01:52 +0800
Subject: [PATCH] fix:报工数量负数判断

---
 src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
index 22695ae..bdb6596 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionRecordServiceImpl.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.other.pojo.TempFile;
 import com.ruoyi.production.dto.*;
@@ -52,6 +53,9 @@
 
     @Value("${file.upload-dir}")
     private String uploadDir;
+
+    @Autowired
+    private RuoYiConfig ruoYiConfig;
 
     @Autowired
     private ProductionProductMainService productionProductMainService;
@@ -198,17 +202,31 @@
             throw new ServiceException("鎶ュ伐澶辫触,鐢熶骇璁㈠崟涓嶅瓨鍦�");
         }
 
-        //  褰撳墠鎶ュ伐鍚堟牸鏁伴噺锛堝墠绔凡淇濊瘉 = 鎶曞叆鏁伴噺 - 涓嶅悎鏍兼暟閲忥紝鐩存帴浣跨敤锛�
+        //  褰撳墠鎶ュ伐鍚堟牸鏁伴噺
         BigDecimal qualifiedQty = dto.getQualifiedQuantity() == null ? BigDecimal.ZERO : dto.getQualifiedQuantity();
+        BigDecimal unqualifiedQty = dto.getUnqualifiedQuantity() == null ? BigDecimal.ZERO : dto.getUnqualifiedQuantity();
+        BigDecimal totalReportQty = dto.getQuantity() == null ? BigDecimal.ZERO : dto.getQuantity();
+
+        if (qualifiedQty.compareTo(BigDecimal.ZERO) < 0 || unqualifiedQty.compareTo(BigDecimal.ZERO) < 0 || totalReportQty.compareTo(BigDecimal.ZERO) < 0) {
+            throw new ServiceException("鎶ュ伐澶辫触锛氬悎鏍兼暟閲忋�佷笉鍚堟牸鏁伴噺鎴栨�绘暟閲忎笉鑳戒负璐熸暟");
+        }
+
+        if (qualifiedQty.add(unqualifiedQty).compareTo(totalReportQty) != 0) {
+            throw new ServiceException("鎶ュ伐澶辫触锛氬悎鏍兼暟閲忎笌涓嶅悎鏍兼暟閲忎箣鍜屽繀椤荤瓑浜庢�绘姤宸ユ暟閲�");
+        }
         //  璁㈠崟宸插畬鎴愭暟閲忥紙鍘嗗彶绱锛�
         BigDecimal completeQty = productOrder.getCompleteQuantity() == null ? BigDecimal.ZERO : productOrder.getCompleteQuantity();
         //  闇�姹傛暟閲�
         BigDecimal totalQty = productOrder.getQuantity() == null ? BigDecimal.ZERO : productOrder.getQuantity();
         //  鍓╀綑鍙姤宸ユ暟閲�
         BigDecimal remainQty = totalQty.subtract(completeQty);
-        //  鏈鎶ュ伐鍚堟牸鏁伴噺涓嶈兘瓒呰繃鍓╀綑鏁伴噺锛堟牎楠屽繀椤诲湪绱姞鍓嶆墽琛岋級
+        //  鏈鎶ュ伐鍚堟牸鏁伴噺涓嶈兘瓒呰繃鍓╀綑鏁伴噺
         if (qualifiedQty.compareTo(remainQty) > 0) {
             throw new ServiceException("鎶ュ伐澶辫触锛屾湰娆℃姤宸ユ暟閲忎笉鑳藉ぇ浜庡墿浣欏彲鎶ュ伐鏁伴噺锛屽墿浣欐姤宸ユ暟閲�:[" + remainQty + "]");
+        }
+        //  鏈鎶ュ伐涓嶅悎鏍兼暟閲忎笉鑳借秴杩囨湰娆℃姤宸ユ暟閲�
+        if (dto.getUnqualifiedQuantity() != null && dto.getUnqualifiedQuantity().compareTo(dto.getQuantity()) > 0) {
+            throw new ServiceException("鎶ュ伐澶辫触锛屾湰娆℃姤宸ヤ笉鍚堟牸鏁伴噺涓嶈兘澶т簬鎶ュ伐鏁伴噺锛屾姤宸ユ暟閲�:[" + dto.getQuantity() + "]");
         }
         //  鍘嗗彶宸插畬鎴� + 鏈鍚堟牸鏁伴噺
         BigDecimal newCompleteQty = completeQty.add(qualifiedQty);
@@ -299,6 +317,8 @@
                                 paramEntity.setValueMode(orderParam.getValueMode());
                                 paramEntity.setUnit(orderParam.getUnit());
                                 paramEntity.setStandardValue(orderParam.getStandardValue());
+                                paramEntity.setMinValue(orderParam.getMinValue());
+                                paramEntity.setMaxValue(orderParam.getMaxValue());
                             }
                         }
                         productionProductRouteItemParamService.save(paramEntity);
@@ -343,6 +363,11 @@
                         fileEntity.setProductionProductRouteItemId(productRouteItemEntity.getId());
                         fileEntity.setFileName(originalFilename);
                         fileEntity.setFileUrl(formalFilePath.toString());
+                        Path basePath = Paths.get(RuoYiConfig.getProfile());
+                        String relativePath = basePath.relativize(formalFilePath).toString();
+                        relativePath = relativePath.replace("\\", "/");
+                        String url = "/profile/" + relativePath;
+                        fileEntity.setUrl(url);
                         fileEntity.setFileSuffix(fileExtension);
                         fileEntity.setFileSize(Files.size(formalFilePath));
                         fileEntity.setCreateTime(LocalDateTime.now());
@@ -739,6 +764,9 @@
                                 paramEntity.setParamFormat(orderParam.getParamFormat());
                                 paramEntity.setValueMode(orderParam.getValueMode());
                                 paramEntity.setUnit(orderParam.getUnit());
+                                paramEntity.setStandardValue(orderParam.getStandardValue());
+                                paramEntity.setMinValue(orderParam.getMinValue());
+                                paramEntity.setMaxValue(orderParam.getMaxValue());
                             }
                         }
                         productionProductRouteItemParamService.save(paramEntity);
@@ -776,6 +804,12 @@
                         fileEntity.setProductionProductRouteItemId(routeItemId);
                         fileEntity.setFileName(originalFilename);
                         fileEntity.setFileUrl(formalFilePath.toString());
+                        Path basePath = Paths.get(RuoYiConfig.getProfile());
+                        String relativePath = basePath.relativize(formalFilePath).toString();
+                        relativePath = relativePath.replace("\\", "/");
+                        String url = "/profile/" + relativePath;
+
+                        fileEntity.setUrl(url);
                         fileEntity.setFileSuffix(fileExtension);
                         fileEntity.setFileSize(Files.size(formalFilePath));
                         fileEntity.setCreateTime(LocalDateTime.now());

--
Gitblit v1.9.3