diff --git a/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java index cbc2e759..5088a783 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/controller/AccountController.java @@ -9,6 +9,7 @@ import com.jsh.erp.service.account.AccountService; import com.jsh.erp.service.systemConfig.SystemConfigService; import com.jsh.erp.utils.BaseResponseInfo; import com.jsh.erp.utils.ErpInfo; +import com.jsh.erp.utils.StringUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; @@ -178,8 +179,8 @@ public class AccountController { BaseResponseInfo res = new BaseResponseInfo(); try { Map map = new HashMap<>(); - List list = accountService.listWithBalance(name, serialNo, (currentPage-1)*pageSize, pageSize); - Long count = accountService.listWithBalanceCount(name, serialNo); + List list = accountService.listWithBalance(StringUtil.toNull(name), StringUtil.toNull(serialNo), (currentPage-1)*pageSize, pageSize); + Long count = accountService.listWithBalanceCount(StringUtil.toNull(name), StringUtil.toNull(serialNo)); map.put("rows", list); map.put("total", count); res.code = 200; @@ -204,7 +205,7 @@ public class AccountController { HttpServletRequest request) throws Exception { BaseResponseInfo res = new BaseResponseInfo(); try { - Map map = accountService.getStatistics(name, serialNo); + Map map = accountService.getStatistics(StringUtil.toNull(name), StringUtil.toNull(serialNo)); res.code = 200; res.data = map; } catch(Exception e){ diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountVo4Sum.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountVo4Sum.java new file mode 100644 index 00000000..2c6118c8 --- /dev/null +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/entities/AccountVo4Sum.java @@ -0,0 +1,47 @@ +package com.jsh.erp.datasource.entities; + +import java.math.BigDecimal; + +public class AccountVo4Sum { + + private Long id; + + private BigDecimal accountSum; + + private BigDecimal accountSumByHead; + + private BigDecimal accountSumByDetail; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public BigDecimal getAccountSum() { + return accountSum; + } + + public void setAccountSum(BigDecimal accountSum) { + this.accountSum = accountSum; + } + + public BigDecimal getAccountSumByHead() { + return accountSumByHead; + } + + public void setAccountSumByHead(BigDecimal accountSumByHead) { + this.accountSumByHead = accountSumByHead; + } + + public BigDecimal getAccountSumByDetail() { + return accountSumByDetail; + } + + public void setAccountSumByDetail(BigDecimal accountSumByDetail) { + this.accountSumByDetail = accountSumByDetail; + } + +} \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java index fd40594f..b7ec1e4f 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/AccountMapperEx.java @@ -1,6 +1,7 @@ package com.jsh.erp.datasource.mappers; import com.jsh.erp.datasource.entities.Account; +import com.jsh.erp.datasource.entities.AccountVo4Sum; import com.jsh.erp.datasource.entities.DepotHead; import com.jsh.erp.datasource.vo.AccountVo4InOutList; import com.jsh.erp.datasource.vo.AccountVo4List; @@ -52,6 +53,20 @@ public interface AccountMapperEx { @Param("endTime") String endTime, @Param("forceFlag") Boolean forceFlag); + List getAccountSumByParam( + @Param("name") String name, + @Param("serialNo") String serialNo, + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("forceFlag") Boolean forceFlag, + @Param("offset") Integer offset, + @Param("rows") Integer rows); + + List getManyAccountSumByParam( + @Param("beginTime") String beginTime, + @Param("endTime") String endTime, + @Param("forceFlag") Boolean forceFlag); + List findAccountInOutList( @Param("accountId") Long accountId, @Param("offset") Integer offset, @@ -61,4 +76,5 @@ public interface AccountMapperEx { @Param("accountId") Long accountId); int batchDeleteAccountByIds(@Param("updateTime") Date updateTime, @Param("updater") Long updater, @Param("ids") String ids[]); + } \ No newline at end of file diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java index c52cfcdd..6e5ad2cf 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/account/AccountService.java @@ -106,22 +106,43 @@ public class AccountService { String bTime = Tools.firstDayOfMonth(timeStr) + BusinessConstants.DAY_FIRST_TIME; String eTime = Tools.lastDayOfMonth(timeStr) + BusinessConstants.DAY_LAST_TIME; Boolean forceFlag = systemConfigService.getForceApprovalFlag(); + Map thisMonthAccountSumMap = new HashMap<>(); + Map thisMonthAccountSumByHeadMap = new HashMap<>(); + Map thisMonthAccountSumByDetailMap = new HashMap<>(); + Map currentAccountSumMap = new HashMap<>(); + Map currentAccountSumByHeadMap = new HashMap<>(); + Map currentAccountSumByDetailMap = new HashMap<>(); + List thisMonthAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, bTime, eTime, forceFlag, offset, rows); + List currentAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, null, null, forceFlag, offset, rows); + List thisMonthManyAmountList = accountMapperEx.getManyAccountSumByParam(bTime, eTime, forceFlag); + List currentManyAmountList = accountMapperEx.getManyAccountSumByParam(null, null, forceFlag); + for (AccountVo4Sum thisMonthAmount: thisMonthAmountList) { + thisMonthAccountSumMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSum()); + thisMonthAccountSumByHeadMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByHead()); + thisMonthAccountSumByDetailMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByDetail()); + } + for (AccountVo4Sum currentAmount: currentAmountList) { + currentAccountSumMap.put(currentAmount.getId(), currentAmount.getAccountSum()); + currentAccountSumByHeadMap.put(currentAmount.getId(), currentAmount.getAccountSumByHead()); + currentAccountSumByDetailMap.put(currentAmount.getId(), currentAmount.getAccountSumByDetail()); + } if (null != list) { for (AccountVo4List al : list) { DecimalFormat df = new DecimalFormat(".##"); - BigDecimal thisMonthAmount = getAccountSum(al.getId(), bTime, eTime, forceFlag) - .add(getAccountSumByHead(al.getId(), bTime, eTime, forceFlag)) - .add(getAccountSumByDetail(al.getId(), bTime, eTime, forceFlag)) - .add(getManyAccountSum(al.getId(), bTime, eTime, forceFlag)); + BigDecimal thisMonthAmount = thisMonthAccountSumMap.get(al.getId()) + .add(thisMonthAccountSumByHeadMap.get(al.getId())) + .add(thisMonthAccountSumByDetailMap.get(al.getId())) + .add(getManyAccountSumParse(al.getId(), thisMonthManyAmountList)); String thisMonthAmountFmt = "0"; if ((thisMonthAmount.compareTo(BigDecimal.ZERO))!=0) { thisMonthAmountFmt = df.format(thisMonthAmount); } al.setThisMonthAmount(thisMonthAmountFmt); //本月发生额 - BigDecimal currentAmount = getAccountSum(al.getId(), null, null, forceFlag) - .add(getAccountSumByHead(al.getId(), null, null, forceFlag)) - .add(getAccountSumByDetail(al.getId(), null, null, forceFlag)) - .add(getManyAccountSum(al.getId(), null, null, forceFlag)).add(al.getInitialAmount()) ; + BigDecimal currentAmount = currentAccountSumMap.get(al.getId()) + .add(currentAccountSumByHeadMap.get(al.getId())) + .add(currentAccountSumByDetailMap.get(al.getId())) + .add(getManyAccountSumParse(al.getId(), currentManyAmountList)) + .add(al.getInitialAmount()) ; al.setCurrentAmount(currentAmount); resList.add(al); } @@ -328,6 +349,32 @@ public class AccountService { return accountSum; } + /** + * 单个账户的金额求和-多账户的明细合计(格式化) + * @return + */ + public BigDecimal getManyAccountSumParse(Long accountId, List manyAmountList) { + BigDecimal accountSum = BigDecimal.ZERO; + if (manyAmountList != null) { + for (DepotHead depotHead : manyAmountList) { + String accountIdList = depotHead.getAccountIdList(); + String accountMoneyList = depotHead.getAccountMoneyList(); + if(StringUtil.isNotEmpty(accountIdList) && StringUtil.isNotEmpty(accountMoneyList)) { + String[] aList = accountIdList.split(","); + String[] amList = accountMoneyList.split(","); + for (int i = 0; i < aList.length; i++) { + if (aList[i].equals(accountId.toString())) { + if(amList.length>0) { + accountSum = accountSum.add(new BigDecimal(amList[i])); + } + } + } + } + } + } + return accountSum; + } + public List findAccountInOutList(Long accountId, Integer offset, Integer rows) throws Exception{ List list=null; try{ @@ -402,22 +449,43 @@ public class AccountService { String bTime = Tools.firstDayOfMonth(timeStr) + BusinessConstants.DAY_FIRST_TIME; String eTime = Tools.lastDayOfMonth(timeStr) + BusinessConstants.DAY_LAST_TIME; Boolean forceFlag = systemConfigService.getForceApprovalFlag(); + Map thisMonthAccountSumMap = new HashMap<>(); + Map thisMonthAccountSumByHeadMap = new HashMap<>(); + Map thisMonthAccountSumByDetailMap = new HashMap<>(); + Map currentAccountSumMap = new HashMap<>(); + Map currentAccountSumByHeadMap = new HashMap<>(); + Map currentAccountSumByDetailMap = new HashMap<>(); + List thisMonthAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, bTime, eTime, forceFlag, offset, rows); + List currentAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, null, null, forceFlag, offset, rows); + List thisMonthManyAmountList = accountMapperEx.getManyAccountSumByParam(bTime, eTime, forceFlag); + List currentManyAmountList = accountMapperEx.getManyAccountSumByParam(null, null, forceFlag); + for (AccountVo4Sum thisMonthAmount: thisMonthAmountList) { + thisMonthAccountSumMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSum()); + thisMonthAccountSumByHeadMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByHead()); + thisMonthAccountSumByDetailMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByDetail()); + } + for (AccountVo4Sum currentAmount: currentAmountList) { + currentAccountSumMap.put(currentAmount.getId(), currentAmount.getAccountSum()); + currentAccountSumByHeadMap.put(currentAmount.getId(), currentAmount.getAccountSumByHead()); + currentAccountSumByDetailMap.put(currentAmount.getId(), currentAmount.getAccountSumByDetail()); + } if (null != list) { for (AccountVo4List al : list) { DecimalFormat df = new DecimalFormat(".##"); - BigDecimal thisMonthAmount = getAccountSum(al.getId(), bTime, eTime, forceFlag) - .add(getAccountSumByHead(al.getId(), bTime, eTime, forceFlag)) - .add(getAccountSumByDetail(al.getId(), bTime, eTime, forceFlag)) - .add(getManyAccountSum(al.getId(), bTime, eTime, forceFlag)); + BigDecimal thisMonthAmount = thisMonthAccountSumMap.get(al.getId()) + .add(thisMonthAccountSumByHeadMap.get(al.getId())) + .add(thisMonthAccountSumByDetailMap.get(al.getId())) + .add(getManyAccountSumParse(al.getId(), thisMonthManyAmountList)); String thisMonthAmountFmt = "0"; if ((thisMonthAmount.compareTo(BigDecimal.ZERO))!=0) { thisMonthAmountFmt = df.format(thisMonthAmount); } al.setThisMonthAmount(thisMonthAmountFmt); //本月发生额 - BigDecimal currentAmount = getAccountSum(al.getId(), null, null, forceFlag) - .add(getAccountSumByHead(al.getId(), null, null, forceFlag)) - .add(getAccountSumByDetail(al.getId(), null, null, forceFlag)) - .add(getManyAccountSum(al.getId(), null, null, forceFlag)).add(al.getInitialAmount()) ; + BigDecimal currentAmount = currentAccountSumMap.get(al.getId()) + .add(currentAccountSumByHeadMap.get(al.getId())) + .add(currentAccountSumByDetailMap.get(al.getId())) + .add(getManyAccountSumParse(al.getId(), currentManyAmountList)) + .add(al.getInitialAmount()); al.setCurrentAmount(currentAmount); resList.add(al); } @@ -448,22 +516,43 @@ public class AccountService { BigDecimal allMonthAmount = BigDecimal.ZERO; BigDecimal allCurrentAmount = BigDecimal.ZERO; Boolean forceFlag = systemConfigService.getForceApprovalFlag(); - if (null != list && null !=timeStr) { + Map thisMonthAccountSumMap = new HashMap<>(); + Map thisMonthAccountSumByHeadMap = new HashMap<>(); + Map thisMonthAccountSumByDetailMap = new HashMap<>(); + Map currentAccountSumMap = new HashMap<>(); + Map currentAccountSumByHeadMap = new HashMap<>(); + Map currentAccountSumByDetailMap = new HashMap<>(); + List thisMonthAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, bTime, eTime, forceFlag, null, null); + List currentAmountList = accountMapperEx.getAccountSumByParam(name, serialNo, null, null, forceFlag, null, null); + List thisMonthManyAmountList = accountMapperEx.getManyAccountSumByParam(bTime, eTime, forceFlag); + List currentManyAmountList = accountMapperEx.getManyAccountSumByParam(null, null, forceFlag); + for (AccountVo4Sum thisMonthAmount: thisMonthAmountList) { + thisMonthAccountSumMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSum()); + thisMonthAccountSumByHeadMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByHead()); + thisMonthAccountSumByDetailMap.put(thisMonthAmount.getId(), thisMonthAmount.getAccountSumByDetail()); + } + for (AccountVo4Sum currentAmount: currentAmountList) { + currentAccountSumMap.put(currentAmount.getId(), currentAmount.getAccountSum()); + currentAccountSumByHeadMap.put(currentAmount.getId(), currentAmount.getAccountSumByHead()); + currentAccountSumByDetailMap.put(currentAmount.getId(), currentAmount.getAccountSumByDetail()); + } + if (null != list) { for (Account a : list) { - BigDecimal monthAmount = getAccountSum(a.getId(), bTime, eTime, forceFlag) - .add(getAccountSumByHead(a.getId(), bTime, eTime, forceFlag)) - .add(getAccountSumByDetail(a.getId(), bTime, eTime, forceFlag)) - .add(getManyAccountSum(a.getId(), bTime, eTime, forceFlag)); - BigDecimal currentAmount = getAccountSum(a.getId(), null, null, forceFlag) - .add(getAccountSumByHead(a.getId(), null, null, forceFlag)) - .add(getAccountSumByDetail(a.getId(), null, null, forceFlag)) - .add(getManyAccountSum(a.getId(), null, null, forceFlag)).add(a.getInitialAmount()); + BigDecimal monthAmount = thisMonthAccountSumMap.get(a.getId()) + .add(thisMonthAccountSumByHeadMap.get(a.getId())) + .add(thisMonthAccountSumByDetailMap.get(a.getId())) + .add(getManyAccountSumParse(a.getId(), thisMonthManyAmountList)); + BigDecimal currentAmount = currentAccountSumMap.get(a.getId()) + .add(currentAccountSumByHeadMap.get(a.getId())) + .add(currentAccountSumByDetailMap.get(a.getId())) + .add(getManyAccountSumParse(a.getId(), currentManyAmountList)) + .add(a.getInitialAmount()); allMonthAmount = allMonthAmount.add(monthAmount); allCurrentAmount = allCurrentAmount.add(currentAmount); } } - map.put("allCurrentAmount", priceFormat(allCurrentAmount)); //当前总金额 map.put("allMonthAmount", priceFormat(allMonthAmount)); //本月发生额 + map.put("allCurrentAmount", priceFormat(allCurrentAmount)); //当前总金额 } catch (Exception e) { JshException.readFail(logger, e); } diff --git a/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml b/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml index ff509649..8eed35db 100644 --- a/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml +++ b/jshERP-boot/src/main/resources/mapper_xml/AccountMapperEx.xml @@ -148,6 +148,80 @@ and ifnull(dh.delete_flag,'0') !='1' + + + +