|
@@ -3,8 +3,6 @@ package com.fjhx.form.service.impl;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.fjhx.common.constant.SourceConstant;
|
|
@@ -14,10 +12,10 @@ import com.fjhx.form.entity.RemitDetailSelectDto;
|
|
|
import com.fjhx.form.entity.RemitDetailVo;
|
|
|
import com.fjhx.form.entity.SubjectBalanceBo;
|
|
|
import com.fjhx.form.entity.SubjectBalanceSelectDto;
|
|
|
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
|
|
|
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
|
|
|
import com.fjhx.form.mapper.FinanceReportMapper;
|
|
|
import com.fjhx.form.service.FinanceReportService;
|
|
|
-import com.fjhx.form.service.account.AccountSubjectsBalanceService;
|
|
|
+import com.fjhx.form.service.calculate.CalculateItemBalanceService;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.ruoyi.common.utils.wrapper.SqlField;
|
|
@@ -36,7 +34,7 @@ public class FinanceReportServiceImpl implements FinanceReportService {
|
|
|
@Resource
|
|
|
private FinanceReportMapper financeReportMapper;
|
|
|
@Resource
|
|
|
- private AccountSubjectsBalanceService accountSubjectsBalanceService;
|
|
|
+ private CalculateItemBalanceService calculateItemBalanceService;
|
|
|
|
|
|
@Override
|
|
|
public List<SubjectBalanceBo> subjectBalance(SubjectBalanceSelectDto dto) {
|
|
@@ -52,8 +50,10 @@ public class FinanceReportServiceImpl implements FinanceReportService {
|
|
|
);
|
|
|
|
|
|
|
|
|
- Map<Long, AccountSubjectsBalance> subjectsBalanceMap = accountSubjectsBalanceService.mapKEntity(AccountSubjectsBalance::getSubjectsId, q -> q
|
|
|
- .apply("YEAR(account_date) = {0} AND MONTH(account_date) = 12", dto.getYear() - 1)
|
|
|
+ Map<String, BigDecimal> subjectsBalanceMap = calculateItemBalanceService.mapKV(
|
|
|
+ CalculateItemBalance::getIdStr,
|
|
|
+ CalculateItemBalance::getBalanceAmount,
|
|
|
+ q -> q.eq(CalculateItemBalance::getYear, dto.getYear() - 1)
|
|
|
);
|
|
|
|
|
|
|
|
@@ -62,31 +62,49 @@ public class FinanceReportServiceImpl implements FinanceReportService {
|
|
|
|
|
|
List<SubjectBalanceBo> subjectBalanceBos = financeReportMapper.subjectBalance(wrapper, dto);
|
|
|
for (SubjectBalanceBo subjectBalanceBo : subjectBalanceBos) {
|
|
|
+ BigDecimal month1Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth1Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month2Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth2Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month3Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth3Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month4Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth4Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month5Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth5Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month6Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth6Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month7Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth7Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month8Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth8Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month9Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth9Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month10Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth10Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month11Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth11Amount(), BigDecimal.ZERO);
|
|
|
+ BigDecimal month12Amount = ObjectUtil.defaultIfNull(subjectBalanceBo.getMonth12Amount(), BigDecimal.ZERO);
|
|
|
|
|
|
//获取期出余额
|
|
|
- BigDecimal yearBeginBalance = BigDecimal.ZERO;
|
|
|
- AccountSubjectsBalance accountSubjectsBalance = subjectsBalanceMap.get(subjectBalanceBo.getSubjectsId());
|
|
|
- if (accountSubjectsBalance != null) {
|
|
|
- yearBeginBalance = accountSubjectsBalance.getBalance();
|
|
|
- }
|
|
|
+ BigDecimal yearBeginBalance = ObjectUtil.defaultIfNull(subjectsBalanceMap.get(subjectBalanceBo.getSubjectsId()), BigDecimal.ZERO);
|
|
|
+
|
|
|
subjectBalanceBo.setYearBeginBalance(yearBeginBalance);
|
|
|
- //余额 = 年初余额 + 本期发生额
|
|
|
- subjectBalanceBo.setBalanceAmount(yearBeginBalance.add(subjectBalanceBo.getTradeAmount()));
|
|
|
+ //余额 = 年初余额 + (-年初借方) + 1-12月 + 本期发生
|
|
|
+ //1-12月合计
|
|
|
+ BigDecimal janToDecSum = month1Amount.add(month2Amount).add(month3Amount).add(month4Amount)
|
|
|
+ .add(month5Amount).add(month6Amount).add(month7Amount).add(month8Amount)
|
|
|
+ .add(month9Amount).add(month10Amount).add(month11Amount).add(month12Amount);
|
|
|
+ //年初借方
|
|
|
+ BigDecimal yearBeginBorrowAmount = ObjectUtil.defaultIfNull(subjectBalanceBo.getYearBeginBorrowAmount(), BigDecimal.ZERO);
|
|
|
+ //计算余额
|
|
|
+ BigDecimal balanceAmount = yearBeginBalance.subtract(yearBeginBorrowAmount).add(janToDecSum).add(subjectBalanceBo.getTradeAmount());
|
|
|
+ subjectBalanceBo.setBalanceAmount(balanceAmount);
|
|
|
|
|
|
totalBo.setSubjectsName("合计");
|
|
|
totalBo.setYearBeginBalance(ObjectUtil.defaultIfNull(totalBo.getYearBeginBalance(), BigDecimal.ZERO).add(subjectBalanceBo.getYearBeginBalance()));
|
|
|
- totalBo.setMonth1Amount(ObjectUtil.defaultIfNull(totalBo.getMonth1Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth1Amount()));
|
|
|
- totalBo.setMonth2Amount(ObjectUtil.defaultIfNull(totalBo.getMonth2Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth2Amount()));
|
|
|
- totalBo.setMonth3Amount(ObjectUtil.defaultIfNull(totalBo.getMonth3Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth3Amount()));
|
|
|
- totalBo.setMonth4Amount(ObjectUtil.defaultIfNull(totalBo.getMonth4Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth4Amount()));
|
|
|
- totalBo.setMonth5Amount(ObjectUtil.defaultIfNull(totalBo.getMonth5Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth5Amount()));
|
|
|
- totalBo.setMonth6Amount(ObjectUtil.defaultIfNull(totalBo.getMonth6Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth6Amount()));
|
|
|
- totalBo.setMonth7Amount(ObjectUtil.defaultIfNull(totalBo.getMonth7Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth7Amount()));
|
|
|
- totalBo.setMonth8Amount(ObjectUtil.defaultIfNull(totalBo.getMonth8Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth8Amount()));
|
|
|
- totalBo.setMonth9Amount(ObjectUtil.defaultIfNull(totalBo.getMonth9Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth9Amount()));
|
|
|
- totalBo.setMonth10Amount(ObjectUtil.defaultIfNull(totalBo.getMonth10Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth10Amount()));
|
|
|
- totalBo.setMonth11Amount(ObjectUtil.defaultIfNull(totalBo.getMonth11Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth11Amount()));
|
|
|
- totalBo.setMonth12Amount(ObjectUtil.defaultIfNull(totalBo.getMonth12Amount(), BigDecimal.ZERO).add(subjectBalanceBo.getMonth12Amount()));
|
|
|
+ totalBo.setYearBeginBorrowAmount(ObjectUtil.defaultIfNull(totalBo.getYearBeginBorrowAmount(), BigDecimal.ZERO).add(ObjectUtil.defaultIfNull(subjectBalanceBo.getYearBeginBorrowAmount(), BigDecimal.ZERO)));
|
|
|
+ totalBo.setMonth1Amount(ObjectUtil.defaultIfNull(totalBo.getMonth1Amount(), BigDecimal.ZERO).add(month1Amount));
|
|
|
+ totalBo.setMonth2Amount(ObjectUtil.defaultIfNull(totalBo.getMonth2Amount(), BigDecimal.ZERO).add(month2Amount));
|
|
|
+ totalBo.setMonth3Amount(ObjectUtil.defaultIfNull(totalBo.getMonth3Amount(), BigDecimal.ZERO).add(month3Amount));
|
|
|
+ totalBo.setMonth4Amount(ObjectUtil.defaultIfNull(totalBo.getMonth4Amount(), BigDecimal.ZERO).add(month4Amount));
|
|
|
+ totalBo.setMonth5Amount(ObjectUtil.defaultIfNull(totalBo.getMonth5Amount(), BigDecimal.ZERO).add(month5Amount));
|
|
|
+ totalBo.setMonth6Amount(ObjectUtil.defaultIfNull(totalBo.getMonth6Amount(), BigDecimal.ZERO).add(month6Amount));
|
|
|
+ totalBo.setMonth7Amount(ObjectUtil.defaultIfNull(totalBo.getMonth7Amount(), BigDecimal.ZERO).add(month7Amount));
|
|
|
+ totalBo.setMonth8Amount(ObjectUtil.defaultIfNull(totalBo.getMonth8Amount(), BigDecimal.ZERO).add(month8Amount));
|
|
|
+ totalBo.setMonth9Amount(ObjectUtil.defaultIfNull(totalBo.getMonth9Amount(), BigDecimal.ZERO).add(month9Amount));
|
|
|
+ totalBo.setMonth10Amount(ObjectUtil.defaultIfNull(totalBo.getMonth10Amount(), BigDecimal.ZERO).add(month10Amount));
|
|
|
+ totalBo.setMonth11Amount(ObjectUtil.defaultIfNull(totalBo.getMonth11Amount(), BigDecimal.ZERO).add(month11Amount));
|
|
|
+ totalBo.setMonth12Amount(ObjectUtil.defaultIfNull(totalBo.getMonth12Amount(), BigDecimal.ZERO).add(month12Amount));
|
|
|
totalBo.setTradeAmount(ObjectUtil.defaultIfNull(totalBo.getTradeAmount(), BigDecimal.ZERO).add(subjectBalanceBo.getTradeAmount()));
|
|
|
totalBo.setBalanceAmount(ObjectUtil.defaultIfNull(totalBo.getBalanceAmount(), BigDecimal.ZERO).add(subjectBalanceBo.getBalanceAmount()));
|
|
|
}
|
|
@@ -107,30 +125,26 @@ public class FinanceReportServiceImpl implements FinanceReportService {
|
|
|
|
|
|
DateTime lastMonth = DateUtil.offsetMonth(new Date(), -1);
|
|
|
|
|
|
-
|
|
|
SubjectBalanceSelectDto dto = new SubjectBalanceSelectDto();
|
|
|
dto.setYear(DateUtil.year(lastMonth));
|
|
|
List<SubjectBalanceBo> subjectBalanceBos = subjectBalance(dto);
|
|
|
|
|
|
+ //每过一个月保存一次余额
|
|
|
for (SubjectBalanceBo receivableAccount : subjectBalanceBos) {
|
|
|
- Long subjectsId = receivableAccount.getSubjectsId();
|
|
|
- int month = DateUtil.month(lastMonth) + 1;
|
|
|
-
|
|
|
-
|
|
|
- DateTime parse = DateUtil.parse(StrUtil.format("{}-{}", dto.getYear(), month), "yyyy-MM");
|
|
|
- AccountSubjectsBalance one = accountSubjectsBalanceService.getOne(q -> q
|
|
|
- .eq(AccountSubjectsBalance::getSubjectsId, subjectsId)
|
|
|
- .eq(AccountSubjectsBalance::getAccountDate, parse)
|
|
|
+ //获取上一月数据
|
|
|
+ CalculateItemBalance lastCalculateItemBalance = calculateItemBalanceService.getOne(q -> q
|
|
|
+ .eq(CalculateItemBalance::getYear, dto.getYear())
|
|
|
+ .eq(CalculateItemBalance::getIdStr, receivableAccount.getSubjectsCalculateItemIds())
|
|
|
);
|
|
|
- if (ObjectUtil.isEmpty(one)) {
|
|
|
- one = new AccountSubjectsBalance();
|
|
|
- one.setSubjectsId(subjectsId);
|
|
|
- one.setAccountDate(parse);
|
|
|
+ if (ObjectUtil.isEmpty(lastCalculateItemBalance)) {
|
|
|
+ lastCalculateItemBalance = new CalculateItemBalance();
|
|
|
+ lastCalculateItemBalance.setYear(dto.getYear());
|
|
|
+ lastCalculateItemBalance.setIdStr(receivableAccount.getSubjectsCalculateItemIds());
|
|
|
}
|
|
|
|
|
|
- JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(receivableAccount));
|
|
|
- one.setBalance(json.getBigDecimal("month" + month + "Amount"));
|
|
|
- accountSubjectsBalanceService.saveOrUpdate(one);
|
|
|
+ //保存余额
|
|
|
+ lastCalculateItemBalance.setBalanceAmount(receivableAccount.getBalanceAmount());
|
|
|
+ calculateItemBalanceService.saveOrUpdate(lastCalculateItemBalance);
|
|
|
}
|
|
|
|
|
|
SecurityUtils.clearTenantId();
|