Browse Source

超时信息接口导出:超时情况,整体资金支付,超时支付次数,节点资金支付情况

master
gjh 8 hours ago
parent
commit
c3db883f23
  1. 2
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouContractinfoController.java
  2. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlanController.java
  3. 7
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java
  4. 67
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java
  5. 49
      huzhou/src/main/java/com/easy/admin/modules/huzhou/converter/SuperLeaderConverter.java
  6. 11
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java
  7. 18
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java
  8. 58
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java
  9. 25
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectinfoExportDTO.java
  10. 36
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java
  11. 5
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java
  12. 3
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfoService.java
  13. 2
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java
  14. 65
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouContractinfoServiceImpl.java
  15. 3
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java
  16. 169
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java
  17. 156
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

2
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouContractinfoController.java

@ -92,7 +92,7 @@ public class HuzhouContractinfoController {
// 获取合同信息(计划) // 获取合同信息(计划)
@GetMapping("/getContractinfoByProjectId") @GetMapping("/getContractinfoByProjectId")
public Result<?> getContractinfoByProjectId(String projectid){ public Result<?> getContractinfoByProjectId(String projectid){
List<HuzhouContractinfo> contractinfoByprojectId = contractinfoService.getContractinfoByprojectId(projectid); List<HuzhouContractinfo> contractinfoByprojectId = contractinfoService.getPlanContractinfoByprojectId(projectid);
return Result.ok(contractinfoByprojectId); return Result.ok(contractinfoByprojectId);
} }

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlanController.java

@ -130,6 +130,10 @@ public class HuzhouPlanController {
return Result.ok(planInfoMainTimelineList); return Result.ok(planInfoMainTimelineList);
} }
/** /**
* 根据计划id获取当前计划阶段的数据 * 根据计划id获取当前计划阶段的数据
* @param planinfoid 计划id * @param planinfoid 计划id

7
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java

@ -135,6 +135,13 @@ public class HuzhouProjectController {
} }
@GetMapping("/queryProjectTimeOutInfo")
public Result<?> queryProjectTimeOutInfo(){
//获取项目入库数据
List<HuzhouProjectinfo> rs = projectinfoService.queryProjectTimeOutInfo();
return Result.OK(rs);
}
/** /**
* 根据项目id获取项目信息 * 根据项目id获取项目信息

67
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java

@ -6,10 +6,9 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.easy.admin.common.api.vo.Result; import com.easy.admin.common.api.vo.Result;
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO; import com.easy.admin.modules.huzhou.dto.ProjectTimeOutInfoExportDTO;
import com.easy.admin.modules.huzhou.dto.ProjectinfoExportDTO;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfoMoney;
import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo;
import com.easy.admin.modules.huzhou.entity.ProjectManager; import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.handler.CustomMergeStrategy; import com.easy.admin.modules.huzhou.handler.CustomMergeStrategy;
import com.easy.admin.modules.huzhou.listener.ProjectManagerListener; import com.easy.admin.modules.huzhou.listener.ProjectManagerListener;
@ -29,7 +28,6 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -100,13 +98,14 @@ public class ProjectManagerController {
WriteCellStyle bodyStyle = new WriteCellStyle(); WriteCellStyle bodyStyle = new WriteCellStyle();
bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); ; bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); ;
bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER); bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 封装数据
List<HuzhouProjectinfo> projectInfoList = projectinfoService.queryProjectWithFundPay(); List<HuzhouProjectinfo> projectInfoList = projectinfoService.queryProjectWithFundPay();
List<HuzhouProjectinfoExportDTO> dtoList = projectInfoList.stream() List<ProjectinfoExportDTO> dtoList = projectInfoList.stream()
.map(projectInfo -> new HuzhouProjectinfoExportDTO(projectInfo.getProjectName(), .map(projectInfo -> new ProjectinfoExportDTO(projectInfo.getProjectName(),
projectInfo.getSuperiorFundPayRate(), projectInfo.getSuperiorFundPayRate(),
projectInfo.getCurrentStage(), projectInfo.getCurrentStage(),
projectInfo.getTotalPercent(), projectInfo.getTotalPercent(),
projectInfo.getDutyWorkplace(), projectInfo.getSuperLeader(),
projectInfo.getReformName())) projectInfo.getReformName()))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -116,22 +115,66 @@ public class ProjectManagerController {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
String flag = "上级资金执行率汇总"; String preFileName = "项目看板";
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
LocalDateTime currentDateTime = LocalDateTime.now(); LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = currentDateTime.format(formatter); String formattedDateTime = currentDateTime.format(formatter);
System.out.println("当前日期: " + formattedDateTime); System.out.println("当前日期: " + formattedDateTime);
String fileName = URLEncoder.encode( flag+formattedDateTime, "UTF-8") String fileName = URLEncoder.encode( preFileName+formattedDateTime, "UTF-8")
.replaceAll("\\+", "%20"); .replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), HuzhouProjectinfoExportDTO.class) EasyExcel.write(response.getOutputStream(), ProjectinfoExportDTO.class)
.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, bodyStyle)) .registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, bodyStyle))
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.registerWriteHandler(new CustomMergeStrategy(Arrays.asList("dutyWorkplace","reformName"))) .registerWriteHandler(new CustomMergeStrategy(Arrays.asList("superLeader","reformName")))
.sheet("上级资金执行率汇总") .sheet("项目看板")
.doWrite(dtoList); .doWrite(dtoList);
} }
@GetMapping("/timeOutInfoExport")
public void timeOutInfoExport(HttpServletResponse response) throws IOException {
// 设置表头样式
WriteCellStyle headStyle = new WriteCellStyle();
headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置表格内容
WriteCellStyle bodyStyle = new WriteCellStyle();
bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); ;
bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 封装数据
List<HuzhouProjectinfo> projectInfoList = projectinfoService.queryProjectTimeOutInfo();
List<ProjectTimeOutInfoExportDTO> dtoList = projectInfoList.stream()
.map(projectInfo -> new ProjectTimeOutInfoExportDTO(projectInfo.getProjectName(),
projectInfo.getDutyWorkplace(),
projectInfo.getReformName(),
projectInfo.getSuperLeader(),
projectInfo.getCurrentPointName(),
projectInfo.getSuperiorFundPayRate(),
projectInfo.getTimeOutPayCount(),
projectInfo.getTimeOutPaySituation()))
.collect(Collectors.toList());
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String preFileName = "超时情况";
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
LocalDateTime currentDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = currentDateTime.format(formatter);
System.out.println("当前日期: " + formattedDateTime);
String fileName = URLEncoder.encode( preFileName+formattedDateTime, "UTF-8")
.replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), ProjectTimeOutInfoExportDTO.class)
.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, bodyStyle))
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
//.registerWriteHandler(new CustomMergeStrategy(Arrays.asList("superLeader","reformName")))
.sheet("超时情况")
.doWrite(dtoList);
}
} }

49
huzhou/src/main/java/com/easy/admin/modules/huzhou/converter/SuperLeaderConverter.java

@ -0,0 +1,49 @@
package com.easy.admin.modules.huzhou.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
/**
* 所属改革任务转换器
*
* @author gjh
*/
public class SuperLeaderConverter implements Converter<String> {
/**
* Convert Java objects to excel objects
*
* @param value Java Data.NotNull.
* @param contentProperty Content property.Nullable.
* @param globalConfiguration Global configuration.NotNull.
* @return Data to put into a Excel
*/
@Override
public WriteCellData<?> convertToExcelData(String value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
switch (value) {
case "1":
return new WriteCellData<>("医政处");
case "2":
return new WriteCellData<>("妇幼处");
case "3":
return new WriteCellData<>("科教处");
case "4":
return new WriteCellData<>("体改处");
case "5":
return new WriteCellData<>("规信处");
case "6":
return new WriteCellData<>("中医处");
case "7":
return new WriteCellData<>("财审处");
case "8":
return new WriteCellData<>("机关党委");
case "9":
return new WriteCellData<>("组织人事处");
case "10":
default:
return new WriteCellData<>("未知");
}
}
}

