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 3e0fc3a..736244d 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -12,11 +12,12 @@ import java.time.LocalDateTime; @Data public class CheckLog { - @TableId(type = IdType.AUTO) - private Long id; private Integer streetId; + @TableField(exist = false) + private String streetName; + private Integer direction; private Integer side; @@ -49,6 +50,9 @@ public class CheckLog { private String lotnum; + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") + private LocalDateTime exportTime; + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; diff --git a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java index 3f6787c..2f1fc0b 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/stock/StockCheck.java @@ -27,4 +27,6 @@ public class StockCheck { @ApiModelProperty("列") private Integer column; + private Integer ok; + } diff --git a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java index d3226e3..2cc32a0 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java @@ -6,20 +6,29 @@ import com.github.pagehelper.PageInfo; import com.zhehekeji.web.entity.CheckLog; import com.zhehekeji.web.mapper.CheckLogMapper; import com.zhehekeji.web.pojo.stock.CheckLogSearch; +import com.zhehekeji.web.pojo.street.StreetVO; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Service public class CheckLogService { @Resource private CheckLogMapper checkLogMapper; + @Resource + private StreetService streetService; public PageInfo list(CheckLogSearch search){ - + List list = streetService.list(); + Map map = new HashMap<>(); + list.forEach(l->{ + map.put(l.getId(),l.getName()); + }); PageHelper.startPage(search.getPageNum(),search.getPageSize()); QueryWrapper wrapper = new QueryWrapper<>(); if(!StringUtils.isEmpty(search.getLotnum())){ @@ -40,8 +49,13 @@ public class CheckLogService { if(search.getColumn() != null && search.getColumn() != 0){ wrapper.eq("`column`",search.getColumn()); } + if(search.getStreetId() != null && search.getStreetId() != 0){ + wrapper.eq("`street_id`",search.getStreetId()); + } ListstockChecks = checkLogMapper.selectList(wrapper); - + stockChecks.forEach(l->{ + l.setStreetName(map.get(l.getStreetId())); + }); return new PageInfo<>(stockChecks); } } 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 c473388..0b82413 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -577,112 +577,36 @@ public class PlcService { String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1()); + //拍照暂停1s再拍 + try { + Thread.sleep(1000l); + } catch (InterruptedException e) { + e.printStackTrace(); + } cameraCapture(cameraId,false,null,path); - //托盘码 - String trayCode = null; - Boolean trayCheck = Boolean.TRUE; - //如果是用扫码枪 扫 托盘码,就直接扫 - //if(configProperties.getScanCodeMode().getTray() == 2){ - SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1()); - if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ - //托盘使用sick扫码枪 - - 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()); - 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); - } - } - - } - - }else if(configProperties.getScanCodeMode().getTray() == 3){ - //RFID - RFID rfid = rfidService.getRFIDByPlc(street.getId()); - - + //成都蜜雪冰城 只拍照人工核对 - } OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn()); - String scanCode = null; - Boolean codeCheck = Boolean.TRUE; - Boolean trayCodeCheck = Boolean.TRUE; - //货物使用球机扫码 - - if(configProperties.getScanCodeMode().getTray() == 2 && plcCmdInfo.getSeparation1() == 2){ - //托盘使用球机扫码 - if("".equals(wmsTrayCode)){ - //空货物的处理 - //如果系统货物为空,则只要扫码识别未出结果,就认为无货物 - trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); - log.info("tray code:{},sys trayCode:{}",trayCode,wmsTrayCode); - if(StringUtils.isEmpty(trayCode)|| trayCode.equals("Unrecognized")){ - trayCheck = Boolean.TRUE; - trayCode = ""; - }else { - trayCheck = wmsTrayCode.equals(trayCode); - } - }else { - trayCode = BarcodeDetector.detectBestCodeUntilOK(configProperties.getSavePath().getMediaPath()+path,configProperties.getScanCodeMode().getTrayCodeTypes()); - if(StringUtils.isEmpty(trayCode)){ - log.error("row:{},cloumn:{}",plcCmdInfo.getRow1(),plcCmdInfo.getColumn1()); - log.error("detectBestBarCode:{}",trayCode); - trayCode = "识别异常"; - trayCheck = Boolean.FALSE; - }else { - trayCheck = wmsTrayCode.equals(trayCode); - } - } - - } - log.info("code:{}",scanCode); //核对异常 - Integer status = 1; - //托盘和货物都正确 - if(trayCheck && codeCheck){ - status = 2; - } if(stock == null){ - stock = new Stock(null,null,plcCmdInfo.getOrderNum(),plcCmdInfo.getLotnum(),scanCode, null,null,wmsCode,null,null,wmsTrayCode,trayCode,orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn(),status,null,null,path, LocalDateTime.now()); + 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); }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); stock.setWmsTrayCode(wmsTrayCode); - stock.setCode(scanCode); + //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); diff --git a/web/src/main/java/com/zhehekeji/web/service/StockService.java b/web/src/main/java/com/zhehekeji/web/service/StockService.java index 59eee8e..f3a81c7 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -355,10 +355,15 @@ public class StockService { Stock stock = stockInfo(stockCheck); Assert.isTrue(stock != null && stock.getId() != null, "该货位暂时没有记录"); Integer oldStatus = stock.getStatus(); - Assert.isTrue(StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对"); + //Assert.isTrue(StockStatus.ERROR.getStatus().equals(oldStatus), "无需核对"); log.info("check stock correct, street_id:{},direction:{},side:{},row:{},column:{}", stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn()); - stock.setStatus(StockStatus.MANUAL.getStatus()); + if(stockCheck.getOk() == 1){ + stock.setStatus(StockStatus.MANUAL.getStatus()); + }else { + stock.setStatus(StockStatus.ERROR.getStatus()); + } + stockMapper.updateById(stock); checkLog(stock); return stock; @@ -373,10 +378,14 @@ public class StockService { checkLog.setColumn(stock.getColumn()); checkLog.setCheckNum(stock.getCheckNum()); checkLog.setPic(stock.getCheckPic()); + checkLog.setDirection(stock.getDirection()); + checkLog.setSide(stock.getSide()); + checkLog.setStreetId(stock.getStreetId()); //checkLog.setShelveId(stock.getShelveId()); checkLog.setStatus(stock.getStatus()); checkLog.setCode(stock.getCode()); checkLog.setCreateTime(LocalDateTime.now()); + checkLog.setExportTime(stock.getExportTime()); checkLogMapper.insert(checkLog); } 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 0fe32f0..b607823 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 @@ -86,17 +86,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { String srmNumber = null; String cmdName = null; if(dataInfo != null){ - //左右换过来 - if(dataInfo.getFromDirection() == 1){ - dataInfo.setFromDirection(2); - }else { - dataInfo.setFromDirection(1); - } - if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){ - dataInfo.setToDirection(2); - }else { - dataInfo.setToDirection(1); - } + plcCmdInfo = new PlcCmdInfo(dataInfo.getSRMNumber(), dataInfo.getTaskId(), dataInfo.getFromSide(), dataInfo.getFromDirection(), dataInfo.getFromColumn(), dataInfo.getFromRow(), dataInfo.getFromSeparation(),dataInfo.getToSide(), dataInfo.getToDirection(), dataInfo.getToColumn(), dataInfo.getToRow(),dataInfo.getToSeparation(),lotnum); srmNumber = dataInfo.getSRMNumber(); @@ -184,28 +174,22 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { //盘点 //转球机到盘点位 然后拍照 -// if(!StringUtils.isEmpty(lotnum) && !lotnum.equals(lastLotnum)){ -// //需要把stock表truncate -// FileUtil.save(lotnum,"lastLotnum"); -// tcpLogger.info("truncate table ,last lotnum:{},new lotnum:{}",lastLotnum,lotnum); -// plcService.truncateStock(); -// lastLotnum = lotnum; -// } -// plcCmdInfo.setTimes(1); -// Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode()); -// if(ok){ -// ksecInfo.getData().setAckStatus(1); -// }else { -// ksecInfo.getData().setAckStatus(0); -// } -// ctx.channel().writeAndFlush(ksecInfo); - //rfid的逻辑 - String code = dataInfo.getCmdName(); - if("E1".equals(code)){ - plcService.RFIDCheck(plcCmdInfo); + if(!StringUtils.isEmpty(lotnum) && !lotnum.equals(lastLotnum)){ + //需要把stock表truncate + FileUtil.save(lotnum,"lastLotnum"); + tcpLogger.info("truncate table ,last lotnum:{},new lotnum:{}",lastLotnum,lotnum); + plcService.truncateStock(); + lastLotnum = lotnum; + } + plcCmdInfo.setTimes(1); + Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode()); + if(ok){ + ksecInfo.getData().setAckStatus(1); }else { - plcService.RFIDStop(plcCmdInfo); + ksecInfo.getData().setAckStatus(0); } + ctx.channel().writeAndFlush(ksecInfo); + } //找到该货位的最后一张照片与现在的照片比照 diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 2387d7d..eca8fbf 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://192.168.77.91:3306/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 # --------本服务端口号 @@ -27,10 +27,10 @@ userUrl: http://115.236.65.98:11001 # ----默认摄像头的连接信息 cameraConfig: # ------------球機選擇--- 0:利珀 1:海康 - cameraType: 0 + cameraType: 1 cameraPassword: a1234567 cameraUser: admin - cameraPort: 37777 + cameraPort: 8000 videoServer: 127.0.0.1:8083 #相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的 delayCaptureTime: 3500 @@ -61,8 +61,8 @@ savePath: # ------------服务端类型 0:TCP(罗伯泰克) 1:KSEC(JSON)(昆船) serverMode: 1 ksec: - ip: 127.0.0.1 - port: 3000 + ip: 192.168.168.11 + port: 8001 # ------------ 实时视频流 全部页面的格式 行列数量 videoStyleConfig: videoStyleRow: 4