jiazx0107@163.com
2023-12-14 231cdeb9b7a55ba08fb8cffda35f5535b9292873
提交正来电子协议解析-2
已修改10个文件
已添加1个文件
165 ■■■■■ 文件已修改
src/main/java/com/fzzy/api/data/ApiCommonDevice.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/gateway/entity/GatewayDevice.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/ProtocolRunner.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/fzzy/api/data/ApiCommonDevice.java
@@ -33,4 +33,6 @@
    private Date onlineTime = new Date();
    private String cable;//层-行-列
}
src/main/java/com/fzzy/gateway/entity/GatewayDevice.java
@@ -121,23 +121,23 @@
    @PropertyDef(label = "在线状态")
    private String status = Constant.YN_Y;
    @Column(name = "CABLE_START_")
    @Column(name = "CABLE_START_", length = 4)
    @PropertyDef(label = "电缆开始")
    private int cableStart;
    private String cableStart;
    @Column(name = "CABLE_END_")
    @Column(name = "CABLE_END_", length = 4)
    @PropertyDef(label = "电缆截至")
    private int cableEnd;
    private String cableEnd;
    @Column(name = "TH_ADDR_")
    @Column(name = "TH_ADDR_",length = 4)
    @PropertyDef(label = "温湿度地址")
    private String thAddr;
    @Column(name = "CABLE_FORMAT", length = 4)
    @Column(name = "CABLE_FORMAT_", length = 4)
    @PropertyDef(label = "电缆制式")
    private String cableFormat;
    @Column(name = "CABLE_TYPE", length = 4)
    @Column(name = "CABLE_TYPE_", length = 4)
    @PropertyDef(label = "电缆类型")
    private String cableType;
src/main/java/com/fzzy/protocol/ProtocolRunner.java
@@ -1,7 +1,9 @@
package com.fzzy.protocol;
import com.fzzy.protocol.bhzn.server.BhznGrainV2ServerEngine;
import com.fzzy.protocol.fzzy.server.FzzyServerEngine;
import com.fzzy.protocol.weightyh.YhScaleServerEngine;
import com.fzzy.protocol.zldz.server.ZldzServerEngine;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
@@ -25,6 +27,14 @@
        //风正致远控制柜协议启动
        FzzyServerEngine.start(null);
        //正来电子粮情启动
        ZldzServerEngine.start();
        //邦海智能纯网口设备协议
        BhznGrainV2ServerEngine.start(null);
    }
}
src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2ServerEngine.java
@@ -36,7 +36,8 @@
        if (null != port) {
            ioServerOption.setPort(port);
        } else {
            ioServerOption.setPort(PORT);
            port = PORT;
            ioServerOption.setPort(port);
        }
        //确认结尾标志
