TicketsTask.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.example.unusualsounds.project.vox.task;
  2. import com.example.unusualsounds.project.vox.config.VideoTaskManager;
  3. import com.example.unusualsounds.project.vox.entity.VoiceTicketLogs;
  4. import com.example.unusualsounds.project.vox.service.impl.VoiceTicketLogsServiceImpl;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.cache.annotation.CacheEvict;
  9. import org.springframework.scheduling.annotation.Scheduled;
  10. import org.springframework.stereotype.Component;
  11. import java.util.*;
  12. import java.util.stream.Collectors;
  13. /**
  14. * 工单定时任务
  15. * ---
  16. * 用于应对边缘测网络问题,主要针对定时关闭问题
  17. * 1. 算法启接口调用后,将工单存入表中
  18. * 2. 定时查询本地存入的工单,主要侦测当前停止的工单任务是否再运行
  19. * 3. 只添加算法停接口因网络问题未收到停止的请求
  20. * 4. 忽略因网络问题未收到启动的请求,所以定时查询是自己表内已经插入的数据
  21. *
  22. */
  23. @Component
  24. @Slf4j
  25. public class TicketsTask {
  26. @Autowired
  27. private VideoTaskManager videoTaskManager;
  28. @Autowired
  29. private VoiceTicketLogsServiceImpl voiceTicketLogsServiceImpl;
  30. @Value("${vox.video-dir}")
  31. private String videoDir;
  32. @Scheduled(cron = "0 */10 * * * ?")
  33. public void checkStopTickets() {
  34. List<String> strings = this.stopTickets();
  35. if (strings != null && strings.size() > 0) {
  36. strings.forEach(s -> {
  37. try {
  38. videoTaskManager.stopTask(s);
  39. } catch (InterruptedException e) {
  40. throw new RuntimeException(e);
  41. }
  42. });
  43. }else {
  44. log.info("定时停止工单:无");
  45. }
  46. }
  47. /**
  48. * 停止到时间未停止的工单
  49. * @return
  50. */
  51. public List<String> stopTickets() {
  52. List<VideoTaskManager.TaskStatus> taskStatuses = videoTaskManager.listTasks();
  53. if(taskStatuses == null || taskStatuses.size() == 0) return null;
  54. //openUuid,streamId
  55. Map<String, String> taskStatusesList = new HashMap<>();
  56. taskStatuses.forEach(
  57. task ->{
  58. taskStatusesList.put(task.getOpenUuid(),task.getStreamId());
  59. }
  60. );
  61. List<VoiceTicketLogs> delTasks = voiceTicketLogsServiceImpl.contrastTasks(taskStatusesList);
  62. delTasks.forEach(str -> {
  63. log.info("需要停止的工单:{}",str);
  64. });
  65. List<String> collect = delTasks.stream().map(
  66. task -> {
  67. return task.getDeviceUuid() + "_" + task.getSkillName();
  68. })
  69. .distinct().collect(Collectors.toList());
  70. return collect;
  71. }
  72. }