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