ソースを参照

科目余额报表修改,添加数据输入

yzc 11 ヶ月 前
コミット
e24a604034
20 ファイル変更333 行追加230 行削除
  1. 0 20
      hx-form/src/main/java/com/fjhx/form/controller/account/AccountSubjectsBalanceController.java
  2. 35 0
      hx-form/src/main/java/com/fjhx/form/controller/calculate/CalculateItemBalanceController.java
  3. 9 0
      hx-form/src/main/java/com/fjhx/form/entity/SubjectBalanceBo.java
  4. 0 17
      hx-form/src/main/java/com/fjhx/form/entity/account/dto/AccountSubjectsBalanceDto.java
  5. 0 17
      hx-form/src/main/java/com/fjhx/form/entity/account/dto/AccountSubjectsBalanceSelectDto.java
  6. 0 39
      hx-form/src/main/java/com/fjhx/form/entity/account/po/AccountSubjectsBalance.java
  7. 0 17
      hx-form/src/main/java/com/fjhx/form/entity/account/vo/AccountSubjectsBalanceVo.java
  8. 17 0
      hx-form/src/main/java/com/fjhx/form/entity/calculate/dto/CalculateItemBalanceDto.java
  9. 17 0
      hx-form/src/main/java/com/fjhx/form/entity/calculate/dto/CalculateItemBalanceSelectDto.java
  10. 58 0
      hx-form/src/main/java/com/fjhx/form/entity/calculate/po/CalculateItemBalance.java
  11. 17 0
      hx-form/src/main/java/com/fjhx/form/entity/calculate/vo/CalculateItemBalanceVo.java
  12. 0 17
      hx-form/src/main/java/com/fjhx/form/mapper/account/AccountSubjectsBalanceMapper.java
  13. 17 0
      hx-form/src/main/java/com/fjhx/form/mapper/calculate/CalculateItemBalanceMapper.java
  14. 0 17
      hx-form/src/main/java/com/fjhx/form/service/account/AccountSubjectsBalanceService.java
  15. 0 21
      hx-form/src/main/java/com/fjhx/form/service/account/impl/AccountSubjectsBalanceServiceImpl.java
  16. 23 0
      hx-form/src/main/java/com/fjhx/form/service/calculate/CalculateItemBalanceService.java
  17. 43 0
      hx-form/src/main/java/com/fjhx/form/service/calculate/impl/CalculateItemBalanceServiceImpl.java
  18. 56 42
      hx-form/src/main/java/com/fjhx/form/service/impl/FinanceReportServiceImpl.java
  19. 40 22
      hx-form/src/main/resources/mapper/FinanceReportMapper.xml
  20. 1 1
      hx-form/src/main/resources/mapper/calculate/CalculateItemBalanceMapper.xml

+ 0 - 20
hx-form/src/main/java/com/fjhx/form/controller/account/AccountSubjectsBalanceController.java

@@ -1,20 +0,0 @@
-package com.fjhx.form.controller.account;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-
-/**
- * <p>
- * 科目余额表 前端控制器
- * </p>
- *
- * @author
- * @since 2024-05-13
- */
-@RestController
-@RequestMapping("/accountSubjectsBalance")
-public class AccountSubjectsBalanceController {
-
-
-}

+ 35 - 0
hx-form/src/main/java/com/fjhx/form/controller/calculate/CalculateItemBalanceController.java

@@ -0,0 +1,35 @@
+package com.fjhx.form.controller.calculate;
+
+import com.fjhx.form.entity.calculate.dto.CalculateItemBalanceDto;
+import com.fjhx.form.service.calculate.CalculateItemBalanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 核算项目余额表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@RestController
+@RequestMapping("/calculateItemBalance")
+public class CalculateItemBalanceController {
+
+    @Autowired
+    private CalculateItemBalanceService calculateItemBalanceService;
+
+    /**
+     * 核算项目余额表编辑
+     */
+    @PostMapping("/editOrSave")
+    public void edit(@RequestBody CalculateItemBalanceDto calculateItemBalanceDto) {
+        calculateItemBalanceService.edit(calculateItemBalanceDto);
+    }
+
+}

+ 9 - 0
hx-form/src/main/java/com/fjhx/form/entity/SubjectBalanceBo.java

