From 40b52328110fcd52ef68cdb38df9ae1833b8ef32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Tue, 23 Apr 2024 14:15:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=9C=9C=E9=9B=AA=E5=86=B0=E5=9F=8E=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E4=BF=AE=E6=94=B9=20=E5=A2=99=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?E2=20=E5=A2=9E=E5=8A=A0=E8=BF=94=E5=9B=9E=E7=BB=99=E4=B8=8A?= =?UTF-8?q?=E4=BD=8D=E6=9C=BA=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/encryptor/Encryptor.java | 2 +- .../web/config/ConfigProperties.java | 2 + .../web/controller/StockController.java | 2 + .../com/zhehekeji/web/entity/CheckLog.java | 1 + .../java/com/zhehekeji/web/entity/Order.java | 17 ++-- .../java/com/zhehekeji/web/entity/Stock.java | 9 ++ .../web/entity/UploadCheckResults.java | 12 +++ .../lib/hik/HikCameraControlModuleImpl.java | 8 +- .../web/lib/hik/HikExceptionCallBack.java | 5 +- .../main/java/com/zhehekeji/web/pojo/Cmd.java | 1 + .../com/zhehekeji/web/pojo/OrderSearch.java | 3 + .../zhehekeji/web/service/CameraService.java | 8 +- .../com/zhehekeji/web/service/PlcCmdInfo.java | 8 ++ .../com/zhehekeji/web/service/PlcService.java | 49 +++++++--- .../zhehekeji/web/service/StockService.java | 90 ++++++++++++++----- .../web/service/ksec/KsecDataInfo.java | 4 + .../web/service/ksec/KsecDecoder.java | 65 ++++++++------ .../web/service/ksec/KsecNettyClient.java | 1 + web/src/main/resources/application-prod.yml | 8 +- web/src/main/resources/mapper/OrderMapper.xml | 13 ++- 20 files changed, 228 insertions(+), 80 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/entity/UploadCheckResults.java diff --git a/modules/common/src/main/java/encryptor/Encryptor.java b/modules/common/src/main/java/encryptor/Encryptor.java index 773e81b..b5b3b04 100644 --- a/modules/common/src/main/java/encryptor/Encryptor.java +++ b/modules/common/src/main/java/encryptor/Encryptor.java @@ -25,7 +25,7 @@ public class Encryptor { public static void main(String[] args) { - String noEncrypt = "BFEBFBFF000A0671AK7211183"; + String noEncrypt = "BFEBFBFF000B06710025_38BC_21C3_A29D."; String encrypt = Encryptor.encryptStr(noEncrypt); System.out.println(encrypt); } 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 96ca79f..079baff 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -37,6 +37,8 @@ public class ConfigProperties { private ScanCodeMode scanCodeMode; + private String uploadResultsApiUrl; + @Data public static class CameraConfig{ diff --git a/web/src/main/java/com/zhehekeji/web/controller/StockController.java b/web/src/main/java/com/zhehekeji/web/controller/StockController.java index 0b0837d..5782741 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -139,6 +139,8 @@ public class StockController { return Result.success(stockService.checkCorrect(stockCheck)); } + + @ApiOperation(value = "人工复核") @RequestMapping(value = "/checkByMan", method = RequestMethod.POST) public Result checkByMan(@RequestBody CheckByMan checkByMan) { 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 2d412c2..85134b2 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -45,6 +45,7 @@ public class CheckLog { private String trayCode; private Integer status; + private String subtag;; private String pic; diff --git a/web/src/main/java/com/zhehekeji/web/entity/Order.java b/web/src/main/java/com/zhehekeji/web/entity/Order.java index 55c8354..ec25c49 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Order.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Order.java @@ -22,6 +22,10 @@ public class Order { @ApiModelProperty("订单号") private String orderNum; + @ApiModelProperty("wms任务号") + @TableField(value = "`task_wms_id`") + private String taskWMSId; + @ApiModelProperty("0:正常 1:告警") private Integer status; @@ -87,14 +91,11 @@ public class Order { @ApiModelProperty("图片地址,分隔") private String picPaths; -// @ApiModelProperty("入库照片") -// private String putPath; -// -// @ApiModelProperty("出库照片") -// private String outputPath; -// -// @ApiModelProperty("货位照片") -// private String goodsPath; + + private String wmsTrayCode; + + private String wmsCode; + private String subtag; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; 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 85994e8..a5e592a 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Stock.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Stock.java @@ -29,6 +29,13 @@ public class Stock { @ApiModelProperty("盘点任务号") private String checkNum; + @ApiModelProperty("wms任务号") + @TableField(value = "`task_wms_id`") + private String taskWMSId; + + @ApiModelProperty("位置") + private String addre; + @ApiModelProperty("盘点批次号") private String lotnum; @@ -58,8 +65,10 @@ public class Stock { private Integer streetId; private Integer direction; + private Integer reply; private Integer side; + private String subtag; @TableField(value = "`row`") @ApiModelProperty("行号") diff --git a/web/src/main/java/com/zhehekeji/web/entity/UploadCheckResults.java b/web/src/main/java/com/zhehekeji/web/entity/UploadCheckResults.java new file mode 100644 index 0000000..31e67dd --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/UploadCheckResults.java @@ -0,0 +1,12 @@ +package com.zhehekeji.web.entity; + +import lombok.Data; + +@Data +public class UploadCheckResults { + private String wcsTaskId; + private String wmsTaskId; + private String palno; + private String addre; + private Integer flag; +} diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java index 8c6ec67..0121d1d 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikCameraControlModuleImpl.java @@ -444,7 +444,13 @@ public class HikCameraControlModuleImpl implements CameraControlModule { public void toPtz(Integer ptzId, Integer cameraId) { int dwPTZCommand = HCNetSDK.GOTO_PRESET; - Boolean ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId); + Boolean ok = false; + try { + + ok = HikLoginModuleImpl.hcNetsdk.NET_DVR_PTZPreset_Other(CameraConnMap.getConnId(cameraId).intValue(), 1, dwPTZCommand, ptzId); + }catch (NullPointerException e){ + log.error("toPtz is not hive:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); + } if(!ok){ log.error("toPtz error:{},cameraId:{}", HikLoginModuleImpl.hcNetsdk.NET_DVR_GetLastError(),cameraId); } diff --git a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java index aec408c..1d47d9a 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java +++ b/web/src/main/java/com/zhehekeji/web/lib/hik/HikExceptionCallBack.java @@ -12,8 +12,9 @@ public class HikExceptionCallBack implements HCNetSDK.FExceptionCallBack { public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { Integer cameraId =CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID)); if(dwType == 32768){ - - log.error("hik disconnect,cameraId:{}", cameraId); + if(cameraId != null) { + log.error("hik disconnect,cameraId:{}", cameraId); + } }else if(dwType == 32791){ log.info("hik reconnect,cameraId:{}", CameraConnMap.getCameraIdByLoginId(new NetSDKLib.LLong(lUserID))); diff --git a/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java b/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java index acdeeea..993c586 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/Cmd.java @@ -24,6 +24,7 @@ public enum Cmd { D2, E, E1, + E2, ; public static Boolean isBaseAction(String code){ diff --git a/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java b/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java index 1b1008a..62bd048 100644 --- a/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java +++ b/web/src/main/java/com/zhehekeji/web/pojo/OrderSearch.java @@ -13,6 +13,9 @@ public class OrderSearch { private String orderNum; private Long streetId; + private String subtag; + private String taskId; + private String trayCode; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime startTimestamp; diff --git a/web/src/main/java/com/zhehekeji/web/service/CameraService.java b/web/src/main/java/com/zhehekeji/web/service/CameraService.java index 941fa1b..8e6d735 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CameraService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CameraService.java @@ -172,21 +172,21 @@ public class CameraService { * @return */ public List allCameras1(){ - Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); + //Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); Integer count = cameraMapper.selectCount(new QueryWrapper()); - List cameras = cameraMapper.selectList(new QueryWrapper().last("limit "+num)); + List cameras = cameraMapper.selectList(new QueryWrapper().last("limit "+8)); return cameras; } public List allCameras2(){ Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); - List cameras = cameraMapper.selectList(new QueryWrapper().last("limit "+num +","+num)); + List cameras = cameraMapper.selectList(new QueryWrapper().last("limit 0,4")); return cameras; } public List allCameras3(){ Integer num = configProperties.getVideoStyleConfig().getVideoStyleRow() *configProperties.getVideoStyleConfig().getVideoStyleColumn(); - List cameras = cameraMapper.selectList(new QueryWrapper().last("limit "+num*2+","+num)); + List cameras = cameraMapper.selectList(new QueryWrapper().last("limit 2,4")); return cameras; } diff --git a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java index 74375a1..1883d4f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcCmdInfo.java @@ -15,6 +15,13 @@ public class PlcCmdInfo { */ private String taskId; + private String subtag; + private String addre; + + private String taskWMSId; + + private String wmsTrayCode; + private String trayCode; /** * 前两个命令 库内?苦口? 1:库内 2:库口 */ @@ -55,6 +62,7 @@ public class PlcCmdInfo { * 后两个 列号 */ private Integer column2; + private Integer reply = 1; /** * 后两个 行号 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 8f43b06..63e3c26 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -130,6 +130,11 @@ public class PlcService { order.setLeftRight1(plcCmdInfo.getLeftRight1()); order.setColumn1(plcCmdInfo.getColumn1()); order.setRow1(plcCmdInfo.getRow1()); + order.setSubtag(plcCmdInfo.getSubtag()); + order.setWmsTrayCode(plcCmdInfo.getWmsTrayCode()); + order.setTaskWMSId(plcCmdInfo.getTaskWMSId()); + order.setWmsCode(plcCmdInfo.getTaskWMSId()); + order.setRow1(plcCmdInfo.getRow1()); //todo 昆船的项目 ,取货 放货是独立的 //取货是是不知道放货的位置的,所以订单开始的时候只写1位置 //订单结束写2位置 @@ -654,10 +659,11 @@ public class PlcService { Integer cameraIdTop = getCameraByPlcCmd(plcCmdInfo, leftRightTop); if(plcCmdInfo.getSeparation1() == 1 && configProperties.getScanCodeMode().getTray() == 2){ //内测 - String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; + String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) ; log.info("camera ptz"+c); gyrateCameraByCode(cameraIdTop, c); }else { + String c = cmdCode + "-" + plcCmdInfo.getLeftRightStr(1) ; log.info("camera ptz"+cmdCode); gyrateCameraByCode(cameraIdTop, cmdCode); try { @@ -675,17 +681,30 @@ public class PlcService { } catch (InterruptedException e) { e.printStackTrace(); } - cameraCapture(cameraIdTop,false,null,path); - //成都蜜雪冰城 只拍照人工核对 - String e2 = "E2-" + plcCmdInfo.getLeftRightStr(1) + "-IN"; - log.info("camera ptz"+e2); - gyrateCameraByCode(cameraId, e2); try { - Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime()); - } catch (InterruptedException e) { - e.printStackTrace(); + cameraCapture(cameraIdTop, false, null, path); + + //成都蜜雪冰城 只拍照人工核对 + String e2 = "E2-" + plcCmdInfo.getLeftRightStr(1) + "-TOP"; + log.info("camera ptz"+e2); + gyrateCameraByCode(cameraId, e2); + + try { + Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + cameraCapture(cameraId,false,null,path+".jpg"); + + try { + Thread.sleep(configProperties.getCameraConfig().getEDelayCaptureTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }catch (Exception e){ + log.error("camera capture error:{}",e.getMessage()); } - cameraCapture(cameraId,false,null,path+".jpg"); + OrderInfo orderInfo = new OrderInfo(street,plcCmdInfo,1,cmdCode); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(),orderInfo.getLeftRight(),orderInfo.getSeparation(),orderInfo.getRow(),orderInfo.getColumn()); //核对异常 @@ -700,9 +719,12 @@ public class PlcService { .checkNum(plcCmdInfo.getOrderNum()) .lotnum(plcCmdInfo.getLotnum()) .code("") + .addre(plcCmdInfo.getAddre()) .wmsCode(wmsCode) + .subtag(plcCmdInfo.getSubtag()) .wmsCategory(wmsCatagary) .wmsTrayCode(wmsTrayCode) + .taskWMSId(plcCmdInfo.getTaskWMSId()) .trayCode("") .streetId(orderInfo.getStreetId()) .direction(orderInfo.getLeftRight()) @@ -712,6 +734,7 @@ public class PlcService { .status(0) .checkPic(path) .exportTime(LocalDateTime.now()) + .reply(plcCmdInfo.getReply()) .build(); stockMapper.insert(stock); log.info("stockmapper insert new stock info."); @@ -720,12 +743,17 @@ public class PlcService { stock.setLotnum(plcCmdInfo.getLotnum()); stock.setExportTime(LocalDateTime.now()); stock.setCheckPic(path); + stock.setAddre(plcCmdInfo.getAddre()); stock.setCheckNum(plcCmdInfo.getOrderNum()); + stock.setTaskWMSId(plcCmdInfo.getTaskWMSId()); + + stock.setSubtag(plcCmdInfo.getSubtag()); //stock.setTrayCode(trayCode); stock.setWmsTrayCode(wmsTrayCode); stock.setWmsCategory(wmsCatagary); stock.setCategory(wmsCatagary); stock.setCode(wmsTrayCode); + stock.setReply(plcCmdInfo.getReply()); //stock.setCode(scanCode); stock.setWmsCode(wmsCode); stockMapper.updateById(stock); @@ -746,6 +774,7 @@ public class PlcService { checkLog.setStreetId(stock.getStreetId()); checkLog.setDirection(stock.getDirection()); checkLog.setSide(stock.getSide()); + checkLog.setSubtag(stock.getSubtag()); checkLog.setCode(stock.getCode()); checkLog.setWmsCode(stock.getWmsCode()); checkLog.setStatus(stock.getStatus()); 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 a4c6b1a..b84f2d0 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -7,10 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.core.util.Assert; -import com.zhehekeji.web.entity.Stock; -import com.zhehekeji.web.entity.CheckLog; -import com.zhehekeji.web.entity.StockLog; -import com.zhehekeji.web.entity.Street; +import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.entity.*; import com.zhehekeji.web.mapper.CheckLogMapper; import com.zhehekeji.web.mapper.StockLogMapper; import com.zhehekeji.web.mapper.StockMapper; @@ -20,9 +18,14 @@ import com.zhehekeji.web.pojo.stock.*; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -45,6 +48,9 @@ public class StockService { @Resource private StreetMapper streetMapper; + @Resource + ConfigProperties configProperties; + public void importExcel(MultipartFile file) { log.info("import excel stock"); // try { @@ -74,6 +80,7 @@ public class StockService { List stocks = stockMapper.selectList(new QueryWrapper().eq("street_id", streetId).orderByAsc("`direction`", "`side`", "`row`", "`column`")); return stocks; } + public List list() { //List shelves = streetService.check(street); @@ -112,11 +119,15 @@ public class StockService { columnTabStatus.put(column, 0); } //获取全部盘点内容 - List stocks = stockMapper.selectList(new QueryWrapper().select("status", "`row`", "`column`") + List stocks = stockMapper.selectList(new QueryWrapper() + .select("status", "`row`", "`column`", "export_Time") .eq("`street_id`", rowColumnStatus.getStreetId()) .eq("direction", rowColumnStatus.getDirection()) - .eq("side", rowColumnStatus.getSide())); + .eq("side", rowColumnStatus.getSide()) + .orderByDesc("export_Time")); + Set seen = new HashSet<>(); Map> stocksMap = stocks.stream() + .filter(f -> seen.add(f.getRow() + "-" + f.getColumn())) //修改盘点范围值 .peek(stock -> { @@ -124,11 +135,11 @@ public class StockService { String[] strings = entry.getKey().split(" - "); if (stock.getRow() >= Integer.parseInt(strings[0]) && stock.getRow() <= Integer.parseInt(strings[1])) { //若存在则先绿3 - if(entry.getValue() == 0) entry.setValue(3); + if (entry.getValue() == 0) entry.setValue(3); //存在异常爆红2 - if (stock.getStatus() == 1 ) { + if (stock.getStatus() == 1) { entry.setValue(2); - }else if(entry.getValue() != 2 && stock.getStatus() == 0 ){//存在不爆红且未盘点 + } else if (entry.getValue() != 2 && stock.getStatus() == 0) {//存在不爆红且未盘点 entry.setValue(1); } } @@ -137,11 +148,11 @@ public class StockService { String[] strings = entry.getKey().split(" - "); if (stock.getColumn() >= Integer.parseInt(strings[0]) && stock.getColumn() <= Integer.parseInt(strings[1])) { //若存在则先绿3 - if(entry.getValue() == 0) entry.setValue(3); + if (entry.getValue() == 0) entry.setValue(3); //存在异常爆红2 - if (stock.getStatus() == 1 ) { + if (stock.getStatus() == 1) { entry.setValue(2); - }else if(entry.getValue() != 2 && stock.getStatus() == 0 ){//存在不爆红且未盘点黄色1 + } else if (entry.getValue() != 2 && stock.getStatus() == 0) {//存在不爆红且未盘点黄色1 entry.setValue(1); } } @@ -149,9 +160,9 @@ public class StockService { }) //若未盘点修改为-1 .peek(stock -> { - if (stock.getStatus() == 0){ + if (stock.getStatus() == 0) { stock.setViewStatus(-1); - }else stock.setViewStatus(stock.getStatus()); + } else stock.setViewStatus(stock.getStatus()); }) .collect(Collectors.groupingBy(Stock::getColumn, Collectors.toMap(Stock::getRow, v -> v))); //赋值 @@ -165,7 +176,7 @@ public class StockService { stock.setViewStatus(0); //stock.setShelveId(shelveId); stockList.add(stock); - }else stockList.add(stocksMap.get(j).get(i)); + } else stockList.add(stocksMap.get(j).get(i)); } } @@ -174,6 +185,7 @@ public class StockService { checkStatus.setStocks(stockList); return checkStatus; } + public CheckStatus statusByRowColumn(RowColumnStatus rowColumnStatus) { CheckStatus checkStatus = new CheckStatus(); checkStatus.setColumnStart(rowColumnStatus.getColumnStart()); @@ -473,12 +485,44 @@ public class StockService { } else { stock.setStatus(StockStatus.ERROR.getStatus()); } - + if (stock.getReply() == 1) { + uploadResultsWMS(stock, stockCheck.getOk()); + } stockMapper.updateById(stock); checkLog(stock); return stock; } + public void uploadResultsWMS(Stock stock, Integer stockStatus) { + + ResponseEntity body = null; + RestTemplate restTemplate = new RestTemplate(); + String url = configProperties.getUploadResultsApiUrl(); + + UploadCheckResults uploadCheckResults = new UploadCheckResults(); + + + //String url = "http://127.0.0.1:8083"+"/visionCompute"; + + uploadCheckResults.setWcsTaskId(stock.getCheckNum().split("_")[1]); + uploadCheckResults.setWmsTaskId(stock.getTaskWMSId()); + uploadCheckResults.setPalno(stock.getWmsCode()); + uploadCheckResults.setFlag(stockStatus == 1 ? 1 : 0); + uploadCheckResults.setAddre(stock.getAddre()); + + try { + + // String jsonString = gson.toJson(algorithmPojo); + body = restTemplate.postForEntity(url, uploadCheckResults, String.class); + JSONObject.parseObject(body.getBody(), UploadCheckResults.class); + + System.out.println(body); + } catch (RestClientException e) { + log.error("上传结果失败", e); + + } + } + @Resource private CheckLogMapper checkLogMapper; @@ -497,12 +541,12 @@ public class StockService { checkLog.setCode(stock.getCode()); checkLog.setCreateTime(LocalDateTime.now()); checkLog.setExportTime(stock.getExportTime()); - checkLogMapper.update(checkLog,new UpdateWrapper() - .eq("check_num",stock.getCheckNum()) - .eq("`column`",stock.getColumn()) - .eq("`row`",stock.getRow()) - .eq("direction",stock.getDirection()) - .eq("side",stock.getSide())); + checkLogMapper.update(checkLog, new UpdateWrapper() + .eq("check_num", stock.getCheckNum()) + .eq("`column`", stock.getColumn()) + .eq("`row`", stock.getRow()) + .eq("direction", stock.getDirection()) + .eq("side", stock.getSide())); } /** @@ -532,7 +576,7 @@ public class StockService { stock.setStatus(3); List stockList = stockMapper.selectList(new QueryWrapper().eq("status", "0")); stockMapper.update(stock, new QueryWrapper().eq("status", "0")); - for (Stock s:stockList){ + for (Stock s : stockList) { StockCheck stockCheck = new StockCheck(); stockCheck.setColumn(s.getColumn()); stockCheck.setStreetId(s.getStreetId()); 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..f15fc07 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 @@ -10,6 +10,7 @@ public class KsecDataInfo { private String cmdName; private String taskId; + private String taskWMSId; private Integer fromColumn; @@ -39,6 +40,9 @@ public class KsecDataInfo { private String trayCode; + private String subtag; + + private String addre; /** * 盘点批次号 */ 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 d40c757..ef4851e 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 @@ -28,13 +28,13 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); - public static void setLastLotnum(String lotnum){ + public static void setLastLotnum(String lotnum) { lastLotnum = lotnum; } private static String lastLotnum; - private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); + private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7, 21, 30, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(20000)); private PlcService plcService; @@ -46,16 +46,16 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { @Override protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { in = (ByteBuf) super.decode(ctx, in); - if(in == null){ + if (in == null) { log.debug("no data"); return null; } - KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService); + KescRunnable kescRunnable = new KescRunnable(in, ctx, plcService); threadPoolExecutor.execute(kescRunnable); return null; } - public static class KescRunnable implements Runnable{ + public static class KescRunnable implements Runnable { private ByteBuf in; @@ -63,7 +63,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { private PlcService plcService; - public KescRunnable(ByteBuf body,ChannelHandlerContext ctx,PlcService plcService){ + public KescRunnable(ByteBuf body, ChannelHandlerContext ctx, PlcService plcService) { this.in = body; this.ctx = ctx; this.plcService = plcService; @@ -72,15 +72,15 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { @Override public void run() { String body = in.toString(StandardCharsets.UTF_8); - tcpLogger.info("接收数据:"+body); - log.info("接收数据:"+body); - if (body.startsWith("<")){ + tcpLogger.info("接收数据:" + body); + log.info("接收数据:" + body); + if (body.startsWith("<")) { // 去掉首尾标识符 body = body.substring(1, body.length()); KsecInfo ksecInfo = JSONObject.parseObject(body, KsecInfo.class); if (Cmd.A.name().equals(ksecInfo.getType())) { in.release(); - return ; + return; } KsecDataInfo dataInfo = ksecInfo.getData(); LotnumConvert lotnumConvert = new LotnumConvert(dataInfo.getLotnum()); @@ -88,13 +88,20 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { dataInfo.setLotnum(lotnum); ksecInfo.setData(dataInfo); String ksecInfoStr = "<" + JSONObject.toJSONString(ksecInfo) + ">"; - tcpLogger.info("转换后数据: "+ksecInfoStr); + tcpLogger.info("转换后数据: " + ksecInfoStr); PlcCmdInfo plcCmdInfo = null; String srmNumber = null; String cmdName = null; - if(dataInfo != null){ + if (dataInfo != null) { + + 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); + plcCmdInfo.setSubtag(dataInfo.getSubtag()); + plcCmdInfo.setAddre(dataInfo.getAddre()); + plcCmdInfo.setTaskWMSId(dataInfo.getTaskWMSId()); + plcCmdInfo.setAddre(dataInfo.getAddre()); + plcCmdInfo.setWmsTrayCode(dataInfo.getTrayCode()); + plcCmdInfo.setTrayCode(dataInfo.getCode()); - 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(); cmdName = dataInfo.getCmdName(); @@ -108,12 +115,12 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { if (Cmd.B1.name().equals(cmdName)) { //昆船盘点模式下也会发B1 ,但是不会发送B2 //这里判断下,是否存在盘点批次号 若存在,既是盘点的B1,无需处理;若不存在lotnum,则是随行的B1 - if(StringUtils.isEmpty(dataInfo.getLotnum())){ + if (StringUtils.isEmpty(dataInfo.getLotnum())) { //任务开始 旋转到原点位 - plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); + plcService.gyrateCamera(plcCmdInfo, Cmd.C5.name()); plcService.orderStart(plcCmdInfo); plcService.openStreetLightSource(plcCmdInfo.getStreetId()); - }else { + } else { log.info("check move"); } @@ -121,14 +128,14 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { //B2 C4 一起发的,需要停止等B2 //这里判断是不是双伸 - if(plcCmdInfo.getSeparation2() == 2){ + if (plcCmdInfo.getSeparation2() == 2) { //深测货架延迟 try { Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2OutDelayTime()); } catch (InterruptedException e) { e.printStackTrace(); } - }else { + } else { //浅侧延迟 try { Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2DelayTime()); @@ -136,11 +143,12 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { e.printStackTrace(); } } - plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); plcService.orderStop(plcCmdInfo); plcService.closeStreetLightSource(plcCmdInfo.getStreetId()); //重置相机水平方向 - plcService.verticalAdjustmentByStreet( dataInfo.getSRMNumber()); + plcService.verticalAdjustmentByStreet(dataInfo.getSRMNumber()); + + plcService.gyrateCamera(plcCmdInfo, Cmd.C5.name()); } } else if (Cmd.C.name().equals(ksecInfo.getType())) { @@ -159,8 +167,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { } catch (InterruptedException e) { e.printStackTrace(); } - }else { - log.info("other C code :{}",code); + } else { + log.info("other C code :{}", code); } } else if (Cmd.D.name().equals(ksecInfo.getType())) { @@ -191,18 +199,23 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { // lastLotnum = lotnum; // } //盘点 + //转球机到盘点位 然后拍照 + if (Cmd.E2.name().equals(cmdName)) { + plcCmdInfo.setReply(0); + } plcCmdInfo.setTimes(1); //成都蜜雪冰城 将lotnum当成托盘条码描述 - Boolean ok = plcService.check(plcCmdInfo,ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum()); + Boolean ok = plcService.check(plcCmdInfo, ksecInfo.getData().getCmdName(), dataInfo.getCode(), dataInfo.getTrayCode(), dataInfo.getLotnum()); // Boolean ok = true; - if(ok){ + if (ok) { ksecInfo.getData().setAckStatus(1); - }else { + } else { ksecInfo.getData().setAckStatus(0); } ctx.channel().writeAndFlush(ksecInfo); - log.info("盘点结束:"+ksecInfo.getData().toString()); + log.info("盘点结束:" + ksecInfo.getData().toString()); + } //找到该货位的最后一张照片与现在的照片比照 //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 cf3bbd0..ad0290c 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 @@ -70,6 +70,7 @@ public class KsecNettyClient { catch (Exception e) { //关闭当前链接 if(channel!=null) { + channel.disconnect(); channel.close(); } log.error("reconnect error num:{}", num); diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 654b847..c3fe834 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://127.0.0.1:3306/lia_duoji?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3306/lia_duoji_jiazuomx?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root validationQuery: SELECT 1 FROM DUAL # --------本服务端口号 @@ -64,7 +64,7 @@ savePath: # ------------服务端类型 0:TCP(罗伯泰克) 1:KSEC(JSON)(昆船) serverMode: 1 ksec: - ip: 192.168.168.11 + ip: 127.0.0.1 port: 8001 #断点重连的次数:-1->不断重连 reconnectNum: -1 @@ -93,4 +93,6 @@ scanCodeMode: trayCodeTypes: - 14 # 照片 視頻保存多久 -deleteFileDays: 365 \ No newline at end of file +deleteFileDays: 365 + +uploadResultsApiUrl: http://127.0.0.1:9002/InventoryResult/Ir diff --git a/web/src/main/resources/mapper/OrderMapper.xml b/web/src/main/resources/mapper/OrderMapper.xml index bbb4291..11934a8 100644 --- a/web/src/main/resources/mapper/OrderMapper.xml +++ b/web/src/main/resources/mapper/OrderMapper.xml @@ -7,12 +7,21 @@ from `order` t - and t.order_num = #{req.orderNum} + and t.order_num like concat('%', #{req.orderNum},'%') + + + and t.task_WMS_Id like concat('%', #{req.taskId},'%') + + + and t.subtag like concat('%', #{req.subtag},'%') + + + and t.wms_Code like concat('%', #{req.trayCode},'%') and t.start_time >= #{req.startTimestamp} and t.start_time <= #{req.endTimestamp} - + and t.street_id = #{req.streetId}