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: 地磅主控协议实现,出入库相关接口 */ @Slf4j @Component public class BHZNWeightServiceImpl implements ApiInoutService { // @Autowired // private Inoutservice inoutservice; @Autowired private CoreCommonService coreCommonService; @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 try{ log.info("BHZN控制LED开始"); BHZNClientEngine test = new BHZNClientEngine( "12.10.0.187", 58258); test.start(); Thread.sleep(3000L); // 姓名 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()); //品种 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()); log.info("BHZN控制LED结束"); return result.getMessage(); }catch (Exception e){ log.error(e.getMessage(),e); return "ERROR"; } } /** * @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 = "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(); } // 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)); 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(); // 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; //log.info(msg); return msg; }catch (Exception e){ log.error(e.getMessage(),e); return " "; } } //hexToBytes方法:十六进制字符串转byte[],网上很多 //getRepair0方法:补0的,很简单,自己实现吧 /** * * new StringBuffer(str).reverse() * 转ask码 * @param msg * @return * @throws UnsupportedEncodingException */ public static String convertStr(String msg) throws Exception { StringBuilder gbString = new StringBuilder(); String t = null; char[] chars = msg.toCharArray(); String s= ""; for(int i=0;i=8){ temp = temp.substring(6, 8); } t +=(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(); } }