From 2f07589b54d56085af77b50d580890cd4130b444 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 15:19:53 +0800
Subject: [PATCH] 设备模块后端业务规则、计划接口与日期联动

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java |   50 +++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
index af0f4fe..c3f492c 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
@@ -7,6 +7,7 @@
 import com.deepoove.poi.config.Configure;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.dto.DeviceScrappedDto;
@@ -15,6 +16,7 @@
 import com.ruoyi.device.pojo.Device;
 import com.ruoyi.device.pojo.DeviceScrapped;
 import com.ruoyi.device.service.DeviceScrappedService;
+import com.ruoyi.device.util.DeviceFlowPermissionUtils;
 import com.ruoyi.inspect.util.UserUtils;
 import com.ruoyi.system.mapper.UserMapper;
 import org.springframework.beans.BeanUtils;
@@ -66,6 +68,7 @@
         DeviceScrapped scrapped = new DeviceScrapped();
         // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
         User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        checkFlowPermission(deviceScrapped, user);
         switch (deviceScrapped.getFlowType()) {
             case 0:
                 BeanUtils.copyProperties(deviceScrapped, scrapped);
@@ -74,11 +77,6 @@
                 scrapped.setApplicantUserId(user.getId());
                 scrapped.setApplicantUser(user.getName());
                 scrapped.setApplicantDate(LocalDate.now());
-
-                // 澶勭悊浜轰俊鎭�
-                User departmentHeadUser = userMapper.selectById(deviceScrapped.getDepartmentHeadUserId());
-                scrapped.setApplicantUserId(departmentHeadUser.getId());
-                scrapped.setApplicantUser(departmentHeadUser.getName());
 
                 baseMapper.insert(scrapped);
                 break;
@@ -121,6 +119,40 @@
         return true;
     }
 
+    private void checkFlowPermission(DeviceScrapped deviceScrapped, User user) {
+        Integer flowType = deviceScrapped.getFlowType();
+        Integer scrappedId = deviceScrapped.getScrappedId();
+        if (flowType != null && flowType > 0) {
+            DeviceScrapped existing = baseMapper.selectById(scrappedId);
+            if (existing == null) {
+                throw new ServiceException("鍗曟嵁涓嶅瓨鍦�");
+            }
+            DeviceFlowPermissionUtils.checkFinished(existing.getIsFinish());
+            Integer expectedUserId;
+            switch (flowType) {
+                case 1:
+                    expectedUserId = existing.getDepartmentHeadUserId();
+                    break;
+                case 2:
+                    expectedUserId = existing.getMeteringRoomUserId();
+                    break;
+                case 3:
+                    expectedUserId = existing.getApproverUserId();
+                    break;
+                default:
+                    expectedUserId = null;
+                    break;
+            }
+            DeviceFlowPermissionUtils.checkResponsible(expectedUserId, user.getId());
+        } else if (scrappedId != null) {
+            DeviceScrapped existing = baseMapper.selectById(scrappedId);
+            if (existing != null) {
+                DeviceFlowPermissionUtils.checkFinished(existing.getIsFinish());
+                DeviceFlowPermissionUtils.checkResponsible(existing.getApplicantUserId(), user.getId());
+            }
+        }
+    }
+
     /**
      * 瀵煎嚭璁惧鎶ュ簾鐢宠
      *
@@ -150,13 +182,13 @@
                     put("deviceScrapped", deviceScrapped);
                     put("device", finalDevice);
                     // 鐢宠浜虹鍚�
-                    put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApplicantUserId()));
+                    put("applicantUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getApplicantUserId()));
                     // 閮ㄩ棬璐熻矗浜虹鍚�
-                    put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getDepartmentHeadUserId()));
+                    put("headUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getDepartmentHeadUserId()));
                     // 璁¢噺瀹ょ鍚�
-                    put("metrologyRoomUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getMeteringRoomUserId()));
+                    put("metrologyRoomUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getMeteringRoomUserId()));
                     // 鎵瑰噯浜虹鍚�
-                    put("approverUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApproverUserId()));
+                    put("approverUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getApproverUserId()));
                 }});
 
         try {

--
Gitblit v1.9.3