|
|
@@ -315,39 +315,7 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
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);
|
|
|
@@ -418,6 +386,46 @@ public class IotRdDailyReportServiceImpl implements IotRdDailyReportService {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ // 查询所有日报关联任务的施工周期
|
|
|
+ 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 都存在 计算施工周期天数 考虑到日报审批后才会更新任务状态
|
|
|
+ // 所以计算任务施工周期时 要筛选出施工完成的任务
|
|
|
+ String taskStatus = StrUtil.EMPTY;
|
|
|
+ if (taskStatusPair.containsKey(period.getTaskId())) {
|
|
|
+ taskStatus = taskStatusPair.get(period.getTaskId());
|
|
|
+ }
|
|
|
+ if (StrUtil.isNotBlank(period.getStartDate()) && StrUtil.isNotBlank(period.getEndDate()) && "wg".equals(taskStatus)) {
|
|
|
+ // 计算 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// 设置 小队 任务已经完成的工作量集合 (按照不同的单位统计任务的不同工作量)
|
|
|
// key任务井id value队伍工作量数据
|
|
|
Map<Long, BigDecimal> bridgePlugPair = new HashMap<>();
|