| | |
| | | |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.by4cloud.platformx.admin.api.entity.SysDept; |
| | | import com.by4cloud.platformx.admin.api.entity.SysDictItem; |
| | | import com.by4cloud.platformx.admin.api.feign.RemoteDeptService; |
| | | import com.by4cloud.platformx.admin.api.feign.RemoteDictService; |
| | |
| | | R<List<SysDictItem>> r = remoteDictService.getDictByType("industry_sector"); |
| | | List<SysDictItem> items = r.getData(); |
| | | if (ArrayUtil.isEmpty(items.toArray())){ |
| | | return R.failed("地区字典分类获取异常"); |
| | | return R.failed("行业字典分类获取异常"); |
| | | } |
| | | List<AgingAnalysisVo> result = new ArrayList<>(); |
| | | AgingQueryDTO queryDTO = new AgingQueryDTO(); |
| | |
| | | } |
| | | return companyAgingVo; |
| | | } |
| | | |
| | | @Override |
| | | public R agingAnalysisByMarket(AnalysisCommonDTO commonDTO) { |
| | | R<List<SysDictItem>> r = remoteDictService.getDictByType("market_type"); |
| | | List<SysDictItem> items = r.getData(); |
| | | if (ArrayUtil.isEmpty(items.toArray())){ |
| | | return R.failed("市场类型字典分类获取异常"); |
| | | } |
| | | List<AgingAnalysisVo> result = new ArrayList<>(); |
| | | AgingQueryDTO queryDTO = new AgingQueryDTO(); |
| | | List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null); |
| | | items.stream().forEach(item->{ |
| | | AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); |
| | | agingAnalysisVo.setCompanyName(item.getLabel()); |
| | | queryDTO.setClassId(item.getItemValue()); |
| | | List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO); |
| | | //补全数据 |
| | | if (ArrayUtil.isEmpty(companyAgingVo.toArray())){ |
| | | companyAgingVo = new ArrayList<>(); |
| | | AgingVo agingVo1 = new AgingVo("0-30天",new BigDecimal("0"),null); |
| | | AgingVo agingVo2 = new AgingVo("31-60天",new BigDecimal("0"),null); |
| | | AgingVo agingVo3 = new AgingVo("61-90天",new BigDecimal("0"),null); |
| | | AgingVo agingVo4 = new AgingVo("91-180天",new BigDecimal("0"),null); |
| | | AgingVo agingVo5 = new AgingVo("181-365天",new BigDecimal("0"),null); |
| | | AgingVo agingVo6 = new AgingVo("1年以上",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo1); |
| | | companyAgingVo.add(agingVo2); |
| | | companyAgingVo.add(agingVo3); |
| | | companyAgingVo.add(agingVo4); |
| | | companyAgingVo.add(agingVo5); |
| | | companyAgingVo.add(agingVo6); |
| | | }else { |
| | | List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList()); |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30天")){ |
| | | AgingVo agingVo1 = new AgingVo("0-30天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo1); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60天")){ |
| | | AgingVo agingVo2 = new AgingVo("31-60天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo2); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90天")){ |
| | | AgingVo agingVo3 = new AgingVo("61-90天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo3); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180天")){ |
| | | AgingVo agingVo4 = new AgingVo("91-180天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo4); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365天")){ |
| | | AgingVo agingVo5 = new AgingVo("181-365天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo5); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"1年以上")){ |
| | | AgingVo agingVo6 = new AgingVo("1年以上",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo6); |
| | | } |
| | | } |
| | | agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); |
| | | List<AgingVo> finalCompanyAgingVo = companyAgingVo; |
| | | agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size()) |
| | | .mapToObj(i -> { |
| | | BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount(); |
| | | BigDecimal total = agingVoList.get(i).getTotalAmount(); |
| | | if (total == null || total.compareTo(BigDecimal.ZERO) == 0) { |
| | | return null; |
| | | } |
| | | return part.divide(total, 4, RoundingMode.HALF_UP) |
| | | .multiply(new BigDecimal("100")) |
| | | .setScale(2, RoundingMode.HALF_UP); |
| | | }) |
| | | .collect(Collectors.toList())); |
| | | result.add(agingAnalysisVo); |
| | | }); |
| | | //合计 |
| | | AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); |
| | | agingAnalysisVo.setCompanyName("合计"); |
| | | agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); |
| | | List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size()) |
| | | .mapToObj(i -> { |
| | | |
| | | if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) { |
| | | return null; |
| | | }else { |
| | | return new BigDecimal("100"); |
| | | } |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | agingAnalysisVo.setPercent(percent); |
| | | result.add(agingAnalysisVo); |
| | | return R.ok(result); |
| | | } |
| | | |
| | | @Override |
| | | public R agingAnalysisTotalScale(AnalysisCommonDTO commonDTO) { |
| | | List<Long> compIds = new ArrayList<>(); |
| | | compIds.add(Long.valueOf(sgb)); |
| | | compIds.add(Long.valueOf(smj)); |
| | | compIds.add(Long.valueOf(tfgs)); |
| | | compIds.add(Long.valueOf(ymj)); |
| | | compIds.add(Long.valueOf(jxc)); |
| | | List<AgingAnalysisVo> result = new ArrayList<>(); |
| | | AgingQueryDTO queryDTO = new AgingQueryDTO(); |
| | | List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotalScale(null); |
| | | compIds.stream().forEach(compId->{ |
| | | R<SysDept> r = remoteDeptService.getById(compId); |
| | | if (!r.isOk()){ |
| | | return; |
| | | } |
| | | SysDept dept = r.getData(); |
| | | AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); |
| | | agingAnalysisVo.setCompanyName(dept.getOrgName()); |
| | | queryDTO.setCompanyId(dept.getDeptId()); |
| | | List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalScale(queryDTO); |
| | | //补全数据 |
| | | if (ArrayUtil.isEmpty(companyAgingVo.toArray())){ |
| | | companyAgingVo = new ArrayList<>(); |
| | | AgingVo agingVo1 = new AgingVo("0-30天",new BigDecimal("0"),null); |
| | | AgingVo agingVo2 = new AgingVo("31-60天",new BigDecimal("0"),null); |
| | | AgingVo agingVo3 = new AgingVo("61-90天",new BigDecimal("0"),null); |
| | | AgingVo agingVo4 = new AgingVo("91-180天",new BigDecimal("0"),null); |
| | | AgingVo agingVo5 = new AgingVo("181-365天",new BigDecimal("0"),null); |
| | | AgingVo agingVo6 = new AgingVo("1年以上",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo1); |
| | | companyAgingVo.add(agingVo2); |
| | | companyAgingVo.add(agingVo3); |
| | | companyAgingVo.add(agingVo4); |
| | | companyAgingVo.add(agingVo5); |
| | | companyAgingVo.add(agingVo6); |
| | | }else { |
| | | List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList()); |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30天")){ |
| | | AgingVo agingVo1 = new AgingVo("0-30天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo1); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60天")){ |
| | | AgingVo agingVo2 = new AgingVo("31-60天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo2); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90天")){ |
| | | AgingVo agingVo3 = new AgingVo("61-90天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo3); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180天")){ |
| | | AgingVo agingVo4 = new AgingVo("91-180天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo4); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365天")){ |
| | | AgingVo agingVo5 = new AgingVo("181-365天",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo5); |
| | | } |
| | | if (!ArrayUtil.contains(overdueRanges.toArray(),"1年以上")){ |
| | | AgingVo agingVo6 = new AgingVo("1年以上",new BigDecimal("0"),null); |
| | | companyAgingVo.add(agingVo6); |
| | | } |
| | | } |
| | | agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); |
| | | List<AgingVo> finalCompanyAgingVo = companyAgingVo; |
| | | agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size()) |
| | | .mapToObj(i -> { |
| | | BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount(); |
| | | BigDecimal total = agingVoList.get(i).getTotalAmount(); |
| | | if (total == null || total.compareTo(BigDecimal.ZERO) == 0) { |
| | | return null; |
| | | } |
| | | return part.divide(total, 4, RoundingMode.HALF_UP) |
| | | .multiply(new BigDecimal("100")) |
| | | .setScale(2, RoundingMode.HALF_UP); |
| | | }) |
| | | .collect(Collectors.toList())); |
| | | result.add(agingAnalysisVo); |
| | | }); |
| | | //合计 |
| | | AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); |
| | | agingAnalysisVo.setCompanyName("合计"); |
| | | agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); |
| | | List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size()) |
| | | .mapToObj(i -> { |
| | | |
| | | if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) { |
| | | return null; |
| | | }else { |
| | | return new BigDecimal("100"); |
| | | } |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | agingAnalysisVo.setPercent(percent); |
| | | result.add(agingAnalysisVo); |
| | | return R.ok(result); |
| | | } |
| | | } |