diff --git a/lp.key b/lp.key new file mode 100644 index 0000000..5c02810 --- /dev/null +++ b/lp.key @@ -0,0 +1 @@ +BFEBFBFF000B06710025_38BC_21C3_A29D. \ No newline at end of file diff --git a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java index d12254f..38fec9c 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java @@ -9,7 +9,6 @@ import com.zhehekeji.web.pojo.street.StreetVO; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; import com.zhehekeji.web.service.StreetService; -import com.zhehekeji.web.service.client.*; import com.zhehekeji.web.service.putian.PTData; import com.zhehekeji.web.service.putian.PTEmptyCheckContent; import com.zhehekeji.web.service.putian.PuTianNettyClient; @@ -34,94 +33,6 @@ public class ClientTestController { @Resource private PlcService plcService; - @ApiOperation("模拟普天 空货位盘点【发起】") - @GetMapping("/emptyCheck/start") - public Result startEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row, - @ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){ -// emptyCheckService.emptyCheckStart(SRMNumber,taskId,row,startColumn,endColumn); -// String msg = ECTransmission.toEmptyCheckStartString(SRMNumber,taskId,row,startColumn,endColumn); - String msg = ""; - ClientChanel.write(msg, SRMNumber); - return Result.success(msg); - } - - @ApiOperation("模拟普天 空货位盘点 【结束】") - @GetMapping("/emptyCheck/stop") - public Result stopEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row, - @ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){ -// String msg = ECTransmission.toEmptyCheckEndString(SRMNumber,taskId,row,startColumn,endColumn); - String msg = ""; - ClientChanel.write(msg,SRMNumber); - //获取空货位的结果信息 - // 返回给普天 - //Street street = streetService.getStreetByPlcId(SRMNumber); - - //String shevel = null; - Map map = emptyCheckService.getAllEmptyStatus(SRMNumber,row,startColumn,endColumn); -// map.forEach((k,v)->{ -// PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,k,v); -// PTData ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// }); -// if(street.getLeftType() == 0){ -// //单伸 -// String SingleLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row,startColumn,endColumn); -// shevel = "L01"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleLeft); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// String SingleRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row,startColumn,endColumn); -// shevel = "R01"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleRight); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// }else { -// String SingleInLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row,startColumn,endColumn); -// shevel = "L01"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleInLeft); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// String SingleInRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,2,row,startColumn,endColumn); -// shevel = "R01"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleInRight); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// String SingleOutLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,1,row,startColumn,endColumn); -// shevel = "L02"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleOutLeft); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// String SingleOutRight = emptyCheckService.getEmptyStatus(SRMNumber,taskId,2,2,row,startColumn,endColumn); -// shevel = "R02"; -// ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleOutRight); -// ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); -// PuTianNettyClient.write(ptData); -// } - return Result.success(msg); - } - - @ApiOperation("模拟普天 盘点具体货位 第一步 【发起盘点】") - @GetMapping("/stockCheck/start") - public Result startStockCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, - @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位(02深),0001是X,0002是Y") @RequestParam String goodsLocation,@ApiParam("品规")@RequestParam String code,@ApiParam("数量") @RequestParam Integer count, - @ApiParam("是否是虚拟检测 Y:是 N:不是") @RequestParam String V){ - - SCTransmission scTransmission = new SCTransmission(SRMNumber,taskId,goodsLocation,code,count,V); - plcService.checkStart(scTransmission); - String msg = scTransmission.toString(); - ClientChanel.write(msg,SRMNumber); - return Result.success(); - } - - @ApiOperation("模拟普天 盘点具体货位 第二步 【取货到载货台完成,客户端拍照】") - @GetMapping("/stockCheck/goodsMoveOver") - public Result goodsMoveOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId){ - - SCTransmission scTransmission = new SCTransmission(SRMNumber,taskId); - String msg = scTransmission.toSC02String(); - ClientChanel.write(msg,SRMNumber); - return Result.success(); - } // @ApiOperation("模拟普天 货物入库,顶部拍照 【货位入库】") // @GetMapping("/intoStock/picOver") @@ -136,39 +47,4 @@ public class ClientTestController { // return Result.success(ptData.toString()); // } - @ApiOperation("模拟普天 货物入库完成 【货物入库完成】") - @GetMapping("/intoStock/goodsOver") - public Result goodsOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, - @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位(02深),0001是X,0002是Y") @RequestParam String goodsLocation){ - //拍入库完成后的照片 - - String picPath = plcService.IntoStockOver(SRMNumber,taskId,goodsLocation); - //向客户端发送读码指令,等待客户端返回条码 - ISTransmission isTransmission = new ISTransmission(SRMNumber,taskId,goodsLocation); - //为防万一,先清除code - ClientCodeMap.removeCode(SRMNumber); - ClientChanel.write(isTransmission.toString(),SRMNumber); - //发送结果给普天 - //若1分钟内仍为收到 则放弃 - Long start = System.currentTimeMillis(); - while (ClientCodeMap.getCode(SRMNumber) == null && (System.currentTimeMillis()-start)<60000){ - try { - Thread.sleep(300l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - String code = ClientCodeMap.getCode(SRMNumber); - PTData ptData = PTData.IntoStock04(SRMNumber,taskId,goodsLocation,picPath,code); - PuTianNettyClient.write(ptData); - return Result.success(); - } - - - @ApiOperation("获取正在盘点的数据,包括条码、图片等信息") - @GetMapping("/realtimeCheck") - public Result realtimeCheck(@ApiParam("巷道标识") @RequestParam String SRMNumber){ - return Result.success(RealtimeCheckMap.getRealtimeCheck(SRMNumber)); - } - } 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 3953d00..0a91065 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StockController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StockController.java @@ -71,6 +71,11 @@ public class StockController { return Result.success(stockService.statusByRowColumn(rowColumnStatus)); } + @ApiOperation(value = "下一个盘点信息") + @RequestMapping(value = "/nextOne", method = RequestMethod.POST) + public Result nextOne(@RequestBody Stock stock) { + return Result.success(stockService.nextOne(stock.getId())); + } // @GetMapping("/list") // @ApiOperation(value = "盘点页面 返回map key:货架号 value:库存信息") // public Result>> stockByStreet(@RequestParam(required = true) Integer streetId) { @@ -134,6 +139,13 @@ public class StockController { return Result.success(stockService.checkCorrect(stockCheck)); } + @ApiOperation(value = "人工复核错误") + @RequestMapping(value = "/checkCorrectErr", method = RequestMethod.POST) + public Result checkErr(@RequestBody StockCheck stockCheck) { + validatorUtil.validate(stockCheck); + return Result.success(stockService.checkCorrectErr(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/controller/StreetController.java b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java index c66bfbf..af44444 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/StreetController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/StreetController.java @@ -1,15 +1,18 @@ package com.zhehekeji.web.controller; +import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.zhehekeji.core.pojo.Result; import com.zhehekeji.web.config.ConfigProperties; +import com.zhehekeji.web.entity.LightSource; import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.pojo.street.StreetSearch; import com.zhehekeji.web.pojo.street.StreetVO; import com.zhehekeji.web.service.LightSourceService; import com.zhehekeji.web.service.StreetService; -import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.LCTransmission; +import com.zhehekeji.web.service.damLightSource.JYDAMEquip; +import com.zhehekeji.web.service.damLightSource.JYDamHelper; +import com.zhehekeji.web.service.hikLightSource.HikControlSocket; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -77,42 +80,101 @@ public class StreetController { @GetMapping("/lightSource/open") @ApiOperation(value = "开启光源") public Result openLightSource(){ - ClientChanel.keys().forEach(k->{ - LCTransmission lcTransmission = new LCTransmission(k,1); - ClientChanel.write(lcTransmission.toString(),k); + List lightSources = lightSourceService.getLightSource(); + + lightSources.forEach(lightSource -> { + JSONObject obj = JSONObject.parseObject(configProperties.getLightSource().getInfo()); + if(configProperties.getLightSource().getType() == 1){ + + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.openDO(equip,configProperties.getLightSource().getIndex()); + //暂时关闭灯源状态查询 + /*Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + log.info("ip:{},status:{}",lightSource.getIp(),status);*/ + equip.DisConnect(); + + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1); + }else if (configProperties.getLightSource().getType() == 3){ + LightSourceService.lightController(lightSource.getIp(),lightSource.getPort(),1); + } + }); + return Result.success(); } @GetMapping("/lightSource/close") @ApiOperation(value = "关闭光源") public Result closeLightSource(){ - ClientChanel.keys().forEach(k->{ - LCTransmission lcTransmission = new LCTransmission(k,0); - ClientChanel.write(lcTransmission.toString(),k); + + List lightSources = lightSourceService.getLightSource(); + + lightSources.forEach(lightSource -> { + JSONObject obj = JSONObject.parseObject(configProperties.getLightSource().getInfo()); + if(configProperties.getLightSource().getType() == 1){ + + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.closeDO(equip,obj.getInteger("index")); + Integer status = JYDamHelper.ReadStatus(equip,obj.getInteger("num"),obj.getInteger("index")); + log.info("ip:{},status:{}",lightSource.getIp(),status); + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),0); + }else if (configProperties.getLightSource().getType() == 3){ + LightSourceService.lightController(lightSource.getIp(),lightSource.getPort(),0); + } + }); + return Result.success(); } @GetMapping("/lightSource/open/{streetId}") @ApiOperation(value = "开启单个巷道光源") public Result openStreetLightSource(@PathVariable Integer streetId){ - Street street = streetService.streetById(streetId); - LCTransmission lcTransmission = new LCTransmission(street.getPlcId(),1); - ClientChanel.write(lcTransmission.toString(),street.getPlcId()); + List lightSources = lightSourceService.getLightSourceByStreetId(streetId); + lightSources.forEach(lightSource -> { + if(configProperties.getLightSource().getType() == 1){ + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.openDO(equip,configProperties.getLightSource().getIndex()); + Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + log.info("ip:{},status:{}",lightSource.getIp(),status); + equip.DisConnect(); + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),1); + }else if (configProperties.getLightSource().getType() == 3){ + LightSourceService.lightController(lightSource.getIp(),lightSource.getPort(),1); + } + + }); + return Result.success(); } @GetMapping("/lightSource/close/{streetId}") @ApiOperation(value = "关闭单个巷道光源") public Result closeStreetLightSource(@PathVariable Integer streetId){ - Street street = streetService.streetById(streetId); - LCTransmission lcTransmission = new LCTransmission(street.getPlcId(),0); - ClientChanel.write(lcTransmission.toString(),street.getPlcId()); + List lightSources = lightSourceService.getLightSourceByStreetId(streetId); + lightSources.forEach(lightSource -> { + if(configProperties.getLightSource().getType() == 1){ + JYDAMEquip equip = JYDamHelper.Connect(lightSource.getIp(),lightSource.getPort()); + JYDamHelper.closeDO(equip,configProperties.getLightSource().getIndex()); + Integer status = JYDamHelper.ReadStatus(equip,configProperties.getLightSource().getNum(),configProperties.getLightSource().getIndex()); + log.info("ip:{},status:{}",lightSource.getIp(),status); + equip.DisConnect(); + }else if(configProperties.getLightSource().getType() == 2){ + HikControlSocket.openLight(lightSource.getIp(),lightSource.getPort(),configProperties.getLightSource().getIndex(),0); + }else if (configProperties.getLightSource().getType() == 3){ + LightSourceService.lightController(lightSource.getIp(),lightSource.getPort(),0); + } + + }); + return Result.success(); } + } 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 d82887a..248c4d9 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java +++ b/web/src/main/java/com/zhehekeji/web/entity/CheckLog.java @@ -11,6 +11,8 @@ import java.time.LocalDateTime; @Data public class CheckLog { + @TableId(type = IdType.AUTO) + private Integer id; private Integer streetId; @@ -39,14 +41,20 @@ public class CheckLog { private String trayCode; private Integer status; + private String taskId; private String checkNum; private String pic; + @TableField(exist=false) + private String[] pics; private String lotnum; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; + @TableField(exist=false) + private String streetName; + } 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 3370f6e..f5f7ee0 100644 --- a/web/src/main/java/com/zhehekeji/web/entity/Stock.java +++ b/web/src/main/java/com/zhehekeji/web/entity/Stock.java @@ -66,6 +66,10 @@ public class Stock { @ApiModelProperty("列号") private Integer column; + @TableField(value = "`task_Id`") + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("0:未盘点 1:盘点异常 2:核对正确") private Integer status; diff --git a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java index 3552de4..b5df342 100644 --- a/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java +++ b/web/src/main/java/com/zhehekeji/web/lib/CameraDelayTask.java @@ -13,9 +13,11 @@ public class CameraDelayTask implements Delayed { private Integer cameraId; + private String cameraPlcId; private LocalDateTime startTime; private LocalDateTime endTime; + private String command; private String path; @@ -40,6 +42,12 @@ public class CameraDelayTask implements Delayed { this.delayTime = delayTime; } + public CameraDelayTask(String cameraPlcId, String command, long delayTime) { + this.cameraPlcId = cameraPlcId; + this.command = command; + this.executeTime = System.currentTimeMillis()+delayTime; + this.delayTime = delayTime; + } @Override public long getDelay(TimeUnit unit) { return unit.convert(this.executeTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS); 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..c47736b 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,11 @@ public enum Cmd { D2, E, E1, + SC, + SC01, + SC02, + SC03, + SC04, ; public static Boolean isBaseAction(String code){ 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 a1e65b4..0e6135f 100644 --- a/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java +++ b/web/src/main/java/com/zhehekeji/web/service/CheckLogService.java @@ -4,13 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.zhehekeji.web.entity.CheckLog; +import com.zhehekeji.web.entity.Street; import com.zhehekeji.web.mapper.CheckLogMapper; +import com.zhehekeji.web.mapper.StreetMapper; 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.List; +import java.util.Map; +import java.util.stream.Collectors; @Service public class CheckLogService { @@ -18,29 +23,29 @@ public class CheckLogService { @Resource private CheckLogMapper checkLogMapper; - public PageInfo list(CheckLogSearch search){ + @Resource + private StreetMapper streetMapper; + + public PageInfo list(CheckLogSearch search) { + List street = streetMapper.list(); + Map streetMap = street.stream().collect(Collectors.toMap(Street::getId, Street::getName)); + - 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){ - wrapper.eq("`direction`",search.getLeftRight()); - } - if(search.getSide() != null && search.getSide() > 0){ - wrapper.eq("`side`",search.getSide()); - } - if(search.getRow() != null && search.getRow() > 0){ - wrapper.eq("`row`",search.getRow()); - } - if(search.getColumn() != null && search.getColumn() > 0){ - wrapper.eq("`column`",search.getColumn()); + 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, "`direction`", search.getLeftRight()) + .eq(search.getSide() != null && search.getSide() > 0, "`side`", search.getSide()) + .eq(search.getRow() != null && search.getRow() > 0, "`row`", search.getRow()) + .eq(search.getColumn() != null && search.getColumn() > 0, "`column`", search.getColumn()); + List stockChecks = checkLogMapper.selectList(wrapper); + + for (CheckLog checkLog :stockChecks){ + checkLog.setStreetName(streetMap.get(checkLog.getStreetId())); + checkLog.setPics(checkLog.getPic().split(";")); } - ListstockChecks = checkLogMapper.selectList(wrapper); return new PageInfo<>(stockChecks); } diff --git a/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java b/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java index 5da8df6..c1d3a2b 100644 --- a/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java +++ b/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java @@ -12,7 +12,6 @@ import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.pojo.empty.EmptyCheckSearch; import com.zhehekeji.web.pojo.stock.CheckStatus; import com.zhehekeji.web.pojo.stock.RowColumnStatus; -import com.zhehekeji.web.service.client.ECTransmission; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -221,43 +220,6 @@ public class EmptyCheckService { } return map; } - - public void emptyCheckLog(ECTransmission ecTransmission){ - Street street = streetService.getStreetByPlcId(ecTransmission.getSRMNumber()); - if(street == null){ - log.error(" no SRMNumer:{}",ecTransmission.getSRMNumber()); - return; - } - EmptyCheck emptyCheck = emptyCheckMapper.getOne(street.getId(),ecTransmission.getDirection(),ecTransmission.getSide(),ecTransmission.getRow(),ecTransmission.getColumn()); - - if(emptyCheck == null){ - emptyCheck = new EmptyCheck(); - emptyCheck.setStreetId(street.getId()); - emptyCheck.setOrderNum(ecTransmission.getTaskId()); - emptyCheck.setSide(ecTransmission.getSide()); - emptyCheck.setDirection(ecTransmission.getDirection()); - //0:未盘点 1:有货 2:无货 - if(ecTransmission.getIsEmpty().equals("0")){ - emptyCheck.setEmptyStatus(2); - }else { - emptyCheck.setEmptyStatus(1); - } - emptyCheck.setRow(ecTransmission.getRow()); - emptyCheck.setColumn(ecTransmission.getColumn()); - }else { - emptyCheck.setOrderNum(ecTransmission.getTaskId()); - if(ecTransmission.getIsEmpty().equals("0")){ - log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); - emptyCheck.setEmptyStatus(2); - }else { - log.info("goodsLocation:{}, status: {}", ecTransmission.getGoodsLocation(), ecTransmission.getIsEmpty()); - emptyCheck.setEmptyStatus(1); - } - } - emptyCheckMapper.insertOrUpdate(emptyCheck); - - } - public CheckStatus emptyStatusByRowColumn(RowColumnStatus rowColumnStatus){ CheckStatus checkStatus = new CheckStatus(); checkStatus.setColumnStart(rowColumnStatus.getColumnStart()); diff --git a/web/src/main/java/com/zhehekeji/web/service/InitService.java b/web/src/main/java/com/zhehekeji/web/service/InitService.java index aedd8b6..3f621a6 100644 --- a/web/src/main/java/com/zhehekeji/web/service/InitService.java +++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java @@ -12,6 +12,7 @@ import com.zhehekeji.web.mapper.CameraMapper; import com.zhehekeji.web.mapper.SensorGunMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.service.client.ClientChanel; +import com.zhehekeji.web.service.client.GetPhotoDelayExecutor; import com.zhehekeji.web.service.client.NettyServer; import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.putian.PuTianNettyClient; @@ -43,6 +44,8 @@ public class InitService implements ApplicationRunner { private StreetMapper streetMapper; @Resource private PuTianNettyClient puTianNettyClient; + @Resource + private KsecNettyClient ksecNettyClient; @Resource private ConfigProperties configProperties; @@ -51,9 +54,9 @@ public class InitService implements ApplicationRunner { private PlcService plcService; @Resource private CameraService cameraService; - @Resource - private NettyServer nettyServer; + @Resource + NettyServer nettyServer; @Bean public CameraControlLoginModule cameraControlLoginModule(){ CameraControlLoginModule cameraControlLoginModule = null; @@ -99,15 +102,18 @@ public class InitService implements ApplicationRunner { if(ksec != null){ StreetConn.init(1,"ksec"); try { - puTianNettyClient.createClient(ksec); + ksecNettyClient.createClient(ksec); }catch (Exception e){ + ksecNettyClient.reconnect(0); log.error("kesc connect error,url:{},port:{}",ksec.getIp(),ksec.getPort()); } }else { + log.error("ksec no config"); } - //TaskDelayExecutor.runMp4DownloadExecutor(); + TaskDelayExecutor.runMp4DownloadExecutor(); + GetPhotoDelayExecutor.runExecutor(); } class LoginThread extends Thread{ diff --git a/web/src/main/java/com/zhehekeji/web/service/LightSourceService.java b/web/src/main/java/com/zhehekeji/web/service/LightSourceService.java index 3f60d19..388ca6c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/LightSourceService.java +++ b/web/src/main/java/com/zhehekeji/web/service/LightSourceService.java @@ -6,6 +6,12 @@ import com.zhehekeji.web.mapper.LightSourceMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; @@ -15,6 +21,54 @@ public class LightSourceService { @Autowired private LightSourceMapper lightSourceMapper; + /** + * + * @param ip + * @param port + * @param stat 1开启,2关闭 + */ + public static void lightController(String ip ,Integer port,Integer stat){ + Socket socket = new Socket(); + OutputStream os = null; + InputStream is = null; + try { + socket.connect(new InetSocketAddress(ip,port),3000); + os = socket.getOutputStream(); + is = socket.getInputStream(); + int i = 0; + socket.setSoTimeout(1000); + String startCmd = "<1,"+stat+",post>"; + byte[]bytes = startCmd.getBytes(StandardCharsets.UTF_8); + os.write(bytes); + + + } catch (IOException e) { + + }finally { + if(os != null){ + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if(is != null){ + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + socket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + } + public List getLightSource(){ return lightSourceMapper.selectByMap(new HashMap<>()); } 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 cf506e4..f8ab50e 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -9,12 +9,17 @@ import com.zhehekeji.web.lib.*; import com.zhehekeji.web.mapper.*; import com.zhehekeji.web.pojo.OrderVO; import com.zhehekeji.web.pojo.camera.CameraPtzPojo; +import com.zhehekeji.web.pojo.stock.StockStatus; import com.zhehekeji.web.service.RFID.RFIDMap; import com.zhehekeji.web.service.RFID.RFIDSocket; -import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.ECResultMessage; -import com.zhehekeji.web.service.client.SCTransmission; import com.zhehekeji.web.entity.EmptyCheckPic; +import com.zhehekeji.web.service.client.ClientChanel; +import com.zhehekeji.web.service.client.GetPhotoDelayExecutor; +import com.zhehekeji.web.service.client.TransmissionPojo; +import com.zhehekeji.web.service.client.TransmissionType; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecInfo; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -28,6 +33,7 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; + /** * @Description plc信号指令处理类 * 对plcId做同步处理,防止内存中保存的正在运行的订单信息错乱 @@ -470,100 +476,6 @@ public class PlcService { @Resource private LightSourceMapper lightSourceMapper; - /** - * 给到客户端 - * @param plcCmdInfo - * @param cmdCode - * @param wmsCode - * @param wmsTrayCode - * @return - */ - public Boolean check(PlcCmdInfo plcCmdInfo,String cmdCode,String wmsCode,String wmsTrayCode){ - long startTime = System.currentTimeMillis(); - long end = System.currentTimeMillis(); - long s = end - startTime; - log.info("time:{}millisecond",s); - return true; - } - - /** - * 保存盘点记录 - * @param scTransmission - * @return - */ - public Stock checkStart(SCTransmission scTransmission){ - log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); - Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); - Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); - Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); - Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); - Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); - if(old == null){ - old = new Stock(); - old.setCount(null); - old.setCode(null); - old.setCategory(null); - old.setCheckNum(scTransmission.getTaskNo()); - old.setLotnum(scTransmission.getTaskNo()); - old.setRow(row); - old.setColumn(column); - old.setDirection(leftRight); - old.setSide(inout); - old.setWmsCode(scTransmission.getGoodsLocation()); - old.setWmsCategory(scTransmission.getCategory()); - old.setWmsCount(scTransmission.getCount()); - old.setStreetId(street.getId()); - old.setExportTime(LocalDateTime.now()); - old.setWmsTrayCode(""); - stockMapper.insert(old); - }else { - old.setLotnum(scTransmission.getTaskNo()); - old.setExportTime(LocalDateTime.now()); - old.setWmsCode(scTransmission.getGoodsLocation()); - old.setWmsCount(scTransmission.getCount()); - old.setCheckNum(scTransmission.getTaskNo()); - old.setWmsTrayCode(""); - stockMapper.updateById(old); - } - return old; - } - - /** - * 保存盘点结果 - * @param scTransmission - * @return - */ - public Stock checkEnd(SCTransmission scTransmission){ - log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - Street street = streetService.getStreetByPlcId(scTransmission.getSRMNumber()); - Integer row = Integer.valueOf(scTransmission.getGoodsLocation().substring(8,10)); - Integer column = Integer.valueOf(scTransmission.getGoodsLocation().substring(5,8)); - Integer leftRight = Integer.valueOf(scTransmission.getGoodsLocation().substring(4,5)); - Integer inout = Integer.valueOf(scTransmission.getGoodsLocation().substring(11,12)); - Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); - if(stock != null){ - stock.setCount(scTransmission.getRstCount()); - stock.setCategory(scTransmission.getRstCategory()); - stock.setCode(scTransmission.getGoodsLocation()); - stock.setWmsCategory(scTransmission.getCategory()); - //盘点正确 :2 - //盘点异常 :1 - Integer status = scTransmission.getRstCount().equals(stock.getWmsCount()) && scTransmission.getRstCategory().equals(stock.getWmsCategory()) ? 2: 1; - stock.setStatus(status); - stock.setTrayCode(scTransmission.getTrayNo()); - stockMapper.updateById(stock); - log.info("update check info,taskId:{},SRMNumber:{},goodsLocation:{}",stock.getCheckNum(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - }else { - log.info("check end,but no stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",scTransmission.getTaskNo(),scTransmission.getSRMNumber(),scTransmission.getGoodsLocation()); - stock = new Stock(); - stock.setCount(scTransmission.getCount()); - stock.setCode(scTransmission.getCode()); - stock.setStatus(1); - } -// checkLog(stock); - return stock; - } public void checkLog(Stock stock){ CheckLog checkLog = new CheckLog(); @@ -660,84 +572,8 @@ public class PlcService { } - /** - * 相机转动,拍照,并返回两张照片地址 - * 顶部拍照 C1 - * @param SRMNumber - * @return - */ - public String IntoStockSave(String SRMNumber,String taskId,String goodsLocation,String picName){ - - String ip ="http://"+ ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"; - String[] pics = picName.split(";"); - String picNameDataBase = ip+pics[0]+";"+ ip+pics[1]; - Order oldOrder = orderMapper.getOneByOrderNum(taskId); - oldOrder.setIntoStockPic(picNameDataBase); - orderMapper.updateById(oldOrder); - return ip+pics[0]+"*"+ ip+pics[1]; - } - - /** - * 相机转动,拍照,并返回图片地址 - * 顶部拍照 C1 - * @return - */ - @Transactional - public synchronized List emptyCheck04(ECResultMessage ecResultMessage ){ - EmptyCheckPic emptyCheckPic = new EmptyCheckPic( - ecResultMessage.getEmptyCheckMsg().substring(ecResultMessage.getEmptyCheckMsg() - .lastIndexOf(";",ecResultMessage.getEmptyCheckMsg().lastIndexOf(";")-1)+1, - ecResultMessage.getEmptyCheckMsg().lastIndexOf(",")),ecResultMessage.getTaskId(),ecResultMessage.getSRMNumber()); - Street street = streetService.getStreetByPlcId(ecResultMessage.getSRMNumber()); - if (street == null){ - log.error("SRMNum: {} 对应的巷道不存在", ecResultMessage.getSRMNumber()); - } - String leftOrRight = emptyCheckPic.getLeftOrRight().equals("2") ? "-R" :"-L"; - //南京烟草物流只有一个相机 - Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); - - //浅相机 - //转动拍照 - gyrateCameraByCode(cameraId,"C2-IN"+leftOrRight); - //等待2s再拍照 - try { - Thread.sleep(3000l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - String path = PathUtil.createFileNameByRowColumn("jpg",cameraId, - Integer.parseInt(emptyCheckPic.getRow()), - Integer.parseInt(emptyCheckPic.getColumn()), - emptyCheckPic.getInputString()+emptyCheckPic.getTaskCode()+"-IN"); - - cameraCapture(cameraId,false,0l,path ); - emptyCheckPic.setShallowPic(path); - if( emptyCheckPic.getLeftOrRight().equals("1") ?street.getLeftType().equals(1) :street.getRightType().equals(1)){ - - //深相机 - //转动拍照 - gyrateCameraByCode(cameraId,"C2-OUT"+leftOrRight); - //等待2s再拍照 - try { - Thread.sleep(3000l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - path = path.replace("-IN","-OUT"); - cameraCapture(cameraId,false,0l,path ); - emptyCheckPic.setDeepPic(path ); - } - emptyCheckPicMapper.insert(emptyCheckPic); - List emptyCheckPics = emptyCheckPicMapper.selectList(new QueryWrapper().eq("task_code",emptyCheckPic.getTaskCode())); - return emptyCheckPics; - } - public String getWebPicPath(){ - return configProperties.getIP()+":9007/api/pic/"; - } /** * 相机转动,拍照,并返回图片地址 * @param SRMNumber @@ -776,4 +612,117 @@ public class PlcService { cameraCapture(cameraId,false,0l,path); return configProperties.getIP()+":9007/api/pic/"+path; } + + public void check(PlcCmdInfo plcCmdInfo, KsecDataInfo dataInfo ) { + Street street = streetService.getStreetByPlcId(dataInfo.getSRMNumber()); + + //开始盘点具体货位 + if(dataInfo.getCmdName().equals("SC01")){ + CheckLog checkLog = new CheckLog(); + checkLog.setStreetId(street.getId()); + checkLog.setLotnum(dataInfo.getLotnum()); + checkLog.setDirection(dataInfo.getFromDirection()); + checkLog.setSide(dataInfo.getFromSide()); + checkLog.setRow(dataInfo.getFromRow()); + checkLog.setColumn(dataInfo.getFromColumn()); + checkLog.setTaskId((dataInfo.getTaskId())); + //默认未盘点 + checkLog.setStatus(StockStatus.PENDING.getStatus()); + checkLog.setCreateTime(LocalDateTime.now()); + checkLog.setCategory(dataInfo.getTypeNum()); + checkLog.setCount(dataInfo.getQuantity()); + checkLogMapper.insert(checkLog); + + Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),dataInfo.getFromDirection(),dataInfo.getFromSide(),dataInfo.getFromRow(),dataInfo.getFromColumn()); + if(stock== null) { + stock = new Stock(); + } + stock.setStreetId(street.getId()); + stock.setCheckNum(checkLog.getId().toString()); + stock.setLotnum(dataInfo.getLotnum()); + stock.setDirection(dataInfo.getFromDirection()); + stock.setSide(dataInfo.getFromSide()); + stock.setRow(dataInfo.getFromRow()); + stock.setColumn(dataInfo.getFromColumn()); + stock.setCategory(dataInfo.getTypeNum()); + stock.setCount(dataInfo.getQuantity()); + stock.setTaskId((dataInfo.getTaskId())); + //默认未盘点 + stock.setStatus(StockStatus.PENDING.getStatus()); + stock.setExportTime(LocalDateTime.now()); + if(stock.getId() == null){ + stockMapper.insert(stock); + }else stockMapper.updateById(stock); + TransmissionPojo transmissionPojo = new TransmissionPojo( checkLog ,street); + ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.ST)); + } + //取货完成进行拍照 + else if(dataInfo.getCmdName().equals("SC02")){ + CheckLog checkLog = checkLogMapper.selectOne(new QueryWrapper() + .eq("direction",dataInfo.getFromDirection()) + .eq("street_id",street.getId()) + .orderByDesc("id").last("limit 1")); + TransmissionPojo transmissionPojo = new TransmissionPojo( checkLog,street ); + if(GetPhotoDelayExecutor.cameraDelayTasks.size()==0){ + //队列中没有任务,发送取图指令 + ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.GPS)); + + } + //将取图指令放入队列等待上条取图结束,或队列超时调用 + GetPhotoDelayExecutor.addCameraDelayTask(street.getPlcId(),transmissionPojo.toString(TransmissionType.GPS),2000L); + + + // ClientChanel.get(dataInfo.getSRMNumber()).writeAndFlush(); + + } + } + + public void visualCalculationResults(TransmissionPojo transmissionPojo) { + CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId()); + Stock stock = stockMapper.selectOne(new QueryWrapper().eq("check_Num",checkLog.getId())); + if(transmissionPojo.getResult() != null && transmissionPojo.getResult() == 1){ + checkLog.setStatus(StockStatus.SUCCESS.getStatus()); + stock.setStatus(StockStatus.SUCCESS.getStatus()); + }else { + checkLog.setStatus(StockStatus.ERROR.getStatus()); + stock.setStatus(StockStatus.ERROR.getStatus()); + } + if (transmissionPojo.getPicsPath() != null && transmissionPojo.getPicsPath().length > 0){ + String pics = join(transmissionPojo.getPicsPath(), ";"); + checkLog.setPic(pics); + stock.setCheckPic(pics); + } + checkLogMapper.updateById(checkLog); + stockMapper.updateById(stock); + } + public static String join(String[] array, String separator) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; i++) { + sb.append(array[i]); + if (i < array.length - 1) { + sb.append(separator); + } + } + return sb.toString(); + } + + public KsecInfo getKsecDataInfo(TransmissionPojo transmissionPojo,String type) { + KsecDataInfo ksecDataInfo = new KsecDataInfo(); + CheckLog checkLog = checkLogMapper.selectById(transmissionPojo.getCheckId()); + ksecDataInfo.setLotnum(checkLog.getLotnum()); + ksecDataInfo.setSRMNumber(transmissionPojo.getStreetNumber()); + ksecDataInfo.setCmdName(type); + ksecDataInfo.setTaskId(checkLog.getTaskId().toString()); + ksecDataInfo.setFromDirection(checkLog.getDirection()); + ksecDataInfo.setFromColumn(checkLog.getColumn()); + ksecDataInfo.setFromRow(checkLog.getRow()); + ksecDataInfo.setFromSide(checkLog.getSide()); + ksecDataInfo.setCode(checkLog.getCode()); + ksecDataInfo.setTrayCode(checkLog.getTrayCode()); + ksecDataInfo.setLotnum(checkLog.getLotnum()); + + + KsecInfo ksecInfo = new KsecInfo("KC","SC",ksecDataInfo); + return ksecInfo; + } } 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 e6c29d9..1de95da 100644 --- a/web/src/main/java/com/zhehekeji/web/service/StockService.java +++ b/web/src/main/java/com/zhehekeji/web/service/StockService.java @@ -16,7 +16,6 @@ import com.zhehekeji.web.mapper.StockMapper; import com.zhehekeji.web.mapper.StreetMapper; import com.zhehekeji.web.pojo.category.PageSearch; import com.zhehekeji.web.pojo.stock.*; -import com.zhehekeji.web.service.client.ClientChanel; import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -328,20 +327,6 @@ public class StockService { stock.setStatus(0); } - List stockLogs = stockLogMapper.selectList(new QueryWrapper().eq("`row`",stockCheck.getRow()).eq("`column`",stockCheck.getColumn()).eq("street_id",stockCheck.getStreetId()).eq("direction",stockCheck.getDirection()).eq("side",stockCheck.getSide()).orderByDesc("create_time").last(" limit 2")); - if(stockLogs.size() == 1){ - stock.setOveroperationPic(stockLogs.get(0).getPic()); - }else if(stockLogs.size() == 2){ - stock.setOveroperationPic(stockLogs.get(0).getPic()); - stock.setPreoperationPic(stockLogs.get(1).getPic()); - } - String ip ="http://"+ street.getPlcIp()+":9009/pic/"+stock.getCode()+"/"+stock.getCheckNum()+"/"; - stock.setSidePic1(String.format("%s1.png",ip)); - stock.setSidePic2(String.format("%s2.png",ip)); - stock.setSidePic3(String.format("%s3.png",ip)); - stock.setSidePic4(String.format("%s4.png",ip)); - stock.setTopPic1(String.format("%s5.png",ip)); - stock.setTopPic2(String.format("%s6.png",ip)); return stock; } @@ -371,8 +356,6 @@ public class StockService { public Stock checkCorrect(StockCheck stockCheck) { Stock stock = stockInfo(stockCheck); Assert.isTrue(stock != null && stock.getId() != null, "该货位暂时没有记录"); - Integer oldStatus = stock.getStatus(); - 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()); @@ -380,6 +363,22 @@ public class StockService { checkLog(stock); return stock; } + /** + * 核对单子 + * 核对正确 + * + * @param stockCheck + */ + public Stock checkCorrectErr(StockCheck stockCheck) { + Stock stock = stockInfo(stockCheck); + Assert.isTrue(stock != null && stock.getId() != null, "该货位暂时没有记录"); + + log.info("check stock correct, street_id:{},direction:{},side:{},row:{},column:{}", stockCheck.getStreetId(),stockCheck.getDirection(),stockCheck.getSide(), stockCheck.getRow(), stockCheck.getColumn()); + stock.setStatus(StockStatus.ERROR.getStatus()); + stockMapper.updateById(stock); + checkLog(stock); + return stock; + } @Resource private CheckLogMapper checkLogMapper; @@ -419,6 +418,17 @@ public class StockService { return stock; } + public Stock nextOne(Long id) { + QueryWrapper stockQueryWrapper = new QueryWrapper<>(); + + stockQueryWrapper.eq("status","0") + .ne(id != null,"id",id) + .orderByDesc("export_time").last("limit 1"); + Stock stock =stockMapper.selectOne(stockQueryWrapper); + + return stock; + } + // public void init(String shelveId, Integer row, Integer column){ // Map map = new HashMap<>(); // map.put("shelve_id",shelveId); 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 ca9ad33..c3ff314 100644 --- a/web/src/main/java/com/zhehekeji/web/service/TestService.java +++ b/web/src/main/java/com/zhehekeji/web/service/TestService.java @@ -42,7 +42,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/client/CETransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java deleted file mode 100644 index d06acf3..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 与客户端建立连接的传输体 - */ -public class CETransmission { - - private static String HEADER = "CE"; - private static String Split = "&"; - - private String SRMNumber; - - public String toString(){ - return HEADER + Split + SRMNumber; - } - - public static String getHEADER(){ - return HEADER; - } - - public CETransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - } - - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java b/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java deleted file mode 100644 index a785ae0..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.zhehekeji.web.service.client; - -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Map; - -public class ClientCodeMap { - - /** - * 线程安全的map - */ - protected static Map codeMap = new Hashtable<>(); - - public static void putCode(String SRMNumber,String code){ - codeMap.put(SRMNumber,code); - } - - public static String getCode(String SRMNumber){ - return codeMap.get(SRMNumber); - } - - public static void removeCode(String SRMNumber){ - codeMap.remove(SRMNumber); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java index f8d061e..5ead82b 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/Decoder.java @@ -2,8 +2,13 @@ package com.zhehekeji.web.service.client; import com.zhehekeji.web.entity.EmptyCheckPic; import com.zhehekeji.web.entity.Stock; +import com.zhehekeji.web.lib.CameraDelayTask; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; +import com.zhehekeji.web.service.ksec.KsecDataInfo; +import com.zhehekeji.web.service.ksec.KsecDecoder; +import com.zhehekeji.web.service.ksec.KsecInfo; +import com.zhehekeji.web.service.ksec.KsecNettyClient; import com.zhehekeji.web.service.putian.*; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -27,9 +32,15 @@ public class Decoder extends DelimiterBasedFrameDecoder { private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); - public static String PT_CLIENT = "PT"; - private static String WCS_CLIENT = "WCS"; - private static String EMPTY_CLIENT = "EMPTY"; + public static String START_CHECK = "ST"; + private static String GET_PHOTO = "GP"; + private static String GET_PHOTO_END = "GPE"; + private static String RETURN_CHECK = "RTE"; + private static String END_CHECK = "EN"; + private static String HEART_BEAT = "HB"; + + + private static String END_STRING = "$"; private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,15,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); @@ -79,211 +90,39 @@ public class Decoder extends DelimiterBasedFrameDecoder { @Override public void run() { String body = in.toString(Charset.forName("UTF-8")); - tcpLogger.info("receive client:{}, data length:{}",body, body.length()); - //普天发送的报文里带"#" - if(body.contains("#")){ - ClientChanel.connect(WCS_CLIENT, ctx.channel()); - tcpLogger.info("client:{} connect", WCS_CLIENT); - PTData ptData = new PTData(body+END_STRING); - if(ptData.getType().equals(PTData.HEART_TYPE) || - ptData.getFlowControl().equals(PTData.FLOW_A)){ - //心跳 什么都不处理,因为netty长链接,断开会感知 - //普天回复的消息也不用处理 - } -// else if (ptData.getType().equals(PT_CLIENT)){ -// ClientChanel.connect(WCS_CLIENT, ctx.channel()); -// tcpLogger.info("client:{} connect", WCS_CLIENT); -// } - else if (ptData.getType().equals(PTData.EMPTY_CHECK_01)){ - log.info("空货位检测开始"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_01); - PuTianNettyClient.write(ptDataSend); - PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(emptyCheckContent.getSRMNUmber(),emptyCheckContent.getTaskNo()); - //通知客户端开始检测 - ClientChanel.write(startEmptyCheckStr,emptyCheckContent.getSRMNUmber()); - in.release(); - } - else if (ptData.getType().equals(PTData.EMPTY_CHECK_02)){ - log.info("空货位检测结束"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_02); - PuTianNettyClient.write(ptDataSend); - PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); -// //通知客户端结束检测 - ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber()); - //ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber()); - in.release(); - } - else if (ptData.getType().equals(PTData.STOCK_CHECK_01)){ - log.info("具体货位盘点"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_01); - PuTianNettyClient.write(ptDataSend); - //发送给客户端 - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent()); - SCTransmission scTransmission = new SCTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); - plcService.checkStart(scTransmission); - String scTransmissionStr = scTransmission.toString(); - ClientChanel.write(scTransmissionStr,ptCheckContent.getSRMNUmber()); - in.release(); - } - else if (ptData.getType().equals(PTData.STOCK_CHECK_02)){ - log.info("盘点具体货位 ,货物已取到载货台"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_02); - PuTianNettyClient.write(ptDataSend); - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent()); - SCTransmission scTransmission = new SCTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); - String scTransmissionStr = scTransmission.toSC02String(); - ClientChanel.write(scTransmissionStr,ptCheckContent.getSRMNUmber()); - } - else if (ptData.getType().equals(PTData.Into_Stock_01)){ - - //这边入库顶部拍照要换成用客户端顶部的两个相机拍照,上位机发送的IS01入库拍照指令后给客户端发送顶部拍照指令,客户端拍到两张照片后会发送拍照信息给web端,web端再发给上位机。 - log.info("普天入库顶部拍照"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_01); - //保存order标表 - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent(),","); - String picPath = plcService.IntoStock(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - - //返回普天 - PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); - - tcpLogger.info("普天入库顶部拍照发送给客户端:"+"IS&" +ptOrderContent.getSRMNUmber()+"&"+ ptOrderContent.getTaskNo()+"&"+ ptOrderContent.getGoodsLocation(), ptOrderContent.getSRMNUmber()); - ClientChanel.write("IS&" +ptOrderContent.getSRMNUmber()+"&"+ ptOrderContent.getTaskNo()+"&"+ ptOrderContent.getGoodsLocation(), ptOrderContent.getSRMNUmber()); - //PuTianNettyClient.write(resData); - -// -// log.info("入库顶部拍照"); -// PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_01); -// PuTianNettyClient.write(ptDataSend); -// //保存order标表 -// PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); -// String srmNumber = ptOrderContent.getSRMNUmber(); -//// if (srmNumber.length() < 3){ -//// Integer number = Integer.valueOf(srmNumber); -//// srmNumber = String.format("%03d", number); -//// } -// String picPath = plcService.IntoStock(srmNumber, ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); -// //返回普天 -// PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); -// PuTianNettyClient.write(resData); - } - else if (ptData.getType().equals(PTData.Into_Stock_03)){ - log.info("入库侧面拍照"); - PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_03); - PuTianNettyClient.write(ptDataSend); - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent(), ","); - String srmNumber = ptOrderContent.getSRMNUmber(); -// if (srmNumber.length() < 3){ -// Integer number = Integer.valueOf(srmNumber); -// srmNumber = String.format("%03d", number); -// } - String picPath = plcService.IntoStockOver(srmNumber, ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(), picPath, ptOrderContent.getGoodsLocation()); - //重置相机水平方向 - plcService.verticalAdjustmentByStreet( ptOrderContent.getSRMNUmber()); - PuTianNettyClient.write(resData); - } + tcpLogger.info("receive client:{}, data length:{}", body, body.length()); + TransmissionPojo transmissionPojo = new TransmissionPojo(body); + //心跳进行连接 + if(HEART_BEAT.equals(transmissionPojo.getHeader())){ + ClientChanel.connect(transmissionPojo.getStreetNumber(),ctx.channel()); } - else{ - if(body.startsWith(HBTransmission.getHEADER())) { - //心跳 - HBTransmission hbTransmission = new HBTransmission(body); - //回复客户端心跳 - ctx.channel().writeAndFlush(hbTransmission.toString()); - ClientChanel.connect(hbTransmission.getSRMNumber(), ctx.channel()); - //tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber()); - in.release(); - } else if(body.startsWith(SCTransmission.getHeader())){ - //盘点指令 - SCTransmission scTransmission = new SCTransmission(body); - if(scTransmission.isCollectOver()){ - //给普天发送数据采集完毕指令 - PTData ptData = PTData.StockCheck03(scTransmission.getSRMNumber(),scTransmission.getTaskNo(),"1"); - PuTianNettyClient.write(ptData); - }else { - //收到盘点结果 - Stock stock = plcService.checkEnd(scTransmission); - //将盘点结果发给普天 - PTData ptData = PTData.StockCheck04(scTransmission); - PuTianNettyClient.write(ptData); - //添加到实时信息里 - RealtimeCheckMap.put(scTransmission.getSRMNumber(),scTransmission.checkInfo()); - //更新盤點統計 -// emptyCheckService.updateCheckLastTime(tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),stock.getCode()); - } - in.release(); - }else if(body.startsWith(CETransmission.getHEADER())){ - //客户端建立连接 - CETransmission ceTransmission = new CETransmission(body); - //回复客户端,建立连接完成 - - ctx.channel().writeAndFlush(ceTransmission.toString()); - ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel()); - tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber()); - in.release(); + //获取照片后发送进行计算逻辑,并在拍照队列中取出拍照发送 + else if(GET_PHOTO_END.equals(transmissionPojo.getHeader())){ + ClientChanel.get(transmissionPojo.getStreetNumber()).writeAndFlush(transmissionPojo.toString(TransmissionType.RTS)); + + //发送给上位机 + KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo,"SC03"); + KsecNettyClient.write(ksecInfo); + CameraDelayTask cameraDelayTask = GetPhotoDelayExecutor.getNext(transmissionPojo.getStreetNumber()); + if (cameraDelayTask != null) { + TransmissionPojo pojo = new TransmissionPojo(cameraDelayTask.getCommand()); + ClientChanel.get(pojo.getStreetNumber()).writeAndFlush(pojo.toString(TransmissionType.GPS)); } - else if(body.startsWith(ECTransmission.getHEADER())){ - //空货位盘点 - ECResultMessage ecResultMessage = new ECResultMessage(body); - log.info("empty result: {}", body); - //将库位的盘点结果发给普天 - StringBuffer strBff = new StringBuffer(ecResultMessage.getSRMNumber()); - strBff.append("*").append(ecResultMessage.getTaskId()).append("*").append(ecResultMessage.getEmptyCheckMsg()); -// strBff.append(",").append(ecTransmission.getIsEmpty()); - String content = strBff.toString(); - PTData ptData = new PTData(content, PTData.FLOW_R, PTData.EMPTY_CHECK_03); + } + //照片和结果保存,并发送给上位机 + else if(RETURN_CHECK.equals(transmissionPojo.getHeader())){ + //保存数据 + plcService.visualCalculationResults(transmissionPojo); - PuTianNettyClient.write(ptData); - //返回结尾货位两侧的照片(EC04)(易高发送) - //照片 - List emptyCheckPics = plcService.emptyCheck04(ecResultMessage); - String webPicPath = plcService.getWebPicPath(); - if(emptyCheckPics.size() > 1){ - StringBuffer strBffPic = new StringBuffer(ecResultMessage.getSRMNumber()); - strBffPic.append(",").append(ecResultMessage.getTaskId()).append(",").append(EmptyCheckPic.getShelfCodeEntityConverter(emptyCheckPics,webPicPath)); - PTData ptDataEmptyCheck04 = new PTData(strBffPic.toString(), PTData.FLOW_R, PTData.EMPTY_CHECK_04); - PuTianNettyClient.write(ptDataEmptyCheck04); - } - //保存空货位条码 -// EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode()); - //保存空货位信息 - List ecTransmissionList = ecResultMessage.getEcTransMissionList(); - for (ECTransmission ecTransmission : ecTransmissionList) { - emptyCheckService.emptyCheckLog(ecTransmission); - } - in.release(); - } - else if(body.startsWith("IS")){ - //这边入库顶部拍照要换成用客户端顶部的两个相机拍照,上位机发送的IS01入库拍照指令后给客户端发送顶部拍照指令,客户端拍到两张照片后会发送拍照信息给web端,web端再发给上位机。 - log.info("客户端入库顶部拍照"); - //保存order标表 - PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(body.substring(3)); - String picPath = plcService.IntoStockSave(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),ptOrderContent.getPics()); - //返回普天 - PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); - PuTianNettyClient.write(resData); - tcpLogger.info("客户端返回信息:"+resData); + //发送给上位机 + KsecInfo ksecInfo = plcService.getKsecDataInfo(transmissionPojo,"SC04"); + ksecInfo.getData().setTypeNum(transmissionPojo.getCategory()); + ksecInfo.getData().setQuantity(transmissionPojo.getCount()); + ksecInfo.getData().setCheckRlt(transmissionPojo.getResult()); + KsecNettyClient.write(ksecInfo); - in.release(); - } - else if(body.startsWith("DC")){ - //客户端断开连接 - String [] strings = body.split("&"); - if(strings != null && strings.length == 2){ - tcpLogger.info("client:{} disConnect", strings[1]); - ClientChanel.disConnect(strings[1]); - } - in.release(); - } -// else if (body.contains("EMPTY_CLIENT")){ -// ClientChanel.connect(EMPTY_CLIENT_NAME, ctx.channel()); -// tcpLogger.info("client:{} connect", EMPTY_CLIENT_NAME); -// in.release(); -// } } } } - } diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java b/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java deleted file mode 100644 index 54a0f12..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ECResultMessage.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.zhehekeji.web.service.client; - -import java.util.ArrayList; -import java.util.List; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -@Slf4j - -@Data -/** - * 空货位盘点 - * - * EC&6&17455&UL061001050111,1;UL061002050111,0;UL061003050111,1;>(算法客户端发送) - * UL061001050111,1 货位号,是否有货(0:无货,1:有货) - */ - -public class ECResultMessage { - private static String HEADER = "EC"; - private static String SPLIT = "&"; - private static String SPLIT_EMP = ";"; - private String SRMNumber; - private String taskId; - private String emptyCheckMsg; - private List ecTransMissionList; - - public ECResultMessage(String body){ - ecTransMissionList = new ArrayList<>(); - log.info("body: {}", body); - String [] strings = body.split(SPLIT); - if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - taskId = strings[2]; - emptyCheckMsg = strings[3]; - log.info("srmNumber:{}, taskId:{},emptyCheckMsg:{}", SRMNumber, taskId, emptyCheckMsg); - String[] checkMsgStrs = emptyCheckMsg.split(SPLIT_EMP); - for (String checkMsgStr : checkMsgStrs) { - if (!checkMsgStr.isEmpty() && checkMsgStr.contains(",")){ - log.info("checkMsgStr: {}", checkMsgStr); - String[] msgStrs = checkMsgStr.split(","); - String goodsLocation = msgStrs[0]; - String empty = msgStrs[1]; - ECTransmission ecTransmission = new ECTransmission(SRMNumber, taskId, goodsLocation, empty); - ecTransMissionList.add(ecTransmission); - } - } - } - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java deleted file mode 100644 index 7b0b07d..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 空货位盘点 - * - * ■ EC,SRM001,BY201710250940368150001,START;(服务端发送) - * ■ EC,SRM001,BY201710250940368150001,R010002001(货位号), Y/N;(客户端对每个货位回复有无,对于双伸的货位需要回复两次(浅深货位)) - * ■ EC,SRM001,BY201710250940368150001,END ;(服务端发送)。 - * - */ -public class ECTransmission { - - private static String HEADER = "EC"; - private static String Split = "&"; - -// private static String Split = ","; - - private String SRMNumber; - - private String taskId; - - private String type; - - private String goodsLocation; - - private String isEmpty; - - private String emptyMsg; - - /** - * 左右 1:左 2:右 - */ - private Integer direction; - - /** - * 深浅 1:浅 2:深 - */ - private Integer side; - - private Integer row; - - private Integer column; - - private Integer startColumn; - - private Integer endColumn; - - /** - * 货位条码 - */ - private String originCode; - -// public String toString(){ -// return HEADER + Split + SRMNumber; -// } - - public static String getHEADER(){ - return HEADER; - } - - public ECTransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - taskId = strings[2]; -// goodsLocation = strings[3]; -// isEmpty = strings[4]; - emptyMsg = strings[3]; -// direction = goodsLocation.substring(0).equals("L") ? 1:2; -// side = Integer.valueOf(goodsLocation.substring(2,3)); -// row = Integer.valueOf(goodsLocation.substring(3,6)); -// column = Integer.valueOf(goodsLocation.substring(6,9)); - }else if(strings != null && strings.length == 8 && HEADER.equals(strings[0])){ - //todo length == 9 - SRMNumber = strings[1]; - taskId = strings[2]; - startColumn = Integer.valueOf(strings[4]); - endColumn = Integer.valueOf(strings[5]); - goodsLocation = strings[6]; - direction = goodsLocation.substring(0).equals("L") ? 1:2; - side = Integer.valueOf(goodsLocation.substring(2,3)); - row = Integer.valueOf(goodsLocation.substring(3,6)); - column = Integer.valueOf(goodsLocation.substring(6,9)); - //todo 7 8 - originCode = "ddddd"; - isEmpty = strings[7]; - } - } - - public ECTransmission(String srmNumber, String id, String location, String empty){ - SRMNumber = srmNumber; - taskId = id; - goodsLocation = location; - isEmpty = empty; - - // UL061001050111 - row = Integer.valueOf(goodsLocation.substring(8,10)); - column = Integer.valueOf(goodsLocation.substring(5,8)); - direction = Integer.valueOf(goodsLocation.substring(4,5)); - side = Integer.valueOf(goodsLocation.substring(11,12)); - } - - /** - * 空托盘检测开始信息 - * @return - */ - public static String toEmptyCheckStartString(String SRMNumber, String taskId){ - StringBuffer sb = new StringBuffer(HEADER); - sb.append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append("START"); - return sb.toString(); - } - - /** - * 空托盘检测 结束信号 - * @return - */ - public static String toEmptyCheckEndString(String SRMNumber, String taskId){ - StringBuffer sb = new StringBuffer(HEADER); - sb.append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append("END"); - return sb.toString(); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java b/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java deleted file mode 100644 index 69dcebf..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * 空货位扫描到的全部条码 - */ -@Data -public class EmptyCheckCodeInfo { - - private static Map> allCode = new HashMap<>(); - - public static void start(String SRMNumber, String taskNo){ - String key = String.format("{}-{}",SRMNumber, taskNo); - allCode.remove(key); - } - - public static void addCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn,String code){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); - Set codes = allCode.get(key); - if(codes == null){ - codes = new HashSet<>(); - } - codes.add(code); - } - - public static Set getAllCode(String SRMNumber, String taskNo){ - String key = String.format("{}-{}",SRMNumber, taskNo); - return allCode.get(key); - } - - public static void stop(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); - allCode.remove(key); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java new file mode 100644 index 0000000..c7b600d --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/GetPhotoDelayExecutor.java @@ -0,0 +1,64 @@ +package com.zhehekeji.web.service.client; + +import com.zhehekeji.web.lib.CameraDelayTask; +import com.zhehekeji.web.lib.TaskDelayExecutor; + +import java.util.Map; +import java.util.concurrent.*; + +public class GetPhotoDelayExecutor { + public static DelayQueue cameraDelayTasks = new DelayQueue<>(); + private static ExecutorService exec = Executors.newFixedThreadPool(1); + + public static void addCameraDelayTask(String cameraPlcId, String getPhotoCommand, long time) { + + CameraDelayTask cameraDelayTask = new CameraDelayTask(cameraPlcId, getPhotoCommand, time); + cameraDelayTasks.add(cameraDelayTask); + } + + public static void remove(String getPhotoCommand, String cameraPlcId) { + cameraPlcId = cameraPlcId.intern(); + synchronized (cameraPlcId) { + Object[] cameraDelayTask = cameraDelayTasks.toArray(); + for (Object cameraDelayTask1 : cameraDelayTask) { + CameraDelayTask cameraDelayTask2 = (CameraDelayTask) cameraDelayTask1; + if (cameraDelayTask2.getCommand().equals(getPhotoCommand)) { + cameraDelayTasks.remove(cameraDelayTask2); + } + } + } + } + + + public static CameraDelayTask getNext(String cameraPlcId) { + Object[] cameraDelayTask = cameraDelayTasks.toArray(); + if (cameraDelayTask.length > 0) { + CameraDelayTask cameraDelayTask2 = (CameraDelayTask) cameraDelayTask[0]; + remove(cameraDelayTask2.getCommand(), cameraPlcId); + return cameraDelayTask2; + } + return null; + + } + + public static void runExecutor() { + exec.execute(new GetPhotoDelayExecutor.Consumer()); + } + + private static class Consumer implements Runnable { + + @Override + public void run() { + while (true) { + try { + + cameraDelayTasks.remove(cameraDelayTasks.take()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + +} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java deleted file mode 100644 index 779812b..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -/** - * 与客户端的心跳 - */ -public class HBTransmission { - - private static String HEADER = "HB"; - private static String Split = "&"; - - private String SRMNumber; - - public String toString(){ - return HEADER + Split + SRMNumber; - } - - public static String getHEADER(){ - return HEADER; - } - - public HBTransmission(String body){ - String [] strings = body.split(Split); - if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ - SRMNumber = strings[1]; - } - - } - - public static void main(String[] args) { - HBTransmission ceTransmission= new HBTransmission("HB&1"); - System.out.println(ceTransmission); - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java deleted file mode 100644 index 26d0e93..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; - -@Data -public class ISTransmission { - - private static String HEADER = "IS"; - - private static String Split = ","; - - private String SRMNumber; - - private String taskId; - - private String goodsLocation; - - private String code; - - public String toString(){ - StringBuffer sb = new StringBuffer(); - sb.append(HEADER).append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append(goodsLocation); - if(code != null){ - sb.append(Split).append(code); - } - return sb.toString(); - } - - public ISTransmission(String SRMNumber,String taskId,String goodsLocation){ - this.SRMNumber = SRMNumber; - this.goodsLocation = goodsLocation; - this.taskId = taskId; - } - - public ISTransmission(String msg){ - String [] strings = msg.split(Split); - HEADER = strings[0]; - SRMNumber = strings[1]; - goodsLocation = strings[2]; - if(strings.length == 4){ - code = strings[3]; - } - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java deleted file mode 100644 index d2329c9..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/LCTransmission.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.zhehekeji.web.service.client; - - -import lombok.Data; - -@Data -/** - * 开关灯 - */ -public class LCTransmission { - - private static String HEADER = "LC"; - - private String SRMNumber; - - /** - * 1:开 0:关 - */ - private Integer status; - - public String toString(){ - return HEADER + "&" + SRMNumber+"&"+status; - } - - public static String getHEADER(){ - return HEADER; - } - - public LCTransmission(String SRMNumber,Integer status){ - this.SRMNumber = SRMNumber; - this.status = status; - } - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java b/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java deleted file mode 100644 index 5f767f0..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/MessageConverter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zhehekeji.web.service.client; - -import org.springframework.stereotype.Component; - -/** - * 普天的消息 转给盘点客户端 - */ -@Component -public class MessageConverter { - - - -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java b/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java deleted file mode 100644 index 59289ab..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/RealtimeCheckMap.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.zhehekeji.web.service.client; - -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.HashMap; -import java.util.Map; - -@Data -public class RealtimeCheckMap { - - private static Map map = new HashMap<>(); - - public static void put(String SRMNumber,CheckInfo checkInfo){ - checkInfo.setTime(LocalDateTime.now()); - String ip ="http://"+ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"+checkInfo.getCheckCode()+"/"+checkInfo.getTaskNo()+"/"; - checkInfo.setIP(ip); - checkInfo.setSidePic1(String.format("%s1.png",ip)); - checkInfo.setSidePic2(String.format("%s2.png",ip)); - checkInfo.setSidePic3(String.format("%s3.png",ip)); - checkInfo.setSidePic4(String.format("%s4.png",ip)); - checkInfo.setTopPic1(String.format("%s5.png",ip)); - checkInfo.setTopPic2(String.format("%s6.png",ip)); - map.put(SRMNumber,checkInfo); - } - - public static CheckInfo getRealtimeCheck(String SRMNumber){ - return map.get(SRMNumber); - } - - @Data - public static class CheckInfo{ - - private Integer row; - - private Integer column; - - private Integer side; - - private Integer direction; - - private String WMSCode; - - private String WMSCategory; - - private Integer WMSCount; - - private String checkCode; - - private String checkCategory; - - private Integer checkCount; - - private Integer status; - - private String topPic1; - - private String topPic2; - - private String sidePic1; - - private String sidePic2; - - private String sidePic3; - - private String sidePic4; - - private String IP; - - private String taskNo; - - @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss") - private LocalDateTime time; - - public Integer getStatus(){ - if(WMSCode.equals(checkCount) && checkCount.equals(WMSCount)){ - return 1; - } - return 0; - } - - - - - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java deleted file mode 100644 index 591cad1..0000000 --- a/web/src/main/java/com/zhehekeji/web/service/client/SCTransmission.java +++ /dev/null @@ -1,181 +0,0 @@ -package com.zhehekeji.web.service.client; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -/** - * 盘点指令 - * 与客户端的传输内容 - * - */ -@Data -public class SCTransmission { - - private static String header = "SC"; - - private String SRMNumber; - - /** - * 搬运任务号 - */ - private String taskNo; - - /** - * 货位号 - */ - private String goodsLocation; - - /** - * 托盘号 - */ - private String trayNo; - - - private String code; - /** - * 上位机下发品规 - */ - private String category; - private Integer count; - - /** - * 盘点结果 - */ - private String rstCategory; - private Integer rstCount; - - private String visualTest; - - private String isDisConnect; - - /** - * 盘点结果是否正确 - */ - private String checkRst; - - /** - * 左右 1:左 2:右 - */ - private Integer direction; - - /** - * 深浅 1:浅 2:深 - */ - private Integer side; - - private static String Split = "&"; - - private boolean collectOver; - - public String toString(){ - StringBuffer sb = new StringBuffer(header); - sb.append(Split).append(SRMNumber).append(Split).append(goodsLocation).append(Split) - .append(taskNo).append(Split).append(code) - .append(Split).append(count).append(Split).append(visualTest); - return sb.toString(); - } - - public String toSC02String(){ - return header+Split+SRMNumber+Split+taskNo; - } - - public static String getHeader(){ - return header; - } - - // public SCTransmission(String body){ -// String [] strings = body.split(Split); -// if(strings != null && strings.length >= 9 && strings[0].equals(header)){ -// if(strings.length == 9){ -// SRMNumber = strings[1]; -// taskNo = strings[2]; -// goodsLocation = strings[3]; -// trayNo = strings[4]; -// code = strings[5]; -// count = Integer.valueOf(strings[6]); -// visualTest = strings[7]; -// isDisConnect = strings[8]; -// direction = goodsLocation.substring(0).equals("L") ? 1:2; -// side = Integer.valueOf(goodsLocation.substring(2,3)); -// //checkType = strings[7]; -// collectOver = false; -// if("Y".equals(isDisConnect)){ -// //需要拆分之前的 -// } -// } -// -// }else if(strings.length == 3){ -// //是盘点数据采集完成的信号 -// collectOver = true; -// SRMNumber = strings[1]; -// taskNo = strings[2]; -// //goodsLocation = strings[3]; -// } -// } -//TM&6&UL062009050111&2121&11010019&30&NULL&NULL - public SCTransmission(String body){ - log.info("tmtrans body: {}", body); - String [] strings = body.split(Split); - if(strings != null && strings.length >= 9 && strings[0].equals(header)){ - if(strings.length == 9){ - SRMNumber = strings[1]; - goodsLocation = strings[2]; - taskNo = strings[3]; - category = strings[4]; - count = Integer.valueOf(strings[5]); - rstCategory = strings[6]; - rstCount = Integer.valueOf(strings[7]); - checkRst = strings[8]; - collectOver = false; - log.info("taskNo:{}, srmNumber:{}, goodsLocation:{}", taskNo, SRMNumber, goodsLocation); -// if("Y".equals(isDisConnect)){ -// //需要拆分之前的 -// } - } - - }else if(strings.length == 3){ - //是盘点数据采集完成的信号 - collectOver = true; - SRMNumber = strings[1]; - taskNo = strings[2]; - //goodsLocation = strings[3]; - } - } - - public SCTransmission(String SRMNumber,String taskId,String goodsLocation,String code,Integer count,String visual){ - this.SRMNumber = SRMNumber; - this.taskNo = taskId; - this.goodsLocation = goodsLocation; - this.code = code; - this.count = count; - this.trayNo = "Unknown"; - this.visualTest = visual; - } - - public SCTransmission(String SRMNumber,String taskId){ - this.SRMNumber = SRMNumber; - this.taskNo = taskId; - } - - public RealtimeCheckMap.CheckInfo checkInfo(){ - log.info("cheinfo start"); - RealtimeCheckMap.CheckInfo checkInfo = new RealtimeCheckMap.CheckInfo(); - Integer row = Integer.valueOf(goodsLocation.substring(8,10)); - Integer column = Integer.valueOf(goodsLocation.substring(5,8)); - Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5)); - Integer inout = Integer.valueOf(goodsLocation.substring(11,12)); - checkInfo.setDirection(leftRight); - checkInfo.setColumn(column); - checkInfo.setRow(row); - checkInfo.setSide(inout); - checkInfo.setTaskNo(this.taskNo); -// checkInfo.setWMSCategory(category); -// checkInfo.setWMSCount(count); -// checkInfo.setWMSCode(code); - checkInfo.setCheckCode(goodsLocation); - checkInfo.setCheckCount(rstCount); - //checkInfo.setCheckCategory(); - return checkInfo; - } -} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java new file mode 100644 index 0000000..72d7bbf --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionPojo.java @@ -0,0 +1,75 @@ +package com.zhehekeji.web.service.client; + +import com.zhehekeji.web.entity.CheckLog; +import com.zhehekeji.web.entity.Street; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class TransmissionPojo { + private String data; + private String[] dataArray; + private String header; + private String streetNumber;//巷道标识符 + private String taskId; + private Integer checkId; + private Integer direction;//左右 + private Integer count; //数量 + private String category; //品规 + private String[] picsPath; //品规 + + + private Integer result; + public TransmissionPojo(CheckLog checkLog , Street street){ + this.checkId = checkLog.getId(); + this.streetNumber = street.getPlcId(); + this.taskId = checkLog.getLotnum(); + this.direction = checkLog.getDirection(); + this.count = checkLog.getCount(); + this.category = checkLog.getCategory(); + + } + public String toString(TransmissionType type) { + this.header = type.toString(); + if (type == TransmissionType.ST) { + return "ST&" + streetNumber + "&" + checkId + "&" + taskId + "&" + direction ; + }else if (type == TransmissionType.GPS) { + return "GPS&" + streetNumber + "&" + checkId + "&" + taskId + "&" + direction+ "&" + category + "&" + count; + }else if (type == TransmissionType.RTS) { + return "RTS&" + streetNumber + "&" + checkId + "&" + taskId + "&" + direction + "&" + category + "&" + count; + } + return ""; + } + + public TransmissionPojo(String data) { + this.data = data; + data = data.replace(">", ""); + this.dataArray = data.split("&"); + this.header = dataArray[0]; + this.streetNumber = dataArray[1]; + if (dataArray.length > 2) { + this.checkId = Integer.valueOf(dataArray[2]); + this.taskId = (dataArray[3]); + this.direction = Integer.valueOf(dataArray[4]); + } + + if (dataArray.length > 5) { + this.category = dataArray[5]; + this.count = Integer.valueOf(dataArray[6]); + } + if (dataArray.length > 7) { + this.result = Integer.valueOf(dataArray[7]); + this.picsPath = dataArray[8].split(";"); + + } + + } + + public static void main(String[] args) { + TransmissionPojo transmissionPojo = new TransmissionPojo("RT&6&2121&1&S001&25&1&1.jpg;2.jpg>"); + System.out.println(transmissionPojo); + } +} diff --git a/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java new file mode 100644 index 0000000..a6273a7 --- /dev/null +++ b/web/src/main/java/com/zhehekeji/web/service/client/TransmissionType.java @@ -0,0 +1,12 @@ +package com.zhehekeji.web.service.client; + +public enum TransmissionType { + ST , + GPS , + GPE , + RTS , + RTE , + EN , + ZHB ; + +} 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..343472e 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 @@ -38,6 +38,9 @@ public class KsecDataInfo { private Integer ackStatus; private String trayCode; + private String typeNum; + private Integer quantity; + private Integer checkRlt; /** * 盘点批次号 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 625ee81..b5221bf 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 @@ -33,7 +33,7 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { 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; @@ -49,8 +49,8 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { log.debug("no data"); return null; } - //KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService); - //threadPoolExecutor.execute(kescRunnable); + KescRunnable kescRunnable = new KescRunnable(in,ctx,plcService); + threadPoolExecutor.execute(kescRunnable); return null; } @@ -86,17 +86,12 @@ 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); - } +// //左右换过来 +// if(dataInfo.getFromDirection() == 1){ +// dataInfo.setFromDirection(2); +// }else { +// dataInfo.setFromDirection(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(); @@ -179,33 +174,10 @@ public class KsecDecoder extends DelimiterBasedFrameDecoder { // }else { // log.info("other D code :{}",code); // } - } else if (Cmd.E.name().equals(ksecInfo.getType())) { - - //盘点 - //转球机到盘点位 然后拍照 + } else if (Cmd.SC.name().equals(ksecInfo.getType())) { + //智能盘点 -// 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); - }else { - plcService.RFIDStop(plcCmdInfo); - } + plcService.check(plcCmdInfo, dataInfo); } //找到该货位的最后一张照片与现在的照片比照 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 66b0f4f..36a64be 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 @@ -46,6 +46,7 @@ public class KsecNettyClient { client.handler(new KescFilter(heart, plcService,this)); // 连接服务端 channel = client.connect(ksec.getIp(), ksec.getPort()).sync().channel(); + } /** @@ -76,7 +77,9 @@ public class KsecNettyClient { try { createClient(ksec); } catch (Exception e) { - channel.close(); + if (channel != null) { + channel.close(); + } //没连上 继续 log.error("reconnect error num:{}", num); //关闭当前链接 diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java index aec3118..d3a4c34 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java @@ -3,7 +3,6 @@ package com.zhehekeji.web.service.putian; //import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils; import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.service.client.ClientChanel; -import com.zhehekeji.web.service.client.SCTransmission; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -142,35 +141,35 @@ public class PTData { /** * 盘点结果 */ - public static PTData StockCheck04(SCTransmission scTransmission){ - StringBuffer contentSB = new StringBuffer(); - String SRMNumber = scTransmission.getSRMNumber(); - String goodsLocation = scTransmission.getGoodsLocation(); - String taskId = scTransmission.getTaskNo(); - String smokeCategory = scTransmission.getCategory(); - String smokeCount = scTransmission.getCount().toString(); - String smokeRstCategory = scTransmission.getRstCategory(); - Integer rstCount = scTransmission.getRstCount(); - String smokeRstCount = rstCount.toString(); - String checkRst = scTransmission.getCheckRst(); - String ip ="http://"+ClientChanel.getIpFromId(scTransmission.getSRMNumber())+":9009/pic/"+scTransmission.getGoodsLocation()+"/" - +scTransmission.getTaskNo()+"/"; - String pic1 = ip + 1 + ".png"; - String pic2 = ip + 2 + ".png"; - String pic3 = ip + 3 + ".png"; - String pic4 = ip + 4 + ".png"; - String pic5 = ip + 5 + ".png"; - String pic6 = ip + 6 + ".png"; - contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",").append(taskId).append(",").append(smokeCategory).append(",").append(smokeCount) - .append(",").append(smokeRstCategory).append(",").append(smokeRstCount).append(",").append(checkRst).append(",").append(pic1) - .append("*").append(pic2).append("*").append(pic3).append("*").append(pic4).append("*").append(pic5).append("*").append(pic6); - log.info("stock check message:{}", contentSB.toString()); - PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); - return ptData; - } - public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){ - return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03); - } +// public static PTData StockCheck04(SCTransmission scTransmission){ +// StringBuffer contentSB = new StringBuffer(); +// String SRMNumber = scTransmission.getSRMNumber(); +// String goodsLocation = scTransmission.getGoodsLocation(); +// String taskId = scTransmission.getTaskNo(); +// String smokeCategory = scTransmission.getCategory(); +// String smokeCount = scTransmission.getCount().toString(); +// String smokeRstCategory = scTransmission.getRstCategory(); +// Integer rstCount = scTransmission.getRstCount(); +// String smokeRstCount = rstCount.toString(); +// String checkRst = scTransmission.getCheckRst(); +// String ip ="http://"+ClientChanel.getIpFromId(scTransmission.getSRMNumber())+":9009/pic/"+scTransmission.getGoodsLocation()+"/" +// +scTransmission.getTaskNo()+"/"; +// String pic1 = ip + 1 + ".png"; +// String pic2 = ip + 2 + ".png"; +// String pic3 = ip + 3 + ".png"; +// String pic4 = ip + 4 + ".png"; +// String pic5 = ip + 5 + ".png"; +// String pic6 = ip + 6 + ".png"; +// contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",").append(taskId).append(",").append(smokeCategory).append(",").append(smokeCount) +// .append(",").append(smokeRstCategory).append(",").append(smokeRstCount).append(",").append(checkRst).append(",").append(pic1) +// .append("*").append(pic2).append("*").append(pic3).append("*").append(pic4).append("*").append(pic5).append("*").append(pic6); +// log.info("stock check message:{}", contentSB.toString()); +// PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); +// return ptData; +// } +// public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){ +// return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03); +// } public String toString(){ StringBuffer sb = new StringBuffer(); diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java b/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java index 202f683..857ca96 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PuTianNettyClient.java @@ -3,8 +3,6 @@ package com.zhehekeji.web.service.putian; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; -import com.zhehekeji.web.service.client.Decoder; -import com.zhehekeji.web.service.client.Encoder; import com.zhehekeji.web.service.ksec.KescFilter; import com.zhehekeji.web.service.ksec.KsecInfo; import io.netty.bootstrap.Bootstrap; diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 3750e2b..2c2b9e6 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -7,14 +7,14 @@ spring: maxWait: 60000 minEvictableIdleTimeMillis: 300000 minIdle: 15 - password: Leaper@123 + password: root poolPreparedStatements: true testOnBorrow: true testOnReturn: false testWhileIdle: false timeBetweenEvictionRunsMillis: 60000 type: com.alibaba.druid.pool.DruidDataSource - url: jdbc:mysql://115.236.65.98:12004/lia_duoji_nanjing_wuliu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3306/lia_duo_nanjingyancao?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root validationQuery: SELECT 1 FROM DUAL # --------本服务端口号