From 7e7fa6be4025aeeaf32e6606832180242f608360 Mon Sep 17 00:00:00 2001 From: dadiyang Date: Tue, 22 Sep 2026 00:53:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(fms)=EF=BC=9A=E6=8A=A5=E8=A1=A8=E5=8B=BE?= =?UTF-8?q?=E7=A8=BD=E9=80=90=E6=9C=88=E6=9F=A5=E6=8D=9F=E7=9B=8A=E6=94=B9?= =?UTF-8?q?=E7=9B=B4=E8=B0=83=20getProfitLossBalance=EF=BC=8C=E6=96=AD=20g?= =?UTF-8?q?etClosingOverview=E2=86=94checkBalanceSheet=20=E6=97=A0?= =?UTF-8?q?=E9=99=90=E9=80=92=E5=BD=92=E6=A0=88=E6=BA=A2=E5=87=BA=EF=BC=88?= =?UTF-8?q?A40=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/closing/FmsClosingPeriodService.java | 14 ++++++++++++++ .../closing/FmsClosingPeriodServiceImpl.java | 5 +++++ .../service/report/FmsBalanceSheetServiceImpl.java | 10 +++++----- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodService.java b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodService.java index b6bb20d6c0..e6de3781a2 100644 --- a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodService.java +++ b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.fms.service.closing; import cn.iocoder.yudao.module.fms.controller.admin.closing.vo.FmsClosingOverviewRespVO; import cn.iocoder.yudao.module.fms.controller.admin.closing.vo.FmsClosingQueryReqVO; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.YearMonth; @@ -57,6 +58,19 @@ public interface FmsClosingPeriodService { */ FmsClosingOverviewRespVO getClosingOverview(FmsClosingQueryReqVO queryReqVO, Long userId); + /** + * 获得指定会计期间的损益结转余额(末级损益科目本期借贷差额绝对值之和) + * + * 供报表勾稽逐月检查损益是否结转使用:直接查账簿余额, + * 不重入 getClosingOverview(后者内部会回调报表 check,构成无限递归)。 + * + * @param accountSetId 账套编号 + * @param month 会计期间 + * @param userId 用户编号 + * @return 损益余额 + */ + BigDecimal getProfitLossBalance(Long accountSetId, String month, Long userId); + /** * 结账 * diff --git a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodServiceImpl.java b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodServiceImpl.java index 207c9304b6..c058e22c40 100644 --- a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodServiceImpl.java +++ b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/closing/FmsClosingPeriodServiceImpl.java @@ -198,6 +198,11 @@ public class FmsClosingPeriodServiceImpl implements FmsClosingPeriodService { .setCanClose(canClose); } + @Override + public BigDecimal getProfitLossBalance(Long accountSetId, String month, Long userId) { + return calculateProfitLossBalance(accountSetId, LocalDateTimeUtils.parseYearMonth(month), userId); + } + @Override @Transactional(rollbackFor = Exception.class) @LogRecord(type = FMS_CLOSING_TYPE, subType = FMS_CLOSING_PERIOD_CLOSE_SUB_TYPE, diff --git a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/report/FmsBalanceSheetServiceImpl.java b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/report/FmsBalanceSheetServiceImpl.java index f7d912f265..0edf679d76 100644 --- a/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/report/FmsBalanceSheetServiceImpl.java +++ b/yudao-module-fms/src/main/java/cn/iocoder/yudao/module/fms/service/report/FmsBalanceSheetServiceImpl.java @@ -302,12 +302,12 @@ 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)) { - FmsClosingQueryReqVO closingQueryReqVO = new FmsClosingQueryReqVO(); - closingQueryReqVO.setAccountSetId(listReqVO.getAccountSetId()); - closingQueryReqVO.setMonth(currentMonth.toString()); - FmsClosingOverviewRespVO overview = closingPeriodService.getClosingOverview(closingQueryReqVO, userId); + // 直接查当月损益余额,不再重入 getClosingOverview + //(其内部会回调本类 checkBalanceSheet → 本方法,对同月构成无界自递归,栈溢出) + BigDecimal profitLossBalance = closingPeriodService.getProfitLossBalance( + listReqVO.getAccountSetId(), currentMonth.toString(), userId); // 当月损益余额不为零时,说明存在尚未结转的损益 - if (NumberUtils.zeroIfNull(overview.getProfitLossBalance()).signum() != 0) { + if (NumberUtils.zeroIfNull(profitLossBalance).signum() != 0) { return false; } }