获取盘点信息取消拼接方式来查询

增加pics来查看照片
将sc改为e盘点
使用锁方式来实现同时进入时的分发问题
视觉发送加50毫秒的延时
盘点照片修改预置标识
just-camera
LAPTOP-S9HJSOEB\昊天 2 years ago
parent ffd117c9ac
commit 5189b2ec84

@ -46,6 +46,7 @@ public class ConfigProperties {
* TCP * TCP
*/ */
private Integer serverPort; private Integer serverPort;
private Long queueSpanTime = 5000L;
@Data @Data

@ -122,9 +122,7 @@ public class StockController {
@ApiOperation(value = "获取盘点信息") @ApiOperation(value = "获取盘点信息")
@RequestMapping(value = "/checkInfo", method = RequestMethod.POST) @RequestMapping(value = "/checkInfo", method = RequestMethod.POST)
public Result<Stock> checkInfo(@RequestBody StockCheckSearch stockCheck) { public Result<Stock> checkInfo(@RequestBody StockCheckSearch stockCheck) {
int a = Integer.valueOf(stockCheck.getSRMNumber());
String ss = String.format("%03d", a);
stockCheck.setSRMNumber(ss);
validatorUtil.validate(stockCheck); validatorUtil.validate(stockCheck);
log.info("stockCheck:{}",stockCheck); log.info("stockCheck:{}",stockCheck);
Stock stock = stockService.stock(stockCheck); Stock stock = stockService.stock(stockCheck);

@ -91,6 +91,9 @@ public class Stock {
@TableField(exist=false) @TableField(exist=false)
private String topPic1; private String topPic1;
@TableField(exist=false)
private String[] checkPics;
@TableField(exist=false) @TableField(exist=false)
private String topPic2; private String topPic2;

@ -32,6 +32,8 @@ import java.util.*;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -82,9 +84,9 @@ public class PlcService {
@Resource @Resource
private CheckStreetSummaryMapper checkStreetSummaryMapper; private CheckStreetSummaryMapper checkStreetSummaryMapper;
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,8,200,TimeUnit.MINUTES,new ArrayBlockingQueue<>(100000)); private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 8, 200, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100000));
public void setCameraControlModule(CameraControlModule cameraControlModule){ public void setCameraControlModule(CameraControlModule cameraControlModule) {
this.cameraControlModule = cameraControlModule; this.cameraControlModule = cameraControlModule;
} }
@ -122,17 +124,18 @@ public class PlcService {
public void orderStopByWarn(String orderNum) { public void orderStopByWarn(String orderNum) {
} }
public void verticalAdjustment(Integer cameraId){
log.info("球机"+cameraId+"重置垂直方向开始"); public void verticalAdjustment(Integer cameraId) {
log.info("球机" + cameraId + "重置垂直方向开始");
Double origin = null; Double origin = null;
int i = 10 ; int i = 10;
while (i >=0){ while (i >= 0) {
i-- ; i--;
CameraPtzPojo cameraPtzPojo = cameraControlModule.ptzGetDVRConfig(cameraId); CameraPtzPojo cameraPtzPojo = cameraControlModule.ptzGetDVRConfig(cameraId);
if(cameraPtzPojo.isGetSuccess()) { if (cameraPtzPojo.isGetSuccess()) {
cameraControlModule.ptzControlDownStart(cameraId, 0, 0, 1); cameraControlModule.ptzControlDownStart(cameraId, 0, 0, 1);
log.info("球机控制向下"); log.info("球机控制向下");
System.out.println("获取的垂直位置"+cameraPtzPojo.getWTiltPos()); System.out.println("获取的垂直位置" + cameraPtzPojo.getWTiltPos());
if (origin == null) { if (origin == null) {
origin = cameraPtzPojo.getWTiltPos(); origin = cameraPtzPojo.getWTiltPos();
} else if (cameraPtzPojo.getWTiltPos() <= origin) { } else if (cameraPtzPojo.getWTiltPos() <= origin) {
@ -145,19 +148,19 @@ public class PlcService {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
log.info("球机"+cameraId+"重置垂直方向成功"); log.info("球机" + cameraId + "重置垂直方向成功");
cameraControlModule.ptzControlDownEnd(cameraId,0); cameraControlModule.ptzControlDownEnd(cameraId, 0);
gyrateCameraByCode(cameraId,"C1"); gyrateCameraByCode(cameraId, "C1");
} }
public void verticalAdjustmentByStreet(String SRMNumber){ public void verticalAdjustmentByStreet(String SRMNumber) {
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id() : street.getCamera1Id();
try { try {
Thread.sleep(configProperties.getCameraConfig().getVerticalAdjustmentTime()*1000); Thread.sleep(configProperties.getCameraConfig().getVerticalAdjustmentTime() * 1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -165,16 +168,13 @@ public class PlcService {
} }
public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) { public String cameraVideo(Integer cameraId, LocalDateTime startTime, LocalDateTime endTime) {
String path = PathUtil.createFileName("mp4",cameraId); String path = PathUtil.createFileName("mp4", cameraId);
Thread thread = new Thread(new Runnable() { Thread thread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
String realPath = configProperties.getSavePath().getMp4Path() + path; String realPath = configProperties.getSavePath().getMp4Path() + path;
TaskDelayExecutor.addMp4DelayTask(cameraId,realPath,startTime,endTime,configProperties.getCameraConfig().getDelayDownloadMp4()); TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, configProperties.getCameraConfig().getDelayDownloadMp4());
} }
}); });
thread.start(); thread.start();
@ -208,79 +208,79 @@ public class PlcService {
* camera2 * camera2
* *
*/ */
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,orderInfo.getLeftRight()); Integer cameraId = getCameraByPlcCmd(plcCmdInfo, orderInfo.getLeftRight());
gyrateCameraByCode(cameraId,orderInfo.getCmdCode()); gyrateCameraByCode(cameraId, orderInfo.getCmdCode());
if(needCapture){ if (needCapture) {
Boolean delay = true; Boolean delay = true;
Integer row = 0; Integer row = 0;
Integer column = 0; Integer column = 0;
Integer sep = 0; Integer sep = 0;
if(times<=2){ if (times <= 2) {
row = plcCmdInfo.getRow1(); row = plcCmdInfo.getRow1();
column = plcCmdInfo.getColumn1(); column = plcCmdInfo.getColumn1();
sep = plcCmdInfo.getSeparation1(); sep = plcCmdInfo.getSeparation1();
}else { } else {
row = plcCmdInfo.getRow2(); row = plcCmdInfo.getRow2();
column = plcCmdInfo.getColumn2(); column = plcCmdInfo.getColumn2();
sep = plcCmdInfo.getSeparation2(); sep = plcCmdInfo.getSeparation2();
} }
long delayTime = 0; long delayTime = 0;
if(code.startsWith("C1")){ if (code.startsWith("C1")) {
delayTime = configProperties.getCameraConfig().getC1DelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC1DelayCaptureTime();
}else if(code.startsWith("C2")){ } else if (code.startsWith("C2")) {
if(sep == 1){ if (sep == 1) {
delayTime = configProperties.getCameraConfig().getC2DelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC2DelayCaptureTime();
}else { } else {
delayTime = configProperties.getCameraConfig().getC2OutDelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC2OutDelayCaptureTime();
} }
}else if(code.startsWith("C3")){ } else if (code.startsWith("C3")) {
delayTime = configProperties.getCameraConfig().getC3DelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC3DelayCaptureTime();
}else if(code.startsWith("C4")){ } else if (code.startsWith("C4")) {
if(sep == 1){ if (sep == 1) {
delayTime = configProperties.getCameraConfig().getC4DelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC4DelayCaptureTime();
}else { } else {
delayTime = configProperties.getCameraConfig().getC4OutDelayCaptureTime(); delayTime = configProperties.getCameraConfig().getC4OutDelayCaptureTime();
} }
} }
path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); path = PathUtil.createFileNameByRowColumn("jpg", cameraId, row, column);
path = cameraCapture(cameraId,delay,delayTime,path); path = cameraCapture(cameraId, delay, delayTime, path);
} }
//update order info after capture //update order info after capture
if (path != null && needCapture) { if (path != null && needCapture) {
captureUpdateOrderAndStock(orderInfo, path); captureUpdateOrderAndStock(orderInfo, path);
} }
//转向原点位 //转向原点位
if(times == 2){ if (times == 2) {
if(street.getCamera2Id() != null){ if (street.getCamera2Id() != null) {
gyrateCameraByCodeTimeLater(street.getCamera2Id(),"C5",configProperties.getCameraConfig().getC2OutDelayCaptureTime()+500); gyrateCameraByCodeTimeLater(street.getCamera2Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500);
} }
if(street.getCamera1Id() != null){ if (street.getCamera1Id() != null) {
gyrateCameraByCodeTimeLater(street.getCamera1Id(),"C5",configProperties.getCameraConfig().getC2OutDelayCaptureTime()+500); gyrateCameraByCodeTimeLater(street.getCamera1Id(), "C5", configProperties.getCameraConfig().getC2OutDelayCaptureTime() + 500);
} }
} }
} }
public void gyrateCamera(PlcCmdInfo plcCmdInfo,String code){ public void gyrateCamera(PlcCmdInfo plcCmdInfo, String code) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if(street == null){ if (street == null) {
return; return;
} }
if(street.getCamera1Id() != null){ if (street.getCamera1Id() != null) {
gyrateCameraByCode(street.getCamera1Id(),code); gyrateCameraByCode(street.getCamera1Id(), code);
} }
if(street.getCamera2Id() != null){ if (street.getCamera2Id() != null) {
gyrateCameraByCode(street.getCamera2Id(),code); gyrateCameraByCode(street.getCamera2Id(), code);
} }
} }
public void warnAction(PlcCmdInfo plcCmdInfo,String warnCode){ public void warnAction(PlcCmdInfo plcCmdInfo, String warnCode) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if(street.getCamera1Id() != null){ if (street.getCamera1Id() != null) {
gyrateCameraByCode(street.getCamera1Id(),warnCode); gyrateCameraByCode(street.getCamera1Id(), warnCode);
} }
if(street.getCamera2Id() != null){ if (street.getCamera2Id() != null) {
gyrateCameraByCode(street.getCamera2Id(),warnCode); gyrateCameraByCode(street.getCamera2Id(), warnCode);
} }
} }
@ -303,13 +303,13 @@ public class PlcService {
* *
* @Return pic address * @Return pic address
*/ */
public String cameraCapture(Integer cameraId,Boolean delay,Long delayTime,String path) { public String cameraCapture(Integer cameraId, Boolean delay, Long delayTime, String path) {
//String path = PathUtil.createFileName("jpg",cameraId); //String path = PathUtil.createFileName("jpg",cameraId);
String realPath = configProperties.getSavePath().getMediaPath() + path; String realPath = configProperties.getSavePath().getMediaPath() + path;
if(delay){ if (delay) {
TaskDelayExecutor.addPicDelayTask(cameraId,realPath,delayTime); TaskDelayExecutor.addPicDelayTask(cameraId, realPath, delayTime);
}else { } else {
cameraControlModule.pic(cameraId,0,realPath); cameraControlModule.pic(cameraId, 0, realPath);
} }
log.info("capture the photo: {}", realPath); log.info("capture the photo: {}", realPath);
return path; return path;
@ -325,17 +325,17 @@ public class PlcService {
Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId); Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId);
if (ptzId != null && ptzId >= 0) { if (ptzId != null && ptzId >= 0) {
log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId); log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId);
cameraControlModule.toPtz(ptzId,cameraId); cameraControlModule.toPtz(ptzId, cameraId);
} else { } else {
log.error("ptz not found ,code{},cameraId:{}", code, cameraId); log.error("ptz not found ,code{},cameraId:{}", code, cameraId);
} }
} }
public void gyrateCameraByCodeTimeLater(Integer cameraId, String code,long times) { public void gyrateCameraByCodeTimeLater(Integer cameraId, String code, long times) {
Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId); Integer ptzId = cameraService.getPtzIdByCodeAndCameraId(code, cameraId);
if (ptzId != null && ptzId >= 0) { if (ptzId != null && ptzId >= 0) {
log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId); log.info("gyrate camera by code, code{},cameraId:{},ptId:{}", code, cameraId, ptzId);
TaskDelayExecutor.addGyrateCameraTask(cameraId,times,ptzId); TaskDelayExecutor.addGyrateCameraTask(cameraId, times, ptzId);
//cameraControlModule.toPtz(ptzId,cameraId); //cameraControlModule.toPtz(ptzId,cameraId);
} else { } else {
log.error("ptz not found ,code{},cameraId:{}", code, cameraId); log.error("ptz not found ,code{},cameraId:{}", code, cameraId);
@ -373,7 +373,7 @@ public class PlcService {
Order order = orderMapper.getOneByOrderNum(orderNum); Order order = orderMapper.getOneByOrderNum(orderNum);
if (order != null) { if (order != null) {
//stop the order //stop the order
log.debug("plcId:{},warn start and stop the order",plcId); log.debug("plcId:{},warn start and stop the order", plcId);
orderStopByWarn(orderNum); orderStopByWarn(orderNum);
OrderVO orderVO = new OrderVO(); OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(order, orderVO); BeanUtils.copyProperties(order, orderVO);
@ -412,11 +412,11 @@ public class PlcService {
//结束该告警,并录像 //结束该告警,并录像
warn.setEndTime(LocalDateTime.now()); warn.setEndTime(LocalDateTime.now());
if (street.getCamera1Id() != null) { if (street.getCamera1Id() != null) {
String path = cameraVideo(street.getCamera1Id(),warn.getStartTime(),LocalDateTime.now()); String path = cameraVideo(street.getCamera1Id(), warn.getStartTime(), LocalDateTime.now());
warn.setVideoPath1(path); warn.setVideoPath1(path);
} }
if (street.getCamera2Id() != null) { if (street.getCamera2Id() != null) {
String path = cameraVideo(street.getCamera2Id(),warn.getStartTime(),LocalDateTime.now()); String path = cameraVideo(street.getCamera2Id(), warn.getStartTime(), LocalDateTime.now());
warn.setVideoPath2(path); warn.setVideoPath2(path);
} }
warnMapper.updateById(warn); warnMapper.updateById(warn);
@ -435,16 +435,16 @@ public class PlcService {
} }
public Integer getCameraByPlcCmd(PlcCmdInfo plcCmdInfo,Integer leftRight){ public Integer getCameraByPlcCmd(PlcCmdInfo plcCmdInfo, Integer leftRight) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
//判断单双伸 type=0 单伸 1为双伸 //判断单双伸 type=0 单伸 1为双伸
Integer type; Integer type;
if(leftRight == 1){ if (leftRight == 1) {
type = street.getLeftType(); type = street.getLeftType();
}else { } else {
type = street.getRightType(); type = street.getRightType();
} }
if(type == 0){ if (type == 0) {
//单伸 //单伸
if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) { if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) {
if (leftRight == 1) { if (leftRight == 1) {
@ -456,13 +456,13 @@ public class PlcService {
Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id(); Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id();
return cameraId; return cameraId;
} }
}else { } else {
if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) { if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) {
//双伸 todo 这个因项目而异,看现场的情况 //双伸 todo 这个因项目而异,看现场的情况
//默认是 左侧返回camera2 右侧返回camera1 //默认是 左侧返回camera2 右侧返回camera1
if(plcCmdInfo.getLeftRight1() == 1){ if (plcCmdInfo.getLeftRight1() == 1) {
return street.getCamera2Id(); return street.getCamera2Id();
}else { } else {
return street.getCamera1Id(); return street.getCamera1Id();
} }
} else { } else {
@ -478,7 +478,7 @@ public class PlcService {
private LightSourceMapper lightSourceMapper; private LightSourceMapper lightSourceMapper;
public void checkLog(Stock stock){ public void checkLog(Stock stock) {
CheckLog checkLog = new CheckLog(); CheckLog checkLog = new CheckLog();
checkLog.setCheckNum(stock.getCheckNum()); checkLog.setCheckNum(stock.getCheckNum());
checkLog.setPic(stock.getCheckPic()); checkLog.setPic(stock.getCheckPic());
@ -497,60 +497,63 @@ public class PlcService {
checkLogMapper.insert(checkLog); checkLogMapper.insert(checkLog);
log.info("checkLogMapper insert"); log.info("checkLogMapper insert");
} }
public void truncateStock(){
public void truncateStock() {
stockMapper.truncate(); stockMapper.truncate();
} }
public void RFIDCheck(PlcCmdInfo plcCmdInfo){ public void RFIDCheck(PlcCmdInfo plcCmdInfo) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
if(street != null){ if (street != null) {
RFID rfid = rfidService.getRFIDByPlc(street.getId()); RFID rfid = rfidService.getRFIDByPlc(street.getId());
if(rfid != null){ if (rfid != null) {
RFIDStart(rfid.getIp(),rfid.getPort(),street.getId()); RFIDStart(rfid.getIp(), rfid.getPort(), street.getId());
} }
} }
} }
public void RFIDStart(String ip,Integer port,Integer streetId){ public void RFIDStart(String ip, Integer port, Integer streetId) {
RFIDSocket rfidSocket = new RFIDSocket(ip,port); RFIDSocket rfidSocket = new RFIDSocket(ip, port);
rfidSocket.startCheck(); rfidSocket.startCheck();
rfidSocket.readData(); rfidSocket.readData();
RFIDMap.put(streetId,rfidSocket); RFIDMap.put(streetId, rfidSocket);
} }
public Set<String> RFIDStop(PlcCmdInfo plcCmdInfo){ public Set<String> RFIDStop(PlcCmdInfo plcCmdInfo) {
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
RFIDSocket rfidSocket = RFIDMap.get(street.getId()); RFIDSocket rfidSocket = RFIDMap.get(street.getId());
Set<String> tags = null; Set<String> tags = null;
if(rfidSocket != null){ if (rfidSocket != null) {
tags = rfidSocket.getTags(); tags = rfidSocket.getTags();
log.info("tags:{}",tags); log.info("tags:{}", tags);
rfidSocket.close(); rfidSocket.close();
RFIDMap.remove(street.getId()); RFIDMap.remove(street.getId());
} }
return tags; return tags;
} }
public ConfigProperties getConfigProperties(){
public ConfigProperties getConfigProperties() {
return configProperties; return configProperties;
} }
/** /**
* *
* C1 * C1
*
* @param SRMNumber * @param SRMNumber
* @return * @return
*/ */
public String IntoStock(String SRMNumber,String taskId,String goodsLocation){ public String IntoStock(String SRMNumber, String taskId, String goodsLocation) {
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
if (street == null){ if (street == null) {
log.error("SRMNum: {} 对应的巷道不存在", SRMNumber); log.error("SRMNum: {} 对应的巷道不存在", SRMNumber);
} }
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id() : street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(8,10)); Integer row = Integer.valueOf(goodsLocation.substring(8, 10));
Integer column = Integer.valueOf(goodsLocation.substring(5,8)); Integer column = Integer.valueOf(goodsLocation.substring(5, 8));
Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5)); Integer leftRight = Integer.valueOf(goodsLocation.substring(4, 5));
Integer inout = Integer.valueOf(goodsLocation.substring(11,12)); Integer inout = Integer.valueOf(goodsLocation.substring(11, 12));
log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout); log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout);
@ -573,27 +576,26 @@ public class PlcService {
} }
/** /**
* *
*
* @param SRMNumber * @param SRMNumber
* @return * @return
*/ */
public String IntoStockOver(String SRMNumber,String taskId,String goodsLocation){ public String IntoStockOver(String SRMNumber, String taskId, String goodsLocation) {
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id() : street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(8,10)); Integer row = Integer.valueOf(goodsLocation.substring(8, 10));
Integer column = Integer.valueOf(goodsLocation.substring(5,8)); Integer column = Integer.valueOf(goodsLocation.substring(5, 8));
Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5)); Integer leftRight = Integer.valueOf(goodsLocation.substring(4, 5));
Integer inout = Integer.valueOf(goodsLocation.substring(11,12)); Integer inout = Integer.valueOf(goodsLocation.substring(11, 12));
log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout); log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout);
String inoutString = inout == 1 ? "IN" : "OUT"; String inoutString = inout == 1 ? "IN" : "OUT";
String leftRightString = leftRight == 1 ? "L":"R"; String leftRightString = leftRight == 1 ? "L" : "R";
//转动拍照 //转动拍照
String PTZCode = String.format("C2-%s-%s", inoutString,leftRightString); String PTZCode = String.format("C2-%s-%s", inoutString, leftRightString);
gyrateCameraByCode(cameraId,PTZCode); gyrateCameraByCode(cameraId, PTZCode);
//等待2s再拍照 //等待2s再拍照
try { try {
Thread.sleep(2000l); Thread.sleep(2000l);
@ -601,24 +603,25 @@ public class PlcService {
e.printStackTrace(); e.printStackTrace();
} }
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column, goodsLocation); String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, row, column, goodsLocation);
Order order = orderMapper.getOneByOrderNum(taskId); Order order = orderMapper.getOneByOrderNum(taskId);
if(order != null){ if (order != null) {
Order upd = new Order(); Order upd = new Order();
upd.setId(order.getId()); upd.setId(order.getId());
upd.setIntoStockOverPic(path); upd.setIntoStockOverPic(path);
upd.setIntoStockOverTime(LocalDateTime.now()); upd.setIntoStockOverTime(LocalDateTime.now());
orderMapper.updateById(upd); orderMapper.updateById(upd);
} }
cameraCapture(cameraId,false,0l,path); cameraCapture(cameraId, false, 0l, path);
return configProperties.getIP()+":9007/api/pic/"+path; return configProperties.getIP() + ":9007/api/pic/" + path;
} }
public void check(PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo ) { Lock lock = new ReentrantLock();
public void check(PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo) {
Street street = streetService.getStreetByPlcId(dataInfo.getSRMNumber()); Street street = streetService.getStreetByPlcId(dataInfo.getSRMNumber());
//开始盘点具体货位 //开始盘点具体货位
if(dataInfo.getCmdName().equals("SC01")){
CheckLog checkLog = new CheckLog(); CheckLog checkLog = new CheckLog();
checkLog.setStreetId(street.getId()); checkLog.setStreetId(street.getId());
checkLog.setLotnum(dataInfo.getLotnum()); checkLog.setLotnum(dataInfo.getLotnum());
@ -634,8 +637,8 @@ public class PlcService {
checkLog.setCount(dataInfo.getQuantity()); checkLog.setCount(dataInfo.getQuantity());
checkLogMapper.insert(checkLog); checkLogMapper.insert(checkLog);
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),dataInfo.getFromDirection(),dataInfo.getFromSide(),dataInfo.getFromRow(),dataInfo.getFromColumn()); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(), dataInfo.getFromDirection(), dataInfo.getFromSide(), dataInfo.getFromRow(), dataInfo.getFromColumn());
if(stock== null) { if (stock == null) {
stock = new Stock(); stock = new Stock();
} }
stock.setStreetId(street.getId()); stock.setStreetId(street.getId());
@ -651,48 +654,49 @@ public class PlcService {
//默认未盘点 //默认未盘点
stock.setStatus(StockStatus.PENDING.getStatus()); stock.setStatus(StockStatus.PENDING.getStatus());
stock.setExportTime(LocalDateTime.now()); stock.setExportTime(LocalDateTime.now());
if(stock.getId() == null){ if (stock.getId() == null) {
stockMapper.insert(stock); stockMapper.insert(stock);
}else stockMapper.updateById(stock); } else stockMapper.updateById(stock);
TransmissionPojo transmissionPojo = new TransmissionPojo( checkLog ,street); TransmissionPojo transmissionPojo = new TransmissionPojo(checkLog, street);
ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.ST)); ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.ST));
}
//取货完成进行拍照 //取货完成进行拍照
else if(dataInfo.getCmdName().equals("SC02")){ try {
CheckLog checkLog = checkLogMapper.selectOne(new QueryWrapper<CheckLog>() if (lock.tryLock()) {
.eq("direction",dataInfo.getFromDirection())
.eq("street_id",street.getId())
.orderByDesc("id").last("limit 1"));
TransmissionPojo transmissionPojo = new TransmissionPojo( checkLog,street );
if(GetPhotoDelayExecutor.cameraDelayTasks.size()==0){
//队列中没有任务,发送取图指令 //队列中没有任务,发送取图指令
ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.GPS)); ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.GPS));
Thread.sleep(50L);
} } else {
//将取图指令放入队列等待上条取图结束,或队列超时调用 //将取图指令放入队列等待上条取图结束,或队列超时调用
GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(),transmissionPojo.toString(TransmissionType.GPS),2000L); GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(), transmissionPojo.toString(TransmissionType.GPS), configProperties.getQueueSpanTime());
}
} catch (InterruptedException e) {
log.error("取图命令 error", e);
} finally {
lock.unlock();
}
// ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(); // ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush();
}
} }
public void visualCalculationResults(TransmissionPojo transmissionPojo) { public void visualCalculationResults(TransmissionPojo transmissionPojo) {
CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId()); CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId());
Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("check_Num",checkLog.getId())); Stock stock = stockMapper.selectOne(new QueryWrapper<Stock>().eq("check_Num", checkLog.getId()));
Street street = streetService.getStreetByPlcId(transmissionPojo.getStreetNumber()); Street street = streetService.getStreetByPlcId(transmissionPojo.getStreetNumber());
if(transmissionPojo.getResult() != null && transmissionPojo.getResult() == 1){ if (transmissionPojo.getResult() != null && transmissionPojo.getResult() == 1) {
checkLog.setStatus(StockStatus.SUCCESS.getStatus()); checkLog.setStatus(StockStatus.SUCCESS.getStatus());
stock.setStatus(StockStatus.SUCCESS.getStatus()); stock.setStatus(StockStatus.SUCCESS.getStatus());
}else { } else {
checkLog.setStatus(StockStatus.ERROR.getStatus()); checkLog.setStatus(StockStatus.ERROR.getStatus());
stock.setStatus(StockStatus.ERROR.getStatus()); stock.setStatus(StockStatus.ERROR.getStatus());
stock.setCount(transmissionPojo.getCount());
stock.setCategory(transmissionPojo.getCategory());
} }
if (transmissionPojo.getPicsPath() != null && transmissionPojo.getPicsPath().length > 0){ if (transmissionPojo.getPicsPath() != null && transmissionPojo.getPicsPath().length > 0) {
String pics = Arrays.stream(transmissionPojo.getPicsPath()).map(v->{ String pics = Arrays.stream(transmissionPojo.getPicsPath()).map(v -> {
return street.getPlcIp() + ":8007" + v; return "http://" + street.getPlcIp() + ":8007" + v;
}).collect(Collectors.joining(";")); }).collect(Collectors.joining(";"));
checkLog.setPic(pics); checkLog.setPic(pics);
stock.setCheckPic(pics); stock.setCheckPic(pics);
@ -712,7 +716,7 @@ public class PlcService {
return sb.toString(); return sb.toString();
} }
public KsecInfo getKsecDataInfo(TransmissionPojo transmissionPojo,String type) { public KsecInfo getKsecDataInfo(TransmissionPojo transmissionPojo, String type) {
KsecDataInfo ksecDataInfo = new KsecDataInfo(); KsecDataInfo ksecDataInfo = new KsecDataInfo();
CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId()); CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId());
ksecDataInfo.setLotnum(checkLog.getLotnum()); ksecDataInfo.setLotnum(checkLog.getLotnum());
@ -728,7 +732,7 @@ public class PlcService {
ksecDataInfo.setLotnum(checkLog.getLotnum()); ksecDataInfo.setLotnum(checkLog.getLotnum());
KsecInfo ksecInfo = new KsecInfo("KC","SC",ksecDataInfo); KsecInfo ksecInfo = new KsecInfo("KC", "SC", ksecDataInfo);
return ksecInfo; return ksecInfo;
} }
} }

