Commit e386f50f2c2cd7212317bba9308d5b7788f11628

Authored by wangqian
1 parent 1b1565f3

到期任务优化

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 46 * 批量更新“是否超时”字段
47 47 */
48 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 238 String batchId = String.valueOf(System.currentTimeMillis()); // 批次ID,便于日志追踪
239 239 log.info("[派单超时处理-{}] 开始处理超时派单,当前时间:{}", batchId, now);
240 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 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 263 if (CollectionUtils.isEmpty(timeoutTaskInfos)) {
284 264 log.info("[派单超时处理-{}] 无超时的派单详情,无需更新", batchId);
285 265 return 0;
... ...
urbanops-module-garden/src/main/resources/mapper/assigntasksinfo/AssignTasksInfoMapper.xml
... ... @@ -25,4 +25,21 @@
25 25 and finish = 0
26 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 45 </mapper>
... ...