11
huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouPlaninfoMapper.java

@ -42,4 +42,15 @@ public interface HuzhouPlaninfoMapper extends BaseMapper<HuzhouPlaninfo> {
"FROM huzhou_planinfo " + "FROM huzhou_planinfo " +
"WHERE project_id = #{projectId} AND isfinish IN ('1', '2')") "WHERE project_id = #{projectId} AND isfinish IN ('1', '2')")
Integer getMaxTaskLevelPart(String projectId); Integer getMaxTaskLevelPart(String projectId);
@Select("SELECT task_name " +
"FROM (" +
" SELECT task_name, " +
" ROW_NUMBER() OVER (ORDER BY CAST(task_level AS DECIMAL(10, 2)) DESC) AS rn " +
" FROM huzhou_planinfo " +
" WHERE project_id = #{projectId} " +
" AND isfinish IN ('1', '2')" +
") t " +
"WHERE rn = 1")
String getCurrentPointName(@Param("projectId") String projectId);
} }

18
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ContractPayInfoDTO.java

@ -0,0 +1,18 @@
package com.easy.admin.modules.huzhou.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class ContractPayInfoDTO {
/**
* 超时支付次数 (超时7天以上为超时1次)
*/
private int timeOutPayCount;
/**
* 超时支付情况
*/
private String timeOutPaySituation;
}

58
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectTimeOutInfoExportDTO.java

@ -0,0 +1,58 @@
package com.easy.admin.modules.huzhou.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.easy.admin.modules.huzhou.converter.ReformNameConverter;
import com.easy.admin.modules.huzhou.converter.SuperLeaderConverter;
import lombok.Data;
@HeadStyle(fillForegroundColor = 44)
@Data
public class ProjectTimeOutInfoExportDTO {
@ExcelProperty("项目名称")
private String projectName;
@ExcelProperty("建设单位")
private String dutyWorkplace;
@ExcelProperty(value = {"任务改革任务"}, converter = ReformNameConverter.class)
private String reformName;
@ExcelProperty(value = {"上级指导处室"}, converter = SuperLeaderConverter.class)
private String superLeader;
@ExcelProperty("当且所处节点")
private String currentPointName;
//@NumberFormat("0.00%")
@ExcelProperty("整体资金支付情况(%)")
private Double superiorFundPayRate;
//超时7天以上为超时1次
@ExcelProperty("超时支付次数")
private int timeOutPayCount;
@ExcelProperty("超时支付情况")
private String timeOutPaySituation;
public ProjectTimeOutInfoExportDTO(String projectName,
String dutyWorkplace,
String reformName,
String superLeader,
String currentPointName,
Double superiorFundPayRate,
int timeOutPayCount,
String timeOutPaySituation
) {
this.projectName = projectName;
this.superiorFundPayRate = superiorFundPayRate;
this.currentPointName = currentPointName;
this.timeOutPayCount = timeOutPayCount;
this.dutyWorkplace = dutyWorkplace;
this.reformName = reformName;
this.superLeader = superLeader;
this.timeOutPaySituation = timeOutPaySituation;
}
}

25
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/HuzhouProjectinfoExportDTO.java → huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectinfoExportDTO.java