@@ -9,6 +9,10 @@ import java.math.BigDecimal;
 @Setter
 public class SubjectBalanceBo {
     private Long id;
+    /**
+     * 科目id+核算项目id 逗号分隔
+     */
+    private String subjectsCalculateItemIds;
     private Long subjectsId;
     private String subjectsCode;
     private String subjectsName;
@@ -29,4 +33,9 @@ public class SubjectBalanceBo {
 
     private BigDecimal yearBeginBalance;
     private BigDecimal balanceAmount;
+
+    /**
+     * 年初余额 手动输入
+     */
+    private BigDecimal yearBeginBorrowAmount;
 }

+ 0 - 17
hx-form/src/main/java/com/fjhx/form/entity/account/dto/AccountSubjectsBalanceDto.java

@@ -1,17 +0,0 @@
-package com.fjhx.form.entity.account.dto;
-
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 科目余额表新增编辑入参实体
- *
- * @author
- * @since 2024-05-13
- */
-@Getter
-@Setter
-public class AccountSubjectsBalanceDto extends AccountSubjectsBalance {
-
-}

+ 0 - 17
hx-form/src/main/java/com/fjhx/form/entity/account/dto/AccountSubjectsBalanceSelectDto.java

@@ -1,17 +0,0 @@
-package com.fjhx.form.entity.account.dto;
-
-import com.ruoyi.common.core.domain.BaseSelectDto;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 科目余额表列表查询入参实体
- *
- * @author
- * @since 2024-05-13
- */
-@Getter
-@Setter
-public class AccountSubjectsBalanceSelectDto extends BaseSelectDto {
-
-}

+ 0 - 39
hx-form/src/main/java/com/fjhx/form/entity/account/po/AccountSubjectsBalance.java

@@ -1,39 +0,0 @@
-package com.fjhx.form.entity.account.po;
-
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.ruoyi.common.core.domain.BasePo;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * <p>
- * 科目余额表
- * </p>
- *
- * @author
- * @since 2024-05-13
- */
-@Getter
-@Setter
-@TableName("account_subjects_balance")
-public class AccountSubjectsBalance extends BasePo {
-
-    /**
-     * 科目id
-     */
-    private Long subjectsId;
-
-    /**
-     * 日期-yyyy-MM
-     */
-    private Date accountDate;
-
-    /**
-     * 月余额
-     */
-    private BigDecimal balance;
-
-}

+ 0 - 17
hx-form/src/main/java/com/fjhx/form/entity/account/vo/AccountSubjectsBalanceVo.java

@@ -1,17 +0,0 @@
-package com.fjhx.form.entity.account.vo;
-
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * 科目余额表列表查询返回值实体
- *
- * @author
- * @since 2024-05-13
- */
-@Getter
-@Setter
-public class AccountSubjectsBalanceVo extends AccountSubjectsBalance {
-
-}

+ 17 - 0
hx-form/src/main/java/com/fjhx/form/entity/calculate/dto/CalculateItemBalanceDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.form.entity.calculate.dto;
+
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 核算项目余额表新增编辑入参实体
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@Getter
+@Setter
+public class CalculateItemBalanceDto extends CalculateItemBalance {
+
+}

+ 17 - 0
hx-form/src/main/java/com/fjhx/form/entity/calculate/dto/CalculateItemBalanceSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.form.entity.calculate.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 核算项目余额表列表查询入参实体
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@Getter
+@Setter
+public class CalculateItemBalanceSelectDto extends BaseSelectDto {
+
+}

+ 58 - 0
hx-form/src/main/java/com/fjhx/form/entity/calculate/po/CalculateItemBalance.java

@@ -0,0 +1,58 @@
+package com.fjhx.form.entity.calculate.po;
+
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 核算项目余额表
+ * </p>
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@Getter
+@Setter
+@TableName("calculate_item_balance")
+public class CalculateItemBalance extends BaseIdPo {
+
+    private String idStr;
+
+    private Integer year;
+
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal yearBeginBorrowAmount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month1Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month2Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month3Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month4Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month5Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month6Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month7Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month8Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month9Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month10Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month11Amount;
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private BigDecimal month12Amount;
+
+    private BigDecimal balanceAmount;
+
+}

+ 17 - 0
hx-form/src/main/java/com/fjhx/form/entity/calculate/vo/CalculateItemBalanceVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.form.entity.calculate.vo;
+
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 核算项目余额表列表查询返回值实体
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@Getter
+@Setter
+public class CalculateItemBalanceVo extends CalculateItemBalance {
+
+}

+ 0 - 17
hx-form/src/main/java/com/fjhx/form/mapper/account/AccountSubjectsBalanceMapper.java

@@ -1,17 +0,0 @@
-package com.fjhx.form.mapper.account;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
-
-
-/**
- * <p>
- * 科目余额表 Mapper 接口
- * </p>
- *
- * @author
- * @since 2024-05-13
- */
-public interface AccountSubjectsBalanceMapper extends BaseMapper<AccountSubjectsBalance> {
-
-}

+ 17 - 0
hx-form/src/main/java/com/fjhx/form/mapper/calculate/CalculateItemBalanceMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.form.mapper.calculate;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
+
+
+/**
+ * <p>
+ * 核算项目余额表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-05-20
+ */
+public interface CalculateItemBalanceMapper extends BaseMapper<CalculateItemBalance> {
+
+}

+ 0 - 17
hx-form/src/main/java/com/fjhx/form/service/account/AccountSubjectsBalanceService.java

@@ -1,17 +0,0 @@
-package com.fjhx.form.service.account;
-
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
-import com.ruoyi.common.core.service.BaseService;
-
-
-/**
- * <p>
- * 科目余额表 服务类
- * </p>
- *
- * @author
- * @since 2024-05-13
- */
-public interface AccountSubjectsBalanceService extends BaseService<AccountSubjectsBalance> {
-
-}

+ 0 - 21
hx-form/src/main/java/com/fjhx/form/service/account/impl/AccountSubjectsBalanceServiceImpl.java

@@ -1,21 +0,0 @@
-package com.fjhx.form.service.account.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fjhx.form.entity.account.po.AccountSubjectsBalance;
-import com.fjhx.form.mapper.account.AccountSubjectsBalanceMapper;
-import com.fjhx.form.service.account.AccountSubjectsBalanceService;
-import org.springframework.stereotype.Service;
-
-
-/**
- * <p>
- * 科目余额表 服务实现类
- * </p>
- *
- * @author
- * @since 2024-05-13
- */
-@Service
-public class AccountSubjectsBalanceServiceImpl extends ServiceImpl<AccountSubjectsBalanceMapper, AccountSubjectsBalance> implements AccountSubjectsBalanceService {
-
-}

+ 23 - 0
hx-form/src/main/java/com/fjhx/form/service/calculate/CalculateItemBalanceService.java

@@ -0,0 +1,23 @@
+package com.fjhx.form.service.calculate;
+
+import com.fjhx.form.entity.calculate.dto.CalculateItemBalanceDto;
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 核算项目余额表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-05-20
+ */
+public interface CalculateItemBalanceService extends BaseService<CalculateItemBalance> {
+
+    /**
+     * 核算项目余额表编辑
+     */
+    void edit(CalculateItemBalanceDto calculateItemBalanceDto);
+
+}

+ 43 - 0
hx-form/src/main/java/com/fjhx/form/service/calculate/impl/CalculateItemBalanceServiceImpl.java

@@ -0,0 +1,43 @@
+package com.fjhx.form.service.calculate.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.form.entity.calculate.dto.CalculateItemBalanceDto;
+import com.fjhx.form.entity.calculate.po.CalculateItemBalance;
+import com.fjhx.form.mapper.calculate.CalculateItemBalanceMapper;
+import com.fjhx.form.service.calculate.CalculateItemBalanceService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 核算项目余额表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-05-20
+ */
+@Service
+public class CalculateItemBalanceServiceImpl extends ServiceImpl<CalculateItemBalanceMapper, CalculateItemBalance> implements CalculateItemBalanceService {
+
+    @DSTransactional
+    @Override
+    public void edit(CalculateItemBalanceDto dto) {
+        String idStr = dto.getIdStr();
+        Integer year = dto.getYear();
+
+        Assert.notEmpty(dto.getYear(), "年份不能为空");
+        Assert.notEmpty(dto.getIdStr(), "strId不能为空");
+
+        //简称数据是否存在
+        CalculateItemBalance dataBaseData = this.getOne(q -> q.eq(CalculateItemBalance::getYear, year).eq(CalculateItemBalance::getIdStr, idStr));
+        if (ObjectUtil.isNotEmpty(dataBaseData)) {
+            dto.setId(dataBaseData.getId());
+        }
+
+        this.saveOrUpdate(dto);
+    }
+
+}

+ 56 - 42
hx-form/src/main/java/com/fjhx/form/service/impl/FinanceReportServiceImpl.java

@@ -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();

+ 40 - 22
hx-form/src/main/resources/mapper/FinanceReportMapper.xml

@@ -2,43 +2,61 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.form.mapper.FinanceReportMapper">
     <select id="subjectBalance" resultType="com.fjhx.form.entity.SubjectBalanceBo">
-        SELECT t1.id,
-               t1.account_subjects_id                                     as subjects_id,
+        SELECT cib.id,
+               t1.account_subjects_id AS subjects_id,
+               t1.subjects_calculate_item_ids,
                t1.subjects_code,
                t1.subjects_name,
                t1.calculate_item_str,
-               sum(t1.tradeAmount)                                        AS trade_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 1, t1.tradeAmount, 0))  AS month1_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 2, t1.tradeAmount, 0))  AS month2_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 3, t1.tradeAmount, 0))  AS month3_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 4, t1.tradeAmount, 0))  AS month4_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 5, t1.tradeAmount, 0))  AS month5_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 6, t1.tradeAmount, 0))  AS month6_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 7, t1.tradeAmount, 0))  AS month7_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 8, t1.tradeAmount, 0))  AS month8_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 9, t1.tradeAmount, 0))  AS month9_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 10, t1.tradeAmount, 0)) AS month10_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 11, t1.tradeAmount, 0)) AS month11_amount,
-               sum(IF(MONTH ( t1.expenses_time )= 12, t1.tradeAmount, 0)) AS month12_amount
+               sum(t1.tradeAmount)    AS trade_amount,
+               cib.month1_amount,
+               cib.month2_amount,
+               cib.month3_amount,
+               cib.month4_amount,
+               cib.month5_amount,
+               cib.month6_amount,
+               cib.month7_amount,
+               cib.month8_amount,
+               cib.month9_amount,
+               cib.month10_amount,
+               cib.month11_amount,
+               cib.month12_amount,
+               cib.year_begin_borrow_amount
         FROM (SELECT ccd.id,
                      ccd.account_subjects_id,
-                     IF(cc.trade_type = 10, cc.apply_time, ap.expenses_time) AS expenses_time,
-                     IF(cc.trade_type = 10, ccd.money, -ccd.money)           AS tradeAmount,
+                     IF(cc.trade_type = 10, cc.apply_time, ap.expenses_time)     AS expenses_time,
+                     IF(cc.trade_type = 10, ccd.money, - ccd.money)              AS tradeAmount,
                      asj.subjects_code,
                      asj.subjects_name,
                      asj.sort,
-                     CONCAT(asj.subjects_name, ' - ', IFNULL(ccd.calculate_item_name1, ''),
-                            IF(ccd.calculate_item_name2 is null, '',
-                               CONCAT(' - ', ccd.calculate_item_name2)))     as calculate_item_str
+                     t2.calculate_item_ids,
+                     t2.calculate_item_types,
+                     t2.calculate_item_names,
+                     CONCAT(ccd.account_subjects_id, ',', t2.calculate_item_ids) AS subjects_calculate_item_ids,
+--                      CONCAT(asj.subjects_name, ' - ', IFNULL(ccd.calculate_item_name1, ''),
+--                             IF(ccd.calculate_item_name2 IS NULL, '',
+--                                CONCAT(' - ', ccd.calculate_item_name2)))         AS calculate_item_str0,
+                     CONCAT(asj.subjects_name, ' - ',
+                            REPLACE(t2.calculate_item_names, ',', ' - '))        AS calculate_item_str
               FROM cost_control cc
                        JOIN cost_control_detail ccd ON ccd.cost_control_id = cc.id
                        LEFT JOIN account_payment ap ON ap.business_id = cc.id
                        LEFT JOIN account_subjects asj ON ccd.account_subjects_id = asj.id
+                       LEFT JOIN (SELECT cci.cost_control_detail_id,
+                                         GROUP_CONCAT(cci.business_id)          AS calculate_item_ids,
+                                         GROUP_CONCAT(cci.type)                 AS calculate_item_types,
+                                         GROUP_CONCAT(cciv.calculate_item_name) AS calculate_item_names
+                                  FROM cost_calculate_item cci
+                                           JOIN calculate_item_view cciv
+                                                ON FIND_IN_SET(cci.type, cciv.calculate_item_type)
+                                                    AND cci.business_id = cciv.calculate_item_id
+                                  GROUP BY cci.cost_control_detail_id) t2 ON t2.cost_control_detail_id = ccd.id
               WHERE (cc.trade_type = 10 OR ap.`status` = 10)
                 AND cc.`status` IN (10, 30)) t1
+                 LEFT JOIN calculate_item_balance cib
+                           ON cib.id_str = t1.subjects_calculate_item_ids and cib.year = YEAR ( t1.expenses_time )
             ${ew.customSqlSegment}
-        GROUP BY
-            calculate_item_str
+        GROUP BY t1.subjects_calculate_item_ids
         ORDER BY t1.sort ASC
     </select>
     <select id="getRemitDetailPage" resultType="com.fjhx.form.entity.RemitDetailVo">

+ 1 - 1
hx-form/src/main/resources/mapper/account/AccountSubjectsBalanceMapper.xml → hx-form/src/main/resources/mapper/calculate/CalculateItemBalanceMapper.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.fjhx.form.mapper.account.AccountSubjectsBalanceMapper">
+<mapper namespace="com.fjhx.form.mapper.calculate.CalculateItemBalanceMapper">
 </mapper>