src/main/java/com/fzzy/protocol/bhzn/server/BhznGrainV2SessionListener.java
@@ -32,10 +32,8 @@
        session.setBusinessKey(BhznGrainV2ServerUtils.getServerKey(session.getAddress(), session.getPort()));
        //执行分机上线
        ApiCommonDevice commonDevice = Constant.updateCacheOnline(session.getAddress(), session.getPort());
        if (null == commonDevice.getSn()) {
            log.error("------设备上线,系统中未发现当前配置-------");
        }
        Constant.updateCacheOnline(session.getAddress(), session.getPort());
    }
    /**
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisConf.java
@@ -1,5 +1,7 @@
package com.fzzy.protocol.zldz.analysis;
import com.fzzy.api.Constant;
import com.fzzy.api.data.ApiCommonDevice;
import com.fzzy.api.utils.BytesUtil;
import com.fzzy.gateway.entity.GatewayDevice;
import com.fzzy.gateway.service.GatewayDeviceService;
@@ -25,11 +27,11 @@
     * è§£æžåˆ†æœºé…ç½®ä¿¡æ¯
     *
     * @param message
     * @param ser
     * @param device
     */
    public void analysis8816(ReMessage message, GatewayDevice ser) {
    public void analysis8816(ReMessage message, GatewayDevice device, ApiCommonDevice commonDevice) {
        log.debug("分机---->>>平台:消息类型=8816-----{}", ser.getDeviceName());
        log.debug("分机---->>>平台:消息类型=8816-----{}", device.getDeviceName());
        String content = message.getBody().getContent();
@@ -58,8 +60,9 @@
        len = 1;
        temp = content.substring(start * 2, start * 2 + len * 2);
        // å±‚æ•°
        //层 -行 -列
        String cable = "";
        // å±‚æ•°
        start = 6;
        len = 1;
        temp = content.substring(start * 2, start * 2 + len * 2);
@@ -77,20 +80,18 @@
        temp = content.substring(start * 2, start * 2 + len * 2);
        cable += "-" + BytesUtil.hexToInt(temp);
        //层 - è¡Œ - åˆ— é…ç½®
        ser.setCableRule(cable);
        // ç”µç¼†åˆ¶å¼
        start = 9;
        len = 1;
        temp = content.substring(start * 2, start * 2 + len * 2);
        ser.setCableFormat("0" + BytesUtil.hexToInt(temp));
        device.setCableFormat("0" + BytesUtil.hexToInt(temp));
        // ç”µç¼†ç±»åž‹
        start = 10;
        len = 1;
        temp = content.substring(start * 2, start * 2 + len * 2);
        ser.setCableType("0" + BytesUtil.hexToInt(temp));
        device.setCableType("0" + BytesUtil.hexToInt(temp));
        // ä¾›ç”µæ¨¡å¼
        start = 11;
@@ -98,34 +99,33 @@
        temp = content.substring(start * 2, start * 2 + len * 2);
        //ser.setPowerModel("0" + BytesUtil.hexToInt(temp));
        String msg = ser.getDeviceName() + " è¿œç¨‹èŽ·å–é…ç½®æˆåŠŸï¼Œè¯·åˆ·æ–°æ•°æ®æŸ¥çœ‹ï¼";
        // ç»„织编码
        start = 12;
        temp = content.substring(start * 2);
        if (readTag == 1) {// è¡¨ç¤ºå†™çš„æˆåŠŸè¿”å›ž
            ser.setOrgId(ser.getOrgId());
            msg = ser.getDeviceName() + " è¿œç¨‹å†™å…¥æˆåŠŸï¼Œè¯·åˆ·æ–°æ•°æ®æŸ¥çœ‹ï¼";
        } else {
            ser.setOrgId(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) + "");
        if (readTag != 1) {// è¡¨ç¤ºå†™çš„æˆåŠŸè¿”å›ž
            device.setOrgId(BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) + "");
        }
        if (null == ser.getDeviceSn()) {
            ser.setDeviceSn(ser.getId());
        }
        ser.setIp(message.getIp());
        ser.setPort(message.getPort());
        device.setIp(message.getIp());
        device.setPort(message.getPort());
        // å¼€å§‹åˆ—默认=1
        if (ser.getCableStart() == 0) {
            ser.setCableStart(1);
        if (null == device.getCableStart()) {
            device.setCableStart("1");
        }
        log.info("分机---->>>平台:分机配置解析完成---{},更新到服服务器",
                ser.getDeviceName());
                device.getDeviceName());
        //更新设备信息
        gatewayDeviceService.updateData(ser);
        gatewayDeviceService.updateData(device);
        //更新连接设备信息
        commonDevice.setSn(device.getDeviceSn());
        commonDevice.setCable(cable);
        commonDevice.setOrgId(device.getOrgId());
        Constant.updateCache(commonDevice);
    }
    /**
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisGrain.java
@@ -14,6 +14,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -294,10 +295,6 @@
    /**
     * å¹³æ–¹ä»“的解析,解析需要考虑当前是否启用的一分机多仓
     *
     * @param depotConf
     * @param msg
     * @param ser
     * @param exeRequest
     * @param packetMap
     * @param sumPackets
     */
@@ -316,7 +313,7 @@
        int cableX = Integer.valueOf(attCable[2]);
        // æ ¹æ®å±‚行列获取指定长度
        int start = 4 * (device.getCableStart() - 1) * cableZ * cableY;
        int start = 4 * (Integer.valueOf(device.getCableStart()) - 1) * cableZ * cableY;
        int len = 4 * cableZ * cableY * cableX;
        log.info("分机------>>>平台:返回粮情完整信息,分机={}", device.getDeviceName());
src/main/java/com/fzzy/protocol/zldz/analysis/AnalysisService.java
@@ -78,7 +78,7 @@
                analysisConf.analysis1129(reMessage, device);
                break;
            case ZldzServerUtil.MSG_TYPE_8816:// è§£æžé…ç½®
                analysisConf.analysis8816(reMessage, device);
                analysisConf.analysis8816(reMessage, device,commonDevice);
                break;
            case ZldzServerUtil.MSG_TYPE_8822:// ç”µç¼†åˆå§‹åŒ–成功
                analysisConf.analysis8822(reMessage, device);
