diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java index 4dc2501..f4c7b8f 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java @@ -141,6 +141,8 @@ public class HuzhouProjectController { } + + @GetMapping("/queryProjectTimeOutInfo") public Result queryProjectTimeOutInfo(){ //获取项目入库数据 diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java index 1699c5c..e538697 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java @@ -246,5 +246,7 @@ public interface IHuzhouProjectinfoService extends IService { ProjectResultExportDTO queryProjectResultCount(); + void fillSuperiorFundPayRateByChildren(List projectInfoList); + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java index 5dd5df2..b8c1101 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java @@ -2869,7 +2869,8 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl Optional.ofNullable(p.getReformName()).orElse("")) .thenComparing(p -> Optional.ofNullable(p.getCurrentStage()).orElse(""))) .collect(Collectors.toList()); - + // 存在子项目的重新计算上级资金执行率 + this.fillSuperiorFundPayRateByChildren(projectInfoList); stringRedisTemplate.opsForValue().set(redisKey, JSON.toJSONString(projectInfoList)); stringRedisTemplate.expire(redisKey, CommonConstant.REDIS_EXPIRE_TIME, TimeUnit.MINUTES); @@ -3033,6 +3034,77 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl projectInfoList) { + List records = subProjectinfoService.list(); + // 获取子项目对应的 主项目id集合 + List hasSubProjectIds = records.stream() + .map(HuzhouSubProjectinfo::getProjectId) + .collect(Collectors.toList()); + // 对所有存在子项目的主项目进行填充上级资金执行率 + List waitFillProjectInfoList = new ArrayList<>(); + waitFillProjectInfoList= projectInfoList.stream() + .filter(project -> hasSubProjectIds.contains(project.getId())) + .collect(Collectors.toList()); + waitFillProjectInfoList.forEach(item ->log.info("有子项目的项目名称:{}",item.getProjectName())); + + for (HuzhouProjectinfo projectInfo : waitFillProjectInfoList) { + // 分子 + Double totalCentralMoney =0.0; + Double totalProvincialMoney =0.0; + // 分母 + Double totalContractProvincialMoney =0.0; + Double totalContractCentralMoney =0.0; + // 基本信息 + String projectId = projectInfo.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(HuzhouSubProjectinfo::getProjectId,projectId); + //获取对应的子项目数据 + List subProjectInfos = subProjectinfoMapper.selectList(queryWrapper); + for (HuzhouSubProjectinfo subProjectInfo : subProjectInfos) { + String subProjectName = subProjectInfo.getProjectName(); + String subProjectId = subProjectInfo.getProjectId(); + + // 合同金额(实际) + Map actualFunds = calculateActualFunds(subProjectInfo.getId()); + Double centralMoney = actualFunds.get("centralMoney"); + Double provincialMoney = actualFunds.get("provincialMoney"); + totalCentralMoney += centralMoney; + totalProvincialMoney += provincialMoney; + log.info("子项目名称:{}", subProjectName); + log.info("合同金额(实际累加):{}+{}", totalCentralMoney,totalProvincialMoney); + + // 合同金额(计划) + Boolean flag = planinfoService.taskNameIsFinished(subProjectId); + HuzhouProjectinfoMoney contractMoneyInfo = huzhouProjectinfoMoneyService.getById(subProjectId); + + if (contractMoneyInfo != null) { + Double contractCentralMoney = contractMoneyInfo.getContractCentralMoney(); + Double contractProvincialMoney = contractMoneyInfo.getContractProvincialMoney(); + if (!flag){ + contractCentralMoney = 0.0; + contractProvincialMoney = 0.0; + } + totalContractCentralMoney += (contractCentralMoney != null ) ? contractCentralMoney : 0.0; + totalContractProvincialMoney += (contractProvincialMoney != null ) ? contractProvincialMoney : 0.0; + log.info("计划合同金额(中央+省级):{}--{}", contractCentralMoney, contractProvincialMoney); + } + if (totalContractProvincialMoney == 0.0 && totalContractCentralMoney == 0.0){ + projectInfo.setSuperiorFundPayRate(0.0); + }else { + double rate = (totalCentralMoney + totalProvincialMoney) / (totalContractProvincialMoney + totalContractCentralMoney); + double formattedRate = Math.round(rate * 100.0) / 100.0; + int percentageRate = (int)(formattedRate * 100); + projectInfo.setSuperiorFundPayRate((double) percentageRate); + + } + } + log.info("存在子项目的:{}:上级资金执行率:{}", projectInfo.getProjectName(), projectInfo.getSuperiorFundPayRate()); + + + } + } + private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) { String projectId = projectInfo.getId(); @@ -3197,7 +3269,8 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl qw = new LambdaQueryWrapper<>(); - qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际"); + qw.eq(HuzhouContractinfo::getProjectId, projectId) + .eq(HuzhouContractinfo::getFlag, "实际"); List contractInfoList = contractinfoMapper.selectList(qw); for (HuzhouContractinfo huzhouContractinfo : contractInfoList) {