Browse Source

上传合同金额校验,针对同阶段多笔交易进行修改

master
gjh 3 months ago
parent
commit
c5f811ea0d
  1. 47
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java
  2. 98
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

47
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java

@ -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() ) {
throw new EasyException("合同实际金额大于计划金额!请重新填写合同信息 "); 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("合同实际金额大于计划金额!请重新填写合同信息 ");
}
}
// 如果实际合同数量多于计划合同数量,也可以在此处处理这种情况
if (realContracts.size() > sortedPlanContracts.size()) {
throw new EasyException("存在未匹配的实际合同,请检查输入数据!");
} }
} else {
log.warn("未找到任务名称 '{}' 的实际合同信息", taskNameFromContract);
} }
} }
} }
} }
return flag; return flag;
} }

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

@ -2815,63 +2815,57 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
@Override @Override
public List<HuzhouProjectinfo> queryProjectTimeOutInfo() { public List<HuzhouProjectinfo> queryProjectTimeOutInfo() {
// 记录开始时间 try {
long startTime = System.currentTimeMillis(); // 记录开始时间
// 获取所有项目信息 long startTime = System.currentTimeMillis();
List<HuzhouProjectinfo> projectInfoList = this.list(); // 获取所有项目信息
for (HuzhouProjectinfo projectInfo : projectInfoList) { List<HuzhouProjectinfo> projectInfoList = this.list();
String projectId = projectInfo.getId(); for (HuzhouProjectinfo projectInfo : projectInfoList) {
// 1.获取当且任务所处的节点名称 String projectId = projectInfo.getId();
String currentPointName = planinfoMapper.getCurrentPointName(projectId); // 1.获取当且任务所处的节点名称
if (StringUtils.isNotBlank(currentPointName)) { String currentPointName = planinfoMapper.getCurrentPointName(projectId);
projectInfo.setCurrentPointName(currentPointName); if (StringUtils.isNotBlank(currentPointName)) {
LambdaQueryWrapper<HuzhouPlaninfo> qw = new LambdaQueryWrapper<>(); projectInfo.setCurrentPointName(currentPointName);
qw.eq(HuzhouPlaninfo::getTaskName, currentPointName) LambdaQueryWrapper<HuzhouPlaninfo> qw = new LambdaQueryWrapper<>();
.eq(HuzhouPlaninfo::getProjectId, projectId); qw.eq(HuzhouPlaninfo::getTaskName, currentPointName)
HuzhouPlaninfo planInfo = planinfoMapper.selectOne(qw); .eq(HuzhouPlaninfo::getProjectId, projectId);
HuzhouPlaninfo planInfo = planinfoMapper.selectOne(qw);
Date actualStartTime = planInfo.getActualStartTime();
Date scheduledEndTime = planInfo.getScheduledEndTime(); Date actualStartTime = planInfo.getActualStartTime();
if (actualStartTime != null) { Date scheduledEndTime = planInfo.getScheduledEndTime();
LocalDate realUpFileDate = actualStartTime.toInstant().atZone(java.time.ZoneId.of("Asia/Shanghai")).toLocalDate(); if (actualStartTime != null) {
LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(java.time.ZoneId.of("Asia/Shanghai")).toLocalDate(); LocalDate realUpFileDate = actualStartTime.toInstant().atZone(java.time.ZoneId.of("Asia/Shanghai")).toLocalDate();
// 计算相差天数 LocalDate scheduledEndDate = scheduledEndTime.toInstant().atZone(java.time.ZoneId.of("Asia/Shanghai")).toLocalDate();
long daysBetween = ChronoUnit.DAYS.between(scheduledEndDate, realUpFileDate); // 计算相差天数
if (daysBetween > 0) { long daysBetween = ChronoUnit.DAYS.between(scheduledEndDate, realUpFileDate);
projectInfo.setProjectTimeOutSituation(String.valueOf(daysBetween)); if (daysBetween > 0) {
log.info("项目:{}->当且节点:{}->超时完成天数为:{}", projectInfo.getProjectName(),currentPointName, daysBetween); projectInfo.setProjectTimeOutSituation(String.valueOf(daysBetween));
log.info("计划结束时间为:{}->实际开始提交时间为:{}", scheduledEndDate,realUpFileDate); log.info("项目:{}->当且节点:{}->超时完成天数为:{}", projectInfo.getProjectName(),currentPointName, daysBetween);
}else { log.info("计划结束时间为:{}->实际开始提交时间为:{}", scheduledEndDate,realUpFileDate);
projectInfo.setProjectTimeOutSituation("未超时"); } else {
projectInfo.setProjectTimeOutSituation("未超时");
}
} }
} else {
projectInfo.setCurrentPointName("未执行");
} }
} else {
projectInfo.setCurrentPointName("未执行");
}
// 2.设置整体资金支付情况:上级资金支付比例=(实际支付上级资金/计划支付上级资金)*100% // 其他设置操作...
fillSuperiorFundPayRate(projectInfo); }
// 按照责任工作地点排序
projectInfoList = projectInfoList.stream()
.sorted(Comparator.comparing(HuzhouProjectinfo::getReformName))
.collect(Collectors.toList());
// 3.设置节点资金支付情况:资金支付超时时间=实际支付时间-计划支付时间 long endTime = System.currentTimeMillis();
ContractPayInfoDTO tmp = contractinfoService.queryContractPaySituation(projectInfo); long duration = endTime - startTime;
projectInfo.setTimeOutPaySituation(tmp.getTimeOutPaySituation()); log.info("方法执行耗时:{} ms", duration);
// 4.设置超时支付次数:超时支付次数=超时完成天数/7 return projectInfoList;
projectInfo.setTimeOutPayCount(tmp.getTimeOutPayCount()); } catch (Exception e) {
// 5.设置文件上传占用率 // 记录错误日志
projectInfo.setUploadFileRate(planinfofileService.getUploadFileRate(projectId)); log.error("查询时发生错误: ", e);
// 6设置变更次数 throw new EasyException("导出异常:"+e);
projectInfo.setUpdateCount(fieldchangehistoryService.queryUpdateCount(projectId));
log.info("项目:{}->超时支付次数为:{}", projectInfo.getProjectName(),projectInfo.getUpdateCount());
} }
// 按照责任工作地点排序
projectInfoList = projectInfoList.stream()
.sorted(Comparator.comparing(HuzhouProjectinfo::getReformName))
.collect(Collectors.toList());
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
log.info("方法执行耗时:{} ms",duration);
return projectInfoList;
} }
@Override @Override

Loading…
Cancel
Save