|
@ -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()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|