|
|
@ -3093,6 +3093,69 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM |
|
|
|
return addList; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<HuzhouProjectinfo> queryTempInfo() { |
|
|
|
// 获取所有项目信息
|
|
|
|
List<HuzhouProjectinfo> projectInfoList = this.list(); |
|
|
|
// 根据用户角色权限过滤项目
|
|
|
|
Page page = new Page(1, projectInfoList.size()); |
|
|
|
HuzhouProjectinfo projectinfo = new HuzhouProjectinfo(); |
|
|
|
projectinfo.setStage("4"); |
|
|
|
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo); |
|
|
|
|
|
|
|
Page<HuzhouProjectinfoOV> projectAndChildInfoPageList; |
|
|
|
projectAndChildInfoPageList = projectinfoMapper.getProjectAndChildInfoPageList(page, projectInfoAuthSelect); |
|
|
|
List<HuzhouProjectinfoOV> records = projectAndChildInfoPageList.getRecords(); |
|
|
|
List<String> ids = records.stream() |
|
|
|
.map(HuzhouProjectinfoOV::getId) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
projectInfoList= projectInfoList.stream() |
|
|
|
.filter(project -> !"-1".equals(project.getStage())) |
|
|
|
.filter(project -> ids.contains(project.getId())) |
|
|
|
.filter(project -> !"湖州市长兴县浙里健康e生省级试点应用建设项目".equals(project.getProjectName())) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
double totalCentralMoney = 0.0; |
|
|
|
double totalProvincialMoney = 0.0; |
|
|
|
for (HuzhouProjectinfo projectInfo : projectInfoList) { |
|
|
|
String projectId = projectInfo.getId(); |
|
|
|
// 1.获取当且任务所处的节点名称
|
|
|
|
String currentPointName = planinfoMapper.getCurrentPointName(projectId); |
|
|
|
projectInfo.setCurrentPointName(currentPointName); |
|
|
|
|
|
|
|
Double centralMoney = contractinfoMapper.getTotalCentralMoneyByProjectId(projectId); |
|
|
|
totalCentralMoney = (centralMoney != null ? centralMoney : 0.0);; |
|
|
|
Double provincialMoney = contractinfoMapper.getTotalProvincialMoneyByProjectId(projectId); |
|
|
|
totalProvincialMoney = (provincialMoney != null ? provincialMoney : 0.0); |
|
|
|
|
|
|
|
Boolean flag = this.queryHasSubProject(projectId); |
|
|
|
if (flag) { |
|
|
|
projectInfo.setHasSub("是"); |
|
|
|
LambdaQueryWrapper<HuzhouSubProjectinfo> queryWrapper = new LambdaQueryWrapper<>(); |
|
|
|
queryWrapper.eq(HuzhouSubProjectinfo::getProjectId, projectId); |
|
|
|
List<HuzhouSubProjectinfo> subProjects = subProjectinfoMapper.selectList(queryWrapper); |
|
|
|
List<String> subIds = subProjects.stream().map(HuzhouSubProjectinfo::getId).distinct().collect(Collectors.toList()); |
|
|
|
for (String subId : subIds) { |
|
|
|
Double subCentral = contractinfoMapper.getTotalCentralMoneyByProjectId(subId); |
|
|
|
Double subProvincial = contractinfoMapper.getTotalProvincialMoneyByProjectId(subId); |
|
|
|
|
|
|
|
totalCentralMoney += (subCentral != null ? subCentral : 0.0); |
|
|
|
totalProvincialMoney += (subProvincial != null ? subProvincial : 0.0); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
// 设置最终金额
|
|
|
|
projectInfo.setTotalCentralMoney(totalCentralMoney); |
|
|
|
projectInfo.setTotalProvincialMoney(totalProvincialMoney); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return projectInfoList; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void processProjectFundingRate(HuzhouProjectinfo projectInfo) { |
|
|
|
String projectId = projectInfo.getId(); |
|
|
@ -3193,37 +3256,33 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM |
|
|
|
} |
|
|
|
|
|
|
|
private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) { |
|
|
|
String projectName = projectInfo.getProjectName(); |
|
|
|
String projectId = projectInfo.getId(); |
|
|
|
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId); |
|
|
|
if (huzhouProjectinfoMoney == null || !hasActualContracts(projectId)) { |
|
|
|
Double rate = 0.0; |
|
|
|
projectInfo.setSuperiorFundPayRate(rate); |
|
|
|
}else { |
|
|
|
// 获取合同签订阶段填写的资金
|
|
|
|
// HuzhouProjectinfoMoney
|
|
|
|
HuzhouProjectinfoMoney projectinfoMoney = projectinfoMoneyMapper.selectById(projectId); |
|
|
|
HuzhouProjectinfoMoney projectInfoMoney = projectinfoMoneyMapper.selectById(projectId); |
|
|
|
|
|
|
|
// 获取合同金额,并设置默认值 0.0
|
|
|
|
Double contractCentralMoney = Optional.ofNullable(projectinfoMoney) |
|
|
|
.map(HuzhouProjectinfoMoney::getContractCentralMoney) |
|
|
|
.orElse(0.0); |
|
|
|
|
|
|
|
Double contractProvincialMoney = Optional.ofNullable(projectinfoMoney) |
|
|
|
.map(HuzhouProjectinfoMoney::getContractProvincialMoney) |
|
|
|
.orElse(0.0); |
|
|
|
if (projectInfoMoney == null || !hasActualContracts(projectId)) { |
|
|
|
// 如果没有资金信息或没有实际合同,则支付率设为 0.0
|
|
|
|
projectInfo.setSuperiorFundPayRate(0.0); |
|
|
|
} else { |
|
|
|
// 获取合同金额
|
|
|
|
Double contractCentralMoney = Optional.ofNullable(projectInfoMoney.getContractCentralMoney()).orElse(0.0); |
|
|
|
Double contractProvincialMoney = Optional.ofNullable(projectInfoMoney.getContractProvincialMoney()).orElse(0.0); |
|
|
|
|
|
|
|
// 计算实际支付的资金总额
|
|
|
|
// 获取实际支付资金 为 null 时默认 0.0
|
|
|
|
Map<String, Double> actualFunds = calculateActualFunds(projectId); |
|
|
|
Double centralMoney = Optional |
|
|
|
.ofNullable(actualFunds.get("centralMoney")) |
|
|
|
.orElse(0.0); |
|
|
|
|
|
|
|
// 安全获取实际资金,为 null 时默认 0.0
|
|
|
|
Double centralMoney = Optional.ofNullable(actualFunds.get("centralMoney")).orElse(0.0); |
|
|
|
Double provincialMoney = Optional.ofNullable(actualFunds.get("provincialMoney")).orElse(0.0); |
|
|
|
Double provincialMoney = Optional |
|
|
|
.ofNullable(actualFunds.get("provincialMoney")) |
|
|
|
.orElse(0.0); |
|
|
|
|
|
|
|
// 合同总金额 和 实际支付总金额
|
|
|
|
BigDecimal totalContractAmount = new BigDecimal(Double.toString(contractCentralMoney + contractProvincialMoney)); |
|
|
|
BigDecimal totalActualPayment = new BigDecimal(Double.toString(centralMoney + provincialMoney)); |
|
|
|
|
|
|
|
// 支付率初始化为 0.0
|
|
|
|
// 初始支付率为 0
|
|
|
|
BigDecimal rate = BigDecimal.ZERO; |
|
|
|
|
|
|
|
// 只有在合同金额大于 0 的情况下才计算并设置上级资金支付率
|
|
|
@ -3231,17 +3290,18 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM |
|
|
|
rate = totalActualPayment.divide(totalContractAmount, 4, RoundingMode.HALF_UP); // 保留4位小数
|
|
|
|
} |
|
|
|
|
|
|
|
// 格式化为百分比:保留两位小数的 double 类型
|
|
|
|
double formattedRate = rate.doubleValue(); // 如 0.8756
|
|
|
|
int percentageRate = (int) Math.round(formattedRate * 100); // 四舍五入为整数百分比,如 88
|
|
|
|
// 转换为百分比数值(保留两位小数)
|
|
|
|
//double percentValue = rate.doubleValue() * 100;
|
|
|
|
// 四舍五入取整数部分
|
|
|
|
double percentValue = Math.round(rate.doubleValue() * 100); |
|
|
|
String percentRateStr = String.format("%.2f%%", percentValue); |
|
|
|
|
|
|
|
// 日志记录:显示两位小数的百分比,如 "87.56%"
|
|
|
|
String percentRate = String.format("%.2f%%", formattedRate * 100); |
|
|
|
log.info("合同签订阶段填写的上级资金为: {}", totalContractAmount.doubleValue()); |
|
|
|
log.info("项目名称: {} ---- 上级资金支付率为: {}", projectInfo.getProjectName(), percentRate); |
|
|
|
// 设置到实体类中(保留两位小数的 double 值)
|
|
|
|
projectInfo.setSuperiorFundPayRate(percentValue); |
|
|
|
|
|
|
|
// 设置到实体类中(存储整数百分比)
|
|
|
|
projectInfo.setSuperiorFundPayRate((double) percentageRate); |
|
|
|
// 日志输出
|
|
|
|
log.info("合同签订阶段填写的上级资金为: {}", totalContractAmount); |
|
|
|
log.info("项目名称: {} ----> 上级资金支付率为: {}", projectName, percentRateStr); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|