Browse Source

新增需求项目评分信息,导入与导出

master
gjh 5 days ago
parent
commit
54b38b7da2
  1. 25
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ExportController.java
  2. 74
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java
  3. 19
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectScoreMapper.java
  4. 28
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectInfoExportDTO.java
  5. 15
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java
  6. 52
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectScore.java
  7. 61
      huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectScoreListener.java
  8. 16
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectScoreService.java
  9. 19
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java
  10. 29
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectScoreServiceImpl.java

25
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ExportController.java

@ -11,10 +11,13 @@ import com.easy.admin.modules.huzhou.dto.ProjectInfoExportDTO;
import com.easy.admin.modules.huzhou.dto.ProjectResultExportDTO;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.entity.ProjectScore;
import com.easy.admin.modules.huzhou.handler.CustomMergeStrategy;
import com.easy.admin.modules.huzhou.listener.ProjectManagerListener;
import com.easy.admin.modules.huzhou.listener.ProjectScoreListener;
import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService;
import com.easy.admin.modules.huzhou.service.ProjectManagerService;
import com.easy.admin.modules.huzhou.service.ProjectScoreService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
@ -48,6 +51,10 @@ public class ExportController {
@Resource
private IHuzhouProjectinfoService projectinfoService;
@Resource
private ProjectScoreService projectScoreService;
@PostMapping("/upload")
public void upload(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis();
@ -108,7 +115,10 @@ public class ExportController {
projectInfo.getCurrentStage(),
projectInfo.getTotalPercent(),
projectInfo.getSuperLeader(),
projectInfo.getReformName()))
projectInfo.getReformName(),
projectInfo.getScore(),
projectInfo.getRedFlagCount(),
projectInfo.getDetail()))
.collect(Collectors.toList());
// for (HuzhouProjectinfoExportDTO huzhouProjectinfoExportDTO : dtoList) {
@ -216,4 +226,17 @@ public class ExportController {
.sheet("项目成果")
.doWrite(dtoList);
}
@PostMapping("/uploadProjectScore")
public void uploadProjectScore(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis();
EasyExcel.read(file.getInputStream(), ProjectScore.class, new ProjectScoreListener(projectScoreService)).sheet().doRead();
response.setContentType("text/html;charset=utf8");
long t2 = System.currentTimeMillis();
response.getWriter().println("导入数据成功!,共用时:"+(t2-t1));
log.info("导入项目评分数据成功! 共用时:{}ms",(t2-t1));
}
}

