diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/index/service/IndexService.java b/jero-boot-incoming-payment/src/main/java/com/jero/index/service/IndexService.java index 0fe78976..4a396c30 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/index/service/IndexService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/index/service/IndexService.java @@ -5,6 +5,8 @@ import com.google.common.collect.Lists; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.DictModel; import com.jero.index.dto.YearMoneyDTO; import com.jero.index.vo.*; import com.jero.project.mapper.PayWorkingGroupMapper; @@ -31,6 +33,8 @@ public class IndexService { private IPayWorkingGroupService payWorkingGroupService; @Resource private PayWorkingGroupMapper payWorkingGroupMapper; + @Resource + private ISysBaseAPI sysBaseAPI; public LineChartVO lineChart() { String year = String.valueOf(DateUtil.year(new DateTime())); @@ -220,17 +224,28 @@ public class IndexService { }else { amountClassDTOS = payWorkingGroupMapper.amountClass1(year,column,departCode); } + Map decimalMap = amountClassDTOS.stream().collect(Collectors.toMap(AmountClassDTO::getChargeUse, AmountClassDTO::getMoney)); + //获取所有类型 + List paymentChargeUses = sysBaseAPI.queryDictItemsByCode("payment_charge_use"); + List paymentChargeUseList = paymentChargeUses.stream().map(DictModel::getValue).collect(Collectors.toList()); BigDecimal all = amountClassDTOS.stream().map(AmountClassDTO::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add); List pieChartVOS = new ArrayList<>(); - for (AmountClassDTO amountClassDTO : amountClassDTOS) { + for (String chargeUse : paymentChargeUseList) { + BigDecimal money = decimalMap.getOrDefault(chargeUse,BigDecimal.ZERO); PieChartVO pieChartVO = new PieChartVO(); - pieChartVO.setName(amountClassDTO.getChargeUse()); - BigDecimal divide = amountClassDTO.getMoney() - .divide(all,3,RoundingMode.HALF_DOWN) - .multiply(new BigDecimal(100)) - .setScale(1, RoundingMode.UNNECESSARY); + pieChartVO.setName(chargeUse); + BigDecimal divide; + if (all.equals(BigDecimal.ZERO)){ + divide = BigDecimal.ZERO; + }else { + divide = money + .divide(all,3,RoundingMode.HALF_DOWN) + .multiply(new BigDecimal(100)) + .setScale(1, RoundingMode.UNNECESSARY); + } + pieChartVO.setValue(String.valueOf(divide)); - pieChartVO.setMoney(String.valueOf(amountClassDTO.getMoney())); + pieChartVO.setMoney(String.valueOf(money)); pieChartVOS.add(pieChartVO); } return pieChartVOS;