diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java index ddc6c8b..53bd799 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java @@ -427,7 +427,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl contractList, HuzhouPlaninfo planinfo, String taskName) throws JsonProcessingException { // 增加终验申请校验 - if ("终验阶段".equals(taskName)){ + HuzhouProjectinfo huzhouProjectinfo = projectinfoService.getById(planinfo.getProjectId()); + if ("终验阶段".equals(taskName) && huzhouProjectinfo.getAdminDivision().equals("市本级") ){ String projectId = planinfo.getProjectId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectId); @@ -438,6 +439,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl actualFunds = calculateActualFunds(projectId); - Double centralMoney = actualFunds.get("centralMoney"); - Double provincialMoney = actualFunds.get("provincialMoney"); - // 计算并设置上级资金支付率 - Double rate = (centralMoney + provincialMoney) / (contractCentralMoney + contractProvincialMoney); - BigDecimal bd = new BigDecimal(Double.toString(rate)); - bd = bd.setScale(2, RoundingMode.HALF_UP); - double formattedRate = bd.doubleValue(); - // 转换为百分比形式 - int percentageRate = (int)(formattedRate * 100); - // 日志校验 - String percentRate = String.format("%.0f%%", rate * 100); - log.info("合同签订阶段填写的上级资金为资金:{}",(contractCentralMoney + contractProvincialMoney)); - log.info("项目名称:{}----上级资金支付率为:{}", projectInfo.getProjectName(), percentRate); + // 安全获取实际资金,为 null 时默认 0.0 + Double centralMoney = Optional.ofNullable(actualFunds.get("centralMoney")).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 + BigDecimal rate = BigDecimal.ZERO; + + // 只有在合同金额大于 0 的情况下才计算并设置上级资金支付率 + 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); } }