修改通讯方式,web端tcp服务端接收wcs发送的命令,客户端给wcs发送结果信息;更新通讯报文格式

nanjing-yancao-wuliuzhongxin-qsl
QuShuailong 3 years ago
parent e371363744
commit 6ea541fb2a

@ -35,6 +35,11 @@ public class PathUtil {
String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd")); String date = now.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
return cameraId+"/"+row+"-"+column+"/"+date + "/" +now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss-"))+row+"-"+column + "."+fileType; 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;
}
/** /**
* *

@ -92,6 +92,8 @@ public class ConfigProperties {
public static class KSEC{ public static class KSEC{
private String ip; private String ip;
private Integer port; private Integer port;
// private Integer reconnectNum = 10;
// private long reconnectInterval = 10000;
} }
@Data @Data

@ -38,9 +38,10 @@ public class ClientTestController {
@GetMapping("/emptyCheck/start") @GetMapping("/emptyCheck/start")
public Result<String> startEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row, public Result<String> startEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row,
@ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){ @ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){
emptyCheckService.emptyCheckStart(SRMNumber,taskId,row,startColumn,endColumn); // emptyCheckService.emptyCheckStart(SRMNumber,taskId,row,startColumn,endColumn);
String msg = ECTransmission.toEmptyCheckStartString(SRMNumber,taskId,row,startColumn,endColumn); // String msg = ECTransmission.toEmptyCheckStartString(SRMNumber,taskId,row,startColumn,endColumn);
ClientChanel.write(msg,SRMNumber); String msg = "";
ClientChanel.write(msg, SRMNumber);
return Result.success(msg); return Result.success(msg);
} }
@ -48,7 +49,8 @@ public class ClientTestController {
@GetMapping("/emptyCheck/stop") @GetMapping("/emptyCheck/stop")
public Result<String> stopEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row, public Result<String> stopEmptyCheck(@ApiParam("巷道标识")@RequestParam String SRMNumber,@ApiParam("盘点批次ID") @RequestParam String taskId, @ApiParam("检测第几行")@RequestParam Integer row,
@ApiParam("开始列")@RequestParam Integer startColumn,@ApiParam("结束列")@RequestParam Integer endColumn){ @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); ClientChanel.write(msg,SRMNumber);
//获取空货位的结果信息 //获取空货位的结果信息
// 返回给普天 // 返回给普天
@ -56,11 +58,11 @@ public class ClientTestController {
//String shevel = null; //String shevel = null;
Map<String,String> map = emptyCheckService.getAllEmptyStatus(SRMNumber,row,startColumn,endColumn); Map<String,String> map = emptyCheckService.getAllEmptyStatus(SRMNumber,row,startColumn,endColumn);
map.forEach((k,v)->{ // map.forEach((k,v)->{
PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,k,v); // PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(SRMNumber,taskId,row,startColumn,endColumn,k,v);
PTData ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent); // PTData ptData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
PuTianNettyClient.write(ptData); // PuTianNettyClient.write(ptData);
}); // });
// if(street.getLeftType() == 0){ // if(street.getLeftType() == 0){
// //单伸 // //单伸
// String SingleLeft = emptyCheckService.getEmptyStatus(SRMNumber,taskId,1,1,row,startColumn,endColumn); // 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); 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); PuTianNettyClient.write(ptData);
return Result.success(ptData.toString()); return Result.success(ptData.toString());
} }

@ -112,8 +112,8 @@ public class EmptyCheckService {
* *
* @param * @param
*/ */
public void emptyCheckStart(String SRMNUmber,String taskId,Integer row,Integer startColumn,Integer endColumn){ public void emptyCheckStart(String SRMNUmber,String taskId){
log.info("空托盘检测 按行开始SRMNUmber:{},taskNo:{},row:{},startColumn:{},endColumn:{}",SRMNUmber,taskId,row,startColumn,endColumn); log.info("空托盘检测 按行开始SRMNUmber:{},taskNo:{}",SRMNUmber,taskId);
Street street = streetService.getStreetByPlcId(SRMNUmber); Street street = streetService.getStreetByPlcId(SRMNUmber);
if(street == null){ if(street == null){
log.error(" no SRMNumer:{}",SRMNUmber); log.error(" no SRMNumer:{}",SRMNUmber);
@ -129,12 +129,12 @@ public class EmptyCheckService {
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
//将这些位置的旧数据清空 //将这些位置的旧数据清空
UpdateWrapper<EmptyCheck> wrapper = new UpdateWrapper<>(); UpdateWrapper<EmptyCheck> 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); emptyCheckMapper.delete(wrapper);
//新增空的盘点统计 //新增空的盘点统计
List<CheckStreetSummary> checkStreetSummaries = checkStreetSummaryMapper.selectList(new QueryWrapper<CheckStreetSummary>().eq("street_id",street.getId()).eq("task_id",taskId)); List<CheckStreetSummary> checkStreetSummaries = checkStreetSummaryMapper.selectList(new QueryWrapper<CheckStreetSummary>().eq("street_id",street.getId()).eq("task_id",taskId));
if(checkStreetSummaries.size() == 0){ if(checkStreetSummaries.size() == 0){
log.info("新增盘点统计SRMNUmber:{},taskNo:{},row:{}",SRMNUmber,taskId,row); log.info("新增盘点统计SRMNUmber:{},taskNo:{}",SRMNUmber,taskId);
CheckStreetSummary checkStreetSummary = new CheckStreetSummary(); CheckStreetSummary checkStreetSummary = new CheckStreetSummary();
checkStreetSummary.setTaskId(taskId); checkStreetSummary.setTaskId(taskId);
checkStreetSummary.setStartTime(LocalDateTime.now()); checkStreetSummary.setStartTime(LocalDateTime.now());
@ -215,7 +215,7 @@ public class EmptyCheckService {
String L02 = getEmptyStatus(street.getId(),2,1,row,startColumn,endColumn); String L02 = getEmptyStatus(street.getId(),2,1,row,startColumn,endColumn);
map.put("L02",L02); map.put("L02",L02);
} }
if(street.getRightType() == 2){ if(street.getRightType() == 1){
String R02 = getEmptyStatus(street.getId(),2,2,row,startColumn,endColumn); String R02 = getEmptyStatus(street.getId(),2,2,row,startColumn,endColumn);
map.put("R02",R02); map.put("R02",R02);
} }

@ -254,6 +254,7 @@ public class PlcService {
}else { }else {
cameraControlModule.pic(cameraId,0,realPath); cameraControlModule.pic(cameraId,0,realPath);
} }
log.info("capture the photo: {}", realPath);
return path; return path;
} }
@ -446,10 +447,10 @@ public class PlcService {
public Stock checkStart(TMTransmission tmTransmission){ public Stock checkStart(TMTransmission tmTransmission){
log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{}goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation()); log.info("【开始盘点货位】save stock info ,taskId:{},SRMNumber:{}goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber()); Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber());
Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7)); Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(5,8));
Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7)); Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(8,10));
Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2; Integer leftRight = Integer.valueOf(tmTransmission.getGoodsLocation().substring(4,5));
Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3)); Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(10,12));
Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); Stock old = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column);
if(old == null){ if(old == null){
old = new Stock(); old = new Stock();
@ -488,10 +489,10 @@ public class PlcService {
public Stock checkEnd(TMTransmission tmTransmission){ public Stock checkEnd(TMTransmission tmTransmission){
log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation()); log.info("【盘点货位结果返回】update stock info ,taskId:{},SRMNumber:{},goodsLocation:{}",tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),tmTransmission.getGoodsLocation());
Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber()); Street street = streetService.getStreetByPlcId(tmTransmission.getSRMNumber());
Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(3,7)); Integer row = Integer.valueOf(tmTransmission.getGoodsLocation().substring(5,8));
Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(7)); Integer column = Integer.valueOf(tmTransmission.getGoodsLocation().substring(8,10));
Integer leftRight = tmTransmission.getGoodsLocation().substring(0,1).equals("L")?1:2; Integer leftRight = Integer.valueOf(tmTransmission.getGoodsLocation().substring(4,5));
Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(1,3)); Integer inout = Integer.valueOf(tmTransmission.getGoodsLocation().substring(10,12));
Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column); Stock stock = stockMapper.getByStreetAndDirectionAndSideAndRowColumn(street.getId(),leftRight,inout,row,column);
if(stock != null){ if(stock != null){
stock.setCount(tmTransmission.getCount()); stock.setCount(tmTransmission.getCount());
@ -580,12 +581,16 @@ public class PlcService {
*/ */
public String IntoStock(String SRMNumber,String taskId,String goodsLocation){ public String IntoStock(String SRMNumber,String taskId,String goodsLocation){
Street street = streetService.getStreetByPlcId(SRMNumber); Street street = streetService.getStreetByPlcId(SRMNumber);
if (street == null){
log.error("SRMNum: {} 对应的巷道不存在");
}
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(3,7)); Integer row = Integer.valueOf(goodsLocation.substring(8,10));
Integer column = Integer.valueOf(goodsLocation.substring(7)); Integer column = Integer.valueOf(goodsLocation.substring(5,8));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2; Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5));
Integer inout = Integer.valueOf(goodsLocation.substring(1,3)); Integer inout = Integer.valueOf(goodsLocation.substring(11,12));
log.info("camera id:{}, row:{}, column:{}, direction:{}, inout:{}", cameraId, row, column, leftRight, inout);
//转动拍照 //转动拍照
gyrateCameraByCode(cameraId,"C1"); gyrateCameraByCode(cameraId,"C1");
@ -596,7 +601,8 @@ public class PlcService {
e.printStackTrace(); 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 order = new Order();
order.setStreetId(street.getId()); order.setStreetId(street.getId());
order.setOrderNum(taskId); order.setOrderNum(taskId);
@ -606,9 +612,13 @@ public class PlcService {
order.setIntoStockTime(LocalDateTime.now()); order.setIntoStockTime(LocalDateTime.now());
order.setRow1(row); order.setRow1(row);
order.setColumn1(column); order.setColumn1(column);
orderMapper.insert(order); if (oldOrder != null){
orderMapper.updateById(order);
}else{
orderMapper.insert(order);
}
cameraCapture(cameraId,false,0l,path); 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); Street street = streetService.getStreetByPlcId(SRMNumber);
//南京烟草物流只有一个相机 //南京烟草物流只有一个相机
Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id(); Integer cameraId = street.getCamera1Id() == null ? street.getCamera2Id():street.getCamera1Id();
Integer row = Integer.valueOf(goodsLocation.substring(3,7)); Integer row = Integer.valueOf(goodsLocation.substring(8,10));
Integer column = Integer.valueOf(goodsLocation.substring(7)); Integer column = Integer.valueOf(goodsLocation.substring(5,8));
Integer leftRight = goodsLocation.substring(0,1).equals("L")?1:2; Integer leftRight = Integer.valueOf(goodsLocation.substring(4,5));
Integer inout = Integer.valueOf(goodsLocation.substring(1,3)); 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 inoutString = inout == 1 ? "IN" : "OUT";
String leftRightString = leftRight == 1 ? "L":"R"; String leftRightString = leftRight == 1 ? "L":"R";
//转动拍照 //转动拍照
@ -636,7 +647,7 @@ public class PlcService {
e.printStackTrace(); e.printStackTrace();
} }
String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column); String path = PathUtil.createFileNameByRowColumn("jpg",cameraId,row,column, goodsLocation);
Order order = orderMapper.getOneByOrderNum(taskId); Order order = orderMapper.getOneByOrderNum(taskId);
if(order != null){ if(order != null){
Order upd = new Order(); Order upd = new Order();
@ -646,7 +657,6 @@ public class PlcService {
orderMapper.updateById(upd); orderMapper.updateById(upd);
} }
cameraCapture(cameraId,false,0l,path); cameraCapture(cameraId,false,0l,path);
return configProperties.getIP()+":9007/"+path; return configProperties.getIP()+":9007/api/pic/"+path;
} }
} }