@ -6,16 +6,19 @@ import com.alibaba.excel.annotation.format.NumberFormat;
import com.alibaba.excel.annotation.write.style.HeadStyle; import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.easy.admin.modules.huzhou.converter.ReformNameConverter; import com.easy.admin.modules.huzhou.converter.ReformNameConverter;
import com.easy.admin.modules.huzhou.converter.SuperLeaderConverter;
import lombok.Data; import lombok.Data;
@HeadStyle(fillForegroundColor = 44) @HeadStyle(fillForegroundColor = 44)
@Data @Data
public class HuzhouProjectinfoExportDTO { public class ProjectinfoExportDTO {
@ExcelProperty(value = {"任务名称"}, converter = ReformNameConverter.class) @ExcelProperty(value = {"任务名称"}, converter = ReformNameConverter.class)
private String reformName; private String reformName;
@ExcelProperty(value = {"指导处室"}, converter = SuperLeaderConverter.class)
@ExcelProperty("指导处室") private String superLeader;
private String dutyWorkplace; //
// @ExcelProperty("责任单位")
// private String dutyWorkplace;
@ExcelProperty("项目名称") @ExcelProperty("项目名称")
private String projectName; private String projectName;
@ -30,17 +33,17 @@ public class HuzhouProjectinfoExportDTO {
@ExcelProperty("项目整体进度(%)") @ExcelProperty("项目整体进度(%)")
private String totalPercent; private String totalPercent;
public HuzhouProjectinfoExportDTO(String projectName, public ProjectinfoExportDTO(String projectName,
Double superiorFundPayRate, Double superiorFundPayRate,
String currentStage, String currentStage,
String totalPercent, String totalPercent,
String dutyWorkplace, String superLeader,
String reformName) { String reformName) {
this.projectName = projectName; this.projectName = projectName;
this.superiorFundPayRate = superiorFundPayRate; this.superiorFundPayRate = superiorFundPayRate;
this.currentStage = currentStage; this.currentStage = currentStage;
this.totalPercent = totalPercent; this.totalPercent = totalPercent;
this.dutyWorkplace = dutyWorkplace; this.superLeader = superLeader;
this.reformName = reformName; this.reformName = reformName;
} }
} }

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

@ -2,7 +2,7 @@ package com.easy.admin.modules.huzhou.entity;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO; import com.easy.admin.modules.huzhou.dto.ProjectinfoExportDTO;
import lombok.Data; import lombok.Data;
/** /**
@ -197,15 +197,31 @@ public class HuzhouProjectinfo extends BaseEntity {
*/ */
private String updatePlanFlag; private String updatePlanFlag;
/**
* 项目当且所处节点
*/
@TableField(exist = false)
private String currentPointName;
/**
* 超时支付次数 (超时7天以上为超时1次)
*/
@TableField(exist = false)
private int timeOutPayCount;
public HuzhouProjectinfoExportDTO toDTO() { /**
return new HuzhouProjectinfoExportDTO( * 项目超时情况(天数)
this.projectName, */
this.superiorFundPayRate, @TableField(exist = false)
this.currentStage, private String timeOutPaySituation;
this.totalPercent, // public ProjectinfoExportDTO toDTO() {
this.dutyWorkplace, // return new ProjectinfoExportDTO(
this.reformName); // this.projectName,
} // this.superiorFundPayRate,
// this.currentStage,
// this.totalPercent,
// this.superLeader,
// this.reformName);
// }
} }

5
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouContractinfoService.java

@ -2,6 +2,7 @@ package com.easy.admin.modules.huzhou.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.easy.admin.modules.huzhou.dto.ContractPayInfoDTO;
import com.easy.admin.modules.huzhou.entity.HuzhouContractinfo; import com.easy.admin.modules.huzhou.entity.HuzhouContractinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouRegulationlab; import com.easy.admin.modules.huzhou.entity.HuzhouRegulationlab;
@ -30,7 +31,7 @@ public interface IHuzhouContractinfoService extends IService<HuzhouContractinfo>
Boolean deleteContractinfo(HuzhouContractinfo contractinfo); Boolean deleteContractinfo(HuzhouContractinfo contractinfo);
List<HuzhouContractinfo> getContractinfoByprojectId(String projectid); List<HuzhouContractinfo> getPlanContractinfoByprojectId(String projectid);
List<HuzhouContractinfo> getContractinfoByprojectIdAndTaskName(String projectid, String taskName); List<HuzhouContractinfo> getContractinfoByprojectIdAndTaskName(String projectid, String taskName);
@ -53,4 +54,6 @@ public interface IHuzhouContractinfoService extends IService<HuzhouContractinfo>
* @throws JsonProcessingException * @throws JsonProcessingException
*/ */
Boolean checkContractAmount(List<HuzhouContractinfo> contractList, String contractMoneyFieldsValue, String taskName) throws JsonProcessingException; Boolean checkContractAmount(List<HuzhouContractinfo> contractList, String contractMoneyFieldsValue, String taskName) throws JsonProcessingException;
ContractPayInfoDTO queryContractPaySituation(HuzhouProjectinfo projectInfo);
} }

3
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfoService.java

