Browse Source

判空优化

master
gjh 1 week ago
parent
commit
5d1ac8b3bf
  1. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java
  2. 51
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java

@ -427,7 +427,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
private void checkVariable(String contractMoneyFieldsValue, List<HuzhouContractinfo> 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<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectId);
@ -438,6 +439,7 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
throw new EasyException("请先完成终验申请!");
}
}
if (CollectionUtil.isEmpty(contractList) && taskName.equals("合同签订")){
throw new EasyException("合同信息不能为空!");
}

51
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

@ -3200,24 +3200,47 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
projectInfo.setSuperiorFundPayRate(rate);
}else {
// 获取合同签订阶段填写的资金
Double contractCentralMoney = projectinfoMoneyMapper.selectById(projectId).getContractCentralMoney();
Double contractProvincialMoney = projectinfoMoneyMapper.selectById(projectId).getContractProvincialMoney();
// HuzhouProjectinfoMoney
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);
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));
// 安全获取实际资金,为 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);
}
}

Loading…
Cancel
Save