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