From bcbdb084c3a3a0a4de8fca1aa16caf0bc4681ddf Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期二, 27 十月 2026 09:41:51 +0800
Subject: [PATCH] feat(device): 删除核查计划明细时连带清理未审核记录和附件,已审核记录仍禁止删除

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java |   61 ++++++++++++++++++++++++++++--
 1 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
index 790f995..6124241 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
@@ -20,6 +20,7 @@
 import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
 import com.ruoyi.device.pojo.DeviceExamineRecord;
 import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+import com.ruoyi.device.service.DeviceExaminePlanService;
 import com.ruoyi.device.service.DeviceExamineRecordDetailService;
 import com.ruoyi.device.service.DeviceExamineRecordService;
 import com.ruoyi.framework.exception.ErrorException;
@@ -36,6 +37,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 
@@ -53,6 +56,8 @@
 
     @Resource
     private DeviceExamineRecordDetailService deviceExamineRecordDetailService;
+    @Resource
+    private DeviceExaminePlanService deviceExaminePlanService;
     @Resource
     private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
     @Resource
@@ -174,18 +179,61 @@
         if (dto.getPlanDetailsId() == null) {
             throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
         }
+        DeviceExaminePlanDetails planDetails = deviceExaminePlanDetailsMapper.selectById(dto.getPlanDetailsId());
+        if (planDetails == null) {
+            throw new ErrorException("鏍告煡璁″垝鏄庣粏涓嶅瓨鍦�");
+        }
+        if (planDetails.getCheckChargerUserId() == null && StringUtils.isBlank(planDetails.getCheckChargerUser())) {
+            throw new ErrorException("璇峰厛鍦ㄧ紪杈戜腑濉啓鏍告煡璐熻矗浜�");
+        }
+
+        Integer reviewStatus = dto.getReviewStatus();
+        Integer reviewerId = SecurityUtils.getUserId().intValue();
+        User reviewer = userMapper.selectById(reviewerId);
+
         LambdaUpdateWrapper<DeviceExamineRecord> wrapper = Wrappers.<DeviceExamineRecord>lambdaUpdate()
                 .eq(DeviceExamineRecord::getPlanDetailsId, dto.getPlanDetailsId())
-                .set(DeviceExamineRecord::getReviewStatus, dto.getReviewStatus())
+                .set(DeviceExamineRecord::getReviewStatus, reviewStatus)
                 .set(DeviceExamineRecord::getReviewRemark, dto.getReviewRemark());
 
         // 涓�0娓呴櫎瀹℃牳浜�
-        if (dto.getReviewStatus().equals(0)) {
+        if (reviewStatus != null && reviewStatus == 0) {
             wrapper.set(DeviceExamineRecord::getReviewUserId, null)
                     .set(DeviceExamineRecord::getReviewUser, null);
+        } else {
+            wrapper.set(DeviceExamineRecord::getReviewUserId, reviewerId)
+                    .set(DeviceExamineRecord::getReviewUser, reviewer == null ? null : reviewer.getName());
         }
 
-        this.update(wrapper);
+        boolean updated = this.update(wrapper);
+        // 璁″垝琛屽皻鏈綍鍏ユ牳鏌ヨ褰曟椂锛岃ˉ涓�鏉″鏍哥粨鏋滆褰曪紝淇濊瘉鍒楄〃鑳芥樉绀洪�氳繃/涓嶉�氳繃鐘舵��
+        if (!updated) {
+            DeviceExamineRecord record = new DeviceExamineRecord();
+            record.setPlanDetailsId(dto.getPlanDetailsId());
+            record.setReviewStatus(reviewStatus);
+            record.setReviewRemark(dto.getReviewRemark());
+            record.setCheckerUserId(planDetails.getCheckChargerUserId());
+            record.setCheckerUser(planDetails.getCheckChargerUser());
+            if (reviewStatus != null && reviewStatus == 1) {
+                record.setReviewUserId(reviewerId);
+                record.setReviewUser(reviewer == null ? null : reviewer.getName());
+            }
+            this.save(record);
+        }
+
+        // 澶嶆牳閫氳繃鍚庯紝璁惧妗f鐨勬渶杩�/涓嬫鏍告煡鏃ユ湡杩涘叆涓嬩竴杞�
+        if (reviewStatus != null && reviewStatus == 1) {
+            // 鎻愬墠瀹℃牳鏃舵妸鏈疆璁″垝褰掑埌瀹為檯瀹℃牳鏈堜唤锛屼究浜庣郴缁熺櫥璁颁笅涓�杞紱鎵嬪姩褰曞叆鍒版棩鐨勬棩鏈熶繚鎸佸師鏍�
+            String currentCheckTime = planDetails.getCheckTime();
+            boolean hasCheckDate = currentCheckTime != null && currentCheckTime.trim().length() >= 10;
+            if (!hasCheckDate) {
+                DeviceExaminePlanDetails updateDetail = new DeviceExaminePlanDetails();
+                updateDetail.setPlanDetailsId(dto.getPlanDetailsId());
+                updateDetail.setCheckTime(LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM")));
+                deviceExaminePlanService.updateExaminePlanDetail(updateDetail);
+            }
+            deviceExaminePlanService.updateDeviceExamineDate(dto.getPlanDetailsId());
+        }
         return true;
     }
 
@@ -199,6 +247,9 @@
     public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response) {
         // 鏌ヨ澶嶆牳鏍告煡璁板綍
         DeviceExamineRecordDto deviceExamineRecordDto = baseMapper.selectReviewExamineRecordDto(planDetailsId);
+        if (deviceExamineRecordDto == null) {
+            throw new ErrorException("璇ヨ鍒掓槑缁嗘殏鏃犳牳鏌ヨ褰曪紝璇峰厛褰曞叆鍚庡啀瀵煎嚭");
+        }
 
         // 鏌ヨ澶嶆牳鏍告煡璁板綍璇︽儏
         List<DeviceExamineRecordDetail> deviceExamineRecordDetailList = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery().eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
@@ -213,9 +264,9 @@
                     put("deviceExamineRecordDto", deviceExamineRecordDto);
                     put("deviceExamineRecordDetailList", deviceExamineRecordDetailList);
                     //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
-                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId()));
+                    put("checkerUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordDto.getCheckerUserId()));
                     //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
-                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId()));
+                    put("reviewUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordDto.getReviewUserId()));
                 }});
 
         try {

--
Gitblit v1.9.3