From 65086c1346b2ce477516cb419e4d7932aa68fad0 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 10 三月 2025 14:37:48 +0800 Subject: [PATCH] 修改导出bug --- guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java | 174 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 108 insertions(+), 66 deletions(-) diff --git a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java index fe751f3..ae12f9c 100644 --- a/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java +++ b/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/PatrolTaskServiceImpl.java @@ -1,5 +1,8 @@ package com.stylefeng.guns.modular.system.service.impl; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.util.ToolUtil; @@ -190,6 +193,105 @@ taskDetailService.updateById(taskDetail); PatrolTask patrolTask = this.selectById(taskDetail.getPatrolTaskId()); if(!patrolTask.getImageModel().equals(ImageModelEnum.CONSTRUCTION_WASTE_LOAD.getCode())){ + //获取当前任务中的车船信息 + 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++; + } + 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(); + taskDetailVehicle.setStatus(2); + taskDetailVehiclesService.updateById(taskDetailVehicle); + + //成功 + List<TaskDetailVehiclesChannel> taskDetailVehiclesChannels = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicleId)); + //开始发送拍照指令,获取照片地址 + for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : taskDetailVehiclesChannels) { + try { + Integer videoChannel = taskDetailVehiclesChannel.getVideoChannel(); + String imageModel = patrolTask.getImageModel(); + String fileUrl = null; + if(imageModel.equals(ImageModelEnum.TOP_SEAL.getCode())){ + fileUrl = "http://120.232.235.142/image/model1/" + taskDetailVehicle.getVehicleNum() + "_" + videoChannel + ".png"; + } + if(imageModel.equals(ImageModelEnum.CAMERA_FAULT.getCode())){ + fileUrl = "http://120.232.235.142/image/model2/" + taskDetailVehicle.getVehicleNum() + "_" + videoChannel + ".png"; + } + HttpRequest get = HttpUtil.createGet(fileUrl); + HttpResponse execute = get.execute(); + if(200 == execute.getStatus()){ + taskDetailVehiclesChannel.setImageUrl(fileUrl); + taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); + taskDetailVehiclesChannel.setArtificialStatus(1); + //开始调模型接口得出结果 + 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); + } + }catch (Exception e){ + taskDetailVehiclesChannel.setResult(e.getMessage()); + taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); + } + } + taskDetailVehicle.setEndExecutionTime(LocalDateTime.now()); + taskDetailVehicle.setStatus(3); + taskDetailVehiclesService.updateById(taskDetailVehicle); + }catch (Exception e){ + e.printStackTrace(); + //失败 + taskDetailVehicle.setEndExecutionTime(LocalDateTime.now()); + taskDetailVehicle.setStatus(5); + taskDetailVehiclesService.updateById(taskDetailVehicle); + } + } + //当前线程执行完成后减少等待数 + countDownLatch.countDown(); + } + }); + } + try { + countDownLatch.await(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5)); + taskDetail.setStatus(count > 0 ? 4 : 3); + taskDetailService.updateById(taskDetail); + }else{ + //只处理不在线的车辆 //获取所有在线车船 //2018年协议车辆在线 List<VehicleOnline> vehicleOnlines2018 = VideoGateway.queryRuntimeInfoByCache(0); @@ -262,70 +364,7 @@ taskDetailVehicle.setEndExecutionTime(LocalDateTime.now()); taskDetailVehicle.setStatus(4); taskDetailVehiclesService.updateById(taskDetailVehicle); - continue; } - taskDetailVehicle.setVehicleGpsProtocol(vehicleOnline1.getVehicleGpsProtocol()); - taskDetailVehicle.setTerminalId(vehicleOnline1.getTerminalId()); - taskDetailVehicle.setStatus(2); - taskDetailVehiclesService.updateById(taskDetailVehicle); - - //成功 - List<TaskDetailVehiclesChannel> taskDetailVehiclesChannels = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", taskDetailVehicleId)); - //开始发送拍照指令,获取照片地址 - String vehicleGpsProtocol = vehicleOnline1.getVehicleGpsProtocol(); - String terminalId = vehicleOnline1.getTerminalId(); - for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : taskDetailVehiclesChannels) { - Integer videoChannel = taskDetailVehiclesChannel.getVideoChannel(); - try { - if("1".equals(vehicleGpsProtocol)){ - //2018 协议 - String fileId = VideoGateway.cameraShot2018(terminalId, videoChannel, 0); - if(ToolUtil.isNotEmpty(fileId)){ - //等待30秒 - Thread.sleep(30000); - String fileUrl = VideoGateway.getCameraShotByFileId2018(terminalId, fileId, 0); - if(ToolUtil.isNotEmpty(fileUrl)){ - taskDetailVehiclesChannel.setImageUrl(fileUrl); - taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); - taskDetailVehiclesChannel.setArtificialStatus(1); - //开始调模型接口得出结果 - 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); - } - } - }else{ - //2023 协议 - String fileId = VideoGateway.cameraShot2023(vehicleId, vehicleType, terminalId, videoChannel, 0); - if(ToolUtil.isNotEmpty(fileId)){ - //等待30秒 - Thread.sleep(30000); - String fileUrl = VideoGateway.getCameraShotByFileId2023(fileId, 0); - if(ToolUtil.isNotEmpty(fileUrl)){ - taskDetailVehiclesChannel.setImageUrl(fileUrl); - taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now()); - taskDetailVehiclesChannel.setArtificialStatus(1); - //开始调模型接口得出结果 - 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); - } - } - } - }catch (Exception e){ - taskDetailVehiclesChannel.setResult(e.getMessage()); - taskDetailVehiclesChannelService.updateById(taskDetailVehiclesChannel); - } - } - taskDetailVehicle.setEndExecutionTime(LocalDateTime.now()); - taskDetailVehicle.setStatus(3); - taskDetailVehiclesService.updateById(taskDetailVehicle); }catch (Exception e){ e.printStackTrace(); //失败 @@ -344,9 +383,12 @@ } catch (InterruptedException e) { throw new RuntimeException(e); } - int 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).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); + } } } -- Gitblit v1.7.1