diff --git a/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java index cb36cc2..6ae4277 100644 --- a/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java +++ b/modules/common/src/main/java/com/zhehekeji/common/util/PathUtil.java @@ -35,6 +35,11 @@ public class PathUtil { String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd")); return cameraId+"/"+row+"-"+column+"/"+date + "/" +now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss-"))+row+"-"+column + "."+fileType; } + public static String createFileNameByRowColumn(String fileType,Integer cameraId,Integer row,Integer column, String goodsLocation){ + LocalDateTime now = LocalDateTime.now(); + String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd")); + return cameraId+"/"+row+"-"+column+"/"+date + "/" +now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss-"))+ goodsLocation + "."+fileType; + } /** * 检查文件的文件夹是否存在,不存在则新建 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 99a0432..9042e8e 100644 --- a/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java +++ b/web/src/main/java/com/zhehekeji/web/config/ConfigProperties.java @@ -92,6 +92,8 @@ public class ConfigProperties { public static class KSEC{ private String ip; private Integer port; +// private Integer reconnectNum = 10; +// private long reconnectInterval = 10000; } @Data 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 61e6b27..a7a464e 100644 --- a/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java +++ b/web/src/main/java/com/zhehekeji/web/controller/ClientTestController.java @@ -38,9 +38,10 @@ public class ClientTestController { @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); - ClientChanel.write(msg,SRMNumber); +// 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); } @@ -48,7 +49,8 @@ public class ClientTestController { @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 = ECTransmission.toEmptyCheckEndString(SRMNumber,taskId,row,startColumn,endColumn); + String msg = ""; ClientChanel.write(msg,SRMNumber); //获取空货位的结果信息 // 返回给普天 @@ -56,11 +58,11 @@ public class ClientTestController { //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); - }); +// 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); @@ -129,7 +131,7 @@ public class ClientTestController { String picPath = plcService.IntoStock(SRMNumber,taskId,goodsLocation); //返回普天 - PTData ptData = PTData.IntoStock(SRMNumber,taskId,goodsLocation,picPath); + PTData ptData = PTData.IntoStock02(SRMNumber,taskId,goodsLocation,picPath); PuTianNettyClient.write(ptData); return Result.success(ptData.toString()); } 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 c4bc11f..01abc5c 100644 --- a/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java +++ b/web/src/main/java/com/zhehekeji/web/service/EmptyCheckService.java @@ -112,8 +112,8 @@ public class EmptyCheckService { * 空托盘检测 按行开始 * @param */ - public void emptyCheckStart(String SRMNUmber,String taskId,Integer row,Integer startColumn,Integer endColumn){ - log.info("空托盘检测 按行开始,SRMNUmber:{},taskNo:{},row:{},startColumn:{},endColumn:{}",SRMNUmber,taskId,row,startColumn,endColumn); + public void emptyCheckStart(String SRMNUmber,String taskId){ + log.info("空托盘检测 按行开始,SRMNUmber:{},taskNo:{}",SRMNUmber,taskId); Street street = streetService.getStreetByPlcId(SRMNUmber); if(street == null){ log.error(" no SRMNumer:{}",SRMNUmber); @@ -129,12 +129,12 @@ public class EmptyCheckService { Map map = new HashMap<>(); //将这些位置的旧数据清空 UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.eq("street_id",street.getId()).eq("`row`",row).ge("`column`",startColumn).le("`column`",endColumn); +// wrapper.eq("street_id",street.getId()).eq("`row`",row).ge("`column`",startColumn).le("`column`",endColumn); emptyCheckMapper.delete(wrapper); //新增空的盘点统计 List checkStreetSummaries = checkStreetSummaryMapper.selectList(new QueryWrapper().eq("street_id",street.getId()).eq("task_id",taskId)); if(checkStreetSummaries.size() == 0){ - log.info("新增盘点统计,SRMNUmber:{},taskNo:{},row:{}",SRMNUmber,taskId,row); + log.info("新增盘点统计,SRMNUmber:{},taskNo:{}",SRMNUmber,taskId); CheckStreetSummary checkStreetSummary = new CheckStreetSummary(); checkStreetSummary.setTaskId(taskId); checkStreetSummary.setStartTime(LocalDateTime.now()); @@ -215,7 +215,7 @@ public class EmptyCheckService { String L02 = getEmptyStatus(street.getId(),2,1,row,startColumn,endColumn); map.put("L02",L02); } - if(street.getRightType() == 2){ + if(street.getRightType() == 1){ String R02 = getEmptyStatus(street.getId(),2,2,row,startColumn,endColumn); map.put("R02",R02); } 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 ae9baf3..b91c6e9 100644 --- a/web/src/main/java/com/zhehekeji/web/service/PlcService.java +++ b/web/src/main/java/com/zhehekeji/web/service/PlcService.java @@ -254,6 +254,7 @@ public class PlcService { }else { cameraControlModule.pic(cameraId,0,realPath); } + log.info("capture the photo: {}", realPath); return path; } @@ -446,10 +447,10 @@ public class PlcService { public Stock checkStart(TMTransmission tmTransmission){ log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation()); Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber()); - Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7)); - Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7)); - Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2; - Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3)); + Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(5,8)); + Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(8,10)); + Integer leftRight = Integer.valueOf(tmTransmission.getGoodsLocation().substring(4,5)); + Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(10,12)); Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); if(old == null){ old = new Stock(); @@ -488,10 +489,10 @@ public class PlcService { public Stock checkEnd(TMTransmission tmTransmission){ log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation()); Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber()); - Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7)); - Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7)); - Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2; - Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3)); + Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(5,8)); + Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(8,10)); + Integer leftRight = Integer.valueOf(tmTransmission.getGoodsLocation().substring(4,5)); + Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(10,12)); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); if(stock != null){ stock.setCount(tmTransmission.getCount()); @@ -580,12 +581,16 @@ public class PlcService { */ public String IntoStock(String SRMNumber,String taskId,String goodsLocation){ Street street = streetService.getStreetByPlcId(SRMNumber); + if (street == null){ + log.error("SRMNum: {} 对应的巷道不存在"); + } //南京烟草物流只有一个相机 Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); - Integer row = Integer.valueOf(goodsLocation.substring(3,7)); - Integer column = Integer.valueOf(goodsLocation.substring(7)); - Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2; - Integer inout = Integer.valueOf(goodsLocation.substring(1,3)); + 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)); + log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout); //转动拍照 gyrateCameraByCode(cameraId,"C1"); @@ -596,7 +601,8 @@ public class PlcService { e.printStackTrace(); } - String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); + String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column, goodsLocation); + Order oldOrder = orderMapper.getOneByOrderNum(taskId); Order order = new Order(); order.setStreetId(street.getId()); order.setOrderNum(taskId); @@ -606,9 +612,13 @@ public class PlcService { order.setIntoStockTime(LocalDateTime.now()); order.setRow1(row); order.setColumn1(column); - orderMapper.insert(order); + if (oldOrder != null){ + orderMapper.updateById(order); + }else{ + orderMapper.insert(order); + } cameraCapture(cameraId,false,0l,path); - return configProperties.getIP()+":9007/"+path; + return configProperties.getIP()+":9007/api/pic/"+path; } /** @@ -620,10 +630,11 @@ public class PlcService { Street street = streetService.getStreetByPlcId(SRMNumber); //南京烟草物流只有一个相机 Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); - Integer row = Integer.valueOf(goodsLocation.substring(3,7)); - Integer column = Integer.valueOf(goodsLocation.substring(7)); - Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2; - Integer inout = Integer.valueOf(goodsLocation.substring(1,3)); + 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)); + log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout); String inoutString = inout == 1 ? "IN" : "OUT"; String leftRightString = leftRight == 1 ? "L":"R"; //转动拍照 @@ -636,7 +647,7 @@ public class PlcService { e.printStackTrace(); } - String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); + String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column, goodsLocation); Order order = orderMapper.getOneByOrderNum(taskId); if(order != null){ Order upd = new Order(); @@ -646,7 +657,6 @@ public class PlcService { orderMapper.updateById(upd); } cameraCapture(cameraId,false,0l,path); - return configProperties.getIP()+":9007/"+path; + return configProperties.getIP()+":9007/api/pic/"+path; } - } 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 index 6e4c652..e291630 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/CETransmission.java @@ -9,11 +9,12 @@ import lombok.Data; public class CETransmission { private static String HEADER = "CE"; + private static String Split = "&"; private String SRMNumber; public String toString(){ - return HEADER + "," + SRMNumber; + return HEADER + Split + SRMNumber; } public static String getHEADER(){ @@ -21,7 +22,7 @@ public class CETransmission { } public CETransmission(String body){ - String [] strings = body.split(","); + 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/ClientChanel.java b/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java index 39ae41c..00fc653 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/ClientChanel.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -42,7 +43,7 @@ public class ClientChanel { } public static void putSRMNUmber_Ip(String ID,String ip){ - SRMNumber_IPMap.put(ip,ID); + SRMNumber_IPMap.put(ID,ip); } public static String getIpFromId(String ID){ @@ -57,13 +58,15 @@ public class ClientChanel { return IP_SRMNumberMap.get(ip); } - public static void connect(String key, Channel channel){ - channelMap.put(key,channel); + public static void connect(String SRMNumber, Channel channel){ + channelMap.put(SRMNumber,channel); + InetSocketAddress socketAddress = (InetSocketAddress) channel.remoteAddress(); + String clientIp = socketAddress.getAddress().getHostAddress(); + putSRMNUmber_Ip(SRMNumber, clientIp); } public static void disConnect(String key){ channelMap.remove(key); - } public static Set keys(){ 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 26a15f4..c70ed5e 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 @@ -1,10 +1,10 @@ package com.zhehekeji.web.service.client; +import com.sun.org.apache.bcel.internal.generic.PUTFIELD; import com.zhehekeji.web.entity.Stock; import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.PlcService; -import com.zhehekeji.web.service.putian.PTData; -import com.zhehekeji.web.service.putian.PuTianNettyClient; +import com.zhehekeji.web.service.putian.*; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandlerContext; @@ -14,6 +14,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -26,13 +27,21 @@ 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"; + private static String END_STRING = "$"; + private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,15,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); private EmptyCheckService emptyCheckService; private PlcService plcService; + public Decoder(PlcService plcService,EmptyCheckService emptyCheckService) { - super(200,true,false, Unpooled.copiedBuffer(";".getBytes())); + + super(20000,true,false, Unpooled.copiedBuffer(">".getBytes()), + Unpooled.copiedBuffer("$".getBytes())); this.plcService = plcService; this.emptyCheckService = emptyCheckService; } @@ -69,57 +78,161 @@ public class Decoder extends DelimiterBasedFrameDecoder { @Override public void run() { String body = in.toString(Charset.forName("UTF-8")); - tcpLogger.info("client:{}",body); - if(body.startsWith(HBTransmission.getHEADER())) { - //心跳 - HBTransmission hbTransmission = new HBTransmission(body); - //回复客户端心跳 - ctx.channel().writeAndFlush(hbTransmission.toString()); - //tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber()); - in.release(); - } else if(body.startsWith(TMTransmission.getHeader())){ - //盘点指令 - TMTransmission tmTransmission = new TMTransmission(body); - if(tmTransmission.isCollectOver()){ - //给普天发送数据采集完毕指令 - PTData ptData = PTData.StockCheck03(tmTransmission.getSRMNumber(),tmTransmission.getTaskNo(),tmTransmission.getGoodsLocation(),"Y"); - PuTianNettyClient.write(ptData); - }else { - //收到盘点结果 - Stock stock = plcService.checkEnd(tmTransmission); - //将盘点结果发给普天 - PTData ptData = PTData.StockCheck04(tmTransmission.getSRMNumber(),tmTransmission.getTaskNo(),tmTransmission.getGoodsLocation(),stock); + 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()); + 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()); + TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); +// plcService.checkStart(tmTransmission); + String tmTransmissionStr = tmTransmission.toString(); + ClientChanel.write(tmTransmissionStr,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()); + TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); + String tmTransmissionStr = tmTransmission.toSC02String(); + ClientChanel.write(tmTransmissionStr,ptCheckContent.getSRMNUmber()); + } + else if (ptData.getType().equals(PTData.Into_Stock_01)){ + 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()); + PuTianNettyClient.write(resData); + } + } + else{ + if(body.startsWith(HBTransmission.getHEADER())) { + //心跳 + HBTransmission hbTransmission = new HBTransmission(body); + //回复客户端心跳 + ctx.channel().writeAndFlush(hbTransmission.toString()); + //tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber()); + in.release(); + } else if(body.startsWith(TMTransmission.getHeader())){ + //盘点指令 + TMTransmission tmTransmission = new TMTransmission(body); + if(tmTransmission.isCollectOver()){ + //给普天发送数据采集完毕指令 + PTData ptData = PTData.StockCheck03(tmTransmission.getSRMNumber(),tmTransmission.getTaskNo(),"1"); + PuTianNettyClient.write(ptData); + }else { + //收到盘点结果 +// Stock stock = plcService.checkEnd(tmTransmission); + //将盘点结果发给普天 + PTData ptData = PTData.StockCheck04(tmTransmission); + PuTianNettyClient.write(ptData); + //添加到实时信息里 +// RealtimeCheckMap.put(tmTransmission.getSRMNumber(),tmTransmission.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(body.startsWith(ECTransmission.getHEADER())){ + //空货位盘点 + ECTransmission ecTransmission = new ECTransmission(body); + log.info("empty result: {}", body); + //将库位的盘点结果发给普天 + StringBuffer strBff = new StringBuffer(ecTransmission.getSRMNumber()); + strBff.append("*").append(ecTransmission.getTaskId()).append("*").append(ecTransmission.getEmptyMsg()); +// strBff.append(",").append(ecTransmission.getIsEmpty()); + String content = strBff.toString(); + PTData ptData = new PTData(content, PTData.FLOW_R, PTData.EMPTY_CHECK_03); PuTianNettyClient.write(ptData); - //添加到实时信息里 - RealtimeCheckMap.put(tmTransmission.getSRMNumber(),tmTransmission.checkInfo()); - //更新盤點統計 - emptyCheckService.updateCheckLastTime(tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),stock.getCode()); + //保存空货位条码 + EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode()); + //保存空货位信息 + emptyCheckService.emptyCheckLog(ecTransmission); + in.release(); } - 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(body.startsWith(ECTransmission.getHEADER())){ - //空货位盘点 - ECTransmission ecTransmission = new ECTransmission(body); - //保存空货位条码 - EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode()); - //保存空货位信息 - emptyCheckService.emptyCheckLog(ecTransmission); - 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]); + 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(); } - 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/ECTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java index 73b0caa..fd14a54 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/ECTransmission.java @@ -14,8 +14,9 @@ import lombok.Data; public class ECTransmission { private static String HEADER = "EC"; + private static String Split = "&"; - private static String Split = ","; +// private static String Split = ","; private String SRMNumber; @@ -27,6 +28,8 @@ public class ECTransmission { private String isEmpty; + private String emptyMsg; + /** * 左右 1:左 2:右 */ @@ -50,25 +53,26 @@ public class ECTransmission { */ private String originCode; - public String toString(){ - return HEADER + "," + SRMNumber; - } +// public String toString(){ +// return HEADER + Split + SRMNumber; +// } public static String getHEADER(){ return HEADER; } public ECTransmission(String body){ - String [] strings = body.split(","); + 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]; - 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)); +// 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]; @@ -90,9 +94,9 @@ public class ECTransmission { * 空托盘检测开始信息 * @return */ - public static String toEmptyCheckStartString(String SRMNumber,String taskId,Integer row,Integer startColumn,Integer endColumn){ + 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(row).append(Split).append(startColumn).append(Split).append(endColumn).append(Split).append("START"); + sb.append(Split).append(SRMNumber).append(Split).append(taskId).append(Split).append("START"); return sb.toString(); } @@ -100,9 +104,9 @@ public class ECTransmission { * 空托盘检测 结束信号 * @return */ - public static String toEmptyCheckEndString(String SRMNumber,String taskId,Integer row,Integer startColumn,Integer endColumn){ + 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(row).append(Split).append(startColumn).append(Split).append(endColumn).append(Split).append("END"); + 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 index 67d2a16..69dcebf 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/EmptyCheckCodeInfo.java @@ -15,8 +15,8 @@ public class EmptyCheckCodeInfo { private static Map> allCode = new HashMap<>(); - public static void start(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); + public static void start(String SRMNumber, String taskNo){ + String key = String.format("{}-{}",SRMNumber, taskNo); allCode.remove(key); } @@ -29,8 +29,8 @@ public class EmptyCheckCodeInfo { codes.add(code); } - public static Set getAllCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ - String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); + public static Set getAllCode(String SRMNumber, String taskNo){ + String key = String.format("{}-{}",SRMNumber, taskNo); return allCode.get(key); } diff --git a/web/src/main/java/com/zhehekeji/web/service/client/Encoder.java b/web/src/main/java/com/zhehekeji/web/service/client/Encoder.java index 18dd8bb..a523252 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/Encoder.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/Encoder.java @@ -12,12 +12,13 @@ import java.nio.charset.StandardCharsets; * 客户端传输协议 以;结尾 */ public class Encoder extends MessageToByteEncoder { + private static String END_STRING = ">"; private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); @Override protected void encode(ChannelHandlerContext channelHandlerContext, String data, ByteBuf byteBuf) throws Exception { - data = data + ";"; - tcpLogger.info("send to client:{}",data); + data = data + END_STRING; + tcpLogger.info("send to client:{}, length:{}",data, data.length()); byteBuf.writeBytes(data.getBytes(StandardCharsets.UTF_8)); } } 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 index 717f042..fced57e 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/HBTransmission.java @@ -9,11 +9,12 @@ import lombok.Data; public class HBTransmission { private static String HEADER = "HB"; + private static String Split = "&"; private String SRMNumber; public String toString(){ - return HEADER + "," + SRMNumber; + return HEADER + Split + SRMNumber; } public static String getHEADER(){ @@ -21,7 +22,7 @@ public class HBTransmission { } public HBTransmission(String body){ - String [] strings = body.split(","); + 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/NettyConnectHandler.java b/web/src/main/java/com/zhehekeji/web/service/client/NettyConnectHandler.java index 16c3480..fe55324 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/NettyConnectHandler.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/NettyConnectHandler.java @@ -22,7 +22,8 @@ public class NettyConnectHandler extends ChannelInboundHandlerAdapter { public void channelActive(ChannelHandlerContext ctx) throws Exception { InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); String clientIp = socketAddress.getAddress().getHostAddress(); - log.info("ip:{} connected",clientIp); + int clientPort = socketAddress.getPort(); + log.info("ip:{} port:{} connected",clientIp, clientPort); ctx.fireChannelActive(); } @@ -33,7 +34,8 @@ public class NettyConnectHandler extends ChannelInboundHandlerAdapter { public void channelInactive(ChannelHandlerContext ctx) throws Exception { InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); String clientIp = socketAddress.getAddress().getHostAddress(); - log.info("ip:{} disconnected",clientIp); + int clientPort = socketAddress.getPort(); + log.info("ip:{} port:{} disconnected",clientIp, clientPort); String ID = ClientChanel.getIDFromIp(clientIp); //设置客户端下线 ClientChanel.disConnect(ID); diff --git a/web/src/main/java/com/zhehekeji/web/service/client/TMTransmission.java b/web/src/main/java/com/zhehekeji/web/service/client/TMTransmission.java index cf2bb0c..395aa5d 100644 --- a/web/src/main/java/com/zhehekeji/web/service/client/TMTransmission.java +++ b/web/src/main/java/com/zhehekeji/web/service/client/TMTransmission.java @@ -36,10 +36,22 @@ public class TMTransmission { private Integer count; + /** + * 盘点结果 + */ + private String rstCode; + + private String rstCount; + private String visualTest; private String isDisConnect; + /** + * 盘点结果是否正确 + */ + private String checkRst; + /** * 左右 1:左 2:右 */ @@ -50,14 +62,14 @@ public class TMTransmission { */ private Integer side; - private static String Split = ","; + private static String Split = "&"; private boolean collectOver; public String toString(){ StringBuffer sb = new StringBuffer(header); - sb.append(Split).append(SRMNumber).append(Split).append(taskNo).append(Split) - .append(goodsLocation).append(Split).append(trayNo).append(Split).append(code) + 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(); } @@ -70,25 +82,52 @@ public class TMTransmission { return header; } +// public TMTransmission(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]; +// } +// } + public TMTransmission(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]; + goodsLocation = strings[2]; + taskNo = strings[3]; + code = strings[4]; + count = Integer.valueOf(strings[5]); + rstCode = strings[6]; + rstCount = strings[7]; + checkRst = strings[8]; collectOver = false; - if("Y".equals(isDisConnect)){ - //需要拆分之前的 - } +// if("Y".equals(isDisConnect)){ +// //需要拆分之前的 +// } } }else if(strings.length == 3){ diff --git a/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java b/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java index 355da82..98c73e4 100644 --- a/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java +++ b/web/src/main/java/com/zhehekeji/web/service/damLightSource/JYDamHelper.java @@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class JYDamHelper { - public static JYDAMEquip Connect(String ip,int port){ JYDAMEquip equip = new JYDAMEquip(); equip.Init(ip,port,254); 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 e5e3b25..9d4ceeb 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 @@ -1,6 +1,5 @@ package com.zhehekeji.web.service.ksec; - import com.zhehekeji.common.util.FileUtil; import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.service.PlcService; @@ -71,9 +70,16 @@ public class KsecNettyClient { try { createClient(ksec); } catch (Exception e) { + channel.close(); //没连上 继续 log.error("reconnect error num:{}", num); + //关闭当前链接 num++; +// try{ +// Thread.sleep(ksec.getReconnectInterval()); +// }catch (Exception ex){ +// throw new RuntimeException(ex); +// } continue; } isConnected = true; diff --git a/web/src/main/java/com/zhehekeji/web/service/putian/PTCheckContent.java b/web/src/main/java/com/zhehekeji/web/service/putian/PTCheckContent.java index a206edd..a4e3ade 100644 --- a/web/src/main/java/com/zhehekeji/web/service/putian/PTCheckContent.java +++ b/web/src/main/java/com/zhehekeji/web/service/putian/PTCheckContent.java @@ -23,8 +23,8 @@ public class PTCheckContent { PTCheckContent ptContent = new PTCheckContent(); String [] strings = data.split(","); ptContent.setSRMNUmber(strings[0]); - ptContent.setTaskNo(strings[1]); - ptContent.setGoodsLocation(strings[2]); + ptContent.setGoodsLocation(strings[1]); + ptContent.setTaskNo(strings[2]); ptContent.setCode(strings[3]); ptContent.setCount(Integer.valueOf(strings[4])); return ptContent; 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 812152e..1da833d 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 @@ -1,7 +1,9 @@ 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.TMTransmission; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,10 +13,12 @@ public class PTData { protected static String SPLIT = "#"; - private static String END_STRING = "\n"; + private static String END_STRING = "$"; public static String HEART_TYPE = "HB"; + private static String STREET_HEAD = "SRM"; + /** * 此报文是无需回复的报文 */ @@ -23,12 +27,12 @@ public class PTData { /** * 此报文是需要回复的报文 */ - protected static String FLOW_R = "R"; + public static String FLOW_R = "R"; /** * 此报文是回复的报文 */ - protected static String FLOW_A = "A"; + public static String FLOW_A = "A"; /** * 1.空货位盘点开始(EmptyCheck01): EC01 @@ -60,13 +64,20 @@ public class PTData { private String Type; + private static int IOrderNum = 0; + private String SOrderNum; + private String Content; +// private String MachineName; public PTData(String data){ String[] strings = data.split(SPLIT); FlowControl = strings[0]; - Type = strings[1]; - Content = strings[2]; + SOrderNum = strings[1]; + Type = strings[2]; + String content = strings[3]; + Content = content.substring(0, content.length()-1); +// Content = convertContent(content); } public static PTData HeartBeat(){ @@ -77,7 +88,7 @@ public class PTData { return ptData; } - public static PTData IntoStock(String SRMNumber,String taskId,String goodsLocation,String picPath){ + public static PTData IntoStock02(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); @@ -91,10 +102,10 @@ public class PTData { return ptData; } - public static PTData StockCheck03(String SRMNumber,String taskId,String goodsLocation,String YN){ + public static PTData StockCheck03(String SRMNumber,String taskId,String YN){ StringBuffer contentSB = new StringBuffer(); - contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(YN); - PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,STOCK_CHECK_03); + contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(YN); + PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_03); return ptData; } @@ -105,30 +116,59 @@ public class PTData { * @param goodsLocation * @return */ - public static PTData StockCheck04(String SRMNumber, String taskId, String goodsLocation, Stock stock){ +// public static PTData StockCheck04(String SRMNumber, String taskId, String goodsLocation, Stock stock){ +// StringBuffer contentSB = new StringBuffer(); +// String status = stock.getStatus().equals("2")?"Y":"N"; +// String ip ="http://"+ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"+stock.getCode()+"/"+stock.getCheckNum()+"/"+stock.getCheckNum()+"/"; +// 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(taskId).append(",").append(goodsLocation).append(",").append(stock.getWmsCode()).append(",").append(stock.getWmsCount()) +// .append(",").append(stock.getCode()).append(",").append(stock.getCount()).append(",").append(status).append(",").append(pic1) +// .append("$").append(pic2).append("$").append(pic3).append("$").append(pic4).append("$").append(pic5).append("$").append(pic6); +// PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); +// return ptData; +// } + + public static PTData StockCheck04(TMTransmission tmTransmission){ StringBuffer contentSB = new StringBuffer(); - String status = stock.getStatus().equals("2")?"Y":"N"; - String ip ="http://"+ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"+stock.getCode()+"/"+stock.getCheckNum()+"/"+stock.getCheckNum()+"/"; + String SRMNumber = tmTransmission.getSRMNumber(); + String goodsLocation = tmTransmission.getGoodsLocation(); + String taskId = tmTransmission.getTaskNo(); + String smokeCode = tmTransmission.getCode(); + String smokeCount = tmTransmission.getCount().toString(); + String checkSmokeCode = tmTransmission.getRstCode(); + String checkSmokeCount = tmTransmission.getRstCount(); + String checkRst = tmTransmission.getCheckRst().equals("1")?"Y":"N"; + String ip ="http://"+ClientChanel.getIpFromId(tmTransmission.getSRMNumber())+":9009/pic/"+tmTransmission.getGoodsLocation()+"/" + +tmTransmission.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(taskId).append(",").append(goodsLocation).append(",").append(stock.getWmsCode()).append(",").append(stock.getWmsCount()) - .append(",").append(stock.getCode()).append(",").append(stock.getCount()).append(",").append(status).append(",").append(pic1) - .append("$").append(pic2).append("$").append(pic3).append("$").append(pic4).append("$").append(pic5).append("$").append(pic6); - PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,STOCK_CHECK_04); + contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",").append(taskId).append(",").append(smokeCode).append(",").append(smokeCount) + .append(",").append(checkSmokeCode).append(",").append(checkSmokeCount).append(",").append(checkRst).append(",").append(pic1) + .append("*").append(pic2).append("*").append(pic3).append("*").append(pic4).append("*").append(pic5).append("*").append(pic6); + PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04); return ptData; } - - public static PTData EmptyStatusResponse(PTEmptyCheckContent ptEmptyCheckContent){ + 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(); - sb.append(this.FlowControl).append(SPLIT).append(Type).append(SPLIT).append(Content).append(END_STRING); + sb.append(this.FlowControl).append(SPLIT).append(String.format("%04d", IOrderNum)).append(SPLIT).append(Type).append(SPLIT).append(Content).append(END_STRING); + IOrderNum++; + if(IOrderNum > 9999) + { + IOrderNum = 0; + } return sb.toString(); } @@ -137,6 +177,16 @@ public class PTData { this.Content = content; this.Type = type; } - + private String convertContent(String content){ + if (content.contains(STREET_HEAD)) { + return content; + } + else { + String [] strs = content.split(","); + Integer streetNum = Integer.parseInt(strs[0]); + String srmNumber = STREET_HEAD+String.format("%3d", streetNum); + return content.replace(strs[0], srmNumber); + } + } } 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 fc02ab6..1458451 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,8 +29,6 @@ public class PTDecoder extends LineBasedFrameDecoder { private PlcService plcService; private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); - - /** * failFast 与 maxLength 需要搭配使用,通过设置 failFast 可以控制抛出 TooLongFrameException 的时机, * 可以说 Netty 在细节上考虑得面面俱到。如果 failFast=true,那么在超出 maxLength 会立即抛出 TooLongFrameException,不再继续进行解码。 @@ -48,13 +46,12 @@ public class PTDecoder extends LineBasedFrameDecoder { protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { in = (ByteBuf) super.decode(ctx, in); if(in == null){ - log.debug("no data"); + log.info("no data"); }else { PTRunnable ptRunnable = new PTRunnable(ctx,in,emptyCheckService,plcService); threadPoolExecutor.execute(ptRunnable); } return null; - } public static class PTRunnable implements Runnable{ @@ -79,90 +76,96 @@ public class PTDecoder extends LineBasedFrameDecoder { if(ptData.getType().equals(PTData.HEART_TYPE)){ //心跳 什么都不处理,因为netty长链接,断开会感知 + }else if(ptData.getType().equals(PTData.EMPTY_CHECK_01)){ log.info("空货位检测开始"); - PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - emptyCheckService.emptyCheckStart(checkContent.getSRMNUmber(), checkContent.getTaskNo(), checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - //通知客户端开始检测 - ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber()); - EmptyCheckCodeInfo.start(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); + PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_01); +// PuTianNettyClient.write(ptDataSend); +// PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); +// emptyCheckService.emptyCheckStart(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); +// String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(emptyCheckContent.getSRMNUmber(),emptyCheckContent.getTaskNo()); +// //通知客户端开始检测 +// ClientChanel.write(startEmptyCheckStr,emptyCheckContent.getSRMNUmber()); +// EmptyCheckCodeInfo.start(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); }else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){ log.info("空货位检测结束"); - PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); - String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - //通知客户端结束检测 - ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber()); - - //等待2s把空货位盘点的结果发给普天 - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - emptyCheckService.updateEmptyCheckLastTime(checkContent.getTaskNo(),checkContent.getSRMNUmber()); - Map map = emptyCheckService.getAllEmptyStatus(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - map.forEach((k,v)->{ - PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),k,v); - PTData sendData = PTData.EmptyStatusResponse(ptEmptyCheckContent); - //返回普天该行的盘点结果 - PuTianNettyClient.write(sendData); - }); - //打印空货位的所有条码 - Set codes = EmptyCheckCodeInfo.getAllCode(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - log.info("【空货位扫描到的所有条码】,SRMNumber:{},row:{},startColumn:{},endColumn:{},taskId:{},\ncodes:{}",checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),checkContent.getTaskNo(),codes); - //清空所有的条码 - EmptyCheckCodeInfo.stop(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); - }else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){ - log.info("盘点具体货位"); - //发送给客户端 - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent()); - TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); - plcService.checkStart(tmTransmission); - String msg = tmTransmission.toString(); - ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); + PTData ptDataSendEnd = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_02); +// PuTianNettyClient.write(ptDataSendEnd); +// PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); +// String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); +// //通知客户端结束检测 +// ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber()); +// +// //等待2s把空货位盘点的结果发给普天 +// try { +// Thread.sleep(2000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// emptyCheckService.updateEmptyCheckLastTime(emptyCheckContent.getTaskNo(), emptyCheckContent.getSRMNUmber()); +// Map map = emptyCheckService.getAllEmptyStatus(emptyCheckContent.getSRMNUmber(), checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); +// map.forEach((k,v)->{ +// PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),k,v); +// PTData sendData = PTData.EmptyStatusResponse(ptEmptyCheckContent); +// //返回普天该行的盘点结果 +// PuTianNettyClient.write(sendData); +// }); +// //打印空货位的所有条码 +// Set codes = EmptyCheckCodeInfo.getAllCode(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo()); +// log.info("【空货位扫描到的所有条码】,SRMNumber:{},row:{},startColumn:{},endColumn:{},taskId:{},\ncodes:{}",checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),checkContent.getTaskNo(),codes); +// //清空所有的条码 +// EmptyCheckCodeInfo.stop(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); +// }else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){ +// log.info("盘点具体货位"); +// PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_01); +// //发送给客户端 +// PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent()); +// TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); +// plcService.checkStart(tmTransmission); +// String msg = tmTransmission.toString(); +// ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); }else if(ptData.getType().equals(PTData.STOCK_CHECK_02)){ log.info("盘点具体货位 ,货物已取到载货台"); - PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent()); - TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); - String msg = tmTransmission.toSC02String(); - ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); + PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_02); +// PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent()); +// TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); +// String msg = tmTransmission.toSC02String(); +// ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); }else if(ptData.getType().equals(PTData.Into_Stock_01)){ 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.IntoStock(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); + PTData resData = PTData.IntoStock02(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath); PuTianNettyClient.write(resData); }else if(ptData.getType().equals(PTData.Into_Stock_02)){ log.info("入库完成拍照"); PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); String picPath = plcService.IntoStockOver(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - - //向客户端发送读码指令,等待客户端返回条码 - ISTransmission isTransmission = new ISTransmission(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); - //为防万一,先清除code - ClientCodeMap.removeCode(ptOrderContent.getSRMNUmber()); - ClientChanel.write(isTransmission.toString(),ptOrderContent.getSRMNUmber()); - //发送结果给普天 - //若1分钟内仍为收到 则放弃 - Long start = System.currentTimeMillis(); - while (ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()) == null && (System.currentTimeMillis()-start)<60000){ - try { - Thread.sleep(300l); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - String code = ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()); - PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath,code); - PuTianNettyClient.write(resData); +// +// //向客户端发送读码指令,等待客户端返回条码 +// ISTransmission isTransmission = new ISTransmission(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); +// //为防万一,先清除code +// ClientCodeMap.removeCode(ptOrderContent.getSRMNUmber()); +// ClientChanel.write(isTransmission.toString(),ptOrderContent.getSRMNUmber()); +// //发送结果给普天 +// //若1分钟内仍为收到 则放弃 +// Long start = System.currentTimeMillis(); +// while (ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()) == null && (System.currentTimeMillis()-start)<60000){ +// try { +// Thread.sleep(300l); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } +// String code = ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()); +// PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath,code); +// PuTianNettyClient.write(resData); } } } - - } 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 ea1e17a..50be224 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 @@ -24,18 +24,18 @@ public class PTEmptyCheckContent { private String taskNo; - private Integer row; +// private Integer row; - private Integer startColumn; +// private Integer startColumn; - private Integer endColumn; +// private Integer endColumn; /** * Start OR END */ private String type; - private String shelve; +// private String shelve; /** * 盘点结果 @@ -48,31 +48,36 @@ public class PTEmptyCheckContent { String [] strings = data.split(","); ptContent.setSRMNUmber(strings[0]); ptContent.setTaskNo(strings[1]); - ptContent.setRow(Integer.valueOf(strings[2])); - ptContent.setStartColumn(Integer.valueOf(strings[3])); - ptContent.setEndColumn(Integer.valueOf(strings[4])); - ptContent.setType(strings[5]); +// ptContent.setRow(Integer.valueOf(strings[2])); +// ptContent.setStartColumn(Integer.valueOf(strings[3])); +// ptContent.setEndColumn(Integer.valueOf(strings[4])); +// ptContent.setType(strings[5]); + ptContent.setType(strings[2]); return ptContent; } +// public String toResponseString(){ +// StringBuffer sb = new StringBuffer(); +// sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(row).append(",") +// .append(startColumn).append(",").append(endColumn).append(",").append(emptyStatus); +// return sb.toString(); +// } + public String toResponseString(){ StringBuffer sb = new StringBuffer(); - sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(row).append(",") - .append(startColumn).append(",").append(endColumn).append(",").append(emptyStatus); + sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(goodsLocation).append(emptyStatus); return sb.toString(); } - public static PTEmptyCheckContent emptyCheckResponse(String SRMNUmber,String taskId,int row,int startColumn,int endColumn,String shelve,String emptyStatus){ + public static PTEmptyCheckContent emptyCheckResponse(String SRMNUmber,String taskId, String goodsLocation, 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.setRow(row); +// ptContent.setStartColumn(startColumn); +// ptContent.setEndColumn(endColumn); + ptContent.setGoodsLocation(goodsLocation); 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 49c779e..5307820 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 @@ -37,8 +37,8 @@ public class PTFilter extends ChannelInitializer { ChannelPipeline ph = ch.pipeline(); //30秒发一次心跳 ph.addLast(new IdleStateHandler(0, 30, 0, TimeUnit.SECONDS)); - ByteBuf byteBuf = Unpooled.copiedBuffer(">".getBytes()); - ph.addLast(new PTDecoder(1000,false,true,emptyCheckService,plcService)); + ByteBuf byteBuf = Unpooled.copiedBuffer("$".getBytes()); + ph.addLast(new PTDecoder(1000,true,true,emptyCheckService,plcService)); ph.addLast(new PtEncoder()); ph.addLast(new PTNettyHandler(nettyClient)); } 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 9969f15..ca0a4e3 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 @@ -45,6 +45,7 @@ public class PuTianNettyClient { } Bootstrap client = new Bootstrap(); client.group(group); + client.channel(NioSocketChannel.class); client.handler(new PTFilter(plcService,this,emptyCheckService)); @@ -70,13 +71,21 @@ public class PuTianNettyClient { } catch (InterruptedException e) { e.printStackTrace(); } +// while (ksec.getReconnectNum() == -1 || num < ksec.getReconnectNum() && !isConnected) { while (num < RECONNECT_NUM && !isConnected) { try { createClient(ksec); } catch (Exception e) { +// channel.close(); //没连上 继续 log.error("reconnect error num:{}", num); + //关闭当前链接 num++; +// try{ +// Thread.sleep(ksec.getReconnectInterval()); +// }catch (Exception ex){ +// throw new RuntimeException(ex); +// } continue; } isConnected = true; diff --git a/web/src/main/resources/application-dev.yml b/web/src/main/resources/application-dev.yml index 964df06..322b3f6 100644 --- a/web/src/main/resources/application-dev.yml +++ b/web/src/main/resources/application-dev.yml @@ -37,10 +37,12 @@ savePath: mp4Path: d://data/mp4/ # 普天上位地址 ksec: - ip: 192.168.125.5 + ip: 127.0.0.1 port: 3000 +# 服务端IP +IP: 127.0.0.1 # 服务端TCP端口 -serverPort: 3001 +serverPort: 4000 # ------------ 实时视频流 全部页面的格式 行列数量 videoStyleConfig: videoStyleRow: 4 @@ -56,6 +58,4 @@ lightSource: # -----tray 托盘 # -----goods 货物 # 照片 視頻保存多久 -deleteFileDays: 365 -# 服务端IP -IP: 192.168.1.1 \ No newline at end of file +deleteFileDays: 365 \ No newline at end of file diff --git a/web/src/main/resources/application-prod.yml b/web/src/main/resources/application-prod.yml index 8574b00..f17f461 100644 --- a/web/src/main/resources/application-prod.yml +++ b/web/src/main/resources/application-prod.yml @@ -14,16 +14,16 @@ spring: testWhileIdle: false timeBetweenEvictionRunsMillis: 60000 type: com.alibaba.druid.pool.DruidDataSource - url: jdbc:mysql://127.0.0.1:3306/lia_duoji_nanjing_wuliu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 + url: jdbc:mysql://115.236.65.98:12004/lia_duoji_nanjing_wuliu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8 username: root validationQuery: SELECT 1 FROM DUAL # --------本服务端口号 server: - port: 8099 + Port: 8099 # ----默认摄像头的连接信息 cameraConfig: # ------------球機選擇--- 0:利珀 1:海康 - cameraType: 0 + cameraType: 1 cameraPassword: a1234567 cameraUser: admin cameraPort: 37777 @@ -59,6 +59,14 @@ serverMode: 1 ksec: ip: 127.0.0.1 port: 3000 + #断点重连的次数:-1->不断重连 +# reconnectNum: -1 +# #断点重连的时间间隔(单位:ms) +# reconnectInterval: 10000 +# 服务端IP +IP: 127.0.0.1 +# 服务端TCP端口 +serverPort: 3001 # ------------ 实时视频流 全部页面的格式 行列数量 videoStyleConfig: videoStyleRow: 4