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/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/CronTab.java b/web/src/main/java/com/zhehekeji/web/service/CronTab.java new file mode 100644 index 0000000..e96f7f7 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/CronTab.java @@ -0,0 +1,71 @@ +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.exists()){ + return; + } + 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/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index d96ffb6..f20df27 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); + } + } + /** * 收到告警异常信号 @@ -479,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(); @@ -501,7 +513,7 @@ public class PlcService { return street.getCamera2Id(); }else { //左侧 外货架 camera1 - return street.getCamera1Id(); + return street.getCamera2Id(); } }else { if(plcCmdInfo.getSeparation1() == 1){ @@ -509,7 +521,7 @@ public class PlcService { return street.getCamera1Id(); }else { //右侧 外货架 camera2 - return street.getCamera2Id(); + return street.getCamera1Id(); } } }else { @@ -521,7 +533,7 @@ public class PlcService { return street.getCamera2Id(); }else { //左侧 外货架 camera1 - return street.getCamera1Id(); + return street.getCamera2Id(); } }else { if(plcCmdInfo.getSeparation2() == 1){ @@ -529,7 +541,7 @@ public class PlcService { return street.getCamera1Id(); }else { //右侧 外货架 camera2 - return street.getCamera2Id(); + return street.getCamera1Id(); } } } @@ -559,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){ @@ -595,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..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,19 +80,19 @@ 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)){ + 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 605fcb8..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); @@ -118,6 +125,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); 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