@ -9,11 +9,12 @@ import lombok.Data;
public class CETransmission { public class CETransmission {
private static String HEADER = "CE"; private static String HEADER = "CE";
private static String Split = "&";
private String SRMNumber; private String SRMNumber;
public String toString(){ public String toString(){
return HEADER + "," + SRMNumber; return HEADER + Split + SRMNumber;
} }
public static String getHEADER(){ public static String getHEADER(){
@ -21,7 +22,7 @@ public class CETransmission {
} }
public CETransmission(String body){ public CETransmission(String body){
String [] strings = body.split(","); String [] strings = body.split(Split);
if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){
SRMNumber = strings[1]; SRMNumber = strings[1];
} }

@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.net.InetSocketAddress;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -42,7 +43,7 @@ public class ClientChanel {
} }
public static void putSRMNUmber_Ip(String ID,String ip){ 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){ public static String getIpFromId(String ID){
@ -57,13 +58,15 @@ public class ClientChanel {
return IP_SRMNumberMap.get(ip); return IP_SRMNumberMap.get(ip);
} }
public static void connect(String key, Channel channel){ public static void connect(String SRMNumber, Channel channel){
channelMap.put(key,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){ public static void disConnect(String key){
channelMap.remove(key); channelMap.remove(key);
} }
public static Set<String> keys(){ public static Set<String> keys(){

@ -1,10 +1,10 @@
package com.zhehekeji.web.service.client; 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.entity.Stock;
import com.zhehekeji.web.service.EmptyCheckService; import com.zhehekeji.web.service.EmptyCheckService;
import com.zhehekeji.web.service.PlcService; import com.zhehekeji.web.service.PlcService;
import com.zhehekeji.web.service.putian.PTData; import com.zhehekeji.web.service.putian.*;
import com.zhehekeji.web.service.putian.PuTianNettyClient;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
@ -14,6 +14,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -26,13 +27,21 @@ public class Decoder extends DelimiterBasedFrameDecoder {
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); 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 static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,15,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000));
private EmptyCheckService emptyCheckService; private EmptyCheckService emptyCheckService;
private PlcService plcService; private PlcService plcService;
public Decoder(PlcService plcService,EmptyCheckService emptyCheckService) { 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.plcService = plcService;
this.emptyCheckService = emptyCheckService; this.emptyCheckService = emptyCheckService;
} }
@ -69,57 +78,161 @@ public class Decoder extends DelimiterBasedFrameDecoder {
@Override @Override
public void run() { public void run() {
String body = in.toString(Charset.forName("UTF-8")); String body = in.toString(Charset.forName("UTF-8"));
tcpLogger.info("client:{}",body); tcpLogger.info("receive client:{}, data length:{}",body, body.length());
if(body.startsWith(HBTransmission.getHEADER())) { //普天发送的报文里带"#"
//心跳 if(body.contains("#")){
HBTransmission hbTransmission = new HBTransmission(body); ClientChanel.connect(WCS_CLIENT, ctx.channel());
//回复客户端心跳 tcpLogger.info("client:{} connect", WCS_CLIENT);
ctx.channel().writeAndFlush(hbTransmission.toString()); PTData ptData = new PTData(body+END_STRING);
//tcpLogger.info("client:{} heart", hbTransmission.getSRMNumber()); if(ptData.getType().equals(PTData.HEART_TYPE) ||
in.release(); ptData.getFlowControl().equals(PTData.FLOW_A)){
} else if(body.startsWith(TMTransmission.getHeader())){ //心跳 什么都不处理,因为netty长链接断开会感知
//盘点指令 //普天回复的消息也不用处理
TMTransmission tmTransmission = new TMTransmission(body); }
if(tmTransmission.isCollectOver()){ // else if (ptData.getType().equals(PT_CLIENT)){
//给普天发送数据采集完毕指令 // ClientChanel.connect(WCS_CLIENT, ctx.channel());
PTData ptData = PTData.StockCheck03(tmTransmission.getSRMNumber(),tmTransmission.getTaskNo(),tmTransmission.getGoodsLocation(),"Y"); // tcpLogger.info("client:{} connect", WCS_CLIENT);
PuTianNettyClient.write(ptData); // }
}else { else if (ptData.getType().equals(PTData.EMPTY_CHECK_01)){
//收到盘点结果 log.info("空货位检测开始");
Stock stock = plcService.checkEnd(tmTransmission); PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_01);
//将盘点结果发给普天 PuTianNettyClient.write(ptDataSend);
PTData ptData = PTData.StockCheck04(tmTransmission.getSRMNumber(),tmTransmission.getTaskNo(),tmTransmission.getGoodsLocation(),stock); 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); PuTianNettyClient.write(ptData);
//添加到实时信息里 //保存空货位条码
RealtimeCheckMap.put(tmTransmission.getSRMNumber(),tmTransmission.checkInfo()); EmptyCheckCodeInfo.addCode(ecTransmission.getSRMNumber(),ecTransmission.getRow(),ecTransmission.getStartColumn(), ecTransmission.getEndColumn(), ecTransmission.getOriginCode());
//更新盤點統計 //保存空货位信息
emptyCheckService.updateCheckLastTime(tmTransmission.getTaskNo(),tmTransmission.getSRMNumber(),stock.getCode()); emptyCheckService.emptyCheckLog(ecTransmission);
in.release();
} }
in.release(); else if(body.startsWith("DC")){
}else if(body.startsWith(CETransmission.getHEADER())){ //客户端断开连接
//客户端建立连接 String [] strings = body.split("&");
CETransmission ceTransmission = new CETransmission(body); if(strings != null && strings.length == 2){
//回复客户端,建立连接完成 tcpLogger.info("client:{} disConnect", strings[1]);
ctx.channel().writeAndFlush(ceTransmission.toString()); ClientChanel.disConnect(strings[1]);
ClientChanel.connect(ceTransmission.getSRMNumber(), ctx.channel()); }
tcpLogger.info("client:{} connect", ceTransmission.getSRMNumber()); in.release();
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]);
} }
in.release(); // else if (body.contains("EMPTY_CLIENT")){
// ClientChanel.connect(EMPTY_CLIENT_NAME, ctx.channel());
// tcpLogger.info("client:{} connect", EMPTY_CLIENT_NAME);
// in.release();
// }
} }
} }
} }

