)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Seruattr (Ia.Ftn.Cl.Models.Data.Huawei)

Public general use code classes and xml files that we've compiled and used over the years:

SERUATTR Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) data model.

    1: using Microsoft.EntityFrameworkCore;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Data;
    5: using System.Linq;
    6: using System.Text;
    7:  
    8: namespace Ia.Ftn.Cl.Models.Data.Huawei
    9: {
   10:     ////////////////////////////////////////////////////////////////////////////
   11:  
   12:     /// <summary publish="true">
   13:     /// SERUATTR Signaling Service Processing System (SPS) support class for Huawei's Fixed Telecommunications Network (FTN) data model.
   14:     /// </summary>
   15:     /// 
   16:     /// <remarks> 
   17:     /// Copyright © 2018-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   18:     /// </remarks> 
   19:     public class Seruattr
   20:     {
   21:         /// <summary/>
   22:         public Seruattr() { }
   23:  
   24:         ////////////////////////////////////////////////////////////////////////////
   25:  
   26:         /// <summary>
   27:         ///
   28:         /// </summary>
   29:         public static bool Update(Ia.Ftn.Cl.Models.Business.Huawei.Sps.Response response, out Ia.Cl.Models.Result result)
   30:         {
   31:             bool isUpdated;
   32:             int readItemCount, existingItemCount, insertedItemCount, updatedItemCount, deletedItemCount;
   33:             string id, queryUsrnum, queryCommand;
   34:             Ia.Ftn.Cl.Models.Huawei.Seruattr seruattr, newSeruattr;
   35:  
   36:             isUpdated = false;
   37:             readItemCount = existingItemCount = insertedItemCount = updatedItemCount = deletedItemCount = 0;
   38:             result = new Ia.Cl.Models.Result();
   39:  
   40:             queryCommand = response.CommandString;
   41:  
   42:             // LST SERUATTR:MODE=NUM,USRNUM="26660019";
   43:             queryUsrnum = Ia.Cl.Models.Default.Match(queryCommand, @"USRNUM=""(\d+?)""");
   44:  
   45:             readItemCount = response.Count;
   46:  
   47:             using (var db = new Ia.Ftn.Cl.Db())
   48:             {
   49:                 seruattr = (from s in db.Seruattrs where s.USRNUM == queryUsrnum select s).SingleOrDefault();
   50:  
   51:                 existingItemCount = 1;
   52:  
   53:                 if (response.Count >= 1)
   54:                 {
   55:                     id = Ia.Ftn.Cl.Models.Business.Huawei.Seruattr.SeruattrId(queryUsrnum);
   56:  
   57:                     newSeruattr = new Ia.Ftn.Cl.Models.Huawei.Seruattr()
   58:                     {
   59:                         Id = id,
   60:                         SERVATTR = response.QueryDictionary.ContainsKey("SERVATTR") ? int.Parse(response.QueryDictionary["SERVATTR"]) : 0,
   61:                         NUMTYPE = response.QueryDictionary.ContainsKey("NUMTYPE") ? int.Parse(response.QueryDictionary["NUMTYPE"]) : 0,
   62:                         USRNUM = response.QueryDictionary.ContainsKey("USRNUM") ? response.QueryDictionary["USRNUM"] : string.Empty,
   63:                         IMSINUM = response.QueryDictionary.ContainsKey("IMSINUM") ? response.QueryDictionary["IMSINUM"] : string.Empty,
   64:                         DESC = response.QueryDictionary.ContainsKey("DESC") ? response.QueryDictionary["DESC"] : string.Empty,
   65:                         RNIDXTYPE = response.QueryDictionary.ContainsKey("RNIDXTYPE") ? int.Parse(response.QueryDictionary["RNIDXTYPE"]) : 0,
   66:                         HLRIDX = response.QueryDictionary.ContainsKey("HLRIDX") ? int.Parse(response.QueryDictionary["HLRIDX"]) : 0,
   67:                         RNIDX = response.QueryDictionary.ContainsKey("RNIDX") ? int.Parse(response.QueryDictionary["RNIDX"]) : 0,
   68:                         RNIDX2 = response.QueryDictionary.ContainsKey("RNIDX2") ? int.Parse(response.QueryDictionary["RNIDX2"]) : 0,
   69:                         RN = response.QueryDictionary.ContainsKey("RN") ? response.QueryDictionary["RN"] : string.Empty
   70:                     };
   71:  
   72:                     if (seruattr == null)
   73:                     {
   74:                         newSeruattr.Created = newSeruattr.Updated = DateTime.UtcNow.AddHours(3);
   75:  
   76:                         db.Seruattrs.Add(newSeruattr);
   77:  
   78:                         insertedItemCount++;
   79:                     }
   80:                     else
   81:                     {
   82:                         if (seruattr.Update(newSeruattr))
   83:                         {
   84:                             db.Seruattrs.Attach(seruattr);
   85:                             db.Entry(seruattr).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
   86:  
   87:                             updatedItemCount++;
   88:                         }
   89:                     }
   90:                 }
   91:                 else
   92:                 {
   93:                     // below: remove since reading was empty
   94:  
   95:                     if (seruattr != null)
   96:                     {
   97:                         seruattr = (from s in db.Seruattrs where s.USRNUM == queryUsrnum select s).SingleOrDefault();
   98:  
   99:                         db.Seruattrs.Remove(seruattr);
  100:  
  101:                         deletedItemCount++;
  102:                     }
  103:                 }
  104:  
  105:                 db.SaveChanges();
  106:             }
  107:  
  108:             if (insertedItemCount != 0 || updatedItemCount != 0 || deletedItemCount != 0) isUpdated = true;
  109:             else isUpdated = false;
  110:  
  111:             result.AddSuccess("(" + readItemCount + "/" + existingItemCount + "/" + insertedItemCount + "," + updatedItemCount + "," + deletedItemCount + ")");
  112:  
  113:             return isUpdated;
  114:         }
  115:  
  116:         ////////////////////////////////////////////////////////////////////////////
  117:  
  118:         /// <summary>
  119:         ///
  120:         /// </summary>
  121:         public static List<Ia.Ftn.Cl.Models.Huawei.Seruattr> List()
  122:         {
  123:             List<Ia.Ftn.Cl.Models.Huawei.Seruattr> list;
  124:  
  125:             using (var db = new Ia.Ftn.Cl.Db())
  126:             {
  127:                 list = (from s in db.Seruattrs select s).ToList();
  128:             }
  129:  
  130:             return list;
  131:         }
  132:  
  133:         ////////////////////////////////////////////////////////////////////////////
  134:  
  135:         /// <summary>
  136:         ///
  137:         /// </summary>
  138:         public static List<int> UsrnumList()
  139:         {
  140:             List<int> list;
  141:  
  142:             using (var db = new Ia.Ftn.Cl.Db())
  143:             {
  144:                 var usrnumList = (from s in db.Seruattrs select s.USRNUM).AsNoTracking().ToList();
  145:  
  146:                 list = new List<int>();
  147:  
  148:                 foreach (string usrnum in usrnumList)
  149:                 {
  150:                     list.Add(int.Parse(usrnum));
  151:                 }
  152:             }
  153:  
  154:             return list;
  155:         }
  156:  
  157:         ////////////////////////////////////////////////////////////////////////////
  158:  
  159:         /// <summary>
  160:         ///
  161:         /// </summary>
  162:         public static List<string> ServiceList()
  163:         {
  164:             var usrnumList = UsrnumList();
  165:  
  166:             var list = usrnumList.ConvertAll<string>(u => u.ToString());
  167:  
  168:             return list;
  169:         }
  170:  
  171:         ////////////////////////////////////////////////////////////////////////////
  172:  
  173:         /// <summary>
  174:         /// 
  175:         /// </summary>
  176:         public static List<Ia.Ftn.Cl.Models.Huawei.Seruattr> List(List<string> serviceList)
  177:         {
  178:             List<Ia.Ftn.Cl.Models.Huawei.Seruattr> list;
  179:  
  180:             using (var db = new Ia.Ftn.Cl.Db())
  181:             {
  182:                 if (serviceList.Count > 0)
  183:                 {
  184:                     list = (from s in db.Seruattrs
  185:                             where serviceList.Contains(s.USRNUM)
  186:                             select s).ToList();
  187:                 }
  188:                 else list = new List<Ia.Ftn.Cl.Models.Huawei.Seruattr>();
  189:             }
  190:  
  191:             return list;
  192:         }
  193:  
  194:         ////////////////////////////////////////////////////////////////////////////
  195:  
  196:         /// <summary>
  197:         ///
  198:         /// </summary>
  199:         public static List<string> ServiceNotWithinSpsDomainList()
  200:         {
  201:             var list = new List<string>();
  202:  
  203:             var spsDomainList = Ia.Ftn.Cl.Models.Data.Service.SpsDomainList;
  204:  
  205:             var serviceList = Ia.Ftn.Cl.Models.Data.Huawei.Seruattr.ServiceList();
  206:  
  207:             foreach (var s in serviceList)
  208:             {
  209:                 if (!spsDomainList.Any(u => s.StartsWith(u.ToString()))) list.Add(s);
  210:             }
  211:  
  212:             list.Sort();
  213:  
  214:             return list;
  215:         }
  216:  
  217:         ////////////////////////////////////////////////////////////////////////////
  218:  
  219:         /// <summary>
  220:         ///
  221:         /// </summary>
  222:         public static Dictionary<string, Ia.Ftn.Cl.Models.Business.Default.SwitchRoute> PstnServiceToSwitchRouteDictionary()
  223:         {
  224:             var dictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.Default.SwitchRoute>();
  225:  
  226:             using (var db = new Ia.Ftn.Cl.Db())
  227:             {
  228:                 var list = (from s in db.Seruattrs
  229:                             select new { s.USRNUM, s.RNIDX2 }).AsNoTracking().ToList();
  230:  
  231:                 foreach (var l in list)
  232:                 {
  233:                     dictionary[l.USRNUM] = Ia.Ftn.Cl.Models.Business.Huawei.Seruattr.RnidxRouteToSwitchRoute(l.RNIDX2);
  234:                 }
  235:             }
  236:  
  237:             return dictionary;
  238:         }
  239:  
  240:         ////////////////////////////////////////////////////////////////////////////
  241:  
  242:         /// <summary>
  243:         ///
  244:         /// </summary>
  245:         public static Dictionary<string, Ia.Ftn.Cl.Models.Business.Default.SwitchRoute> PstnThatUsesNpServerServiceToSwitchRouteDictionary()
  246:         {
  247:             var dictionary = new Dictionary<string, Ia.Ftn.Cl.Models.Business.Default.SwitchRoute>();
  248:  
  249:             var pstnThatUsesNpServerDomainList = Ia.Ftn.Cl.Models.Data.Service.PstnThatUsesNpServerDomainList;
  250:  
  251:             using (var db = new Ia.Ftn.Cl.Db())
  252:             {
  253:                 var list = (from s in db.Seruattrs
  254:                             select new { s.USRNUM, s.RNIDX2 }).AsNoTracking().ToList();
  255:  
  256:                 foreach (var l in list)
  257:                 {
  258:                     if (pstnThatUsesNpServerDomainList.Any(u => l.USRNUM.StartsWith(u.ToString())))
  259:                     {
  260:                         dictionary[l.USRNUM] = Ia.Ftn.Cl.Models.Business.Huawei.Seruattr.RnidxRouteToSwitchRoute(l.RNIDX2);
  261:                     }
  262:                 }
  263:             }
  264:  
  265:             return dictionary;
  266:         }
  267:  
  268:         ////////////////////////////////////////////////////////////////////////////
  269:         ////////////////////////////////////////////////////////////////////////////
  270:  
  271:         /// <summary>
  272:         ///
  273:         /// </summary>
  274:         public static string ToSimpleTextString(Ia.Ftn.Cl.Models.Huawei.Seruattr seruattr)
  275:         {
  276:             StringBuilder sb;
  277:  
  278:             sb = new StringBuilder();
  279:  
  280:             sb.AppendLine("SERVATTR: " + seruattr.SERVATTR);
  281:             sb.AppendLine("NUMTYPE: " + seruattr.NUMTYPE);
  282:             sb.AppendLine("USRNUM: " + seruattr.USRNUM);
  283:             sb.AppendLine("IMSINUM: " + seruattr.IMSINUM);
  284:             sb.AppendLine("DESC: " + seruattr.DESC);
  285:             sb.AppendLine("RNIDXTYPE: " + seruattr.RNIDXTYPE);
  286:             sb.AppendLine("HLRIDX: " + seruattr.HLRIDX);
  287:             sb.AppendLine("RNIDX: " + seruattr.RNIDX);
  288:             sb.AppendLine("RNIDX2: " + seruattr.RNIDX2);
  289:             sb.AppendLine("Route: " + Ia.Ftn.Cl.Models.Business.Huawei.Seruattr.RnidxRouteName[seruattr.RNIDX2]);
  290:             sb.AppendLine("RN: " + seruattr.RN);
  291:  
  292:             return sb.ToString();
  293:         }
  294:  
  295:         ////////////////////////////////////////////////////////////////////////////
  296:         ////////////////////////////////////////////////////////////////////////////
  297:     }
  298:  
  299:     ////////////////////////////////////////////////////////////////////////////
  300:     ////////////////////////////////////////////////////////////////////////////
  301: }