Commit e386f50f2c2cd7212317bba9308d5b7788f11628
1 parent
1b1565f3
到期任务优化
Showing
3 changed files
with
38 additions
and
38 deletions
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/assigntasksinfo/AssignTasksInfoMapper.java
| @@ -46,4 +46,7 @@ public interface AssignTasksInfoMapper extends BaseMapperX<AssignTasksInfoDO> { | @@ -46,4 +46,7 @@ public interface AssignTasksInfoMapper extends BaseMapperX<AssignTasksInfoDO> { | ||
| 46 | * 批量更新“是否超时”字段 | 46 | * 批量更新“是否超时”字段 |
| 47 | */ | 47 | */ |
| 48 | public int batchUpdateIsOverdue(@Param("list") List<AssignTasksInfoDO> taskInfoList); | 48 | public int batchUpdateIsOverdue(@Param("list") List<AssignTasksInfoDO> taskInfoList); |
| 49 | + | ||
| 50 | + /*查询超时派单*/ | ||
| 51 | + public List<AssignTasksInfoDO> selectOutTimeAssignTaskInfo(); | ||
| 49 | } | 52 | } |
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
| @@ -238,48 +238,28 @@ public class AssignTasksServiceImpl implements AssignTasksService { | @@ -238,48 +238,28 @@ public class AssignTasksServiceImpl implements AssignTasksService { | ||
| 238 | String batchId = String.valueOf(System.currentTimeMillis()); // 批次ID,便于日志追踪 | 238 | String batchId = String.valueOf(System.currentTimeMillis()); // 批次ID,便于日志追踪 |
| 239 | log.info("[派单超时处理-{}] 开始处理超时派单,当前时间:{}", batchId, now); | 239 | log.info("[派单超时处理-{}] 开始处理超时派单,当前时间:{}", batchId, now); |
| 240 | try { | 240 | try { |
| 241 | - // 2. 查询所有“未完成的派单”(parentFinish=0) | ||
| 242 | - List<AssignTasksDO> assignTasks = assignTasksMapper.selectList(AssignTasksDO::getParentFinish,0); | ||
| 243 | - if (CollectionUtils.isEmpty(assignTasks)) { | ||
| 244 | - log.info("[派单超时处理-{}] 无未完成的派单,无需处理", batchId); | 241 | + List<AssignTasksInfoDO> timeoutTaskInfos = new ArrayList<>(); |
| 242 | + List<AssignTasksInfoDO> taskInfoList = assiAssignTasksInfoMapper.selectOutTimeAssignTaskInfo(); | ||
| 243 | + if (CollectionUtils.isEmpty(taskInfoList)) { | ||
| 244 | + log.info("[派单超时处理-{}] 无超时派单,无需处理", batchId); | ||
| 245 | return 0; | 245 | return 0; |
| 246 | } | 246 | } |
| 247 | - log.info("[派单超时处理-{}] 查询到{}条未完成的派单", batchId, assignTasks.size()); | ||
| 248 | - | ||
| 249 | - List<AssignTasksInfoDO> timeoutTaskInfos = new ArrayList<>(); | ||
| 250 | - | ||
| 251 | - for (AssignTasksDO assignTasksDO : assignTasks) { | ||
| 252 | - Long taskId = assignTasksDO.getId(); | ||
| 253 | - //查询所有符合条件的派单详情(taskId in 列表 + finish=0) | ||
| 254 | - LambdaQueryWrapper<AssignTasksInfoDO> queryWrapper = Wrappers.lambdaQuery(); | ||
| 255 | - queryWrapper.eq(AssignTasksInfoDO::getFinish, 0); | ||
| 256 | - queryWrapper.eq(AssignTasksInfoDO::getTaskId, assignTasksDO.getId()); | ||
| 257 | - queryWrapper.eq(AssignTasksInfoDO::getIsOverdue, 0); | ||
| 258 | - List<AssignTasksInfoDO> taskInfoList = assiAssignTasksInfoMapper.selectList(queryWrapper); | ||
| 259 | - if (CollectionUtils.isEmpty(taskInfoList)) { | ||
| 260 | - log.info("[派单超时处理-{}] 派单ID:{} 无未完成/未超时的详情,跳过", batchId, taskId); | ||
| 261 | - continue; | ||
| 262 | - } | ||
| 263 | - | ||
| 264 | - // 4. 筛选“已超时”的派单详情(截止时间 < 当前时间) | ||
| 265 | - for (AssignTasksInfoDO taskInfo : taskInfoList) { | ||
| 266 | - // 4.1 | ||
| 267 | - Long detailId = taskInfo.getId(); | ||
| 268 | - LocalDateTime deadline = taskInfo.getDeadline(); | ||
| 269 | - String deadlineStr = deadline.format(DateUtils.DATE_TIME_FORMATTER); | ||
| 270 | - String nowStr = now.format(DateUtils.DATE_TIME_FORMATTER); | ||
| 271 | - boolean isOverdue = deadline.isBefore(now); | ||
| 272 | - log.info("[派单超时处理-{}] 派单详情ID:{} 时间对比 - 截止时间(deadline):{},当前时间(now):{},是否超时:{}", | ||
| 273 | - batchId, detailId, deadlineStr, nowStr, isOverdue); | ||
| 274 | - if (isOverdue) { | ||
| 275 | - taskInfo.setIsOverdue(1); // 标记为超时 | ||
| 276 | - timeoutTaskInfos.add(taskInfo); | ||
| 277 | - log.debug("[派单超时处理-{}] 派单详情ID:{} 已超时(截止时间:{})", | ||
| 278 | - batchId, taskInfo.getId(), deadline); | ||
| 279 | - } | 247 | + // 4. 筛选“已超时”的派单详情(截止时间 < 当前时间) |
| 248 | + for (AssignTasksInfoDO taskInfo : taskInfoList) { | ||
| 249 | + Long detailId = taskInfo.getId(); | ||
| 250 | + LocalDateTime deadline = taskInfo.getDeadline(); | ||
| 251 | + String deadlineStr = deadline.format(DateUtils.DATE_TIME_FORMATTER); | ||
| 252 | + String nowStr = now.format(DateUtils.DATE_TIME_FORMATTER); | ||
| 253 | + boolean isOverdue = deadline.isBefore(now); | ||
| 254 | + log.info("[派单超时处理-{}] 派单详情ID:{} 时间对比 - 截止时间(deadline):{},当前时间(now):{},是否超时:{}", | ||
| 255 | + batchId, detailId, deadlineStr, nowStr, isOverdue); | ||
| 256 | + if (isOverdue) { | ||
| 257 | + taskInfo.setIsOverdue(1); // 标记为超时 | ||
| 258 | + timeoutTaskInfos.add(taskInfo); | ||
| 259 | + log.debug("[派单超时处理-{}] 派单详情ID:{} 已超时(截止时间:{})", | ||
| 260 | + batchId, taskInfo.getId(), deadline); | ||
| 280 | } | 261 | } |
| 281 | } | 262 | } |
| 282 | - | ||
| 283 | if (CollectionUtils.isEmpty(timeoutTaskInfos)) { | 263 | if (CollectionUtils.isEmpty(timeoutTaskInfos)) { |
| 284 | log.info("[派单超时处理-{}] 无超时的派单详情,无需更新", batchId); | 264 | log.info("[派单超时处理-{}] 无超时的派单详情,无需更新", batchId); |
| 285 | return 0; | 265 | return 0; |
urbanops-module-garden/src/main/resources/mapper/assigntasksinfo/AssignTasksInfoMapper.xml
| @@ -25,4 +25,21 @@ | @@ -25,4 +25,21 @@ | ||
| 25 | and finish = 0 | 25 | and finish = 0 |
| 26 | </update> | 26 | </update> |
| 27 | 27 | ||
| 28 | + <select id="selectOutTimeAssignTaskInfo" resultType="com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO" > | ||
| 29 | + SELECT | ||
| 30 | + t.* | ||
| 31 | + FROM | ||
| 32 | + garden_assign_tasks_info t | ||
| 33 | + LEFT JOIN | ||
| 34 | + garden_assign_tasks a | ||
| 35 | + ON t.task_id = a.id | ||
| 36 | + AND a.parent_finish = 0 | ||
| 37 | + AND a.deleted = 0 | ||
| 38 | + WHERE | ||
| 39 | + t.finish = 0 | ||
| 40 | + AND t.deleted = 0 | ||
| 41 | + AND t.is_overdue = 0; | ||
| 42 | + </select> | ||
| 43 | + | ||
| 44 | + | ||
| 28 | </mapper> | 45 | </mapper> |