@ -14,8 +14,9 @@ import lombok.Data;
public class ECTransmission { public class ECTransmission {
private static String HEADER = "EC"; private static String HEADER = "EC";
private static String Split = "&";
private static String Split = ","; // private static String Split = ",";
private String SRMNumber; private String SRMNumber;
@ -27,6 +28,8 @@ public class ECTransmission {
private String isEmpty; private String isEmpty;
private String emptyMsg;
/** /**
* 1: 2 * 1: 2
*/ */
@ -50,25 +53,26 @@ public class ECTransmission {
*/ */
private String originCode; private String originCode;
public String toString(){ // public String toString(){
return HEADER + "," + SRMNumber; // return HEADER + Split + SRMNumber;
} // }
public static String getHEADER(){ public static String getHEADER(){
return HEADER; return HEADER;
} }
public ECTransmission(String body){ public ECTransmission(String body){
String [] strings = body.split(","); String [] strings = body.split(Split);
if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){ if(strings != null && strings.length == 4 && HEADER.equals(strings[0])){
SRMNumber = strings[1]; SRMNumber = strings[1];
taskId = strings[2]; taskId = strings[2];
goodsLocation = strings[3]; // goodsLocation = strings[3];
isEmpty = strings[4]; // isEmpty = strings[4];
direction = goodsLocation.substring(0).equals("L") ? 1:2; emptyMsg = strings[3];
side = Integer.valueOf(goodsLocation.substring(2,3)); // direction = goodsLocation.substring(0).equals("L") ? 1:2;
row = Integer.valueOf(goodsLocation.substring(3,6)); // side = Integer.valueOf(goodsLocation.substring(2,3));
column = Integer.valueOf(goodsLocation.substring(6,9)); // 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])){ }else if(strings != null && strings.length == 8 && HEADER.equals(strings[0])){
//todo length == 9 //todo length == 9
SRMNumber = strings[1]; SRMNumber = strings[1];
@ -90,9 +94,9 @@ public class ECTransmission {
* *
* @return * @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); 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(); return sb.toString();
} }
@ -100,9 +104,9 @@ public class ECTransmission {
* *
* @return * @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); 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(); return sb.toString();
} }
} }

@ -15,8 +15,8 @@ public class EmptyCheckCodeInfo {
private static Map<String, Set<String>> allCode = new HashMap<>(); private static Map<String, Set<String>> allCode = new HashMap<>();
public static void start(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ public static void start(String SRMNumber, String taskNo){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); String key = String.format("{}-{}",SRMNumber, taskNo);
allCode.remove(key); allCode.remove(key);
} }
@ -29,8 +29,8 @@ public class EmptyCheckCodeInfo {
codes.add(code); codes.add(code);
} }
public static Set<String> getAllCode(String SRMNumber,Integer row,Integer startColumn,Integer endColumn){ public static Set<String> getAllCode(String SRMNumber, String taskNo){
String key = String.format("{}-{}-{}-{}",SRMNumber,row,startColumn,endColumn); String key = String.format("{}-{}",SRMNumber, taskNo);
return allCode.get(key); return allCode.get(key);
} }

