diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java index a0d3575..3a01a83 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java @@ -3,6 +3,8 @@ package com.easy.admin.modules.huzhou.dto; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; +import java.util.List; + @Data public class ContractPayInfoDTO { diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java index dac41aa..9b7c49e 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java @@ -47,6 +47,32 @@ public class ProjectTimeOutInfoExportDTO { private int updateCount; + + @ExcelProperty("评分") + private String score; + + + @ExcelProperty("上传文件评分") + private Double uploadFileRateScore; + + + @ExcelProperty("项目修改次数评分") + private Double updateCountScore; + + @ExcelProperty("项目超时支付情况评分") + private Double projectTimeOutSituationScore; + + + @ExcelProperty("项目超时支付次数评分") + private Double timeOutPayCountScore; + + + @ExcelProperty("上级资金使用率评分") + @TableField(exist = false) + private Double superiorFundPayRateScore; + + + public ProjectTimeOutInfoExportDTO(String projectName, String dutyWorkplace, String reformName, diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java index 67a63f3..9f5c6d4 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java @@ -221,7 +221,7 @@ public class HuzhouProjectinfo extends BaseEntity { private String projectTimeOutSituation; /** - * 超时支付情况(天数) + * 超时支付情况 */ @TableField(exist = false) private String timeOutPaySituation; @@ -231,7 +231,7 @@ public class HuzhouProjectinfo extends BaseEntity { private Double uploadFileRate; /** - * 评分 + * 评分(总分) */ @TableField(exist = false) private String score; @@ -247,5 +247,37 @@ public class HuzhouProjectinfo extends BaseEntity { */ @TableField(exist = false) private String detail; + + /** + * 上传文件评分 + */ + @TableField(exist = false) + private Double uploadFileRateScore; + + /** + * 项目修改次数评分 + */ + @TableField(exist = false) + private Double updateCountScore; + + /** + * 项目超时支付情况评分 + */ + @TableField(exist = false) + private Double projectTimeOutSituationScore; + + + /** + * 项目超时支付次数评分 + */ + @TableField(exist = false) + private Double timeOutPayCountScore; + + /** + * 上级资金使用率评分 + */ + @TableField(exist = false) + private Double superiorFundPayRateScore; + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java index 01f631c..9134bde 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java @@ -575,9 +575,10 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl= 7) { + if (daysDifference >= 1) { timeOutPayCount++; } + log.info("超时支付天数:{}", daysDifference); } paymentIndex++; diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java index c2881b7..2b963cb 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java @@ -3,6 +3,7 @@ package com.easy.admin.modules.huzhou.service.impl; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -2747,7 +2748,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl projectInfoList = this.list(); projectInfoList= projectInfoList.stream() .filter(project -> !"-1".equals(project.getStage())) @@ -2761,7 +2762,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl> futures = new ArrayList<>(); - // 提交任务给线程池 + // 2.封装信息提交任务给线程池 for (final HuzhouProjectinfo projectInfo : projectInfoList) { futures.add(executorService.submit(() -> { String projectId = projectInfo.getId(); @@ -2798,7 +2799,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl Optional.ofNullable(p.getReformName()).orElse("")) @@ -2879,10 +2880,19 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl超时支付次数为:{}", projectInfo.getProjectName(),projectInfo.getUpdateCount()); + + //TODO 7.评分 + fillScore(projectInfo); + String timeOutPaySituation = tmp.getTimeOutPaySituation(); + if (containsTimeoutGreaterThanDays(timeOutPaySituation, 7)) { + projectInfo.setTimeOutPayCountScore(0.0); + } + + } // 按照责任工作地点排序 projectInfoList = projectInfoList.stream() @@ -2899,7 +2909,25 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl threshold) { + return true; + } + } + } + return false; + } @Override public ProjectResultExportDTO queryProjectResultCount() { ProjectResultExportDTO result = new ProjectResultExportDTO(); @@ -2966,6 +2994,127 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl 90 && uploadFileRate < 100) { + uploadFileRateScore = 4.0; + } else if (uploadFileRate > 80 && uploadFileRate <= 90) { + uploadFileRateScore = 3.0; + } else if (uploadFileRate <= 80) { + uploadFileRateScore = 1.0; + } + } + //1.文件上传率得分 + projectInfo.setUploadFileRateScore(uploadFileRateScore); + log.info("文件上传率:{}-->文件上传率得分为:{}", uploadFileRate, uploadFileRateScore); + + int updateCount = projectInfo.getUpdateCount(); + Double updateCountScore = 0.0; + if (updateCount == 0) { + updateCountScore = 5.0; + } else if (updateCount == 1) { + updateCountScore = 4.0; + } else if (updateCount == 2) { + updateCountScore = 3.0; + } else { + updateCountScore = 0.0; + } + //2.修改次数得分 + projectInfo.setUpdateCountScore(updateCountScore); + log.info("修改次数:{}-->得分为:{}", updateCount, updateCountScore); + + //超时支付情况(天数) + String projectTimeOutSituation = projectInfo.getProjectTimeOutSituation(); + Double projectTimeOutSituationScore = 0.0; + if (StrUtil.isNotEmpty(projectTimeOutSituation)) { + if (projectTimeOutSituation.equals("未超时")) { + projectTimeOutSituationScore = 12.0; + } else { + try { + int days = Integer.parseInt(projectTimeOutSituation); + if (days >= 1 && days <= 15) { + projectTimeOutSituationScore = 8.0; + } else if (days >= 16 && days <= 30) { + projectTimeOutSituationScore = 4.0; + } else if (days > 30) { + projectTimeOutSituationScore = 0.0; + } + // 如果是 0 或负数,可以按"未超时"处理或视为非法数据,默认保持为 0 分 + } catch (NumberFormatException e) { + // 非法输入,不是数字也不是“未超时”,可记录日志或默认得分为 0 + projectTimeOutSituationScore = 0.0; + } + } + // 3.超时支付情况(天数)得分 + projectInfo.setProjectTimeOutSituationScore(projectTimeOutSituationScore); + log.info("超时支付情况(天数):{}-->得分为:{}", projectTimeOutSituation, projectTimeOutSituationScore); + + // 4.超时支付次数评分 timeOutPayCountScore + int timeOutPayCount = projectInfo.getTimeOutPayCount(); + Double timeOutPayCountScore = 0.0; + if (timeOutPayCount == 0) { + timeOutPayCountScore = 12.0; + } else if (timeOutPayCount == 1) { + timeOutPayCountScore = 8.0; + } else if (timeOutPayCount == 2) { + timeOutPayCountScore = 4.0; + } else { + timeOutPayCountScore = 0.0; + } + projectInfo.setTimeOutPayCountScore(timeOutPayCountScore); + log.info("超时支付次数:{}-->得分为:{}", timeOutPayCount, timeOutPayCountScore); + } + int currentMonth = java.time.LocalDate.now().getMonthValue(); + projectInfo.setSuperiorFundPayRateScore(calculateSuperiorFundPayRateScore(projectInfo.getSuperiorFundPayRate(),currentMonth)); + log.info("整体资金支付情况(%):{}-->得分为:{}", projectInfo.getSuperiorFundPayRate(), projectInfo.getSuperiorFundPayRateScore()); + // 设置总分 + double score = Optional.ofNullable(projectInfo.getUploadFileRateScore()) .orElse(0.0) + + Optional.ofNullable(projectInfo.getUpdateCountScore()) .orElse(0.0) + + Optional.ofNullable(projectInfo.getProjectTimeOutSituationScore()).orElse(0.0) + + Optional.ofNullable(projectInfo.getTimeOutPayCountScore()) .orElse(0.0) + + Optional.ofNullable(projectInfo.getSuperiorFundPayRateScore()) .orElse(0.0); + projectInfo.setScore( Double.toString(score)); + log.info("总分:{}", score); + } + private Double calculateSuperiorFundPayRateScore(Double x, int currentMonth) { + if (x == null) return 0.0; + + double y; + if (currentMonth >= 5 && currentMonth <= 6) { + y = 40.0; + } else if (currentMonth >= 7 && currentMonth <= 10) { + y = 80.0; + } else if (currentMonth >= 11 && currentMonth <= 12) { + y = 100.0; + } else { + return 0.0; // 非评分周期,默认不得分 + } + + if (x >= y) { + return 12.0; + } + + int diff = (int) Math.abs(x - y); + + if (diff <= 5) { + return 12.0; + } else if (diff <= 10) { + return 8.0; + } else if (diff <= 20) { + return 4.0; + } else { + return 0.0; + } + } + + private boolean hasActualContracts(String projectId) { LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际");