From de0bf07d8497ec97750de8adabd6a30146fe9557 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 01 七月 2026 11:32:26 +0800
Subject: [PATCH] fix:1.发货审批不通过时,对应的发货车牌应不展示2.审批模版被其他审批引用时,不能进行编辑或删除操作

---
 src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 58 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
index db1f378..9a5f0b8 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalTemplateServiceImpl.java
@@ -13,15 +13,22 @@
 import com.ruoyi.approve.bean.vo.ApprovalTemplateVo;
 import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
 import com.ruoyi.approve.mapper.ApprovalTemplateNodeApproverMapper;
+import com.ruoyi.approve.mapper.ApprovalInstanceMapper;
+import com.ruoyi.approve.pojo.ApprovalInstance;
 import com.ruoyi.approve.pojo.ApprovalTemplate;
 import com.ruoyi.approve.pojo.ApprovalTemplateNode;
 import com.ruoyi.approve.pojo.ApprovalTemplateNodeApprover;
 import com.ruoyi.approve.service.ApprovalTemplateNodeService;
 import com.ruoyi.approve.service.ApprovalTemplateService;
+import com.ruoyi.basic.dto.StorageBlobDTO;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.util.Collections;
 import java.util.Comparator;
@@ -43,6 +50,8 @@
     private final ApprovalTemplateMapper approvalTemplateMapper;
     private final ApprovalTemplateNodeService approvalTemplateNodeService;
     private final ApprovalTemplateNodeApproverMapper approvalTemplateNodeApproverMapper;
+    private final ApprovalInstanceMapper approvalInstanceMapper;
+    private final FileUtil fileUtil;
 
     @Override
     public IPage<ApprovalTemplateVo> listPage(Page<ApprovalTemplateVo> page, ApprovalTemplateDto approvalTemplateDto) {
@@ -63,6 +72,11 @@
                 new LambdaQueryWrapper<ApprovalTemplateNodeApprover>()
                         .eq(ApprovalTemplateNodeApprover::getTemplateId, approvalTemplateDto.getId())
         );
+        // 淇濆瓨闄勪欢
+        List<StorageBlobDTO> storageBlobDTOs = approvalTemplateDto.getStorageBlobDTOs();
+        if (!CollectionUtils.isEmpty(storageBlobDTOs)) {
+            fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId(), storageBlobDTOs);
+        }
         return approvalTemplateNodeService.saveApprovalTemplateNode(
                 approvalTemplateDto.getId(),
                 approvalTemplateDto.getNodes()
@@ -71,6 +85,10 @@
 
     @Override
     public Boolean updateApprovalTemplateDto(ApprovalTemplateDto approvalTemplateDto) {
+        // 妫�鏌ユā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+        if (isTemplateReferenced(approvalTemplateDto.getId())) {
+            throw new RuntimeException("璇ュ鎵规ā鏉垮凡琚鎵规祦绋嬪紩鐢紝鏃犳硶缂栬緫");
+        }
         approvalTemplateMapper.updateById(approvalTemplateDto);
         approvalTemplateNodeService.remove(
                 new LambdaQueryWrapper<ApprovalTemplateNode>()
@@ -80,6 +98,16 @@
                 new LambdaQueryWrapper<ApprovalTemplateNodeApprover>()
                         .eq(ApprovalTemplateNodeApprover::getTemplateId, approvalTemplateDto.getId())
         );
+        // 淇濆瓨闄勪欢锛堜細鍏堝垹闄ゆ棫闄勪欢锛�
+        List<StorageBlobDTO> storageBlobDTOs = approvalTemplateDto.getStorageBlobDTOs();
+        if (!CollectionUtils.isEmpty(storageBlobDTOs)) {
+            fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId(), storageBlobDTOs);
+        } else {
+            // 濡傛灉鍓嶇浼犵┖鏁扮粍锛屽垹闄ゆ棫闄勪欢
+            fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(
+                    ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, approvalTemplateDto.getId()
+            );
+        }
         return approvalTemplateNodeService.saveApprovalTemplateNode(
                 approvalTemplateDto.getId(),
                 approvalTemplateDto.getNodes()
@@ -90,6 +118,12 @@
     public Boolean delete(List<Long> ids) {
         if (ids == null || ids.isEmpty()) {
             return false;
+        }
+        // 妫�鏌ユā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+        for (Long id : ids) {
+            if (isTemplateReferenced(id)) {
+                throw new RuntimeException("瀹℃壒妯℃澘锛圛D: " + id + "锛夊凡琚鎵规祦绋嬪紩鐢紝鏃犳硶鍒犻櫎");
+            }
         }
         ApprovalTemplate updateEntity = new ApprovalTemplate();
         updateEntity.setDeleted(1);
@@ -107,7 +141,7 @@
                 new LambdaQueryWrapper<ApprovalTemplate>()
                         .eq(ApprovalTemplate::getDeleted, 0)
                         .eq(ApprovalTemplate::getEnabled, 1)
-                        .eq(type != null, ApprovalTemplate::getTemplateType, type)
+                        .notIn(ApprovalTemplate::getBusinessType, List.of(5L, 6L, 7L))
                         .orderByDesc(ApprovalTemplate::getTemplateType)
                         .orderByDesc(ApprovalTemplate::getId)
         );
@@ -221,6 +255,12 @@
                 .collect(Collectors.toList());
 
         templateVo.setNodes(nodeVos);
+        // 鏌ヨ闄勪欢
+        templateVo.setStorageBlobDTOs(
+                fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(
+                        ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_TEMPLATE, template.getId()
+                )
+        );
         return templateVo;
     }
 
@@ -248,4 +288,21 @@
         BeanUtils.copyProperties(approver, approverVo);
         return approverVo;
     }
+
+    /**
+     * 妫�鏌ュ鎵规ā鏉挎槸鍚﹁瀹℃壒瀹炰緥寮曠敤
+     * @param templateId 妯℃澘ID
+     * @return true 琛ㄧず琚紩鐢紝false 琛ㄧず鏈寮曠敤
+     */
+    private boolean isTemplateReferenced(Long templateId) {
+        if (templateId == null) {
+            return false;
+        }
+        Long count = approvalInstanceMapper.selectCount(
+                new LambdaQueryWrapper<ApprovalInstance>()
+                        .eq(ApprovalInstance::getTemplateId, templateId)
+                        .eq(ApprovalInstance::getDeleted, 0)
+        );
+        return count != null && count > 0;
+    }
 }

--
Gitblit v1.9.3