mirror of
https://gitee.com/yudaocode/yudao-boot-mini.git
synced 2026-10-06 14:13:14 +08:00
[FIX] FMS:报表校验逐月查损益改直调账簿余额,断 getClosingOverview↔checkBalanceSheet 无限递归(A40)- #1215
#1215
This commit is contained in:
-3
@@ -61,9 +61,6 @@ public interface FmsClosingPeriodService {
|
||||
/**
|
||||
* 获得指定会计期间的损益结转余额(末级损益科目本期借贷差额绝对值之和)
|
||||
*
|
||||
* 供报表勾稽逐月检查损益是否结转使用:直接查账簿余额,
|
||||
* 不重入 getClosingOverview(后者内部会回调报表 check,构成无限递归)。
|
||||
*
|
||||
* @param accountSetId 账套编号
|
||||
* @param month 会计期间
|
||||
* @param userId 用户编号
|
||||
|
||||
+2
-5
@@ -7,8 +7,6 @@ import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.closing.vo.FmsClosingOverviewRespVO;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.closing.vo.FmsClosingQueryReqVO;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.ledger.vo.subjectbalance.FmsLedgerSubjectBalanceRespVO;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.report.vo.balance.FmsBalanceSheetCheckRespVO;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.report.vo.balance.FmsBalanceSheetRowRespVO;
|
||||
@@ -292,7 +290,7 @@ public class FmsBalanceSheetServiceImpl implements FmsBalanceSheetService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断查询期间内各月的损益是否均已结转,逐月检查结账概览的损益余额
|
||||
* 判断查询期间内各月的损益是否均已结转
|
||||
*
|
||||
* @param listReqVO 查询条件
|
||||
* @param userId 用户编号
|
||||
@@ -302,8 +300,7 @@ public class FmsBalanceSheetServiceImpl implements FmsBalanceSheetService {
|
||||
YearMonth endMonth = LocalDateTimeUtils.parseYearMonth(listReqVO.getEndMonth());
|
||||
for (YearMonth currentMonth = LocalDateTimeUtils.parseYearMonth(listReqVO.getStartMonth());
|
||||
!currentMonth.isAfter(endMonth); currentMonth = currentMonth.plusMonths(1)) {
|
||||
// 直接查当月损益余额,不再重入 getClosingOverview
|
||||
//(其内部会回调本类 checkBalanceSheet → 本方法,对同月构成无界自递归,栈溢出)
|
||||
// 直接查询损益余额,避免报表校验与结账概况循环调用
|
||||
BigDecimal profitLossBalance = closingPeriodService.getProfitLossBalance(
|
||||
listReqVO.getAccountSetId(), currentMonth.toString(), userId);
|
||||
// 当月损益余额不为零时,说明存在尚未结转的损益
|
||||
|
||||
+6
-5
@@ -21,7 +21,6 @@ import cn.iocoder.yudao.module.fms.dal.mysql.report.balance.FmsBalanceSheetConfi
|
||||
import cn.iocoder.yudao.module.fms.dal.mysql.report.balance.FmsBalanceSheetReportMapper;
|
||||
import cn.iocoder.yudao.module.fms.enums.config.FmsSubjectTypeEnum;
|
||||
import cn.iocoder.yudao.module.fms.enums.report.FmsReportTypeEnum;
|
||||
import cn.iocoder.yudao.module.fms.controller.admin.closing.vo.FmsClosingOverviewRespVO;
|
||||
import cn.iocoder.yudao.module.fms.service.closing.FmsClosingPeriodService;
|
||||
import cn.iocoder.yudao.module.fms.service.closing.FmsClosingSchemeService;
|
||||
import cn.iocoder.yudao.module.fms.service.closing.FmsClosingVoucherService;
|
||||
@@ -46,6 +45,7 @@ import java.util.List;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -206,8 +206,8 @@ public class FmsBalanceSheetServiceImplTest extends BaseDbUnitTest {
|
||||
FmsTrialBalanceRespVO trialBalance = new FmsTrialBalanceRespVO();
|
||||
trialBalance.setBalanced(false);
|
||||
when(initialBalanceService.getTrialBalance(1L, 10L)).thenReturn(trialBalance);
|
||||
when(closingPeriodService.getClosingOverview(any(), eq(10L)))
|
||||
.thenReturn(new FmsClosingOverviewRespVO().setProfitLossBalance(new BigDecimal("20.00")));
|
||||
when(closingPeriodService.getProfitLossBalance(1L, "2026-08", 10L))
|
||||
.thenReturn(new BigDecimal("20.00"));
|
||||
|
||||
// 调用
|
||||
FmsBalanceSheetCheckRespVO result = balanceSheetService.checkBalanceSheet(buildQueryReqVO(), 10L);
|
||||
@@ -241,14 +241,15 @@ public class FmsBalanceSheetServiceImplTest extends BaseDbUnitTest {
|
||||
.setChildren(Collections.emptyList())));
|
||||
when(initialBalanceService.getTrialBalance(1L, 10L))
|
||||
.thenReturn(new FmsTrialBalanceRespVO().setBalanced(true));
|
||||
when(closingPeriodService.getClosingOverview(any(), eq(10L)))
|
||||
.thenReturn(new FmsClosingOverviewRespVO().setProfitLossBalance(BigDecimal.ZERO));
|
||||
when(closingPeriodService.getProfitLossBalance(1L, "2026-08", 10L))
|
||||
.thenReturn(BigDecimal.ZERO);
|
||||
|
||||
// 调用
|
||||
FmsBalanceSheetCheckRespVO result = balanceSheetService.checkBalanceSheet(buildQueryReqVO(), 10L);
|
||||
|
||||
// 断言
|
||||
assertEquals(0, result.getUnmappedSubjects().size());
|
||||
assertTrue(result.getProfitLossTransferred());
|
||||
}
|
||||
|
||||
// ========== 随机对象 ==========
|
||||
|
||||
Reference in New Issue
Block a user