diff --git a/modules/common/pom.xml b/modules/common/pom.xml
index 462a781..2340aa1 100644
--- a/modules/common/pom.xml
+++ b/modules/common/pom.xml
@@ -109,13 +109,7 @@
system
${project.basedir}/src/main/resources/lib/core-1.0.0.jar
-
- com.zhehekeji
- base-assembly
- 1.0.0
- system
- ${project.basedir}/src/main/resources/lib/base-assembly-1.0.0.jar
-
+
com.baomidou
mybatis-plus-boot-starter
diff --git a/web/pom.xml b/web/pom.xml
index 90169b6..a889ee3 100644
--- a/web/pom.xml
+++ b/web/pom.xml
@@ -21,7 +21,7 @@
com.zhehekeji
- base-assembly
+ common
${base.assembly.version}
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 2c919dd..99a0432 100644
--- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java
+++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java
@@ -37,6 +37,16 @@ public class ConfigProperties {
private ScanCodeMode scanCodeMode;
+ /**
+ * 本机IP
+ */
+ private String IP;
+
+ /**
+ * TCP服务端端口
+ */
+ private Integer serverPort;
+
@Data
public static class CameraConfig{
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 f6f68bf..aaf8c1d 100644
--- a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java
+++ b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java
@@ -3,11 +3,16 @@ package com.zhehekeji.web.controller;
import com.github.pagehelper.PageInfo;
import com.zhehekeji.core.pojo.Result;
import com.zhehekeji.web.entity.CheckLog;
+import com.zhehekeji.web.entity.Street;
import com.zhehekeji.web.pojo.stock.CheckLogSearch;
+import com.zhehekeji.web.pojo.street.StreetVO;
import com.zhehekeji.web.service.EmptyCheckService;
-import com.zhehekeji.web.service.client.ClientChanel;
-import com.zhehekeji.web.service.client.ECTransmission;
-import com.zhehekeji.web.service.client.TMTransmission;
+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;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -23,42 +28,135 @@ public class ClientTestController {
@Resource
private EmptyCheckService emptyCheckService;
+ @Resource
+ private StreetService streetService;
+ @Resource
+ private PlcService plcService;
- @ApiOperation("空货位盘点【发起】")
+ @ApiOperation("模拟普天 空货位盘点【发起】")
@GetMapping("/emptyCheck/start")
- public Result startEmptyCheck(@ApiParam("巷道标识") String SRMNumber,@ApiParam("盘点批次ID") String taskId, @ApiParam("检测第几行") Integer row){
-
- ClientChanel.write(ECTransmission.toEmptyCheckStartString(SRMNumber),SRMNumber);
-
- return Result.success();
+ 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);
+ String msg = ECTransmission.toEmptyCheckStartString(SRMNumber);
+ ClientChanel.write(msg,SRMNumber);
+ return Result.success(msg);
}
- @ApiOperation("空货位盘点 【结束】")
+ @ApiOperation("模拟普天 空货位盘点 【结束】")
@GetMapping("/emptyCheck/stop")
- public Result stopEmptyCheck(@ApiParam("巷道标识") String SRMNumber,@ApiParam("盘点批次ID") String taskId, @ApiParam("检测第几行") Integer row){
- emptyCheckService.emptyCheckStart(SRMNumber,taskId,row);
- ClientChanel.write(ECTransmission.toEmptyCheckEndString(SRMNumber),SRMNumber);
- return Result.success();
+ 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);
+ ClientChanel.write(msg,SRMNumber);
+ //获取空货位的结果信息
+ // 返回给普天
+ Street street = streetService.getStreetByPlcId(SRMNumber);
+ PTEmptyCheckContent ptEmptyCheckContent = null;
+ PTData ptData = null;
+ String shevel = null;
+ if(street.getLeftType() == 0){
+ //单伸
+ String SingleLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ shevel = "R02";
+ ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,shevel,SingleOutRight);
+ ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
+ PuTianNettyClient.write(ptData);
+ }
+ return Result.success(msg);
}
- @ApiOperation("盘点具体货位 第一步 【发起盘点】")
+ @ApiOperation("模拟普天 盘点具体货位 第一步 【发起盘点】")
@GetMapping("/stockCheck/start")
- public Result startStockCheck(@ApiParam("巷道标识") String SRMNumber,@ApiParam("盘点批次ID") String taskId,
- @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位(02深),0001是X,0002是Y") String goodsLocation,@ApiParam("品规")String code,@ApiParam("数量")Integer count,
- @ApiParam("是否是虚拟检测 Y:是 N:不是")String V){
+ 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){
TMTransmission tmTransmission = new TMTransmission(SRMNumber,taskId,goodsLocation,code,count,V);
- ClientChanel.write(tmTransmission.toString(),SRMNumber);
+ String msg = tmTransmission.toString();
+ ClientChanel.write(msg,SRMNumber);
return Result.success();
}
- @ApiOperation("盘点具体货位 第二步 【取货到载货台完成】")
+ @ApiOperation("模拟普天 盘点具体货位 第二步 【取货到载货台完成,客户端拍照】")
@GetMapping("/stockCheck/goodsMoveOver")
- public Result goodsMoveOver(@ApiParam("巷道标识") String SRMNumber,@ApiParam("盘点批次ID") String taskId){
+ public Result goodsMoveOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId){
TMTransmission tmTransmission = new TMTransmission(SRMNumber,taskId);
- ClientChanel.write(tmTransmission.toSC02String(),SRMNumber);
+ String msg = tmTransmission.toSC02String();
+ ClientChanel.write(msg,SRMNumber);
return Result.success();
}
+ @ApiOperation("模拟普天 货物入库 【货位入库】")
+ @GetMapping("/intoStock/picOver")
+ public Result picOver(@ApiParam("巷道标识") @RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId,
+ @ApiParam("货位号,如L0100010002 ,R/L表示左右,01是浅货位(02深),0001是X,0002是Y") @RequestParam String goodsLocation){
+ //todo 顶部拍照
+ Integer row = Integer.valueOf(goodsLocation.substring(3,7));
+ Integer column = Integer.valueOf(goodsLocation.substring(7));
+ String picPath = plcService.IntoStock(SRMNumber,"C1",row,column);
+ //返回普天
+ PTData ptData = PTData.IntoStock(SRMNumber,taskId,goodsLocation,picPath);
+ PuTianNettyClient.write(ptData);
+ 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){
+ //拍入库完成后的照片
+ Integer row = Integer.valueOf(goodsLocation.substring(3,7));
+ Integer column = Integer.valueOf(goodsLocation.substring(7));
+ String picPath = plcService.IntoStock(SRMNumber,"C2",row,column);
+ //向客户端发送读码指令,等待客户端返回条码
+ 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();
+ }
+
+
}
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 d5f50d9..479a30b 100644
--- a/web/src/main/java/com/zhehekeji/web/service/InitService.java
+++ b/web/src/main/java/com/zhehekeji/web/service/InitService.java
@@ -13,6 +13,7 @@ import com.zhehekeji.web.mapper.SensorGunMapper;
import com.zhehekeji.web.mapper.StreetMapper;
import com.zhehekeji.web.service.client.NettyServer;
import com.zhehekeji.web.service.ksec.KsecNettyClient;
+import com.zhehekeji.web.service.putian.PuTianNettyClient;
import com.zhehekeji.web.service.robotic.NettyClient;
import com.zhehekeji.web.service.sick.SickNettyClient;
import lombok.extern.slf4j.Slf4j;
@@ -39,9 +40,7 @@ public class InitService implements ApplicationRunner {
@Resource
private StreetMapper streetMapper;
@Resource
- private NettyClient nettyClient;
- @Resource
- private KsecNettyClient ksecNettyClient;
+ private PuTianNettyClient puTianNettyClient;
@Resource
private ConfigProperties configProperties;
@@ -80,43 +79,26 @@ public class InitService implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
- nettyServer.CreateNettyServer(3001);
+ nettyServer.CreateNettyServer(configProperties.getServerPort());
//球机登录
List cameras = cameraMapper.selectByMap(new HashMap<>(0));
cameras.forEach(camera -> {
LoginThread loginThread = new LoginThread(camera);
loginThread.start();
});
- //plc连接
- if(configProperties.getServerMode() == 0){
- log.info("PLC TCP MODE");
- //plc 连接状态初始化
- List streets = streetMapper.selectByMap(new HashMap<>(0));
-
- streets.forEach(street -> {
- StreetConn.init(street.getId(),street.getPlcId());
- try {
- nettyClient.createClient(street);
- }catch (Exception e){
- log.error("streetId:{}:初始plc连接失败,url:{},port:{}",street.getId(),street.getPlcIp(),street.getPlcPort());
- }
- });
- }else if(configProperties.getServerMode() == 1){
- log.info("KESC JSON MODE");
- // 昆船协议
- ConfigProperties.KSEC ksec = configProperties.getKsec();
- if(ksec != null){
- StreetConn.init(1,"ksec");
- try {
- ksecNettyClient.createClient(ksec);
- }catch (Exception e){
- log.error("kesc connect error,url:{},port:{}",ksec.getIp(),ksec.getPort());
- }
- }else {
- log.error("ksec no config");
+ ConfigProperties.KSEC ksec = configProperties.getKsec();
+ if(ksec != null){
+ StreetConn.init(1,"ksec");
+ try {
+ puTianNettyClient.createClient(ksec);
+ }catch (Exception e){
+ log.error("kesc connect error,url:{},port:{}",ksec.getIp(),ksec.getPort());
}
+ }else {
+ log.error("ksec no config");
}
- TaskDelayExecutor.runMp4DownloadExecutor();
+
+ //TaskDelayExecutor.runMp4DownloadExecutor();
}
class LoginThread extends Thread{
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 67ec5a1..8fec1b4 100644
--- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java
+++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java
@@ -80,10 +80,6 @@ public class PlcService {
public Integer plcStatus() {
Integer count = 1;
- if(configProperties.getServerMode() == 0){
- count = streetMapper.selectCount(new QueryWrapper<>());
- }
-
List connIds = StreetConn.connList();
return (count - connIds.size());
}
@@ -623,4 +619,28 @@ public class PlcService {
return configProperties;
}
+
+ /**
+ * 相机转动,拍照,并返回图片地址
+ * @param SRMNumber
+ * @param PTZCode
+ * @return
+ */
+ public String IntoStock(String SRMNumber,String PTZCode,Integer row,Integer column){
+ Street street = streetService.getStreetByPlcId(SRMNumber);
+ //南京烟草物流只有一个相机
+ Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id();
+ //转动拍照
+ gyrateCameraByCode(cameraId,PTZCode);
+ //等待2s再拍照
+ try {
+ Thread.sleep(2000l);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column);
+ cameraCapture(cameraId,false,0l,path);
+ return configProperties.getIP()+":9007/"+path;
+ }
+
}
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
new file mode 100644
index 0000000..a785ae0
--- /dev/null
+++ b/web/src/main/java/com/zhehekeji/web/service/client/ClientCodeMap.java
@@ -0,0 +1,25 @@
+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/ISTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java
new file mode 100644
index 0000000..26d0e93
--- /dev/null
+++ b/web/src/main/java/com/zhehekeji/web/service/client/ISTransmission.java
@@ -0,0 +1,44 @@
+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/putian/PTData.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTData.java
index 56d8d45..b4cbc20 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
@@ -13,6 +13,21 @@ public class PTData {
public static String HEART_TYPE = "HB";
+ /**
+ * 此报文是无需回复的报文
+ */
+ protected static String FLOW_NO_NEED_RES = ".";
+
+ /**
+ * 此报文是需要回复的报文
+ */
+ protected static String FLOW_R = "R";
+
+ /**
+ * 此报文是回复的报文
+ */
+ protected static String FLOW_A = "A";
+
/**
* 1.空货位盘点开始(EmptyCheck01): EC01
* 2.空货位盘点结束(EmptyCheck02): EC02
@@ -45,10 +60,6 @@ public class PTData {
private String Content;
- public String toString(){
- return FlowControl + SPLIT + Type + SPLIT + Content + END_STRING;
- }
-
public PTData(String data){
String[] strings = data.split(SPLIT);
FlowControl = strings[0];
@@ -64,7 +75,35 @@ public class PTData {
return ptData;
}
+ public static PTData IntoStock(String SRMNumber,String taskId,String goodsLocation,String picPath){
+ StringBuffer contentSB = new StringBuffer();
+ contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(picPath);
+ PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,Into_Stock_02);
+ return ptData;
+ }
+
+ public static PTData IntoStock04(String SRMNumber,String taskId,String goodsLocation,String picPath,String code){
+ StringBuffer contentSB = new StringBuffer();
+ contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(picPath).append(",").append(code);
+ PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,Into_Stock_04);
+ return ptData;
+ }
+ public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){
+ return new PTData(ptEmptyCheckContent.toString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03);
+ }
+
+ public String toString(){
+ StringBuffer sb = new StringBuffer();
+ sb.append(this.FlowControl).append(SPLIT).append(Type).append(SPLIT).append(Content).append(END_STRING);
+ return sb.toString();
+ }
+
+ public PTData(String content,String Flow,String type){
+ this.FlowControl = Flow;
+ this.Content = content;
+ this.Type = type;
+ }
}
diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java
index de156db..6992cd8 100644
--- a/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java
+++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTDecoder.java
@@ -29,15 +29,16 @@ public class PTDecoder extends LineBasedFrameDecoder {
* @param stripDelimiter true:解析出的数据包不带换行符
* @param failFast
*/
- public PTDecoder(int maxLength, boolean stripDelimiter, boolean failFast) {
+ public PTDecoder(int maxLength, boolean stripDelimiter, boolean failFast,EmptyCheckService emptyCheckService) {
super(maxLength, stripDelimiter, failFast);
+ this.emptyCheckService = emptyCheckService;
}
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
in = (ByteBuf) super.decode(ctx, in);
if(in != null){
String body = in.toString(Charset.forName("UTF-8"));
- tcpLogger.info(body);
+ tcpLogger.info("received from PT:{}",body);
PTData ptData = new PTData(body);
if(ptData.getType().equals(PTData.HEART_TYPE)){
@@ -45,14 +46,14 @@ public class PTDecoder extends LineBasedFrameDecoder {
}else if(ptData.getType().equals(PTData.EMPTY_CHECK_01)){
log.info("空货位检测开始");
- PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(body);
+ PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
emptyCheckService.emptyCheckStart(checkContent.getSRMNUmber(), checkContent.getTaskNo(), checkContent.getRow());
String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber());
//通知客户端开始检测
ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber());
}else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){
log.info("空货位检测结束");
- PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(body);
+ PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(checkContent.getSRMNUmber());
//通知客户端结束检测
ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber());
diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTEmptyCheckContent.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTEmptyCheckContent.java
index 6c865fd..3f7d0eb 100644
--- a/web/src/main/java/com/zhehekeji/web/service/putian/PTEmptyCheckContent.java
+++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTEmptyCheckContent.java
@@ -37,6 +37,13 @@ public class PTEmptyCheckContent {
*/
private String type;
+ private String shelve;
+
+ /**
+ * 盘点结果
+ */
+ private String emptyStatus;
+
public static PTEmptyCheckContent EmptyCheck(String data){
PTEmptyCheckContent ptContent = new PTEmptyCheckContent();
@@ -49,4 +56,18 @@ public class PTEmptyCheckContent {
ptContent.setType(strings[5]);
return ptContent;
}
+
+ public static PTEmptyCheckContent emptyCheckResponse(String SRMNUmber,String taskId,int row,int startColumn,int endColumn,String shelve,String emptyStatus){
+ PTEmptyCheckContent ptContent = new PTEmptyCheckContent();
+ ptContent.setSRMNUmber(SRMNUmber);
+ ptContent.setTaskNo(taskId);
+ ptContent.setRow(row);
+ ptContent.setStartColumn(startColumn);
+ ptContent.setEndColumn(endColumn);
+ ptContent.setShelve(shelve);
+ ptContent.setEmptyStatus(emptyStatus);
+ return ptContent;
+ }
+
+
}
diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTFilter.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTFilter.java
index 80cbc15..13d09ce 100644
--- a/web/src/main/java/com/zhehekeji/web/service/putian/PTFilter.java
+++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTFilter.java
@@ -1,5 +1,6 @@
package com.zhehekeji.web.service.putian;
+import com.zhehekeji.web.service.EmptyCheckService;
import com.zhehekeji.web.service.PlcService;
import com.zhehekeji.web.service.ksec.*;
import io.netty.buffer.ByteBuf;
@@ -21,11 +22,14 @@ public class PTFilter extends ChannelInitializer {
private PlcService plcService;
+ private EmptyCheckService emptyCheckService;
+
private PuTianNettyClient nettyClient;
- public PTFilter(PlcService plcService, PuTianNettyClient nettyClient){
+ public PTFilter(PlcService plcService, PuTianNettyClient nettyClient,EmptyCheckService emptyCheckService){
this.plcService = plcService;
this.nettyClient = nettyClient;
+ this.emptyCheckService = emptyCheckService;
}
@Override
@@ -34,7 +38,7 @@ public class PTFilter extends ChannelInitializer {
//30秒发一次心跳
ph.addLast(new IdleStateHandler(0, 30, 0, TimeUnit.SECONDS));
ByteBuf byteBuf = Unpooled.copiedBuffer(">".getBytes());
- ph.addLast(new PTDecoder(1000,false,true));
+ ph.addLast(new PTDecoder(1000,false,true,emptyCheckService));
ph.addLast(new PtEncoder());
ph.addLast(new PTNettyHandler(nettyClient));
}
diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTNettyHandler.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTNettyHandler.java
index 16a24a9..61a83d5 100644
--- a/web/src/main/java/com/zhehekeji/web/service/putian/PTNettyHandler.java
+++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTNettyHandler.java
@@ -17,7 +17,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class PTNettyHandler extends ChannelInboundHandlerAdapter {
/** 客户端请求的心跳命令 */
- private PTData heart;
+ private PTData heart = PTData.HeartBeat();
private PuTianNettyClient nettyClient;
@@ -32,7 +32,7 @@ public class PTNettyHandler extends ChannelInboundHandlerAdapter {
*/
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
- log.info("upPc connected ");
+ log.info("Pt connected ");
StreetConn.conn(1);
ctx.fireChannelActive();
}
@@ -42,7 +42,7 @@ public class PTNettyHandler extends ChannelInboundHandlerAdapter {
*/
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
- log.info("upPc closed");
+ log.info("Pt closed");
StreetConn.disConn(1);
log.info(" streetId reconnect......");
nettyClient.reconnect(1);
@@ -55,7 +55,7 @@ public class PTNettyHandler extends ChannelInboundHandlerAdapter {
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object obj) throws Exception {
if (obj instanceof IdleStateEvent) {
- log.debug("upPc send heart");
+ log.debug("Pt send heart");
ctx.channel().writeAndFlush(heart);
}
diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PtEncoder.java b/web/src/main/java/com/zhehekeji/web/service/putian/PtEncoder.java
index f05eae6..bdf27cd 100644
--- a/web/src/main/java/com/zhehekeji/web/service/putian/PtEncoder.java
+++ b/web/src/main/java/com/zhehekeji/web/service/putian/PtEncoder.java
@@ -3,6 +3,8 @@ package com.zhehekeji.web.service.putian;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets;
@@ -11,9 +13,12 @@ import java.nio.charset.StandardCharsets;
*/
public class PtEncoder extends MessageToByteEncoder {
+ private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
+
@Override
protected void encode(ChannelHandlerContext channelHandlerContext, PTData data, ByteBuf byteBuf) throws Exception {
String body = data.toString();
+ tcpLogger.info("send to PT:{}",body);
byteBuf.writeBytes(body.getBytes(StandardCharsets.UTF_8));
}
}
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 ee4b2da..9969f15 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
@@ -1,6 +1,7 @@
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;
@@ -28,6 +29,8 @@ public class PuTianNettyClient {
private PlcService plcService;
@Resource
private ConfigProperties configProperties;
+ @Resource
+ private EmptyCheckService emptyCheckService;
/**
* 重连最大次数
@@ -43,7 +46,8 @@ public class PuTianNettyClient {
Bootstrap client = new Bootstrap();
client.group(group);
client.channel(NioSocketChannel.class);
- client.handler(new PTNettyHandler(this));
+ client.handler(new PTFilter(plcService,this,emptyCheckService));
+
// 连接服务端
channel = client.connect(ksec.getIp(), ksec.getPort()).sync().channel();
}
@@ -84,9 +88,9 @@ public class PuTianNettyClient {
}
}
- public static void write(KsecInfo ksecInfo){
+ public static void write(PTData ptData){
if(channel != null){
- channel.writeAndFlush(ksecInfo);
+ channel.writeAndFlush(ptData);
}else {
log.error(" no connected upPc");
}
diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml
index 27f76ac..f3b2b77 100644
--- a/web/src/main/resources/application-dev.yml
+++ b/web/src/main/resources/application-dev.yml
@@ -34,35 +34,17 @@ cameraConfig:
videoServer: 127.0.0.1:8083
#相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
delayCaptureTime: 3500
- #随行模式下的相机抓图延迟 毫秒,这个延迟是等待球机球机转动到位,然后拍照的
- # 发了C1之后多久拍照
- C1DelayCaptureTime: 1500
- # 内侧货架 发了C2 之后多久拍照
- C2DelayCaptureTime: 1500
- # 外侧货架 发了C2 之后多久拍照
- C2OutDelayCaptureTime: 2500
- # 发了C3之后多久拍照
- C3DelayCaptureTime: 1500
- C4DelayCaptureTime: 1500
- C4OutDelayCaptureTime: 1500
- # 发了B2之后多久转原点位
- B2DelayTime: 2000
- # 外侧货架发了B2多久转原点位
- B2OutDelayTime: 2000
- # 下载mp4延迟 海康的下载mp4需要2分钟
- # 利珀延迟10s就可
- # 单位毫秒
- delayDownloadMp4: 10000
# ------------
# -----图片 mp4下载地址
savePath:
mediaPath: d:\\data\media\
mp4Path: d://data/mp4/
-# ------------服务端类型 0:TCP(罗伯泰克) 1:KSEC(JSON)(昆船)
-serverMode: 1
+# 普天上位地址
ksec:
- ip: 172.18.96.1
+ ip: 192.168.125.5
port: 3000
+# 服务端TCP端口
+serverPort: 3001
# ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig:
videoStyleRow: 4
@@ -77,13 +59,7 @@ lightSource:
index: 1
# -----tray 托盘
# -----goods 货物
-# 扫码模式 0:此处不盘点 1:球机扫码 2:sick扫码枪 3:南北达RFID
-scanCodeMode:
- tray: 1
- goods: 0
- goodsCodeTypes:
- - 14
- trayCodeTypes:
- - 14
# 照片 視頻保存多久
-deleteFileDays: 365
\ No newline at end of file
+deleteFileDays: 365
+# 服务端IP
+IP: 192.168.1.1
\ No newline at end of file
diff --git a/web/src/main/resources/logback-spring.xml b/web/src/main/resources/logback-spring.xml
index 278dbcf..ba1ca23 100644
--- a/web/src/main/resources/logback-spring.xml
+++ b/web/src/main/resources/logback-spring.xml
@@ -128,6 +128,7 @@
+