|
|
@@ -8,10 +8,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotattachment.vo.IotAttachmentSaveReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotprojectinfo.vo.IotProjectInfoPageReqVO;
|
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotprojecttask.vo.IotProjectTaskPageReqVO;
|
|
|
-import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportPageReqVO;
|
|
|
-import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportSaveReqVO;
|
|
|
-import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportStatisticsItemVO;
|
|
|
-import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.IotRdDailyReportStatisticsRespVO;
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.iotrddailyreport.vo.*;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotattachment.IotAttachmentDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojectinfo.IotProjectInfoDO;
|
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotprojecttask.IotProjectTaskDO;
|
|
|
@@ -34,6 +31,10 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -304,12 +305,49 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
Map<Long, String> projectPair = new HashMap<>();
|
|
|
// key任务id value任务井号
|
|
|
Map<Long, String> taskPair = new HashMap<>();
|
|
|
+ // key任务id value任务施工状态
|
|
|
+ Map<Long, String> taskStatusPair = new HashMap<>();
|
|
|
// 施工工艺 key字典键值 value字典标签
|
|
|
Map<String, String> techniqueDictPair = new HashMap<>();
|
|
|
// key任务id value任务工作量
|
|
|
Map<Long, BigDecimal> taskWorkloadPair = new HashMap<>();
|
|
|
// key任务id value任务工艺名称
|
|
|
Map<Long, String> taskTechniquePair = new HashMap<>();
|
|
|
+ // key任务id value任务的施工周期天数
|
|
|
+ Map<Long, String> taskPeriodPair = new HashMap<>();
|
|
|
+ // 查询所有日报关联任务的施工周期
|
|
|
+ List<IotRdDailyReportTaskPeriodVO> taskPeriods = iotRdDailyReportMapper.taskConstructionPeriod();
|
|
|
+ if (CollUtil.isNotEmpty(taskPeriods)) {
|
|
|
+ // 定义日期格式化器,匹配"yyyy-MM-dd HH:mm:ss"格式
|
|
|
+ DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ taskPeriods.forEach(period -> {
|
|
|
+ // 如果 startDate endDate 都存在 计算施工周期天数
|
|
|
+ if (StrUtil.isNotBlank(period.getStartDate()) && StrUtil.isNotBlank(period.getEndDate())) {
|
|
|
+ // 计算 startDate endDate 之间的差值
|
|
|
+ try {
|
|
|
+ // 1. 解析日期字符串为LocalDateTime
|
|
|
+ LocalDateTime startLdt = LocalDateTime.parse(period.getStartDate(), dtf);
|
|
|
+ LocalDateTime endLdt = LocalDateTime.parse(period.getEndDate(), dtf);
|
|
|
+
|
|
|
+ // 2. 截断时分秒,仅保留日期部分
|
|
|
+ LocalDate startDate = startLdt.toLocalDate();
|
|
|
+ LocalDate endDate = endLdt.toLocalDate();
|
|
|
+
|
|
|
+ // 3. 计算日期差值(天),+1满足「同一天算1天」的规则
|
|
|
+ long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);
|
|
|
+ long constructionDays = daysDiff + 1;
|
|
|
+
|
|
|
+ // 4. 存入任务-施工周期映射(key=任务ID,value=天数字符串)
|
|
|
+ taskPeriodPair.put(period.getTaskId(), String.valueOf(constructionDays));
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 解析失败时默认周期为1天(可根据业务调整,也可记录日志)
|
|
|
+ taskPeriodPair.put(period.getTaskId(), "1");
|
|
|
+ // 可选:添加日志打印
|
|
|
+ // log.error("解析任务施工周期日期失败,taskId={}, startDate={}, endDate={}", period.getTaskId(), period.getStartDate(), period.getEndDate(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
if (CollUtil.isNotEmpty(dailyReports)) {
|
|
|
// 遍历日报 找到每个日报关联的任务的 施工队伍
|
|
|
List<Long> taskIds = convertList(dailyReports, IotRdDailyReportDO::getTaskId);
|
|
|
@@ -371,6 +409,7 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
if (CollUtil.isNotEmpty(tasks)) {
|
|
|
tasks.forEach(task -> {
|
|
|
taskPair.put(task.getId(), task.getWellName());
|
|
|
+ taskStatusPair.put(task.getId(), task.getStatus());
|
|
|
// 获取所有任务的工作量数据
|
|
|
taskWorkloadPair.put(task.getId(), new BigDecimal(task.getWorkloadDesign()));
|
|
|
if (techniqueDictPair.containsKey(task.getTechnique())) {
|
|
|
@@ -525,6 +564,7 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
/* if (teamDeptPair.containsKey(deptId)) {
|
|
|
uniqueReport.setDeptName(teamDeptPair.get(deptId));
|
|
|
} */
|
|
|
+ uniqueReport.setTaskId(taskId);
|
|
|
if (taskDeptNamePair.containsKey(taskId)) {
|
|
|
uniqueReport.setDeptName(taskDeptNamePair.get(taskId));
|
|
|
}
|
|
|
@@ -543,6 +583,12 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
if (taskPair.containsKey(taskId)) {
|
|
|
uniqueReport.setWellName(taskPair.get(taskId));
|
|
|
}
|
|
|
+ if (taskPeriodPair.containsKey(taskId)) {
|
|
|
+ uniqueReport.setPeriod(taskPeriodPair.get(taskId));
|
|
|
+ }
|
|
|
+ if (taskStatusPair.containsKey(taskId)) {
|
|
|
+ uniqueReport.setRdStatus(taskStatusPair.get(taskId));
|
|
|
+ }
|
|
|
if (taskTechniquePair.containsKey(taskId)) {
|
|
|
uniqueReport.setTechniques(taskTechniquePair.get(taskId));
|
|
|
}
|