From 24984ff670fcce16322aa8c2460f93307ddc3f9a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 13 十月 2026 15:15:06 +0800
Subject: [PATCH] test(invoice): 优化开票编辑状态验证逻辑并添加测试
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java | 30 ++++++++++++++++++++++++------
1 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
index a59c979..e805567 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/invoice/CrmInvoiceServiceImpl.java
@@ -11,6 +11,7 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
+import cn.iocoder.yudao.framework.operatelog.core.util.OperateLogUtils;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.crm.controller.admin.invoice.vo.invoice.CrmInvoiceImportExcelVO;
@@ -131,12 +132,16 @@
@Override
@Transactional(rollbackFor = Exception.class)
+ @LogRecord(type = CRM_INVOICE_TYPE, subType = CRM_INVOICE_IMPORT_SUB_TYPE, bizNo = "0",
+ success = CRM_INVOICE_IMPORT_SUCCESS)
public CrmInvoiceImportRespVO importInvoiceList(List<CrmInvoiceImportExcelVO> importList) {
CrmInvoiceImportRespVO respVO = CrmInvoiceImportRespVO.builder()
.createList(new ArrayList<>())
.failureList(new LinkedHashMap<>())
.build();
if (CollUtil.isEmpty(importList)) {
+ // 绌烘枃浠朵篃瑕佺粰鏃ュ織鏂囨鍏滃簳锛岄伩鍏� {{#importSummary}} 鍙栦笉鍒板��
+ OperateLogUtils.putImportSummary(respVO.getCreateList(), null, respVO.getFailureList());
return respVO;
}
@@ -160,6 +165,8 @@
respVO.getFailureList().put(label, resolveImportErrorMessage(ex));
}
}
+ // 璁板綍瀵煎叆缁撴灉姹囨�伙紝渚� @LogRecord 鐨� success 鏂囨寮曠敤锛堝紑绁ㄥ鍏ユ棤銆屾洿鏂般�嶅垎鏀紝鏁呬紶 null锛�
+ OperateLogUtils.putImportSummary(respVO.getCreateList(), null, respVO.getFailureList());
return respVO;
}
@@ -395,14 +402,16 @@
CrmInvoiceDO oldInvoice = validateInvoiceExists(updateReqVO.getId());
updateReqVO.setOwnerUserId(oldInvoice.getOwnerUserId()).setCustomerId(oldInvoice.getCustomerId())
.setContractId(oldInvoice.getContractId()); // 璁剧疆宸插瓨鍦ㄧ殑鍊�
- // 1.2 鏍¢獙鍙紑绁ㄩ噾棰濊秴杩囦笂闄�
- validateInvoicePriceExceedsLimit(updateReqVO);
-
- // 1.3 鍙湁鑽夌銆佸鎵逛腑锛屽彲浠ョ紪杈戯紱
- if (!ObjectUtils.equalsAny(oldInvoice.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
+ // 1.2 鍏嶅鎵规椂涓嶉檺鍒剁紪杈戠姸鎬侊紱姝e父瀹℃壒浠呰崏绋裤�佸鎵逛腑鍙互缂栬緫銆�
+ if (!bpmProcessInstanceApi.isGlobalAutoApprove()
+ && !ObjectUtils.equalsAny(oldInvoice.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus(),
CrmAuditStatusEnum.PROCESS.getStatus())) {
- throw exception(INVOICE_UPDATE_FAIL_EDITING_PROHIBITED);
+ throw exception(INVOICE_UPDATE_FAIL_EDITING_PROHIBITED,
+ StrUtil.blankToDefault(CrmAuditStatusEnum.getNameByStatus(oldInvoice.getAuditStatus()), "鏈煡鐘舵��"));
}
+
+ // 1.3 鏍¢獙鍙紑绁ㄩ噾棰濊秴杩囦笂闄�
+ validateInvoicePriceExceedsLimit(updateReqVO);
// 2. 鏇存柊寮�绁�
CrmInvoiceDO updateObj = BeanUtils.toBean(updateReqVO, CrmInvoiceDO.class);
@@ -473,6 +482,15 @@
.setId(invoice.getId()).setContractId(invoice.getContractId()).setPrice(invoice.getPrice()));
// 2. 鍒涘缓寮�绁ㄥ鎵规祦绋嬪疄渚�
+ // 鍏ㄥ眬鍏嶅鎵癸細涓氬姟鏍¢獙閫氳繃鍚庣洿鎺ユ墽琛屽鎵归�氳繃閫昏緫锛屾棤闇�娴佺▼妯″瀷銆�
+ if (bpmProcessInstanceApi.isGlobalAutoApprove()) {
+ invoiceMapper.updateById(new CrmInvoiceDO().setId(id).setProcessInstanceId("")
+ .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus()));
+ updateInvoiceAuditStatus(id, cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.APPROVE.getStatus());
+ LogRecordContext.putVariable("invoiceNo", invoice.getNo());
+ return;
+ }
+
String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO()
.setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY).setBusinessKey(String.valueOf(id)));
--
Gitblit v1.9.3