From f87ce86307056f63f79312178037cc8714eb2b13 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 29 九月 2026 14:17:52 +0800
Subject: [PATCH] feat(docs): 添加档案管理模块业务流程文档
---
yudao-module-finance/src/main/java/cn/iocoder/yudao/module/finance/service/reimbursement/FinanceReimbursementServiceImpl.java | 63 ++++++++++++++++++++++++++++---
1 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/yudao-module-finance/src/main/java/cn/iocoder/yudao/module/finance/service/reimbursement/FinanceReimbursementServiceImpl.java b/yudao-module-finance/src/main/java/cn/iocoder/yudao/module/finance/service/reimbursement/FinanceReimbursementServiceImpl.java
index 82a4924..60e4b10 100644
--- a/yudao-module-finance/src/main/java/cn/iocoder/yudao/module/finance/service/reimbursement/FinanceReimbursementServiceImpl.java
+++ b/yudao-module-finance/src/main/java/cn/iocoder/yudao/module/finance/service/reimbursement/FinanceReimbursementServiceImpl.java
@@ -4,6 +4,9 @@
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.archive.api.document.ArchiveDocumentApi;
+import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentCreateReqDTO;
+import cn.iocoder.yudao.module.archive.api.document.dto.ArchiveDocumentRespDTO;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO;
@@ -20,6 +23,7 @@
import cn.iocoder.yudao.module.finance.dal.redis.FinanceNoRedisDAO;
import cn.iocoder.yudao.module.finance.enums.FinanceReimbursementStatusEnum;
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
+import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.repository.ProcessDefinition;
@@ -57,6 +61,15 @@
*/
public static final String REIMBURSEMENT_RECORD_TYPE = "finance_reimbursement";
+ /** 褰掓。鏉ユ簮绫诲瀷锛�4-璐㈠姟锛堝搴� archive 妯″潡 source_type锛� */
+ private static final Integer ARCHIVE_SOURCE_TYPE_FINANCE = 4;
+
+ /** 褰掓。瀵嗙骇锛�3-淇濆瘑锛堣储鍔℃。妗堥粯璁や繚瀵嗭級 */
+ private static final Integer ARCHIVE_SECRET_LEVEL_SECRET = 3;
+
+ /** 璐㈠姟妗f鍒嗙被缂栫爜锛堝搴� archive_category.code锛� */
+ private static final String ARCHIVE_CATEGORY_CODE_FINANCE = "finance";
+
@Resource
private FinanceReimbursementMapper reimbursementMapper;
@Resource
@@ -67,6 +80,9 @@
@Resource
private StorageAttachmentApi storageAttachmentApi;
+
+ @Resource
+ private ArchiveDocumentApi archiveDocumentApi;
@Resource
private BpmProcessInstanceApi processInstanceApi;
@@ -204,18 +220,44 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void archiveReimbursement(Long id) {
- // 1. 鏍¢獙瀛樺湪 + 宸查�氳繃鐘舵��
+ public String archiveReimbursement(Long id) {
+ // 1. 鏍¢獙瀛樺湪 + 鐘舵��
FinanceReimbursementDO reimbursement = validateReimbursementExists(id);
- if (!FinanceReimbursementStatusEnum.APPROVED.getStatus().equals(reimbursement.getStatus())) {
- throw exception(REIMBURSEMENT_ARCHIVE_FAIL_STATUS);
+ boolean archived = FinanceReimbursementStatusEnum.ARCHIVED.getStatus().equals(reimbursement.getStatus());
+ if (archived && reimbursement.getArchiveDocumentId() != null) {
+ throw exception(REIMBURSEMENT_ALREADY_ARCHIVED, reimbursement.getNo(),
+ StrUtil.blankToDefault(archiveNo(id), "鏈煡"));
+ }
+ if (!archived && !FinanceReimbursementStatusEnum.APPROVED.getStatus().equals(reimbursement.getStatus())) {
+ throw exception(REIMBURSEMENT_ARCHIVE_FAIL_STATUS, reimbursement.getNo(),
+ FinanceReimbursementStatusEnum.nameOf(reimbursement.getStatus()));
}
- // 2. 鏇存柊涓哄凡褰掓。
+ // 2. 鏇存柊涓哄凡褰掓。锛堝巻鍙插凡褰掓。浣嗗皻鏈敓鎴愭。妗堟潯鐩殑锛岃烦杩囩姸鎬佹洿鏂帮紝浠呰ˉ鐢熸垚妗f锛�
+ if (!archived) {
+ reimbursementMapper.updateById(new FinanceReimbursementDO()
+ .setId(id)
+ .setStatus(FinanceReimbursementStatusEnum.ARCHIVED.getStatus())
+ .setArchiveTime(LocalDateTime.now()));
+ }
+
+ // 3. 鎸夋潵婧愬崟鎹敓鎴愭。妗堟潯鐩紙璐㈠姟妗f榛樿銆屼繚瀵嗐�嶇骇锛夛紝骞跺洖鍐欐。妗� ID
+ List<Long> blobIds = storageAttachmentApi.listAttachments(REIMBURSEMENT_RECORD_TYPE, id).stream()
+ .map(StorageBlobRespDTO::getId).collect(Collectors.toList());
+ Long archiveDocumentId = archiveDocumentApi.archiveBySource(new ArchiveDocumentCreateReqDTO()
+ .setSourceType(ARCHIVE_SOURCE_TYPE_FINANCE)
+ .setSourceId(id)
+ .setSourceNo(reimbursement.getNo())
+ .setSourceTitle(reimbursement.getTitle())
+ .setCategoryCode(ARCHIVE_CATEGORY_CODE_FINANCE)
+ .setSecretLevel(ARCHIVE_SECRET_LEVEL_SECRET)
+ .setSummary("璐㈠姟鎶ラ攢鍑瘉褰掓。")
+ .setBlobIds(blobIds)).getCheckedData();
+
reimbursementMapper.updateById(new FinanceReimbursementDO()
.setId(id)
- .setStatus(FinanceReimbursementStatusEnum.ARCHIVED.getStatus())
- .setArchiveTime(LocalDateTime.now()));
+ .setArchiveDocumentId(archiveDocumentId));
+ return StrUtil.blankToDefault(archiveNo(id), "鏈煡");
}
@Override
@@ -283,6 +325,13 @@
return reimbursement;
}
+ /** 鏌ヨ鏉ユ簮鍗曟嵁宸茬敓鎴愮殑妗f缂栧彿锛堟湭褰掓。鏃惰繑鍥� null锛� */
+ private String archiveNo(Long reimbursementId) {
+ ArchiveDocumentRespDTO archive = archiveDocumentApi
+ .getBySource(ARCHIVE_SOURCE_TYPE_FINANCE, reimbursementId).getCheckedData();
+ return archive != null ? archive.getNo() : null;
+ }
+
/**
* 瑙f瀽鏂板鏃剁殑鎶ラ攢鍗曞彿锛氬幓鎺夐灏剧┖鏍煎悗鑻ヤ负绌猴紝鍒欑敱绯荤粺鎸� BX + 鏃ユ湡 + 6 浣嶆祦姘寸敓鎴愶紝
* 鍚﹀垯浣跨敤鐢ㄦ埛鑷畾涔夊崟鍙枫��
--
Gitblit v1.9.3