From bb56c8e89fba31e65fc50f5928aadb12518f1300 Mon Sep 17 00:00:00 2001 From: yiming Date: Wed, 11 May 2022 15:24:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B0=E6=B9=BE=E7=9B=98=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhehekeji/common/util/PathUtil.java | 6 +- .../java/com/zhehekeji/web/entity/Stock.java | 10 ++ .../com/zhehekeji/web/service/PlcService.java | 91 +++++++++++++++---- .../web/service/StockCheckRunnable.java | 2 +- .../web/service/ksec/KescEncoder.java | 16 ++++ .../web/service/ksec/KsecDataInfo.java | 4 + .../web/service/ksec/KsecDecoder.java | 27 +++--- web/src/main/resources/application-dev.yml | 2 +- .../main/resources/mapper/StreetMapper.xml | 2 +- 9 files changed, 122 insertions(+), 38 deletions(-) diff --git a/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java index cb36cc2..37df32e 100644 --- a/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java +++ b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java @@ -26,14 +26,14 @@ public class PathUtil { public static String createFileName(String fileType,Integer cameraId) { LocalDateTime now = LocalDateTime.now(); - String time = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")) + "/"+cameraId; - return time + "/" + now.format(DateTimeFormatter.ofPattern("HHmmss-"))+getRandomString(10) + "."+fileType; + String time = now.format(DateTimeFormatter.ofPattern("yyyy\\MM\\dd")) + "\\"+cameraId; + return time + "\\" + now.format(DateTimeFormatter.ofPattern("HHmmss-"))+getRandomString(10) + "."+fileType; } public static String createFileNameByRowColumn(String fileType,Integer cameraId,Integer row,Integer column){ LocalDateTime now = LocalDateTime.now(); String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd")); - return cameraId+"/"+row+"-"+column+"/"+date + "/" +now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss-"))+row+"-"+column + "."+fileType; + return cameraId+"\\"+row+"-"+column+"\\"+date + "\\" +now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss-"))+row+"-"+column + "."+fileType; } /** 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 5dac865..ca60ce7 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Stock.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Stock.java @@ -80,5 +80,15 @@ public class Stock { @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime exportTime; + /** + * 回传给台湾的数据 + */ + @TableField(exist = false) + private String checkPathTaiWan; + + @TableField(exist = false) + private String checkPicTaiWan; + + } 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 5e9be50..4e78cd5 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -16,6 +16,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import javax.annotation.Resource; +import java.net.InetAddress; +import java.net.UnknownHostException; import java.time.Duration; import java.time.LocalDateTime; import java.util.List; @@ -525,17 +527,16 @@ public class PlcService { log.info("test endTime:{},time:{}millisecond",endTime,(endTime - startTime)); } - public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode){ + public Stock check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode){ long startTime = System.currentTimeMillis(); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); - Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1()); - gyrateCameraByCode(cameraId, cmdCode); - try { - Thread.sleep(configProperties.getCameraConfig().getDelayCaptureTime()); - } catch (InterruptedException e) { - e.printStackTrace(); + if(street == null){ + return new Stock(); } + Integer cameraId = getCameraByPlcCmd(plcCmdInfo,plcCmdInfo.getLeftRight1()); + //台湾项目只有托盘码,使用sick扫码枪, + //使用球机直接拍照,并把图片返回给wcs String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,plcCmdInfo.getRow1(),plcCmdInfo.getColumn1()); cameraCapture(cameraId,false,null,path); //托盘码 @@ -546,7 +547,7 @@ public class PlcService { //托盘使用sick扫码枪 SensorGun sensorGun = sensorService.getSensorByPlc(street.getId(),plcCmdInfo.getLeftRight1()); if(sensorGun == null){ - trayCode = "识别异常"; + trayCode = "識別異常"; trayCheck = Boolean.FALSE; log.error("no sensor gun config in database ,street id:{},direction:{}",street.getId(),plcCmdInfo.getLeftRight1()); }else { @@ -559,13 +560,13 @@ public class PlcService { trayCode = ""; trayCheck = Boolean.TRUE; }else { - trayCode = "识别异常"; + trayCode = "識別異常"; trayCheck = Boolean.FALSE; log.warn("sick ocr error:{}",trayCode); } }else { if(StringUtils.isEmpty(trayCode) || trayCode.equals("NoRead")){ - trayCode = "识别异常"; + trayCode = "識別異常"; trayCheck = Boolean.FALSE; log.warn("sick ocr error:{}",trayCode); }else { @@ -580,19 +581,77 @@ public class PlcService { RFID rfid = rfidService.getRFIDByPlc(street.getId()); } - StockCheckRunnable stockCheckRunnable = new StockCheckRunnable(street,plcCmdInfo,cmdCode,stockMapper,path,checkLogMapper,configProperties.getScanCodeMode().getGoods(),wmsCode,wmsTrayCode,trayCode,trayCheck,configProperties); - threadPoolExecutor.execute(stockCheckRunnable); - + OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode); + Stock stock = stockMapper.getByShelveIdAndRowColumn(orderInfo.getShelveId(),orderInfo.getRow(),orderInfo.getColumn()); + Integer status = 1; + //托盘 + if(trayCheck ){ + status = 2; + } + if(stock == null){ + stock = new Stock(); + stock.setStatus(status); + stock.setShelveId(orderInfo.getShelveId()); + stock.setRow(orderInfo.getRow()); + stock.setColumn(orderInfo.getColumn()); + stock.setLotnum(plcCmdInfo.getLotnum()); + stock.setExportTime(LocalDateTime.now()); + stock.setCheckPic(path); + stock.setCheckNum(plcCmdInfo.getOrderNum()); + stock.setTrayCode(trayCode); + stock.setWmsTrayCode(wmsTrayCode); + stockMapper.insert(stock); + }else { + stock.setStatus(status); + stock.setShelveId(orderInfo.getShelveId()); + stock.setRow(orderInfo.getRow()); + stock.setColumn(orderInfo.getColumn()); + stock.setLotnum(plcCmdInfo.getLotnum()); + stock.setExportTime(LocalDateTime.now()); + stock.setCheckPic(path); + stock.setCheckNum(plcCmdInfo.getOrderNum()); + stock.setTrayCode(trayCode); + stock.setWmsTrayCode(wmsTrayCode); + stockMapper.updateById(stock); + } long end = System.currentTimeMillis(); long s = end - startTime; - log.info("time:{}millisecond",s); - return true; + log.debug("time:{}millisecond",s); + String ip = null; + try { + ip = InetAddress.getLocalHost().getHostAddress()+"\\"+configProperties.getSavePath().getMediaPath()+path; + } catch (UnknownHostException e) { + e.printStackTrace(); + } + String p = path.substring(path.lastIndexOf("\\")+1,path.lastIndexOf(".")); + stock.setCheckPicTaiWan(ip); + stock.setCheckPathTaiWan(p); + //判断照片是否存在,确认已保存再返回 + //return checkPathExist(stock); + checkLog(stock); + return stock; } public void truncateStock(){ stockMapper.truncate(); } - + public void checkLog(Stock stock){ + CheckLog checkLog = new CheckLog(); + checkLog.setLotnum(stock.getLotnum()); + checkLog.setCheckNum(stock.getCheckNum()); + 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()); + checkLog.setLotnum(stock.getLotnum()); + checkLogMapper.insert(checkLog); + } } diff --git a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java index 14ef48a..ecdd353 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockCheckRunnable.java @@ -116,7 +116,7 @@ public class StockCheckRunnable implements Runnable { status = 2; } if(stock == null){ - stock = new Stock(null,null,plcCmdInfo.getOrderNum(),plcCmdInfo.getLotnum(),scanCode, null,null,wmsCode,null,null,wmsTrayCode,trayCode,orderInfo.getShelveId(),orderInfo.getRow(),orderInfo.getColumn(),status,null,null,path, LocalDateTime.now()); + stock = new Stock(null,null,plcCmdInfo.getOrderNum(),plcCmdInfo.getLotnum(),scanCode, null,null,wmsCode,null,null,wmsTrayCode,trayCode,orderInfo.getShelveId(),orderInfo.getRow(),orderInfo.getColumn(),status,null,null,path, LocalDateTime.now(),null,null); stockMapper.insert(stock); }else { stock.setStatus(status); diff --git a/web/src/main/java/com/zhehekeji/web/service/ksec/KescEncoder.java b/web/src/main/java/com/zhehekeji/web/service/ksec/KescEncoder.java index 44d121d..3955aea 100644 --- a/web/src/main/java/com/zhehekeji/web/service/ksec/KescEncoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/ksec/KescEncoder.java @@ -16,6 +16,22 @@ public class KescEncoder extends MessageToByteEncoder { @Override protected void encode(ChannelHandlerContext channelHandlerContext, KsecInfo ksecInfo, ByteBuf byteBuf) throws Exception { String body = "<" + JSONObject.toJSONString(ksecInfo) + ">"; + if(!ksecInfo.getType().equals("A")){ + body = body.replaceAll("\\\\\\\\", "\\\\"); + } byteBuf.writeBytes(body.getBytes(StandardCharsets.UTF_8)); } + + public static void main(String[] args) { + KsecInfo ksecInfo = KsecInfo.heart(); + KsecDataInfo ksecDataInfo = new KsecDataInfo(); + ksecDataInfo.setCheckPath("d:\\\\data\\media\\3\\3-7\\20220509\\20220509093154-3-7.jpeg"); + ksecInfo.setData(ksecDataInfo); + String body = JSONObject.toJSONString(ksecInfo); + System.out.println(body); + + String s = body.replaceAll("\\\\\\\\", "\\\\"); + System.out.println(s); + } + } 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 90ac787..3c72455 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 @@ -43,4 +43,8 @@ public class KsecDataInfo { * 盘点批次号 */ private String lotnum; + + private String checkPic; + + private String checkPath; } 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 100b3de..166603f 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 @@ -1,6 +1,7 @@ package com.zhehekeji.web.service.ksec; import com.alibaba.fastjson.JSONObject; +import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.pojo.Cmd; import com.zhehekeji.web.service.GoodsActionTimes; import com.zhehekeji.web.service.PlcCmdInfo; @@ -112,31 +113,25 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { plcService.truncateStock(); lastLotnum = lotnum; } - Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode()); - if(ok){ + + Stock stock = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode()); + if(stock != null && stock.getStatus() == 2){ ksecInfo.getData().setAckStatus(1); }else { ksecInfo.getData().setAckStatus(0); } - ctx.channel().writeAndFlush(ksecInfo); + if(stock != null){ + dataInfo.setCheckPath(stock.getCheckPathTaiWan()); + dataInfo.setCheckPic(stock.getCheckPicTaiWan()); } + ksecInfo.setHeader("TL"); + ksecInfo.setData(dataInfo); + ctx.channel().writeAndFlush(ksecInfo); + } //找到该货位的最后一张照片与现在的照片比照 //plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0); } in.release(); return null; } - - public class StopThread extends Thread { - - private PlcCmdInfo plcCmdInfo; - - public StopThread(PlcCmdInfo plcCmdInfo){ - this.plcCmdInfo = plcCmdInfo; - } - @Override - public void run() { - plcService.orderStop(plcCmdInfo); - } - } } diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index 672bcd6..c0d7f26 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -27,7 +27,7 @@ userUrl: http://115.236.65.98:11001 # ----默认摄像头的连接信息 cameraConfig: # ------------球機選擇--- 0:利珀 1:海康 - cameraType: 1 + cameraType: 0 cameraPassword: a1234567 cameraUser: admin cameraPort: 37777 diff --git a/web/src/main/resources/mapper/StreetMapper.xml b/web/src/main/resources/mapper/StreetMapper.xml index 8c73b87..b817f3c 100644 --- a/web/src/main/resources/mapper/StreetMapper.xml +++ b/web/src/main/resources/mapper/StreetMapper.xml @@ -13,7 +13,7 @@ left join camera c2 on t.camera2_id = c2.id left join sensor_gun s1 on s1.street_id = t.id and s1.direction = 1 left join sensor_gun s2 on s2.street_id = t.id and s2.direction = 2 - left join RFID rf on rf.street_id = t.id + left join rfid rf on rf.street_id = t.id order by t.id desc