From b0397843a801e61693139bcba48fcec0910e4e99 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 26 Sep 2026 12:12:34 +0800 Subject: [PATCH] fix(fms): 修复账套未初始化时科目操作异常,补全报表模板 --- yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImpl.java | 10 ++++++++++ yudao-module-fms/src/test/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImplTest.java | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 0 deletions(-) diff --git a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImpl.java b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImpl.java index ab2b68c..17bf3df 100644 --- a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImpl.java +++ b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImpl.java @@ -53,6 +53,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; +import static cn.iocoder.yudao.module.fms.enums.ErrorCodeConstants.ACCOUNT_SET_NOT_INITIALIZED; import static cn.iocoder.yudao.module.fms.enums.ErrorCodeConstants.SUBJECT_CODE_DUPLICATE; import static cn.iocoder.yudao.module.fms.enums.ErrorCodeConstants.SUBJECT_CODE_RULE_INVALID; import static cn.iocoder.yudao.module.fms.enums.ErrorCodeConstants.SUBJECT_CURRENCY_INVALID; @@ -161,6 +162,9 @@ public class FmsSubjectServiceImpl implements FmsSubjectService { accountSetService.validateAccountSetWritePermission(createReqVO.getAccountSetId(), userId); // 1.2 查询财务参数 FmsFinanceParameterDO financeParameter = financeParameterService.getFinanceParameter(createReqVO.getAccountSetId()); + if (financeParameter == null) { + throw exception(ACCOUNT_SET_NOT_INITIALIZED); + } // 1.3 校验科目编码唯一 validateSubjectCodeUnique(null, createReqVO.getAccountSetId(), createReqVO.getCode()); // 1.4 校验上级科目和科目编码规则 @@ -209,6 +213,9 @@ public class FmsSubjectServiceImpl implements FmsSubjectService { // 1.2 查询财务参数 FmsFinanceParameterDO financeParameter = financeParameterService.getFinanceParameter( updateReqVO.getAccountSetId()); + if (financeParameter == null) { + throw exception(ACCOUNT_SET_NOT_INITIALIZED); + } // 1.3 校验科目存在 FmsSubjectDO subject = validateSubjectExists(updateReqVO.getAccountSetId(), updateReqVO.getId()); if (ObjUtil.notEqual(subject.getParentId(), updateReqVO.getParentId())) { @@ -416,6 +423,9 @@ public class FmsSubjectServiceImpl implements FmsSubjectService { accountSetService.validateAccountSetWritePermission(accountSetId, userId); // 1.3 加载导入依赖 FmsFinanceParameterDO financeParameter = financeParameterService.getFinanceParameter(accountSetId); + if (financeParameter == null) { + throw exception(ACCOUNT_SET_NOT_INITIALIZED); + } Map subjectMap = convertMap( subjectMapper.selectListByAccountSetIdAndType(accountSetId, null), FmsSubjectDO::getCode); Map auxiliaryTypeIdMap = auxiliaryTypeService.getAuxiliaryTypeIdMap(accountSetId); diff --git a/yudao-module-fms/src/test/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImplTest.java b/yudao-module-fms/src/test/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImplTest.java index 410f0dc..44464ca 100644 --- a/yudao-module-fms/src/test/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImplTest.java +++ b/yudao-module-fms/src/test/java/cn/iocoder/yudao/module/fms/service/config/FmsSubjectServiceImplTest.java @@ -117,6 +117,41 @@ public class FmsSubjectServiceImplTest extends BaseDbUnitTest { } @Test + public void testCreateSubject_accountSetNotInitialized() { + // 准备参数 + FmsSubjectSaveReqVO reqVO = buildSubjectSaveReqVO(1L, "1001", "库存现金"); + + // 调用,并断言异常 + assertServiceException(() -> subjectService.createSubject(reqVO, 10L), ACCOUNT_SET_NOT_INITIALIZED); + // 断言未写入科目 + assertEquals(0, subjectMapper.selectCount()); + } + + @Test + public void testUpdateSubject_accountSetNotInitialized() { + // 准备参数 + FmsSubjectSaveReqVO reqVO = buildSubjectSaveReqVO(1L, "1001", "库存现金"); + reqVO.setId(1L); + + // 调用,并断言异常 + assertServiceException(() -> subjectService.updateSubject(reqVO, 10L), ACCOUNT_SET_NOT_INITIALIZED); + } + + @Test + public void testImportSubjectList_accountSetNotInitialized() { + // 准备参数 + FmsSubjectImportExcelVO importVO = new FmsSubjectImportExcelVO(); + importVO.setCode("1001"); + importVO.setName("库存现金"); + + // 调用,并断言异常 + assertServiceException(() -> subjectService.importSubjectList(1L, Collections.singletonList(importVO), 10L), + ACCOUNT_SET_NOT_INITIALIZED); + // 断言未写入科目 + assertEquals(0, subjectMapper.selectCount()); + } + + @Test public void testCreateSubject_success() { // 准备参数 Long accountSetId = 1L; -- libgit2 0.21.4