| | |
| | | package com.ld.igds.protocol.bhzn.inout; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.ld.igds.common.CoreCommonService; |
| | | import com.ld.igds.constant.FoodVariety; |
| | | import com.ld.igds.inout.ApiInoutService; |
| | | import com.ld.igds.inout.InoutApiConstant; |
| | | import com.ld.igds.inout.InoutConstant; |
| | | import com.ld.igds.inout.dto.ApiInoutData; |
| | | import com.ld.igds.inout.dto.InoutData; |
| | | import com.ld.igds.io.constant.ProtocolEnum; |
| | | import com.ld.igds.models.Depot; |
| | | import com.ld.igds.protocol.bhzn.inout.client.BHZNClientEngine; |
| | | import com.ld.igds.protocol.bhzn.utils.CRC16; |
| | | import com.ld.igds.protocol.bhzn.verb.dto.IoMessage; |
| | | import com.ld.igds.util.BytesUtil; |
| | | import com.ld.io.api.InvokeResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.xml.ws.soap.Addressing; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @Desc: 地磅主控协议实现,出入库相关接口 |
| | |
| | | |
| | | // @Autowired |
| | | // private Inoutservice inoutservice; |
| | | |
| | | @Autowired |
| | | private CoreCommonService coreCommonService; |
| | | @Override |
| | | public String getProtocol() { |
| | | return ProtocolEnum.TCP_BHZH_INOUT_V1.getCode(); |
| | |
| | | @Override |
| | | public String gateControl(ApiInoutData param) { |
| | | try{ |
| | | // ReqGate reqGate = new ReqGate(); |
| | | log.info("BHZN出入库控制器控制道闸开始"); |
| | | String actionCode = param.getActionCode(); |
| | | BHZNClientEngine test = new BHZNClientEngine( |
| | | param.getIp(), param.getPort()); |
| | | test.start(); |
| | | String msg = "<BHZN>{\"cmd\":226,\"content\":{" + |
| | | "\"value\":[1,1]," + |
| | | "\"LEDValue\":[1,1]" + |
| | | "},\"orderId\":\"5009\",\"result\":\"\",\"sign\":\"0000\",\"stNum\":1,\"version\":\"V1.0000000\"}<END>"; |
| | | Integer[] value = new Integer[]{0,0}; |
| | | Map<String,Object> message = new HashMap<>(); |
| | | message.put("Cmd",226); |
| | | message.put("orderId","5009"); |
| | | message.put("result","0"); |
| | | message.put("sign","0000"); |
| | | message.put("stNum",100); |
| | | message.put("version","V1.0000000"); |
| | | message.put("sn","1000000001"); |
| | | Map<String,Object> content = new HashMap<>(); |
| | | // String msg = "<BHZN>{\"cmd\":226,\"content\":{" ; |
| | | if(InoutApiConstant.DEVICE_CODE_2002 == param.getDeviceCode()){ |
| | | content.put("value",new Integer[]{1,0}); |
| | | content.put("LEDValue",new Integer[]{1,0}); |
| | | // msg += "\"value\":[1,0]," ; |
| | | // msg+= "\"LEDValue\":[1,0]" ; |
| | | } |
| | | if(InoutApiConstant.DEVICE_CODE_2003 == param.getDeviceCode()){ |
| | | content.put("value",new Integer[]{0,1}); |
| | | content.put("LEDValue",new Integer[]{0,1}); |
| | | } |
| | | message.put("content", content); |
| | | // msg+= "},\"orderId\":\"5009\",\"result\":\"\",\"sign\":\"0000\",\"stNum\":100,\"version\":\"V1.0000000\"}<END>"; |
| | | |
| | | // Thread.sleep(3000L); |
| | | Thread.sleep(3000L); |
| | | String msg = "<BHZN>" + JSON.toJSONString(message) + "<END>" ; |
| | | InvokeResult result = test.send(msg.getBytes()); |
| | | log.info("BHZN出入库控制器控制道闸结束,MSG=" +msg); |
| | | log.info("result=" +result.getMessage()); |
| | | |
| | | test.send(BytesUtil.hexStrToBytes(msg)); |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage(),e); |
| | | return "ERROR"; |
| | |
| | | @Override |
| | | public String noticeLed(ApiInoutData param, InoutData data) { |
| | | // todo |
| | | try{ |
| | | log.info("BHZN控制LED开始"); |
| | | BHZNClientEngine test = new BHZNClientEngine( |
| | | "192.168.0.210", 58258); |
| | | test.start(); |
| | | Thread.sleep(3000L); |
| | | |
| | | return null; |
| | | } |
| | | // 姓名 |
| | | String msg = getMsg(StringUtils.isEmpty(data.getUserName())?" ":data.getUserName(),"0B00"); |
| | | log.info("msg=" + msg); |
| | | InvokeResult result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | //车牌 |
| | | msg = getMsg(StringUtils.isEmpty(data.getPlateNum())?" ":data.getPlateNum(),"0C00"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | //仓库 |
| | | Depot depot =coreCommonService.getDepotById(data.getCompanyId(),data.getDepotId()); |
| | | String depotName =" "; |
| | | if(depot != null) |
| | | { |
| | | depotName = depot.getName(); |
| | | } |
| | | msg = getMsg(StringUtils.isEmpty(depotName)?" ":depotName,"0D00"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | |
| | | /** |
| | | * 增加白名单 --调用子线程实现 |
| | | * |
| | | * @param param deviceId和actionCode 不可为空 |
| | | * @return |
| | | */ |
| | | public String addWhitePlate(ApiInoutData param) { |
| | | //品种 |
| | | String foodvariety = FoodVariety.getMsg(data.getFoodVariety()); |
| | | msg = getMsg(StringUtils.isEmpty(foodvariety)?" ":foodvariety,"0E00"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | //毛重 |
| | | msg = getMsg((data.getFullWeight() == null )?" ":data.getFullWeight().toString(),"0F00"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | //皮重 |
| | | msg = getMsg((data.getEmptyWeight() == null )?" ":data.getEmptyWeight().toString(),"1000"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | //化验结果 |
| | | msg = getMsg("合格","1100"); |
| | | log.info("msg=" + msg); |
| | | result = test.send(BytesUtil.hexStrToBytes(msg)); |
| | | log.info("result=" +result.getMessage()); |
| | | |
| | | return "SUCCESS"; |
| | | } |
| | | log.info("BHZN控制LED结束"); |
| | | |
| | | /** |
| | | * 删除白名单---调用子线程实现 |
| | | * |
| | | * @param param |
| | | * @return |
| | | */ |
| | | public String delWhitePlate(ApiInoutData param) { |
| | | return result.getMessage(); |
| | | }catch (Exception e){ |
| | | log.error(e.getMessage(),e); |
| | | return "ERROR"; |
| | | } |
| | | |
| | | return "SUCCESS"; |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | public static void main(String[] args) { |
| | | try{ |
| | | String str1 = "许彬",str2="粤A123456",str3 = "3号仓" ,str4 = "小麦",str5="286000",str6 = "30000",str7 ="合格"; |
| | | String test = "我爱中航软件"; |
| | | //78340100290000000000000000 1400 0B00 01 02 00 01 0C 00 |
| | | // String str1 = "许彬",str2="粤A123456",str3 = "3号仓" ,str4 = "小麦",str5="286000",str6 = "30000",str7 ="合格"; |
| | | // String test = "120000.0"; |
| | | // //FF FF FF FF FF FF 00 00 00 00 78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 11 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE 87 1F A5 |
| | | // String start = "FFFFFFFFFFFF00000000"; |
| | | // String lengh = BytesUtil.tran_LH(BytesUtil.intToHexStr(8+(test.length() * 2))); |
| | | // String lengh2 = BytesUtil.tran_LH(BytesUtil.intToHexStr((test.length() * 2))); |
| | | // String msg = "78340100290000000000000000" + lengh+ "100001020101" + lengh2; |
| | | // msg = msg + convertStr(test); |
| | | // msg = msg.toUpperCase(); |
| | | // |
| | | //// String t = "78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 01 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE"; |
| | | //// t = t.replaceAll(" ",""); |
| | | // String check = BytesUtil.tran_LH(BytesUtil.intToHexStr(CRC16.calcCrc16(BytesUtil.hexStrToBytes(msg)))); |
| | | // System.out.println(check); |
| | | // |
| | | // msg+=check; |
| | | // msg += "A5"; |
| | | // msg = start +msg; |
| | | // System.out.println(msg); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | String lengh = BytesUtil.tran_LH(BytesUtil.intToHexStr(8+test.length())); |
| | | String msg = "78340100290000000000000000 " + lengh+ "0B00010200010C00"; |
| | | // Map<String,Object> message = new HashMap<>(); |
| | | // message.put("cmd",226); |
| | | // message.put("orderId","5009"); |
| | | // message.put("result","0"); |
| | | // message.put("sign","0000"); |
| | | // message.put("stNum",100); |
| | | // message.put("version","V1.0000000"); |
| | | // Map<String,Object> content = new HashMap<>(); |
| | | // content.put("value",new Integer[]{0,1}); |
| | | // content.put("LEDValue",new Integer[]{0,1}); |
| | | // message.put("content", content); |
| | | // System.out.println(JSON.toJSONString(message)); |
| | | |
| | | |
| | | IoMessage message = JSON.parseObject("{Cmd:120}",IoMessage.class); |
| | | System.out.println(message.getCmd()); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param s 字符串 |
| | | * @param id 0B00 字符ID |
| | | * @return |
| | | */ |
| | | public static String getMsg(String s ,String id){ |
| | | try{ |
| | | // String str1 = "许彬",str2="粤A123456",str3 = "3号仓" ,str4 = "小麦",str5="286000",str6 = "30000",str7 ="合格"; |
| | | String test = s; |
| | | //FF FF FF FF FF FF 00 00 00 00 78 34 01 00 29 BC FD 00 00 00 00 00 00 14 00 11 00 01 02 06 01 0C 00 CE D2 B0 AE D6 D0 BA BD C8 ED BC FE 87 1F A5 |
| | | String start = "FFFFFFFFFFFF00000000"; |
| | | String lengh = BytesUtil.tran_LH(BytesUtil.intToHexStr(8+(test.length() * 2))); |
| | | String lengh2 = BytesUtil.tran_LH(BytesUtil.intToHexStr((test.length() * 2))); |
| | | String msg = "78340100290000000000000000" + lengh+ id+"01020101" + lengh2; |
| | | msg = msg + convertStr(test); |
| | | msg = msg.toUpperCase(); |
| | | |
| | |
| | | // t = t.replaceAll(" ",""); |
| | | String check = BytesUtil.tran_LH(BytesUtil.intToHexStr(CRC16.calcCrc16(BytesUtil.hexStrToBytes(msg)))); |
| | | System.out.println(check); |
| | | |
| | | msg+=check; |
| | | msg += "A5"; |
| | | msg = start +msg; |
| | | //log.info(msg); |
| | | return msg; |
| | | |
| | | System.out.println(msg); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | log.error(e.getMessage(),e); |
| | | return " "; |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //hexToBytes方法:十六进制字符串转byte[],网上很多 |
| | | //getRepair0方法:补0的,很简单,自己实现吧 |
| | |
| | | * @throws UnsupportedEncodingException |
| | | */ |
| | | public static String convertStr(String msg) throws Exception { |
| | | //先把字符串按gb2312转成byte数组 |
| | | byte[] bytes = msg.getBytes("gb2312"); |
| | | StringBuilder gbString = new StringBuilder(); |
| | | |
| | | for (byte b : bytes) |
| | | { |
| | | // 再用Integer中的方法,把每个byte转换成16进制输出 |
| | | String temp = Integer.toHexString(b); |
| | | //判断进行截取 |
| | | if(temp.length()>=8){ |
| | | temp = temp.substring(6, 8); |
| | | String t = null; |
| | | char[] chars = msg.toCharArray(); |
| | | String s= ""; |
| | | for(int i=0;i<chars.length;i++){ |
| | | t = ""; |
| | | s = msg.substring(i,i+1); |
| | | //先把字符串按gb2312转成byte数组 |
| | | byte[] bytes = s.getBytes("gb2312"); |
| | | for (byte b : bytes) |
| | | { |
| | | // 再用Integer中的方法,把每个byte转换成16进制输出 |
| | | String temp = Integer.toHexString(b); |
| | | //判断进行截取 |
| | | if(temp.length()>=8){ |
| | | temp = temp.substring(6, 8); |
| | | } |
| | | t +=(temp); |
| | | } |
| | | gbString.append(temp); |
| | | if(t.length()<4){ |
| | | for (int k =0;k<4;k++){ |
| | | if(t.length()<4){ |
| | | t = "0"+t; |
| | | } |
| | | } |
| | | } |
| | | gbString.append(t); |
| | | } |
| | | |
| | | return gbString.toString(); |
| | | } |
| | | |
| | | } |