录像增加延迟队列

merge-requests/3/head
qiushui 4 years ago
parent 83bb760e98
commit 1b14f41e6f

@ -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();
}

@ -0,0 +1,9 @@
package com.zhehekeji.web.lib;
import org.springframework.stereotype.Component;
@Component
public class DownloadConsumer {
}

@ -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;
}
}

@ -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<DownloadMp4Delayed> 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();
}
}
}
}
}

@ -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);
}
}

@ -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());
}
}

@ -105,6 +105,7 @@ public class InitService implements ApplicationRunner {
log.error("ksec no config");
}
}
DownloadMp4Executor.runMp4DownloadExecutor();
}

@ -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);
}
}

@ -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);
//盘点
//找到该货位的最后一张照片与现在的照片比照

Loading…
Cancel
Save