예제 #1
0
파일: Phone.cs 프로젝트: paulusyeung/RT2020
        /// <summary>
        /// Generate dbo.Country. Write your time consuming task here
        /// </summary>
        /// <param name="s"></param>
        public void LTT_CountryCode(string s)
        {
            using (var ctx = new RT2020Entities())
            {
                ctx.Configuration.LazyLoadingEnabled = false;

                #region Generate missing dbo.Country from VWG.Community.Util.CountryCodes
                var dboCounttries = ctx.Country.ToList();
                var ccodes        = new CountryCodes();
                var codelist      = ccodes.GetList();
                OpenCC.Load();

                using (var scope = ctx.Database.BeginTransaction())
                {
                    try
                    {
                        foreach (var item in codelist)
                        {
                            //! CountryCode = ISO3166_1_Alpha_2,CountryName = CLDR_displayname
                            if (item.ISO3166_1_Alpha_2 == String.Empty)
                            {
                                continue;
                            }

                            // 2020.11.25 paulus: 再改番用 ISO3166_1_Alpha_2
                            //var exist = ctx.Country.Where(x => x.CountryCode == item.FIPS).FirstOrDefault();
                            var exist = ctx.Country.Where(x => x.CountryCode == item.ISO3166_1_Alpha_2).FirstOrDefault();
                            if (exist == null)
                            {
                                exist             = new Country();
                                exist.CountryId   = Guid.NewGuid();
                                exist.CountryCode = item.ISO3166_1_Alpha_2;
                                exist.CountryName = item.CLDR_displayname;
                                if (!String.IsNullOrEmpty(item.official_name_cn))
                                {
                                    exist.CountryName_Chs = item.official_name_cn;
                                    exist.CountryName_Cht = OpenCC.Convert(item.official_name_cn, OpenCCType.s2hk.ToString("g"));
                                }
                                ctx.Country.Add(exist);
                                ctx.SaveChanges();
                            }
                            else
                            {
                                exist.CountryName     = item.CLDR_displayname;
                                exist.CountryName_Chs = item.official_name_cn;
                                exist.CountryName_Cht = OpenCC.Convert(item.official_name_cn, OpenCCType.s2hk.ToString("g"));
                                ctx.SaveChanges();
                            }
                            _CurrentItem = exist.CountryName;
                        }
                        scope.Commit();
                    }
                    catch
                    {
                        scope.Rollback();
                    }
                }
                #endregion
            }
        }
