|
@ -3200,24 +3200,47 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM |
|
|
projectInfo.setSuperiorFundPayRate(rate); |
|
|
projectInfo.setSuperiorFundPayRate(rate); |
|
|
}else { |
|
|
}else { |
|
|
// 获取合同签订阶段填写的资金
|
|
|
// 获取合同签订阶段填写的资金
|
|
|
Double contractCentralMoney = projectinfoMoneyMapper.selectById(projectId).getContractCentralMoney(); |
|
|
// HuzhouProjectinfoMoney
|
|
|
Double contractProvincialMoney = projectinfoMoneyMapper.selectById(projectId).getContractProvincialMoney(); |
|
|
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); |
|
|
|
|
|
|
|
|
// 计算实际支付的资金总额
|
|
|
// 计算实际支付的资金总额
|
|
|
Map<String, Double> actualFunds = calculateActualFunds(projectId); |
|
|
Map<String, Double> actualFunds = calculateActualFunds(projectId); |
|
|
|
|
|
|
|
|
Double centralMoney = actualFunds.get("centralMoney"); |
|
|
// 安全获取实际资金,为 null 时默认 0.0
|
|
|
Double provincialMoney = actualFunds.get("provincialMoney"); |
|
|
Double centralMoney = Optional.ofNullable(actualFunds.get("centralMoney")).orElse(0.0); |
|
|
// 计算并设置上级资金支付率
|
|
|
Double provincialMoney = Optional.ofNullable(actualFunds.get("provincialMoney")).orElse(0.0); |
|
|
Double rate = (centralMoney + provincialMoney) / (contractCentralMoney + contractProvincialMoney); |
|
|
|
|
|
BigDecimal bd = new BigDecimal(Double.toString(rate)); |
|
|
// 合同总金额 和 实际支付总金额
|
|
|
bd = bd.setScale(2, RoundingMode.HALF_UP); |
|
|
BigDecimal totalContractAmount = new BigDecimal(Double.toString(contractCentralMoney + contractProvincialMoney)); |
|
|
double formattedRate = bd.doubleValue(); |
|
|
BigDecimal totalActualPayment = new BigDecimal(Double.toString(centralMoney + provincialMoney)); |
|
|
// 转换为百分比形式
|
|
|
|
|
|
int percentageRate = (int)(formattedRate * 100); |
|
|
// 支付率初始化为 0.0
|
|
|
// 日志校验
|
|
|
BigDecimal rate = BigDecimal.ZERO; |
|
|
String percentRate = String.format("%.0f%%", rate * 100); |
|
|
|
|
|
log.info("合同签订阶段填写的上级资金为资金:{}",(contractCentralMoney + contractProvincialMoney)); |
|
|
// 只有在合同金额大于 0 的情况下才计算并设置上级资金支付率
|
|
|
log.info("项目名称:{}----上级资金支付率为:{}", projectInfo.getProjectName(), percentRate); |
|
|
if (totalContractAmount.compareTo(BigDecimal.ZERO) > 0) { |
|
|
|
|
|
rate = totalActualPayment.divide(totalContractAmount, 4, RoundingMode.HALF_UP); // 保留4位小数
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 格式化为百分比:保留两位小数的 double 类型
|
|
|
|
|
|
double formattedRate = rate.doubleValue(); // 如 0.8756
|
|
|
|
|
|
int percentageRate = (int) Math.round(formattedRate * 100); // 四舍五入为整数百分比,如 88
|
|
|
|
|
|
|
|
|
|
|
|
// 日志记录:显示两位小数的百分比,如 "87.56%"
|
|
|
|
|
|
String percentRate = String.format("%.2f%%", formattedRate * 100); |
|
|
|
|
|
log.info("合同签订阶段填写的上级资金为: {}", totalContractAmount.doubleValue()); |
|
|
|
|
|
log.info("项目名称: {} ---- 上级资金支付率为: {}", projectInfo.getProjectName(), percentRate); |
|
|
|
|
|
|
|
|
|
|
|
// 设置到实体类中(存储整数百分比)
|
|
|
projectInfo.setSuperiorFundPayRate((double) percentageRate); |
|
|
projectInfo.setSuperiorFundPayRate((double) percentageRate); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|