From dd69bfc1fb8e5e28dde754fab7f23bfb1a18faa5 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 05 六月 2026 16:58:07 +0800
Subject: [PATCH] config(dev): 更新开发环境配置和文件上传功能 - 调整文件上传路径配置 - 修复OA环境文件链接前缀配置 - 在审批实例服务中添加报销相关数据删除逻辑 - 实现申请人姓名自动填充功能 - 添加文件下载预览路由的正则表达式支持 - 为企业新闻VO添加附件列表兼容别名 - 完善员工入职服务的异常处理 - 新增账户附件管理控制器 - 实现文件上传接口并返回完整文件信息

---
 src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java |   46 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
index 3e710a8..0d9b5b4 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApprovalInstanceServiceImpl.java
@@ -11,7 +11,9 @@
 import com.ruoyi.approve.bean.vo.ApprovalInstanceVo;
 import com.ruoyi.approve.mapper.ApprovalInstanceMapper;
 import com.ruoyi.approve.mapper.ApprovalTemplateNodeApproverMapper;
+import com.ruoyi.approve.mapper.FinReimbursementDetailMapper;
 import com.ruoyi.approve.mapper.FinReimbursementMapper;
+import com.ruoyi.approve.mapper.FinReimbursementTravelMapper;
 import com.ruoyi.approve.pojo.*;
 import com.ruoyi.approve.service.*;
 import com.ruoyi.approve.utils.ApproveProcessConfigNodeUtils;
@@ -25,6 +27,7 @@
 import com.ruoyi.collaborativeApproval.pojo.EnterpriseNewsScopeDept;
 import com.ruoyi.collaborativeApproval.pojo.EnterpriseNewsScopeUser;
 import com.ruoyi.common.enums.*;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.security.LoginUser;
@@ -93,6 +96,8 @@
     private final EnterpriseNewsMapper enterpriseNewsMapper;
     private final EnterpriseNewsScopeDeptMapper enterpriseNewsScopeDeptMapper;
     private final ApprovalTemplateNodeApproverMapper approvalTemplateNodeApproverMapper;
+    private final FinReimbursementDetailMapper finReimbursementDetailMapper;
+    private final FinReimbursementTravelMapper finReimbursementTravelMapper;
 
     @Override
     public R listPage(Page<ApprovalInstanceVo> page, ApprovalInstanceDto approvalInstanceDto) {
@@ -143,6 +148,13 @@
         approvalInstanceDto.setInstanceNo(instanceNo);
         approvalInstanceDto.setStatus("PENDING");
         approvalInstanceDto.setCurrentLevel(1);
+        // 濡傛灉鍓嶇浼犱簡 applicantId 浣嗘病浼� applicantName锛屽垯浠庣敤鎴疯〃鏌ヨ濮撳悕
+        if (approvalInstanceDto.getApplicantId() != null && !StringUtils.hasText(approvalInstanceDto.getApplicantName())) {
+            SysUser applicantUser = sysUserMapper.selectUserById(approvalInstanceDto.getApplicantId());
+            if (applicantUser != null) {
+                approvalInstanceDto.setApplicantName(applicantUser.getNickName());
+            }
+        }
         boolean saved = this.save(approvalInstanceDto);
         if (!saved) {
             return false;
@@ -159,6 +171,16 @@
         if (approvalInstanceDto == null || approvalInstanceDto.getId() == null) {
             return false;
         }
+        // 鍒ゆ柇鏄惁鏈夋鍦ㄨ繘琛岀殑瀹℃壒浠诲姟锛屾湁鍒欎笉鍏佽淇敼
+        long pendingTaskCount = approvalTaskService.count(
+                Wrappers.<ApprovalTask>lambdaQuery()
+                        .eq(ApprovalTask::getInstanceId, approvalInstanceDto.getId())
+                        .eq(ApprovalTask::getTaskStatus, "PENDING")
+                        .eq(ApprovalTask::getDeleted, 0)
+        );
+        if (pendingTaskCount > 0) {
+            throw new ServiceException("璇ュ鎵瑰崟鏈夋鍦ㄨ繘琛岀殑瀹℃壒浠诲姟锛屼笉鍏佽淇敼");
+        }
         boolean updated = this.updateById(approvalInstanceDto);
         if (!updated) {
             return false;
@@ -173,6 +195,26 @@
         if (ids == null || ids.isEmpty()) {
             return false;
         }
+
+        // 鍒犻櫎鍏宠仈鐨勪笟鍔℃暟鎹紙鎶ラ攢鍗曠瓑锛�
+        List<Long> reimbursementIds = new ArrayList<>();
+        List<ApprovalInstance> instances = approvalInstanceMapper.selectBatchIds(ids);
+        for (ApprovalInstance instance : instances) {
+            if (instance.getBusinessId() != null && instance.getBusinessType() != null) {
+                Long businessType = instance.getBusinessType();
+                if (TypeEnums.TRAVEL_REIMBURSEMENT_APPROVAL.getCode().equals(businessType)
+                        || TypeEnums.EXPENSE_APPROVAL.getCode().equals(businessType)) {
+                    reimbursementIds.add(instance.getBusinessId());
+                }
+            }
+        }
+        if (!reimbursementIds.isEmpty()) {
+            fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.FILE, RecordTypeEnum.FIN_REIMBURSEMENT, reimbursementIds);
+            finReimbursementDetailMapper.delete(Wrappers.<FinReimbursementDetail>lambdaQuery().in(FinReimbursementDetail::getReimbursementId, reimbursementIds));
+            finReimbursementTravelMapper.delete(Wrappers.<FinReimbursementTravel>lambdaQuery().in(FinReimbursementTravel::getReimbursementId, reimbursementIds));
+            finReimbursementMapper.delete(Wrappers.<FinReimbursement>lambdaQuery().in(FinReimbursement::getId, reimbursementIds));
+        }
+
         fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.FILE, RecordTypeEnum.APPROVAL_INSTANCE, ids);
 
         int instanceRows = approvalInstanceMapper.update(
@@ -629,7 +671,7 @@
 
         String title = StringUtils.hasText(instance.getTemplateName()) ? instance.getTemplateName() : "瀹℃壒鎻愰啋";
         String message = "瀹℃壒鍗曞彿 " + instance.getInstanceNo() + " 闇�瑕佹偍瀹℃壒";
-        String jumpPath = "/approvalInstance?id=" + instance.getId();
+        String jumpPath = "/officeProcessAutomation/ApproveManage/approve-list?id=" + instance.getId();
         sysNoticeService.simpleNoticeByUser(title, message, approverIds, jumpPath);
     }
 
@@ -644,7 +686,7 @@
         }
         String title = "浼佷笟鏂伴椈";
         String message = "鎮ㄦ湁鏂扮殑浼佷笟鏂伴椈銆�" + enterpriseNews.getTitle() + "銆嬭鍙婃椂鏌ラ槄";
-        String jumpPath = "/enterpriseNews?id=" + newsId;
+        String jumpPath = "/officeProcessAutomation/EnterpriseNews?id=" + newsId;
         sysNoticeService.simpleNoticeByUser(title, message, userIds, jumpPath);
     }
 

--
Gitblit v1.9.3