Exemplo n.º 1
0
        /// <summary>
        /// 查询当前任务。
        /// </summary>
        /// <param name="cfgChannelId">巷道的主键。</param>
        public AndroidPdaTaskInfo QueryCurrentTaskInfo(int cfgChannelId)
        {
            AssortingExecutor assortingExecutor = AssortingExecutorLoader.Instance.GetByChannelId(cfgChannelId);

            AndroidPdaTaskInfo result = new AndroidPdaTaskInfo();

            result.CFG_ChannelId = cfgChannelId;

            using (GeelyPtlEntities dbContext = new GeelyPtlEntities())
            {
                if (assortingExecutor.CurrentCfgCartId != null)
                {
                    CFG_Cart cfgCart = dbContext.CFG_Carts
                                       .First(c => c.Id == assortingExecutor.CurrentCfgCartId.Value);
                    result.CFG_CartId = cfgCart.Id;
                    result.CartName   = cfgCart.Name;
                    result.CartOnLine = cfgCart.OnLine;
                }

                if (assortingExecutor.CurrentAstCartTaskItemId == null)
                {
                    if (assortingExecutor.CurrentAstPalletTaskItemId != null)
                    {
                        AST_PalletTaskItem currentAstPalletTaskItem = dbContext.AST_PalletTaskItems
                                                                      .First(pti => pti.Id == assortingExecutor.CurrentAstPalletTaskItemId.Value);
                        List <CFG_CartCurrentMaterial> cfgCartCurrentMaterials = dbContext.CFG_CartCurrentMaterials
                                                                                 .Where(ccm => ccm.CFG_CartId == assortingExecutor.CurrentCfgCartId.Value)
                                                                                 .ToList();
                        foreach (CFG_CartCurrentMaterial cfgCartCurrentMaterial in cfgCartCurrentMaterials)
                        {
                            if (cfgCartCurrentMaterial.AST_CartTaskItemId == null)
                            {
                                //整层大件需要同层的两个空库位
                                if (currentAstPalletTaskItem.IsBig)
                                {
                                    if ((cfgCartCurrentMaterial.Position == 1 && cfgCartCurrentMaterials[1].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 2 && cfgCartCurrentMaterials[0].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 3 && cfgCartCurrentMaterials[3].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 4 && cfgCartCurrentMaterials[2].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 5 && cfgCartCurrentMaterials[5].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 6 && cfgCartCurrentMaterials[4].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 7 && cfgCartCurrentMaterials[7].Usability != CartPositionUsability.Enable) ||
                                        (cfgCartCurrentMaterial.Position == 8 && cfgCartCurrentMaterials[6].Usability != CartPositionUsability.Enable))
                                    {
                                        continue;
                                    }
                                }

                                result.CartPositions.Add(cfgCartCurrentMaterial.Position);
                            }
                        }
                    }
                }
                else
                {
                    AST_CartTaskItem astCartTaskItem = dbContext.AST_CartTaskItems
                                                       .First(cti => cti.Id == assortingExecutor.CurrentAstCartTaskItemId.Value);
                    result.CartPositions.Add(astCartTaskItem.CartPosition);
                    result.PickedQuantity  = astCartTaskItem.AssortedQuantity;
                    result.AssortingStatus = astCartTaskItem.AssortingStatus;
                }

                if (assortingExecutor.CurrentAstPalletTaskItemId != null)
                {
                    AST_PalletTaskItem astPalletTaskItem = dbContext.AST_PalletTaskItems
                                                           .First(pti => pti.Id == assortingExecutor.CurrentAstPalletTaskItemId.Value);
                    result.MaterialCode   = astPalletTaskItem.MaterialCode;
                    result.MaterialName   = astPalletTaskItem.MaterialName;
                    result.ToPickQuantity = astPalletTaskItem.ToPickQuantity;
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 从分拣口解除小车绑定。
        /// </summary>
        /// <param name="cfgChannelId">分拣口的主键。</param>
        /// <param name="cfgCartId">待移出小车的主键。</param>
        /// <exception cref="System.ArgumentException">position 车位上的小车还未作业完成。</exception>
        public void UnDock(int cfgChannelId, int cfgCartId)
        {
            using (GeelyPtlEntities dbContext = new GeelyPtlEntities())
            {
                CFG_ChannelCurrentCart cfgChannelCurrentCart = dbContext.CFG_ChannelCurrentCarts
                                                               .FirstOrDefault(ccc => ccc.CFG_ChannelId == cfgChannelId && ccc.CFG_CartId == cfgCartId);
                if (cfgChannelCurrentCart != null && cfgChannelCurrentCart.CFG_CartId != null)
                {
                    CFG_Cart cfgCart = cfgChannelCurrentCart.CFG_Cart;
                    if (cfgCart.CartStatus == CartStatus.Assorting)
                    {
                        throw new ArgumentException("车位 " + cfgChannelCurrentCart.Position + " 上的小车 " + cfgCart.Code + " 还未作业完成。", "position");
                    }

                    //移出
                    cfgChannelCurrentCart.CFG_CartId = null;
                    cfgChannelCurrentCart.DockedTime = null;

                    //准备基础数据
                    AST_PalletTask  astPalletTask  = null;
                    CFG_WorkStation cfgWorkStation = null;
                    List <CFG_CartCurrentMaterial> cfgCartCurrentMaterials = cfgCart.CFG_CartCurrentMaterials
                                                                             .ToList();
                    CFG_CartCurrentMaterial firstNotEmptyCfgCartCurrentMaterial = cfgCartCurrentMaterials
                                                                                  .FirstOrDefault(ccm => ccm.AST_CartTaskItemId != null);
                    if (firstNotEmptyCfgCartCurrentMaterial != null)
                    {
                        AST_CartTaskItem astCartTask = firstNotEmptyCfgCartCurrentMaterial.AST_CartTaskItem;
                        astPalletTask  = astCartTask.AST_PalletTaskItem.AST_PalletTask;
                        cfgWorkStation = astCartTask.AST_PalletTaskItem.CFG_WorkStation;
                    }

                    dbContext.SaveChanges();

                    //设备控制
                    CartPtl cartPtl          = CartPtlHost.Instance.GetCartPtl(cfgCart.Id);
                    Ptl900U ptl900UPublisher = cartPtl.GetPtl900UPublisher();
                    Ptl900U ptl900ULight     = cartPtl.GetPtl900ULight();

                    ptl900UPublisher.Clear(true);
                    ptl900UPublisher.Unlock();

                    if (astPalletTask != null)
                    {
                        Display900UItem publisherDisplay900UItem = new Display900UItem();
                        publisherDisplay900UItem.Name        = "已分拣完成";
                        publisherDisplay900UItem.Description = string.Format(CultureInfo.InvariantCulture, @"项目:{0}
阶段:{1}
工位:{2}", astPalletTask.ProjectCode, astPalletTask.ProjectStep, cfgWorkStation.Code);
                        publisherDisplay900UItem.Count       = (ushort)cfgCartCurrentMaterials
                                                               .Where(ccm => ccm.Quantity != null)
                                                               .Select(ccm => ccm.Quantity.Value)
                                                               .Sum();
                        publisherDisplay900UItem.Unit = "个";

                        ptl900UPublisher.Lock();
                        ptl900UPublisher.Display(publisherDisplay900UItem, LightColor.Off);
                    }

                    foreach (CFG_CartCurrentMaterial cfgCartCurrentMaterial in cfgCartCurrentMaterials)
                    {
                        Ptl900U ptl900U = cartPtl.GetPtl900UByPosition(cfgCartCurrentMaterial.Position);

                        ptl900U.Clear(true);
                        ptl900U.Unlock();
                    }

                    ptl900ULight.Clear();
                }
            }
        }