package com.by4cloud.platformx.business.service.impl; 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; import com.by4cloud.platformx.business.dto.AgingQueryDTO; import com.by4cloud.platformx.business.dto.AnalysisCommonDTO; import com.by4cloud.platformx.business.entity.BusinessCustomer; import com.by4cloud.platformx.business.mapper.BusinessCustomerMapper; import com.by4cloud.platformx.business.mapper.ContractMapper; import com.by4cloud.platformx.business.mapper.ContractPaymentScheduleMapper; import com.by4cloud.platformx.business.service.StatisticService; import com.by4cloud.platformx.business.vo.*; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.datascope.DataScope; import com.by4cloud.platformx.common.security.util.SecurityUtils; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; @Service @RequiredArgsConstructor public class StatisticServiceImpl implements StatisticService { private final ContractMapper contractMapper; private final ContractPaymentScheduleMapper contractPaymentScheduleMapper; private final BusinessCustomerMapper businessCustomerMapper; private final RemoteDeptService remoteDeptService; private final RemoteDictService remoteDictService; @Value("${dept.smj}") private String smj; @Value("${dept.sgb}") private String sgb; @Value("${dept.jxc}") private String jxc; @Value("${dept.tfgs}") private String tfgs; @Value("${dept.ymj}") private String ymj; @Override public R contractAmountAnalysis(AnalysisCommonDTO commonDTO) { List 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 contractAmountAnalysisVoList = contractMapper.contractAmountAnalysis(commonDTO,compIds); return R.ok(contractAmountAnalysisVoList); } @Override public R contractAmountAnalysisByComp(AnalysisCommonDTO commonDTO) { List contractIncomeAnalysisVoList = contractMapper.contractAmountAnalysisByComp(commonDTO, SecurityUtils.getUser().getCompId()); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractIncomeAnalysis(AnalysisCommonDTO commonDTO) { List 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 contractIncomeAnalysisVoList = contractMapper.contractIncomeAnalysis(commonDTO,compIds); if (ArrayUtil.isNotEmpty(contractIncomeAnalysisVoList.toArray())){ contractIncomeAnalysisVoList.stream().forEach(contractIncomeAnalysisVo -> { if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),sgb)){ contractIncomeAnalysisVo.setCompName("石工泵"); } if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),smj)){ contractIncomeAnalysisVo.setCompName("石煤机"); } if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),ymj)){ contractIncomeAnalysisVo.setCompName("一煤机"); } if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),tfgs)){ contractIncomeAnalysisVo.setCompName("通方公司"); } if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),jxc)){ contractIncomeAnalysisVo.setCompName("机械厂"); } }); } return R.ok(contractIncomeAnalysisVoList); } @Override public R contractIncomeAnalysisByComp(AnalysisCommonDTO commonDTO) { List contractIncomeAnalysisVoList = contractMapper.contractIncomeAnalysisByComp(commonDTO, SecurityUtils.getUser().getCompId()); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisByArea(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("company_area"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("地区字典分类获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); List statisticList = contractMapper.contractAmountAnalysisByArea(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisByIndustry(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("industry_sector"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("行业字典分类获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); List statisticList = contractMapper.contractAmountAnalysisByIndustry(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisByMarket(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("market_type"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("市场类型字典分类获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); List statisticList = contractMapper.contractAmountAnalysisByMarket(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisBySpcBus(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("supply_attribute"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("供应属性字典分类获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); List statisticList = contractMapper.contractAmountAnalysisBySpcBus(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisByExportBus(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("export_attr"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("区域字段获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); List statisticList = contractMapper.contractAmountAnalysisByExportBus(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R contractAmountAnalysisBySaleModel(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("sales_model"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("销售模式字典分类获取异常"); } List 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 contractIncomeAnalysisVoList = items.stream().map(item -> { ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo(); analysisAreaVo.setAreaId(item.getItemValue()); analysisAreaVo.setAreaName(item.getLabel()); return analysisAreaVo; }).collect(Collectors.toList()); contractMapper.setSession(); List statisticList = contractMapper.contractAmountAnalysisBySaleModel(commonDTO ,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj)); contractIncomeAnalysisVoList.stream().forEach(vo1->{ statisticList.stream().forEach(vo2->{ if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){ vo1.setJxczb(vo2.getJxczb()); vo1.setJxcze(vo2.getJxcze()); vo1.setSgbzb(vo2.getSgbzb()); vo1.setSgbze(vo2.getSgbze()); vo1.setSmjzb(vo2.getSmjzb()); vo1.setSmjze(vo2.getSmjze()); vo1.setTfzb(vo2.getTfzb()); vo1.setTfze(vo2.getTfze()); vo1.setYmjzb(vo2.getYmjzb()); vo1.setYmjze(vo2.getYmjze()); } }); }); return R.ok(contractIncomeAnalysisVoList); } @Override public R agingAnalysisByArea(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("company_area"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("地区字典分类获取异常"); } // List companys = contractPaymentScheduleMapper.selectAgingCompany(DataScope.of("comp_id")); // if (ArrayUtil.isEmpty(companys.toArray())){ // return R.failed("暂无账龄"); // } List result = new ArrayList<>(); AgingQueryDTO queryDTO = new AgingQueryDTO(); List agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null); items.stream().forEach(item->{ AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); agingAnalysisVo.setCompanyName(item.getLabel()); queryDTO.setAreaId(item.getItemValue()); List 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 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 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 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 agingAnalysisByIndustry(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("industry_sector"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("行业字典分类获取异常"); } List result = new ArrayList<>(); AgingQueryDTO queryDTO = new AgingQueryDTO(); List agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null); items.stream().forEach(item->{ AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); agingAnalysisVo.setCompanyName(item.getLabel()); queryDTO.setIndustryId(item.getItemValue()); List 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 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 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 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 agingAnalysis(AnalysisCommonDTO commonDTO) { if (commonDTO.getAgingType().equals("2")) { AgingQueryDTO queryDTO = new AgingQueryDTO(); List companys = contractPaymentScheduleMapper.selectAgingCompanyShip(DataScope.of("comp_id")); if (ArrayUtil.isEmpty(companys.toArray())) { return R.failed("暂无账龄"); } //合计数据 List agingVoList = contractPaymentScheduleMapper.selectAgingTotalShip(queryDTO); agingVoList = completeData(agingVoList); List finalAgingVoList = agingVoList; List result = new ArrayList<>(); companys.stream().forEach(company -> { BusinessCustomer businessCustomer = businessCustomerMapper.selectById(company.getCompanyId()); AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); agingAnalysisVo.setCompanyName(businessCustomer.getCompanyName()); queryDTO.setCompanyId(company.getCompanyId()); List companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalShip(queryDTO); //补全数据 companyAgingVo = completeData(companyAgingVo); agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); List finalCompanyAgingVo = companyAgingVo; agingAnalysisVo.setPercent(IntStream.range(0, finalAgingVoList.size()) .mapToObj(i -> { BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount(); BigDecimal total = finalAgingVoList.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 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); } if (commonDTO.getAgingType().equals("3")) { AgingQueryDTO queryDTO = new AgingQueryDTO(); List companys = contractPaymentScheduleMapper.selectAgingCompanyInvoice(DataScope.of("comp_id")); if (ArrayUtil.isEmpty(companys.toArray())) { return R.failed("暂无账龄"); } //合计数据 List agingVoList = contractPaymentScheduleMapper.selectAgingTotalInvoice(queryDTO); agingVoList = completeData(agingVoList); List finalAgingVoList = agingVoList; List result = new ArrayList<>(); companys.stream().forEach(company -> { BusinessCustomer businessCustomer = businessCustomerMapper.selectById(company.getCompanyId()); AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); agingAnalysisVo.setCompanyName(businessCustomer.getCompanyName()); queryDTO.setCompanyId(company.getCompanyId()); List companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalInvoice(queryDTO); //补全数据 companyAgingVo = completeData(companyAgingVo); agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList())); List finalCompanyAgingVo = companyAgingVo; agingAnalysisVo.setPercent(IntStream.range(0, finalAgingVoList.size()) .mapToObj(i -> { BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount(); BigDecimal total = finalAgingVoList.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 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); } return R.ok(); } private List completeData(List companyAgingVo) { 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 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); } } return companyAgingVo; } @Override public R agingAnalysisByMarket(AnalysisCommonDTO commonDTO) { R> r = remoteDictService.getDictByType("market_type"); List items = r.getData(); if (ArrayUtil.isEmpty(items.toArray())){ return R.failed("市场类型字典分类获取异常"); } List result = new ArrayList<>(); AgingQueryDTO queryDTO = new AgingQueryDTO(); List agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null); items.stream().forEach(item->{ AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo(); agingAnalysisVo.setCompanyName(item.getLabel()); queryDTO.setClassId(item.getItemValue()); List 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 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 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 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 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 result = new ArrayList<>(); AgingQueryDTO queryDTO = new AgingQueryDTO(); List agingVoList = contractPaymentScheduleMapper.selectAgingTotalScale(null); compIds.stream().forEach(compId->{ R 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 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 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 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 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); } }