/// <summary> /// ایجاد دیکشنری از ترددها با کلید تاریخ وظیفه این متد است /// </summary> private void LoadDailyProceedTrafficDictionary() { try { IList <CurrentProceedTraffic> DailyProceedTraffics = PersonalMonthlyReport.GetPrsMonthlyRptRepository(false).LoadDailyProceedTrafficList(this.PersonId, this.MinDate, this.MaxDate); foreach (CurrentProceedTraffic ProceedTraffic in DailyProceedTraffics) { IList <CurrentProceedTraffic> DailyProceedTraffic = null; this.DailyProceedTrafficDictionary.TryGetValue(ProceedTraffic.FromDate.Date, out DailyProceedTraffic); if (DailyProceedTraffic == null) { DailyProceedTraffic = new List <CurrentProceedTraffic>(); DailyProceedTraffic.Add(ProceedTraffic); this.DailyProceedTrafficDictionary.Add(ProceedTraffic.FromDate.Date, DailyProceedTraffic); } else { DailyProceedTraffic.Add(ProceedTraffic); } } } catch (Exception ex) { GTSEngineLogger GTSlogger = new GTSEngineLogger(); GTSlogger.Logger.Error(String.Format("خطا در هنگام واکشی ترددهای پرسنل:{0}، متن خطا: {1}", this.PersonId, Utility.GetExecptionMessage(ex))); GTSlogger.Flush(); } }
/// <summary> /// تاریخ آخرین زمان محاسبات پرسنلی که محاسبه برای وی انجام شده است را بروزرسانی می نماید /// </summary> /// <param name="InvalidCalcResult"></param> private void UpdateExecutablePersonCalculation(decimal ExecutablePrsCalcId, decimal PersonId, DateTime ToDate) { ExecutablePersonCalculation ExecPrsCalc = ExecutablePersonCalculation.GetExecutablePersonCalcRepositoy(false).GetById(ExecutablePrsCalcId, false); if (ExecPrsCalc != null) { ExecPrsCalc.FromDate = ToDate; ExecPrsCalc.CalculationIsValid = true; ExecPrsCalc.MidNightCalculate = true; ExecutablePersonCalculation.GetExecutablePersonCalcRepositoy(false).WithoutTransactUpdate(ExecPrsCalc); } else { gtsRuleLogger.Error(PersonId.ToString(), "This is a test log", new Exception()); gtsRuleLogger.Flush(); } }
public static void GetLog(GTSEngineLogger gtsRuleLogger, string personCode, Exception ex) { if (ex is BaseException) { if (!((BaseException)ex).InsertedLog) { ((BaseException)ex).InsertedLog = true; gtsRuleLogger.Error(personCode, ex.Message, ex); gtsRuleLogger.Flush(); } } else { gtsRuleLogger.Error(personCode, ex.Message, ex); gtsRuleLogger.Flush(); } }
/// <summary> /// وظیفه ایجاد دیکشنری از نتایج محاسبات(مقادیر مفاهیم) با کلید "نام ستون" و اضافه کردن این دیکشنری /// به دیکشنری با کلید تاریخ به عهده ی این متد است /// </summary> protected virtual void LoadDailyScndCnpValueDictionary() { try { //واکشی نتایج محاسبات از پایگاه داده IList <ScndCnpValue> DailyScndCnpValues = PersonalMonthlyReport.GetPrsMonthlyRptRepository(false).LoadDailyScndCnpList(this.PersonId, this.Date.Date, this.Order); //گروه بندی داده ها بر اساس تاریخ var GroupedDailyScndCnpValue = DailyScndCnpValues.GroupBy(x => x.FromDate.Date); //به ازای تمامی تاریخ های موجود، یک دیکشنری با کلید آن تاریخ ساخته می شود foreach (DateTime dt in GroupedDailyScndCnpValue.Select(x => x.Key)) { IDictionary <string, ScndCnpValue> DailyScndCnpValueDic = null; this.DailyScndCnpValueDictionary.TryGetValue(dt.Date, out DailyScndCnpValueDic); //اگر دیکشنری ما به ازای تاریخ وجود ندارد باید ایجاد شود if (DailyScndCnpValueDic == null) { //تمامی مفاهیم محاسبه شده در آن تاریخ در دیکشنری با کلید "نام ستون" قرار می گیرند DailyScndCnpValueDic = new Dictionary <string, ScndCnpValue>(); foreach (ScndCnpValue ScndCnpValue in GroupedDailyScndCnpValue.Where(x => x.Key == dt.Date).FirstOrDefault().ToList <ScndCnpValue>()) { ScndCnpValue SCValue = null; DailyScndCnpValueDic.TryGetValue(ScndCnpValue.KeyColumnName, out SCValue); //اگر در دیکشنری در تاریخ مورد بررسی قبلا مفهومی با همین نام ستون وجود دارد //به معنی آن است که یک مفهوم ماهانه از چندین مفهوم روزانه ساخته شده //و مقادیر مفاهیم روزانه با یک کلید در واکشی داده ها بازیابی شده اند //بنابراین باید نتایج مفاهیم روزانه را برای تاریخ مورد بررسی با هم جمع زده در آن روز نمایش دهیم if (SCValue == null) { DailyScndCnpValueDic.Add(ScndCnpValue.KeyColumnName, ScndCnpValue); } else { SCValue.Value += ScndCnpValue.Value; } } //دیکشنری ساخته شده از مفاهیم هر روز به دیکشنری اصلی با کلید تاریخ اضافه می شود this.DailyScndCnpValueDictionary.Add(dt.Date, DailyScndCnpValueDic); } } foreach (var PeriodicScndCnpValue in DailyScndCnpValues.GroupBy(x => x.KeyColumnName)) { this.PeriodicScndCnpValueDictionary.Add(PeriodicScndCnpValue.First().KeyColumnName, PeriodicScndCnpValue.First()); } } catch (Exception ex) { GTSEngineLogger GTSlogger = new GTSEngineLogger(); GTSlogger.Logger.Error(String.Format("خطا در هنگام واکشی مقادیر محاسباتی پرسنل:{0}، متن خطا: {1}", this.PersonId, Utility.GetExecptionMessage(ex))); GTSlogger.Flush(); } }
/// <summary> /// اجرای محاسبات برای یک نفر /// </summary> /// <param name="barcode">بارکد</param> /// <param name="toDate">انتهای بازه ی محاسبات</param> public void Execute(string CallerIdentity, string barcode, DateTime toDate) { ExecutablePersonCalculation MustExecuted = ExecutablePersonCalculation.GetExecutablePersonCalcRepositoy(false).GetByBarcode(barcode, toDate); ThreadHelper.CleanupThreads(); logger.Logger.Info( string.Format("Execute for person '{0}' start at '{1}', Total Thread Count: '{2}', Runing Thread Count: '{3}'", barcode , DateTime.Now.ToShortDateString() , ThreadHelper.TotalThreadCount , ThreadHelper.TotalExecutingThreadCount)); logger.Flush(); if (MustExecuted != null /*&& !MustExecuted.CalculationIsValid*/) { MustExecuted.ToDate = toDate; ExecutableThread.ThreadParam param = ThreadHelper.ForceToExecute(CallerIdentity, MustExecuted, this.FinishedCallback); if (param != null) { this.Execute(param); } } }
/// <summary> /// اجرای قوانین برای پرسنل مشخص شده /// </summary> public void GTS_ExecuteByPersonID(string CallerIdentity, decimal PersonId) { try { Executer engine = new Executer(); engine.Execute(CallerIdentity, PersonId, DateTime.Now.Date); } catch (BaseException ex) { logger.Logger.Error(String.Format("Error On TotalWebservice PersonID:{0},Message:{1}", PersonId, ex.GetLogMessage())); logger.Flush(); throw new GTSWebserviceException(ex.GetLogMessage(), String.Format("TotalWebService.GTS_ExecuteByPersonID({0})", PersonId)); } }