@ -12,12 +12,13 @@ import java.nio.charset.StandardCharsets;
* *
*/ */
public class Encoder extends MessageToByteEncoder<String> { public class Encoder extends MessageToByteEncoder<String> {
private static String END_STRING = ">";
private static final Logger tcpLogger = LoggerFactory.getLogger("tcp"); private static final Logger tcpLogger = LoggerFactory.getLogger("tcp");
@Override @Override
protected void encode(ChannelHandlerContext channelHandlerContext, String data, ByteBuf byteBuf) throws Exception { protected void encode(ChannelHandlerContext channelHandlerContext, String data, ByteBuf byteBuf) throws Exception {
data = data + ";"; data = data + END_STRING;
tcpLogger.info("send to client:{}",data); tcpLogger.info("send to client:{}, length:{}",data, data.length());
byteBuf.writeBytes(data.getBytes(StandardCharsets.UTF_8)); byteBuf.writeBytes(data.getBytes(StandardCharsets.UTF_8));
} }
} }

@ -9,11 +9,12 @@ import lombok.Data;
public class HBTransmission { public class HBTransmission {
private static String HEADER = "HB"; private static String HEADER = "HB";
private static String Split = "&";
private String SRMNumber; private String SRMNumber;
public String toString(){ public String toString(){
return HEADER + "," + SRMNumber; return HEADER + Split + SRMNumber;
} }
public static String getHEADER(){ public static String getHEADER(){
@ -21,7 +22,7 @@ public class HBTransmission {
} }
public HBTransmission(String body){ public HBTransmission(String body){
String [] strings = body.split(","); String [] strings = body.split(Split);
if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){ if(strings != null && strings.length == 2 && HEADER.equals(strings[0])){
SRMNumber = strings[1]; SRMNumber = strings[1];
} }

@ -22,7 +22,8 @@ public class NettyConnectHandler extends ChannelInboundHandlerAdapter {
public void channelActive(ChannelHandlerContext ctx) throws Exception { public void channelActive(ChannelHandlerContext ctx) throws Exception {
InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
String clientIp = socketAddress.getAddress().getHostAddress(); String clientIp = socketAddress.getAddress().getHostAddress();
log.info("ip:{} connected",clientIp); int clientPort = socketAddress.getPort();
log.info("ip:{} port:{} connected",clientIp, clientPort);
ctx.fireChannelActive(); ctx.fireChannelActive();
} }
@ -33,7 +34,8 @@ public class NettyConnectHandler extends ChannelInboundHandlerAdapter {
public void channelInactive(ChannelHandlerContext ctx) throws Exception { public void channelInactive(ChannelHandlerContext ctx) throws Exception {
InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress(); InetSocketAddress socketAddress = (InetSocketAddress) ctx.channel().remoteAddress();
String clientIp = socketAddress.getAddress().getHostAddress(); 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); String ID = ClientChanel.getIDFromIp(clientIp);
//设置客户端下线 //设置客户端下线
ClientChanel.disConnect(ID); ClientChanel.disConnect(ID);

@ -36,10 +36,22 @@ public class TMTransmission {
private Integer count; private Integer count;
/**
*
*/
private String rstCode;
private String rstCount;
private String visualTest; private String visualTest;
private String isDisConnect; private String isDisConnect;
/**
*
*/
private String checkRst;
/** /**
* 1: 2 * 1: 2
*/ */
@ -50,14 +62,14 @@ public class TMTransmission {
*/ */
private Integer side; private Integer side;
private static String Split = ","; private static String Split = "&";
private boolean collectOver; private boolean collectOver;
public String toString(){ public String toString(){
StringBuffer sb = new StringBuffer(header); StringBuffer sb = new StringBuffer(header);
sb.append(Split).append(SRMNumber).append(Split).append(taskNo).append(Split) sb.append(Split).append(SRMNumber).append(Split).append(goodsLocation).append(Split)
.append(goodsLocation).append(Split).append(trayNo).append(Split).append(code) .append(taskNo).append(Split).append(code)
.append(Split).append(count).append(Split).append(visualTest); .append(Split).append(count).append(Split).append(visualTest);
return sb.toString(); return sb.toString();
} }
@ -70,25 +82,52 @@ public class TMTransmission {
return header; 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){ public TMTransmission(String body){
String [] strings = body.split(Split); String [] strings = body.split(Split);
if(strings != null && strings.length >= 9 && strings[0].equals(header)){ if(strings != null && strings.length >= 9 && strings[0].equals(header)){
if(strings.length == 9){ if(strings.length == 9){
SRMNumber = strings[1]; SRMNumber = strings[1];
taskNo = strings[2]; goodsLocation = strings[2];
goodsLocation = strings[3]; taskNo = strings[3];
trayNo = strings[4]; code = strings[4];
code = strings[5]; count = Integer.valueOf(strings[5]);
count = Integer.valueOf(strings[6]); rstCode = strings[6];
visualTest = strings[7]; rstCount = strings[7];
isDisConnect = strings[8]; checkRst = strings[8];
direction = goodsLocation.substring(0).equals("L") ? 1:2;
side = Integer.valueOf(goodsLocation.substring(2,3));
//checkType = strings[7];
collectOver = false; collectOver = false;
if("Y".equals(isDisConnect)){ // if("Y".equals(isDisConnect)){
//需要拆分之前的 // //需要拆分之前的
} // }
} }
}else if(strings.length == 3){ }else if(strings.length == 3){

@ -6,7 +6,6 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class JYDamHelper { public class JYDamHelper {
public static JYDAMEquip Connect(String ip,int port){ public static JYDAMEquip Connect(String ip,int port){
JYDAMEquip equip = new JYDAMEquip(); JYDAMEquip equip = new JYDAMEquip();
equip.Init(ip,port,254); equip.Init(ip,port,254);

@ -1,6 +1,5 @@
package com.zhehekeji.web.service.ksec; package com.zhehekeji.web.service.ksec;
import com.zhehekeji.common.util.FileUtil; import com.zhehekeji.common.util.FileUtil;
import com.zhehekeji.web.config.ConfigProperties; import com.zhehekeji.web.config.ConfigProperties;
import com.zhehekeji.web.service.PlcService; import com.zhehekeji.web.service.PlcService;
@ -71,9 +70,16 @@ public class KsecNettyClient {
try { try {
createClient(ksec); createClient(ksec);
} catch (Exception e) { } catch (Exception e) {
channel.close();
//没连上 继续 //没连上 继续
log.error("reconnect error num:{}", num); log.error("reconnect error num:{}", num);
//关闭当前链接
num++; num++;
// try{
// Thread.sleep(ksec.getReconnectInterval());
// }catch (Exception ex){
// throw new RuntimeException(ex);
// }
continue; continue;
} }
isConnected = true; isConnected = true;

@ -23,8 +23,8 @@ public class PTCheckContent {
PTCheckContent ptContent = new PTCheckContent(); PTCheckContent ptContent = new PTCheckContent();
String [] strings = data.split(","); String [] strings = data.split(",");
ptContent.setSRMNUmber(strings[0]); ptContent.setSRMNUmber(strings[0]);
ptContent.setTaskNo(strings[1]); ptContent.setGoodsLocation(strings[1]);
ptContent.setGoodsLocation(strings[2]); ptContent.setTaskNo(strings[2]);
ptContent.setCode(strings[3]); ptContent.setCode(strings[3]);
ptContent.setCount(Integer.valueOf(strings[4])); ptContent.setCount(Integer.valueOf(strings[4]));
return ptContent; return ptContent;

@ -1,7 +1,9 @@
package com.zhehekeji.web.service.putian; 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.entity.Stock;
import com.zhehekeji.web.service.client.ClientChanel; import com.zhehekeji.web.service.client.ClientChanel;
import com.zhehekeji.web.service.client.TMTransmission;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -11,10 +13,12 @@ public class PTData {
protected static String SPLIT = "#"; protected static String SPLIT = "#";
private static String END_STRING = "\n"; private static String END_STRING = "$";
public static String HEART_TYPE = "HB"; 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 * 1.EmptyCheck01 EC01
@ -60,13 +64,20 @@ public class PTData {
private String Type; private String Type;
private static int IOrderNum = 0;
private String SOrderNum;
private String Content; private String Content;
// private String MachineName;
public PTData(String data){ public PTData(String data){
String[] strings = data.split(SPLIT); String[] strings = data.split(SPLIT);
FlowControl = strings[0]; FlowControl = strings[0];
Type = strings[1]; SOrderNum = strings[1];
Content = strings[2]; Type = strings[2];
String content = strings[3];
Content = content.substring(0, content.length()-1);
// Content = convertContent(content);
} }
public static PTData HeartBeat(){ public static PTData HeartBeat(){
@ -77,7 +88,7 @@ public class PTData {
return 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(); StringBuffer contentSB = new StringBuffer();
contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(picPath); 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); PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,Into_Stock_02);
@ -91,10 +102,10 @@ public class PTData {
return 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(); StringBuffer contentSB = new StringBuffer();
contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(YN); contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(YN);
PTData ptData = new PTData(contentSB.toString(),FLOW_NO_NEED_RES,STOCK_CHECK_03); PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_03);
return ptData; return ptData;
} }
@ -105,30 +116,59 @@ public class PTData {
* @param goodsLocation * @param goodsLocation
* @return * @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(); StringBuffer contentSB = new StringBuffer();
String status = stock.getStatus().equals("2")?"Y":"N"; String SRMNumber = tmTransmission.getSRMNumber();
String ip ="http://"+ClientChanel.getIpFromId(SRMNumber)+":9009/pic/"+stock.getCode()+"/"+stock.getCheckNum()+"/"+stock.getCheckNum()+"/"; 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 pic1 = ip + 1 + ".png";
String pic2 = ip + 2 + ".png"; String pic2 = ip + 2 + ".png";
String pic3 = ip + 3 + ".png"; String pic3 = ip + 3 + ".png";
String pic4 = ip + 4 + ".png"; String pic4 = ip + 4 + ".png";
String pic5 = ip + 5 + ".png"; String pic5 = ip + 5 + ".png";
String pic6 = ip + 6 + ".png"; String pic6 = ip + 6 + ".png";
contentSB.append(SRMNumber).append(",").append(taskId).append(",").append(goodsLocation).append(",").append(stock.getWmsCode()).append(",").append(stock.getWmsCount()) contentSB.append(SRMNumber).append(",").append(goodsLocation).append(",").append(taskId).append(",").append(smokeCode).append(",").append(smokeCount)
.append(",").append(stock.getCode()).append(",").append(stock.getCount()).append(",").append(status).append(",").append(pic1) .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); .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); PTData ptData = new PTData(contentSB.toString(),FLOW_R,STOCK_CHECK_04);
return ptData; 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); return new PTData(ptEmptyCheckContent.toResponseString(),FLOW_NO_NEED_RES,EMPTY_CHECK_03);
} }
public String toString(){ public String toString(){
StringBuffer sb = new StringBuffer(); 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(); return sb.toString();
} }
@ -137,6 +177,16 @@ public class PTData {
this.Content = content; this.Content = content;
this.Type = type; 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);
}
}
} }

@ -29,8 +29,6 @@ public class PTDecoder extends LineBasedFrameDecoder {
private PlcService plcService; private PlcService plcService;
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000)); private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(7,21,30, TimeUnit.MILLISECONDS,new ArrayBlockingQueue<>(20000));
/** /**
* failFast maxLength 使 failFast TooLongFrameException * failFast maxLength 使 failFast TooLongFrameException
* Netty failFast=true maxLength TooLongFrameException * Netty failFast=true maxLength TooLongFrameException
@ -48,13 +46,12 @@ public class PTDecoder extends LineBasedFrameDecoder {
protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
in = (ByteBuf) super.decode(ctx, in); in = (ByteBuf) super.decode(ctx, in);
if(in == null){ if(in == null){
log.debug("no data"); log.info("no data");
}else { }else {
PTRunnable ptRunnable = new PTRunnable(ctx,in,emptyCheckService,plcService); PTRunnable ptRunnable = new PTRunnable(ctx,in,emptyCheckService,plcService);
threadPoolExecutor.execute(ptRunnable); threadPoolExecutor.execute(ptRunnable);
} }
return null; return null;
} }
public static class PTRunnable implements Runnable{ public static class PTRunnable implements Runnable{
@ -79,90 +76,96 @@ public class PTDecoder extends LineBasedFrameDecoder {
if(ptData.getType().equals(PTData.HEART_TYPE)){ if(ptData.getType().equals(PTData.HEART_TYPE)){
//心跳 什么都不处理,因为netty长链接断开会感知 //心跳 什么都不处理,因为netty长链接断开会感知
}else if(ptData.getType().equals(PTData.EMPTY_CHECK_01)){ }else if(ptData.getType().equals(PTData.EMPTY_CHECK_01)){
log.info("空货位检测开始"); log.info("空货位检测开始");
PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_01);
emptyCheckService.emptyCheckStart(checkContent.getSRMNUmber(), checkContent.getTaskNo(), checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); // PuTianNettyClient.write(ptDataSend);
String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); // PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
//通知客户端开始检测 // emptyCheckService.emptyCheckStart(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo());
ClientChanel.write(startEmptyCheckStr,checkContent.getSRMNUmber()); // String startEmptyCheckStr = ECTransmission.toEmptyCheckStartString(emptyCheckContent.getSRMNUmber(),emptyCheckContent.getTaskNo());
EmptyCheckCodeInfo.start(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); // //通知客户端开始检测
// ClientChanel.write(startEmptyCheckStr,emptyCheckContent.getSRMNUmber());
// EmptyCheckCodeInfo.start(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo());
}else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){ }else if(ptData.getType().equals(PTData.EMPTY_CHECK_02)){
log.info("空货位检测结束"); log.info("空货位检测结束");
PTEmptyCheckContent checkContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent()); PTData ptDataSendEnd = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.EMPTY_CHECK_02);
String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); // PuTianNettyClient.write(ptDataSendEnd);
//通知客户端结束检测 // PTEmptyCheckContent emptyCheckContent = PTEmptyCheckContent.EmptyCheck(ptData.getContent());
ClientChanel.write(endEmptyCheckStr,checkContent.getSRMNUmber()); // String endEmptyCheckStr = ECTransmission.toEmptyCheckEndString(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo());
// //通知客户端结束检测
//等待2s把空货位盘点的结果发给普天 // ClientChanel.write(endEmptyCheckStr, emptyCheckContent.getSRMNUmber());
try { //
Thread.sleep(2000); // //等待2s把空货位盘点的结果发给普天
} catch (InterruptedException e) { // try {
e.printStackTrace(); // Thread.sleep(2000);
} // } catch (InterruptedException e) {
emptyCheckService.updateEmptyCheckLastTime(checkContent.getTaskNo(),checkContent.getSRMNUmber()); // e.printStackTrace();
Map<String,String> map = emptyCheckService.getAllEmptyStatus(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn()); // }
map.forEach((k,v)->{ // emptyCheckService.updateEmptyCheckLastTime(emptyCheckContent.getTaskNo(), emptyCheckContent.getSRMNUmber());
PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(checkContent.getSRMNUmber(),checkContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),k,v); // Map<String,String> map = emptyCheckService.getAllEmptyStatus(emptyCheckContent.getSRMNUmber(), checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
PTData sendData = PTData.EmptyStatusResponse(ptEmptyCheckContent); // map.forEach((k,v)->{
//返回普天该行的盘点结果 // PTEmptyCheckContent ptEmptyCheckContent = PTEmptyCheckContent.emptyCheckResponse(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn(),k,v);
PuTianNettyClient.write(sendData); // PTData sendData = PTData.EmptyStatusResponse(ptEmptyCheckContent);
}); // //返回普天该行的盘点结果
//打印空货位的所有条码 // PuTianNettyClient.write(sendData);
Set<String> 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); // //打印空货位的所有条码
//清空所有的条码 // Set<String> codes = EmptyCheckCodeInfo.getAllCode(emptyCheckContent.getSRMNUmber(), emptyCheckContent.getTaskNo());
EmptyCheckCodeInfo.stop(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);
}else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){ // //清空所有的条码
log.info("盘点具体货位"); // EmptyCheckCodeInfo.stop(checkContent.getSRMNUmber(),checkContent.getRow(),checkContent.getStartColumn(),checkContent.getEndColumn());
//发送给客户端 // }else if(ptData.getType().equals(PTData.STOCK_CHECK_01)){
PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent()); // log.info("盘点具体货位");
TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo(),ptCheckContent.getGoodsLocation(),ptCheckContent.getCode(), ptCheckContent.getCount(), "N"); // PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_01);
plcService.checkStart(tmTransmission); // //发送给客户端
String msg = tmTransmission.toString(); // PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC01(ptData.getContent());
ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); // 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)){ }else if(ptData.getType().equals(PTData.STOCK_CHECK_02)){
log.info("盘点具体货位 ,货物已取到载货台"); log.info("盘点具体货位 ,货物已取到载货台");
PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent()); PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.STOCK_CHECK_02);
TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo()); // PTCheckContent ptCheckContent = PTCheckContent.CheckContentSC02(ptData.getContent());
String msg = tmTransmission.toSC02String(); // TMTransmission tmTransmission = new TMTransmission(ptCheckContent.getSRMNUmber(),ptCheckContent.getTaskNo());
ClientChanel.write(msg,ptCheckContent.getSRMNUmber()); // String msg = tmTransmission.toSC02String();
// ClientChanel.write(msg,ptCheckContent.getSRMNUmber());
}else if(ptData.getType().equals(PTData.Into_Stock_01)){ }else if(ptData.getType().equals(PTData.Into_Stock_01)){
log.info("入库顶部拍照"); log.info("入库顶部拍照");
PTData ptDataSend = new PTData(ptData.getContent(), PTData.FLOW_A, PTData.Into_Stock_01);
//保存order标表 //保存order标表
PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent());
String picPath = plcService.IntoStock(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); 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); PuTianNettyClient.write(resData);
}else if(ptData.getType().equals(PTData.Into_Stock_02)){ }else if(ptData.getType().equals(PTData.Into_Stock_02)){
log.info("入库完成拍照"); log.info("入库完成拍照");
PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent()); PTOrderContent ptOrderContent = PTOrderContent.OrderContentIS01And03(ptData.getContent());
String picPath = plcService.IntoStockOver(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); String picPath = plcService.IntoStockOver(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation());
//
//向客户端发送读码指令,等待客户端返回条码 // //向客户端发送读码指令,等待客户端返回条码
ISTransmission isTransmission = new ISTransmission(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation()); // ISTransmission isTransmission = new ISTransmission(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation());
//为防万一先清除code // //为防万一先清除code
ClientCodeMap.removeCode(ptOrderContent.getSRMNUmber()); // ClientCodeMap.removeCode(ptOrderContent.getSRMNUmber());
ClientChanel.write(isTransmission.toString(),ptOrderContent.getSRMNUmber()); // ClientChanel.write(isTransmission.toString(),ptOrderContent.getSRMNUmber());
//发送结果给普天 // //发送结果给普天
//若1分钟内仍为收到 则放弃 // //若1分钟内仍为收到 则放弃
Long start = System.currentTimeMillis(); // Long start = System.currentTimeMillis();
while (ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()) == null && (System.currentTimeMillis()-start)<60000){ // while (ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()) == null && (System.currentTimeMillis()-start)<60000){
try { // try {
Thread.sleep(300l); // Thread.sleep(300l);
} catch (InterruptedException e) { // } catch (InterruptedException e) {
e.printStackTrace(); // e.printStackTrace();
} // }
} // }
String code = ClientCodeMap.getCode(ptOrderContent.getSRMNUmber()); // String code = ClientCodeMap.getCode(ptOrderContent.getSRMNUmber());
PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath,code); // PTData resData = PTData.IntoStock04(ptOrderContent.getSRMNUmber(), ptOrderContent.getTaskNo(), ptOrderContent.getGoodsLocation(),picPath,code);
PuTianNettyClient.write(resData); // PuTianNettyClient.write(resData);
} }
} }
} }
} }

@ -24,18 +24,18 @@ public class PTEmptyCheckContent {
private String taskNo; private String taskNo;
private Integer row; // private Integer row;
private Integer startColumn; // private Integer startColumn;
private Integer endColumn; // private Integer endColumn;
/** /**
* Start OR END * Start OR END
*/ */
private String type; private String type;
private String shelve; // private String shelve;
/** /**
* *
@ -48,31 +48,36 @@ public class PTEmptyCheckContent {
String [] strings = data.split(","); String [] strings = data.split(",");
ptContent.setSRMNUmber(strings[0]); ptContent.setSRMNUmber(strings[0]);
ptContent.setTaskNo(strings[1]); ptContent.setTaskNo(strings[1]);
ptContent.setRow(Integer.valueOf(strings[2])); // ptContent.setRow(Integer.valueOf(strings[2]));
ptContent.setStartColumn(Integer.valueOf(strings[3])); // ptContent.setStartColumn(Integer.valueOf(strings[3]));
ptContent.setEndColumn(Integer.valueOf(strings[4])); // ptContent.setEndColumn(Integer.valueOf(strings[4]));
ptContent.setType(strings[5]); // ptContent.setType(strings[5]);
ptContent.setType(strings[2]);
return ptContent; 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(){ public String toResponseString(){
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(row).append(",") sb.append(SRMNUmber).append(",").append(taskNo).append(",").append(goodsLocation).append(emptyStatus);
.append(startColumn).append(",").append(endColumn).append(",").append(emptyStatus);
return sb.toString(); 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(); PTEmptyCheckContent ptContent = new PTEmptyCheckContent();
ptContent.setSRMNUmber(SRMNUmber); ptContent.setSRMNUmber(SRMNUmber);
ptContent.setTaskNo(taskId); ptContent.setTaskNo(taskId);
ptContent.setRow(row); // ptContent.setRow(row);
ptContent.setStartColumn(startColumn); // ptContent.setStartColumn(startColumn);
ptContent.setEndColumn(endColumn); // ptContent.setEndColumn(endColumn);
ptContent.setShelve(shelve); ptContent.setGoodsLocation(goodsLocation);
ptContent.setEmptyStatus(emptyStatus); ptContent.setEmptyStatus(emptyStatus);
return ptContent; return ptContent;
} }
} }

@ -37,8 +37,8 @@ public class PTFilter extends ChannelInitializer<SocketChannel> {
ChannelPipeline ph = ch.pipeline(); ChannelPipeline ph = ch.pipeline();
//30秒发一次心跳 //30秒发一次心跳
ph.addLast(new IdleStateHandler(0, 30, 0, TimeUnit.SECONDS)); ph.addLast(new IdleStateHandler(0, 30, 0, TimeUnit.SECONDS));
ByteBuf byteBuf = Unpooled.copiedBuffer(">".getBytes()); ByteBuf byteBuf = Unpooled.copiedBuffer("$".getBytes());
ph.addLast(new PTDecoder(1000,false,true,emptyCheckService,plcService)); ph.addLast(new PTDecoder(1000,true,true,emptyCheckService,plcService));
ph.addLast(new PtEncoder()); ph.addLast(new PtEncoder());
ph.addLast(new PTNettyHandler(nettyClient)); ph.addLast(new PTNettyHandler(nettyClient));
} }

@ -45,6 +45,7 @@ public class PuTianNettyClient {
} }
Bootstrap client = new Bootstrap(); Bootstrap client = new Bootstrap();
client.group(group); client.group(group);
client.channel(NioSocketChannel.class); client.channel(NioSocketChannel.class);
client.handler(new PTFilter(plcService,this,emptyCheckService)); client.handler(new PTFilter(plcService,this,emptyCheckService));
@ -70,13 +71,21 @@ public class PuTianNettyClient {
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
// while (ksec.getReconnectNum() == -1 || num < ksec.getReconnectNum() && !isConnected) {
while (num < RECONNECT_NUM && !isConnected) { while (num < RECONNECT_NUM && !isConnected) {
try { try {
createClient(ksec); createClient(ksec);
} catch (Exception e) { } catch (Exception e) {
// channel.close();
//没连上 继续 //没连上 继续
log.error("reconnect error num:{}", num); log.error("reconnect error num:{}", num);
//关闭当前链接
num++; num++;
// try{
// Thread.sleep(ksec.getReconnectInterval());
// }catch (Exception ex){
// throw new RuntimeException(ex);
// }
continue; continue;
} }
isConnected = true; isConnected = true;

@ -37,10 +37,12 @@ savePath:
mp4Path: d://data/mp4/ mp4Path: d://data/mp4/
# 普天上位地址 # 普天上位地址
ksec: ksec:
ip: 192.168.125.5 ip: 127.0.0.1
port: 3000 port: 3000
# 服务端IP
IP: 127.0.0.1
# 服务端TCP端口 # 服务端TCP端口
serverPort: 3001 serverPort: 4000
# ------------ 实时视频流 全部页面的格式 行列数量 # ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig: videoStyleConfig:
videoStyleRow: 4 videoStyleRow: 4
@ -56,6 +58,4 @@ lightSource:
# -----tray 托盘 # -----tray 托盘
# -----goods 货物 # -----goods 货物
# 照片 視頻保存多久 # 照片 視頻保存多久
deleteFileDays: 365 deleteFileDays: 365
# 服务端IP
IP: 192.168.1.1

@ -14,16 +14,16 @@ spring:
testWhileIdle: false testWhileIdle: false
timeBetweenEvictionRunsMillis: 60000 timeBetweenEvictionRunsMillis: 60000
type: com.alibaba.druid.pool.DruidDataSource 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 username: root
validationQuery: SELECT 1 FROM DUAL validationQuery: SELECT 1 FROM DUAL
# --------本服务端口号 # --------本服务端口号
server: server:
port: 8099 Port: 8099
# ----默认摄像头的连接信息 # ----默认摄像头的连接信息
cameraConfig: cameraConfig:
# ------------球機選擇--- 0:利珀 1海康 # ------------球機選擇--- 0:利珀 1海康
cameraType: 0 cameraType: 1
cameraPassword: a1234567 cameraPassword: a1234567
cameraUser: admin cameraUser: admin
cameraPort: 37777 cameraPort: 37777
@ -59,6 +59,14 @@ serverMode: 1
ksec: ksec:
ip: 127.0.0.1 ip: 127.0.0.1
port: 3000 port: 3000
#断点重连的次数:-1->不断重连
# reconnectNum: -1
# #断点重连的时间间隔(单位ms)
# reconnectInterval: 10000
# 服务端IP
IP: 127.0.0.1
# 服务端TCP端口
serverPort: 3001
# ------------ 实时视频流 全部页面的格式 行列数量 # ------------ 实时视频流 全部页面的格式 行列数量
videoStyleConfig: videoStyleConfig:
videoStyleRow: 4 videoStyleRow: 4

Loading…
Cancel
Save