Esempio n. 1
0
        void WriteBackFirstAssembleResult()
        {
            using (GeelyPtlEntities dbContext = new GeelyPtlEntities())
            {
                ASM_AssembleResultMessage asmAssembleResultMessage = dbContext.ASM_AssembleResultMessages
                                                                     .Where(prm => !prm.SentSuccessful)
                                                                     .OrderBy(prm => prm.LastSentTime)
                                                                     .FirstOrDefault();
                if (asmAssembleResultMessage != null)
                {
                    using (ToMesRemoteServiceService proxy = new ToMesRemoteServiceService())
                    {
                        proxy.Url = this.ptlToMesServiceUrl;

                        string sendXml      = string.Empty;
                        string receivedXml  = string.Empty;
                        string errorMessage = string.Empty;
                        bool   successful   = false;
                        try
                        {
                            sendXml     = ASM_AssembleResultConverter.ConvertRequest(asmAssembleResultMessage.ASM_AssembleResult);
                            receivedXml = proxy.assemblyMatResult(sendXml);
                            successful  = ASM_AssembleResultConverter.CheckResponse(receivedXml, out errorMessage);
                        }
                        catch (Exception ex)
                        {
                            receivedXml = ex.ToString();
                        }

                        asmAssembleResultMessage.SentXml        = sendXml;
                        asmAssembleResultMessage.LastSentTime   = DateTime.Now;
                        asmAssembleResultMessage.SentSuccessful = successful;
                        asmAssembleResultMessage.ReceivedXml    = receivedXml;
                    }
                }

                dbContext.SaveChanges();
            }
        }
