예제 #1
0
        /// <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));
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        /// <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();
                        }
                    }
                }
            }
        }