package com.ld.igds.protocol.bhzn.inout; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.protocol.bhzn.inout.client.BHZNClientEngine; import com.ld.igds.protocol.bhzn.utils.CRC16; import com.ld.igds.util.BytesUtil; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; /** * @Desc: 地磅主控协议实现,出入库相关接口 */ @Slf4j @Component public class BHZNWeightServiceImpl implements ApiInoutService { // @Autowired // private Inoutservice inoutservice; @Override public String getProtocol() { return ProtocolEnum.TCP_BHZH_INOUT_V1.getCode(); } /** * @param param * @return */ @Override public ApiInoutData getPlateNum(ApiInoutData param) { return param; } /** * 不需要实现 * * @param param * @return */ @Override public String initLpr(ApiInoutData param) { return "当前模式无需初始化车牌识别"; } /** * 暂时不实现 * * @param param deviceId和actionCode 不可为空 * @return */ @Override public String gateControl(ApiInoutData param) { try{ log.info("BHZN出入库控制器控制道闸开始"); String actionCode = param.getActionCode(); BHZNClientEngine test = new BHZNClientEngine( param.getIp(), param.getPort()); test.start(); Integer[] value = new Integer[]{0,0}; Map 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 content = new HashMap<>(); // String msg = "{\"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\"}"; Thread.sleep(3000L); String msg = "" + JSON.toJSONString(message) + "" ; InvokeResult result = test.send(msg.getBytes()); log.info("BHZN出入库控制器控制道闸结束,MSG=" +msg); log.info("result=" +result.getMessage()); }catch (Exception e){ log.error(e.getMessage(),e); return "ERROR"; } return "SUCCESS"; } @Override public String lightControl(ApiInoutData param) { return null; } @Override public String noticeRadio(ApiInoutData param, InoutData data) { return null; } @Override public String noticeLed(ApiInoutData param, InoutData data) { // todo return null; } /** * 增加白名单 --调用子线程实现 * * @param param deviceId和actionCode 不可为空 * @return */ public String addWhitePlate(ApiInoutData param) { return "SUCCESS"; } /** * 删除白名单---调用子线程实现 * * @param param * @return */ public String delWhitePlate(ApiInoutData param) { return "SUCCESS"; } /** * @param param * @return */ @Override public ApiInoutData getIcCardNum(ApiInoutData param) { return param; } 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 start = "FFFFFFFFFF00000000"; // String lengh = BytesUtil.tran_LH(BytesUtil.intToHexStr(8+(test.length() * 2))); // String msg = "78340100290000000000000000" + lengh+ "0B00010201010C00"; // 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(); // } Map 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 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)); } //hexToBytes方法:十六进制字符串转byte[],网上很多 //getRepair0方法:补0的,很简单,自己实现吧 /** * * new StringBuffer(str).reverse() * 转ask码 * @param msg * @return * @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); } gbString.append(temp); } return gbString.toString(); } }