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;
|
import com.stylefeng.guns.modular.system.model.PatrolTask;
|
import com.stylefeng.guns.modular.system.model.TaskDetail;
|
import com.stylefeng.guns.modular.system.model.TaskDetailVehicles;
|
import com.stylefeng.guns.modular.system.model.TaskDetailVehiclesChannel;
|
import com.stylefeng.guns.modular.system.model.enums.ImageModelEnum;
|
import com.stylefeng.guns.modular.system.model.enums.VideoChannelEnum;
|
import com.stylefeng.guns.modular.system.model.vo.PatrolTaskVo;
|
import com.stylefeng.guns.modular.system.model.vo.VehicleVo;
|
import com.stylefeng.guns.modular.system.service.ITaskDetailService;
|
import com.stylefeng.guns.modular.system.service.ITaskDetailVehiclesChannelService;
|
import com.stylefeng.guns.modular.system.service.ITaskDetailVehiclesService;
|
import com.stylefeng.guns.modular.system.util.UUIDUtil;
|
import com.stylefeng.guns.modular.system.util.imageModel.ImageModelUtil;
|
import com.stylefeng.guns.modular.system.util.quartz.QuartzUtil;
|
import com.stylefeng.guns.modular.system.util.quartz.jobs.PatrolTaskJob;
|
import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum;
|
import com.stylefeng.guns.modular.system.util.videoGateway.VideoGateway;
|
import com.stylefeng.guns.modular.system.util.videoGateway.model.VehicleOnline;
|
import lombok.extern.slf4j.Slf4j;
|
import org.quartz.JobDataMap;
|
import org.quartz.SchedulerException;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Service;
|
import com.stylefeng.guns.modular.system.dao.PatrolTaskMapper;
|
import com.stylefeng.guns.modular.system.service.IPatrolTaskService;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
|
import javax.annotation.Resource;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2024/12/17 20:18
|
*/
|
@Slf4j
|
@Service
|
public class PatrolTaskServiceImpl extends ServiceImpl<PatrolTaskMapper, PatrolTask> implements IPatrolTaskService {
|
|
@Autowired
|
private ITaskDetailService taskDetailService;
|
|
@Autowired
|
private ITaskDetailVehiclesService taskDetailVehiclesService;
|
|
@Autowired
|
private ITaskDetailVehiclesChannelService taskDetailVehiclesChannelService;
|
|
@Autowired
|
private QuartzUtil quartzUtil;
|
|
@Value("${maxThreadCount}")
|
private Integer maxThreadCount;
|
|
@Resource
|
private RedisTemplate redisTemplate;
|
|
|
|
/**
|
* 添加新的任务数据
|
* @param vo
|
*/
|
@Override
|
public void addPatrolTask(PatrolTaskVo vo, String userId) {
|
if(vo.getType() == 1 && vo.getStartTime().isAfter(vo.getEndTime())){
|
throw new RuntimeException("结束时间不能小于开始时间");
|
}
|
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;
|
}
|
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();
|
List<TaskDetailVehiclesChannel> list = new ArrayList<>();
|
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);
|
list.add(taskDetailVehiclesChannel);
|
}
|
taskDetailVehiclesChannelService.insertBatch(list);
|
}
|
|
//添加定时任务
|
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);
|
}
|
}
|
});
|
}
|
|
|
/**
|
* 定时任务执行逻辑
|
* @param id
|
*/
|
@Override
|
public void execute(Integer id){
|
//修改状态为执行中
|
TaskDetail taskDetail = taskDetailService.selectById(id);
|
if(null == taskDetail){
|
log.error("定时任务执行异常,无效的数据ID:{}", id);
|
return;
|
}
|
taskDetail.setStatus(2);
|
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{
|
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;
|
}
|
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);
|
}
|
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);
|
}
|
}
|
int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", id).eq("status", 5));
|
taskDetail.setStatus(count > 0 ? 4 : 3);
|
taskDetailService.updateById(taskDetail);
|
}
|
}
|
|
|
/**
|
* 变更车辆状态
|
* @param vehicleNum
|
* @param vehicleStatus 状态(1=行驶中,2=已停止)
|
* @param communicationNum
|
* @param vehicleGpsProtocol
|
* @param latitude
|
* @param longitude
|
*/
|
@Override
|
public void vehicleSpeed(String vehicleNum, Integer vehicleStatus, Integer vehicleType, String communicationNum, String vehicleGpsProtocol, Double latitude, Double longitude) {
|
Boolean lock = redisTemplate.hasKey("model:3:lock:" + vehicleNum + vehicleType);
|
if(lock){
|
return;
|
}
|
//添加redis 锁
|
redisTemplate.opsForValue().set("model:3:lock:" + vehicleNum + vehicleType, System.currentTimeMillis(), 1, TimeUnit.MINUTES);
|
List<TaskDetail> taskDetails = taskDetailService.selectList(new EntityWrapper<TaskDetail>().eq("status", 2).eq("del_flag", 0));
|
if(taskDetails.size() > 0){
|
Set<Integer> collect = taskDetails.stream().map(TaskDetail::getPatrolTaskId).collect(Collectors.toSet());
|
List<PatrolTask> patrolTasks = this.selectList(new EntityWrapper<PatrolTask>().in("id", collect).eq("image_model", ImageModelEnum.CONSTRUCTION_WASTE_LOAD.getCode()));
|
if(patrolTasks.size() > 0){
|
List<Integer> collect1 = patrolTasks.stream().map(PatrolTask::getId).collect(Collectors.toList());
|
List<TaskDetailVehicles> taskDetailVehicles = taskDetailVehiclesService.selectList(new EntityWrapper<TaskDetailVehicles>().eq("vehicleNum", vehicleNum)
|
.eq("vehicleType", vehicleType).eq("status", 2).in("patrol_task_id", collect1));
|
if(taskDetailVehicles.size() > 0){
|
TaskDetailVehicles taskDetailVehicles1 = taskDetailVehicles.get(0);
|
String terminalId = taskDetailVehicles1.getTerminalId();
|
Integer vehicleId = taskDetailVehicles1.getVehicleId();
|
String vehicleIdUnique = taskDetailVehicles1.getVehicleIdUnique();
|
//开始调用顶盖模型3次判断结果
|
int loaded_cargo_num = 0;
|
int empty_container_num = 0;
|
String loaded_cargo_fileUrl = "";
|
String empty_container_fileUrl = "";
|
String r = null;
|
for (int i = 0; i < 3; i++) {
|
//开始发送拍照指令,获取照片地址
|
try {
|
if("1".equals(vehicleGpsProtocol)){
|
//2018 协议
|
String fileId = VideoGateway.cameraShot2018(terminalId, VideoChannelEnum.CONTAINER.getId(), 0);
|
if(ToolUtil.isNotEmpty(fileId)){
|
//等待30秒
|
Thread.sleep(30000);
|
String fileUrl = VideoGateway.getCameraShotByFileId2018(terminalId, fileId, 0);
|
if(ToolUtil.isNotEmpty(fileUrl)){
|
//开始调模型接口得出结果
|
Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.TOP_SEAL);
|
r = map.get("r").toString();
|
List<String> result = JSON.parseArray(r, String.class);
|
//装载状态
|
Optional<String> loaded_cargo = result.stream().filter(s -> s.contains("Loaded Cargo")).findFirst();
|
if(loaded_cargo.isPresent()){
|
loaded_cargo_num++;
|
loaded_cargo_fileUrl = fileUrl;
|
}
|
//非装载状态
|
Optional<String> empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst();
|
if(empty_container.isPresent()){
|
empty_container_num++;
|
empty_container_fileUrl = fileUrl;
|
}
|
}
|
}
|
}else{
|
//2023 协议
|
String fileId = VideoGateway.cameraShot2023(vehicleId, vehicleType, terminalId, VideoChannelEnum.CONTAINER.getId(), 0);
|
if(ToolUtil.isNotEmpty(fileId)){
|
//等待30秒
|
Thread.sleep(30000);
|
String fileUrl = VideoGateway.getCameraShotByFileId2023(fileId, 0);
|
if(ToolUtil.isNotEmpty(fileUrl)){
|
//开始调模型接口得出结果
|
Map<String, Object> map = ImageModelUtil.modelCheck(fileUrl, ImageModelEnum.TOP_SEAL);
|
r = map.get("r").toString();
|
List<String> result = JSON.parseArray(r, String.class);
|
//装载状态
|
Optional<String> loaded_cargo = result.stream().filter(s -> s.contains("Loaded Cargo")).findFirst();
|
if(loaded_cargo.isPresent()){
|
loaded_cargo_num++;
|
loaded_cargo_fileUrl = fileUrl;
|
}
|
//非装载状态
|
Optional<String> empty_container = result.stream().filter(s -> s.contains("Empty Container")).findFirst();
|
if(empty_container.isPresent()){
|
empty_container_num++;
|
empty_container_fileUrl = fileUrl;
|
}
|
}
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
//执行失败
|
for (TaskDetailVehicles taskDetailVehicle : taskDetailVehicles) {
|
taskDetailVehicle.setStatus(5);
|
taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
|
}
|
taskDetailVehiclesService.updateBatchById(taskDetailVehicles);
|
List<Integer> collect2 = taskDetailVehicles.stream().map(TaskDetailVehicles::getId).collect(Collectors.toList());
|
//修改通道结果
|
List<TaskDetailVehiclesChannel> list = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", collect2));
|
for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
|
taskDetailVehiclesChannel.setResult(e.getMessage());
|
}
|
taskDetailVehiclesChannelService.updateBatchById(list);
|
|
//开始修改任务状态
|
Set<Integer> collect3 = taskDetailVehicles.stream().map(TaskDetailVehicles::getTaskDetailId).collect(Collectors.toSet());
|
for (Integer integer : collect3) {
|
int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", integer).in("status", Arrays.asList(1, 2)));
|
if(0 == count){
|
TaskDetail taskDetail = new TaskDetail();
|
taskDetail.setId(integer);
|
taskDetail.setStatus(4);
|
taskDetailService.updateById(taskDetail);
|
}
|
}
|
|
//删除redis锁key
|
redisTemplate.delete("model:3:lock:" + vehicleNum + vehicleType);
|
return;
|
}
|
}
|
|
//装载状态
|
if(loaded_cargo_num > empty_container_num && 2 == vehicleStatus){
|
//装载状态下,判断车辆如果车速为0,则需要判断是否在围栏内,如果在则添加标识
|
//判断车辆是否在围栏内
|
boolean fenceByPoint = VideoGateway.getFenceByPoint(longitude.toString(), latitude.toString(), 0);
|
if(fenceByPoint){
|
redisTemplate.opsForValue().set("model:3:" + vehicleIdUnique, System.currentTimeMillis());
|
}
|
|
}
|
|
//空载状态
|
if(empty_container_num > loaded_cargo_num){
|
//车辆空载状态,如果车辆车速大于0,且车辆有在围栏内的标识,则判定为正常倾倒
|
Boolean aBoolean = redisTemplate.hasKey("model:3:" + vehicleIdUnique);
|
if(1 == vehicleStatus){
|
for (TaskDetailVehicles taskDetailVehicle : taskDetailVehicles) {
|
taskDetailVehicle.setStatus(3);
|
taskDetailVehicle.setEndExecutionTime(LocalDateTime.now());
|
}
|
taskDetailVehiclesService.updateBatchById(taskDetailVehicles);
|
List<Integer> collect2 = taskDetailVehicles.stream().map(TaskDetailVehicles::getId).collect(Collectors.toList());
|
//修改通道结果
|
List<TaskDetailVehiclesChannel> list = taskDetailVehiclesChannelService.selectList(new EntityWrapper<TaskDetailVehiclesChannel>().eq("task_detail_vehicles_id", collect2));
|
for (TaskDetailVehiclesChannel taskDetailVehiclesChannel : list) {
|
taskDetailVehiclesChannel.setImageUrl(empty_container_fileUrl);
|
taskDetailVehiclesChannel.setSysCreateTime(LocalDateTime.now());
|
taskDetailVehiclesChannel.setArtificialStatus(1);
|
taskDetailVehiclesChannel.setSysStatus(aBoolean ? 2 : 3);
|
taskDetailVehiclesChannel.setResult(r);
|
}
|
taskDetailVehiclesChannelService.updateBatchById(list);
|
|
//开始修改任务状态
|
Set<Integer> collect3 = taskDetailVehicles.stream().map(TaskDetailVehicles::getTaskDetailId).collect(Collectors.toSet());
|
for (Integer integer : collect3) {
|
int count = taskDetailVehiclesService.selectCount(new EntityWrapper<TaskDetailVehicles>().eq("task_detail_id", integer).in("status", Arrays.asList(1, 2)));
|
if(0 == count){
|
TaskDetail taskDetail = new TaskDetail();
|
taskDetail.setId(integer);
|
taskDetail.setStatus(3);
|
taskDetailService.updateById(taskDetail);
|
}
|
}
|
//删除标识
|
redisTemplate.delete("model:3:" + vehicleIdUnique);
|
}
|
}
|
}
|
}
|
}
|
//删除redis锁key
|
redisTemplate.delete("model:3:lock:" + vehicleNum + vehicleType);
|
}
|
}
|