扫码枪接入

merge-requests/5/merge
qiushui 4 years ago
parent 133aff2006
commit 3bdf944396

@ -37,7 +37,8 @@ public class JNIDemo {
public static void main(String[] args) {
JNIDemo barCodeScan = new JNIDemo();
String code = barCodeScan.detectBestBarCode("d:\\data\\media\\2022\\01\\12\\10\\camera25\\1324-hfhaegaaag.jpg");
//String code = barCodeScan.detectBestBarCode("d:\\data\\media\\2022\\01\\12\\10\\camera25\\1324-hfhaegaaag.jpg");
String code = barCodeScan.detectBestBarCode("d:\\data\\media\\2022\\03\\24\\11\\camera37\\0018-aieeecdbab.jpg");
System.out.println(code);
}
}

@ -35,6 +35,8 @@ public class ConfigProperties {
private Sensor sensor;
private ScanCodeMode scanCodeMode;
@Data
public static class CameraConfig{
@ -82,4 +84,10 @@ public class ConfigProperties {
public static class Sensor{
private Integer type;
}
@Data
public static class ScanCodeMode{
private Integer tray;
private Integer goods;
}
}

@ -28,10 +28,18 @@ public class CheckLog {
private String code;
private String wmsCode;
private String category;
private Integer count;
@ApiModelProperty("wms托盘码")
private String wmsTrayCode;
@ApiModelProperty("扫描出的托盘码")
private String trayCode;
private Integer status;
private String checkNum;

@ -37,6 +37,12 @@ public class Stock {
private Integer wmsCount;
@ApiModelProperty("wms托盘码")
private String wmsTrayCode;
@ApiModelProperty("扫描出的托盘码")
private String trayCode;
@ApiModelProperty("货架号")
@TableField(value = "`shelve_id`")
private String shelveId;

@ -8,6 +8,7 @@ import com.zhehekeji.web.entity.*;
import com.zhehekeji.web.lib.*;
import com.zhehekeji.web.mapper.*;
import com.zhehekeji.web.pojo.OrderVO;
import com.zhehekeji.web.service.sick.SickSocket;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -51,6 +52,8 @@ public class PlcService {
private CameraService cameraService;
private CameraControlModule cameraControlModule;
@Resource
private SensorService sensorService;
private static JNIDemo barCodeScan = new JNIDemo();
@ -439,21 +442,21 @@ public class PlcService {
public void kescTest6(PlcCmdInfo plcCmdInfo,String code,String wmsCode){
long startTime = System.currentTimeMillis();
log.info("test startTime",startTime);
check(plcCmdInfo,"C2-L",wmsCode);
plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
check(plcCmdInfo,"C3-L",wmsCode);
plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
check(plcCmdInfo,"C4-L",wmsCode);
plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
check(plcCmdInfo,"C5",wmsCode);
plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
check(plcCmdInfo,"E1",wmsCode);
long endTime = System.currentTimeMillis();
log.info("test endTime,time:{}millisecond",endTime,(endTime - startTime));
}
public void check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode){
// log.info("test startTime",startTime);
// check(plcCmdInfo,"C2-L",wmsCode);
// plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
// check(plcCmdInfo,"C3-L",wmsCode);
// plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
// check(plcCmdInfo,"C4-L",wmsCode);
// plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
// check(plcCmdInfo,"C5",wmsCode);
// plcCmdInfo.setColumn1(plcCmdInfo.getColumn1()+1);
// check(plcCmdInfo,"E1",wmsCode);
// long endTime = System.currentTimeMillis();
//log.info("test endTime:{},time:{}millisecond",endTime,(endTime - startTime));
}
public void check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode){
long startTime = System.currentTimeMillis();
Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId());
@ -468,15 +471,50 @@ public class PlcService {
} catch (InterruptedException e) {
e.printStackTrace();
}
String scanCode = barCodeScan.detectBestBarCode(configProperties.getSavePath().getMediaPath()+path);
String scanCode = null;
String trayCode = null;
Boolean codeCheck = Boolean.TRUE;
//货物使用球机扫码
if(configProperties.getScanCodeMode().getGoods() == 1){
scanCode = barCodeScan.detectBestBarCode(configProperties.getSavePath().getMediaPath()+path);
if(StringUtils.isEmpty(scanCode) || scanCode.equals("Empty")){
scanCode = "识别异常";
codeCheck = Boolean.FALSE;
log.warn("detectBestBarCode:{}",scanCode);
}else {
codeCheck = wmsCode.equals(scanCode);
}
}
Boolean trayCheck = Boolean.TRUE;
if(configProperties.getScanCodeMode().getTray() == 2){
//托盘使用sick扫码枪
if(configProperties.getSensor().getType() == 1){
//todo 找到扫码枪地址
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 {
trayCode = SickSocket.readOCR(sensorGun.getIp(),sensorGun.getPort());
if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){
trayCode = "识别异常";
trayCheck = Boolean.FALSE;
log.warn("sick ocr error:{}",trayCode);
}else {
trayCheck = wmsTrayCode.equals(trayCode);
}
}
}
}
log.info("code:{}",scanCode);
//核对正确
Integer status = 2;
if(!wmsCode.equals(scanCode)){
//托盘和货物都正确
if(!trayCheck || !codeCheck){
status = 1;
}
if(stock == null){
@ -488,6 +526,8 @@ public class PlcService {
stock.setColumn(orderInfo.getColumn());
stock.setExportTime(LocalDateTime.now());
stock.setCheckPic(path);
stock.setTrayCode(trayCode);
stock.setWmsTrayCode(wmsTrayCode);
stock.setCode(scanCode);
stock.setWmsCode(wmsCode);
stockMapper.insert(stock);
@ -496,6 +536,8 @@ public class PlcService {
stock.setExportTime(LocalDateTime.now());
stock.setCheckPic(path);
stock.setCheckNum(plcCmdInfo.getOrderNum());
stock.setTrayCode(trayCode);
stock.setWmsTrayCode(wmsTrayCode);
stock.setCode(scanCode);
stock.setWmsCode(wmsCode);
stockMapper.updateById(stock);
@ -516,8 +558,13 @@ public class PlcService {
checkLog.setPic(stock.getCheckPic());
checkLog.setShelveId(stock.getShelveId());
checkLog.setCode(stock.getCode());
checkLog.setWmsCode(stock.getWmsCode());
checkLog.setStatus(stock.getStatus());
checkLog.setRow(stock.getRow());
checkLog.setColumn(stock.getColumn());
checkLog.setCreateTime(LocalDateTime.now());
checkLog.setTrayCode(stock.getTrayCode());
checkLog.setWmsTrayCode(stock.getWmsTrayCode());
checkLogMapper.insert(checkLog);
}

@ -0,0 +1,25 @@
package com.zhehekeji.web.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhehekeji.web.entity.SensorGun;
import com.zhehekeji.web.mapper.SensorGunMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class SensorService {
@Resource
private SensorGunMapper sensorGunMapper;
public SensorGun getSensorByPlc(Integer streetId,Integer direction){
List<SensorGun> list = sensorGunMapper.selectList(new QueryWrapper<SensorGun>().eq("street_id",streetId).eq("direction",direction));
if(list.size() > 0){
return list.get(0);
}
return null;
}
}

@ -36,4 +36,6 @@ public class KsecDataInfo {
private String warnCode;
private Integer ackStatus;
private String trayCode;
}

@ -104,7 +104,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder {
if(ksecInfo.getData().getCmdName().equals("test")){
plcService.kescTest6(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode());
}else {
plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode());
plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode());
}
//找到该货位的最后一张照片与现在的照片比照
//plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0);

@ -27,7 +27,7 @@ public class KsecNettyClient {
/**
*
*/
private static int RECONNECT_NUM = Integer.MAX_VALUE;
private static int RECONNECT_NUM = 10;
private static Channel channel;

@ -29,6 +29,9 @@ public class SickSocket {
writeCmd(os);
is = socket.getInputStream();
code = read(is);
if(code!= null){
code = code.replace("\\n","");
}
} catch (IOException e) {
log.error("sick time out,ip:{},info:{}",ip,e);
}finally {

@ -62,3 +62,10 @@ lightSource:
# ------------type 1: sick
sensor:
type: 1
# -----tray 托盘
# -----goods 货物
# 扫码模式 1球机扫码 2扫码枪 0:不用扫码
scanCodeMode:
tray: 2
goods: 1

@ -14,7 +14,7 @@ spring:
testWhileIdle: false
timeBetweenEvictionRunsMillis: 60000
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://115.236.65.98:12004/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
url: jdbc:mysql://127.0.0.1:3306/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: root
validationQuery: SELECT 1 FROM DUAL
# --------本服务端口号
@ -35,7 +35,7 @@ cameraConfig:
#相机抓图延迟 毫秒
delayCaptureTime: 2000
#OCR识别延迟 毫秒
delayScanTime: 2000
delayScanTime: 3000
# ------------
# -----图片 mp4下载地址
savePath:
@ -48,8 +48,8 @@ ksec:
port: 3000
# ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig:
videoStyleRow: 2
videoStyleColumn: 2
videoStyleRow: 1
videoStyleColumn: 1
# ------------光源---
# -------------type 0:没有光源 1JYDam
# -----------1:JYDam 配置num和index
@ -60,3 +60,9 @@ lightSource:
# ------------type 1: sick
sensor:
type: 1
# -----tray 托盘
# -----goods 货物
# 扫码模式 1球机扫码 2扫码枪
scanCodeMode:
tray: 2
goods: 1

@ -60,3 +60,9 @@ lightSource:
# ------------type 1: sick
sensor:
type: 1
# -----tray 托盘
# -----goods 货物
# 扫码模式 1球机扫码 2扫码枪
scanCodeMode:
tray: 2
goods: 1
Loading…
Cancel
Save