@ -335,14 +335,10 @@ public class StockService {
// Assert.notNull(shelveId,"无该货架信息"); // Assert.notNull(shelveId,"无该货架信息");
Street street = streetService.getStreetByPlcId(stockCheckSearch.getSRMNumber()); Street street = streetService.getStreetByPlcId(stockCheckSearch.getSRMNumber());
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),stockCheckSearch.getDirection(),stockCheckSearch.getSeparation(),stockCheckSearch.getRow(),stockCheckSearch.getColumn()); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),stockCheckSearch.getDirection(),stockCheckSearch.getSeparation(),stockCheckSearch.getRow(),stockCheckSearch.getColumn());
if(stock != null){ if(stock.getCheckPic()!=null){
String ip ="http://"+ street.getPlcIp()+":9009/pic/"+stock.getCode()+"/"+stock.getLotnum()+"/"+stock.getLotnum()+"/";
stock.setSidePic1(String.format("%s1.png",ip)); stock.setCheckPics(stock.getCheckPic().split(";"));
stock.setSidePic2(String.format("%s2.png",ip));
stock.setSidePic3(String.format("%s3.png",ip));
stock.setSidePic4(String.format("%s4.png",ip));
stock.setTopPic1(String.format("%s5.png",ip));
stock.setTopPic2(String.format("%s6.png",ip));
} }
return stock; return stock;
} }