74
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.easy.admin.auth.model.SysUser;
import com.easy.admin.common.api.vo.Result;
import com.easy.admin.common.core.exception.EasyException;
import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoMapper;
import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper;
import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper;
import com.easy.admin.modules.huzhou.dto.FieldInfoDTO;
@ -54,6 +55,9 @@ public class TestController {
@Autowired
private HuzhouSubProjectinfoMapper subProjectinfoMapper;
@Autowired
private HuzhouContractinfoMapper contractinfoMapper;
@GetMapping("/getContractInfo")
public Result<?> getProjectContractInfo(String projectId,String taskName){
// 查询存在的问题:根据提交的合同信息去查询 用户提交的 taskName可能更改,只能根据projectId查询,查询的数据是 有两中Flag区分
@ -214,70 +218,18 @@ public class TestController {
@GetMapping("/updateMoney")
public Result<?> updateMoney(String fieldChangeGroupid){
List<HuzhouFieldchangehistory> fieldChangeList = fieldchangehistoryService.getFieldchangeByGroupid(fieldChangeGroupid);
String projectId = fieldChangeList.get(0).getProjectid();
List<FieldInfoDTO> fieldInfoDTOList = new ArrayList<>();
for (HuzhouFieldchangehistory item : fieldChangeList) {
FieldInfoDTO targetDemo = new FieldInfoDTO(item.getFieldValue(), item.getNewvalue());
fieldInfoDTOList.add(targetDemo);
}
fieldInfoDTOList.forEach(item -> {
log.info("修改后的计划信息为{}-->{}",item.getFieldValue(),item.getNewvalue());
});
// 初始化一个Map来存储所有的Money值
Map<String, String> moneyValues = new HashMap<>();
List<String> keys = Arrays.asList("totalMoney", "centralMoney", "provincialMoney",
"cityMoney", "countyMoney", "selfMoney",
"payamount2023Money", "payamount2024Money",
"payamount2025Money");
keys.forEach(key -> moneyValues.put(key, null));
// 使用Stream API进行处理
Map<String, String> finalMoneyValues = fieldInfoDTOList.stream()
.filter(item -> keys.contains(item.getFieldValue()))
.collect(Collectors.toMap(
FieldInfoDTO::getFieldValue,
FieldInfoDTO::getNewvalue
));
// 更新moneyValues Map
moneyValues.putAll(finalMoneyValues);
moneyValues.forEach((key, value) -> log.info(key + ": " + value));
HuzhouProjectinfo projectInfo = projectinfoService.getById(projectId);
log.info("projectInfo:{}",projectInfo);
if (null != projectInfo) {
LambdaUpdateWrapper<HuzhouProjectinfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(HuzhouProjectinfo::getId, projectId);
updateWrapper.set(HuzhouProjectinfo::getTotalMoney, finalMoneyValues.get("totalMoney"));
updateWrapper.set(HuzhouProjectinfo::getCentralMoney, finalMoneyValues.get("centralMoney"));
updateWrapper.set(HuzhouProjectinfo::getProvincialMoney, finalMoneyValues.get("provincialMoney"));
updateWrapper.set(HuzhouProjectinfo::getCityMoney,finalMoneyValues.get("cityMoney"));
updateWrapper.set(HuzhouProjectinfo::getCountyMoney, finalMoneyValues.get("countyMoney"));
updateWrapper.set(HuzhouProjectinfo::getSelfMoney, finalMoneyValues.get("selfMoney"));
updateWrapper.set(HuzhouProjectinfo::getPayamount2023Money, finalMoneyValues.get("payamount2023Money"));
updateWrapper.set(HuzhouProjectinfo::getPayamount2024Money, finalMoneyValues.get("payamount2024Money"));
updateWrapper.set(HuzhouProjectinfo::getPayamount2025Money, finalMoneyValues.get("payamount2025Money"));
projectinfoService.update(updateWrapper);
} else {
LambdaUpdateWrapper<HuzhouSubProjectinfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(HuzhouSubProjectinfo::getId, projectId);
updateWrapper.set(HuzhouSubProjectinfo::getTotalMoney, finalMoneyValues.get("totalMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getCentralMoney, finalMoneyValues.get("centralMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getProvincialMoney, finalMoneyValues.get("provincialMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getCityMoney,finalMoneyValues.get("cityMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getCountyMoney, finalMoneyValues.get("countyMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getSelfMoney, finalMoneyValues.get("selfMoney"));
updateWrapper.set(HuzhouSubProjectinfo::getPayamount2023Money, finalMoneyValues.get("payamount2023Money"));
updateWrapper.set(HuzhouSubProjectinfo::getPayamount2024Money, finalMoneyValues.get("payamount2024Money"));
updateWrapper.set(HuzhouSubProjectinfo::getPayamount2025Money, finalMoneyValues.get("payamount2025Money"));
subProjectinfoMapper.update(null, updateWrapper);
}
return Result.OK("测试!");
@GetMapping("/addContractMoney")
public Result<?> addContractMoney(){
HuzhouContractinfo add = new HuzhouContractinfo();
add.setProjectId("1783670295257931778");
add.setTaskName("首付支付");
add.setFlag("实际");
contractinfoMapper.insert(add);
return Result.OK("新增合同金额!");
}
}

19
huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/ProjectScoreMapper.java

@ -0,0 +1,19 @@
package com.easy.admin.modules.huzhou.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.easy.admin.modules.huzhou.entity.ProjectScore;
/**
* @author gjh
* @description 针对表project_score(项目评分信息)的数据库操作Mapper
* @createDate 2025-05-09 11:12:04
* @Entity generator.domain.ProjectScore
*/
public interface ProjectScoreMapper extends BaseMapper<ProjectScore> {
}

28
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectInfoExportDTO.java

@ -1,5 +1,6 @@
package com.easy.admin.modules.huzhou.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;
@ -33,17 +34,42 @@ public class ProjectInfoExportDTO {
@ExcelProperty("项目整体进度(%)")
private String totalPercent;
/**
* 总分
*/
@ExcelProperty(value = "总分")
private String score;
/**
* 红旗数量
*/
@ExcelProperty(value = "红旗数量")
private String redFlagCount;
/**
* 评分细则
*/
@ExcelProperty(value = "评分细则")
private String detail;
public ProjectInfoExportDTO(String projectName,
Double superiorFundPayRate,
String currentStage,
String totalPercent,
String superLeader,
String reformName) {
String reformName,
String score,
String redFlagCount,
String detail) {
this.projectName = projectName;
this.superiorFundPayRate = superiorFundPayRate;
this.currentStage = currentStage;
this.totalPercent = totalPercent;
this.superLeader = superLeader;
this.reformName = reformName;
this.score = score;
this.redFlagCount = redFlagCount;
this.detail = detail;
}
}

15
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java

@ -230,7 +230,22 @@ public class HuzhouProjectinfo extends BaseEntity {
@TableField(exist = false)
private Double uploadFileRate;
/**
* 评分
*/
@TableField(exist = false)
private String score;
/**
* 红旗数量
*/
@TableField(exist = false)
private String redFlagCount;
/**
* 评分细节
*/
@TableField(exist = false)
private String detail;
}

52
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/ProjectScore.java

@ -0,0 +1,52 @@
package com.easy.admin.modules.huzhou.entity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 项目评分信息
* @TableName project_score
*/
@TableName(value ="project_score")
@Data
public class ProjectScore implements Serializable {
/**
* 唯一id
*/
@TableField(exist = false)
private Integer id;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 总分
*/
@ExcelProperty(value = "总分")
private String score;
/**
* 红旗数量
*/
@ExcelIgnore
private String redFlagCount;
/**
* 评分细则
*/
@ExcelIgnore
private String detail;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

61
huzhou/src/main/java/com/easy/admin/modules/huzhou/listener/ProjectScoreListener.java

@ -0,0 +1,61 @@
package com.easy.admin.modules.huzhou.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.easy.admin.modules.huzhou.entity.ProjectScore;
import com.easy.admin.modules.huzhou.service.ProjectScoreService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
/**
* 自定义监听器读数据
* @author gjh
*/
@Slf4j
public class ProjectScoreListener implements ReadListener<ProjectScore> {
private List<ProjectScore> list = new ArrayList<>();
/**
* 自己定义一个缓冲量
*/
private static final int BATCH_COUNT = 20;
@Autowired
private ProjectScoreService projectScoreService;
public ProjectScoreListener(ProjectScoreService projectScoreService) {
this.projectScoreService = projectScoreService;
}
/**
* 每读一行数据都会调用这个方法
*
* @param projectManager
* @param analysisContext
*/
@Override
public void invoke(ProjectScore projectManager, AnalysisContext analysisContext) {
// 读取一行数据就添加到集合
list.add(projectManager);
// 判断是否到达缓存量了
if (list.size() >= BATCH_COUNT){
// 操作数据库
projectScoreService.addData(list);
list = new ArrayList<>(BATCH_COUNT);
}
}
/**
* 读完整个excel之后再调用这个方法
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (list.size()>0){
projectScoreService.addData(list);
}
}
}

16
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/ProjectScoreService.java

@ -0,0 +1,16 @@
package com.easy.admin.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.easy.admin.modules.huzhou.entity.ProjectScore;
import java.util.List;
/**
* @author gjh
* @description 针对表project_score(项目评分信息)的数据库操作Service
* @createDate 2025-05-09 11:12:04
*/
public interface ProjectScoreService extends IService<ProjectScore> {
public void addData(List<ProjectScore> list);
}

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

@ -122,6 +122,9 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
@Autowired
private IHuzhouFieldchangehistoryService fieldchangehistoryService;
@Autowired
private ProjectScoreMapper projectScoreMapper;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@ -2746,6 +2749,10 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
// 获取所有项目信息
List<HuzhouProjectinfo> projectInfoList = this.list();
projectInfoList= projectInfoList.stream()
.filter(project -> !"-1".equals(project.getStage()))
.collect(Collectors.toList());
// 创建线程池
int poolSize = Runtime.getRuntime().availableProcessors(); // 根据处理器数量设置线程池大小
@ -2758,7 +2765,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
for (final HuzhouProjectinfo projectInfo : projectInfoList) {
futures.add(executorService.submit(() -> {
String projectId = projectInfo.getId();
String projectName = projectInfo.getProjectName();
// 1.填充上级资金执行率
fillSuperiorFundPayRate(projectInfo);
@ -2778,7 +2785,15 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
} else {
projectInfo.setTotalPercent("0");
}
// 4.设置评分
List<ProjectScore> projectScores = projectScoreMapper.selectList(null);
for (ProjectScore projectScore : projectScores) {
if (projectScore.getProjectName().equals(projectName)) {
projectInfo.setScore(projectScore.getScore());
projectInfo.setRedFlagCount(projectScore.getRedFlagCount());
projectInfo.setDetail(projectScore.getDetail());
}
}
return projectInfo;
}));
}

29
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/ProjectScoreServiceImpl.java

@ -0,0 +1,29 @@
package com.easy.admin.modules.huzhou.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.easy.admin.modules.huzhou.dao.ProjectScoreMapper;
import com.easy.admin.modules.huzhou.entity.ProjectScore;
import com.easy.admin.modules.huzhou.service.ProjectScoreService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author gjh
* @description 针对表project_score(项目评分信息)的数据库操作Service实现
* @createDate 2025-05-09 11:12:04
*/
@Service
public class ProjectScoreServiceImpl extends ServiceImpl<ProjectScoreMapper, ProjectScore>
implements ProjectScoreService {
@Override
public void addData(List<ProjectScore> list) {
this.saveBatch(list);
}
}
Loading…
Cancel
Save