public static string GetPLC(long reservoirAreaId, PLCPosition pos)
 {
     if (reservoirAreaId == 1)
     {
         if (pos == PLCPosition.Left)
         {
             return("1010");
         }
         else if (pos == PLCPosition.Right)
         {
             return("1020");
         }
         else
         {
             _count1++;
             return(_count1 % 2 == 1 ? "1010" : "1020");
         }
     }
     else
     {
         if (pos == PLCPosition.Left)
         {
             return("5010");
         }
         else if (pos == PLCPosition.Right)
         {
             return("6010");
         }
         else
         {
             _count2++;
             return(_count2 % 2 == 1 ? "5010" : "6010");
         }
     }
 }
        public async Task <RouteData> DoInventoryBoxBack(long storeId, StockOperation mode, long inventoryBoxTaskId, InventoryDetailDto[] details, PLCPosition pos)
        {
            IWMSOperationApiAccessor wmsAccessor = WMSApiManager.GetOperationApiAccessor(storeId.ToString(), _client, this.UserDto);
            RouteData result = await wmsAccessor.DoInventoryBoxBack(mode, inventoryBoxTaskId, details, pos);

            return(result);
        }
        public async Task <RouteData> DoInventoryBoxsOut(long storeId, long[] inventoryBoxIds, PLCPosition pos)
        {
            IWMSOperationApiAccessor wmsAccessor = WMSApiManager.GetOperationApiAccessor(storeId.ToString(), _client, this.UserDto);
            RouteData result = await wmsAccessor.DoInventoryBoxOut(inventoryBoxIds, pos);

            return(result);
        }
        public async Task <RouteData> DoAutoSelectBox(long storeId, long?reservoirAreaId, int requestSize, PLCPosition pos)
        {
            IWMSOperationApiAccessor wmsAccessor = WMSApiManager.GetOperationApiAccessor(storeId.ToString(), _client, this.UserDto);
            RouteData result = await wmsAccessor.DoAutoSelectBoxOut(reservoirAreaId, requestSize, pos);

            return(result);
        }
        /// <summary>
        /// 获取最适合的料箱
        /// </summary>
        /// <param name="client"></param>
        /// <param name="reservoirAreaId"></param>
        /// <param name="requestSize"></param>
        /// <param name="pos"></param>
        /// <returns></returns>
        public static async Task <RouteData <Wms_inventorybox> > GetBestInvertoryBox(this ISqlSugarClient client, long?reservoirAreaId, int requestSize, PLCPosition pos)
        {
            //查询是否有符合要求的料箱
            var query = client.Queryable <Wms_inventorybox, Wms_storagerack>(
                (ib, s) => new object[] {
                JoinType.Left, ib.StorageRackId == s.StorageRackId,
            })
                        .Where((ib, s) =>
                               ib.UsedSize < ib.Size &&
                               ib.Size == requestSize &&
                               ib.Status == (int)InventoryBoxStatus.InPosition &&
                               s.Status == (int)StorageRackStatus.Normal
                               );

            if (reservoirAreaId != null)
            {
                query = query.Where((ib) => ib.ReservoirAreaId == reservoirAreaId.Value);
            }

            Wms_inventorybox inventoryBox = await query
                                            .OrderBy((ib) => ib.Column, OrderByType.Desc)
                                            .OrderBy((ib) => ib.Floor, OrderByType.Asc)
                                            .FirstAsync();

            //如果没有符合要求的料想,且是要求多宫格料箱时,尝试选取完整料箱进行分割
            if (inventoryBox == null && requestSize > 1)
            {
                var query2 = client.Queryable <Wms_inventorybox>()
                             .Where((ib) => ib.Size == 1 && ib.UsedSize == 0 &&
                                    ib.Status == (int)InventoryBoxStatus.InPosition)
                             .OrderBy((ib) => ib.Column, OrderByType.Desc)
                             .OrderBy((ib) => ib.Floor, OrderByType.Asc);
                if (reservoirAreaId != null)
                {
                    query2 = query2.Where((ib) => ib.ReservoirAreaId == reservoirAreaId.Value);
                }
                inventoryBox = await query2.FirstAsync();

                if (inventoryBox != null)
                {
                    inventoryBox.Size = requestSize;
                }
                if (client.Updateable(inventoryBox).ExecuteCommand() == 0)
                {
                    return(YL.Core.Dto.RouteData <Wms_inventorybox> .From(PubMessages.E0004_DATABASE_UPDATE_FAIL));
                }
            }
            if (inventoryBox == null)
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.E1007_INVENTORYBOX_ALLOWUSED));
            }
            return(RouteData <Wms_inventorybox> .From(inventoryBox));
        }