/// <summary> /// 转换配送结果到报文。 /// </summary> /// <param name="fndDeliveryResultInDbContext">处于数据库上下文中的实体。</param> /// <returns>报文。</returns> public static string ConvertRequest(FND_DeliveryResult fndDeliveryResultInDbContext) { XDocument xDocument = new XDocument(); XElement serviceElement = new XElement("Service"); XElement dataElement = new XElement("Data"); XElement requestElement = new XElement("Request"); XElement responseElement = new XElement("Response"); xDocument.Add(serviceElement); serviceElement.Add(dataElement); dataElement.Add(requestElement); dataElement.Add(responseElement); XElement resultElement = new XElement("ASSEMBLE"); resultElement.SetAttributeValue("p_type", "G"); resultElement.SetAttributeValue("loop_num", "1"); resultElement.Add(new XElement("ID", fndDeliveryResultInDbContext.Id)); resultElement.Add(new XElement("ProjectCode", fndDeliveryResultInDbContext.ProjectCode)); resultElement.Add(new XElement("StageCode", fndDeliveryResultInDbContext.ProjectStep)); resultElement.Add(new XElement("STATIONCODE", fndDeliveryResultInDbContext.CFG_WorkStation.Code)); resultElement.Add(new XElement("MaxNeedArrivedTime", fndDeliveryResultInDbContext.MaxNeedArrivedTime.ToString("yyyy-MM-dd HH:mm:ss"))); resultElement.Add(new XElement("BatchCode", fndDeliveryResultInDbContext.BatchCode)); resultElement.Add(new XElement("CartCode", fndDeliveryResultInDbContext.CFG_Cart.Code)); resultElement.Add(new XElement("DepartedTime", fndDeliveryResultInDbContext.DepartedTime.ToString("yyyy-MM-dd HH:mm:ss"))); resultElement.Add(new XElement("EmployeeCode", fndDeliveryResultInDbContext.CFG_Employee == null ? string.Empty : fndDeliveryResultInDbContext.CFG_Employee.Code)); resultElement.Add(new XElement("EmployeeName", fndDeliveryResultInDbContext.CFG_Employee == null ? string.Empty : fndDeliveryResultInDbContext.CFG_Employee.Name)); resultElement.Add(new XElement("TOTALNUM", fndDeliveryResultInDbContext.FND_DeliveryResultItems.Count)); requestElement.Add(resultElement); int loopNumber = 1; foreach (FND_DeliveryResultItem fndDeliveryResultItem in fndDeliveryResultInDbContext.FND_DeliveryResultItems) { XElement resultItemElement = new XElement("ASSEMBLEITEM"); resultItemElement.SetAttributeValue("p_type", "G"); resultItemElement.SetAttributeValue("loop_num", loopNumber++); resultItemElement.Add(new XElement("CartPosition", fndDeliveryResultItem.CartPosition)); resultItemElement.Add(new XElement("MaterialCode", fndDeliveryResultItem.MaterialCode)); resultItemElement.Add(new XElement("MaterialName", fndDeliveryResultItem.MaterialName)); resultItemElement.Add(new XElement("MaterialBarcode", fndDeliveryResultItem.MaterialBarcode)); resultItemElement.Add(new XElement("Quantity", fndDeliveryResultItem.Quantity)); requestElement.Add(resultItemElement); } return(Converter.ToXml(xDocument)); }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { using (GeelyPtlEntities dbContext = new GeelyPtlEntities()) { FND_DeliveryResult fndDeliveryResult = dbContext.FND_DeliveryResults .First(dr => dr.FND_TaskId == this.fndTaskId); List <FND_DeliveryResultItem> fndDeliveryResultItems = fndDeliveryResult.FND_DeliveryResultItems .OrderBy(dri => dri.CartPosition) .ToList(); this.Title = this.Title + ":" + fndDeliveryResult.CFG_Cart.Name; this.dataGrid.ItemsSource = fndDeliveryResultItems; } } catch (Exception ex) { MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error); this.Close(); } }
/// <summary> /// 显式或定时刷新。 /// </summary> public void Refresh() { lock (this.refreshSyncRoot) { using (GeelyPtlEntities dbContext = new GeelyPtlEntities()) { List <FND_Task> needToDoFndTasks = dbContext.FND_Tasks .Where(t => t.FindingStatus == FindingStatus.NeedDisplay || t.FindingStatus == FindingStatus.NeedBlink || t.FindingStatus == FindingStatus.NeedClear) .ToList(); //获取是否开启AGV配送PTL料架 DST_AgvSwitch dstAgvSwitch = dbContext.DST_AgvSwitchs.FirstOrDefault(t => t.isOpen); foreach (FND_Task fndTask in needToDoFndTasks) { CFG_WorkStation cfgWorkStation = fndTask.CFG_WorkStation; CFG_Cart cfgCart = fndTask.CFG_Cart; string gzzList = this.GetGzzListFromCfgCartMaterial(cfgCart); CartPtl cartPtl = CartPtlHost.Instance.GetCartPtl(fndTask.CFG_CartId); Ptl900U ptl900UPublisher = cartPtl.GetPtl900UPublisher(); Ptl900U ptl900ULight = cartPtl.GetPtl900ULight(); Display900UItem publisherDisplay900UItem = new Display900UItem(); publisherDisplay900UItem.Name = string.Format(CultureInfo.InvariantCulture, "{0}:{1}", cfgWorkStation.Name, gzzList); publisherDisplay900UItem.Description = string.Format(CultureInfo.InvariantCulture, @"项目:{0},{1} 批次:{2} 最迟抵达:{3:HH:mm:ss}", fndTask.ProjectCode, fndTask.ProjectStep, fndTask.BatchCode, fndTask.MaxNeedArrivedTime); publisherDisplay900UItem.Count = (ushort)cfgCart.CFG_CartCurrentMaterials .Where(ccm => ccm.Quantity != null) .Select(ccm => ccm.Quantity.Value) .Sum(); publisherDisplay900UItem.Unit = "个"; Display900UItem lightDisplay900UItem = new Display900UItem(); LightColor lightColor = (LightColor)fndTask.LightColor; LightMode lightMode = new LightMode(); lightMode.Color = lightColor; lightMode.Period = LightOnOffPeriod.Period200; lightMode.Ratio = LightOnOffRatio.RatioP1V1; if (fndTask.FindingStatus == FindingStatus.NeedDisplay) { //先保证数据库更新成功 fndTask.DisplayTime = DateTime.Now; fndTask.FindingStatus = FindingStatus.Displaying; cfgCart.CartStatus = CartStatus.WaitingToWorkStation; dbContext.SaveChanges(); //再控制设备 ptl900UPublisher.Clear(true); ptl900UPublisher.Lock(); ptl900UPublisher.Display(publisherDisplay900UItem, LightColor.Off); ptl900ULight.Clear(); ptl900ULight.Display(lightDisplay900UItem, lightColor); } else if (fndTask.FindingStatus == FindingStatus.NeedBlink) { if (fndTask.DisplayTime == null) { fndTask.CFG_EmployeeId = 1; fndTask.DisplayTime = DateTime.Now; } fndTask.DepartedTime = DateTime.Now; fndTask.FindingStatus = FindingStatus.Blinking; if (dstAgvSwitch == null) { cfgCart.CartStatus = CartStatus.InCarriageToWorkStation; } //当前请求可以分小车提交 FND_DeliveryResult fndDeliveryResult = new FND_DeliveryResult(); fndDeliveryResult.FND_TaskId = fndTask.Id; fndDeliveryResult.ProjectCode = fndTask.ProjectCode; fndDeliveryResult.ProjectStep = fndTask.ProjectStep; fndDeliveryResult.CFG_WorkStationId = fndTask.CFG_WorkStationId; fndDeliveryResult.BatchCode = fndTask.BatchCode; fndDeliveryResult.MaxNeedArrivedTime = fndTask.MaxNeedArrivedTime; fndDeliveryResult.CFG_CartId = fndTask.CFG_CartId; fndDeliveryResult.DepartedTime = DateTime.Now; fndDeliveryResult.CFG_EmployeeId = fndTask.CFG_EmployeeId.Value; dbContext.FND_DeliveryResults.Add(fndDeliveryResult); FND_DeliveryResultMessage fndDeliveryResultMessage = new FND_DeliveryResultMessage(); fndDeliveryResultMessage.FND_DeliveryResult = fndDeliveryResult; fndDeliveryResultMessage.SentSuccessful = false; dbContext.FND_DeliveryResultMessages.Add(fndDeliveryResultMessage); List <CFG_CartCurrentMaterial> cfgCartCurrentMaterials = fndTask.CFG_Cart.CFG_CartCurrentMaterials .Where(ccm => ccm.Quantity > 0) .ToList(); foreach (CFG_CartCurrentMaterial cfgCartCurrentMaterial in cfgCartCurrentMaterials) { FND_DeliveryResultItem fndDeliveryResultItem = new FND_DeliveryResultItem(); fndDeliveryResultItem.FND_DeliveryResult = fndDeliveryResult; fndDeliveryResultItem.CartPosition = cfgCartCurrentMaterial.Position; fndDeliveryResultItem.MaterialCode = cfgCartCurrentMaterial.MaterialCode; fndDeliveryResultItem.MaterialName = cfgCartCurrentMaterial.MaterialName; fndDeliveryResultItem.MaterialBarcode = cfgCartCurrentMaterial.MaterialBarcode; fndDeliveryResultItem.Quantity = cfgCartCurrentMaterial.Quantity.Value; dbContext.FND_DeliveryResultItems.Add(fndDeliveryResultItem); } dbContext.SaveChanges(); ptl900ULight.Clear(); ptl900ULight.Display(lightDisplay900UItem, lightMode, false); } else if (fndTask.FindingStatus == FindingStatus.NeedClear) { fndTask.FindingStatus = FindingStatus.Finished; dbContext.SaveChanges(); ptl900ULight.Clear(); } } //运输一段时间后自动进入 NeedClear 状态 DateTime maxBlinkingTime = DateTime.Now.Subtract(this.autoClearPeriod); List <FND_Task> autoClearFndTasks = dbContext.FND_Tasks .Where(t => t.FindingStatus == FindingStatus.Blinking && t.DisplayTime < maxBlinkingTime) .ToList(); foreach (FND_Task fndTask in autoClearFndTasks) { fndTask.FindingStatus = FindingStatus.NeedClear; dbContext.SaveChanges(); } if (dstAgvSwitch == null) { //运输一段时间后自动抵达生产线 DateTime maxCarriageTime = DateTime.Now.Subtract(this.autoReachedPeriod); List <FND_Task> autoReachedFndTasks = dbContext.FND_Tasks .Where(t => t.CFG_Cart.CartStatus == CartStatus.InCarriageToWorkStation && t.FindingStatus == FindingStatus.Finished && t.DepartedTime < maxCarriageTime) .ToList(); foreach (FND_Task fndTask in autoReachedFndTasks) { CFG_WorkStationCurrentCart cfgWorkStationCurrentCart = dbContext.CFG_WorkStationCurrentCarts .Where(wscc => wscc.CFG_WorkStationId == fndTask.CFG_WorkStationId && wscc.CFG_CartId == null) .OrderBy(wscc => wscc.Position) .FirstOrDefault(); if (cfgWorkStationCurrentCart != null) { CFG_Cart cfgCart = fndTask.CFG_Cart; cfgWorkStationCurrentCart.CFG_CartId = cfgCart.Id; cfgWorkStationCurrentCart.DockedTime = DateTime.Now; cfgCart.CartStatus = CartStatus.ArrivedAtWorkStation; } dbContext.SaveChanges(); } } } } }