YYC
2023-07-07 8c3544c7ff6f6820d36e24af6d6e72b7e9cba75a
Merge remote-tracking branch 'origin/master'
已修改3个文件
已添加1个文件
288 ■■■■ 文件已修改
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/inout/BHZNWeightServiceImpl.java 183 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisWeather.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/inout/BHZNWeightServiceImpl.java
@@ -2,19 +2,26 @@
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;
@@ -28,7 +35,8 @@
//    @Autowired
//    private Inoutservice inoutservice;
    @Autowired
    private CoreCommonService coreCommonService;
    @Override
    public String getProtocol() {
        return ProtocolEnum.TCP_BHZH_INOUT_V1.getCode();
@@ -120,8 +128,65 @@
    @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);
        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());
            //品种
           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";
        }
    }
    /**
@@ -159,13 +224,14 @@
    public static void main(String[] args) {
//        try{
        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 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 msg = "78340100290000000000000000" + lengh+ "0B00010201010C00";
//            String lengh2 = BytesUtil.tran_LH(BytesUtil.intToHexStr((test.length() * 2)));
//            String msg = "78340100290000000000000000" + lengh+ "100001020101" + lengh2;
//            msg = msg + convertStr(test);
//            msg = msg.toUpperCase();
//
@@ -178,26 +244,61 @@
//            msg += "A5";
//            msg = start +msg;
//            System.out.println(msg);
//        }catch (Exception e){
//            e.printStackTrace();
//        }
        }catch (Exception e){
            e.printStackTrace();
        }
        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));
//        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();
//        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的,很简单,自己实现吧
@@ -210,20 +311,36 @@
     * @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();
    }
}
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisService.java
@@ -51,7 +51,8 @@
    private AnalysisGas analysisGas;
    @Autowired
    private AnalysisES analysisEs;
    @Autowired
    private AnalysisWeather analysisWeather;
    /**
     * @param message
     */
@@ -79,6 +80,9 @@
                case 240:
                    analysisEs.analysis(message, ser);
                    break;
                case 160:
                    analysisWeather.analysis(message, ser);
                    break;
                default:
                    log.error("控制柜命令码解析失败!");
                    break;
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/analysis/AnalysisWeather.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.ld.igds.protocol.bhzn.verb.analysis;
import com.alibaba.fastjson.JSONObject;
import com.ld.igds.common.CoreCommonService;
import com.ld.igds.common.CoreDeviceService;
import com.ld.igds.constant.BizType;
import com.ld.igds.gas.CoreGasService;
import com.ld.igds.io.constant.OrderRespEnum;
import com.ld.igds.io.notify.NotifyWebInvoker;
import com.ld.igds.models.*;
import com.ld.igds.protocol.bhzn.verb.command.BaseRemoteImpl;
import com.ld.igds.protocol.bhzn.verb.dto.IoMessage;
import com.ld.igds.protocol.bhzn.verb.dto.Res209;
import com.ld.igds.util.ContextUtil;
import com.ld.igds.util.NumberUtil;
import com.ld.igds.weather.WeatherUtil;
import com.ld.igds.weather.notify.NotifyWeatherService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * æ°”体解析
 */
@Slf4j
@Component(AnalysisWeather.BEAN_ID)
public class AnalysisWeather extends BaseRemoteImpl {
    public static final String BEAN_ID = "bhzn.analysisWeather";
    @Autowired
    private CoreDeviceService deviceService;
    @Autowired
    private NotifyWebInvoker notifyInvoker;
    @Autowired
    private CoreCommonService commonService;
    @Resource(name = NotifyWeatherService.BEAN_ID)
    private NotifyWeatherService notifyService;
    /**
     * è®¾å¤‡çŠ¶æ€
     *
     * @param reMessage
     * @param ser
     */
    public void analysis(IoMessage reMessage, DeviceSer ser) {
        log.info("气象站检测开始解析");
        JSONObject jsonObject = JSONObject.parseObject(reMessage.getStrMsg());
        log.info("气象返回结果={}", reMessage.getStrMsg());
        int Temper = jsonObject.getInteger("Temper");
        int Humy = jsonObject.getInteger("Humy");
        int WindSpeed = jsonObject.getInteger("WindSpeed");
        int RainFall = jsonObject.getInteger("RainFall");
        int Pressure = jsonObject.getInteger("Pressure");
        int WindDir = jsonObject.getInteger("WindDir");
        WeatherInfo info = new WeatherInfo();
        info.setId(WeatherUtil.buildWeatherId("5324_001", new Date()));
//        info.setAirLevel(dto.getAir_level());
        info.setCompanyId(ser.getCompanyId());
        info.setDeptId("5324_001");
        info.setHumidity((Humy/10)+"");
        //info.setPm25(dto.getAir_pm25());
        info.setPressure(Pressure+"");
        info.setSource(WeatherUtil.SOURCE_01);
        info.setTemp((Temper/10)+"");
        info.setWeather(RainFall > 0?"下雨":"晴天");
        info.setWindDirection(WindDir+"");
//        info.setWindSpeed();
        info.setWindMeter((WindSpeed/10) + "");
        info.setCity("高州市");
        info.setUpdateTime(new Date());
        notifyService.notify(info);
        log.info("控制柜----->>>平台:气象站检测解析完成-");
    }
}
igds-protocol-bhzn/src/main/java/com/ld/igds/protocol/bhzn/verb/server/BhznVerbMessageConsumer.java
@@ -51,13 +51,16 @@
            reMessage = JSON.parseObject(message, IoMessage.class);
            JSONObject jsonObject = JSON.parseObject(message);
            reMessage.setContentStr(jsonObject.getString("content"));
            if (StringUtils.isEmpty(reMessage.getSn()) ||
                    reMessage.getStNum()== null ||
            if (
                    reMessage.getCmd() == null) {
                log.error("控制柜------>>>>平台:报文信息不完整,不做解析-IP={},port={},msg={}", session.getAddress(), session.getPort(), message);
                return;
            }
            if(StringUtils.isEmpty(reMessage.getSn())){
                //气象站
                reMessage.setSn("9999");
            }
            //根据SN获取组织编码
            String companyId = ContextUtil.getCompanyIdBySn(reMessage.getSn());
            if (null == companyId) {