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,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>