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(); } }
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); } }
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); } } }