Newer
Older
br-data-forwarding / src / main / java / com / casic / common / CasicFrameBuildFactory.java
package com.casic.common;

import com.casic.common.general.ConfigResponseFrame;
import com.casic.common.general.HeartFrame;
import com.casic.common.general.IMEIFrame;
import com.casic.common.general.info.InfoFrameBRS;
import com.casic.common.general.info.InfoFrameHSYD;
import com.casic.common.general.info.InfoFrameMHK;
import com.casic.common.general.info.InfoFrameNCX;
import com.casic.methane.frame.brs.MethaneDataFrameBRS;
import com.casic.methane.frame.brs.MethaneEventFrameBRS;
import com.casic.methane.frame.hsyd.MethaneDataFrameHSYD;
import com.casic.methane.frame.hsyd.MethaneEventFrameHSYD;
import com.casic.methane.frame.xfdz.MethaneDataFrameXF;
import com.casic.methane.frame.xfdz.MethaneEventFrameXF;
import com.casic.senitnel.frame.ncx.DataFrameNCX;
import com.casic.senitnel.frame.ncx.EventFrameNCX;
import com.casic.tube.frame.brs.DataFrameBRS;
import com.casic.tube.frame.brs.EventFrameBRS;
import com.casic.tube.frame.mhk.DataFrameMHK;
import com.casic.tube.frame.mhk.EventFrameMHK;
import com.casic.tube.frame.tp.DataFrameHTTP;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class CasicFrameBuildFactory {

    public static CasicFrame buildCasicFrame(String messageType, String manufacturerCode, String deviceType) {
        switch (messageType) {
            case "00":
                return new HeartFrame();

            case "01":
                return buildEventFrame(manufacturerCode, deviceType);

            case "02":
                return buildDataFrame(manufacturerCode, deviceType);

            case "03":
                return new ConfigResponseFrame();

            case "05":
                return new IMEIFrame();

            case "07":
                return buildInfoFrame(manufacturerCode);

            default:
                log.warn("上行消息类型不在范围内[" + messageType + "]");
                return null;
        }
    }

    private static CasicFrame buildDataFrame(String manufacturerCode, String deviceType) {
        switch (deviceType) {
            case "34":
                return buildTubeDataFrame(manufacturerCode);

            case "21":
                return buildSentinelDataFrame(manufacturerCode);

            case "31":
            case "32":
                return buildMethaneDataFrame(manufacturerCode);

            default:
                return null;
        }
    }

    private static CasicFrame buildEventFrame(String manufacturerCode, String deviceType) {
        switch (deviceType) {
            case "34":
                return buildTubeEventFrame(manufacturerCode);

            case "21":
                return buildSentinelEventFrame(manufacturerCode);

            case "31":
            case "32":
                return buildMethaneEventFrame(manufacturerCode);

            default:
                return null;
        }
    }

    private static CasicFrame buildInfoFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "14":
                return new InfoFrameNCX();

            case "15":
                return new InfoFrameBRS();

            case "16":
                return new InfoFrameMHK();

            case "22":
                return new InfoFrameHSYD();

            default:
                // 默认与百瑞生一样
                return new InfoFrameBRS();
        }
    }

    private static CasicFrame buildTubeDataFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "15": // 百瑞生
                return new DataFrameBRS();

            case "16": // 麦哈克
                return new DataFrameMHK();

            case "17": // 航天拓扑
                return new DataFrameHTTP();

            default:
                // 默认与百瑞生一样的协议
                return new DataFrameBRS();
        }
    }

    private static CasicFrame buildMethaneDataFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "15": // 百瑞生
                return new MethaneDataFrameBRS();

            case "16": // 麦哈克
                return new DataFrameMHK();

            case "17": // 航天拓扑
                return new DataFrameHTTP();

            case "22": // 华视远大
                return new MethaneDataFrameHSYD();

            case "23": // 先锋电子
                return new MethaneDataFrameXF();

            default:
                // 默认与百瑞生协议一样
                return new MethaneDataFrameBRS();
        }
    }

    private static CasicFrame buildSentinelDataFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "14": // 诺成新
                return new DataFrameNCX();

            default:
                // 默认按诺成新的协议执行
                return new DataFrameNCX();
        }
    }

    private static CasicFrame buildTubeEventFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "15":
                return new EventFrameBRS();

            case "16":
                return new EventFrameMHK();

            default:
                // 默认按百瑞生协议执行
                return new EventFrameBRS();
        }
    }

    private static CasicFrame buildMethaneEventFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "15":  // 百瑞生
                return new MethaneEventFrameBRS();

            case "22":  // 华视远大
                return new MethaneEventFrameHSYD();

            case "23":  // 百瑞生
                return new MethaneEventFrameXF();

            default:
                // 默认与百瑞生一样
                return new MethaneEventFrameBRS();
        }
    }

    private static CasicFrame buildSentinelEventFrame(String manufacturerCode) {
        switch (manufacturerCode) {
            case "14": // 诺成新
                return new EventFrameNCX();

            default:
                // 默认执行诺成新的协议
                return new EventFrameNCX();
        }
    }
}