/// <summary> /// 判斷轉檔紀錄是否有存在 /// </summary> /// <param name="fileNames">檔案名稱(這次要轉檔的名稱)</param> /// <param name="checkName">要判斷的檔案名稱(執行這次轉檔前要完成的動作的檔案名稱)</param> /// <param name="reportDate">基準日</param> /// <param name="version">版本</param> /// <returns></returns> public bool checkTransferCheck( string fileName, string checkName, DateTime reportDate, int version) { if (fileName.IsNullOrWhiteSpace() || checkName.IsNullOrWhiteSpace()) { return(false); } using (IFRS9Entities db = new IFRS9Entities()) { var checkTable = db.Transfer_CheckTable.AsNoTracking(); //須符合有一筆"Y"(上一部完成),前置動作檢查檔案為A53版本只會有一版 if (checkTable.Any(x => x.ReportDate == reportDate && ((checkName == "A53" && x.Version == 1) || (x.File_Name == checkName && x.Version == version)) && x.TransferType == "Y") && //自己沒有"Y"(重複做) 才算符合,轉檔為A53不用判斷 (fileName == "A53" || !checkTable.Any(x => x.File_Name == fileName && x.ReportDate == reportDate && x.Version == version && x.TransferType == "Y"))) { return(true); } } return(false); }
/// <summary> /// start Transfer /// </summary> /// <param name="dateTime"></param> public void startTransfer(string dateTime) { logPath = log.txtLocation(type); IFRS9Entities db = new IFRS9Entities(); startTime = DateTime.Now; if (dateTime.Length != 8 || !DateTime.TryParseExact(dateTime, "yyyyMMdd", null, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out reportDateDt)) { db.Dispose(); log.txtLog( type, false, startTime, logPath, MessageType.DateTime_Format_Fail.GetDescription() ); } else { new CompleteEvent().saveC03Mortgage(dateTime); } }
/// <summary> /// 判斷轉檔紀錄是否有存在 /// </summary> /// <param name="fileNames">檔案名稱</param> /// <param name="checkName">要判斷的檔案名稱</param> /// <param name="reportDate">基準日</param> /// <param name="version">版本</param> /// <returns></returns> public bool checkTransferCheck( string fileName, string checkName, DateTime reportDate, int version) { IFRS9Entities db = new IFRS9Entities(); if (fileName.IsNullOrWhiteSpace() || checkName.IsNullOrWhiteSpace()) { return(false); } //須符合有一筆"Y"(上一部完成) 自己沒有"Y"(重複做) 才算符合 if (db.Transfer_CheckTable.Any(x => x.ReportDate == reportDate && ((checkName == "A53" && x.Version == 1) || (x.File_Name == checkName && x.Version == version)) && x.TransferType == "Y") && (fileName == "A53" || !db.Transfer_CheckTable.Any(x => x.File_Name == fileName && x.ReportDate == reportDate && x.Version == version && x.TransferType == "Y"))) { db.Dispose(); return(true); } return(false); }
/// <summary> /// 轉檔紀錄存到Sql(Transfer_CheckTable) /// </summary> /// <param name="fileName">檔案名稱 A41,A42...</param> /// <param name="flag">成功失敗</param> /// <param name="reportDate">基準日</param> /// <param name="version">版本</param> /// <param name="start">轉檔開始時間</param> /// <param name="end">轉檔結束時間</param> /// <returns></returns> public bool saveTransferCheck( string fileName, bool flag, DateTime reportDate, int version, DateTime start, DateTime end) { IFRS9Entities db = new IFRS9Entities(); if (flag && db.Transfer_CheckTable.Any(x => fileName != TableType.A53.ToString() && x.ReportDate == reportDate && x.Version == version && x.File_Name == fileName && x.TransferType == "Y")) { return(false); } if (EnumUtil.GetValues <TableType>() .Select(x => x.ToString()).ToList().Contains(fileName)) { if (fileName.Equals("A53")) { var A53 = db.Transfer_CheckTable .Where(x => x.File_Name == "A53" && x.ReportDate == reportDate).FirstOrDefault(); if (A53 != null) { db.Transfer_CheckTable.Remove(A53); } } db.Transfer_CheckTable.Add(new Transfer_CheckTable() { File_Name = fileName, ReportDate = reportDate, Version = version, TransferType = flag ? "Y" : "N", Create_date = start.ToString("yyyyMMdd"), Create_time = start.ToString("HH:mm:ss"), End_date = end.ToString("yyyyMMdd"), End_time = end.ToString("HH:mm:ss"), }); try { db.SaveChanges(); return(true); } catch { return(false); } finally { db.Dispose(); } } return(false); }
/// <summary> /// start Transfer /// </summary> /// <param name="dateTime"></param> public void startTransfer(string dateTime) { logPath = log.txtLocation(type); IFRS9Entities db = new IFRS9Entities(); startTime = DateTime.Now; if (dateTime.Length != 8 || !DateTime.TryParseExact(dateTime, "yyyyMMdd", null, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out reportDateDt)) { db.Dispose(); log.txtLog( type, false, startTime, logPath, MessageType.DateTime_Format_Fail.GetDescription() ); } else { string yearString = dateTime.Substring(0, 4); switch (dateTime.Substring(4, 2)) { case "04": new CompleteEvent().saveC03Mortgage(yearString + "Q1"); break; case "07": new CompleteEvent().saveC03Mortgage(yearString + "Q2"); break; case "10": new CompleteEvent().saveC03Mortgage(yearString + "Q3"); break; case "01": new CompleteEvent().saveC03Mortgage((int.Parse(yearString) - 1).ToString() + "Q4"); break; default: db.Dispose(); log.txtLog( type, false, startTime, logPath, "排程執行月份必須是 04,07,10,01 月" ); break; } } }
protected virtual void Dispose(bool disposing) { if (disposing) { if (this.db != null) { this.db.Dispose(); this.db = null; } } }
/// <summary> /// start Transfer /// </summary> /// <param name="dateTime"></param> public override void startTransfer(string dateTime) { IFRS9Entities db = new IFRS9Entities(); startTime = DateTime.Now; if (dateTime.Length != 8 || !DateTime.TryParseExact(dateTime, "yyyyMMdd", null, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out reportDateDt)) { db.Dispose(); log.txtLog( type, false, startTime, logPath, MessageType.DateTime_Format_Fail.GetDescription() ); log.saveTransferCheck( type, false, reportDateDt, 1, //A53無版本 (default為1) startTime, DateTime.Now); } var A41 = db.Bond_Account_Info .Any(x => x.Report_Date == reportDateDt); verInt = db.Bond_Account_Info .Where(x => x.Report_Date == reportDateDt && x.Version != null) .DefaultIfEmpty().Max(x => x.Version == null ? 0 : x.Version.Value); var check = log.checkTransferCheck(TableType.A53.ToString(), "A41", reportDateDt, verInt); logPath = log.txtLocation(type); if (!A41 || !check || verInt == 0) { db.Dispose(); log.saveTransferCheck( type, false, reportDateDt, 1, //A53只有一版 (default為1) startTime, DateTime.Now); List <string> errs = new List <string>(); if (!A41) { errs.Add(MessageType.not_Find_Any.GetDescription()); } if (!check || verInt == 0) { errs.Add(MessageType.transferError.GetDescription()); } log.txtLog( type, false, startTime, logPath, string.Join(",", errs) ); } else { db.Dispose(); reportDateStr = dateTime; setFile = new SetFile(tableType, dateTime); createSampleFile(); } }
/// <summary> /// Db save /// </summary> protected override void DataToDb() { IFRS9Entities db = new IFRS9Entities(); List <Rating_Info> sampleData = new List <Rating_Info>(); List <Rating_Info> commpanyData = new List <Rating_Info>(); List <sampleInfo> sampleInfos = new List <sampleInfo>(); A53Sample a53Sample = new A53Sample(); A53Commpany a53Commpany = new A53Commpany(); #region sample Data using (StreamReader sr = new StreamReader(Path.Combine( setFile.getSampleFilePath(), setFile.getSampleFileName()))) { bool flag = false; //判斷是否為要讀取的資料行數 string line = string.Empty; while ((line = sr.ReadLine()) != null) { if ("END-OF-DATA".Equals(line)) { flag = false; } if (flag) //找到的資料 { var arr = line.Split('|'); //arr[0] ex: US00206RDH21 (債券編號) //arr[1] ex: 0 //arr[2] ex: 20 //arr[3] ISSUER_EQUITY_TICKER (發行人) //arr[4] ISSUE_DT (債券評等日期) //arr[5] ISSUER (債券名稱) //arr[6] GUARANTOR_EQY_TICKER (擔保人) //arr[7] GUARANTOR_NAME (擔保人名稱) //--標普(S&P) //arr[8] (國外)RTG_SP (SP國外評等) //arr[9] (國外)SP_EFF_DT (SP國外評等日期) //--穆迪(Moody's) //arr[10] (國外)RTG_MOODY (Moody's國外評等) //arr[11] (國外)MOODY_EFF_DT (Moody's國外評等日期) //--惠譽台灣(Fitch(twn)) //arr[12] (國內)RTG_FITCH_NATIONAL (惠譽國內評等) //arr[13] (國內)RTG_FITCH_NATIONAL_DT (惠譽國內評等日期) //--惠譽(Fitch) //arr[14] (國外)RTG_FITCH (惠譽評等) //arr[15] (國外)FITCH_EFF_DT (惠譽評等日期) //--TRC(中華信評) //arr[16] (國內)RTG_TRC (TRC 評等) //arr[17] (國內)TRC_EFF_DT (TRC 評等日期) if (arr.Length >= 18) { //S&P國外評等 validateSample( arr[8], arr[9], arr[0], A53SampleBloombergField.RTG_SP.ToString(), RatingOrg.SP, sampleData); //Moody's國外評等 validateSample( arr[10], arr[11], arr[0], A53SampleBloombergField.RTG_MOODY.ToString(), RatingOrg.Moody, sampleData); //惠譽台灣 validateSample( arr[12], arr[13], arr[0], A53SampleBloombergField.RTG_FITCH_NATIONAL.ToString(), RatingOrg.FitchTwn, sampleData); //惠譽 validateSample( arr[14], arr[15], arr[0], A53SampleBloombergField.RTG_FITCH.ToString(), RatingOrg.Fitch, sampleData); //TRC(中華信評) validateSample( arr[16], arr[17], arr[0], A53SampleBloombergField.RTG_TRC.ToString(), RatingOrg.CW, sampleData); sampleInfos.Add(new sampleInfo() { Bond_Number = arr[0], ISSUER_TICKER = arr[3], GUARANTOR_EQY_TICKER = arr[6], GUARANTOR_NAME = arr[7] }); } } if ("START-OF-DATA".Equals(line)) { flag = true; } } } #endregion sample Data #region commpany Data using (StreamReader sr = new StreamReader(Path.Combine( setFile.getCommpanyFilePath(), setFile.getCommpanyFileName()))) { bool flag = false; //判斷是否為要讀取的資料行數 string line = string.Empty; while ((line = sr.ReadLine()) != null) { if ("END-OF-DATA".Equals(line)) { flag = false; } if (flag) //找到的資料 { var arr = line.Split('|'); //arr[0] ex: T US Equity (發行人or擔保人) //arr[1] ex: 0 //arr[2] ex: 38 //arr[3] ID_BB_COMPANY 公司ID //arr[4] LONG_COMP_NAME 公司名稱 //arr[5] COUNTRY_ISO 城市(國家) //arr[6] INDUSTRY_GROUP //arr[7] INDUSTRY_SECTOR //--標普(S&P) //arr[8] (國外)RTG_SP_LT_LC_ISSUER_CREDIT (標普本國貨幣長期發行人信用評等) //arr[9] (國外)RTG_SP_LT_LC_ISS_CRED_RTG_DT (標普本國貨幣長期發行人信用評等日期) //arr[10] (國外)RTG_SP_LT_FC_ISSUER_CREDIT (標普長期外幣發行人信用評等) //arr[11] (國外)RTG_SP_LT_FC_ISS_CRED_RTG_DT (標普長期外幣發行人信用評等日期) //--穆迪(Moody's) //arr[12] (國內)RTG_MDY_LOCAL_LT_BANK_DEPOSITS (穆迪長期本國銀行存款評等) //arr[13] (國內)RTG_MDY_LT_LC_BANK_DEP_RTG_DT (穆迪長期本國銀行存款評等日期) //arr[14] (國外)RTG_MDY_FC_CURR_ISSUER_RATING (穆迪外幣發行人評等) //arr[15] (國外)RTG_MDY_FC_CURR_ISSUER_RTG_DT (穆迪外幣發行人評等日期) //arr[16] (國外)RTG_MDY_ISSUER (穆迪發行人評等) //arr[17] (國外)RTG_MDY_ISSUER_RTG_DT (穆迪發行人評等日期) //arr[18] (國外)RTG_MOODY_LONG_TERM (穆迪長期評等) //arr[19] (國外)RTG_MOODY_LONG_TERM_DATE (穆迪長期評等日期) //arr[20] (國外)RTG_MDY_SEN_UNSECURED_DEBT (穆迪優先無擔保債務評等) //arr[21] (國外)RTG_MDY_SEN_UNSEC_RTG_DT (穆迪優先無擔保債務評等日期) //--惠譽(Fitch) //arr[22] (國外)RTG_FITCH_LT_ISSUER_DEFAULT (惠譽長期發行人違約評等) //arr[23] (國外)RTG_FITCH_LT_ISSUER_DFLT_RTG_DT (惠譽長期發行人違約評等日期) //arr[24] (國外)RTG_FITCH_LT_FC_ISSUER_DEFAULT (惠譽長期外幣發行人違約評等) //arr[25] (國外)RTG_FITCH_LT_FC_ISS_DFLT_RTG_DT (惠譽長期外幣發行人違約評等日期) //arr[26] (國外)RTG_FITCH_LT_LC_ISSUER_DEFAULT (惠譽長期本國貨幣發行人違約評等) //arr[27] (國外)RTG_FITCH_LT_LC_ISS_DFLT_RTG_DT (惠譽長期本國貨幣發行人違約評等日期) //arr[28] (國外)RTG_FITCH_SEN_UNSECURED (惠譽優先無擔保債務評等) //arr[29] (國外)RTG_FITCH_SEN_UNSEC_RTG_DT (惠譽優先無擔保債務評等日期) //--惠譽台灣(Fitch(twn)) //arr[30] (國內)RTG_FITCH_NATIONAL_LT (惠譽國內長期評等) //arr[31] (國內)RTG_FITCH_NATIONAL_LT_DT (惠譽國內長期評等日期) //--TRC(中華信評) //arr[32] (國內)RTG_TRC_LONG_TERM (TRC 長期評等) //arr[33] (國內)RTG_TRC_LONG_TERM_RTG_DT (TRC 長期評等日期) if (arr.Length >= 34) { //RTG_SP_LT_LC_ISSUER_CREDIT 標普本國貨幣長期發行人信用評等 validateCommpany( arr[8], arr[9], arr[0], A53CommpanyBloombergField.RTG_SP_LT_LC_ISSUER_CREDIT.ToString(), RatingOrg.SP, commpanyData); //RTG_SP_LT_FC_ISSUER_CREDIT 標普長期外幣發行人信用評等 validateCommpany( arr[10], arr[11], arr[0], A53CommpanyBloombergField.RTG_SP_LT_FC_ISSUER_CREDIT.ToString(), RatingOrg.SP, commpanyData); //RTG_MDY_LOCAL_LT_BANK_DEPOSITS 穆迪長期本國銀行存款評等 validateCommpany( arr[12], arr[13], arr[0], A53CommpanyBloombergField.RTG_MDY_LOCAL_LT_BANK_DEPOSITS.ToString(), RatingOrg.Moody, commpanyData); //RTG_MDY_FC_CURR_ISSUER_RATING 穆迪外幣發行人評等 validateCommpany( arr[14], arr[15], arr[0], A53CommpanyBloombergField.RTG_MDY_FC_CURR_ISSUER_RATING.ToString(), RatingOrg.Moody, commpanyData ); //RTG_MDY_ISSUER 穆迪發行人評等 validateCommpany( arr[16], arr[17], arr[0], A53CommpanyBloombergField.RTG_MDY_ISSUER.ToString(), RatingOrg.Moody, commpanyData); //RTG_MOODY_LONG_TERM 穆迪長期評等 validateCommpany( arr[18], arr[19], arr[0], A53CommpanyBloombergField.RTG_MOODY_LONG_TERM.ToString(), RatingOrg.Moody, commpanyData); //RTG_MDY_SEN_UNSECURED_DEBT 穆迪優先無擔保債務評等 validateCommpany( arr[20], arr[21], arr[0], A53CommpanyBloombergField.RTG_MDY_SEN_UNSECURED_DEBT.ToString(), RatingOrg.Moody, commpanyData); //RTG_FITCH_LT_ISSUER_DEFAULT 惠譽長期發行人違約評等 validateCommpany( arr[22], arr[23], arr[0], A53CommpanyBloombergField.RTG_FITCH_LT_ISSUER_DEFAULT.ToString(), RatingOrg.Fitch, commpanyData); //RTG_FITCH_LT_FC_ISSUER_DEFAULT 惠譽長期外幣發行人違約評等 validateCommpany( arr[24], arr[25], arr[0], A53CommpanyBloombergField.RTG_FITCH_LT_FC_ISSUER_DEFAULT.ToString(), RatingOrg.Fitch, commpanyData); //RTG_FITCH_LT_LC_ISSUER_DEFAULT 惠譽長期本國貨幣發行人違約評等 validateCommpany( arr[26], arr[27], arr[0], A53CommpanyBloombergField.RTG_FITCH_LT_LC_ISSUER_DEFAULT.ToString(), RatingOrg.Fitch, commpanyData); //RTG_FITCH_SEN_UNSECURED 惠譽優先無擔保債務評等 validateCommpany( arr[28], arr[29], arr[0], A53CommpanyBloombergField.RTG_FITCH_SEN_UNSECURED.ToString(), RatingOrg.Fitch, commpanyData); //RTG_FITCH_NATIONAL_LT 惠譽國內長期評等 validateCommpany( arr[30], arr[31], arr[0], A53CommpanyBloombergField.RTG_FITCH_NATIONAL_LT.ToString(), RatingOrg.FitchTwn, commpanyData); //RTG_TRC_LONG_TERM (國內)TRC 長期評等 validateCommpany( arr[32], arr[33], arr[0], A53CommpanyBloombergField.RTG_TRC_LONG_TERM.ToString(), RatingOrg.CW, commpanyData); } } if ("START-OF-DATA".Equals(line)) { flag = true; } } } #endregion commpany Data #region saveDb db.Rating_Info.RemoveRange( db.Rating_Info.Where(x => x.Report_Date == reportDateDt)); db.Rating_Info.AddRange(sampleData); db.Rating_Info.AddRange(commpanyData); db.Rating_Info_SampleInfo.RemoveRange( db.Rating_Info_SampleInfo.Where(x => x.Report_Date == reportDateDt)); db.Rating_Info_SampleInfo.AddRange( sampleInfos.Select(x => new Rating_Info_SampleInfo() { Bond_Number = x.Bond_Number, GUARANTOR_EQY_TICKER = x.GUARANTOR_EQY_TICKER, GUARANTOR_NAME = x.GUARANTOR_NAME, ISSUER_TICKER = x.ISSUER_TICKER, Report_Date = reportDateDt })); try { db.SaveChanges(); db.Dispose(); log.saveTransferCheck( type, true, reportDateDt, 1, startTime, DateTime.Now); log.txtLog( type, true, startTime, logPath, MessageType.Success.GetDescription()); sampleData.AddRange(commpanyData); new CompleteEvent().saveDb(reportDateDt, verInt); } catch (DbUpdateException ex) { log.saveTransferCheck( type, false, reportDateDt, 1, startTime, DateTime.Now); log.txtLog( type, false, startTime, logPath, $"message: {ex.Message}" + $", inner message {ex.InnerException?.InnerException?.Message}"); } #endregion saveDb }
public UserAuthAttribute(string href) { _href = href; db = new IFRS9Entities(); }
/// <summary> /// create Put Sample File /// </summary> /// <param name="type"></param> /// <param name="dateTime"></param> /// <param name="ver"></param> public bool create(TableType type, string dateTime, int ver) { bool flag = false; try { List <string> data = new List <string>(); SetFile f = new SetFile(type, dateTime); //ex: sampleA53_20170803 string getFileName = f.getSampleFileName(); #region File data.Add("START-OF-FILE"); #region Title data.Add($"REPLYFILENAME={getFileName}"); data.Add("PROGRAMNAME=getdata"); data.Add("PROGRAMFLAG=" + f.getPROGRAMFLAG()); data.Add("FIRMNAME=" + f.getFIRMNAME()); //確認是否提出來? data.Add("SECMASTER=YES"); data.Add("OUTPUTFORMAT=bulklist"); data.Add("DELIMITER=,"); data.Add("FUNDAMENTALS=yes"); #endregion Title //空一行 data.Add(string.Empty); #region START-OF-FIELDS data.Add("START-OF-FIELDS"); object obj = null; bool findFlag = false; if (TableType.A53.ToString().Equals(type.ToString())) { obj = new A53Sample(); findFlag = true; } if (findFlag) { obj.GetType() .GetProperties() //.OrderBy(x => x.Name) .ToList() .ForEach(x => data.Add(x.Name)); } data.Add("END-OF-FIELDS"); #endregion START-OF-FIELDS //空一行 data.Add(string.Empty); #region START-OF-DATA data.Add("START-OF-DATA"); int year = Int32.Parse(dateTime.Substring(0, 4)); int month = Int32.Parse(dateTime.Substring(4, 2)); int day = Int32.Parse(dateTime.Substring(6, 2)); DateTime date = new DateTime(year, month, day); IFRS9Entities db = new IFRS9Entities(); db.Bond_Account_Info.AsNoTracking() .Where(x => x.Report_Date.HasValue && x.Report_Date.Value == date && x.Version.HasValue && x.Version == ver) .Select(x => x.Bond_Number).Distinct() .OrderBy(x => x) .ToList().ForEach(x => { if (!x.IsNullOrWhiteSpace()) { data.Add(string.Format("{0}|ISIN", x)); } }); db.Dispose(); data.Add("END-OF-DATA"); #endregion START-OF-DATA data.Add("END-OF-FILE"); #endregion File //ex: ../samplePut 資料夾 //f.putCommpanyFilePath(); //ex: sampleA53_20170803 //f.putSampleFileName(); //建立 scv 檔案 flag = new CreatePutFile().create( f.putSampleFilePath(), f.putSampleFileName(), data); } catch { flag = false; } return(flag); }
/// <summary> /// start Transfer /// </summary> /// <param name="year"></param> public void startTransfer(string year) { logPath = log.txtLocation(type); IFRS9Entities db = new IFRS9Entities(); DateTime dt = DateTime.Now; List <string> notParm = new List <string>() { "Year_Quartly", "Date" }; if (!year.IsNullOrWhiteSpace()) { var A84datas = db.Econ_Foreign.AsNoTracking() .Where(x => x.Year_Quartly.StartsWith(year)); if (A84datas.Any()) { List <Econ_F_YYYYMMDD> C04s = new List <Econ_F_YYYYMMDD>(); List <string> yearQuartlys = A84datas.Select(x => x.Year_Quartly).ToList(); var A82Datas = db.Moody_Quartly_PD_Info.AsNoTracking().Where(x => yearQuartlys.Contains(x.Year_Quartly)).ToList(); A84datas.ToList().ForEach(x => { Econ_F_YYYYMMDD C04Data = new Econ_F_YYYYMMDD(); C04Data = db.Econ_F_YYYYMMDD.FirstOrDefault(i => i.Year_Quartly == x.Year_Quartly); if (C04Data != null) { C04Data.Processing_Date = dt.ToString("yyyyMMdd"); var A82Data = A82Datas.FirstOrDefault(z => z.Year_Quartly == x.Year_Quartly); if (A82Data != null) { C04Data.PD_Quartly = A82Data.PD; } x.GetType().GetProperties().Where(z => !notParm.Contains(z.Name)).ToList().ForEach( y => { var p = C04Data.GetType().GetProperties().FirstOrDefault(i => i.Name == y.Name); if (p != null) { p.SetValue(C04Data, y.GetValue(x)); } }); } else { C04Data = new Econ_F_YYYYMMDD(); C04Data.Processing_Date = dt.ToString("yyyyMMdd"); C04Data.Year_Quartly = x.Year_Quartly; var A82Data = A82Datas.FirstOrDefault(z => z.Year_Quartly == x.Year_Quartly); if (A82Data != null) { C04Data.PD_Quartly = A82Data.PD; } x.GetType().GetProperties().Where(z => !notParm.Contains(z.Name)).ToList().ForEach( y => { var p = C04Data.GetType().GetProperties().FirstOrDefault(i => i.Name == y.Name); if (p != null) { p.SetValue(C04Data, y.GetValue(x)); } }); C04s.Add(C04Data); } }); db.Econ_F_YYYYMMDD.AddRange(C04s); try { db.SaveChanges(); db.Dispose(); log.txtLog( type, true, dt, logPath, MessageType.Success.GetDescription()); } catch (DbUpdateException ex) { log.txtLog( type, false, dt, logPath, $"message: {ex.Message}" + $", inner message {ex.InnerException?.InnerException?.Message}"); } } else { log.txtLog( type, false, dt, logPath, "找不到A84符合的資料(Econ_Foreign)"); } } }
/// <summary> /// Db save /// </summary> protected void DataToDb() { IFRS9Entities db = new IFRS9Entities(); List <Econ_Domestic> A07Datas = new List <Econ_Domestic>(); string date = startTime.ToString("yyyyMMdd"); #region A07 Data using (StreamReader sr = new StreamReader(Path.Combine( setFile.getA07FilePath(), setFile.getFileName()))) { bool flag = false; //判斷是否為要讀取的資料行數 string line = string.Empty; while ((line = sr.ReadLine()) != null) { if ("END-OF-DATA".Equals(line)) { flag = false; } if (flag) //找到的資料 { var arr = line.Split('|'); //arr[0] ex: TWSE Index //arr[1] ex: 03/31/2016 //arr[2] ex: 8744.83 if (arr.Length >= 3 && !arr[0].IsNullOrWhiteSpace() && !arr[0].StartsWith("START") && !arr[0].StartsWith("END")) { Econ_Domestic ef = new Econ_Domestic(); DateTime dt = DateTime.MinValue; double d = 0d; string index = arr[0].Trim(); if (arr[2] != null && double.TryParse(arr[2], out d) && DateTime.TryParseExact(arr[1], "MM/dd/yyyy", null, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt) && !index.IsNullOrWhiteSpace()) { var YQ = dt.Year.ToString() + dt.Month.IntToYearQuartly(); var A07 = db.Econ_Domestic.Where(x => x.Year_Quartly == YQ).FirstOrDefault(); var A07Data = A07Datas.FirstOrDefault(x => x.Year_Quartly == YQ); if (A07 != null) { var A07pro = A07.GetType().GetProperties() .Where(x => x.Name.Replace("_", " ") == index.Replace("_", " ")).FirstOrDefault(); if (A07pro != null) { A07pro.SetValue(A07, d); A07.Date = date; } } else if (A07Data != null) { var A07pro = A07Data.GetType().GetProperties() .Where(x => x.Name.Replace("_", " ") == index.Replace("_", " ")).FirstOrDefault(); if (A07pro != null) { A07pro.SetValue(A07Data, d); A07Data.Date = date; } } else { Econ_Domestic newData = new Econ_Domestic(); newData.Year_Quartly = YQ; var A07pro = newData.GetType().GetProperties() .Where(x => x.Name.Replace("_", " ") == index.Replace("_", " ")).FirstOrDefault(); if (A07pro != null) { A07pro.SetValue(newData, d); newData.Date = date; } A07Datas.Add(newData); } } } } if ("START-OF-DATA".Equals(line)) { flag = true; } } } #endregion A07 Data #region saveDb try { db.Econ_Domestic.AddRange(A07Datas); db.SaveChanges(); db.Dispose(); log.txtLog( type, true, startTime, logPath, MessageType.Success.GetDescription()); } catch (DbUpdateException ex) { log.txtLog( type, false, startTime, logPath, $"message: {ex.Message}" + $", inner message {ex.InnerException?.InnerException?.Message}"); } #endregion saveDb }
public C0Repository() { this.db = new IFRS9Entities(); }