src/main/java/com/fzzy/protocol/zldz/cmd/CommandBuilder1115.java
@@ -76,8 +76,8 @@
        MessageBody body = new MessageBody();
        body.setLength(2);
        int start = device.getCableStart();
        int end = device.getCableEnd();
        int start = Integer.valueOf(device.getCableStart());
        int end = Integer.valueOf(device.getCableEnd());
        body.setContent(BytesUtil.toHexString(start) + BytesUtil.toHexString(end));
        message.setBody(body);
    }
src/main/java/com/fzzy/protocol/zldz/cmd/OnLineCommandBuilder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.fzzy.protocol.zldz.cmd;
import com.fzzy.api.utils.BytesUtil;
import com.fzzy.io.request.BaseRequest;
import com.fzzy.protocol.zldz.data.Message;
import com.fzzy.protocol.zldz.data.MessageBody;
import com.fzzy.protocol.zldz.server.ZldzServerUtil;
/**
 * @author Andy
 */
public class OnLineCommandBuilder extends CommandBuilder {
    private final static OnLineCommandBuilder instance = new OnLineCommandBuilder();
    private OnLineCommandBuilder() {
    }
    public static OnLineCommandBuilder getInstance() {
        return instance;
    }
    public void buildHeader(Message message, BaseRequest request) {
        message.setSourceId("0000");
        message.setSendId("0000");
        message.setCompanyId("0000");
        message.setTargetId("FFFF");
        message.setMessageType(BytesUtil.tran_LH(ZldzServerUtil.MSG_TYPE_1116));
    }
    public void buildBody(Message message, BaseRequest request) {
        MessageBody body = new MessageBody();
        body.setContent("0000000000000000000000000000");
        body.setLength(14);
        message.setBody(body);
    }
}
src/main/java/com/fzzy/protocol/zldz/server/SessionListener.java
@@ -4,7 +4,10 @@
import com.fzzy.api.data.ApiCommonDevice;
import com.fzzy.api.utils.SpringUtil;
import com.fzzy.gateway.service.GatewayDeviceService;
import com.fzzy.protocol.bhzn.server.BhznGrainV2ServerUtils;
import com.fzzy.io.request.BaseRequest;
import com.fzzy.protocol.zldz.cmd.OnLineCommandBuilder;
import com.fzzy.protocol.zldz.data.Message;
import com.ld.io.api.InvokeResult;
import com.ld.io.api.IoSession;
import com.ld.io.api.IoSessionListener;
import lombok.extern.slf4j.Slf4j;
@@ -26,13 +29,27 @@
        log.info("++++新建连接++++-IP={},PORT={}", session.getAddress(), session.getPort());
        // æ·»åŠ è‡ªå®šä¹‰ä¸šåŠ¡ID
        session.setBusinessKey(BhznGrainV2ServerUtils.getServerKey(session.getAddress(), session.getPort()));
        session.setBusinessKey(ZldzServerUtil.getServerKey(session.getAddress(), session.getPort()));
        //执行分机上线
        ApiCommonDevice commonDevice = Constant.updateCacheOnline(session.getAddress(), session.getPort());
        if (null == commonDevice.getSn()) {
            log.error("------设备上线,系统中未发现当前配置-------");
        Constant.updateCacheOnline(session.getAddress(), session.getPort());
        /***********************设备上线后主动获取配置信息******************/
        BaseRequest request = new BaseRequest();
        request.setIp(session.getAddress());
        request.setPort(session.getPort());
        request.setCompanyId(ZldzServerUtil.DEFAULT_COMPANY);
        // Step1 ç”Ÿæˆåœ¨çº¿æµ‹è¯•命令
        Message message = OnLineCommandBuilder.getInstance().buildMessage(request);
        // å‘送命令
        InvokeResult result = session.invoke(message.getByteMsg());
        //如果命令发送失败,直接踢掉连接
        if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) {
            session.destroy();
        }
        log.info("平台------->>分机---设备上线,自动发送设备配置信息请求命令--{}",message);
    }
    /**
@@ -51,9 +68,9 @@
        if (null == gatewayDeviceService) {
            gatewayDeviceService = SpringUtil.getBean(GatewayDeviceService.class);
            gatewayDeviceService.OfflineByCommonDevice(commonDevice);
        }
        gatewayDeviceService.OfflineByCommonDevice(commonDevice);
    }
}