/// <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();
     }
 }
Beispiel #2
0
        /// <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();
            }
        }
Beispiel #3
0
 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();
            }
        }
Beispiel #5
0
        /// <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);
                }
            }
        }
Beispiel #6
0
 /// <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));
     }
 }