Browse Source

示范项目验收时间校验

master
gjh 1 week ago
parent
commit
d335d0f179
  1. 106
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/TestController.java
  2. 41
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

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

@ -1,24 +1,38 @@
package com.easy.admin.modules.huzhou.controller; package com.easy.admin.modules.huzhou.controller;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.easy.admin.auth.model.SysUser; import com.easy.admin.auth.model.SysUser;
import com.easy.admin.common.api.vo.Result; import com.easy.admin.common.api.vo.Result;
import com.easy.admin.common.core.exception.EasyException; import com.easy.admin.common.core.exception.EasyException;
import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper; import com.easy.admin.modules.huzhou.dao.HuzhouProjectinfoMoneyMapper;
import com.easy.admin.modules.huzhou.entity.HuzhouContractinfo; import com.easy.admin.modules.huzhou.entity.HuzhouContractinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfo;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfoMoney; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfoMoney;
import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.listener.ProjectManagerListener;
import com.easy.admin.modules.huzhou.service.IHuzhouContractinfoService; import com.easy.admin.modules.huzhou.service.IHuzhouContractinfoService;
import com.easy.admin.modules.huzhou.service.IHuzhouPlaninfoHistoryService;
import com.easy.admin.modules.huzhou.service.IHuzhouPlaninfoService;
import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService;
import com.easy.admin.util.ShiroUtil; import com.easy.admin.util.ShiroUtil;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.SerializationUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/** /**
* @Author gejunhao * @Author gejunhao
@ -33,6 +47,12 @@ public class TestController {
private IHuzhouContractinfoService contractinfoService; private IHuzhouContractinfoService contractinfoService;
@Autowired @Autowired
private HuzhouProjectinfoMoneyMapper projectinfoMoneyMapper; private HuzhouProjectinfoMoneyMapper projectinfoMoneyMapper;
@Autowired
private IHuzhouPlaninfoService planinfoService;
@Autowired
private IHuzhouPlaninfoHistoryService planinfoHistoryService;
@Autowired
private IHuzhouProjectinfoService projectinfoService;
@GetMapping("/getContractInfo") @GetMapping("/getContractInfo")
public Result<?> getProjectContractInfo(String projectId,String taskName){ public Result<?> getProjectContractInfo(String projectId,String taskName){
@ -41,12 +61,6 @@ public class TestController {
LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>();
qw.eq(HuzhouContractinfo::getProjectId, projectId) qw.eq(HuzhouContractinfo::getProjectId, projectId)
.eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际"); .eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际");
// 2.查询数据库中符合条件的合同信息
// List<HuzhouContractinfo> dbList = contractinfoService.list(qw);
// boolean flag = contractinfoService.removeBatchByIds(dbList);
// if (flag){
// log.info("删除原有数据成功!---{}",dbList);
// }
SysUser currentUser = ShiroUtil.getCurrentUser(); SysUser currentUser = ShiroUtil.getCurrentUser();
currentUser.getId(); currentUser.getId();
return Result.OK(currentUser.getId()); return Result.OK(currentUser.getId());
@ -120,4 +134,82 @@ public class TestController {
return Result.OK(flag); return Result.OK(flag);
} }
@PostMapping("/updatePlanByExcel")
public void upload(MultipartFile multipartFile, String projectId) throws Exception {
//解析项目计划文件
HashMap<String, Object> hashMap = planinfoService.getPlanInfoListFromFile(multipartFile, projectId);
//res是true 表示项目计划文件没有问题,如果是false说明文件有问题,需要抛出异常
boolean res = (boolean) hashMap.get("res");
if (!res) {
throw new EasyException((String) hashMap.get("msg"));
}
List<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr");
HuzhouPlaninfo targetElement = huzhouPlaninfoArrayList.stream()
.filter(planInfo -> "示范项目验收阶段".equals(planInfo.getTaskName()))
.findFirst()
.orElse(null); // 如果没有找到符合条件的元素,则返回null
if (targetElement != null) {
Date scheduledEndTime = targetElement.getScheduledEndTime();
// 创建一个 Calendar 实例,并设置为 2025年12月31日
Calendar calendar = Calendar.getInstance();
// 设置时间为当天的最后一秒
calendar.set(2025, Calendar.DECEMBER, 31, 23, 59, 59);
// 获取对应的时间
Date deadline = calendar.getTime();
// 比较 scheduledEndTime 是否晚于 deadline
if (scheduledEndTime.after(deadline)) {
throw new EasyException("示范项目结束时间校验错误,请修改!");
} else {
log.info("示范项目验收时间校验正确");
}
}
}
private void updatePlanForShenPiAndFinished(List<HuzhouPlaninfo> huzhouPlaninfoArrayList, List<HuzhouPlaninfo> excelList, List<HuzhouPlaninfo> planinfoHistory) {
// 计算差集
Set<String> keysFromHuzhouPlaninfoArrayList = huzhouPlaninfoArrayList.stream()
.map(item ->item.getProjectId() + "-" + item.getTaskLevel())
.collect(Collectors.toSet());
List<HuzhouPlaninfo> tmpDifList = planinfoHistory.stream()
.filter(item -> !keysFromHuzhouPlaninfoArrayList.contains(item.getProjectId() + "-" + item.getTaskLevel()))
.filter(item -> {
try {
// 过滤条件:只保留 taskLevel 大等于 1.7 的记录
BigDecimal taskLevel = new BigDecimal(item.getTaskLevel());
return taskLevel.compareTo(BigDecimal.valueOf(1.7)) >= 0;
} catch (NumberFormatException e) {
// 如果转换失败,可以选择处理异常或忽略这条记录
throw new EasyException("无法将 taskLevel 转换为数字: " + item.getTaskLevel());
}
})
.collect(Collectors.toList());
// isFinish为0表示未开始,1审批中,2表示已完成 scheduledStartTime scheduledEndTime
Map<String, HuzhouPlaninfo> excelMap = excelList.stream()
.collect(Collectors.toMap(
item -> item.getTaskLevel(),
item -> item
));
// 遍历 tmpDifList,并根据 projectId 和 taskLevel 查找对应的 excelItem
tmpDifList.forEach(tmpItem -> {
String key = tmpItem.getTaskLevel();
Optional.ofNullable(excelMap.get(key)).ifPresent(excelItem -> {
tmpItem.setScheduledEndTime(excelItem.getScheduledEndTime());
tmpItem.setScheduledStartTime(excelItem.getScheduledStartTime());
});
});
huzhouPlaninfoArrayList.addAll(tmpDifList);
for (HuzhouPlaninfo huzhouPlaninfo : huzhouPlaninfoArrayList) {
log.info("修改后的计划信息为{}",huzhouPlaninfo.getTaskLevel());
}
}
} }

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

@ -838,14 +838,6 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
@Override @Override
public void modifyPlaninfo(MultipartFile multipartFile, String projectid) throws Exception { public void modifyPlaninfo(MultipartFile multipartFile, String projectid) throws Exception {
//增加文件修改条件:项目立项阶段全部完成之后才可以修改项目计划
/* LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
queryWrapper.eq(HuzhouPlaninfo::getTaskName,"项目立项阶段");
queryWrapper.eq(HuzhouPlaninfo::getIsfinish,"2");
if ( this.list(queryWrapper).size()<1){
throw new EasyException("项目立项阶段未完成,无法修改项目计划!");
}*/
//解析项目计划文件 //解析项目计划文件
HashMap<String, Object> hashMap = getPlanInfoListFromFile(multipartFile, projectid); HashMap<String, Object> hashMap = getPlanInfoListFromFile(multipartFile, projectid);
@ -855,6 +847,10 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
throw new EasyException((String) hashMap.get("msg")); throw new EasyException((String) hashMap.get("msg"));
} }
List<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr"); List<HuzhouPlaninfo> huzhouPlaninfoArrayList = (ArrayList<HuzhouPlaninfo>) hashMap.get("arr");
// 校验最后日期不能晚于25年底
checkExcelPlanLastLevelTime(huzhouPlaninfoArrayList);
log.info("示范项目验收时间校验正确");
// 深克隆备份Excel重点计划以供后续做差集操作 // 深克隆备份Excel重点计划以供后续做差集操作
List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr")); List<HuzhouPlaninfo> excelList = SerializationUtils.clone((ArrayList<HuzhouPlaninfo>) hashMap.get("arr"));
// 未完成的项目则可以修改 // 未完成的项目则可以修改
@ -877,12 +873,9 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
wrapper.eq(HuzhouPlaninfo::getProjectId,projectid); wrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
wrapper.set(HuzhouPlaninfo::getGroupId,huzhouPlaninfoArrayList.get(0).getGroupId()); wrapper.set(HuzhouPlaninfo::getGroupId,huzhouPlaninfoArrayList.get(0).getGroupId());
update(null,wrapper); update(null,wrapper);
//批量新增 // 筛选掉项目立项阶段
huzhouPlaninfoArrayList.removeIf(item -> "项目立项阶段".equals(item.getTaskName())); huzhouPlaninfoArrayList.removeIf(item -> "项目立项阶段".equals(item.getTaskName()));
//批量新增
for (HuzhouPlaninfo huzhouPlaninfo : huzhouPlaninfoArrayList) {
log.info("待插入的计划信息为{}",huzhouPlaninfo.getTaskLevel());
}
saveBatch(huzhouPlaninfoArrayList); saveBatch(huzhouPlaninfoArrayList);
//创建流程 //创建流程
@ -926,6 +919,28 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
projectinfoService.modifyStageById(projectid,"4"); projectinfoService.modifyStageById(projectid,"4");
} }
private void checkExcelPlanLastLevelTime(List<HuzhouPlaninfo> huzhouPlaninfoArrayList) {
HuzhouPlaninfo targetElement = huzhouPlaninfoArrayList.stream()
.filter(planInfo -> "示范项目验收阶段".equals(planInfo.getTaskName()))
.findFirst()
.orElse(null); // 如果没有找到符合条件的元素,则返回null
if (targetElement != null) {
Date scheduledEndTime = targetElement.getScheduledEndTime();
// 创建一个 Calendar 实例,并设置为 2025年12月31日
Calendar calendar = Calendar.getInstance();
// 设置时间为当天的最后一秒
calendar.set(2025, Calendar.DECEMBER, 31, 23, 59, 59);
// 获取对应的时间
Date deadline = calendar.getTime();
// 比较 scheduledEndTime 是否晚于 deadline
if (scheduledEndTime.after(deadline)) {
throw new EasyException("示范项目结束时间校验错误,请修改!");
}
}
}
private void updatePlanForShenPiAndFinished(List<HuzhouPlaninfo> huzhouPlaninfoArrayList, List<HuzhouPlaninfo> excelList, List<HuzhouPlaninfo> planinfoHistory) { private void updatePlanForShenPiAndFinished(List<HuzhouPlaninfo> huzhouPlaninfoArrayList, List<HuzhouPlaninfo> excelList, List<HuzhouPlaninfo> planinfoHistory) {
// 计算差集 // 计算差集
Set<String> keysFromHuzhouPlaninfoArrayList = huzhouPlaninfoArrayList.stream() Set<String> keysFromHuzhouPlaninfoArrayList = huzhouPlaninfoArrayList.stream()

Loading…
Cancel
Save