From 1b14f41e6fcd79c3147610e40149e19362bbeae2 Mon Sep 17 00:00:00 2001 From: qiushui Date: Tue, 11 Jan 2022 10:25:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=95=E5=83=8F=E5=A2=9E=E5=8A=A0=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CameraControlController.java | 3 +- .../zhehekeji/web/lib/DownloadConsumer.java | 9 ++++ .../zhehekeji/web/lib/DownloadMp4Delayed.java | 33 +++++++++++++++ .../web/lib/DownloadMp4Executor.java | 42 +++++++++++++++++++ .../JoywareCameraControlModuleImpl.java | 3 +- .../main/java/com/zhehekeji/web/pojo/Cmd.java | 32 ++++++++++++++ .../zhehekeji/web/service/InitService.java | 1 + .../com/zhehekeji/web/service/PlcService.java | 14 +++---- .../web/service/ksec/KsecDecoder.java | 28 ++++++------- 9 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/lib/DownloadConsumer.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Delayed.java create mode 100644 web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Executor.java create mode 100644 web/src/main/java/com/zhehekeji/web/pojo/Cmd.java diff --git a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java index a3c6adc..cfff747 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/CameraControlController.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; @Api(value = "CameraControl",tags = "球机控制管理") @RestController @@ -301,7 +302,7 @@ public class CameraControlController { @ApiOperation(value = "录像") public Result MP4(@PathVariable Integer id) { checkLogin(id); - cameraControlModule.downloadMp4(id,"D:\\work\\qqq.mp4", LocalDateTime.now().minusMinutes(10),LocalDateTime.now().minusMinutes(8)); + cameraControlModule.downloadMp4(id,"D:\\work\\"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMDDHHmmss"))+".mp4", LocalDateTime.now().minusMinutes(10),LocalDateTime.now().minusMinutes(8)); return Result.success(); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/DownloadConsumer.java b/web/src/main/java/com/zhehekeji/web/lib/DownloadConsumer.java new file mode 100644 index 0000000..9f52af6 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/DownloadConsumer.java @@ -0,0 +1,9 @@ +package com.zhehekeji.web.lib; + +import org.springframework.stereotype.Component; + +@Component +public class DownloadConsumer { + + +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Delayed.java b/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Delayed.java new file mode 100644 index 0000000..d10fc2f --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Delayed.java @@ -0,0 +1,33 @@ +package com.zhehekeji.web.lib; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.concurrent.Delayed; +import java.util.concurrent.TimeUnit; + +@Data +@AllArgsConstructor +public class DownloadMp4Delayed implements Delayed { + + private Integer cameraId; + + private LocalDateTime startTime; + + private LocalDateTime endTime; + + private String path; + + private long executeTime; + + @Override + public long getDelay(TimeUnit unit) { + return unit.convert(this.executeTime - System.nanoTime(), TimeUnit.NANOSECONDS); + } + + @Override + public int compareTo(Delayed o) { + return 0; + } +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Executor.java b/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Executor.java new file mode 100644 index 0000000..0087edf --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/lib/DownloadMp4Executor.java @@ -0,0 +1,42 @@ +package com.zhehekeji.web.lib; + +import com.zhehekeji.common.util.SpringContextUtil; + +import java.time.LocalDateTime; +import java.util.concurrent.DelayQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +public class DownloadMp4Executor { + + private static ExecutorService exec = Executors.newFixedThreadPool(1); + + private static DelayQueue queue = new DelayQueue<>(); + + public static void addDelayTask(Integer cameraId, String path,LocalDateTime startTime, LocalDateTime endTime, Long delayTime) { + DownloadMp4Delayed downloadMp4Delayed = new DownloadMp4Delayed(cameraId, startTime, endTime,path, delayTime); + queue.add(downloadMp4Delayed); + } + + public static void runMp4DownloadExecutor(){ + exec.execute(new Consumer()); + } + + private static class Consumer implements Runnable { + + @Override + public void run() { + while (true) { + try { + DownloadMp4Delayed downloadMp4Delayed = queue.take(); + CameraControlModule cameraControlModule = SpringContextUtil.getBean(CameraControlModule.class); + cameraControlModule.downloadMp4(downloadMp4Delayed.getCameraId(), downloadMp4Delayed.getPath(),downloadMp4Delayed.getStartTime(),downloadMp4Delayed.getEndTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java index 11a94f4..a83ed7b 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/joyware/JoywareCameraControlModuleImpl.java @@ -268,7 +268,8 @@ public class JoywareCameraControlModuleImpl implements CameraControlModule { if(l.longValue() != 0){ log.info("start download mp4 path:{},startTime:{} ,endTime:{},now:{},status:{}", path, start, end, LocalDateTime.now(),l.longValue()); }else { - log.error("download mp4 error,startTime:{} ,endTime:{}",start,end); + + log.error("download mp4 error:{},startTime:{} ,endTime:{}",ToolKits.getErrorCodePrint(),start,end); } } diff --git a/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java b/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java new file mode 100644 index 0000000..acdeeea --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java @@ -0,0 +1,32 @@ +package com.zhehekeji.web.pojo; + +public enum Cmd { + + A, + C, + + //放货到位 + C1, + //放货完成 + C2, + //取货到位 + C3, + //取货完成 + C4, + //原点位 + C5, + + B, + B1, + B2, + D, + D1, + D2, + E, + E1, + + ; + public static Boolean isBaseAction(String code){ + return code.equals(C1.name()) || code.equals(C2.name()) || code.equals(C3.name()) || code.equals(C4.name()); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index e88c52f..192bb02 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -105,6 +105,7 @@ public class InitService implements ApplicationRunner { log.error("ksec no config"); } } + DownloadMp4Executor.runMp4DownloadExecutor(); } diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 193c01f..7746bb8 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -124,12 +124,6 @@ public class PlcService { update.setLeftRight2(plcCmdInfo.getLeftRight2()); update.setColumn2(plcCmdInfo.getColumn2()); update.setRow2(plcCmdInfo.getRow2()); - //todo 延迟队列 - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - e.printStackTrace(); - } if (street.getCamera1Id() != null) { String path = cameraVideo(street.getCamera1Id(),order.getStartTime(),endTime.plusSeconds(2)); update.setVideoPath1(path); @@ -159,7 +153,8 @@ public class PlcService { public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) { String path = PathUtil.createFileName("mp4",cameraId); String realPath = configProperties.getSavePath().getMp4Path() + path; - cameraControlModule.downloadMp4(cameraId,realPath,startTime,endTime); + DownloadMp4Executor.addDelayTask(cameraId,realPath,startTime,endTime,5000L); + //cameraControlModule.downloadMp4(cameraId,realPath,startTime,endTime); return path; } @@ -410,11 +405,12 @@ public class PlcService { stock.setOrderNum(order.getOrderNum()); stockMapper.insert(stock); } else { - //take the previous picture path the lasted over picture path - //take the lasted picture path the new one + //take the previous picture path to the lasted over picture path + //take the lasted picture path to the new one stock.setPreoperationPic(stock.getOveroperationPic()); stock.setOveroperationPic(path); stock.setOrderNum(order.getOrderNum()); + stock.setStatus(0); stockMapper.updateById(stock); } } diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java index b4a68c9..74d9394 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.service.ksec; import com.alibaba.fastjson.JSONObject; +import com.zhehekeji.web.pojo.Cmd; import com.zhehekeji.web.service.GoodsActionTimes; import com.zhehekeji.web.service.PlcCmdInfo; import com.zhehekeji.web.service.PlcService; @@ -50,26 +51,25 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { srmNumber = dataInfo.getSRMNumber(); cmdName = dataInfo.getCmdName(); } - - if ("A".equals(ksecInfo.getType())) { + if (Cmd.A.name().equals(ksecInfo.getType())) { //心跳 log.debug("receieve heart "); - } else if ("B".equals(ksecInfo.getType())) { + } else if (Cmd.B.name().equals(ksecInfo.getType())) { tcpLogger.info("info:{}",body); //任务 - if ("B1".equals(cmdName)) { - plcService.gyrateCamera(plcCmdInfo,"C5"); + if (Cmd.B1.name().equals(cmdName)) { + plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStart(plcCmdInfo); - } else if ("B2".equals(cmdName)) { - plcService.gyrateCamera(plcCmdInfo,"C5"); + } else if (Cmd.B2.name().equals(cmdName)) { + plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStop(plcCmdInfo); } - } else if ("C".equals(ksecInfo.getType())) { + } else if (Cmd.C.name().equals(ksecInfo.getType())) { tcpLogger.info("info:{}",body); //动作 String code = dataInfo.getCmdName(); log.info("action code,{},orderInfo:{}", code, plcCmdInfo.toString()); - if (code.equals("C1") || code.equals("C2") || code.equals("C3") || code.equals("C4")) { + if (Cmd.isBaseAction(code)) { //执行动作,需要保存执行到第几步了 Integer times = GoodsActionTimes.put(plcCmdInfo.getOrderNum()); code = code + "-" + plcCmdInfo.getLeftRightStr(times); @@ -78,25 +78,25 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { }else { log.info("other C code :{}",code); } - } else if ("D".equals(ksecInfo.getType())) { + } else if (Cmd.D.name().equals(ksecInfo.getType())) { tcpLogger.info("info:{}",body); String code = dataInfo.getCmdName(); - if(code.equals("D1")){ + if(code.equals(Cmd.D1.name())){ log.info("plcId:{},warn start",plcCmdInfo.getPlcId()); //根据告警code转动camera String warnCode = dataInfo.getWarnCode(); if(!StringUtils.isEmpty(warnCode)){ - String warnCode0 = "D1-"+warnCode.split(",")[0]; + String warnCode0 = Cmd.D1.name()+"-"+warnCode.split(",")[0]; plcService.warnAction(plcCmdInfo,warnCode0); } plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode()); - }else if(code.equals("D2")){ + }else if(code.equals(Cmd.D2.name())){ log.info("plcId:{},warn stop",plcCmdInfo.getPlcId()); plcService.warnStop(plcCmdInfo.getPlcId()); }else { log.info("other D code :{}",code); } - } else if ("E".equals(ksecInfo.getType())) { + } else if (Cmd.E.name().equals(ksecInfo.getType())) { tcpLogger.info("info:{}",body); //盘点 //找到该货位的最后一张照片与现在的照片比照