@ -100,6 +100,12 @@ public class Decoder extends DelimiterBasedFrameDecoder {
else if(GET_PHOTO_END.equals(transmissionPojo.getHeader())){ else if(GET_PHOTO_END.equals(transmissionPojo.getHeader())){
ClientChanel.get(transmissionPojo.getStreetNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.RTS)); ClientChanel.get(transmissionPojo.getStreetNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.RTS));
try {
Thread.sleep(50L);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//发送给上位机 //发送给上位机
KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo,"SC03"); KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo,"SC03");
KsecNettyClient.write(ksecInfo); KsecNettyClient.write(ksecInfo);
@ -119,6 +125,7 @@ public class Decoder extends DelimiterBasedFrameDecoder {
ksecInfo.getData().setTypeNum(transmissionPojo.getCategory()); ksecInfo.getData().setTypeNum(transmissionPojo.getCategory());
ksecInfo.getData().setQuantity(transmissionPojo.getCount()); ksecInfo.getData().setQuantity(transmissionPojo.getCount());
ksecInfo.getData().setCheckRlt(transmissionPojo.getResult()); ksecInfo.getData().setCheckRlt(transmissionPojo.getResult());
KsecNettyClient.write(ksecInfo); KsecNettyClient.write(ksecInfo);

@ -174,7 +174,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
// }else { // }else {
// log.info("other D code :{}",code); // log.info("other D code :{}",code);
// } // }
} else if (Cmd.SC.name().equals(ksecInfo.getType())) { } else if (Cmd.E.name().equals(ksecInfo.getType())) {
//智能盘点 //智能盘点
plcService.check(plcCmdInfo, dataInfo); plcService.check(plcCmdInfo, dataInfo);

@ -69,6 +69,8 @@ ksec:
IP: 127.0.0.1 IP: 127.0.0.1
# 服务端TCP端口 # 服务端TCP端口
serverPort: 3001 serverPort: 3001
# 服务端队列时间间隔(单位ms)
queueSpanTime: 10000
# ------------ 实时视频流 全部页面的格式 行列数量 # ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig: videoStyleConfig:
videoStyleRow: 4 videoStyleRow: 4

Loading…
Cancel
Save