Pu Zhibing
2024-12-30 443dffce29daf6ed03b3c2137738925e315fb09f
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
@@ -35,7 +35,12 @@
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
 * @author zhibing.pu
@@ -65,91 +70,95 @@
    */
   @Override
   public void addPatrolTask(PatrolTaskVo vo, String userId) {
      if(vo.getStartTime().isAfter(vo.getEndTime())){
      if(vo.getType() == 1 && vo.getStartTime().isAfter(vo.getEndTime())){
         throw new RuntimeException("结束时间不能小于开始时间");
      }
      //构建主数据
      PatrolTask patrolTask = new PatrolTask();
      BeanUtils.copyProperties(vo, patrolTask);
      patrolTask.setCreateTime(LocalDateTime.now());
      patrolTask.setCreateUserId(Integer.valueOf(userId));
      this.insert(patrolTask);
      if(vo.getType() == 2){
         //实时任务,手动添加后续逻辑中需要的数据
         LocalDateTime now = LocalDateTime.now();
         vo.setWeeks("[" + now.getDayOfWeek().getValue() + "]");
         vo.setStartTime(now);
         vo.setExecutionTime(now.plusSeconds(5).format(DateTimeFormatter.ofPattern("HH:mm:ss")));
         vo.setEndTime(now.plusSeconds(10));
      }
      String weeks = vo.getWeeks();
      List<Integer> week = JSON.parseArray(weeks, Integer.class);
      //构建明细任务
      LocalDateTime startTime = vo.getStartTime();
      LocalDateTime endTime = vo.getEndTime();
      while (true){
         if(startTime.compareTo(endTime) >= 0){
            break;
         }
         int value = startTime.getDayOfWeek().getValue();
         if(week.contains(value)){
            TaskDetail taskDetail = new TaskDetail();
            taskDetail.setCode(UUIDUtil.getTimeStr());
            taskDetail.setPatrolTaskId(patrolTask.getId());
            taskDetail.setStatus(1);
            String executionTime = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " " + vo.getExecutionTime();
            taskDetail.setExecutionTime(LocalDateTime.parse(executionTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            taskDetail.setDelFlag(0);
            taskDetailService.insert(taskDetail);
            //添加任务和车船关系数据
            List<VehicleVo> vehicle = vo.getVehicle();
            for (VehicleVo vehicleVo : vehicle) {
               TaskDetailVehicles taskDetailVehicles = new TaskDetailVehicles();
               taskDetailVehicles.setPatrolTaskId(patrolTask.getId());
               taskDetailVehicles.setTaskDetailId(taskDetail.getId());
               taskDetailVehicles.setVehicleId(vehicleVo.getVehicleId());
               taskDetailVehicles.setVehicleNum(vehicleVo.getVehicleNum());
               taskDetailVehicles.setVehicleType(vehicleVo.getVehicleType());
               taskDetailVehicles.setVehicleIdUnique(vehicleVo.getVehicleId() + "_" + vehicleVo.getVehicleType());
               taskDetailVehicles.setCompanyId(vehicleVo.getCompanyId());
               taskDetailVehicles.setCompanyName(vehicleVo.getCompanyName());
               taskDetailVehicles.setInspectPeriodStart(vehicleVo.getInspectPeriodStart());
               taskDetailVehicles.setInspectPeriodEnd(vehicleVo.getInspectPeriodEnd());
               taskDetailVehicles.setStatus(1);
               taskDetailVehiclesService.insert(taskDetailVehicles);
               //添加任务车船视频通道关系数据
               List<Integer> videoChannel = vo.getVideoChannel();
               for (Integer s : videoChannel) {
                  TaskDetailVehiclesChannel taskDetailVehiclesChannel = new TaskDetailVehiclesChannel();
                  taskDetailVehiclesChannel.setPatrolTaskId(patrolTask.getId());
                  taskDetailVehiclesChannel.setTaskDetailId(taskDetail.getId());
                  taskDetailVehiclesChannel.setTaskDetailVehiclesId(taskDetailVehicles.getId());
                  taskDetailVehiclesChannel.setVideoChannel(s);
                  taskDetailVehiclesChannel.setSysStatus(1);
                  taskDetailVehiclesChannelService.insert(taskDetailVehiclesChannel);
      ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
      threadPoolExecutor.execute(new Runnable() {
         @Override
         public void run() {
            //构建主数据
            PatrolTask patrolTask = new PatrolTask();
            BeanUtils.copyProperties(vo, patrolTask);
            patrolTask.setCreateTime(LocalDateTime.now());
            patrolTask.setCreateUserId(Integer.valueOf(userId));
            PatrolTaskServiceImpl.this.insert(patrolTask);
            if(vo.getType() == 2){
               //实时任务,手动添加后续逻辑中需要的数据
               LocalDateTime now = LocalDateTime.now();
               vo.setWeeks("[" + now.getDayOfWeek().getValue() + "]");
               vo.setStartTime(now);
               vo.setExecutionTime(now.plusSeconds(5).format(DateTimeFormatter.ofPattern("HH:mm")));
               vo.setEndTime(now.plusSeconds(10));
            }
            String weeks = vo.getWeeks();
            List<Integer> week = JSON.parseArray(weeks, Integer.class);
            //构建明细任务
            LocalDateTime startTime = vo.getStartTime();
            LocalDateTime endTime = vo.getEndTime();
            while (true){
               if(startTime.compareTo(endTime) >= 0){
                  break;
               }
            }
            //添加定时任务
            JobDataMap jobDataMap = new JobDataMap();
            jobDataMap.put("id", taskDetail.getId());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
               quartzUtil.addSimpleQuartzTask(PatrolTaskJob.class,patrolTask.getName() + "_" + taskDetail.getId(), QuartzEnum.DEFAULT_GROUP.getValue(), jobDataMap
                     , sdf.parse(executionTime), 0, 0);
            } catch (SchedulerException e) {
               throw new RuntimeException(e);
            } catch (ParseException e) {
               throw new RuntimeException(e);
               int value = startTime.getDayOfWeek().getValue();
               if(week.contains(value)){
                  TaskDetail taskDetail = new TaskDetail();
                  taskDetail.setCode(UUIDUtil.getTimeStr());
                  taskDetail.setPatrolTaskId(patrolTask.getId());
                  taskDetail.setStatus(1);
                  String executionTime = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + " " + vo.getExecutionTime();
                  taskDetail.setExecutionTime(LocalDateTime.parse(executionTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
                  taskDetail.setDelFlag(0);
                  taskDetailService.insert(taskDetail);
                  //添加任务和车船关系数据
                  List<VehicleVo> vehicle = vo.getVehicle();
                  for (VehicleVo vehicleVo : vehicle) {
                     TaskDetailVehicles taskDetailVehicles = new TaskDetailVehicles();
                     taskDetailVehicles.setPatrolTaskId(patrolTask.getId());
                     taskDetailVehicles.setTaskDetailId(taskDetail.getId());
                     taskDetailVehicles.setVehicleId(vehicleVo.getVehicleId());
                     taskDetailVehicles.setVehicleNum(vehicleVo.getVehicleNum());
                     taskDetailVehicles.setVehicleType(vehicleVo.getVehicleType());
                     taskDetailVehicles.setVehicleIdUnique(vehicleVo.getVehicleId() + "_" + vehicleVo.getVehicleType());
                     taskDetailVehicles.setCompanyId(vehicleVo.getCompanyId());
                     taskDetailVehicles.setCompanyName(vehicleVo.getCompanyName());
                     taskDetailVehicles.setInspectPeriodStart(vehicleVo.getInspectPeriodStart());
                     taskDetailVehicles.setInspectPeriodEnd(vehicleVo.getInspectPeriodEnd());
                     taskDetailVehicles.setStatus(1);
                     taskDetailVehiclesService.insert(taskDetailVehicles);
                     //添加任务车船视频通道关系数据
                     List<Integer> videoChannel = vo.getVideoChannel();
                     for (Integer s : videoChannel) {
                        TaskDetailVehiclesChannel taskDetailVehiclesChannel = new TaskDetailVehiclesChannel();
                        taskDetailVehiclesChannel.setPatrolTaskId(patrolTask.getId());
                        taskDetailVehiclesChannel.setTaskDetailId(taskDetail.getId());
                        taskDetailVehiclesChannel.setTaskDetailVehiclesId(taskDetailVehicles.getId());
                        taskDetailVehiclesChannel.setVideoChannel(s);
                        taskDetailVehiclesChannel.setSysStatus(1);
                        taskDetailVehiclesChannelService.insert(taskDetailVehiclesChannel);
                     }
                  }
                  //添加定时任务
                  JobDataMap jobDataMap = new JobDataMap();
                  jobDataMap.put("id", taskDetail.getId());
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                  try {
                     quartzUtil.addSimpleQuartzTask(PatrolTaskJob.class,patrolTask.getName() + "_" + taskDetail.getId(), QuartzEnum.DEFAULT_GROUP.getValue(), jobDataMap
                           , sdf.parse(executionTime), 0, 0);
                  } catch (SchedulerException e) {
                     throw new RuntimeException(e);
                  } catch (ParseException e) {
                     throw new RuntimeException(e);
                  }
               }
               //添加一天
               startTime = startTime.plusDays(1);
            }
         }
         //添加一天
         startTime = startTime.plusDays(1);
      }
      });
   }
   
   
@@ -185,7 +194,8 @@
            Integer vehicleId = taskDetailVehicle.getVehicleId();
            VehicleOnline vehicleOnline1 = null;
            for (VehicleOnline vehicleOnline : vehicleOnlines2018) {
               if(vehicleOnline.getVehicleId().equals(vehicleId) && vehicleOnline.getVehicleType().equals(vehicleType)){
               if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                     null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                  vehicleOnline1 = vehicleOnline;
                  String vehicleGpsProtocol = vehicleOnline.getVehicleGpsProtocol();
                  vehicleOnline1.setVehicleGpsProtocol("808-guangzhou".equals(vehicleGpsProtocol) ? "1" : "2");
@@ -194,7 +204,8 @@
            }
            if(null == vehicleOnline1){
               for (VehicleOnline vehicleOnline : vehicleOnlines203) {
                  if(vehicleOnline.getVehicleId().equals(vehicleId) && vehicleOnline.getVehicleType().equals(vehicleType)){
                  if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                        null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                     vehicleOnline1 = vehicleOnline;
                     vehicleOnline1.setVehicleGpsProtocol(vehicleOnline.getVehicleGpsProtocol());
                     break;
@@ -217,6 +228,7 @@
            String terminalId = vehicleOnline1.getTerminalId();
            for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : taskDetailVehiclesChannels) {
               Integer videoChannel = taskDetailVehiclesChannel.getVideoChannel();
               if("1".equals(vehicleGpsProtocol)){
                  //2018 协议
                  String fileId = VideoGateway.cameraShot2018(terminalId, videoChannel, 0);
@@ -225,7 +237,7 @@
                     throw new RuntimeException();
                  }else{
                     //等待15秒
                     Thread.sleep(15000);
                     Thread.sleep(30000);
                     
                     String fileUrl = VideoGateway.getCameraShotByFileId2018(terminalId, fileId, 0);
                     if(null == fileUrl){
@@ -237,7 +249,7 @@
                           throw new Exception();
                        }else{
                           //等待15秒
                           Thread.sleep(15000);
                           Thread.sleep(30000);
                           
                           fileUrl = VideoGateway.getCameraShotByFileId2018(terminalId, fileId, 0);
                           if(null == fileUrl){
@@ -248,8 +260,11 @@
                              taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                              taskDetailVehiclesChannel.setArtificialStatus(1);
                              //开始调模型接口得出结果
                              boolean b = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                              Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                              Boolean b = (Boolean) map.get("b");
                              String r = map.get("r").toString();
                              taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
                              taskDetailVehiclesChannel.setResult(r);
                              taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                           }
                        }
@@ -258,8 +273,11 @@
                        taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                        taskDetailVehiclesChannel.setArtificialStatus(1);
                        //开始调模型接口得出结果
                        boolean b = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                        Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                        Boolean b = (Boolean) map.get("b");
                        String r = map.get("r").toString();
                        taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
                        taskDetailVehiclesChannel.setResult(r);
                        taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                     }
                  }
@@ -271,7 +289,7 @@
                     throw new Exception();
                  }else{
                     //等待15秒
                     Thread.sleep(15000);
                     Thread.sleep(30000);
                     
                     String fileUrl = VideoGateway.getCameraShotByFileId2023(fileId, 0);
                     if(null == fileUrl){
@@ -283,7 +301,7 @@
                           throw new Exception();
                        }else{
                           //等待15秒
                           Thread.sleep(15000);
                           Thread.sleep(30000);
                           
                           fileUrl = VideoGateway.getCameraShotByFileId2023(fileId, 0);
                           if(null == fileUrl){
@@ -294,8 +312,11 @@
                              taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                              taskDetailVehiclesChannel.setArtificialStatus(1);
                              //开始调模型接口得出结果
                              boolean b = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                              Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                              Boolean b = (Boolean) map.get("b");
                              String r = map.get("r").toString();
                              taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
                              taskDetailVehiclesChannel.setResult(r);
                              taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                           }
                        }
@@ -304,8 +325,11 @@
                        taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                        taskDetailVehiclesChannel.setArtificialStatus(1);
                        //开始调模型接口得出结果
                        boolean b = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                        Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.getImageModelEnum(patrolTask.getImageModel()));
                        Boolean b = (Boolean) map.get("b");
                        String r = map.get("r").toString();
                        taskDetailVehiclesChannel.setSysStatus(b ? 2 : 3);
                        taskDetailVehiclesChannel.setResult(r);
                        taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                     }
                  }