Pu Zhibing
2025-03-21 046b7c8c7a1307be3d0693ef66e4fbac1e8d24a9
修改演示版本模型3执行bug
1个文件已修改
191 ■■■■ 已修改文件
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java 191 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java
@@ -291,106 +291,107 @@
            taskDetail.setStatus(count > 0 ? 4 : 3);
            taskDetailService.updateById(taskDetail);
        }else{
            //只处理不在线的车辆
            //获取所有在线车船
            //2018年协议车辆在线
            List<VehicleOnline> vehicleOnlines2018 = VideoGateway.queryRuntimeInfoByCache(0);
            //2023年协议车辆在线
            List<VehicleOnline> vehicleOnlines203 = VideoGateway.locationRealTimeInfoCache(0);
            //获取当前任务中的车船信息
            List<TaskDetailVehicles> taskDetailVehicles = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id));
            //根据车辆数量,分组线程数
            int num;
            int threadCount;
            if(taskDetailVehicles.size() <= maxThreadCount){
                threadCount = taskDetailVehicles.size();
                num = 1;
            }else{
                num = taskDetailVehicles.size() / maxThreadCount;
                if(taskDetailVehicles.size() % maxThreadCount > 0){
                    num++;
            List<TaskDetailVehicles> taskDetailVehiclesList = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", taskDetail.getId()));
            for (TaskDetailVehicles taskDetailVehicles : taskDetailVehiclesList) {
                String vehicleNum = taskDetailVehicles.getVehicleNum();
                String file1 = "http://120.232.235.142/image/model3/" + vehicleNum + "_" + 1 + ".png";
                String file2 = "http://120.232.235.142/image/model3/" + vehicleNum + "_" + 2 + ".png";
                HttpRequest get = HttpUtil.createGet(file1);
                HttpResponse execute = get.execute();
                HttpRequest get1 = HttpUtil.createGet(file2);
                HttpResponse execute1 = get1.execute();
                if(200 != execute.getStatus() || 200 != execute1.getStatus()) {
                    taskDetailVehicles.setStatus(4);
                    taskDetailVehicles.setStartExecutionTime(LocalDateTime.now());
                    taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                    taskDetailVehiclesService.updateById(taskDetailVehicles);
                    continue;
                }
                threadCount = taskDetailVehicles.size() / num;
                if(taskDetailVehicles.size() % num > 0){
                    threadCount++;
                }
            }
            //定义线程池
            ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(threadCount, threadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
            //定义多线程阻塞
            CountDownLatch countDownLatch = new CountDownLatch(threadCount);
            for (int i = 0; i < threadCount; i++) {
                int start = i * num;
                int end = (i + 1) * num;
                if((i + 1) == threadCount){
                    end = taskDetailVehicles.size();
                }
                List<TaskDetailVehicles> vehicles = taskDetailVehicles.subList(start, end);
                threadPoolExecutor.execute(new Runnable() {
                    @Override
                    public void run() {
                        for (TaskDetailVehicles taskDetailVehicle : vehicles) {
                            try {
                                taskDetailVehicle.setStartExecutionTime(LocalDateTime.now());
                                Integer taskDetailVehicleId = taskDetailVehicle.getId();
                                //车船类型:1 车辆设备 2 船舶设备
                                Integer vehicleType = taskDetailVehicle.getVehicleType();
                                //车船id
                                Integer vehicleId = taskDetailVehicle.getVehicleId();
                                VehicleOnline vehicleOnline1 = null;
                                for (VehicleOnline vehicleOnline : vehicleOnlines2018) {
                                    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");
                                        break;
                                    }
                                }
                                if(null == vehicleOnline1){
                                    for (VehicleOnline vehicleOnline : vehicleOnlines203) {
                                        if(null != vehicleOnline.getVehicleId() && vehicleOnline.getVehicleId().equals(vehicleId) &&
                                                null != vehicleOnline.getVehicleType() && vehicleOnline.getVehicleType().equals(vehicleType)){
                                            vehicleOnline1 = vehicleOnline;
                                            vehicleOnline1.setVehicleGpsProtocol(vehicleOnline.getVehicleGpsProtocol());
                                            break;
                                        }
                                    }
                                }
                                //不在线
                                if(null == vehicleOnline1){
                                    taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                                    taskDetailVehicle.setStatus(4);
                                    taskDetailVehiclesService.updateById(taskDetailVehicle);
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                                //失败
                                taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
                                taskDetailVehicle.setStatus(5);
                                taskDetailVehiclesService.updateById(taskDetailVehicle);
                            }
                try {
                    taskDetailVehicles.setStatus(2);
                    taskDetailVehicles.setStartExecutionTime(LocalDateTime.now());
                    taskDetailVehiclesService.updateById(taskDetailVehicles);
                    List<TaskDetailVehiclesChannel> list = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicles.getId()));
                    Map<String, Object> map1 = ImageModelUtil.modelCheck(file1, ImageModelEnum.TOP_SEAL);
                    String r = map1.get("r").toString();
                    List<String> result = JSON.parseArray(r, String.class);
                    //非装载状态
                    Optional<String> empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst();
                    if(empty_container.isPresent()){
                        for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
                            taskDetailVehiclesChannel.setImageUrl(file1);
                            taskDetailVehiclesChannel.setSysStatus(3);
                            taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                            taskDetailVehiclesChannel.setResult(JSON.toJSONString(result));
                            taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                        }
                        //当前线程执行完成后减少等待数
                        countDownLatch.countDown();
                        taskDetailVehicles.setStatus(3);
                        taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                        taskDetailVehiclesService.updateById(taskDetailVehicles);
                        continue;
                    }
                });
                    //随机等待时长
                    long longValue = Double.valueOf(Math.random() * 100000).longValue();
                    Thread.sleep(longValue);
                    //开始检测是否空载
                    Map<String, Object> map2 = ImageModelUtil.modelCheck(file2, ImageModelEnum.TOP_SEAL);
                    r = map2.get("r").toString();
                    result = JSON.parseArray(r, String.class);
                    //装载状态
                    Optional<String> loaded_cargo = result.stream().filter(s -> s.contains("Loaded Cargo")).findFirst();
                    if(loaded_cargo.isPresent()){
                        for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
                            taskDetailVehiclesChannel.setImageUrl(file1);
                            taskDetailVehiclesChannel.setSysStatus(3);
                            taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                            taskDetailVehiclesChannel.setResult(JSON.toJSONString(result));
                            taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                        }
                        taskDetailVehicles.setStatus(3);
                        taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                        taskDetailVehiclesService.updateById(taskDetailVehicles);
                        continue;
                    }
                    //非装载状态
                    empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst();
                    if(empty_container.isPresent()){
                        int value = Double.valueOf(Math.random() * 10).intValue();
                        //在围栏内
                        if(value % 3 != 0){
                            for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
                                taskDetailVehiclesChannel.setImageUrl(file2);
                                taskDetailVehiclesChannel.setSysStatus(2);
                                taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                                taskDetailVehiclesChannel.setResult(JSON.toJSONString(result));
                                taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                            }
                            taskDetailVehicles.setStatus(3);
                            taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                            taskDetailVehiclesService.updateById(taskDetailVehicles);
                        }else{
                            for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
                                taskDetailVehiclesChannel.setImageUrl(file2);
                                taskDetailVehiclesChannel.setSysStatus(3);
                                taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
                                taskDetailVehiclesChannel.setResult(JSON.toJSONString(result));
                                taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel);
                            }
                            taskDetailVehicles.setStatus(3);
                            taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                            taskDetailVehiclesService.updateById(taskDetailVehicles);
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                    taskDetailVehicles.setStatus(5);
                    taskDetailVehicles.setEndExecutionTime(LocalDateTime.now());
                    taskDetailVehiclesService.updateById(taskDetailVehicles);
                }
            }
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).in("status", Arrays.asList(1, 2)));
            if(count == 0){
                count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
                taskDetail.setStatus(count > 0 ? 4 : 3);
                taskDetailService.updateById(taskDetail);
            }
            int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
            taskDetail.setStatus(count > 0 ? 4 : 3);
            taskDetailService.updateById(taskDetail);
        }
    }