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.methane.frame.brs.MethaneDataFrameBRS;
import com.casic.methane.frame.brs.MethaneEventFrameBRS;
import com.casic.methane.frame.brs.MethaneInfoFrameBRS;
import com.casic.senitnel.frame.ncx.DataFrameNCX;
import com.casic.senitnel.frame.ncx.EventFrameNCX;
import com.casic.senitnel.frame.ncx.InfoFrameNCX;
import com.casic.tube.frame.brs.DataFrameBRS;
import com.casic.tube.frame.brs.EventFrameBRS;
import com.casic.tube.frame.brs.InfoFrameBRS;
import com.casic.common.general.IMEIFrame;
import com.casic.tube.frame.mhk.DataFrameMHK;
import com.casic.tube.frame.mhk.EventFrameMHK;
import com.casic.tube.frame.mhk.InfoFrameMHK;
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, deviceType);

            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 "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 "32":
                return buildTubeMethaneFrame(manufacturerCode);

            default:
                return null;
        }
    }

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

            case "21":
                return buildSentinelInfoFrame(manufacturerCode);

            case "32":
                return buildMethaneInfoFrame(manufacturerCode);

            default:
                return null;
        }
    }

    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 null;
        }
    }

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

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

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

            default:
                return null;
        }
    }

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

            default:
                return null;
        }
    }

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

            case "16":
                return new EventFrameMHK();

            default:
                return null;
        }
    }

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

            case "16":
                return new EventFrameMHK();

            default:
                return null;
        }
    }

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

            default:
                return null;
        }
    }

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

            case "16":
                return new InfoFrameMHK();

            default:
                return null;
        }
    }

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

            case "16":
                return new InfoFrameMHK();

            default:
                return null;
        }
    }

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

            default:
                return null;
        }
    }
}