Esempio n. 2
0
        void threadStart(object notUsed)
        {
            while (true)
            {
                //加载线程推动新明细,按钮交互推进明细的进度
                if (this.CurrentAsmTaskId != null && this.CurrentAsmTaskItemId == null)
                {
                    try
                    {
                        using (GeelyPtlEntities dbContext = new GeelyPtlEntities())
                        {
                            CFG_WorkStation cfgWorkStation = dbContext.CFG_WorkStations
                                                             .First(ws => ws.Id == this.CFG_WorkStationId);
                            ASM_Task asmTask = dbContext.ASM_Tasks
                                               .First(t => t.Id == this.CurrentAsmTaskId.Value);

                            //因为 IndicatingExecutorLoader 加载和 IndicatingExecutor 是不同线程,所以再次核对状态
                            if (asmTask.AssembleStatus == AssembleStatus.Finished)
                            {
                                this.CurrentAsmTaskId = null;

                                continue;
                            }

                            ASM_AssembleIndication asmAssembleIndication = asmTask.ASM_AssembleIndication;
                            ASM_TaskItem           asmTaskItem           = dbContext.ASM_TaskItems
                                                                           .OrderBy(ti => ti.Gzz)
                                                                           .ThenBy(ti => ti.AssembleSequence)
                                                                           .FirstOrDefault(ti => ti.ASM_TaskId == asmTask.Id &&
                                                                                           ti.AssembleStatus != AssembleStatus.Finished);
                            if (asmTaskItem == null)
                            {
                                asmTask.AssembleStatus = AssembleStatus.Finished;
                                asmAssembleIndication.AssembleStatus = asmTask.AssembleStatus;

                                #region 当前装配可以提交

                                List <ASM_AssembleIndicationItem> asmAssembleIndicatonItems = asmAssembleIndication.ASM_AssembleIndicationItems
                                                                                              .ToList();

                                ASM_AssembleResult asmAssembleResult = new ASM_AssembleResult();
                                asmAssembleResult.ASM_AssembleIndicationId = asmAssembleIndication.Id;
                                asmAssembleResult.FactoryCode        = asmAssembleIndication.FactoryCode;
                                asmAssembleResult.ProductionLineCode = asmAssembleIndication.ProductionLineCode;
                                asmAssembleResult.CFG_WorkStationId  = asmAssembleIndication.CFG_WorkStationId;
                                asmAssembleResult.GzzList            = asmAssembleIndication.GzzList;
                                asmAssembleResult.MONumber           = asmAssembleIndication.MONumber;
                                asmAssembleResult.ProductSequence    = asmAssembleIndication.ProductSequence;
                                asmAssembleResult.BeginTime          = asmTask.ASM_TaskItems.OrderBy(ati => ati.AssembledTime).First().AssembledTime.Value;
                                asmAssembleResult.EndTime            = asmTask.ASM_TaskItems.OrderBy(ati => ati.AssembledTime).Last().AssembledTime.Value;

                                dbContext.ASM_AssembleResults.Add(asmAssembleResult);

                                ASM_AssembleResultMessage asmAssembleResultMessage = new ASM_AssembleResultMessage();
                                asmAssembleResultMessage.ASM_AssembleResult = asmAssembleResult;
                                asmAssembleResultMessage.SentSuccessful     = false;

                                dbContext.ASM_AssembleResultMessages.Add(asmAssembleResultMessage);

                                foreach (ASM_AssembleIndicationItem asmAssembleIndicationItem in asmAssembleIndicatonItems)
                                {
                                    List <ASM_TaskItem> asmTaskItems = asmAssembleIndicationItem.ASM_TaskItems
                                                                       .ToList();
                                    ASM_TaskItem lastAsmTaskItem = asmTaskItems.Last();

                                    ASM_AssembleResultItem asmAssembleResultItem = new ASM_AssembleResultItem();
                                    asmAssembleResultItem.ASM_AssembleResult = asmAssembleResult;
                                    asmAssembleResultItem.CFG_CartId         = lastAsmTaskItem.CFG_CartId;
                                    asmAssembleResultItem.CartPosition       = lastAsmTaskItem.CartPosition;
                                    asmAssembleResultItem.Gzz                = asmAssembleIndicationItem.Gzz;
                                    asmAssembleResultItem.MaterialCode       = asmAssembleIndicationItem.MaterialCode;
                                    asmAssembleResultItem.MaterialName       = asmAssembleIndicationItem.MaterialName;
                                    asmAssembleResultItem.AssembleSequence   = asmAssembleIndicationItem.AssembleSequence;
                                    asmAssembleResultItem.ToAssembleQuantity = asmAssembleIndicationItem.ToAssembleQuantity;
                                    asmAssembleResultItem.AssembledQuantity  = asmTaskItems.Sum(ti => ti.AssembledQuantity.Value);
                                    asmAssembleResultItem.PickedTime         = lastAsmTaskItem.AssembledTime.Value;
                                    asmAssembleResultItem.ProjectCode        = asmAssembleIndicationItem.ProjectCode;
                                    asmAssembleResultItem.ProjectStep        = asmAssembleIndicationItem.ProjectStep;

                                    dbContext.ASM_AssembleResultItems.Add(asmAssembleResultItem);
                                }

                                #endregion

                                dbContext.SaveChanges();

                                this.CurrentAsmTaskId = null;

                                Logger.Log(this.GetType().Name + "." + cfgWorkStation.Code, DateTime.Now.ToString("HH:mm:ss") + " 装配任务完成:"
                                           + asmAssembleIndication.ProductSequence + ", "
                                           + asmAssembleIndication.GzzList + Environment.NewLine);
                            }
                            else
                            {
                                ASM_AssembleIndicationItem asmAssembleIndicationItem = asmTaskItem.ASM_AssembleIndicationItem;
                                CFG_Cart cfgCart = asmTaskItem.CFG_Cart;

                                //先更新数据库
                                asmTask.AssembleStatus                   = AssembleStatus.Assembling;
                                asmTaskItem.AssembleStatus               = AssembleStatus.Assembling;
                                asmAssembleIndication.AssembleStatus     = AssembleStatus.Assembling;
                                asmAssembleIndicationItem.AssembleStatus = AssembleStatus.Assembling;
                                cfgCart.CartStatus = CartStatus.Indicating;

                                dbContext.SaveChanges();

                                //再控制设备
                                CartPtl cartPtl          = CartPtlHost.Instance.GetCartPtl(asmTaskItem.CFG_CartId);
                                Ptl900U ptl900UPublisher = cartPtl.GetPtl900UPublisher();
                                Ptl900U ptl900U          = cartPtl.GetPtl900UByPosition(asmTaskItem.CartPosition);
                                Ptl900U ptl900ULight     = cartPtl.GetPtl900ULight();

                                Display900UItem publisherDisplay900UItem = new Display900UItem();
                                publisherDisplay900UItem.Name            = asmAssembleIndicationItem.MaterialName;
                                publisherDisplay900UItem.Description     = string.Format(CultureInfo.InvariantCulture, @"项目:{0},{1}
车号:{2}
量产工位:{3}", asmAssembleIndicationItem.ProjectCode, asmAssembleIndicationItem.ProjectStep, asmAssembleIndication.ProductSequence, asmAssembleIndicationItem.Gzz);
                                publisherDisplay900UItem.LongSubLocation = asmTaskItem.ToAssembleQuantity.ToString(CultureInfo.InvariantCulture);
                                publisherDisplay900UItem.Count           = 0;

                                Display900UItem display900UItem = new Display900UItem();
                                display900UItem.Count = (ushort)asmTaskItem.ToAssembleQuantity;

                                LightMode lightMode = new LightMode();
                                lightMode.Color = LightColor.Green;
                                if (asmAssembleIndicationItem.Qtxbs == "1")
                                {
                                    lightMode.Color  = LightColor.Magenta;
                                    lightMode.Ratio  = LightOnOffRatio.RatioP1V1;
                                    lightMode.Period = LightOnOffPeriod.Period500;
                                }

                                //ptl900UPublisher.Pressed += this.ptl900UPublisher_Pressed;
                                ptl900UPublisher.Clear(true);
                                //ptl900UPublisher.Unlock();
                                ptl900UPublisher.Lock();
                                ptl900UPublisher.Display(publisherDisplay900UItem, LightColor.Off, true);

                                ptl900U.Pressed += this.ptl900U_Pressed;
                                ptl900U.Unlock();
                                ptl900U.Display(display900UItem, lightMode, true);

                                ptl900ULight.Clear();
                                ptl900ULight.Display(new Display900UItem(), lightMode, false);

                                this.CurrentAsmTaskItemId = asmTaskItem.Id;

                                Logger.Log(this.GetType().Name + "." + cfgWorkStation.Code, DateTime.Now.ToString("HH:mm:ss") + " 点亮装配明细:"
                                           + asmAssembleIndication.ProductSequence + ", "
                                           + asmAssembleIndication.GzzList + ", "
                                           + asmAssembleIndicationItem.MaterialCode + ", "
                                           + asmAssembleIndicationItem.MaterialName + ", "
                                           + cfgCart.Name + ", "
                                           + asmTaskItem.CartPosition + Environment.NewLine);

                                //如果新底盘抵达,则自动完成之前的
                                this.AutoPressByNewCarArrivedAsync(this.CurrentAsmTaskId.Value, this.CurrentAsmTaskItemId.Value, ptl900U, display900UItem);
                                //如果长时间无法交互,则自动交互
                                this.AutoPressByDeviceErrorAsync(this.CurrentAsmTaskItemId.Value, ptl900U, display900UItem);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        string message = ex.Message;
                        DbEntityValidationException dbEntityValidationException = ex as DbEntityValidationException;
                        if (dbEntityValidationException != null)
                        {
                            foreach (DbEntityValidationResult validationResult in dbEntityValidationException.EntityValidationErrors)
                            {
                                foreach (DbValidationError validationError in validationResult.ValidationErrors)
                                {
                                    message += Environment.NewLine + validationError.ErrorMessage;
                                }
                            }
                        }
                        message += Environment.NewLine + ex.StackTrace;

                        Logger.Log("IndicatingExecutor.threadStart", DateTime.Now.ToString("HH:mm:ss") + Environment.NewLine
                                   + message + Environment.NewLine
                                   + Environment.NewLine);

                        Thread.Sleep(1000);
                    }
                }

                Thread.Sleep(1);
            }
        }
Esempio n. 3
0
        void threadStart(object unused)
        {
            while (!this.threadNeedQuit)
            {
                try
                {
                    if (this.holdingDays > 0 && this.holdingDays < TimeSpan.MaxValue.TotalDays)
                    {
                        DateTime minTime = DateTime.Today.Subtract(TimeSpan.FromDays(this.holdingDays));

                        using (GeelyPtlEntities dbContext = new GeelyPtlEntities())
                        {
                            //装配指引部分
                            List <ASM_AssembleIndication> asmAssembleIndications = dbContext.ASM_AssembleIndications
                                                                                   .Where(ai => ai.CarArrivedTime < minTime &&
                                                                                          ai.AssembleStatus == AssembleStatus.Finished &&
                                                                                          ai.ASM_AssembleResults.All(ar => ar.ASM_AssembleResultMessage.SentSuccessful))
                                                                                   .ToList();
                            foreach (ASM_AssembleIndication asmAssembleIndication in asmAssembleIndications)
                            {
                                ASM_AssembleIndicationMessage     asmAssembleIndicationMessage = asmAssembleIndication.ASM_AssembleIndicationMessage;
                                List <ASM_AssembleIndicationItem> asmAssembleIndicationItems   = asmAssembleIndication.ASM_AssembleIndicationItems.ToList();
                                List <ASM_Task>           asmTasks           = asmAssembleIndication.ASM_Tasks.ToList();
                                List <ASM_AssembleResult> asmAssembleResults = asmAssembleIndication.ASM_AssembleResults.ToList();

                                foreach (ASM_AssembleResult asmAssembleResult in asmAssembleResults)
                                {
                                    ASM_AssembleResultMessage     asmAssembleResultMessage = asmAssembleResult.ASM_AssembleResultMessage;
                                    List <ASM_AssembleResultItem> asmAssembleResultItems   = asmAssembleResult.ASM_AssembleResultItems.ToList();

                                    dbContext.ASM_AssembleResultItems.RemoveRange(asmAssembleResultItems);
                                    dbContext.ASM_AssembleResultMessages.Remove(asmAssembleResultMessage);
                                    dbContext.ASM_AssembleResults.Remove(asmAssembleResult);
                                }

                                foreach (ASM_Task asmTask in asmTasks)
                                {
                                    List <ASM_TaskItem> asmTaskItems = asmTask.ASM_TaskItems.ToList();

                                    dbContext.ASM_TaskItems.RemoveRange(asmTaskItems);
                                    dbContext.ASM_Tasks.Remove(asmTask);
                                }

                                dbContext.ASM_AssembleIndicationItems.RemoveRange(asmAssembleIndicationItems);
                                dbContext.ASM_AssembleIndicationMessages.Remove(asmAssembleIndicationMessage);
                                dbContext.ASM_AssembleIndications.Remove(asmAssembleIndication);
                            }

                            //分拣部分
                            List <AST_PalletArrived> astPalletArriveds = dbContext.AST_PalletArriveds
                                                                         .Where(pa => pa.ArrivedTime < minTime)
                                                                         .ToList();
                            foreach (AST_PalletArrived astPalletArrived in astPalletArriveds)
                            {
                                AST_PalletArrivedMessage astPalletArrivedMessage = astPalletArrived.AST_PalletArrivedMessage;

                                dbContext.AST_PalletArrivedMessages.Remove(astPalletArrivedMessage);
                                dbContext.AST_PalletArriveds.Remove(astPalletArrived);
                            }

                            List <AST_PalletTask> astPalletTasks = dbContext.AST_PalletTasks
                                                                   .Where(pt => pt.CreateTime < minTime &&
                                                                          pt.PickStatus == PickStatus.Finished)
                                                                   .ToList();
                            foreach (AST_PalletTask astPalletTask in astPalletTasks)
                            {
                                List <AST_PalletTaskItem> astPalletTaskItems = astPalletTask.AST_PalletTaskItems.ToList();
                                foreach (AST_PalletTaskItem astPalletTaskItem in astPalletTaskItems)
                                {
                                    List <AST_LesTaskItem>  astLesTaskItems  = astPalletTaskItem.AST_LesTaskItems.ToList();
                                    List <AST_CartTaskItem> astCartTaskItems = astPalletTaskItem.AST_CartTaskItems.ToList();

                                    List <AST_LesTask>        astLesTasks        = new List <AST_LesTask>();
                                    List <AST_LesTaskMessage> astLesTaskMessages = new List <AST_LesTaskMessage>();
                                    foreach (AST_LesTaskItem astLesTaskItem in astLesTaskItems)
                                    {
                                        AST_LesTask        astLesTask        = astLesTaskItem.AST_LesTask;
                                        AST_LesTaskMessage astLesTaskMessage = astLesTask.AST_LesTaskMessage;

                                        if (astLesTask != null && !astLesTasks.Contains(astLesTask))
                                        {
                                            astLesTasks.Add(astLesTask);
                                        }
                                        if (astLesTaskMessage != null && !astLesTaskMessages.Contains(astLesTaskMessage))
                                        {
                                            astLesTaskMessages.Add(astLesTaskMessage);
                                        }

                                        dbContext.AST_LesTaskItems.Remove(astLesTaskItem);
                                    }
                                    dbContext.AST_LesTaskMessages.RemoveRange(astLesTaskMessages);
                                    dbContext.AST_LesTasks.RemoveRange(astLesTasks);

                                    List <AST_CartTask> astCartTasks = new List <AST_CartTask>();
                                    foreach (AST_CartTaskItem astCartTaskItem in astCartTaskItems)
                                    {
                                        AST_CartTask astCartTask = astCartTaskItem.AST_CartTask;

                                        if (astCartTask != null && !astCartTasks.Contains(astCartTask))
                                        {
                                            astCartTasks.Add(astCartTask);
                                        }

                                        dbContext.AST_CartTaskItems.Remove(astCartTaskItem);
                                    }
                                    dbContext.AST_CartTasks.RemoveRange(astCartTasks);

                                    dbContext.AST_PalletTaskItems.Remove(astPalletTaskItem);
                                }

                                dbContext.AST_PalletTasks.Remove(astPalletTask);
                            }

                            List <AST_PalletResult> astPalletResults = dbContext.AST_PalletResults
                                                                       .Where(pr => pr.EndPickTime < minTime &&
                                                                              pr.AST_PalletResultMessage.SentSuccessful)
                                                                       .ToList();
                            foreach (AST_PalletResult astPalletResult in astPalletResults)
                            {
                                AST_PalletResultMessage     astPalletResultMessage = astPalletResult.AST_PalletResultMessage;
                                List <AST_PalletResultItem> astPalletResultItems   = astPalletResult.AST_PalletResultItems.ToList();

                                dbContext.AST_PalletResultItems.RemoveRange(astPalletResultItems);
                                dbContext.AST_PalletResultMessages.Remove(astPalletResultMessage);
                                dbContext.AST_PalletResults.Remove(astPalletResult);
                            }

                            List <AST_CartResult> astCartResults = dbContext.AST_CartResults
                                                                   .Where(cr => cr.EndPickTime < minTime &&
                                                                          cr.AST_CartResultMessage.SentSuccessful)
                                                                   .ToList();
                            foreach (AST_CartResult astCartResult in astCartResults)
                            {
                                AST_CartResultMessage     astCartResultMessage = astCartResult.AST_CartResultMessage;
                                List <AST_CartResultItem> astCartResultItems   = astCartResult.AST_CartResultItems.ToList();

                                dbContext.AST_CartResultItems.RemoveRange(astCartResultItems);
                                dbContext.AST_CartResultMessages.Remove(astCartResultMessage);
                                dbContext.AST_CartResults.Remove(astCartResult);
                            }

                            //手持机分拣部分
                            List <AST_PalletArrived_PDA> astPalletArrived_PDAs = dbContext.AST_PalletArrived_PDAs
                                                                                 .Where(pa => pa.ArrivedTime < minTime)
                                                                                 .ToList();
                            foreach (AST_PalletArrived_PDA astPalletArrived_PDA in astPalletArrived_PDAs)
                            {
                                AST_PalletArrivedMessage_PDA astPalletArrivedMessage_PDA = astPalletArrived_PDA.AST_PalletArrivedMessage_PDA;

                                dbContext.AST_PalletArrivedMessage_PDAs.Remove(astPalletArrivedMessage_PDA);
                                dbContext.AST_PalletArrived_PDAs.Remove(astPalletArrived_PDA);
                            }

                            List <AST_PalletTask_PDA> astPalletTask_PDAs = dbContext.AST_PalletTask_PDAs
                                                                           .Where(pt => pt.CreateTime < minTime &&
                                                                                  pt.PickStatus == PickStatus.Finished)
                                                                           .ToList();
                            foreach (AST_PalletTask_PDA astPalletTask_PDA in astPalletTask_PDAs)
                            {
                                List <AST_PalletTaskItem_PDA> astPalletTaskItem_PDAs = astPalletTask_PDA.AST_PalletTaskItem_PDAs.ToList();
                                foreach (AST_PalletTaskItem_PDA astPalletTaskItem_PDA in astPalletTaskItem_PDAs)
                                {
                                    List <AST_LesTaskItem_PDA> astLesTaskItem_PDAs = astPalletTaskItem_PDA.AST_LesTaskItem_PDAs.ToList();

                                    List <AST_LesTask_PDA>        astLesTask_PDAs        = new List <AST_LesTask_PDA>();
                                    List <AST_LesTaskMessage_PDA> astLesTaskMessage_PDAs = new List <AST_LesTaskMessage_PDA>();
                                    foreach (AST_LesTaskItem_PDA astLesTaskItem_PDA in astLesTaskItem_PDAs)
                                    {
                                        // AST_LesTaskItem_PDA -> AST_LesTask_PDA FK ERROR
                                        AST_LesTask_PDA        astLesTask_PDA        = astLesTaskItem_PDA.AST_LesTask_PDA;
                                        AST_LesTaskMessage_PDA astLesTaskMessage_PDA = null;
                                        if (astLesTask_PDA != null)
                                        {
                                            astLesTaskMessage_PDA = astLesTask_PDA.AST_LesTaskMessage_PDA;
                                        }

                                        if (astLesTask_PDA != null && !astLesTask_PDAs.Contains(astLesTask_PDA))
                                        {
                                            astLesTask_PDAs.Add(astLesTask_PDA);
                                        }
                                        if (astLesTaskMessage_PDA != null && !astLesTaskMessage_PDAs.Contains(astLesTaskMessage_PDA))
                                        {
                                            astLesTaskMessage_PDAs.Add(astLesTaskMessage_PDA);
                                        }

                                        dbContext.AST_LesTaskItem_PDAs.Remove(astLesTaskItem_PDA);
                                    }
                                    dbContext.AST_LesTaskMessage_PDAs.RemoveRange(astLesTaskMessage_PDAs);
                                    dbContext.AST_LesTask_PDAs.RemoveRange(astLesTask_PDAs);

                                    dbContext.AST_PalletTaskItem_PDAs.Remove(astPalletTaskItem_PDA);
                                }

                                dbContext.AST_PalletTask_PDAs.Remove(astPalletTask_PDA);
                            }

                            List <AST_PalletPickResult_PDA> astPalletPickResults = dbContext.AST_PalletPickResult_PDAs
                                                                                   .Where(pa => pa.ReceivedTime < minTime)
                                                                                   .ToList();
                            foreach (AST_PalletPickResult_PDA astPalletPickResult in astPalletPickResults)
                            {
                                dbContext.AST_PalletPickResult_PDAs.Remove(astPalletPickResult);
                            }

                            List <AST_PalletPickResultMessage_PDA> astPalletPickResultMessages = dbContext.AST_PalletPickResultMessage_PDAs
                                                                                                 .Where(t => t.ReceivedTime < minTime).ToList();
                            foreach (AST_PalletPickResultMessage_PDA astPalletPickResultMessage in astPalletPickResultMessages)
                            {
                                dbContext.AST_PalletPickResultMessage_PDAs.Remove(astPalletPickResultMessage);
                            }

                            //AGV搬运部分
                            List <DST_DistributeTask> dstDistributeTasks = dbContext.DST_DistributeTasks.Where(t => t.reqTime < minTime).ToList();
                            foreach (DST_DistributeTask dstDistributeTask in dstDistributeTasks)
                            {
                                dbContext.DST_DistributeTasks.Remove(dstDistributeTask);
                            }

                            List <DST_DistributeTaskResult> dstDistributeTaskResults = dbContext.DST_DistributeTaskResults.Where(t => t.receiveTime < minTime).ToList();
                            foreach (DST_DistributeTaskResult dstDistributeTaskResult in dstDistributeTaskResults)
                            {
                                dbContext.DST_DistributeTaskResults.Remove(dstDistributeTaskResult);
                            }

                            List <DST_DistributeArriveTask> dstDistributeArriveTasks = dbContext.DST_DistributeArriveTasks.Where(t => t.receiveTime < minTime).ToList();
                            foreach (DST_DistributeArriveTask dstDistributeArriveTask in dstDistributeArriveTasks)
                            {
                                dbContext.DST_DistributeArriveTasks.Remove(dstDistributeArriveTask);
                            }

                            List <DST_DistributeArriveTaskResult> dstDistributeArriveTaskResults = dbContext.DST_DistributeArriveTaskResults.Where(t => t.sendTime < minTime).ToList();
                            foreach (DST_DistributeArriveTaskResult dstDistributeArriveTaskResult in dstDistributeArriveTaskResults)
                            {
                                dbContext.DST_DistributeArriveTaskResults.Remove(dstDistributeArriveTaskResult);
                            }

                            List <DST_DistributeArriveResult> dstDistributeArriveResults = dbContext.DST_DistributeArriveResults.Where(t => t.arriveTime < minTime).ToList();
                            foreach (DST_DistributeArriveResult dstDistributeArriveResult in dstDistributeArriveResults)
                            {
                                dbContext.DST_DistributeArriveResults.Remove(dstDistributeArriveResult);
                            }

                            dbContext.SaveChanges();
                        }
                    }
                }
                catch (Exception ex)
                {
                    string message = ex.Message;
                    DbEntityValidationException dbEntityValidationException = ex as DbEntityValidationException;
                    if (dbEntityValidationException != null)
                    {
                        foreach (DbEntityValidationResult validationResult in dbEntityValidationException.EntityValidationErrors)
                        {
                            foreach (DbValidationError validationError in validationResult.ValidationErrors)
                            {
                                message += Environment.NewLine + validationError.ErrorMessage;
                            }
                        }
                    }
                    message += Environment.NewLine + ex.StackTrace;

                    Logger.Log(this.GetType().Name, DateTime.Now.ToString("HH:mm:ss") + Environment.NewLine
                               + message + Environment.NewLine
                               + Environment.NewLine);
                }
                finally
                {
                    Thread.Sleep(this.threadPeriod);
                }
            }
        }