From ccb509a47eda5684113a2f00660e2d42547ef73e Mon Sep 17 00:00:00 2001 From: yiming Date: Thu, 19 May 2022 15:38:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=AE=9A=E6=99=82=E6=B8=85=E7=90=86?= =?UTF-8?q?=E7=A3=81=E7=9B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/config/ConfigProperties.java | 2 + .../com/zhehekeji/web/service/CronTab.java | 69 +++++++++++++++++++ web/src/main/resources/application-dev.yml | 4 +- web/src/main/resources/application-prod.yml | 4 +- web/src/main/resources/application-test.yml | 4 +- 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/service/CronTab.java diff --git a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java index 98579f1..a5e34c9 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -27,6 +27,8 @@ public class ConfigProperties { private Integer serverMode; + private Integer deleteFileDays; + private String userUrl; private KSEC ksec; diff --git a/web/src/main/java/com/zhehekeji/web/service/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java new file mode 100644 index 0000000..9ef9e85 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -0,0 +1,69 @@ +package com.zhehekeji.web.service; + +import com.zhehekeji.web.config.ConfigProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.BasicFileAttributes; +import java.time.*; + +@Component +@EnableScheduling +@Slf4j +public class CronTab { + + @Resource + private ConfigProperties configProperties; + + private static LocalDateTime now; + + @Scheduled(cron = "0 0 0 * * ?") + //@Scheduled(cron = "0 0/1 * * * *") + public void file() { + log.info(" corn delete file"); + now = LocalDateTime.now(); + File dir = new File(configProperties.getSavePath().getMediaPath()); + checkFileTime(dir,configProperties.getDeleteFileDays()); + File dir2 = new File(configProperties.getSavePath().getMp4Path()); + checkFileTime(dir2,configProperties.getDeleteFileDays()); + } + + public static void checkFileTime(File dir,int days) { + + if (dir.isDirectory()) { + String[] children = dir.list(); + if(children.length == 0){ + log.info("delete path:{}",dir.getPath()); + dir.delete(); + } + for (int i = 0; i < children.length; i++) { + checkFileTime(new File(dir, children[i]),days); + } + }else { + //判斷時間 + BasicFileAttributes attr = null; + try { + Path path = dir.toPath(); + attr = Files.readAttributes(path, BasicFileAttributes.class); + } catch (IOException e) { + e.printStackTrace(); + } + // 创建时间 + Instant instant = attr.creationTime().toInstant(); + LocalDateTime createTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + Duration duration = Duration.between(createTime,now); + if(days<=duration.toDays()){ + log.info("delete path:{}",dir.getPath()); + dir.delete(); + } + } + } + +} diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index c0d7f26..891de3c 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -69,4 +69,6 @@ scanCodeMode: goodsCodeTypes: - 14 trayCodeTypes: - - 14 \ No newline at end of file + - 14 +# 照片 視頻保存多久 +deleteFileDays: 365 \ No newline at end of file diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 4a808be..c4683ce 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -69,4 +69,6 @@ scanCodeMode: goodsCodeTypes: - 14 trayCodeTypes: - - 14 \ No newline at end of file + - 14 +# 照片 視頻保存多久 +deleteFileDays: 365 \ No newline at end of file diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 7e8166b..90415ee 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -69,4 +69,6 @@ scanCodeMode: goodsCodeTypes: - 14 trayCodeTypes: - - 14 \ No newline at end of file + - 14 +# 照片 視頻保存多久 +deleteFileDays: 365 \ No newline at end of file From 9c3815ebacb53a79c5fd096fba37f78f6e92042f Mon Sep 17 00:00:00 2001 From: yiming Date: Fri, 20 May 2022 09:07:05 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=AE=9A=E6=99=82=E6=B8=85=E7=90=86?= =?UTF-8?q?=E7=A3=81=E7=9B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/main/java/com/zhehekeji/web/service/CronTab.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/src/main/java/com/zhehekeji/web/service/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java index 9ef9e85..e96f7f7 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CronTab.java +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -36,7 +36,9 @@ public class CronTab { } public static void checkFileTime(File dir,int days) { - + if(!dir.exists()){ + return; + } if (dir.isDirectory()) { String[] children = dir.list(); if(children.length == 0){ From b54c850ce99c6186bfe3559d516349388e7853bf Mon Sep 17 00:00:00 2001 From: yiming Date: Tue, 24 May 2022 09:14:48 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E9=9A=8F=E8=A1=8C=E5=BB=B6=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhehekeji/web/lib/CameraDelayTask.java | 2 ++ .../com/zhehekeji/web/lib/TaskDelayExecutor.java | 8 ++++++++ .../com/zhehekeji/web/service/PlcService.java | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java index 7ea06df..3552de4 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java @@ -28,6 +28,8 @@ public class CameraDelayTask implements Delayed { private long delayTime; + private Integer ptzId; + public CameraDelayTask(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime, String path, Integer type, long delayTime) { this.cameraId = cameraId; this.startTime = startTime; diff --git a/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java b/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java index 58fa15a..f37e459 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java +++ b/web/src/main/java/com/zhehekeji/web/lib/TaskDelayExecutor.java @@ -23,6 +23,12 @@ public class TaskDelayExecutor { queue.add(cameraDelayTask); } + public static void addGyrateCameraTask(Integer cameraId, Long delayTime,Integer ptzId){ + CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraId, null, null,null, 2,delayTime); + cameraDelayTask.setPtzId(ptzId); + queue.add(cameraDelayTask); + } + public static void runMp4DownloadExecutor(){ exec.execute(new Consumer()); } @@ -42,6 +48,8 @@ public class TaskDelayExecutor { cameraControlModule.downloadMp4(cameraDelayTask.getCameraId(), cameraDelayTask.getPath(), cameraDelayTask.getStartTime(), cameraDelayTask.getEndTime()); }else if(cameraDelayTask.getType() == 1){ cameraControlModule.pic(cameraDelayTask.getCameraId(),0, cameraDelayTask.getPath()); + }else if(cameraDelayTask.getType() == 2){ + cameraControlModule.toPtz(cameraDelayTask.getPtzId(),cameraDelayTask.getCameraId()); } } 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 d96ffb6..29030cc 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -246,11 +246,12 @@ public class PlcService { } //转向原点位 if(times == 2){ + if(street.getCamera2Id() != null){ - gyrateCameraByCode(street.getCamera2Id(),"C5"); + gyrateCameraByCodeTimeLater(street.getCamera2Id(),"C5",configProperties.getCameraConfig().getDelayCaptureTime()+100); } if(street.getCamera1Id() != null){ - gyrateCameraByCode(street.getCamera1Id(),"C5"); + gyrateCameraByCodeTimeLater(street.getCamera1Id(),"C5",configProperties.getCameraConfig().getDelayCaptureTime()+100); } } } @@ -324,6 +325,17 @@ public class PlcService { } } + public void gyrateCameraByCodeTimeLater(Integer cameraId, String code,long times) { + Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId); + if (ptzId != null && ptzId >= 0) { + log.info("gyrate camera by code, code:{},cameraId:{},ptId:{}", code, cameraId, ptzId); + TaskDelayExecutor.addGyrateCameraTask(cameraId,times,ptzId); + //cameraControlModule.toPtz(ptzId,cameraId); + } else { + log.error("ptz not found ,code:{},cameraId:{}", code, cameraId); + } + } + /** * 收到告警异常信号 From f3f1a8f1a61cde6b40e04fcf361aa711b93042ed Mon Sep 17 00:00:00 2001 From: yiming Date: Tue, 7 Jun 2022 09:48:27 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=90=83=E6=9C=BA=E9=80=89=E6=8B=A9=20?= =?UTF-8?q?=E5=B7=A6=E6=B5=8Bcamera2=20=20=E5=8F=B3=E4=BE=A7camera1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhehekeji/web/service/PlcService.java | 17 +++++++++-------- .../web/service/StockCheckRunnable.java | 3 +-- .../zhehekeji/web/service/ksec/KsecDecoder.java | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) 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 29030cc..f20df27 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -491,10 +491,10 @@ public class PlcService { //单伸 if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) { if (leftRight == 1) { - return street.getCamera1Id(); + return street.getCamera2Id(); } else { - return street.getCamera2Id(); + return street.getCamera1Id(); } } else { Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id(); @@ -513,7 +513,7 @@ public class PlcService { return street.getCamera2Id(); }else { //左侧 外货架 camera1 - return street.getCamera1Id(); + return street.getCamera2Id(); } }else { if(plcCmdInfo.getSeparation1() == 1){ @@ -521,7 +521,7 @@ public class PlcService { return street.getCamera1Id(); }else { //右侧 外货架 camera2 - return street.getCamera2Id(); + return street.getCamera1Id(); } } }else { @@ -533,7 +533,7 @@ public class PlcService { return street.getCamera2Id(); }else { //左侧 外货架 camera1 - return street.getCamera1Id(); + return street.getCamera2Id(); } }else { if(plcCmdInfo.getSeparation2() == 1){ @@ -541,7 +541,7 @@ public class PlcService { return street.getCamera1Id(); }else { //右侧 外货架 camera2 - return street.getCamera2Id(); + return street.getCamera1Id(); } } } @@ -571,7 +571,9 @@ public class PlcService { String trayCode = null; Boolean trayCheck = Boolean.TRUE; //如果是用扫码枪 扫 托盘码,就直接扫 - if(configProperties.getScanCodeMode().getTray() == 2){ + //if(configProperties.getScanCodeMode().getTray() == 2){ + + if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ //托盘使用sick扫码枪 SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1()); if(sensorGun == null){ @@ -607,7 +609,6 @@ public class PlcService { }else if(configProperties.getScanCodeMode().getTray() == 3){ //RFID RFID rfid = rfidService.getRFIDByPlc(street.getId()); - } StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties); threadPoolExecutor.execute(stockCheckRunnable); diff --git a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java index 660c082..e224548 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java @@ -80,9 +80,8 @@ public class StockCheckRunnable implements Runnable { codeCheck = wmsCode.equals(scanCode); } } - } - if(configProperties.getScanCodeMode().getTray() == 1){ + if(configProperties.getScanCodeMode().getTray() == 2 && plcCmdInfo.getSeparation1() == 2){ //托盘使用球机扫码 if("".equals(wmsCode)){ //空货物的处理 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 605fcb8..b025fe3 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 @@ -118,6 +118,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { plcService.truncateStock(); lastLotnum = lotnum; } + plcCmdInfo.setTimes(1); Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode()); if(ok){ ksecInfo.getData().setAckStatus(1); From 535ac337bf6873c4abc48f8c3d6a062e8eaa374d Mon Sep 17 00:00:00 2001 From: yiming Date: Thu, 9 Jun 2022 10:03:06 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E7=9B=98=E7=82=B9=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=EF=BC=8C=E5=A0=86=E5=9E=9B=E6=9C=BA=E8=B7=91=E4=BD=8D?= =?UTF-8?q?=E4=BC=9A=E5=8F=91B1=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhehekeji/web/service/StockCheckRunnable.java | 9 +++++---- .../com/zhehekeji/web/service/ksec/KsecDecoder.java | 13 ++++++++++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java index e224548..31f551a 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java @@ -58,7 +58,7 @@ public class StockCheckRunnable implements Runnable { Boolean codeCheck = Boolean.TRUE; Boolean trayCodeCheck = Boolean.TRUE; //货物使用球机扫码 - if(configProperties.getScanCodeMode().getGoods() == 1){ + /*if(configProperties.getScanCodeMode().getGoods() == 1){ if("".equals(wmsCode)){ //空货物的处理 //如果系统货物为空,则只要扫码识别未出结果,就认为无货物 @@ -80,18 +80,19 @@ public class StockCheckRunnable implements Runnable { codeCheck = wmsCode.equals(scanCode); } } - } + }*/ if(configProperties.getScanCodeMode().getTray() == 2 && plcCmdInfo.getSeparation1() == 2){ //托盘使用球机扫码 - if("".equals(wmsCode)){ + if("".equals(wmsTrayCode)){ //空货物的处理 //如果系统货物为空,则只要扫码识别未出结果,就认为无货物 trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); + log.info("tray code:{},sys trayCode:{}",trayCode,wmsTrayCode); if(StringUtils.isEmpty(trayCode)|| trayCode.equals("Unrecognized")){ trayCheck = Boolean.TRUE; trayCode = ""; }else { - trayCheck = wmsCode.equals(trayCode); + trayCheck = wmsTrayCode.equals(trayCode); } }else { trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); 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 b025fe3..8fd8c98 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 @@ -66,9 +66,16 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { tcpLogger.info("info:{}",body); //任务 if (Cmd.B1.name().equals(cmdName)) { - //任务开始 旋转到原点位 - plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); - plcService.orderStart(plcCmdInfo); + //昆船盘点模式下也会发B1 ,但是不会发送B2 + //这里判断下,是否存在盘点批次号 若存在,既是盘点的B1,无需处理;若不存在lotnum,则是随行的B1 + if(StringUtils.isEmpty(dataInfo.getLotnum())){ + //任务开始 旋转到原点位 + plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); + plcService.orderStart(plcCmdInfo); + }else { + log.info("check move"); + } + } else if (Cmd.B2.name().equals(cmdName)) { plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStop(plcCmdInfo);