|
@ -493,25 +493,54 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf |
|
|
List<HuzhouContractinfo> planContractInfoList = contractinfoService.getPlanContractinfoByprojectId(contractInfo.getProjectId()); |
|
|
List<HuzhouContractinfo> planContractInfoList = contractinfoService.getPlanContractinfoByprojectId(contractInfo.getProjectId()); |
|
|
// 合同实际金额(contractList) <= 计划金额 (planContractInfoList)
|
|
|
// 合同实际金额(contractList) <= 计划金额 (planContractInfoList)
|
|
|
// [{"projectId":"1828610662885105665","payDate":"2025-02-13","taskName":"首付支付","totalMoney":600,"centralMoney":600,"provincialMoney":0,"cityMoney":0,"countyMoney":0,"selfMoney":0}]
|
|
|
// [{"projectId":"1828610662885105665","payDate":"2025-02-13","taskName":"首付支付","totalMoney":600,"centralMoney":600,"provincialMoney":0,"cityMoney":0,"countyMoney":0,"selfMoney":0}]
|
|
|
if (planContractInfoList.size() > 0){ |
|
|
|
|
|
|
|
|
if (planContractInfoList.size() > 0) { |
|
|
// 存在计划金额则比较实际金额
|
|
|
// 存在计划金额则比较实际金额
|
|
|
Map<String, HuzhouContractinfo> realContractMap = new HashMap<>(); |
|
|
Map<String, List<HuzhouContractinfo>> realContractMap = new HashMap<>(); |
|
|
for (HuzhouContractinfo realContract : contractList) { |
|
|
for (HuzhouContractinfo realContract : contractList) { |
|
|
realContractMap.put(realContract.getTaskName(), realContract); |
|
|
// 使用 computeIfAbsent 方法确保每个任务名称都有一个对应的列表
|
|
|
|
|
|
realContractMap.computeIfAbsent(realContract.getTaskName(), k -> new ArrayList<>()) |
|
|
|
|
|
.add(realContract); // 将当前合同添加到列表中
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 遍历计划合同信息列表,并比较实际金额和计划金额
|
|
|
for (HuzhouContractinfo planContractInfo : planContractInfoList) { |
|
|
for (HuzhouContractinfo planContractInfo : planContractInfoList) { |
|
|
HuzhouContractinfo realContract = realContractMap.get(planContractInfo.getTaskName()); |
|
|
String taskNameFromContract = planContractInfo.getTaskName(); |
|
|
if ( realContract != null){ |
|
|
List<HuzhouContractinfo> realContracts = realContractMap.get(taskNameFromContract); |
|
|
if ( realContract.getTotalMoney() >planContractInfo.getTotalMoney() ) { |
|
|
|
|
|
|
|
|
if (realContracts != null && !realContracts.isEmpty()) { |
|
|
|
|
|
// 对实际合同信息列表按 payDate 排序
|
|
|
|
|
|
realContracts.sort(Comparator.comparing(HuzhouContractinfo::getPayDate)); |
|
|
|
|
|
|
|
|
|
|
|
// 假设计划合同信息列表也需要按某种顺序排序,这里假设也是按 payDate
|
|
|
|
|
|
List<HuzhouContractinfo> sortedPlanContracts = planContractInfoList.stream() |
|
|
|
|
|
.filter(contract -> contract.getTaskName().equals(taskNameFromContract)) |
|
|
|
|
|
.sorted(Comparator.comparing(HuzhouContractinfo::getPayDate)) |
|
|
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
|
|
|
|
// 同步遍历两个列表进行比较
|
|
|
|
|
|
for (int i = 0; i < Math.min(realContracts.size(), sortedPlanContracts.size()); i++) { |
|
|
|
|
|
HuzhouContractinfo realContract = realContracts.get(i); |
|
|
|
|
|
HuzhouContractinfo planContract = sortedPlanContracts.get(i); |
|
|
|
|
|
|
|
|
|
|
|
Double RealTotalMoney = realContract.getTotalMoney(); |
|
|
|
|
|
Double PlanTotalMoney = planContract.getTotalMoney(); |
|
|
|
|
|
log.info("real:{}--->plan:{}", RealTotalMoney, PlanTotalMoney); |
|
|
|
|
|
if (RealTotalMoney > PlanTotalMoney) { |
|
|
throw new EasyException("合同实际金额大于计划金额!请重新填写合同信息 "); |
|
|
throw new EasyException("合同实际金额大于计划金额!请重新填写合同信息 "); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果实际合同数量多于计划合同数量,也可以在此处处理这种情况
|
|
|
|
|
|
if (realContracts.size() > sortedPlanContracts.size()) { |
|
|
|
|
|
throw new EasyException("存在未匹配的实际合同,请检查输入数据!"); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
log.warn("未找到任务名称 '{}' 的实际合同信息", taskNameFromContract); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return flag; |
|
|
return flag; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|