|
|
|
|
@ -4,11 +4,14 @@ import cn.iocoder.yudao.module.camera.dal.dataobject.camera.CameraDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.cameraio.CameraIoDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.checklog.CheckLogDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.order.OrderDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.resources.URLResourcesDo;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.sensorgun.SensorGunDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.stock.StockDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.stocklog.StockLogDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.dataobject.street.StreetDO;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.entity.KescEntity;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.entity.ScanData;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.mysql.checklog.CheckLogMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.mysql.order.OrderMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.mysql.sensorgun.SensorGunMapper;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.dal.mysql.stocklog.StockLogMapper;
|
|
|
|
|
@ -20,6 +23,8 @@ import cn.iocoder.yudao.module.camera.lib.camera.TaskDelayExecutor;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.camera.CameraService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.cameraio.CameraIoService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.checklog.CheckLogService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.resources.URLResourcesService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.scan.ScanServiceFactory;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.stock.StockService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.street.StreetService;
|
|
|
|
|
import cn.iocoder.yudao.module.camera.service.threeInOneCode.ScanningGun;
|
|
|
|
|
@ -33,14 +38,18 @@ import jakarta.annotation.Resource;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
|
import java.time.Duration;
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class PLCServiceImpl implements PLCService{
|
|
|
|
|
public class PLCServiceImpl implements PLCService {
|
|
|
|
|
@Resource
|
|
|
|
|
StreetService streetService;
|
|
|
|
|
@Resource
|
|
|
|
|
@ -60,7 +69,7 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
@Resource
|
|
|
|
|
StockService stockService;
|
|
|
|
|
@Resource
|
|
|
|
|
StockLogMapper stockLogMapper ;
|
|
|
|
|
StockLogMapper stockLogMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
CheckLogService checkLogService;
|
|
|
|
|
|
|
|
|
|
@ -78,7 +87,6 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void gyrateCameraByCode(CameraDO cameraDO, String code) {
|
|
|
|
|
Integer ptzId = cameraIoService.getOne(new QueryWrapper<CameraIoDO>()
|
|
|
|
|
.eq("camera_Id", cameraDO.getId())
|
|
|
|
|
@ -88,7 +96,7 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
|
|
|
|
|
if (ptzId != null && ptzId >= 0) {
|
|
|
|
|
log.info("gyrate camera by code, code:{},cameraId:{},ptId:{}", code, cameraDO.getId(), ptzId);
|
|
|
|
|
cameraModFactory.get(cameraDO.getType()).toPtz(ptzId,cameraDO.getId());
|
|
|
|
|
cameraModFactory.get(cameraDO.getType()).toPtz(ptzId, cameraDO.getId());
|
|
|
|
|
} else {
|
|
|
|
|
log.error("ptz not found ,code:{},cameraId:{}", code, cameraDO.getId());
|
|
|
|
|
}
|
|
|
|
|
@ -170,77 +178,231 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
boolean needCapture = false;
|
|
|
|
|
String picCmd = dataInfo.getCmdName().substring(0, 2);
|
|
|
|
|
Integer direction = dataInfo.getFromDirection();
|
|
|
|
|
if ( picCmd.equals("C4") || picCmd.equals("C3")) {
|
|
|
|
|
if (picCmd.equals("C4") || picCmd.equals("C3")) {
|
|
|
|
|
needCapture = true;
|
|
|
|
|
direction = dataInfo.getToDirection();
|
|
|
|
|
}else if(picCmd.equals("C1") || picCmd.equals("C2") ) {
|
|
|
|
|
} else if (picCmd.equals("C1") || picCmd.equals("C2")) {
|
|
|
|
|
needCapture = true;
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
return;
|
|
|
|
|
} else {
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
KescEntity kescEntity = new KescEntity();
|
|
|
|
|
KescEntity kescEntity = new KescEntity();
|
|
|
|
|
kescEntity.setData(dataInfo);
|
|
|
|
|
// 判断巷道有几个相机 如果只有一个,则调用一个,如果是两个,先判断是否有对拍设置决定那个相机拍摄
|
|
|
|
|
CameraDO camera = getCameraByLeftRight(street,direction);
|
|
|
|
|
CameraDO camera = getCameraByLeftRight(street, direction);
|
|
|
|
|
// 调用预置点位
|
|
|
|
|
gyrateCameraByCode(camera,picCmd);
|
|
|
|
|
gyrateCameraByCode(camera, picCmd);
|
|
|
|
|
int time = Integer.parseInt(dictDataService.parseDictData("camera_conf", "delay_preset_time").getValue());
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(time);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
if(needCapture){
|
|
|
|
|
String pathSrc = PathUtil.createFileName(dataInfo,street,picCmd,".jpg");
|
|
|
|
|
pathSrc = cameraCapture(camera,false,pathSrc,dictDataService.getDictDataList("camera_conf"));
|
|
|
|
|
if (needCapture) {
|
|
|
|
|
String pathSrc = PathUtil.createFileName(dataInfo, street, picCmd, ".jpg");
|
|
|
|
|
pathSrc = cameraCapture(camera, false, pathSrc, dictDataService.getDictDataList("camera_conf"));
|
|
|
|
|
|
|
|
|
|
order.setPics(Strings.hasText(order.getPics())?order.getPics()+";"+pathSrc:pathSrc);
|
|
|
|
|
order.setPics(Strings.hasText(order.getPics()) ? order.getPics() + ";" + pathSrc : pathSrc);
|
|
|
|
|
orderMapper.updateById(order);
|
|
|
|
|
}
|
|
|
|
|
//转向原点位
|
|
|
|
|
gyrateCameraByCode(camera,"C5");
|
|
|
|
|
gyrateCameraByCode(camera, "C5");
|
|
|
|
|
}
|
|
|
|
|
String cameraCapture(Integer cameraId,String ptz,String path)
|
|
|
|
|
{
|
|
|
|
|
return "";
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@Resource
|
|
|
|
|
URLResourcesService urlResourcesService;
|
|
|
|
|
@Resource
|
|
|
|
|
ScanServiceFactory scanServiceFactory;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
|
|
|
|
// 设置线程最大执行时间,单位为毫秒
|
|
|
|
|
long timeout = 5000;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void check(KsecDataInfo dataInfo) {
|
|
|
|
|
|
|
|
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
|
String uuid = UUID.randomUUID().toString();
|
|
|
|
|
|
|
|
|
|
//头部拍照
|
|
|
|
|
StreetDO street = streetService.getStreetByPlcId(dataInfo.getSRMNumber());
|
|
|
|
|
//扫码枪
|
|
|
|
|
List<SensorGunDO> sensorGunDOS = sensorGunMapper.selectListByStreetId(street.getId());
|
|
|
|
|
String code = "";
|
|
|
|
|
for (SensorGunDO sensorGunDO :sensorGunDOS){
|
|
|
|
|
if (sensorGunDO.getDirection() == dataInfo.getFromDirection()){
|
|
|
|
|
|
|
|
|
|
int time = Integer.parseInt(dictDataService.parseDictData("sensorFun_conf", "check_sensorFun_scan_time").getValue());
|
|
|
|
|
code = ScanningGun.readOCR(sensorGunDO.getIp(),sensorGunDO.getPort(),"start",time);
|
|
|
|
|
}
|
|
|
|
|
// 获取记录
|
|
|
|
|
StockDO stock = stockService.getOne(
|
|
|
|
|
new QueryWrapper<StockDO>()
|
|
|
|
|
.eq("direction", dataInfo.getFromDirection())
|
|
|
|
|
.eq("side", dataInfo.getFromSide())
|
|
|
|
|
.eq("`row`", dataInfo.getFromRow())
|
|
|
|
|
.eq("`column`", dataInfo.getFromColumn())
|
|
|
|
|
.eq("street_id", street.getId())
|
|
|
|
|
.last("limit 1")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (stock == null) {
|
|
|
|
|
stock = StockDO.builder()
|
|
|
|
|
.checkNum(dataInfo.getTaskId())
|
|
|
|
|
.lotnum(dataInfo.getLotnum())
|
|
|
|
|
.streetId(street.getId())
|
|
|
|
|
.direction(dataInfo.getFromDirection())
|
|
|
|
|
.side(dataInfo.getFromSide())
|
|
|
|
|
.row(dataInfo.getFromRow())
|
|
|
|
|
.status("0")
|
|
|
|
|
.column(dataInfo.getFromColumn())
|
|
|
|
|
.exportTime(LocalDateTime.now()).build();
|
|
|
|
|
} else {
|
|
|
|
|
stock.setLotnum(dataInfo.getLotnum());
|
|
|
|
|
stock.setExportTime(LocalDateTime.now());
|
|
|
|
|
stock.setCode("");
|
|
|
|
|
stock.setWmsCode("");
|
|
|
|
|
stock.setTrayCode("");
|
|
|
|
|
stock.setWmsCategory("");
|
|
|
|
|
stock.setCount("0");
|
|
|
|
|
stock.setWmsCount("0");
|
|
|
|
|
stock.setCategory("");
|
|
|
|
|
stock.setWmsTrayCode("");
|
|
|
|
|
stock.setStatus("0");
|
|
|
|
|
stock.setCheckNum(dataInfo.getTaskId());
|
|
|
|
|
}
|
|
|
|
|
stock.setCheckPic(uuid);
|
|
|
|
|
|
|
|
|
|
//拍照记录
|
|
|
|
|
|
|
|
|
|
String pathSrc = PathUtil.createFileName(dataInfo, street, "E1", ".jpg");
|
|
|
|
|
CameraDO camera = cameraService.getById(dataInfo.getFromDirection() == 1 ? street.getCamera1Id() : street.getCamera2Id());
|
|
|
|
|
pathSrc = cameraCapture(camera, false, pathSrc, dictDataService.getDictDataList("camera_conf"));
|
|
|
|
|
urlResourcesService.save(URLResourcesDo.builder().url(pathSrc).uuid(uuid).type("1").little("球机拍照").build());
|
|
|
|
|
|
|
|
|
|
// 先记录正常未盘点情况
|
|
|
|
|
stockService.saveOrUpdate(stock);
|
|
|
|
|
//根据扫码配置 获取扫码结果
|
|
|
|
|
Map<String, DictDataDO> dictDataList = dictDataService.getDictDataList("scan_conf");
|
|
|
|
|
// 默认正确
|
|
|
|
|
AtomicReference<String> status = new AtomicReference<>("2");
|
|
|
|
|
StockDO finalStock = stock;
|
|
|
|
|
List<CompletableFuture<ScanData>> futures = dictDataList.values().stream()
|
|
|
|
|
.filter(dictDataDO -> !dictDataDO.getValue().equals("0"))
|
|
|
|
|
.map(dictDataDO -> CompletableFuture.supplyAsync(() ->
|
|
|
|
|
// 调用扫码服务,包含图片保存等不进行修改finalStock
|
|
|
|
|
scanServiceFactory.scan(dictDataDO.getValue(), street, dataInfo, finalStock)
|
|
|
|
|
).thenApply(result -> {
|
|
|
|
|
// 任务完成后,基于返回的结果进行操作
|
|
|
|
|
// 如果有扫码结果,并且扫码结果为假,则修改状态为错误
|
|
|
|
|
// 获取字段对象
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
String wmsType = "wms" + capitalize(dictDataDO.getLabel());
|
|
|
|
|
Field stockField = finalStock.getClass().getDeclaredField(dictDataDO.getLabel());
|
|
|
|
|
Field wmsField = KsecDataInfo.class.getDeclaredField(dictDataDO.getLabel());
|
|
|
|
|
|
|
|
|
|
Field stockWmsField = finalStock.getClass().getDeclaredField(wmsType);
|
|
|
|
|
wmsField.setAccessible(true);
|
|
|
|
|
stockField.setAccessible(true);
|
|
|
|
|
stockWmsField.setAccessible(true);
|
|
|
|
|
String wmsCode = (String) wmsField.get(dataInfo);
|
|
|
|
|
|
|
|
|
|
if (!result.getCode().equals(wmsCode)) {
|
|
|
|
|
status.set("1");
|
|
|
|
|
}
|
|
|
|
|
stockField.set(finalStock, result.getCode());
|
|
|
|
|
stockWmsField.set(finalStock, wmsCode);
|
|
|
|
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
status.set("1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
).orTimeout(10, TimeUnit.SECONDS)
|
|
|
|
|
.exceptionally(ex -> {
|
|
|
|
|
if (ex instanceof TimeoutException) {
|
|
|
|
|
status.set("1");
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
})
|
|
|
|
|
)
|
|
|
|
|
.toList();
|
|
|
|
|
|
|
|
|
|
// 等待所有异步任务完成
|
|
|
|
|
CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
|
|
|
|
|
try {
|
|
|
|
|
allOf.get(); // 阻塞直到所有任务完成
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
} catch (ExecutionException e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
//记录
|
|
|
|
|
stockSave(dataInfo,street,code);
|
|
|
|
|
|
|
|
|
|
// 打印修改后的对象
|
|
|
|
|
|
|
|
|
|
finalStock.setStatus(status.get());
|
|
|
|
|
|
|
|
|
|
// ScanStatus scanStatus = scanServiceFactory.action(isCheck,code, dataInfo.getCode(), trayCode, dataInfo.getTrayCode());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
stockService.saveOrUpdate(finalStock);
|
|
|
|
|
checkLog(finalStock);
|
|
|
|
|
// 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);
|
|
|
|
|
// //ocr识别
|
|
|
|
|
// AlgorithmDelayTask algorithmDelayTask = new AlgorithmDelayTask(dataInfo.getFromDirection(),street.getPlcId()
|
|
|
|
|
// ,dataInfo.getTaskId(),10000,code,"E1",dataInfo.getFromRow(),dataInfo.getFromColumn());
|
|
|
|
|
// getPhotoDelayExecutor.communicationFactory(algorithmDelayTask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void stockSave(KsecDataInfo ksecDataInfo,StreetDO streetDO,String trayCode) {
|
|
|
|
|
public static String capitalize(String str) {
|
|
|
|
|
if (str == null || str.isEmpty()) {
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
StringBuilder sb = new StringBuilder(str.length());
|
|
|
|
|
sb.append(Character.toUpperCase(str.charAt(0)));
|
|
|
|
|
sb.append(str.substring(1));
|
|
|
|
|
return sb.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
CheckLogMapper checkLogMapper;
|
|
|
|
|
|
|
|
|
|
public void checkLog(StockDO stock) {
|
|
|
|
|
CheckLogDO checkLog = new CheckLogDO();
|
|
|
|
|
checkLog.setCheckNum(stock.getCheckNum());
|
|
|
|
|
checkLog.setPic(stock.getCheckPic());
|
|
|
|
|
checkLog.setStreetId(stock.getStreetId());
|
|
|
|
|
checkLog.setDirection(stock.getDirection());
|
|
|
|
|
checkLog.setSide(stock.getSide());
|
|
|
|
|
checkLog.setCode(stock.getCode());
|
|
|
|
|
checkLog.setWmsCode(stock.getWmsCode());
|
|
|
|
|
checkLog.setStatus(Integer.valueOf(stock.getStatus()));
|
|
|
|
|
checkLog.setRow(stock.getRow());
|
|
|
|
|
checkLog.setColumn(stock.getColumn());
|
|
|
|
|
checkLog.setTrayCode(stock.getTrayCode());
|
|
|
|
|
checkLog.setWmsTrayCode(stock.getWmsTrayCode());
|
|
|
|
|
checkLog.setCount(stock.getCount());
|
|
|
|
|
checkLog.setWmsCount(stock.getWmsCount());
|
|
|
|
|
checkLog.setWmsCategory(stock.getWmsCategory());
|
|
|
|
|
checkLog.setCategory(stock.getCategory());
|
|
|
|
|
checkLog.setWmsTrayCode(stock.getWmsTrayCode());
|
|
|
|
|
checkLog.setLotnum(stock.getLotnum());
|
|
|
|
|
checkLog.setCreateTime(LocalDateTime.now());
|
|
|
|
|
checkLogMapper.insert(checkLog);
|
|
|
|
|
log.info("checkLogMapper insert");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void stockSave(KsecDataInfo ksecDataInfo, StreetDO streetDO, String trayCode) {
|
|
|
|
|
StockDO stockDO = stockService.getOne(new QueryWrapper<StockDO>()
|
|
|
|
|
.eq("street_id",streetDO.getId())
|
|
|
|
|
.eq("direction",ksecDataInfo.getFromDirection())
|
|
|
|
|
.eq("side",ksecDataInfo.getFromSide())
|
|
|
|
|
.eq("`row`",ksecDataInfo.getFromRow())
|
|
|
|
|
.eq("`column`",ksecDataInfo.getFromColumn()));
|
|
|
|
|
.eq("street_id", streetDO.getId())
|
|
|
|
|
.eq("direction", ksecDataInfo.getFromDirection())
|
|
|
|
|
.eq("side", ksecDataInfo.getFromSide())
|
|
|
|
|
.eq("`row`", ksecDataInfo.getFromRow())
|
|
|
|
|
.eq("`column`", ksecDataInfo.getFromColumn()));
|
|
|
|
|
|
|
|
|
|
String cameraType = ksecDataInfo.getSRMNumber()+"-"+ksecDataInfo.getCmdName()+"-"+ksecDataInfo.getToDirection()+"-"+"up";
|
|
|
|
|
String cameraType = ksecDataInfo.getSRMNumber() + "-" + ksecDataInfo.getCmdName() + "-" + ksecDataInfo.getToDirection() + "-" + "up";
|
|
|
|
|
if (stockDO == null) {
|
|
|
|
|
|
|
|
|
|
stockDO = StockDO.builder()
|
|
|
|
|
@ -254,14 +416,14 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
.row(ksecDataInfo.getFromRow())
|
|
|
|
|
.column(ksecDataInfo.getFromColumn())
|
|
|
|
|
.status("0")
|
|
|
|
|
.checkPic("http://"+streetDO.getPlcIp()+":9007/pic/"+ksecDataInfo.getTaskId()+"_"+cameraType+".JPEG;")
|
|
|
|
|
.checkPic("http://" + streetDO.getPlcIp() + ":9007/pic/" + ksecDataInfo.getTaskId() + "_" + cameraType + ".JPEG;")
|
|
|
|
|
.exportTime(LocalDateTime.now()).build();
|
|
|
|
|
stockService.save(stockDO);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
stockDO.setStatus("0");
|
|
|
|
|
stockDO.setLotnum(ksecDataInfo.getLotnum());
|
|
|
|
|
stockDO.setExportTime(LocalDateTime.now());
|
|
|
|
|
stockDO.setCheckPic(ksecDataInfo.getTaskId()+"_"+cameraType);
|
|
|
|
|
stockDO.setCheckPic(ksecDataInfo.getTaskId() + "_" + cameraType);
|
|
|
|
|
stockDO.setCheckNum(ksecDataInfo.getTaskId());
|
|
|
|
|
stockDO.setCode(trayCode);
|
|
|
|
|
stockDO.setWmsCode(trayCode);
|
|
|
|
|
@ -289,29 +451,30 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
checkLogService.save(checkLog);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void stockSave(AlgorithmDelayTask algorithmDelayTask) {
|
|
|
|
|
StockDO stockDO = stockService.getOne(new QueryWrapper<StockDO>().eq("task_Wms_Id", algorithmDelayTask.getTaskId()));
|
|
|
|
|
if (stockDO != null){
|
|
|
|
|
if (stockDO != null) {
|
|
|
|
|
stockDO.setStorageCode(algorithmDelayTask.getStorageCode());
|
|
|
|
|
stockDO.setTrayCode(algorithmDelayTask.getTrayCode());
|
|
|
|
|
stockService.updateById(stockDO);
|
|
|
|
|
}
|
|
|
|
|
CheckLogDO checkLogDO = checkLogService.getOne(new QueryWrapper<CheckLogDO>().eq("task_Id", algorithmDelayTask.getTaskId()));
|
|
|
|
|
if (checkLogDO != null){
|
|
|
|
|
checkLogDO.setStorageCode(algorithmDelayTask.getStorageCode());
|
|
|
|
|
if (checkLogDO != null) {
|
|
|
|
|
|
|
|
|
|
checkLogDO.setTrayCode(algorithmDelayTask.getTrayCode());
|
|
|
|
|
checkLogService.updateById(checkLogDO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* 开始工单 robotic plcId是plcId,昆船的plcId是来自包体,即srmNumber
|
|
|
|
|
*
|
|
|
|
|
* @param kescEntity
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
public void orderStart(KsecDataInfo kescEntity) {
|
|
|
|
|
StreetDO street = streetService.getStreetByPlcId(kescEntity.getSRMNumber());
|
|
|
|
|
@ -361,33 +524,33 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
update.setToColumn(ksecDataInfo.getToColumn());
|
|
|
|
|
update.setToRow(ksecDataInfo.getToRow());
|
|
|
|
|
LocalDateTime endDownLoadTime = endTime.plusSeconds(10);
|
|
|
|
|
Duration duration = Duration.between(order.getCreateTime(),endDownLoadTime);
|
|
|
|
|
Duration duration = Duration.between(order.getCreateTime(), endDownLoadTime);
|
|
|
|
|
|
|
|
|
|
if(duration.toMinutes() > 50){
|
|
|
|
|
if (duration.toMinutes() > 50) {
|
|
|
|
|
endDownLoadTime = order.getCreateTime().plusMinutes(50);
|
|
|
|
|
}
|
|
|
|
|
if (street.getCamera1Id() != null) {
|
|
|
|
|
|
|
|
|
|
String pathSrc = PathUtil.createFileName(ksecDataInfo,street,"B2-1",".jpg");
|
|
|
|
|
String path = cameraVideo(street.getCamera1Id(),pathSrc,order.getCreateTime(),endDownLoadTime,dictDataList);
|
|
|
|
|
String pathSrc = PathUtil.createFileName(ksecDataInfo, street, "B2-1", ".mp4");
|
|
|
|
|
String path = cameraVideo(street.getCamera1Id(), pathSrc, order.getCreateTime(), endDownLoadTime, dictDataList);
|
|
|
|
|
update.setVideoPath1(path);
|
|
|
|
|
}
|
|
|
|
|
if (street.getCamera2Id() != null) {
|
|
|
|
|
String pathSrc = PathUtil.createFileName(ksecDataInfo,street,"B2-2",".jpg");
|
|
|
|
|
String path = cameraVideo(street.getCamera2Id(),pathSrc,order.getCreateTime(),endDownLoadTime,dictDataList);
|
|
|
|
|
String pathSrc = PathUtil.createFileName(ksecDataInfo, street, "B2-2", ".mp4");
|
|
|
|
|
String path = cameraVideo(street.getCamera2Id(), pathSrc, order.getCreateTime(), endDownLoadTime, dictDataList);
|
|
|
|
|
update.setVideoPath2(path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
orderMapper.updateById(update);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**
|
|
|
|
|
* 工单结束信息
|
|
|
|
|
* 判断有没有告警,有告警的不做处理
|
|
|
|
|
* 没有告警,且存在未结束工单,修改保存工单信息
|
|
|
|
|
*
|
|
|
|
|
* @param */
|
|
|
|
|
|
|
|
|
|
* @param
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void orderStop(KescEntity kescEntity) {
|
|
|
|
|
@ -396,7 +559,7 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
if (street == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
OrderDO order = orderMapper.selectOne(new QueryWrapper<OrderDO>().eq("task_id",kescEntity.getData().getTaskId()));
|
|
|
|
|
OrderDO order = orderMapper.selectOne(new QueryWrapper<OrderDO>().eq("task_id", kescEntity.getData().getTaskId()));
|
|
|
|
|
if (order == null) {
|
|
|
|
|
log.error("订单结束信号,订单不存在,orderNum:{}", kescEntity.getData().getTaskId());
|
|
|
|
|
return;
|
|
|
|
|
@ -410,45 +573,49 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
order.setToRow(kescEntity.getData().getToRow());
|
|
|
|
|
|
|
|
|
|
//拍照相机id获取
|
|
|
|
|
String cameraType = kescEntity.getData().getSRMNumber()+"-"+kescEntity.getData().getToDirection()+"-"+"up";
|
|
|
|
|
String cameraType = kescEntity.getData().getSRMNumber() + "-" + kescEntity.getData().getToDirection() + "-" + "up";
|
|
|
|
|
List<SensorGunDO> sensorGunDOS = sensorGunMapper.selectListByStreetId(street.getId());
|
|
|
|
|
//扫码枪校验
|
|
|
|
|
String sensorGunCode = "";
|
|
|
|
|
for (SensorGunDO sensorGunDO : sensorGunDOS){
|
|
|
|
|
if (sensorGunDO.getDirection()==kescEntity.getData().getFromDirection()) {
|
|
|
|
|
for (SensorGunDO sensorGunDO : sensorGunDOS) {
|
|
|
|
|
if (sensorGunDO.getDirection() == kescEntity.getData().getFromDirection()) {
|
|
|
|
|
int time = Integer.parseInt(dictDataService.parseDictData("sensorFun_conf", "order_sensorFun_scan_time").getValue());
|
|
|
|
|
sensorGunCode = ScanningGun.readOCR(sensorGunDO.getIp(), sensorGunDO.getPort(), "start",time);
|
|
|
|
|
sensorGunCode = ScanningGun.readOCR(sensorGunDO.getIp(), sensorGunDO.getPort(), "start", time);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//拍照i
|
|
|
|
|
//CheckIntellBlinkChanel.pictures(street.getPlcId(), kescEntity.getData().getTaskId(),cameraType,dictDataService.parseDictData("camera_position", cameraType).getValue());
|
|
|
|
|
|
|
|
|
|
AlgorithmDelayTask algorithmDelayTask = new AlgorithmDelayTask(kescEntity.getData().getToDirection(),street.getPlcId()
|
|
|
|
|
,kescEntity.getData().getTaskId(),10000,sensorGunCode,"C3",kescEntity.getData().getToRow(),kescEntity.getData().getToColumn());
|
|
|
|
|
AlgorithmDelayTask algorithmDelayTask = new AlgorithmDelayTask(kescEntity.getData().getToDirection(), street.getPlcId()
|
|
|
|
|
, kescEntity.getData().getTaskId(), 10000, sensorGunCode, "C3", kescEntity.getData().getToRow(), kescEntity.getData().getToColumn());
|
|
|
|
|
|
|
|
|
|
String picPath = algorithmDelayTask.getSRMNumber()+"-"+algorithmDelayTask.getCmdName()+"-"+algorithmDelayTask.getDirection()+"-"+"up";
|
|
|
|
|
String picPath = algorithmDelayTask.getSRMNumber() + "-" + algorithmDelayTask.getCmdName() + "-" + algorithmDelayTask.getDirection() + "-" + "up";
|
|
|
|
|
KsecDataInfo ksecDataInfo = KsecDataInfo.toFrom(kescEntity.getData());
|
|
|
|
|
stockSave(ksecDataInfo,street,sensorGunCode);
|
|
|
|
|
stockSave(ksecDataInfo, street, sensorGunCode);
|
|
|
|
|
getPhotoDelayExecutor.communicationFactory(algorithmDelayTask);
|
|
|
|
|
order.setPics(order.getPics()==null?"":order.getPics()+"http://"+street.getPlcIp()+":9007/pic/"+kescEntity.getData().getTaskId()+"_"+picPath+".JPEG;");
|
|
|
|
|
order.setPics(order.getPics() == null ? "" : order.getPics() + "http://" + street.getPlcIp() + ":9007/pic/" + kescEntity.getData().getTaskId() + "_" + picPath + ".JPEG;");
|
|
|
|
|
orderMapper.updateById(order);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
GetPhotoDelayExecutor getPhotoDelayExecutor;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
SensorGunMapper sensorGunMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
TaskDelayExecutor taskDelayExecutor;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public String cameraVideo(Integer cameraId,String path, LocalDateTime startTime, LocalDateTime endTime,Map<String, DictDataDO> map) {
|
|
|
|
|
public String cameraVideo(Integer cameraId, String path, LocalDateTime startTime, LocalDateTime endTime, Map<String, DictDataDO> map) {
|
|
|
|
|
|
|
|
|
|
Thread thread = new Thread(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
String realPath = map.get("mp4_path").getValue() + path;
|
|
|
|
|
TaskDelayExecutor.addMp4DelayTask(cameraId,realPath,startTime,endTime,Long.valueOf(map.get("delay_mp4_time").getValue()));
|
|
|
|
|
TaskDelayExecutor.addMp4DelayTask(cameraId, realPath, startTime, endTime, Long.valueOf(map.get("delay_mp4_time").getValue()));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
thread.start();
|
|
|
|
|
@ -506,37 +673,38 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
//
|
|
|
|
|
// gyrateCameraByCode(cameraId,"C5");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* capture picture by camera
|
|
|
|
|
*
|
|
|
|
|
* @Return pic address
|
|
|
|
|
*/
|
|
|
|
|
public String cameraCapture(CameraDO camera, Boolean delay, String path, Map<String,DictDataDO> map) {
|
|
|
|
|
public String cameraCapture(CameraDO camera, Boolean delay, String path, Map<String, DictDataDO> map) {
|
|
|
|
|
//String path = PathUtil.createFileName("jpg",cameraId);
|
|
|
|
|
String realPath = map.get("media_path").getValue() + path;
|
|
|
|
|
if(delay){
|
|
|
|
|
TaskDelayExecutor.addPicDelayTask(camera.getId(),realPath,Long.valueOf(map.get("delay_capture_time").getValue()));
|
|
|
|
|
}else {
|
|
|
|
|
if (delay) {
|
|
|
|
|
TaskDelayExecutor.addPicDelayTask(camera.getId(), realPath, Long.valueOf(map.get("delay_capture_time").getValue()));
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
cameraModFactory.get(camera.getType()).pic(camera.getId(),0,realPath);
|
|
|
|
|
log.info("cameraID: {} capture photo :{}", camera.getId(), path);
|
|
|
|
|
cameraModFactory.get(camera.getType()).pic(camera.getId(), 0, realPath);
|
|
|
|
|
log.info("cameraID: {} capture photo :{}", camera.getId(), realPath);
|
|
|
|
|
}
|
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String getPresetString(String code,String picCmd,KsecDataInfo ksecDataInfo){
|
|
|
|
|
String getPresetString(String code, String picCmd, KsecDataInfo ksecDataInfo) {
|
|
|
|
|
|
|
|
|
|
Integer side=1;
|
|
|
|
|
Integer leftRight =1;
|
|
|
|
|
if (picCmd.equals("C2") || picCmd.equals("C1") ) {
|
|
|
|
|
Integer side = 1;
|
|
|
|
|
Integer leftRight = 1;
|
|
|
|
|
if (picCmd.equals("C2") || picCmd.equals("C1")) {
|
|
|
|
|
side = ksecDataInfo.getFromSide();
|
|
|
|
|
leftRight = ksecDataInfo.getFromDirection();
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
side = ksecDataInfo.getToSide();
|
|
|
|
|
leftRight = ksecDataInfo.getToDirection();
|
|
|
|
|
}
|
|
|
|
|
return code + (leftRight == 1 ? "-L-" : "-R-")+ (side == 1 ? "" : "-OUT") ;
|
|
|
|
|
return code + (leftRight == 1 ? "-L-" : "-R-") + (side == 1 ? "" : "-OUT");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -545,12 +713,12 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
* @param orderInfo
|
|
|
|
|
* @param path
|
|
|
|
|
*/
|
|
|
|
|
public void captureUpdateOrderAndStock(KsecDataInfo orderInfo, String path,Integer streetId) {
|
|
|
|
|
public void captureUpdateOrderAndStock(KsecDataInfo orderInfo, String path, Integer streetId) {
|
|
|
|
|
synchronized (orderInfo.getTaskId().intern()) {
|
|
|
|
|
OrderDO order = orderMapper.selectOne(new LambdaQueryWrapper<OrderDO>().eq(OrderDO::getTaskId, orderInfo.getTaskId()));
|
|
|
|
|
if (order != null) {
|
|
|
|
|
//记录送货完成
|
|
|
|
|
if(orderInfo.getCode().startsWith("C4")){
|
|
|
|
|
if (orderInfo.getCode().startsWith("C4")) {
|
|
|
|
|
StockLogDO stockLog = new StockLogDO();
|
|
|
|
|
stockLog.setStreetId(streetId);
|
|
|
|
|
stockLog.setDirection(orderInfo.getToDirection());
|
|
|
|
|
@ -558,7 +726,7 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
stockLog.setRow(orderInfo.getToRow());
|
|
|
|
|
stockLog.setColumn(orderInfo.getToColumn());
|
|
|
|
|
stockLog.setPic(path);
|
|
|
|
|
String type = orderInfo.getCode().substring(1,2);
|
|
|
|
|
String type = orderInfo.getCode().substring(1, 2);
|
|
|
|
|
stockLog.setType(Integer.valueOf(type));
|
|
|
|
|
stockLog.setOrderNum(orderInfo.getTaskId());
|
|
|
|
|
stockLog.setCreateTime(LocalDateTime.now());
|
|
|
|
|
@ -581,37 +749,34 @@ public class PLCServiceImpl implements PLCService{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public CameraDO getCameraByLeftRight(StreetDO street,Integer leftRight) {
|
|
|
|
|
public CameraDO getCameraByLeftRight(StreetDO street, Integer leftRight) {
|
|
|
|
|
Integer cameraId = null;
|
|
|
|
|
// 如果只有一个相机
|
|
|
|
|
if(street.getCamera1Id() == null || street.getCamera2Id() == null){
|
|
|
|
|
cameraId = street.getCamera1Id() != null? street.getCamera1Id(): street.getCamera2Id();
|
|
|
|
|
if (street.getCamera1Id() == null || street.getCamera2Id() == null) {
|
|
|
|
|
cameraId = street.getCamera1Id() != null ? street.getCamera1Id() : street.getCamera2Id();
|
|
|
|
|
}
|
|
|
|
|
// 判断对拍
|
|
|
|
|
|
|
|
|
|
//获取配置信息
|
|
|
|
|
//码位为库 货架号 层 列
|
|
|
|
|
Boolean storageCode = Boolean.valueOf(dictDataService.parseDictData("camera_conf", "isOpposite").getValue());
|
|
|
|
|
if (storageCode){
|
|
|
|
|
if(leftRight == 1){
|
|
|
|
|
cameraId = street.getCamera1Id();
|
|
|
|
|
}else {
|
|
|
|
|
if (storageCode) {
|
|
|
|
|
if (leftRight == 1) {
|
|
|
|
|
cameraId = street.getCamera1Id();
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
cameraId = street.getCamera2Id();
|
|
|
|
|
cameraId = street.getCamera2Id();
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
if(leftRight == 2){
|
|
|
|
|
cameraId = street.getCamera1Id();
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
if (leftRight == 2) {
|
|
|
|
|
cameraId = street.getCamera1Id();
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
cameraId = street.getCamera2Id();
|
|
|
|
|
cameraId = street.getCamera2Id();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CameraDO camera = cameraService.getById(cameraId);
|
|
|
|
|
return camera;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
System.out.println(Boolean.valueOf("t"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|