예제 #2
0
        public static void GenMemberPhoneNumbers(Guid id)
        {
            using (var ctx = new RT2020Entities())
            {
                ctx.Configuration.LazyLoadingEnabled = false;

                #region Generate random phone numbers for each Member
                var mbrAddresses = ctx.MemberAddress.Where(x => x.PhoneTag1Value != "" || x.PhoneTag2Value != "").ToList();
                var counts       = mbrAddresses.Count();
                if (counts > 0)
                {
                    var ccodes   = new CountryCodes();
                    var codelist = ccodes.GetList();

                    //using (var scope = ctx.Database.BeginTransaction())
                    //{
                    try
                    {
                        //List<String> uniqueCountries = new List<string>();
                        int i = 0;
                        foreach (var item in mbrAddresses)
                        {
                            #region 用 random gen phone number 取代原有嘅 phone number

                            /** 假設條件(address 先決):
                             * 0. 冇地址,當 others
                             * 1. 非 ASCII 地址就係中國
                             * 2. 由 Address 找到所屬 Country,分為:中國﹑香港﹑其他
                             * 3. 如果 match 唔倒,當係 香港
                             */
                            String currentCountry = "", number1 = "", number2 = "", number3 = "", number4 = "", number5 = "";

                            currentCountry = (String.IsNullOrEmpty(item.Address)) ?
                                             "" :
                                             IsChinese(item.Address) ? "china" : StripCountry(item.Address); // 非 ASCII 地址就係中國
                            if (currentCountry != String.Empty)
                            {
                                #region  地址
                                currentCountry = currentCountry.ToLower().Replace(".", "");

                                var isoCountry = ccodes.FindByDisplayName(currentCountry); // 由 Address 找到所屬 Country
                                var found      = isoCountry != null ? true : false;
                                if (!found)                                                // match 唔倒,當係 香港
                                {
                                    currentCountry = "hong kong";
                                    isoCountry     = ccodes.FindByISO3166_Alpha3("HKG"); //! 應該加埋:FindByISO3166_Alpha2,可惜 :(
                                }
                                else
                                {
                                    currentCountry = isoCountry.CLDR_displayname.ToLower();
                                }

                                var dboCountry = ctx.Country.Where(x => x.CountryCode == isoCountry.FIPS).FirstOrDefault();

                                #region get random Phone Numbers into: number1 number2
                                switch (isoCountry.FIPS)
                                {
                                case "CN":
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_CN() : "";
                                    break;

                                case "HK":
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_HK() : "";
                                    break;

                                default:
                                    number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                    break;
                                }
                                #endregion

                                if (dboCountry != null)
                                {
                                    item.CountryId = dboCountry.CountryId;
                                }
                                item.PhoneTag1Value = number1;
                                item.PhoneTag2Value = number2;
                                item.PhoneTag3Value = number3;
                                item.PhoneTag4Value = number4;
                                item.PhoneTag5Value = number5;

                                /** Code used in debugging
                                 * var inList = uniqueCountries.Where(x => x == currentCountry).FirstOrDefault();
                                 * if (inList == null) uniqueCountries.Add(currentCountry);
                                 */
                                #endregion
                            }
                            else
                            {
                                #region 冇地址
                                number1 = (item.PhoneTag1Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number2 = (item.PhoneTag2Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number3 = (item.PhoneTag3Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number4 = (item.PhoneTag4Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";
                                number5 = (item.PhoneTag5Value.Trim() != String.Empty) ? GetRandomPhoneNumber_Others() : "";

                                item.PhoneTag1Value = number1;
                                item.PhoneTag2Value = number2;
                                item.PhoneTag3Value = number3;
                                item.PhoneTag4Value = number4;
                                item.PhoneTag5Value = number5;
                                #endregion
                            }

                            //ctx.BulkSaveChanges(options => options.BatchSize = 100);
                            #endregion

                            i++;
                            #region SaveChanges each batch: say 100
                            if ((i % 100) == 0)
                            {
                                ctx.BulkSaveChanges();

                                // uncomment for debugging
                                //if (i >= 50) break;
                            }
                            #endregion
                        }

                        if (ctx.ChangeTracker.HasChanges())
                        {
                            ctx.BulkSaveChanges();
                        }
                        //scope.Commit();
                    }
                    catch (Exception ex)
                    {
                        //scope.Rollback();
                        throw ex;
                    }
                    //}
                }
                #endregion
            }
        }
예제 #3
0
파일: Phone.cs 프로젝트: paulusyeung/RT2020
        /// <summary>
        /// 將費時嘅工序放喺呢度做
        /// </summary>
        /// <param name="s"></param>
        public void LTT_MemberPhoneNumber(string s)
        {
            // Write your time consuming task here
            using (var ctx = new RT2020Entities())
            {
                ctx.Configuration.LazyLoadingEnabled = false;

                #region Generate random phone numbers for each Member
                var mbrAddresses = ctx.MemberAddress.Where(x => x.PhoneTag1Value != "" || x.PhoneTag2Value != "");
                var counts       = mbrAddresses.Count();
                if (counts > 0)
                {
                    OpenCC.Load();
                    var ccodes   = new CountryCodes();
                    var codelist = ccodes.GetList();

                    using (var scope = ctx.Database.BeginTransaction())
                    {
                        try
                        {
                            List <String> countries = new List <string>();
                            foreach (var item in mbrAddresses)
                            {
                                /* 假設條件(address 先決):
                                 * 1. 非 ASCII 地址就係中國
                                 * 2. 由 Address 找到所屬 Country,分為:中國﹑香港﹑其他
                                 * 3. 如果 match 唔倒,當係 香港
                                 */
                                String country = "", areacode = "", number1 = "", number2 = "";

                                country = IsChinese(item.Address) ? "china" : StripCountry(item.Address);
                                if (country != String.Empty)
                                {
                                    country = country.ToLower().Replace(".", "");

                                    var validCountry = ccodes.FindByDisplayName(country);
                                    var found        = validCountry != null ? true : false;
                                    if (!found)
                                    {
                                        country = "hong kong";
                                    }

                                    var inList = countries.Where(x => x == country).FirstOrDefault();
                                    if (inList == null)
                                    {
                                        countries.Add(country);
                                    }
                                }
                                _CurrentItem = (--counts).ToString();

                                //ctx.SaveChanges();
                            }

                            #region 顯示結果:countries 有哂啲 unique 嘅名,轉做 array 再轉為 json string 方便顯示個 result
                            var str = String.Join("; ", countries.OrderBy(x => x).ToArray());
                            _AllCountries = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(str)).Replace("?", "");
                            #endregion

                            //scope.Commit();
                        }
                        catch
                        {
                            //scope.Rollback();
                        }
                    }
                }
                #endregion
            }
        }