@ -30,6 +30,9 @@ import java.util.Map;
public interface IHuzhouPlaninfoService extends IService<HuzhouPlaninfo> { public interface IHuzhouPlaninfoService extends IService<HuzhouPlaninfo> {
HashMap<String,Object> getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception; HashMap<String,Object> getPlanInfoListFromFile(MultipartFile multipartFile,String projectid) throws Exception;
ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineList(String projectid); ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineList(String projectid);
ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineListWithExecutor(String projectid);
Page<HuzhouPlaninfo> getPlanInfoMainTimelineListOK(String projectid,Integer pageNo, Integer pageSize); Page<HuzhouPlaninfo> getPlanInfoMainTimelineListOK(String projectid,Integer pageNo, Integer pageSize);
/** /**
* 保存或修改任务计划期间上传的文化 * 保存或修改任务计划期间上传的文化

2
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java

@ -238,5 +238,7 @@ public interface IHuzhouProjectinfoService extends IService<HuzhouProjectinfo> {
HuzhouProjectinfoOV queryProjectFundPayRateById(String projectId); HuzhouProjectinfoOV queryProjectFundPayRateById(String projectId);
List<HuzhouProjectinfo> queryProjectWithFundPay(); List<HuzhouProjectinfo> queryProjectWithFundPay();
List<HuzhouProjectinfo> queryProjectTimeOutInfo();
} }

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

@ -12,6 +12,7 @@ import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoHistoryMapper;
import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoMapper; import com.easy.admin.modules.huzhou.dao.HuzhouContractinfoMapper;
import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper; import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper;
import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper; import com.easy.admin.modules.huzhou.dao.HuzhouSubProjectinfoMapper;
import com.easy.admin.modules.huzhou.dto.ContractPayInfoDTO;
import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.entity.*;
import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.service.*;
import com.easy.admin.modules.huzhou.vo.ContractInfoVo; import com.easy.admin.modules.huzhou.vo.ContractInfoVo;
@ -36,6 +37,9 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -278,7 +282,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
} }
@Override @Override
public List<HuzhouContractinfo> getContractinfoByprojectId(String projectid) { public List<HuzhouContractinfo> getPlanContractinfoByprojectId(String projectid) {
LambdaQueryWrapper<HuzhouContractinfo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<HuzhouContractinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouContractinfo::getProjectId, projectid); queryWrapper.eq(HuzhouContractinfo::getProjectId, projectid);
queryWrapper.eq(HuzhouContractinfo::getFlag,"计划"); queryWrapper.eq(HuzhouContractinfo::getFlag,"计划");
@ -371,7 +375,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
if (exists) { if (exists) {
log.info("该项目阶段填存在合同信息(计划)"); log.info("该项目阶段填存在合同信息(计划)");
} }
log.info("该项目阶段填不存在合同信息(计划)!"); //log.info("该项目阶段填不存在合同信息(计划)!");
return exists; return exists;
} }
@ -382,7 +386,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
} }
if (taskName.equals("合同签订")){ if (taskName.equals("合同签订")){
ContractInfoVo contractInfoVo = new ContractInfoVo(); ContractInfoVo contractInfoVo = new ContractInfoVo();
List<HuzhouContractinfo> planList = this.getContractinfoByprojectId(projectId); List<HuzhouContractinfo> planList = this.getPlanContractinfoByprojectId(projectId);
contractInfoVo.setHasInfo(true); contractInfoVo.setHasInfo(true);
contractInfoVo.setPlanList(planList); contractInfoVo.setPlanList(planList);
return contractInfoVo; return contractInfoVo;
@ -395,7 +399,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
if (rs.size() == 1) { if (rs.size() == 1) {
// 返回合同信息(计划) // 返回合同信息(计划)
ContractInfoVo contractInfoVo = new ContractInfoVo(); ContractInfoVo contractInfoVo = new ContractInfoVo();
List<HuzhouContractinfo> planList = this.getContractinfoByprojectId(projectId); List<HuzhouContractinfo> planList = this.getPlanContractinfoByprojectId(projectId);
planList= planList.stream() planList= planList.stream()
.filter(item -> item.getTaskName().equals(taskName)) .filter(item -> item.getTaskName().equals(taskName))
@ -407,7 +411,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
if (rs.size()>1){ if (rs.size()>1){
// 返回合同信息(计划 + 实际) // 返回合同信息(计划 + 实际)
ContractInfoVo contractInfoVo = new ContractInfoVo(); ContractInfoVo contractInfoVo = new ContractInfoVo();
List<HuzhouContractinfo> planList = this.getContractinfoByprojectId(projectId); List<HuzhouContractinfo> planList = this.getPlanContractinfoByprojectId(projectId);
planList= planList.stream() planList= planList.stream()
.filter(item -> item.getTaskName().equals(taskName)) .filter(item -> item.getTaskName().equals(taskName))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -486,7 +490,7 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
if ( !"合同签订".equals(taskName)) { if ( !"合同签订".equals(taskName)) {
HuzhouContractinfo contractInfo = contractList.get(0); HuzhouContractinfo contractInfo = contractList.get(0);
// 查询合同计划金额 // 查询合同计划金额
List<HuzhouContractinfo> planContractInfoList = contractinfoService.getContractinfoByprojectId(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){
@ -511,5 +515,54 @@ public class HuzhouContractinfoServiceImpl extends ServiceImpl<HuzhouContractinf
return flag; return flag;
} }
@Override
public ContractPayInfoDTO queryContractPaySituation(HuzhouProjectinfo projectInfo) {
ContractPayInfoDTO payInfoDTO = new ContractPayInfoDTO();
// 超时次数
int timeOutPayCount = 0;
StringBuilder resultDesc = new StringBuilder();
int paymentIndex = 1; // 计数器用于生成序数词
String projectId = projectInfo.getId();
// 获取计划和实际合同信息集合,假设它们已经按照 pay_date 排序
List<HuzhouContractinfo> planList = this.getPlanContractinfoByprojectId(projectId);
List<HuzhouContractinfo> realList = this.getRealContractinfoByprojectId(projectId);
// 假设两个列表长度相同并且一一对应
for (int i = 0; i < Math.min(planList.size(), realList.size()); i++) { // 确保不超出任一列表的范围
HuzhouContractinfo planContract = planList.get(i);
LocalDate planPayDate = planContract.getPayDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
HuzhouContractinfo realContract = realList.get(i);
LocalDate realPayDate = realContract.getPayDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long daysDifference = ChronoUnit.DAYS.between(planPayDate, realPayDate);
if (daysDifference > 0) { // 实际支付日期晚于计划支付日期
if (resultDesc.length() > 0) {
resultDesc.append("---"); // 在除了第一个之外的所有记录前添加分隔符
}
resultDesc.append(String.format("第%d笔属性:%s-超时: %d 天",
paymentIndex, planContract.getTaskName(), daysDifference));
// 如果超时超过7天,则增加超时次数
if (daysDifference >= 7) {
timeOutPayCount++;
}
}
paymentIndex++;
}
// 如果没有任何超时情况,则添加相应的提示信息
if (resultDesc.length() == 0) {
resultDesc.append("未签订合同");
}
payInfoDTO.setTimeOutPaySituation(resultDesc.toString());
payInfoDTO.setTimeOutPayCount(timeOutPayCount);
return payInfoDTO;
}
} }

3
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouMergesplitinfoServiceImpl.java

@ -162,7 +162,7 @@ public class HuzhouMergesplitinfoServiceImpl extends ServiceImpl<HuzhouMergespli
huzhouProjectinfo.setPayamount2023Money(0.0); huzhouProjectinfo.setPayamount2023Money(0.0);
huzhouProjectinfo.setPayamount2024Money(0.0); huzhouProjectinfo.setPayamount2024Money(0.0);
huzhouProjectinfo.setPayamount2025Money(0.0); huzhouProjectinfo.setPayamount2025Money(0.0);
huzhouProjectinfo.setStage("-2");//0 huzhouProjectinfo.setStage("-2");//0 拆分 合并后产生的新项目 后续会修改
projectinfoService.save(huzhouProjectinfo); projectinfoService.save(huzhouProjectinfo);
userprojectService.saveFromProject(huzhouProjectinfo, "0"); userprojectService.saveFromProject(huzhouProjectinfo, "0");
for (String oldprojectid :mergesplitinfoVo.getProjectids() for (String oldprojectid :mergesplitinfoVo.getProjectids()
@ -172,6 +172,7 @@ public class HuzhouMergesplitinfoServiceImpl extends ServiceImpl<HuzhouMergespli
BeanUtils.copyProperties(projectinfo, huzhouMergesplitinfo); BeanUtils.copyProperties(projectinfo, huzhouMergesplitinfo);
huzhouMergesplitinfo.setMergeOrSplit("split"); huzhouMergesplitinfo.setMergeOrSplit("split");
huzhouMergesplitinfo.setProjectId(huzhouProjectinfo.getId()); huzhouMergesplitinfo.setProjectId(huzhouProjectinfo.getId());
//屏蔽掉项目状态 :-1 被拆分和合并的项目
projectinfo.setStage("-1"); projectinfo.setStage("-1");
// projectinfoService.updateById(projectinfo); // projectinfoService.updateById(projectinfo);
mergesplitinfoMapper.insert(huzhouMergesplitinfo); mergesplitinfoMapper.insert(huzhouMergesplitinfo);

169
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

@ -60,6 +60,7 @@ import java.time.LocalDate;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.concurrent.*;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -347,10 +348,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
//如果自己也完成了 则加1 //如果自己也完成了 则加1
lowerFinishiCount++; lowerFinishiCount++;
} }
log.info("本阶段的完成数为:{}-----本阶段的总数为:{}",lowerFinishiCount,lowerCount); //log.info("本阶段的完成数为:{}-----本阶段的总数为:{}",lowerFinishiCount,lowerCount);
totalCount+=lowerCount; totalCount+=lowerCount;
totalFinishCount+=lowerFinishiCount; totalFinishCount+=lowerFinishiCount;
log.info("整体累计完成数为:{}----整体累计总数为:{}",totalFinishCount,totalCount); //log.info("整体累计完成数为:{}----整体累计总数为:{}",totalFinishCount,totalCount);
// 计算子阶段的百分比 // 计算子阶段的百分比
BigDecimal a = new BigDecimal(lowerCount); BigDecimal a = new BigDecimal(lowerCount);
BigDecimal b = new BigDecimal(lowerFinishiCount); BigDecimal b = new BigDecimal(lowerFinishiCount);
@ -370,34 +371,150 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
.divide(new BigDecimal(totalCount), 2, RoundingMode.HALF_UP) .divide(new BigDecimal(totalCount), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100)) .multiply(BigDecimal.valueOf(100))
.toString(); .toString();
totalPercent = totalPercent.substring(0,totalPercent.indexOf(".")); totalPercent = totalPercent.substring(0, totalPercent.indexOf("."));
resultList.get(0).setTotalPercent(totalPercent); resultList.get(0).setTotalPercent(totalPercent);
} }
// 封装ismodify // 封装ismodify
resultList.stream().forEach(item -> { resultList.stream().forEach(item -> {
item.getChildren().forEach(childItem -> { determineIsModify(projectId, item);
// 判断子阶段是否需要填写实际合同金额,如果存在则支持重新上传 });
if (childItem.getTaskName().equals("合同签订")) { return resultList;
LambdaQueryWrapper<HuzhouPlaninfo> qw = new LambdaQueryWrapper<>(); }
qw.eq(HuzhouPlaninfo::getProjectId, projectId)
.eq(HuzhouPlaninfo::getTaskName, "合同签订").eq(HuzhouPlaninfo::getIsfinish, "2"); @Override
if (planInfoMapper.selectCount(qw) > 0 && contractinfoService.getContractinfoByprojectId(projectId).size() < 1) { public ArrayList<HuzhouPlaninfoOV> getPlanInfoMainTimelineListWithExecutor(String projectId) {
childItem.setIsmodify(true); //查询父计划
log.info("----开启补偿接口重新上传合同金额-----"); LambdaQueryWrapper<HuzhouPlaninfo> planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
} else { planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId, projectId);
childItem.setIsmodify(false); planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getSuperior, "0");
} planinfoLambdaQueryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel);
// 查询 huzhou_planinfo 项目计划表 查询本级任务进度的信息
List<HuzhouPlaninfo> superPlanInfoList = this.list(planinfoLambdaQueryWrapper);
// 1.判断该项目是否存在子项目
List<String> subProjectIds = getSubProjectIds(projectId);
log.info("子项目集合为:{}", subProjectIds);
if (CollectionUtil.isNotEmpty(subProjectIds)) {
log.info("存在子项目需重新计算主项目进度");
// 2.获取所有子项目对应的任务级别 (不考虑任务本级)
List<String> taskLevelList = planInfoMapper.selectDistinctLowerTaskLevels(projectId);
log.info("下级任务级别集合为:{}", taskLevelList);
// 3.获取子项目的计划进度 (huzhou_planinfo)
LambdaQueryWrapper<HuzhouPlaninfo> subPlanInfoWrapper = new LambdaQueryWrapper<>();
subPlanInfoWrapper.in(HuzhouPlaninfo::getProjectId, subProjectIds);
List<HuzhouPlaninfo> subPlanInfoList = this.list(subPlanInfoWrapper);
// 4.获取主任务各阶段计划表
LambdaQueryWrapper<HuzhouPlaninfo> mainInfoWrapper = new LambdaQueryWrapper<>();
mainInfoWrapper.eq(HuzhouPlaninfo::getProjectId, projectId);
mainInfoWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel);
List<HuzhouPlaninfo> mainPlanInfoList = planInfoMapper.selectList(mainInfoWrapper);
// 5.遍历子项目的各子级别,所有子完成则主完成
dealMainTaskLevelIsFinish(projectId, taskLevelList, subPlanInfoList, mainPlanInfoList);
}
// 创建一个固定大小的线程池,大小可以根据你的实际需要调整
int poolSize = Runtime.getRuntime().availableProcessors(); // 根据处理器数量设置线程池大小
ExecutorService executor = Executors.newFixedThreadPool(poolSize);
List<Future<HuzhouPlaninfoOV>> futures = new CopyOnWriteArrayList<>();
final long[] totalCount = {0}; // 使用数组来允许在lambda表达式中修改其值
final long[] totalFinishCount = {0};
for (final HuzhouPlaninfo info : superPlanInfoList) {
futures.add(executor.submit(() -> {
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(info, huzhouPlaninfoOV);
HuzhouPlaninfoOV setChildData = setchild(huzhouPlaninfoOV);
// 当前计划如果在流程中,判断是否可编辑 isfinish字段值含义:0未开始 1审批中 2已完成
if (CommonConstant.PRO_PLAN_APPLY.equals(setChildData.getIsfinish())) {
String isEdit = getPlanFileApprovalInfoByPlaninfoId(setChildData.getId()).get("isEdit");
setChildData.setIsEdit(isEdit);
}
String taskLevel = info.getTaskLevel();
// 查询主任务整体进度情况
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.likeRight(HuzhouPlaninfo::getTaskLevel, taskLevel + ".");
queryWrapper.eq(HuzhouPlaninfo::getProjectId, projectId);
long lowerCount = this.count(queryWrapper) + 1;
// 查询完成的数量
queryWrapper.eq(HuzhouPlaninfo::getIsfinish, CommonConstant.PRO_PLAN_FINISHED);
long lowerFinishiCount = this.count(queryWrapper);
if (CommonConstant.PRO_PLAN_FINISHED.equals(info.getIsfinish())) {
lowerFinishiCount++;
}
// 计算子阶段的百分比
BigDecimal a = new BigDecimal(lowerCount);
BigDecimal b = new BigDecimal(lowerFinishiCount);
String percent = b.divide(a, 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100))
.toString();
percent = percent.substring(0, percent.indexOf("."));
setChildData.setPercent(percent);
synchronized (totalCount) {
totalCount[0] += lowerCount;
totalFinishCount[0] += lowerFinishiCount;
}
return setChildData;
}));
}
ArrayList<HuzhouPlaninfoOV> resultList = new ArrayList<>();
for (Future<HuzhouPlaninfoOV> future : futures) {
try {
resultList.add(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
// 设置整体百分比
String totalPercent = "0";
if (totalCount[0] > 0) {
totalPercent = new BigDecimal(totalFinishCount[0])
.divide(new BigDecimal(totalCount[0]), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100))
.toString();
totalPercent = totalPercent.substring(0, totalPercent.indexOf("."));
resultList.get(0).setTotalPercent(totalPercent);
}
// 关闭线程池
executor.shutdown();
return resultList;
}
private void determineIsModify(String projectId, HuzhouPlaninfoOV item) {
item.getChildren().forEach(childItem -> {
// 判断子阶段是否需要填写实际合同金额,如果存在则支持重新上传
if (childItem.getTaskName().equals("合同签订")) {
LambdaQueryWrapper<HuzhouPlaninfo> qw = new LambdaQueryWrapper<>();
qw.eq(HuzhouPlaninfo::getProjectId, projectId)
.eq(HuzhouPlaninfo::getTaskName, "合同签订").eq(HuzhouPlaninfo::getIsfinish, "2");
if (planInfoMapper.selectCount(qw) > 0 && contractinfoService.getPlanContractinfoByprojectId(projectId).size() < 1) {
childItem.setIsmodify(true);
log.info("----开启补偿接口重新上传合同金额-----");
} else { } else {
Boolean flag = contractinfoService.hasContractinfoByTaskName(projectId, childItem.getTaskName()); childItem.setIsmodify(false);
if (flag) {
childItem.setIsmodify(true);
} else {
childItem.setIsmodify(false);
}
} }
}); } else {
Boolean flag = contractinfoService.hasContractinfoByTaskName(projectId, childItem.getTaskName());
if (flag) {
childItem.setIsmodify(true);
} else {
childItem.setIsmodify(false);
}
}
}); });
return resultList;
} }
private void dealMainTaskLevelIsFinish(String projectId, List<String> taskLevelList, List<HuzhouPlaninfo> subPlanInfoList, List<HuzhouPlaninfo> mainPlanInfoList) { private void dealMainTaskLevelIsFinish(String projectId, List<String> taskLevelList, List<HuzhouPlaninfo> subPlanInfoList, List<HuzhouPlaninfo> mainPlanInfoList) {
@ -1093,7 +1210,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
*/ */
private HuzhouPlaninfoOV setchild(HuzhouPlaninfoOV planinfoOV){ private HuzhouPlaninfoOV setchild(HuzhouPlaninfoOV planinfoOV){
//在流程这的是否可编辑 //在流程这的是否可编辑
log.info("当前任务id为{},当前任务级别为{},完成情况{}",planinfoOV.getId(),planinfoOV.getTaskLevel(),planinfoOV.getIsfinish()); //log.info("当前任务id为{},当前任务级别为{},完成情况{}",planinfoOV.getId(),planinfoOV.getTaskLevel(),planinfoOV.getIsfinish());
// 0未开始 1审批中 2已完成 // 0未开始 1审批中 2已完成
if("1".equals(planinfoOV.getIsfinish())){ if("1".equals(planinfoOV.getIsfinish())){
String isEdit = getPlanFileApprovalInfoByPlaninfoId(planinfoOV.getId()).get("isEdit"); String isEdit = getPlanFileApprovalInfoByPlaninfoId(planinfoOV.getId()).get("isEdit");
@ -1106,7 +1223,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
BeanUtils.copyProperties(planinfoOV,planInfo); BeanUtils.copyProperties(planinfoOV,planInfo);
// 根据上级任务获取子任务 // 根据上级任务获取子任务
List<HuzhouPlaninfo> childTaskBySuperior = planInfoMapper.getChildTaskBySuperior(planInfo); List<HuzhouPlaninfo> childTaskBySuperior = planInfoMapper.getChildTaskBySuperior(planInfo);
log.info("本级任务级别为{},该任务的下级任务数量为{}",taskLevel,childTaskBySuperior.size()); //log.info("本级任务级别为{},该任务的下级任务数量为{}",taskLevel,childTaskBySuperior.size());
if(childTaskBySuperior.size()!=0){ if(childTaskBySuperior.size()!=0){
for(HuzhouPlaninfo childInfo:childTaskBySuperior){ for(HuzhouPlaninfo childInfo:childTaskBySuperior){
@ -1114,7 +1231,7 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
BeanUtils.copyProperties(childInfo,huzhouPlanInfoOV); BeanUtils.copyProperties(childInfo,huzhouPlanInfoOV);
HuzhouPlaninfoOV setChildMap = setchild(huzhouPlanInfoOV); HuzhouPlaninfoOV setChildMap = setchild(huzhouPlanInfoOV);
mapArrayList.add(setChildMap); mapArrayList.add(setChildMap);
log.info("当前添加的下级任务名称为:{},{}",setChildMap.getTaskName(),setChildMap.getTaskLevel()); //log.info("当前添加的下级任务名称为:{},{}",setChildMap.getTaskName(),setChildMap.getTaskLevel());
} }
// 封装下级任务 // 封装下级任务
planinfoOV.setChildren(mapArrayList); planinfoOV.setChildren(mapArrayList);

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

@ -20,7 +20,7 @@ import com.easy.admin.common.util.CommonUtils;
import com.easy.admin.modules.huzhou.common.HuzhouCommonUtils; import com.easy.admin.modules.huzhou.common.HuzhouCommonUtils;
import com.easy.admin.modules.huzhou.common.TemplateExcelUtils; import com.easy.admin.modules.huzhou.common.TemplateExcelUtils;
import com.easy.admin.modules.huzhou.dao.*; import com.easy.admin.modules.huzhou.dao.*;
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO; import com.easy.admin.modules.huzhou.dto.ContractPayInfoDTO;
import com.easy.admin.modules.huzhou.entity.*; import com.easy.admin.modules.huzhou.entity.*;
import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.service.*;
import com.easy.admin.modules.huzhou.vo.*; import com.easy.admin.modules.huzhou.vo.*;
@ -50,7 +50,13 @@ import java.io.InputStream;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -2686,49 +2692,133 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
@Override @Override
public List<HuzhouProjectinfo> queryProjectWithFundPay() { public List<HuzhouProjectinfo> queryProjectWithFundPay() {
// 记录开始时间
long startTime = System.currentTimeMillis();
// 获取所有项目信息
List<HuzhouProjectinfo> projectInfoList = this.list();
// 创建线程池
int poolSize = Runtime.getRuntime().availableProcessors(); // 根据处理器数量设置线程池大小
ExecutorService executorService = Executors.newFixedThreadPool(poolSize);
// 创建一个存放Future对象的列表
List<Future<HuzhouProjectinfo>> futures = new ArrayList<>();
// 提交任务给线程池
for (final HuzhouProjectinfo projectInfo : projectInfoList) {
futures.add(executorService.submit(() -> {
String projectId = projectInfo.getId();
// 1.填充上级资金执行率
fillSuperiorFundPayRate(projectInfo);
// 2.填充项目所处阶段
Integer result = planinfoMapper.getMaxTaskLevelPart(projectId);
if (result != null) {
String stageDescription = ProjectStage.getDescriptionByStageNumber(result);
projectInfo.setCurrentStage(stageDescription);
} else {
projectInfo.setCurrentStage("未执行");
}
// 3.填充项目整体进度
if (CollectionUtils.isNotEmpty(planinfoService.getPlanInfoMainTimelineListWithExecutor(projectId))) {
String totalPercent = planinfoService.getPlanInfoMainTimelineList(projectId).get(0).getTotalPercent();
projectInfo.setTotalPercent(totalPercent);
} else {
projectInfo.setTotalPercent("0");
}
return projectInfo;
}));
}
// 收集结果
for (int i = 0; i < futures.size(); i++) {
try {
projectInfoList.set(i, futures.get(i).get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
// 处理异常情况
}
}
// 关闭线程池
executorService.shutdown();
// 按照责任工作地点排序
projectInfoList = projectInfoList.stream()
.sorted(Comparator.comparing(HuzhouProjectinfo::getReformName)
.thenComparing(HuzhouProjectinfo::getCurrentStage))
.collect(Collectors.toList());
// 记录结束时间并计算耗时
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
log.info("方法执行耗时:{} ms",duration);
return projectInfoList;
}
@Override
public List<HuzhouProjectinfo> queryProjectTimeOutInfo() {
// 记录开始时间
long startTime = System.currentTimeMillis();
// 获取所有项目信息
List<HuzhouProjectinfo> projectInfoList = this.list(); List<HuzhouProjectinfo> projectInfoList = this.list();
for (HuzhouProjectinfo projectInfo : projectInfoList) { for (HuzhouProjectinfo projectInfo : projectInfoList) {
// 1.填充上级资金支付率
String projectId = projectInfo.getId(); String projectId = projectInfo.getId();
// 1.获取当且任务所处的节点名称
String currentPointName = planinfoMapper.getCurrentPointName(projectId);
if (StringUtils.isNotBlank(currentPointName)) {
projectInfo.setCurrentPointName(currentPointName);
LambdaQueryWrapper<HuzhouPlaninfo> qw = new LambdaQueryWrapper<>();
qw.eq(HuzhouPlaninfo::getTaskName, currentPointName)
.eq(HuzhouPlaninfo::getProjectId, projectId);
HuzhouPlaninfo planInfo = planinfoMapper.selectOne(qw);
Date actualStartTime = planInfo.getActualStartTime();
Date scheduledEndTime = planInfo.getScheduledEndTime();
if (actualStartTime != null) {
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) {
projectInfo.setTimeOutPaySituation(String.valueOf(daysBetween));
log.info("项目:{}->当且节点:{}->超时完成天数为:{}", projectInfo.getProjectName(),currentPointName, daysBetween);
log.info("计划结束时间为:{}->实际开始提交时间为:{}", scheduledEndDate,realUpFileDate);
}else {
projectInfo.setTimeOutPaySituation("未超时");
}
}
} else {
projectInfo.setCurrentPointName("未执行");
}
// 2.设置整体资金支付情况:上级资金支付比例=(实际支付上级资金/计划支付上级资金)*100%
fillSuperiorFundPayRate(projectInfo); fillSuperiorFundPayRate(projectInfo);
// TODO 2.填充项目所处阶段 // 3.设置节点资金支付情况:资金支付超时时间=实际支付时间-计划支付时间
Integer result = planinfoMapper.getMaxTaskLevelPart(projectId); ContractPayInfoDTO tmp = contractinfoService.queryContractPaySituation(projectInfo);
if (result != null){ projectInfo.setTimeOutPaySituation(tmp.getTimeOutPaySituation());
String stageDescription = ProjectStage.getDescriptionByStageNumber(result); // 4.设置超时支付次数:超时支付次数=超时完成天数/7
projectInfo.setCurrentStage(stageDescription); projectInfo.setTimeOutPayCount(tmp.getTimeOutPayCount());
//log.info("项目名称:{}--->项目所处阶段为:{}", projectInfo.getProjectName(),stageDescription);
}else {
String stageDescription ="未执行";
projectInfo.setCurrentStage(stageDescription);
//log.info("项目名称:{}--->项目所处阶段为:项目不在执行计划中", projectInfo.getProjectName());
}
// TODO 3.填充项目整体进度
if (CollectionUtils.isNotEmpty(planinfoService.getPlanInfoMainTimelineList(projectId))){
String totalPercent = planinfoService.getPlanInfoMainTimelineList(projectId).get(0).getTotalPercent();
projectInfo.setTotalPercent(totalPercent);
}else {
projectInfo.setTotalPercent("0");
}
} }
projectInfoList =projectInfoList.stream() // 按照责任工作地点排序
.sorted(Comparator.comparing(HuzhouProjectinfo::getDutyWorkplace)) projectInfoList = projectInfoList.stream()
.sorted(Comparator.comparing(HuzhouProjectinfo::getReformName))
.collect(Collectors.toList()); .collect(Collectors.toList());
// List<HuzhouProjectinfoExportDTO> dtoList = projectInfoList.stream() long endTime = System.currentTimeMillis();
// .map(projectInfo -> new HuzhouProjectinfoExportDTO( long duration = endTime - startTime;
// projectInfo.getProjectName(), log.info("方法执行耗时:{} ms",duration);
// projectInfo.getSuperiorFundPayRate(),
// projectInfo.getCurrentStage() ))
// .collect(Collectors.toList());
// for (HuzhouProjectinfoExportDTO huzhouProjectinfoExportDTO : dtoList) {
// log.info("项目名称:{}--->上级资金执行率为:{}", huzhouProjectinfoExportDTO.getProjectName(),String.format("%.0f%%", huzhouProjectinfoExportDTO.getSuperiorFundPayRate()));
// }
return projectInfoList; return projectInfoList;
} }
private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) { private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) {
String projectId = projectInfo.getId(); String projectId = projectInfo.getId();
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId); HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId);
@ -2741,6 +2831,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
Double contractProvincialMoney = projectinfoMoneyMapper.selectById(projectId).getContractProvincialMoney(); Double contractProvincialMoney = projectinfoMoneyMapper.selectById(projectId).getContractProvincialMoney();
// 计算实际支付的资金总额 // 计算实际支付的资金总额
Map<String, Double> actualFunds = calculateActualFunds(projectId); Map<String, Double> actualFunds = calculateActualFunds(projectId);
Double centralMoney = actualFunds.get("centralMoney"); Double centralMoney = actualFunds.get("centralMoney");
Double provincialMoney = actualFunds.get("provincialMoney"); Double provincialMoney = actualFunds.get("provincialMoney");
// 计算并设置上级资金支付率 // 计算并设置上级资金支付率
@ -2752,6 +2843,7 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
int percentageRate = (int)(formattedRate * 100); int percentageRate = (int)(formattedRate * 100);
// 日志校验 // 日志校验
String percentRate = String.format("%.0f%%", rate * 100); String percentRate = String.format("%.0f%%", rate * 100);
log.info("合同签订阶段填写的上级资金为资金{}",(contractCentralMoney + contractProvincialMoney));
log.info("项目名称:{}----上级资金支付率为:{}", projectInfo.getProjectName(), percentRate); log.info("项目名称:{}----上级资金支付率为:{}", projectInfo.getProjectName(), percentRate);
projectInfo.setSuperiorFundPayRate((double) percentageRate); projectInfo.setSuperiorFundPayRate((double) percentageRate);
} }

Loading…
Cancel
Save