|
|
|
|
@ -1,21 +1,18 @@
|
|
|
|
|
package com.leaper.web.service;
|
|
|
|
|
|
|
|
|
|
import codeDetector.BarcodeDetector;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
import com.leaper.web.entity.*;
|
|
|
|
|
import com.leaper.web.lib.CameraControlModule;
|
|
|
|
|
import com.leaper.web.lib.OrderInfo;
|
|
|
|
|
import com.leaper.web.lib.OrderRealtime;
|
|
|
|
|
import com.leaper.web.lib.TaskDelayExecutor;
|
|
|
|
|
import com.leaper.web.mapper.*;
|
|
|
|
|
import com.leaper.web.service.RFID.RFIDSocket;
|
|
|
|
|
import com.leaper.common.util.PathUtil;
|
|
|
|
|
import com.leaper.web.config.ConfigProperties;
|
|
|
|
|
import com.leaper.web.entity.*;
|
|
|
|
|
import com.leaper.web.lib.*;
|
|
|
|
|
import com.leaper.web.mapper.*;
|
|
|
|
|
import com.leaper.web.pojo.OrderVO;
|
|
|
|
|
import com.leaper.web.service.RFID.RFIDMap;
|
|
|
|
|
import com.leaper.web.pojo.TrayCode;
|
|
|
|
|
import com.leaper.web.service.RFID.RFIDSocket;
|
|
|
|
|
import com.leaper.web.service.hikLightSource.HikControlSocket;
|
|
|
|
|
import com.leaper.web.service.ksec.KsecNettyClient;
|
|
|
|
|
import com.leaper.web.service.sick.SickSocket;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@ -25,8 +22,8 @@ import javax.annotation.Resource;
|
|
|
|
|
import java.time.Duration;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
|
|
|
import java.util.concurrent.BlockingDeque;
|
|
|
|
|
import java.util.concurrent.ThreadPoolExecutor;
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
|
|
@ -138,16 +135,16 @@ public class PlcService {
|
|
|
|
|
*
|
|
|
|
|
* @param plcCmdInfo
|
|
|
|
|
*/
|
|
|
|
|
public void orderStop(PlcCmdInfo plcCmdInfo) {
|
|
|
|
|
public boolean orderStop(PlcCmdInfo plcCmdInfo) {
|
|
|
|
|
LocalDateTime endTime = LocalDateTime.now();
|
|
|
|
|
Street street = streetMapper.getStreetByPlcId(plcCmdInfo.getPlcId());
|
|
|
|
|
if (street == null) {
|
|
|
|
|
return;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
Order order = orderMapper.getOneByOrderNum(plcCmdInfo.getOrderNum());
|
|
|
|
|
if (order == null) {
|
|
|
|
|
log.error("订单结束信号,订单不存在,orderNum:{}", plcCmdInfo.getOrderNum());
|
|
|
|
|
return;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
OrderRealtime.stopOrder(street.getId());
|
|
|
|
|
Order update = new Order();
|
|
|
|
|
@ -157,7 +154,7 @@ public class PlcService {
|
|
|
|
|
update.setLeftRight2(plcCmdInfo.getLeftRight2());
|
|
|
|
|
update.setColumn2(plcCmdInfo.getColumn2());
|
|
|
|
|
update.setRow2(plcCmdInfo.getRow2());
|
|
|
|
|
LocalDateTime endDownLoadTime = endTime.plusSeconds(10);
|
|
|
|
|
LocalDateTime endDownLoadTime = endTime.plusSeconds(5);
|
|
|
|
|
Duration duration = Duration.between(order.getStartTime(),endDownLoadTime);
|
|
|
|
|
|
|
|
|
|
if(duration.toMinutes() > 50){
|
|
|
|
|
@ -172,7 +169,7 @@ public class PlcService {
|
|
|
|
|
update.setVideoPath2(path);
|
|
|
|
|
}
|
|
|
|
|
orderMapper.updateById(update);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void orderStopByWarn(String orderNum) {
|
|
|
|
|
@ -462,16 +459,17 @@ public class PlcService {
|
|
|
|
|
//update picPath in stock if code is C2/C4
|
|
|
|
|
if(orderInfo.getCode().startsWith("C2") || orderInfo.getCode().startsWith("C4")){
|
|
|
|
|
StockLog stockLog = new StockLog();
|
|
|
|
|
stockLog.setStreetId(orderInfo.getStreetId());
|
|
|
|
|
stockLog.setDirection(orderInfo.getLeftRight());
|
|
|
|
|
stockLog.setSide(orderInfo.getSeparation());
|
|
|
|
|
stockLog.setStreetId(order.getStreetId());
|
|
|
|
|
stockLog.setRow(orderInfo.getRow());
|
|
|
|
|
stockLog.setColumn(orderInfo.getColumn());
|
|
|
|
|
stockLog.setPic(path);
|
|
|
|
|
|
|
|
|
|
String type = orderInfo.getCode().substring(1,2);
|
|
|
|
|
stockLog.setType(Integer.valueOf(type));
|
|
|
|
|
stockLog.setOrderNum(orderInfo.getOrderNum());
|
|
|
|
|
stockLog.setCreateTime(LocalDateTime.now());
|
|
|
|
|
stockLog.setDirection(order.getLeftRight1());
|
|
|
|
|
stockLog.setSide(orderInfo.getSide());
|
|
|
|
|
stockLogMapper.insert(stockLog);
|
|
|
|
|
// Stock stock = stockMapper.getByShelveIdAndRowColumn(orderInfo.getShelveId(), orderInfo.getRow(), orderInfo.getColumn());
|
|
|
|
|
// if (stock == null) {
|
|
|
|
|
@ -523,6 +521,7 @@ public class PlcService {
|
|
|
|
|
if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) {
|
|
|
|
|
if (leftRight == 1) {
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
}
|
|
|
|
|
@ -533,11 +532,47 @@ public class PlcService {
|
|
|
|
|
}else {
|
|
|
|
|
if (street.getCamera1Id() != null && street.getCamera2Id() != null && street.getCamera1Id() != 0 && street.getCamera2Id() != 0) {
|
|
|
|
|
//双伸 todo 这个因项目而异,看现场的情况
|
|
|
|
|
//默认是 左侧返回camera2 右侧返回camera1
|
|
|
|
|
if(plcCmdInfo.getLeftRight1() == 1){
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
//默认是
|
|
|
|
|
if(plcCmdInfo.getTimes() <= 2){
|
|
|
|
|
//左侧
|
|
|
|
|
if(plcCmdInfo.getLeftRight1() == 1){
|
|
|
|
|
|
|
|
|
|
if(plcCmdInfo.getSeparation1() == 1){
|
|
|
|
|
//左侧 内货架 camera2
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
}else {
|
|
|
|
|
//左侧 外货架 camera1
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if(plcCmdInfo.getSeparation1() == 1){
|
|
|
|
|
//右侧 内货架 camera1
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
}else {
|
|
|
|
|
//右侧 外货架 camera2
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
//左侧
|
|
|
|
|
if(plcCmdInfo.getLeftRight2() == 1){
|
|
|
|
|
|
|
|
|
|
if(plcCmdInfo.getSeparation2() == 1){
|
|
|
|
|
//左侧 内货架 camera2
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
}else {
|
|
|
|
|
//左侧 外货架 camera1
|
|
|
|
|
return street.getCamera2Id();
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if(plcCmdInfo.getSeparation2() == 1){
|
|
|
|
|
//右侧 内货架 camera1
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
}else {
|
|
|
|
|
//右侧 外货架 camera2
|
|
|
|
|
return street.getCamera1Id();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Integer cameraId = street.getCamera1Id() != null && street.getCamera1Id() != 0 ? street.getCamera1Id() : street.getCamera2Id();
|
|
|
|
|
@ -561,59 +596,271 @@ public class PlcService {
|
|
|
|
|
HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1);
|
|
|
|
|
});
|
|
|
|
|
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1());
|
|
|
|
|
log.info("taskId:{}", plcCmdInfo.getTaskId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(configProperties.getScanCodeMode().getCheckScanCodeInterval());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//托盘码
|
|
|
|
|
String trayCode = null;
|
|
|
|
|
Boolean trayCheck = Boolean.TRUE;
|
|
|
|
|
log.info("3");
|
|
|
|
|
//重庆项目 单伸,只用扫码枪
|
|
|
|
|
|
|
|
|
|
SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1());
|
|
|
|
|
|
|
|
|
|
if(sensorGun == null){
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.error("no sensor gun config in database ,street id:{},direction:{}",street.getId(),plcCmdInfo.getLeftRight1());
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
log.info("sensor ip:{},port:{}",sensorGun.getIp(),sensorGun.getPort());
|
|
|
|
|
//不确定扫码方式暂时停用
|
|
|
|
|
trayCode = SickSocket.readOCR(sensorGun.getIp(),sensorGun.getPort());
|
|
|
|
|
trayCode = trayCode.substring(trayCode.length()-4);
|
|
|
|
|
log.info("sensor tray code:{}",trayCode);
|
|
|
|
|
if("".equals(wmsTrayCode)){
|
|
|
|
|
//托盘码为空,无货物
|
|
|
|
|
//只要扫码枪未识别出条码,即认为盘点正确
|
|
|
|
|
if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){
|
|
|
|
|
trayCode = "";
|
|
|
|
|
trayCheck = Boolean.TRUE;
|
|
|
|
|
}else {
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.warn("sick ocr error:{}",trayCode);
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.warn("sick ocr error:{}",trayCode);
|
|
|
|
|
}else {
|
|
|
|
|
trayCheck = wmsTrayCode.equals(trayCode);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
|
|
|
|
|
//内测
|
|
|
|
|
String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN";
|
|
|
|
|
log.info("camera ptz"+c);
|
|
|
|
|
gyrateCameraByCode(cameraId, c);
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(configProperties.getScanCodeMode().getCheckPhotographyScanCodeInterval());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1());
|
|
|
|
|
|
|
|
|
|
//重庆亚士创能盘点时用同侧相机拍摄货物顶部(E1-TOP)
|
|
|
|
|
Integer leftRightTop = plcCmdInfo.getLeftRight1() == 1 ? 2 : 1;
|
|
|
|
|
Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop);
|
|
|
|
|
String cameraCmdCode1 = cmdCode;
|
|
|
|
|
// if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
|
|
|
|
|
// //内测
|
|
|
|
|
cameraCmdCode1 = cmdCode + "-" + "TOP";
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
log.info("1 camera ptz:"+cameraCmdCode1);
|
|
|
|
|
|
|
|
|
|
gyrateCameraByCode(cameraIdTop, cameraCmdCode1);
|
|
|
|
|
cameraCapture(cameraIdTop,false,null,path);
|
|
|
|
|
|
|
|
|
|
//重庆亚士创能盘点时用对侧球机拍侧面层数(E1-SIDE)
|
|
|
|
|
String cameraCmdCode2 = cmdCode + "-" + "SIDE";
|
|
|
|
|
gyrateCameraByCode(cameraId, cameraCmdCode2);
|
|
|
|
|
log.info("2 camera ptz:"+cameraCmdCode2);
|
|
|
|
|
cameraCapture(cameraId,false,null,path+".jpg");
|
|
|
|
|
OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode);
|
|
|
|
|
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn());
|
|
|
|
|
//核对异常
|
|
|
|
|
Integer status = 1;
|
|
|
|
|
//托盘和货物都正确
|
|
|
|
|
if(trayCheck){
|
|
|
|
|
status = 2;
|
|
|
|
|
}
|
|
|
|
|
if(stock == null){
|
|
|
|
|
stock = Stock.builder()
|
|
|
|
|
.checkNum(plcCmdInfo.getOrderNum())
|
|
|
|
|
.lotnum(plcCmdInfo.getLotnum())
|
|
|
|
|
.code("")
|
|
|
|
|
.wmsCode(wmsCode)
|
|
|
|
|
.wmsTrayCode(wmsTrayCode)
|
|
|
|
|
.trayCode("")
|
|
|
|
|
.streetId(orderInfo.getStreetId())
|
|
|
|
|
.direction(orderInfo.getLeftRight())
|
|
|
|
|
.side(orderInfo.getSeparation())
|
|
|
|
|
.row(orderInfo.getRow())
|
|
|
|
|
.column(orderInfo.getColumn())
|
|
|
|
|
.status(0)
|
|
|
|
|
.checkPic(path)
|
|
|
|
|
.exportTime(LocalDateTime.now())
|
|
|
|
|
.build();stockMapper.insert(stock);
|
|
|
|
|
}else {
|
|
|
|
|
gyrateCameraByCode(cameraId, cmdCode);
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
stock.setStatus(status);
|
|
|
|
|
stock.setLotnum(plcCmdInfo.getLotnum());
|
|
|
|
|
stock.setExportTime(LocalDateTime.now());
|
|
|
|
|
stock.setCheckPic(path);
|
|
|
|
|
stock.setCheckNum(plcCmdInfo.getOrderNum());
|
|
|
|
|
stock.setTrayCode(trayCode);
|
|
|
|
|
stock.setWmsTrayCode(wmsTrayCode);
|
|
|
|
|
stockMapper.updateById(stock);
|
|
|
|
|
}
|
|
|
|
|
checkLog(stock);
|
|
|
|
|
long end = System.currentTimeMillis();
|
|
|
|
|
long s = end - startTime;
|
|
|
|
|
log.info("time:{}millisecond",s);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TrayCode checkScanCode(PlcCmdInfo plcCmdInfo, String cmdCode, String wmsCode, String wmsTrayCode ){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(configProperties.getScanCodeMode().getCheckScanCodeInterval());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
|
|
|
|
|
//托盘码
|
|
|
|
|
String trayCode = null;
|
|
|
|
|
Boolean trayCheck = Boolean.TRUE;
|
|
|
|
|
//重庆项目 单伸,只用扫码枪
|
|
|
|
|
|
|
|
|
|
SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1());
|
|
|
|
|
|
|
|
|
|
if(sensorGun == null){
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.error("no sensor gun config in database ,street id:{},direction:{}",street.getId(),plcCmdInfo.getLeftRight1());
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
log.info("sensor ip:{},port:{}",sensorGun.getIp(),sensorGun.getPort());
|
|
|
|
|
//不确定扫码方式暂时停用
|
|
|
|
|
trayCode = SickSocket.readOCR(sensorGun.getIp(),sensorGun.getPort());
|
|
|
|
|
log.info("sensor tray code:{}",trayCode);
|
|
|
|
|
if("".equals(wmsTrayCode)){
|
|
|
|
|
//托盘码为空,无货物
|
|
|
|
|
//只要扫码枪未识别出条码,即认为盘点正确
|
|
|
|
|
if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){
|
|
|
|
|
trayCode = "";
|
|
|
|
|
trayCheck = Boolean.TRUE;
|
|
|
|
|
}else {
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.warn("sick ocr error:{}",trayCode);
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){
|
|
|
|
|
trayCode = "识别异常";
|
|
|
|
|
trayCheck = Boolean.FALSE;
|
|
|
|
|
log.warn("sick ocr error:{}",trayCode);
|
|
|
|
|
}else {
|
|
|
|
|
trayCode = trayCode.substring(trayCode.length()-4);
|
|
|
|
|
trayCheck = Long.parseLong(wmsTrayCode) == Long.parseLong(trayCode);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return new TrayCode(street,trayCode,trayCheck);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
System.out.println(Long.parseLong("0999") == Long.parseLong("999"));
|
|
|
|
|
}
|
|
|
|
|
public Boolean checkPhotography(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode,TrayCode trayCode){
|
|
|
|
|
Street street =trayCode.getStreet();
|
|
|
|
|
|
|
|
|
|
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1());
|
|
|
|
|
//拍照暂停1s再拍
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(1000l);
|
|
|
|
|
Thread.sleep(configProperties.getScanCodeMode().getCheckPhotographyScanCodeInterval());
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
cameraCapture(cameraId,false,null,path);
|
|
|
|
|
//成都蜜雪冰城 只拍照人工核对
|
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
|
CronTab.putTime(street.getId());
|
|
|
|
|
List<LightSource> lightSources = lightSourceMapper.selectList(new QueryWrapper<LightSource>().eq("street_id",street.getId()));
|
|
|
|
|
lightSources.forEach(lightSource -> {
|
|
|
|
|
HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1);
|
|
|
|
|
});
|
|
|
|
|
Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1());
|
|
|
|
|
log.info("taskId:{}", plcCmdInfo.getTaskId());
|
|
|
|
|
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1());
|
|
|
|
|
|
|
|
|
|
//重庆亚士创能盘点时用同侧相机拍摄货物顶部(E1-TOP)
|
|
|
|
|
Integer leftRightTop = plcCmdInfo.getLeftRight1() == 1 ? 2 : 1;
|
|
|
|
|
Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop);
|
|
|
|
|
String cameraCmdCode1 = cmdCode;
|
|
|
|
|
// if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){
|
|
|
|
|
// //内测
|
|
|
|
|
cameraCmdCode1 = cmdCode + "-" + "TOP";
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
log.info("1 camera ptz:"+cameraCmdCode1);
|
|
|
|
|
Long delayTime =configProperties.getCameraConfig().getRotationPhotographyInterval();
|
|
|
|
|
|
|
|
|
|
gyrateCameraByCode(cameraIdTop, cameraCmdCode1);
|
|
|
|
|
cameraCapture(cameraIdTop,true,delayTime,path);
|
|
|
|
|
|
|
|
|
|
//重庆亚士创能盘点时用对侧球机拍侧面层数(E1-SIDE)
|
|
|
|
|
String cameraCmdCode2 = cmdCode + "-" + "SIDE";
|
|
|
|
|
gyrateCameraByCode(cameraId, cameraCmdCode2);
|
|
|
|
|
log.info("2 camera ptz:"+cameraCmdCode2);
|
|
|
|
|
cameraCapture(cameraId,true,delayTime,path+".jpg");
|
|
|
|
|
OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode);
|
|
|
|
|
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn());
|
|
|
|
|
//核对异常
|
|
|
|
|
//默认未核对
|
|
|
|
|
Integer status = 0;
|
|
|
|
|
|
|
|
|
|
//托盘和货物都正确
|
|
|
|
|
if(trayCode.getTrayCheck()){
|
|
|
|
|
status = 2;
|
|
|
|
|
}
|
|
|
|
|
if(stock == null){
|
|
|
|
|
stock = new Stock(null,null,plcCmdInfo.getOrderNum(),plcCmdInfo.getLotnum(),"", null,null,wmsCode,null,null,wmsTrayCode,"",orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn(),0,null,null,path, LocalDateTime.now());
|
|
|
|
|
stockMapper.insert(stock);
|
|
|
|
|
stock = Stock.builder()
|
|
|
|
|
.checkNum(plcCmdInfo.getOrderNum())
|
|
|
|
|
.lotnum(plcCmdInfo.getLotnum())
|
|
|
|
|
.code("")
|
|
|
|
|
.wmsCode(wmsCode)
|
|
|
|
|
.wmsTrayCode(wmsTrayCode)
|
|
|
|
|
.trayCode("")
|
|
|
|
|
.streetId(orderInfo.getStreetId())
|
|
|
|
|
.direction(orderInfo.getLeftRight())
|
|
|
|
|
.side(orderInfo.getSeparation())
|
|
|
|
|
.row(orderInfo.getRow())
|
|
|
|
|
.column(orderInfo.getColumn())
|
|
|
|
|
.status(status)
|
|
|
|
|
.trayCode(trayCode.getTrayCode())
|
|
|
|
|
.checkPic(path)
|
|
|
|
|
.exportTime(LocalDateTime.now())
|
|
|
|
|
.build();stockMapper.insert(stock);
|
|
|
|
|
}else {
|
|
|
|
|
//stock.setStatus(status);
|
|
|
|
|
stock.setStatus(status);
|
|
|
|
|
stock.setLotnum(plcCmdInfo.getLotnum());
|
|
|
|
|
stock.setExportTime(LocalDateTime.now());
|
|
|
|
|
stock.setCheckPic(path);
|
|
|
|
|
stock.setCheckNum(plcCmdInfo.getOrderNum());
|
|
|
|
|
//stock.setTrayCode(trayCode);
|
|
|
|
|
stock.setTrayCode(trayCode.getTrayCode());
|
|
|
|
|
stock.setWmsTrayCode(wmsTrayCode);
|
|
|
|
|
//stock.setCode(scanCode);
|
|
|
|
|
stock.setWmsCode(wmsCode);
|
|
|
|
|
stockMapper.updateById(stock);
|
|
|
|
|
}
|
|
|
|
|
checkLog(stock);
|
|
|
|
|
// StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties,sensorGun);
|
|
|
|
|
// threadPoolExecutor.execute(stockCheckRunnable);
|
|
|
|
|
long end = System.currentTimeMillis();
|
|
|
|
|
long s = end - startTime;
|
|
|
|
|
log.info("time:{}millisecond",s);
|
|
|
|
|
if(street.getCamera2Id() != null){
|
|
|
|
|
gyrateCameraByCodeTimeLater(street.getCamera2Id(),"C5",delayTime+configProperties.getCameraConfig().getOriginInterval());
|
|
|
|
|
}
|
|
|
|
|
if(street.getCamera1Id() != null){
|
|
|
|
|
gyrateCameraByCodeTimeLater(street.getCamera1Id(),"C5",delayTime+configProperties.getCameraConfig().getOriginInterval());
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
public void checkLog(Stock stock){
|
|
|
|
|
|
|
|
|
|
CheckLog checkLog = new CheckLog();
|
|
|
|
|
checkLog.setCheckNum(stock.getCheckNum());
|
|
|
|
|
checkLog.setPic(stock.getCheckPic());
|
|
|
|
|
@ -635,36 +882,6 @@ public class PlcService {
|
|
|
|
|
stockMapper.truncate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RFIDCheck(PlcCmdInfo plcCmdInfo){
|
|
|
|
|
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
|
|
|
|
|
if(street != null){
|
|
|
|
|
RFID rfid = rfidService.getRFIDByPlc(street.getId());
|
|
|
|
|
if(rfid != null){
|
|
|
|
|
RFIDStart(rfid.getIp(),rfid.getPort(),street.getId());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RFIDStart(String ip,Integer port,Integer streetId){
|
|
|
|
|
RFIDSocket rfidSocket = new RFIDSocket(ip,port);
|
|
|
|
|
rfidSocket.startCheck();
|
|
|
|
|
rfidSocket.readData();
|
|
|
|
|
RFIDMap.put(streetId,rfidSocket);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Set<String> RFIDStop(PlcCmdInfo plcCmdInfo){
|
|
|
|
|
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
|
|
|
|
|
RFIDSocket rfidSocket = RFIDMap.get(street.getId());
|
|
|
|
|
Set<String> tags = null;
|
|
|
|
|
if(rfidSocket != null){
|
|
|
|
|
tags = rfidSocket.getTags();
|
|
|
|
|
log.info("tags:{}",tags);
|
|
|
|
|
rfidSocket.close();
|
|
|
|
|
RFIDMap.remove(street.getId());
|
|
|
|
|
}
|
|
|
|
|
return tags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ConfigProperties getConfigProperties(){
|
|
|
|
|
return configProperties;
|
|
|
|
|
}
|
|
|
|
|
|