/// <summary> /// CAP 메시지로부터 시스템 종류 정보를 추출. /// </summary> /// <param name="msg"></param> /// <returns></returns> public List <SASKind> ExtractTargetKindsFromCAP(CAP msg) { System.Diagnostics.Debug.Assert(msg != null); if (msg.Scope != CAPLib.ScopeType.Restricted) { return(null); } if (string.IsNullOrEmpty(msg.Restriction)) { return(null); } string[] stringSeperators = new string[] { "," }; string[] dividedArray = msg.Restriction.Split(stringSeperators, StringSplitOptions.RemoveEmptyEntries); if (dividedArray == null || dividedArray.Count() <= 0) { return(null); } List <SASKind> targets = new List <SASKind>(); foreach (string systemKindCode in dividedArray) { SASKind kindInfo = BasisData.FindSASKindByCode(systemKindCode); if (kindInfo != null) { targets.Add(kindInfo); } } return(targets); }
public OrderProvisionInfo() { // [2016-03-31] 기본 발령 정보를 시험으로 생성 - by Gonzi //this.mode = BasisData.FindOrderModeInfoByCode(CAPLib.StatusType.Actual); this.mode = BasisData.FindOrderModeInfoByCode(CAPLib.StatusType.Test); this.messageType = MsgType.Alert; this.scope = ScopeType.Public; this.disaster = new Disaster(); this.disaster.Category = new DisasterCategory(); this.disaster.Kind = new DisasterKind(); this.refType = new OrderReferenceType(); this.refRecordID = string.Empty; this.msgTextInfo = new SendingMsgTextInfo(); this.targetRegions = new List <RegionDefinition>(); this.targetSystems = new List <SASProfile>(); this.circle = new List <AdengGE.CircleInfo>(); this.orderLocationKind = OrderLocationKind.Local; this.targetSystemsKinds = new List <SASKind>(); this.tag = null; }
/// <summary> /// 특보 해당구역 코드 리스트를 행정구역 지역명 문자열(콤마로 구분된 연속된 문자열)로 변환. /// </summary> /// <returns></returns> public string GetTargetRegionNames() { string[] targetRegionCodes = GetTargetRegionCodes(); if (targetRegionCodes == null) { return(string.Empty); } List <string> regionNames = new List <string>(); foreach (string regionCode in targetRegionCodes) { RegionProfile profile = BasisData.FindRegion(regionCode); if (profile == null) { continue; } if (regionNames.Contains(profile.Name)) { continue; } regionNames.Add(profile.Name); } return(string.Join(",", regionNames)); }
/// <summary> /// 특보 해당구역 코드 리스트에 해당하는 행정구역 지역코드 문자열(콤마로 구분된 연속된 문자열)을 반환. /// </summary> /// <returns></returns> public string[] GetTargetRegionCodes() { string[] targetAreaCodes = GetTargetAreaList(); if (targetAreaCodes == null) { return(null); } List <string> targetRegionCodes = new List <string>(); foreach (string areaCode in targetAreaCodes) { SWRAnnounceArea areaInfo = BasisData.FindSWRAreaByAreaCode(areaCode); if (areaInfo == null || areaInfo.TargetRegions == null) { continue; } foreach (string regionCode in areaInfo.TargetRegions) { if (targetRegionCodes.Contains(regionCode)) { continue; } targetRegionCodes.Add(regionCode); } } return(targetRegionCodes.ToArray()); }
/// <summary> /// CAP 메시지를 기반으로 헤드라인 문자열 작성. /// </summary> /// <param name="msg"></param> /// <returns></returns> public string MakeHeadline(CAP msg) { System.Diagnostics.Debug.Assert(msg != null); try { StringBuilder builder = new StringBuilder(); foreach (InfoType msgInfo in msg.Info) { if (msgInfo.Language.ToUpper() == BasisData.DEFAULT_LANGUAGECODE.ToUpper()) { builder.Append(msgInfo.Headline); break; } } if (builder.Length < 1) { OrderMode modeInfo = BasisData.FindOrderModeInfoByCode(msg.MessageStatus.Value); if (modeInfo == null || string.IsNullOrEmpty(modeInfo.Name)) { FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 모드 정보를 찾을 수 없습니다. )"); throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 모드 정보를 찾을 수 없습니다."); } if (msg.Info == null || msg.Info.Count < 1 || string.IsNullOrEmpty(msg.Info[0].Event)) { FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 이벤트 코드 정보를 찾을 수 없습니다. )"); throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 이벤트 코드 정보를 찾을 수 없습니다."); } string disasterKindName = msg.Info[0].Event; string targets = ExtractTargetNamesFromCAP(msg); if (string.IsNullOrEmpty(targets)) { FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( 헤드라인 정보 작성 실패. 발령 대상 정보를 찾을 수 없습니다. )"); throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 발령 대상 정보를 찾을 수 없습니다."); } builder.Append(msg.SentDateTime.ToString()); builder.Append(" [" + modeInfo.Name + "]"); builder.Append(" [" + targets.Replace(',', '/') + "] 대상으로"); builder.Append(" [" + disasterKindName + "]"); builder.Append(" 발령"); } return(builder.ToString()); } catch (Exception ex) { System.Console.WriteLine("[CAPInfo] MakeHeadline( Exception=[ " + ex.ToString() + "] )"); FileLogManager.GetInstance().WriteLog("[CAPInfo] MakeHeadline ( Exception=[" + ex.ToString() + "] )"); throw new Exception("[CAPInfo] 헤드라인 정보 작성 실패. 처리 중 예외가 발생하였습니다."); } }
public static string GetDisplayStringDisasterKindName(string disasterKindCode) { System.Diagnostics.Debug.Assert(disasterKindCode != null); DisasterKind kind = BasisData.FindDisasterKindByCode(disasterKindCode); if (kind == null || kind.Name == null) { return("Unknown(" + disasterKindCode + ")"); } return(kind.Name); }
/// <summary> /// 특보 해당구역 코드 리스트를 구역명 문자열(콤마로 구분된 연속된 문자열)로 변환. /// </summary> /// <returns></returns> public string GetTargetAreaNames() { string[] targetAreaCodes = GetTargetAreaList(); if (targetAreaCodes == null) { return(string.Empty); } List <string> regionNames = new List <string>(); foreach (string areaCode in targetAreaCodes) { SWRAnnounceArea areaInfo = BasisData.FindSWRAreaByAreaCode(areaCode); if (areaInfo == null || areaInfo.TargetRegions == null) { continue; } regionNames.Add(areaInfo.AreaName); } return(string.Join(",", regionNames)); }
public string GetLanguageNamesFromCAP(CAP msg) { System.Diagnostics.Debug.Assert(msg != null); if (msg.Info == null || msg.Info.Count < 1) { return(null); } bool isFirst = true; StringBuilder builder = new StringBuilder(); foreach (InfoType info in msg.Info) { if (info == null || string.IsNullOrEmpty(info.Language)) { continue; } string name = string.Empty; MsgTextDisplayLanguageKind kindInfo = BasisData.FindMsgTextLanguageInfoByCode(info.Language); if (kindInfo == null) { continue; } if (isFirst) { isFirst = false; builder.Append(kindInfo.LanguageName); } else { builder.Append("," + kindInfo.LanguageName); } } return(builder.ToString()); }
/// <summary> /// CAP 메시지로부터 발령 대상 지역 정보를 추출. /// </summary> /// <param name="msg"></param> /// <returns></returns> public List <RegionDefinition> ExtractTargetRegionsFromCAP(CAP msg) { System.Diagnostics.Debug.Assert(msg != null); if (msg.Scope == CAPLib.ScopeType.Private) { return(null); } if (msg.Info == null || msg.Info.Count < 1) { return(null); } List <RegionDefinition> targets = new List <RegionDefinition>(); InfoType info = msg.Info[0]; if (info == null) { return(null); } if (info.Area == null || info.Area.Count < 1) { return(null); } foreach (AreaType area in info.Area) { int areaIndex = -1; string[] stringSeperators = new string[] { " " }; foreach (NameValueType geoCode in area.GeoCode) { areaIndex++; if (geoCode.Name != "KRDSTGeocode") { continue; } string code = geoCode.Value; RegionProfile profile = BasisData.FindRegion(code); if (profile == null) { string areaDesc = area.AreaDesc; if (areaDesc == null) { continue; } string[] areaNames = areaDesc.Split(stringSeperators, StringSplitOptions.RemoveEmptyEntries); if (areaNames != null && areaNames.Count() <= areaIndex) { continue; } RegionDefinition region = new RegionDefinition(code, areaNames[areaIndex]); targets.Add(region); } else { RegionDefinition region = new RegionDefinition(profile.Code, profile.Name); targets.Add(region); } } } return(targets); }
public string GetHeadlineString() { if (this == null) { return(string.Empty); } try { CAPHelper helper = new CAPHelper(); StringBuilder headline = new StringBuilder(); string association = string.Empty; if (this.LocationKind == OrderLocationKind.Other) { association = "[연계] "; } CAP msg = new CAP(this.CapText); string headlineNormal = helper.MakeHeadline(msg); if (string.IsNullOrEmpty(headlineNormal)) { headline.Append(headlineNormal); } if (headline.Length < 1) { OrderMode mode = BasisData.FindOrderModeInfoByCode(this.OrderMode); if (mode == null) { headline.Append(this.OrderedTime + " [ Unknown ]"); } else { headline.Append(this.OrderedTime + " [" + mode.Name + "]"); } string targets = helper.ExtractTargetNamesFromCAP(msg); if (!string.IsNullOrEmpty(targets)) { headline.Append("[" + targets.Replace(',', '/') + "] 대상으로"); } else { headline.Append("[ Unknown ] 대상으로"); } string disasterName = "Unknown"; if (msg.Info != null && msg.Info.Count > 0) { disasterName = msg.Info[0].Event; } else { DisasterKind disasterKind = BasisData.FindDisasterKindByCode(this.DisasterKindCode); if (disasterKind != null) { disasterName = disasterKind.Name; } } headline.Append(" [" + disasterName + "]"); headline.Append(" 발령"); if (this.RefType == OrderReferenceType.Cancel) { headline.Append(" 취소"); } } return(association + headline.ToString()); } catch (Exception ex) { System.Console.WriteLine("[OrderInfo] GetHeadlineString( Exception=[" + ex.ToString() + "] )"); FileLogManager.GetInstance().WriteLog("[OrderInfo] GetHeadlineString ( Exception=[" + ex.ToString() + "] )"); return(string.Empty); } }