|
|
|
|
@ -638,81 +638,14 @@ public class PlcService {
|
|
|
|
|
HikControlSocket.openLight(lightSource.getIp(), lightSource.getPort(), configProperties.getLightSource().getIndex(), 1);
|
|
|
|
|
});*/
|
|
|
|
|
log.info("盘点摄像头变化参数:" + plcCmdInfo.toString());
|
|
|
|
|
Integer cameraId = getCameraByPlcCmdE(plcCmdInfo, plcCmdInfo.getLeftRight1());
|
|
|
|
|
|
|
|
|
|
if (plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2) {
|
|
|
|
|
//内测
|
|
|
|
|
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN";
|
|
|
|
|
log.info("camera ptz" + c);
|
|
|
|
|
gyrateCameraByCode(cameraId, c);
|
|
|
|
|
} else {
|
|
|
|
|
String c = cmdCode + "1";
|
|
|
|
|
gyrateCameraByCode(cameraId, c);
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String path = PathUtil.createFileNameByRowColumn("jpg", cameraId, plcCmdInfo.getRow1(), plcCmdInfo.getColumn1());
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
cameraCapture(cameraId, false, null, path);
|
|
|
|
|
} catch (NullPointerException e) {
|
|
|
|
|
log.error("相机{}未连接无法拍照", cameraId);
|
|
|
|
|
}
|
|
|
|
|
//托盘码
|
|
|
|
|
String trayCode = null;
|
|
|
|
|
Boolean trayCheck = Boolean.FALSE;
|
|
|
|
|
//如果是用扫码枪 扫 托盘码,就直接扫
|
|
|
|
|
//if(configProperties.getScanCodeMode().getTray() == 2){
|
|
|
|
|
log.info("扫码类型:" + configProperties.getScanCodeMode().getTray());
|
|
|
|
|
//托盘使用sick扫码枪
|
|
|
|
|
// SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), plcCmdInfo.getLeftRight1());
|
|
|
|
|
SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(), plcCmdInfo.getLeftRight1());
|
|
|
|
|
Future<String> sickFuture = executor.submit(() -> {
|
|
|
|
|
|
|
|
|
|
long startsickTime = System.currentTimeMillis();
|
|
|
|
|
String code = "";
|
|
|
|
|
if (sensorGun == null) {
|
|
|
|
|
code = "扫码枪未配置";
|
|
|
|
|
log.error("no sensor gun config in database ,street id:{},direction:{}", street.getId(), plcCmdInfo.getLeftRight1());
|
|
|
|
|
} else {
|
|
|
|
|
try {
|
|
|
|
|
code = SickSocket.readOCR(sensorGun.getIp(), sensorGun.getPort(), configProperties.getScanCodeMode().getSickScanTime());
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
log.info("sensor tray code:{}", code);
|
|
|
|
|
if ("".equals(wmsTrayCode)) {
|
|
|
|
|
//托盘码为空,无货物
|
|
|
|
|
//只要扫码枪未识别出条码,即认为盘点正确
|
|
|
|
|
if (StringUtils.isEmpty(code) || code.equals("NoRead")) {
|
|
|
|
|
code = "";
|
|
|
|
|
} else {
|
|
|
|
|
code = "扫码枪识别异常";
|
|
|
|
|
log.warn("sick ocr error:{}", code);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (StringUtils.isEmpty(code) || code.equals("NoRead")) {
|
|
|
|
|
code = "扫码枪识别异常";
|
|
|
|
|
log.warn("sick ocr error:{}", code);
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
log.info("sick ocr:{}", code);
|
|
|
|
|
//扫到就认为正常
|
|
|
|
|
code = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long endsickTime = System.currentTimeMillis();
|
|
|
|
|
|
|
|
|
|
log.info("sick time:{}millisecond", startsickTime - endsickTime);
|
|
|
|
|
return code;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// RFID
|
|
|
|
|
// RFID rfid = rfidService.getRFIDByPlc(street.getId(),plcCmdInfo.getLeftRight1());
|
|
|
|
|
@ -720,10 +653,10 @@ public class PlcService {
|
|
|
|
|
|
|
|
|
|
Boolean trayRFIDCheck = Boolean.FALSE;
|
|
|
|
|
|
|
|
|
|
Future<String> rfidFuture = executor.submit(() -> {
|
|
|
|
|
Future<Boolean> rfidFuture = executor.submit(() -> {
|
|
|
|
|
|
|
|
|
|
long startRfidTime = System.currentTimeMillis();
|
|
|
|
|
String code = "";
|
|
|
|
|
Boolean flag = Boolean.FALSE;;
|
|
|
|
|
|
|
|
|
|
Set<String> tags = new HashSet<>();
|
|
|
|
|
try {
|
|
|
|
|
@ -736,26 +669,14 @@ public class PlcService {
|
|
|
|
|
log.info("盘点rfid扫描结果:" + tags);
|
|
|
|
|
}
|
|
|
|
|
if (tags != null && tags.size() > 0) {
|
|
|
|
|
|
|
|
|
|
if (wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()) != null
|
|
|
|
|
&& tags.containsAll(wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()))) {
|
|
|
|
|
|
|
|
|
|
if ( wmsTrayCode != null
|
|
|
|
|
&& tags.contains(wmsTrayCode)) {
|
|
|
|
|
log.info("扫描成功");
|
|
|
|
|
|
|
|
|
|
flag = Boolean.TRUE;
|
|
|
|
|
} else {
|
|
|
|
|
if (wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()) != null) {
|
|
|
|
|
wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()).removeAll(tags);
|
|
|
|
|
|
|
|
|
|
log.info("未扫到数据为:{}", wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()));
|
|
|
|
|
for (String str : wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum())) {
|
|
|
|
|
if (str.length() == 14) {
|
|
|
|
|
code = "RFID扫描失败";
|
|
|
|
|
log.info("未扫描到箱体" + str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()).size() > configProperties.getRfid().getGraceNumber()) {
|
|
|
|
|
code = "RFID扫描失败";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
flag = Boolean.FALSE;;
|
|
|
|
|
}
|
|
|
|
|
RFID rfid = rfidMapper.selectOne(new QueryWrapper<RFID>().eq("street_id", street.getId()));
|
|
|
|
|
if (!rfidLiveService.getRfidLive(plcCmdInfo, street, wmsTrayCode)) {
|
|
|
|
|
@ -767,29 +688,17 @@ public class PlcService {
|
|
|
|
|
long endRfidTime = System.currentTimeMillis();
|
|
|
|
|
|
|
|
|
|
log.info("rfid time:{}millisecond", startRfidTime - endRfidTime);
|
|
|
|
|
return code;
|
|
|
|
|
return flag;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
try {
|
|
|
|
|
String sickCode = sickFuture.get(); // get()会阻塞直到结果可用
|
|
|
|
|
String rfid = rfidFuture.get(); // get()会阻塞直到结果可用
|
|
|
|
|
log.info("sickCode:{}", sickCode);
|
|
|
|
|
// String sickCode = sickFuture.get(); // get()会阻塞直到结果可用
|
|
|
|
|
Boolean rfid = rfidFuture.get(); // get()会阻塞直到结果可用
|
|
|
|
|
log.info("rfid:{}", rfid);
|
|
|
|
|
|
|
|
|
|
trayCode = sickCode;
|
|
|
|
|
if (sickCode != null && !"".equals(sickCode)) {
|
|
|
|
|
trayCode = trayCode + ";";
|
|
|
|
|
} else {
|
|
|
|
|
trayCheck = Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
trayRFIDCheck = rfid;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rfid == null || "".equals(rfid)) {
|
|
|
|
|
trayRFIDCheck = Boolean.TRUE;
|
|
|
|
|
}
|
|
|
|
|
trayCode += rfid;
|
|
|
|
|
if ("".equals(trayCode)) {
|
|
|
|
|
trayCode = "盘点正确";
|
|
|
|
|
}
|
|
|
|
|
} catch (InterruptedException | ExecutionException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
@ -803,8 +712,11 @@ public class PlcService {
|
|
|
|
|
//核对异常
|
|
|
|
|
Integer status = 1;
|
|
|
|
|
//托盘和货物都正确
|
|
|
|
|
if (trayCheck && trayRFIDCheck) {
|
|
|
|
|
if ( trayRFIDCheck) {
|
|
|
|
|
status = 2;
|
|
|
|
|
trayCode=wmsTrayCode;
|
|
|
|
|
}else {
|
|
|
|
|
trayCode="盘点失败";
|
|
|
|
|
}
|
|
|
|
|
if (stock == null) {
|
|
|
|
|
stock = Stock.builder()
|
|
|
|
|
@ -820,14 +732,12 @@ public class PlcService {
|
|
|
|
|
.row(orderInfo.getRow())
|
|
|
|
|
.column(orderInfo.getColumn())
|
|
|
|
|
.status(status)
|
|
|
|
|
.checkPic(path)
|
|
|
|
|
.exportTime(LocalDateTime.now()).build();
|
|
|
|
|
stockMapper.insert(stock);
|
|
|
|
|
} else {
|
|
|
|
|
stock.setStatus(status);
|
|
|
|
|
stock.setLotnum(plcCmdInfo.getLotnum());
|
|
|
|
|
stock.setExportTime(LocalDateTime.now());
|
|
|
|
|
stock.setCheckPic(path);
|
|
|
|
|
stock.setCheckNum(plcCmdInfo.getOrderNum());
|
|
|
|
|
stock.setTrayCode(trayCode);
|
|
|
|
|
stock.setWmsTrayCode(wmsTrayCode);
|
|
|
|
|
@ -839,7 +749,6 @@ public class PlcService {
|
|
|
|
|
// StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties,sensorGun);
|
|
|
|
|
// threadPoolExecutor.execute(stockCheckRunnable);
|
|
|
|
|
//还原相机
|
|
|
|
|
gyrateCameraByCode(cameraId, "C5");
|
|
|
|
|
long end = System.currentTimeMillis();
|
|
|
|
|
long s = end - startTime;
|
|
|
|
|
log.info("time:{}millisecond", s);
|
|
|
|
|
@ -904,7 +813,7 @@ public class PlcService {
|
|
|
|
|
public void RFIDStart(String ip, Integer port, Integer streetId, Integer direction) {
|
|
|
|
|
RFIDSocket rfidSocket = new RFIDSocket(ip, port);
|
|
|
|
|
log.info("rfid调用,ip:" + ip + ";port:" + port);
|
|
|
|
|
rfidSocket.startCheck(direction, true);
|
|
|
|
|
rfidSocket.startCheck(direction, false);
|
|
|
|
|
RFIDMap.put(streetId, rfidSocket);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|