diff --git a/web/src/main/java/com/aijiao/test/JNIDemo.java b/web/src/main/java/com/aijiao/test/JNIDemo.java index be7a090..502790a 100644 --- a/web/src/main/java/com/aijiao/test/JNIDemo.java +++ b/web/src/main/java/com/aijiao/test/JNIDemo.java @@ -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); } } diff --git a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java index 07723c4..1de3578 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -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; + } } diff --git a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java index 36061eb..0cdc9a1 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -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; diff --git a/web/src/main/java/com/zhehekeji/web/entity/Stock.java b/web/src/main/java/com/zhehekeji/web/entity/Stock.java index b75044a..79f4582 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Stock.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Stock.java @@ -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; diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcService.java b/web/src/main/java/com/zhehekeji/web/service/PlcService.java index 28624f9..6c4bb21 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -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)); +// 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){ + 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); - if(StringUtils.isEmpty(scanCode) || scanCode.equals("Empty")){ - scanCode = "识别异常"; - log.warn("detectBestBarCode:{}",scanCode); + 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); } diff --git a/web/src/main/java/com/zhehekeji/web/service/SensorService.java b/web/src/main/java/com/zhehekeji/web/service/SensorService.java new file mode 100644 index 0000000..aa7de1b --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/SensorService.java @@ -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 list = sensorGunMapper.selectList(new QueryWrapper().eq("street_id",streetId).eq("direction",direction)); + if(list.size() > 0){ + return list.get(0); + } + return null; + } +} diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java index e2d1e68..d2d4a07 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDataInfo.java @@ -36,4 +36,6 @@ public class KsecDataInfo { private String warnCode; private Integer ackStatus; + + private String trayCode; } diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java index 74e63c7..37aaa61 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecDecoder.java @@ -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); diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java index 7c56880..2c074f2 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KsecNettyClient.java @@ -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; diff --git a/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java b/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java index a246e12..fe84805 100644 --- a/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java +++ b/web/src/main/java/com/zhehekeji/web/service/sick/SickSocket.java @@ -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 { diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index c4e31e7..19091e6 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -62,3 +62,10 @@ lightSource: # ------------type 1: sick sensor: type: 1 +# -----tray 托盘 +# -----goods 货物 +# 扫码模式 1:球机扫码 2:扫码枪 0:不用扫码 +scanCodeMode: + tray: 2 + goods: 1 + diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 971d0cf..daf0857 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -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:没有光源 1:JYDam # -----------1:JYDam 配置num和index @@ -59,4 +59,10 @@ lightSource: # -----------扫码枪 # ------------type 1: sick sensor: - type: 1 \ No newline at end of file + type: 1 +# -----tray 托盘 +# -----goods 货物 +# 扫码模式 1:球机扫码 2:扫码枪 +scanCodeMode: + tray: 2 + goods: 1 \ No newline at end of file diff --git a/web/src/main/resources/application-test.yml b/web/src/main/resources/application-test.yml index 971d0cf..7a6ef6d 100644 --- a/web/src/main/resources/application-test.yml +++ b/web/src/main/resources/application-test.yml @@ -59,4 +59,10 @@ lightSource: # -----------扫码枪 # ------------type 1: sick sensor: - type: 1 \ No newline at end of file + type: 1 +# -----tray 托盘 +# -----goods 货物 +# 扫码模式 1:球机扫码 2:扫码枪 +scanCodeMode: + tray: 2 + goods: 1 \ No newline at end of file