From c14541a1fac775392aedccb879d68b71ca9bdeba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LAPTOP-S9HJSOEB=5C=E6=98=8A=E5=A4=A9?= Date: Mon, 25 Dec 2023 13:58:59 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E8=A7=86=E8=A7=89=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E7=9A=84http=E6=96=B9=E5=BC=8F=202.=E4=B8=8E=E5=8C=97?= =?UTF-8?q?=E8=B5=B7=E8=BF=9E=E6=8E=A5=E9=87=87=E7=94=A8http=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=203.=E7=9B=98=E7=82=B9=E5=8E=86=E5=8F=B2=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9=204.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/config/ConfigProperties.java | 8 + .../web/config/RestTemplateConfig.java | 13 + .../web/controller/OrderController.java | 11 + .../web/controller/TestController.java | 10 + .../zhehekeji/web/entity/AlgorithmPojo.java | 31 +++ .../com/zhehekeji/web/entity/ResultResp.java | 190 ++++++++++++++ .../web/service/CheckLogService.java | 42 ++- .../com/zhehekeji/web/service/PlcService.java | 245 +++++++++++------- .../web/service/StockLogService.java | 8 +- .../zhehekeji/web/service/StockService.java | 2 +- .../zhehekeji/web/service/StreetService.java | 1 + .../zhehekeji/web/service/TestService.java | 2 +- .../service/algorithm/AlgorithmService.java | 49 ++++ .../web/service/ksec/KsecDataInfo.java | 11 +- .../web/service/ksec/KsecDecoder.java | 131 +--------- web/src/main/resources/application-prod.yml | 8 +- 16 files changed, 502 insertions(+), 260 deletions(-) create mode 100644 web/src/main/java/com/zhehekeji/web/config/RestTemplateConfig.java create mode 100644 web/src/main/java/com/zhehekeji/web/entity/AlgorithmPojo.java create mode 100644 web/src/main/java/com/zhehekeji/web/entity/ResultResp.java create mode 100644 web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java 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 4a68610..f9388eb 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -41,6 +41,14 @@ public class ConfigProperties { private AsyncExecutorThread asyncExecutorThread; + private VisualSense visualSense; + + @Data + public static class VisualSense{ + //连接视觉控制的url + private String url = "/api/comm/algorithm"; + private Boolean able = true; + } @Data public static class AsyncExecutorThread{ //# 异步线程配置 diff --git a/web/src/main/java/com/zhehekeji/web/config/RestTemplateConfig.java b/web/src/main/java/com/zhehekeji/web/config/RestTemplateConfig.java new file mode 100644 index 0000000..55349f3 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/config/RestTemplateConfig.java @@ -0,0 +1,13 @@ +package com.zhehekeji.web.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateConfig { + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/controller/OrderController.java b/web/src/main/java/com/zhehekeji/web/controller/OrderController.java index f1d9cea..19cd35b 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/OrderController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/OrderController.java @@ -3,12 +3,15 @@ package com.zhehekeji.web.controller; import com.github.pagehelper.PageInfo; import com.zhehekeji.common.util.ValidatorUtil; import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.entity.ResultResp; import com.zhehekeji.web.pojo.OrderSaveReq; import com.zhehekeji.web.pojo.OrderSearch; import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.service.OrderService; import com.zhehekeji.web.service.PlcCmdInfo; import com.zhehekeji.web.service.PlcService; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -62,6 +65,14 @@ public class OrderController { return Result.success(); } + @ApiOperation("随行或盘点请求接口") + @PostMapping("/orderDecoder") + public ResultResp orderDecoder(@ApiParam("工单信息") @RequestBody KsecInfo ksecInfo){ + + KsecDataInfo ksecDataInfo = plcService.orderDecoder(ksecInfo); + return ResultResp.success(ksecDataInfo); + } + @ApiOperation("发生告警") @GetMapping("/error") public Result orderError(@ApiParam("plc") @RequestParam String plcId){ diff --git a/web/src/main/java/com/zhehekeji/web/controller/TestController.java b/web/src/main/java/com/zhehekeji/web/controller/TestController.java index 4afff72..36bb531 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/TestController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/TestController.java @@ -1,6 +1,7 @@ package com.zhehekeji.web.controller; import com.zhehekeji.core.pojo.Result; +import com.zhehekeji.web.entity.AlgorithmPojo; import com.zhehekeji.web.service.RFID.RFIDSocket; import com.zhehekeji.web.service.TestService; import io.swagger.annotations.Api; @@ -39,5 +40,14 @@ public class TestController { return Result.success(); } + @ApiOperation("自动盘点") + @PostMapping("/2") + public AlgorithmPojo test(@RequestBody AlgorithmPojo algorithmPojo){ + algorithmPojo.setResult(1); + algorithmPojo.setGoodsNumberResult(algorithmPojo.getGoodsNumber()); + algorithmPojo.setGoodsTypeResult(algorithmPojo.getGoodsType()); + + return algorithmPojo; + } } diff --git a/web/src/main/java/com/zhehekeji/web/entity/AlgorithmPojo.java b/web/src/main/java/com/zhehekeji/web/entity/AlgorithmPojo.java new file mode 100644 index 0000000..4350e0e --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/AlgorithmPojo.java @@ -0,0 +1,31 @@ +package com.zhehekeji.web.entity; + +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import lombok.Data; + +@Data +public class AlgorithmPojo { + String ip; + Integer port; + private String code = ""; + private Integer streetId; + private String taskId; + private Integer ack =1; + private Integer id; + private String goodsType; + private Integer goodsNumber; + private Integer result; + private String goodsTypeResult; + private Integer goodsNumberResult; + + public static AlgorithmPojo buildAlgorithmPojo(Street street, KsecDataInfo dataInfo) { + AlgorithmPojo algorithmPojo = new AlgorithmPojo(); + algorithmPojo.setIp( street.getPlcIp()); + algorithmPojo.setPort( street.getPlcPort()); + algorithmPojo.setStreetId( street.getId()); + algorithmPojo.setTaskId( dataInfo.getTaskId()); + algorithmPojo.setGoodsNumber(dataInfo.getGoodsNumber()); + algorithmPojo.setGoodsType(dataInfo.getGoodsType()); + return algorithmPojo; + } +} diff --git a/web/src/main/java/com/zhehekeji/web/entity/ResultResp.java b/web/src/main/java/com/zhehekeji/web/entity/ResultResp.java new file mode 100644 index 0000000..1172c8d --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/entity/ResultResp.java @@ -0,0 +1,190 @@ +package com.zhehekeji.web.entity; + +import com.zhehekeji.core.pojo.HttpStatus; + +public class ResultResp { + + private String header = "LP"; + + private Integer code; + private String message; + private T data; + + public ResultResp(T data) { + this.code = HttpStatus.SUCCESS.getCode(); + this.data = data; + } + + public static ResultResp success(T data) { + ResultResp ResultResp = new ResultResp(); + ResultResp.setData(data); + ResultResp.setCode(HttpStatus.SUCCESS.getCode()); + ResultResp.setMessage("SUCCESS"); + return ResultResp; + } + + public static ResultResp success(T data, String msg) { + ResultResp ResultResp = new ResultResp(); + ResultResp.setData(data); + ResultResp.setCode(HttpStatus.SUCCESS.getCode()); + ResultResp.setMessage(msg); + return ResultResp; + } + + public static ResultResp success() { + return builder().code(HttpStatus.SUCCESS.getCode()).message("SUCCESS").build(); + } + + public static ResultResp error(Integer code, String message) { + ResultResp ResultResp = new ResultResp(); + ResultResp.setCode(code); + ResultResp.setMessage(message); + return ResultResp; + } + + public static ResultResp.ResultRespBuilder builder() { + return new ResultResp.ResultRespBuilder(); + } + + public Integer getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } + + public T getData() { + return this.data; + } + + public void setCode(Integer code) { + this.code = code; + } + + public void setMessage(String message) { + this.message = message; + } + + public void setData(T data) { + this.data = data; + } + + public boolean equals(Object o) { + if (o == this) { + return true; + } else if (!(o instanceof ResultResp)) { + return false; + } else { + ResultResp other = (ResultResp)o; + if (!other.canEqual(this)) { + return false; + } else { + label47: { + Object this$code = this.getCode(); + Object other$code = other.getCode(); + if (this$code == null) { + if (other$code == null) { + break label47; + } + } else if (this$code.equals(other$code)) { + break label47; + } + + return false; + } + + Object this$message = this.getMessage(); + Object other$message = other.getMessage(); + if (this$message == null) { + if (other$message != null) { + return false; + } + } else if (!this$message.equals(other$message)) { + return false; + } + + Object this$data = this.getData(); + Object other$data = other.getData(); + if (this$data == null) { + if (other$data != null) { + return false; + } + } else if (!this$data.equals(other$data)) { + return false; + } + + return true; + } + } + } + + protected boolean canEqual(Object other) { + return other instanceof ResultResp; + } + + public int hashCode() { + boolean PRIME = true; + int ResultResp = 1; + Object $code = this.getCode(); + ResultResp = ResultResp * 59 + ($code == null ? 43 : $code.hashCode()); + Object $message = this.getMessage(); + ResultResp = ResultResp * 59 + ($message == null ? 43 : $message.hashCode()); + Object $data = this.getData(); + ResultResp = ResultResp * 59 + ($data == null ? 43 : $data.hashCode()); + return ResultResp; + } + + public String toString() { + return "ResultResp(code=" + this.getCode() + ", message=" + this.getMessage() + ", data=" + this.getData() + ")"; + } + + public ResultResp(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ResultResp() { + } + + public String getHeader() { + return header; + } + + public void setHeader(String header) { + this.header = header; + } + + public static class ResultRespBuilder { + private Integer code; + private String message; + private T data; + + ResultRespBuilder() { + } + + public ResultResp.ResultRespBuilder code(Integer code) { + this.code = code; + return this; + } + + public ResultResp.ResultRespBuilder message(String message) { + this.message = message; + return this; + } + + public ResultResp.ResultRespBuilder data(T data) { + this.data = data; + return this; + } + + public ResultResp build() { + return new ResultResp(this.code, this.message, this.data); + } + + public String toString() { + return "ResultResp.ResultRespBuilder(code=" + this.code + ", message=" + this.message + ", data=" + this.data + ")"; + } + } +} 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 7f92e40..abf01ed 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java @@ -23,37 +23,25 @@ public class CheckLogService { private StreetService streetService; - public PageInfo list(CheckLogSearch search){ + public PageInfo list(CheckLogSearch search) { - PageHelper.startPage(search.getPageNum(),search.getPageSize()); + PageHelper.startPage(search.getPageNum(), search.getPageSize()); QueryWrapper wrapper = new QueryWrapper<>(); - if(!StringUtils.isEmpty(search.getLotnum())){ - wrapper.eq("lotnum",search.getLotnum()); - } - if(search.getStartTimestamp() != null && search.getEndTimestamp() != null){ - wrapper.ge("create_time",search.getStartTimestamp()).le("create_time",search.getEndTimestamp()); - } - if(search.getLeftRight() != null &&( search.getLeftRight() != 0 && search.getLeftRight() != -1)){ - wrapper.eq("`direction`",search.getLeftRight()); - } - if(search.getSide() != null &&( search.getSide() != 0 && search.getSide() != -1)){ - wrapper.eq("`side`",search.getSide()); - } - if(search.getRow() != null &&( search.getRow() != 0 && search.getRow() != -1)){ - wrapper.eq("`row`",search.getRow()); - } - if(search.getColumn() != null &&( search.getColumn() != 0 && search.getColumn() != -1)){ - wrapper.eq("`column`",search.getColumn()); - } - if(ToolUtil.isNotEmpty(search.getStreetId() )){ - wrapper.eq("`street_id`",search.getStreetId()); - } + wrapper.eq(!StringUtils.isEmpty(search.getLotnum()), "lotnum", search.getLotnum()) + .ge(search.getStartTimestamp() != null , "create_time", search.getStartTimestamp()) + .le(search.getEndTimestamp() != null,"create_time", search.getEndTimestamp()) + .eq(search.getLeftRight() != null && (search.getLeftRight() != 0 && search.getLeftRight() != -1), "`direction`", search.getLeftRight()) + .eq(search.getSide() != null && (search.getSide() != 0 && search.getSide() != -1), "`side`", search.getSide()) + .eq(search.getRow() != null && (search.getRow() != 0 && search.getRow() != -1), "`row`", search.getRow()) + .eq(search.getColumn() != null && (search.getColumn() != 0 && search.getColumn() != -1), "`column`", search.getColumn()) + .eq(ToolUtil.isNotEmpty(search.getStreetId()), "`street_id`", search.getStreetId()); + wrapper.orderByDesc("create_time"); - ListstockChecks = checkLogMapper.selectList(wrapper); + List stockChecks = checkLogMapper.selectList(wrapper); List streetVOS = streetService.list(); - for (CheckLog checkLog : stockChecks){ - for (StreetVO streetVO : streetVOS){ - if(streetVO.getId().equals(checkLog.getStreetId())){ + for (CheckLog checkLog : stockChecks) { + for (StreetVO streetVO : streetVOS) { + if (streetVO.getId().equals(checkLog.getStreetId())) { checkLog.setStreetName(streetVO.getName()); break; } 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 4372f0c..6bf0ae8 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -11,12 +11,16 @@ import com.zhehekeji.web.config.WebSocketConfig; import com.zhehekeji.web.entity.*; import com.zhehekeji.web.lib.*; import com.zhehekeji.web.mapper.*; +import com.zhehekeji.web.pojo.Cmd; import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.pojo.websocket.WebSocketVo; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; +import com.zhehekeji.web.service.algorithm.AlgorithmService; import com.zhehekeji.web.service.hikLightSource.HikControlSocket; import com.zhehekeji.web.service.interfaces.RfidLiveService; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecInfo; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.sick.SickSocket; import com.zhehekeji.web.util.ToolUtil; @@ -620,8 +624,10 @@ public class PlcService { WebSocketServer.sendInfo(JSONObject.toJSONString(webSocketVo), null); return JSONObject.toJSONString(webSocketVo); } + @Resource + AlgorithmService algorithmService; - public Boolean check(PlcCmdInfo plcCmdInfo, String cmdCode, String wmsCode, String wmsTrayCode) { + public AlgorithmPojo check(PlcCmdInfo plcCmdInfo, String cmdCode, KsecDataInfo dataInfo) { long startTime = System.currentTimeMillis(); Street street = streetService.getStreetByPlcId(plcCmdInfo.getPlcId()); @@ -656,100 +662,30 @@ public class PlcService { } catch (NullPointerException e) { log.error("相机{}未连接无法拍照", cameraId); } - //托盘码 - String trayCode = null; - Boolean trayCheck = Boolean.TRUE; - //如果是用扫码枪 扫 托盘码,就直接扫 - //if(configProperties.getScanCodeMode().getTray() == 2){ - log.info("扫码类型:" + configProperties.getScanCodeMode().getTray()); - //托盘使用sick扫码枪 - 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()); - 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); - } - } - } -// RFID -// RFID rfid = rfidService.getRFIDByPlc(street.getId(),plcCmdInfo.getLeftRight1()); + //视觉盘点品规个数 - Boolean trayRFIDCheck = Boolean.FALSE; - - Set tags = new HashSet<>(); - try { - RFIDCheck(plcCmdInfo, true); - Thread.sleep(1000 * configProperties.getRfid().getScanTime()); - } catch (Exception e) { - e.printStackTrace(); - } finally { - tags = RFIDStop(plcCmdInfo); - log.info("盘点rfid扫描结果:" + tags); - } - if (tags != null && tags.size() > 0) { - - if (tags.containsAll(wmsTrayCodeMapByTask.get(plcCmdInfo.getOrderNum()))) { - - - trayRFIDCheck = Boolean.TRUE; - } else { - if(trayCheck){ - trayCode = "RFID扫描失败"; - }else - trayCode += ";RFID扫描失败"; - trayRFIDCheck = Boolean.FALSE; - } - wmsTrayCodeMapByTask.remove(plcCmdInfo.getOrderNum()); - RFID rfid = rfidMapper.selectOne(new QueryWrapper().eq("street_id", street.getId())); - if (!rfidLiveService.getRfidLive(plcCmdInfo, street, wmsTrayCode)) { - rfidLiveService.rfidRemoveLive(plcCmdInfo, street, rfid); - } - rfidLiveService.rfidSave(plcCmdInfo, String.join(",", tags), street, rfid); - } - OrderInfo orderInfo = new OrderInfo(street, plcCmdInfo, 1, cmdCode); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(orderInfo.getStreetId(), plcCmdInfo.getFromDirection(), orderInfo.getSeparation(), orderInfo.getRow(), orderInfo.getColumn()); - String scanCode = null; + AlgorithmPojo algorithmPojo = algorithmService.getGoodResult(street,dataInfo); //货物使用球机扫码 - log.info("code:{}", scanCode); + log.info("盘点信息:{}", algorithmPojo.toString()); //核对异常 Integer status = 1; //托盘和货物都正确 - if (trayCheck && trayRFIDCheck ) { + if (algorithmPojo.getResult()==1 + && algorithmPojo.getGoodsNumber().equals(algorithmPojo.getGoodsNumberResult()) + && algorithmPojo.getGoodsType().equals(algorithmPojo.getGoodsTypeResult())) { status = 2; } if (stock == null) { stock = Stock.builder() .checkNum(plcCmdInfo.getOrderNum()) .lotnum(plcCmdInfo.getLotnum()) - .code(scanCode) - .wmsCode(wmsCode) - .wmsTrayCode(wmsTrayCode) - .trayCode(trayCode) + .count(algorithmPojo.getGoodsNumberResult()) + .category(algorithmPojo.getGoodsTypeResult()) .streetId(orderInfo.getStreetId()) .direction(plcCmdInfo.getFromDirection()) .side(orderInfo.getSeparation()) @@ -763,12 +699,10 @@ public class PlcService { stock.setStatus(status); stock.setLotnum(plcCmdInfo.getLotnum()); stock.setExportTime(LocalDateTime.now()); + stock.setCount(algorithmPojo.getGoodsNumberResult()); + stock.setCategory(algorithmPojo.getGoodsTypeResult()); stock.setCheckPic(path); stock.setCheckNum(plcCmdInfo.getOrderNum()); - stock.setTrayCode(trayCode); - stock.setWmsTrayCode(wmsTrayCode); - stock.setCode(scanCode); - stock.setWmsCode(wmsCode); stockMapper.updateById(stock); } checkLog(stock); @@ -779,17 +713,8 @@ public class PlcService { long end = System.currentTimeMillis(); long s = end - startTime; log.info("time:{}millisecond", s); - WebSocketVo webSocketVo = WebSocketVo.builder() - .message(plcCmdInfo) - .messageType("object") - .type("InventoryPush") - .build(); - try { - WebSocketServer.sendInfo(JSONObject.toJSONString(webSocketVo), ""); - } catch (IOException e) { - throw new RuntimeException(e); - } - return true; + + return algorithmPojo; } @@ -862,4 +787,136 @@ public class PlcService { return configProperties; } + public KsecDataInfo orderDecoder(KsecInfo ksecInfo) { + KsecDataInfo dataInfo = ksecInfo.getData(); + if (Cmd.A.name().equals(ksecInfo.getType())) { + return dataInfo; + } + String lotnum = dataInfo.getLotnum(); + PlcCmdInfo plcCmdInfo = null; + String srmNumber = null; + String cmdName = 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.setFromDirection(dataInfo.getFromDirection()); + plcCmdInfo.setToDirection(dataInfo.getToDirection()); + plcCmdInfo.setToColumn(dataInfo.getToColumn()); + plcCmdInfo.setToRow(dataInfo.getToRow()); + plcCmdInfo.setFromRow(dataInfo.getFromRow()); + plcCmdInfo.setFromColumn(dataInfo.getFromColumn()); + plcCmdInfo.setFromSide(dataInfo.getFromSide()); + plcCmdInfo.setFromSeparation(dataInfo.getFromSeparation()); + plcCmdInfo.setToSeparation(dataInfo.getToSeparation()); + plcCmdInfo.setToSide(dataInfo.getToSide()); + //左右不换过来 + if(dataInfo.getFromDirection() == 1){ + //dataInfo.setFromDirection(2); + plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); + }else { + //dataInfo.setFromDirection(1); + plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); + } + if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){ + //dataInfo.setToDirection(2); + plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); + }else { + //dataInfo.setToDirection(1); + plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); + } + srmNumber = dataInfo.getSRMNumber(); + cmdName = dataInfo.getCmdName(); + } + if (Cmd.A.name().equals(ksecInfo.getType())) { + //心跳 + log.debug("receieve heart "); + } else if (Cmd.B.name().equals(ksecInfo.getType())) { + //任务 + if (Cmd.B1.name().equals(cmdName)) { + //昆船盘点模式下也会发B1 ,但是不会发送B2 + //这里判断下,是否存在盘点批次号 若存在,既是盘点的B1,无需处理;若不存在lotnum,则是随行的B1 + if(StringUtils.isEmpty(dataInfo.getLotnum())){ + //任务开始 旋转到原点位 + gyrateCamera(plcCmdInfo,Cmd.C5.name()); + orderStart(plcCmdInfo); + }else { + log.info("check move"); + } + + } else if (Cmd.B2.name().equals(cmdName)) { + //B2 C4 一起发的,需要停止等B2 + + //这里判断是不是双伸 + if(plcCmdInfo.getSeparation2() == 2){ + //深测货架延迟 + try { + Thread.sleep(getConfigProperties().getCameraConfig().getB2OutDelayTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else { + //浅侧延迟 + try { + Thread.sleep(getConfigProperties().getCameraConfig().getB2DelayTime()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + gyrateCamera(plcCmdInfo,Cmd.C5.name()); + orderStop(plcCmdInfo); + } + } else if (Cmd.C.name().equals(ksecInfo.getType())) { + + //动作 + String code = dataInfo.getCmdName(); + log.info("action code,{},orderInfo:{}", code, plcCmdInfo.toString()); + if (Cmd.isBaseAction(code)) { + //执行动作,需要保存执行到第几步了 + Integer times = GoodsActionTimes.get(dataInfo.getCmdName()); + plcCmdInfo.setTimes(times); + code = code + "-" + plcCmdInfo.getLeftRightStr(times) + plcCmdInfo.getInOutStr(times); + //执行动作 + try { + action(plcCmdInfo, times, code); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }else { + log.info("other C code :{}",code); + } + } else if (Cmd.D.name().equals(ksecInfo.getType())) { + + //柳州去掉告警 +// String code = dataInfo.getCmdName(); +// if(code.equals(Cmd.D1.name())){ +// log.info("plcId:{},warn start",plcCmdInfo.getPlcId()); +// //根据告警code转动camera +// String warnCode = dataInfo.getWarnCode(); +// if(!StringUtils.isEmpty(warnCode)){ +// String warnCode0 = Cmd.D1.name()+"-"+warnCode.split(",")[0]; +// plcService.warnAction(plcCmdInfo,warnCode0); +// } +// plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode()); +// }else if(code.equals(Cmd.D2.name())){ +// log.info("plcId:{},warn stop",plcCmdInfo.getPlcId()); +// plcService.warnStop(plcCmdInfo.getPlcId()); +// }else { +// log.info("other D code :{}",code); +// } + } else if (Cmd.E.name().equals(ksecInfo.getType()) ) { + + String code = dataInfo.getCmdName(); + log.info("盘点指令:{}", ksecInfo); + AlgorithmPojo algorithmPojo = check(plcCmdInfo,ksecInfo.getType(),dataInfo); + ksecInfo.getData().setAckStatus(1); + dataInfo.setResult(algorithmPojo.getResult()); + dataInfo.setGoodsTypeResult(algorithmPojo.getGoodsTypeResult()); + dataInfo.setGoodsNumberResult(algorithmPojo.getGoodsNumberResult()); + log.info("盘点完成"); + } + return dataInfo; + } } diff --git a/web/src/main/java/com/zhehekeji/web/service/StockLogService.java b/web/src/main/java/com/zhehekeji/web/service/StockLogService.java index cad552a..d931535 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockLogService.java @@ -20,8 +20,12 @@ public class StockLogService { public PageInfo page(StockLogSearch search){ PageHelper.startPage(search.getPageNum(),search.getPageSize()); - List stockLogs = - stockLogMapper.selectList(new QueryWrapper().eq("`row`",search.getRow()).eq("`column`",search.getColumn()).eq("street_id",search.getStreetId()).eq("direction",search.getDirection()).eq("side",search.getSide())); + List stockLogs = stockLogMapper.selectList(new QueryWrapper() + .eq("`row`",search.getRow()) + .eq("`column`",search.getColumn()) + .eq("street_id",search.getStreetId()) + .eq("direction",search.getDirection()) + .eq("side",search.getSide())); return new PageInfo<>(stockLogs); } } 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 ae2708d..617a899 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -415,7 +415,7 @@ public class StockService { Integer oldStatus = stock.getStatus(); String oldCategory = stock.getCategory(); Integer count = stock.getCount(); - stock.setStatus(StockStatus.ERROR.getStatus()); + stock.setStatus(StockStatus.MANUAL.getStatus()); stock.setCategory(checkByMan.getCategory()); stock.setCount(checkByMan.getCount()); stockMapper.updateById(stock); diff --git a/web/src/main/java/com/zhehekeji/web/service/StreetService.java b/web/src/main/java/com/zhehekeji/web/service/StreetService.java index 9623ab8..c02779f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StreetService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StreetService.java @@ -117,6 +117,7 @@ public class StreetService { Street street = streetMapper.getStreetByPlcId(plcId); if (street == null) { log.error("巷道不存在plcId:{}", plcId); + Assert.isTrue(false, "巷道不存在"); } return street; } diff --git a/web/src/main/java/com/zhehekeji/web/service/TestService.java b/web/src/main/java/com/zhehekeji/web/service/TestService.java index b6cadc3..969ee37 100644 --- a/web/src/main/java/com/zhehekeji/web/service/TestService.java +++ b/web/src/main/java/com/zhehekeji/web/service/TestService.java @@ -45,7 +45,7 @@ public class TestService { PlcCmdInfo plcCmdInfo = new PlcCmdInfo(street.getPlcId(),taskId,1,leftRight,j,i,1,1,1,1,1,1,""); plcCmdInfo.setTimes(1); int co = j%3 + 1; - plcService.check(plcCmdInfo,"E"+co,code,code); +// plcService.check(plcCmdInfo,"E"+co,code,code); try { Thread.sleep(1000); } catch (InterruptedException e) { diff --git a/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java b/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java new file mode 100644 index 0000000..7e152fe --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/algorithm/AlgorithmService.java @@ -0,0 +1,49 @@ +package com.zhehekeji.web.service.algorithm; + +import com.baomidou.mybatisplus.extension.api.R; +import com.zhehekeji.core.util.Assert; +import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.entity.AlgorithmPojo; +import com.zhehekeji.web.entity.Street; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; + +@Service +public class AlgorithmService { + @Resource + RestTemplate restTemplate; + @Resource + ConfigProperties configProperties; + + public AlgorithmPojo getGoodResult(AlgorithmPojo algorithmPojo) { + + String url = "http://"+algorithmPojo.getIp()+":"+algorithmPojo.getPort()+configProperties.getVisualSense().getUrl(); + ResponseEntity body = null; + + try { + body = restTemplate.postForEntity(url, algorithmPojo, AlgorithmPojo.class); + }catch (RestClientException e){ + //Assert.isTrue(false,"请求失败,视觉服务未连接"); + e.printStackTrace(); + } + return body.getBody(); + } + public AlgorithmPojo getGoodResult(Street street, KsecDataInfo dataInfo ) { + AlgorithmPojo algorithmPojo = AlgorithmPojo.buildAlgorithmPojo(street, dataInfo); + if(configProperties.getVisualSense().getAble()) { + algorithmPojo = getGoodResult(algorithmPojo); + }else { + algorithmPojo.setResult(1); + algorithmPojo.setGoodsNumberResult(algorithmPojo.getGoodsNumber()); + algorithmPojo.setGoodsTypeResult(algorithmPojo.getGoodsType()); + } + return algorithmPojo; + } + +} 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..3c74758 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 @@ -1,10 +1,12 @@ package com.zhehekeji.web.service.ksec; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.springframework.core.annotation.AliasFor; @Data public class KsecDataInfo { - + @JsonProperty( value= "SRMNumber") private String SRMNumber; private String cmdName; @@ -42,5 +44,10 @@ public class KsecDataInfo { /** * 盘点批次号 */ - private String lotnum; + private String goodsType; + private Integer goodsNumber; + private String goodsTypeResult; + private Integer goodsNumberResult; + private Integer result = 1; + private String lotnum ; } 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 4dab646..123d02a 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 @@ -77,136 +77,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { // 去掉首尾标识符 body = body.substring(1, body.length()); KsecInfo ksecInfo = JSONObject.parseObject(body, KsecInfo.class); - if (Cmd.A.name().equals(ksecInfo.getType())) { - in.release(); - return ; - } - KsecDataInfo dataInfo = ksecInfo.getData(); - String lotnum = dataInfo.getLotnum(); - PlcCmdInfo plcCmdInfo = null; - String srmNumber = null; - String cmdName = 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.setFromDirection(dataInfo.getFromDirection()); - plcCmdInfo.setToDirection(dataInfo.getToDirection()); - plcCmdInfo.setToColumn(dataInfo.getToColumn()); - plcCmdInfo.setToRow(dataInfo.getToRow()); - plcCmdInfo.setFromRow(dataInfo.getFromRow()); - plcCmdInfo.setFromColumn(dataInfo.getFromColumn()); - plcCmdInfo.setFromSide(dataInfo.getFromSide()); - plcCmdInfo.setFromSeparation(dataInfo.getFromSeparation()); - plcCmdInfo.setToSeparation(dataInfo.getToSeparation()); - plcCmdInfo.setToSide(dataInfo.getToSide()); - //左右不换过来 - if(dataInfo.getFromDirection() == 1){ - //dataInfo.setFromDirection(2); - plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); - }else { - //dataInfo.setFromDirection(1); - plcCmdInfo.setLeftRight1(dataInfo.getFromDirection()); - } - if(dataInfo.getToDirection() != null && dataInfo.getToDirection() == 1){ - //dataInfo.setToDirection(2); - plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); - }else { - //dataInfo.setToDirection(1); - plcCmdInfo.setLeftRight2(dataInfo.getToDirection()); - } - srmNumber = dataInfo.getSRMNumber(); - cmdName = dataInfo.getCmdName(); - } - if (Cmd.A.name().equals(ksecInfo.getType())) { - //心跳 - log.debug("receieve heart "); - } else if (Cmd.B.name().equals(ksecInfo.getType())) { - //任务 - if (Cmd.B1.name().equals(cmdName)) { - //昆船盘点模式下也会发B1 ,但是不会发送B2 - //这里判断下,是否存在盘点批次号 若存在,既是盘点的B1,无需处理;若不存在lotnum,则是随行的B1 - if(StringUtils.isEmpty(dataInfo.getLotnum())){ - //任务开始 旋转到原点位 - plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); - plcService.orderStart(plcCmdInfo); - }else { - log.info("check move"); - } - - } else if (Cmd.B2.name().equals(cmdName)) { - //B2 C4 一起发的,需要停止等B2 - - //这里判断是不是双伸 - if(plcCmdInfo.getSeparation2() == 2){ - //深测货架延迟 - try { - Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2OutDelayTime()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }else { - //浅侧延迟 - try { - Thread.sleep(plcService.getConfigProperties().getCameraConfig().getB2DelayTime()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - plcService.gyrateCamera(plcCmdInfo,Cmd.C5.name()); - plcService.orderStop(plcCmdInfo); - } - } else if (Cmd.C.name().equals(ksecInfo.getType())) { - - //动作 - String code = dataInfo.getCmdName(); - log.info("action code,{},orderInfo:{}", code, plcCmdInfo.toString()); - if (Cmd.isBaseAction(code)) { - //执行动作,需要保存执行到第几步了 - Integer times = GoodsActionTimes.get(dataInfo.getCmdName()); - plcCmdInfo.setTimes(times); - code = code + "-" + plcCmdInfo.getLeftRightStr(times) + plcCmdInfo.getInOutStr(times); - //执行动作 - try { - plcService.action(plcCmdInfo, times, code); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }else { - log.info("other C code :{}",code); - } - } else if (Cmd.D.name().equals(ksecInfo.getType())) { - - //柳州去掉告警 -// String code = dataInfo.getCmdName(); -// if(code.equals(Cmd.D1.name())){ -// log.info("plcId:{},warn start",plcCmdInfo.getPlcId()); -// //根据告警code转动camera -// String warnCode = dataInfo.getWarnCode(); -// if(!StringUtils.isEmpty(warnCode)){ -// String warnCode0 = Cmd.D1.name()+"-"+warnCode.split(",")[0]; -// plcService.warnAction(plcCmdInfo,warnCode0); -// } -// plcService.warnStart(plcCmdInfo.getPlcId(),dataInfo.getWarnCode()); -// }else if(code.equals(Cmd.D2.name())){ -// log.info("plcId:{},warn stop",plcCmdInfo.getPlcId()); -// plcService.warnStop(plcCmdInfo.getPlcId()); -// }else { -// log.info("other D code :{}",code); -// } - } else if (Cmd.E.name().equals(ksecInfo.getType()) ) { - - //rfid的逻辑 - String code = dataInfo.getCmdName(); - log.info("盘点指令:{}", ksecInfo); - plcService.check(plcCmdInfo,ksecInfo.getType(),dataInfo.getCode(),dataInfo.getTrayCode()); - ksecInfo.getData().setAckStatus(1); - - ctx.channel().writeAndFlush(ksecInfo); - log.info("盘点完成"); - } + //找到该货位的最后一张照片与现在的照片比照 //plcService.recordStock(plcCmdInfo, dataInfo.getCode(), 0, 0); } diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 79f7fa5..c8f8e8e 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -77,7 +77,8 @@ lightSource: index: 1 # -----tray 托盘 # -----goods 货物 -# 扫码模式 0:此处不盘点 1:球机扫码 2:sick扫码枪 3:南北达RFID +# 扫码模式 0:此处不盘点 1:球机扫码 2:sick扫码枪 3:南北达RFID 4.视觉控制器 +#该项目只支持视觉控制器 scanCodeMode: tray: 1 goods: 0 @@ -87,8 +88,9 @@ scanCodeMode: - 14 # 照片 視頻保存多久 deleteFileDays: 365 - - +visualSense: + url: "/api/test/2" + able: false #rfid rfid: #rfid连续扫描时间,默认5s 单位s