Exemplo n.º 1
0
        public async Task <RouteData <Wms_inventorybox> > AddInventoryBox(Wms_inventorybox box)
        {
            if (_sqlClient.Queryable <Wms_inventorybox>().Any(c => c.InventoryBoxNo == box.InventoryBoxNo && c.IsDel == DeleteFlag.Normal))
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.E1022_INVENTORYBOX_NO_DUPLICATE));
            }

            Wms_reservoirarea reservoirArea = null;

            if (box.ReservoirAreaId != null)
            {
                reservoirArea = await _sqlClient.Queryable <Wms_reservoirarea>()
                                .FirstAsync(x => x.ReservoirAreaId == box.ReservoirAreaId && x.IsDel == DeleteFlag.Normal);

                if (reservoirArea == null)
                {
                    return(RouteData <Wms_inventorybox> .From(PubMessages.E0006_DATA_VAILD_FAIL, $"指定库区不存在"));
                }
            }

            Wms_storagerack rack = null;

            if (box.StorageRackId != null)
            {
                rack = await _sqlClient.Queryable <Wms_storagerack>()
                       .FirstAsync(x => x.ReservoirAreaId == box.ReservoirAreaId && x.StorageRackId == box.StorageRackId);

                if (rack == null)
                {
                    return(RouteData <Wms_inventorybox> .From(PubMessages.E0006_DATA_VAILD_FAIL, $"指定库位不存在"));
                }
            }

            if (reservoirArea != null)
            {
                box.ReservoirAreaName = rack.ReservoirAreaName;
            }
            if (rack != null)
            {
                box.StorageRackName = rack.StorageRackName;
                box.Row             = rack.Row;
                box.Column          = rack.Column;
                box.Floor           = rack.Floor;
            }
            box.InventoryBoxId = PubId.SnowflakeId;
            box.CreateBy       = UserDto.UserId;
            box.CreateDate     = DateTime.Now;
            box.CreateUser     = UserDto.UserName;
            box.ModifiedBy     = UserDto.UserId;
            box.ModifiedDate   = DateTime.Now;
            box.ModifiedUser   = UserDto.UserName;
            if (await _sqlClient.Insertable(box).ExecuteCommandAsync() == 0)
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.E1023_INVENTORYBOX_ADD_FAIL));
            }
            else
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.I1003_INVENTORYBOX_ADD_SCCUESS));
            }
        }
        public async Task <RouteData <Wms_InventoryBoxDto> > Get(string inventoryBoxNo)
        {
            Wms_inventorybox box = await _client.Queryable <Wms_inventorybox>().FirstAsync(x => x.InventoryBoxNo == inventoryBoxNo);

            if (box == null)
            {
                return(RouteData <Wms_InventoryBoxDto> .From(PubMessages.E1011_INVENTORYBOX_NOTFOUND));
            }
            Wms_InventoryBoxDto dto = JsonConvert.DeserializeObject <Wms_InventoryBoxDto>(JsonConvert.SerializeObject(box));

            var query = _client.Queryable <Wms_inventory, Wms_material, Sys_user>((i, m, u) => new object[] {
                JoinType.Left, i.MaterialId == m.MaterialId,
                JoinType.Left, i.ModifiedBy == u.UserId
            })
                        .Where((i, m, u) => i.InventoryBoxId == box.InventoryBoxId)
                        .Select((i, m, u) => new InventoryDetailDto
            {
                InventoryPosition = i.Position,
                MaterialId        = m.MaterialId.ToString(),
                MaterialNo        = m.MaterialNo,
                MaterialOnlyId    = m.MaterialOnlyId,
                MaterialName      = m.MaterialName,
                OrderNo           = i.OrderNo,
                IsLocked          = i.IsLocked,
                Qty = i.Qty,
            }).MergeTable();

            dto.Id      = box.InventoryBoxId.ToString();
            dto.Details = (await query.ToListAsync()).ToArray();
            return(RouteData <Wms_InventoryBoxDto> .From(dto));
        }
        public async Task <IActionResult> AddOrUpdate([FromForm] Wms_inventorybox model, [FromForm] string id, [FromForm] string storeId)
        {
            var validator = new InventoryBoxFluent();
            var results   = validator.Validate(model);
            var success   = results.IsValid;

            if (!success)
            {
                string msg = results.Errors.Aggregate("", (current, item) => (current + item.ErrorMessage + "</br>"));
                return(BootJsonH((PubEnum.Failed.ToInt32(), msg)));
            }

            IWMSManagementApiAccessor wmsAccessor = WMSApiManager.GetManagementApiAccessor(storeId.ToString(), _client, this.UserDto);
            RouteData routeData = null;

            if (id.IsEmptyZero())
            {
                routeData = await wmsAccessor.AddInventoryBox(model);
            }
            else
            {
                routeData = await wmsAccessor.UpdateInventoryBox(SqlFunc.ToInt64(id), model);
            }

            return(BootJsonH((routeData.IsSccuess, routeData.Message)));
        }
Exemplo n.º 4
0
        public async Task <RouteData> DeleteInventoryBox(long inventoryBoxId)
        {
            //判断库存数量,库存数量小于等于0,才能删除
            var isExist = _sqlClient.Queryable <Wms_inventorybox>().Any(c => c.InventoryBoxId == SqlFunc.ToInt64(inventoryBoxId));

            if (isExist)
            {
                return(RouteData.From(PubMessages.E1011_INVENTORYBOX_NOTFOUND));
            }
            bool hasItems = _sqlClient.Queryable <Wms_inventory>().Any(c => c.InventoryBoxId == SqlFunc.ToInt64(inventoryBoxId) && c.Qty != 0);

            if (hasItems)
            {
                return(RouteData.From(PubMessages.E1025_INVENTORYBOX_DELETE_FAIL, "料箱中存在物料"));
            }

            Wms_inventorybox box = new Wms_inventorybox {
                InventoryBoxId = inventoryBoxId,
                IsDel          = 0,
                ModifiedBy     = UserDto.UserId,
                ModifiedDate   = DateTime.Now
            };

            if (await _sqlClient.Updateable(box).UpdateColumns(c => new { c.IsDel, c.ModifiedBy, c.ModifiedDate }).ExecuteCommandAsync() == 0)
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.E1025_INVENTORYBOX_DELETE_FAIL));
            }
            return(RouteData <Wms_inventorybox> .From(PubMessages.I1005_INVENTORYBOX_DELETE_SCCUESS));
        }
Exemplo n.º 5
0
 protected static void CreateStoragerack(SqlSugarClient sqlClient, Wms_warehouse warehouse, Wms_reservoirarea reservoirarea, int row, int columnCount, int floorCount)
 {
     for (int column = 1; column <= columnCount; column++)
     {
         for (int floor = 1; floor <= floorCount; floor++)
         {
             string          code        = warehouse.WarehouseId.ToString().PadLeft(2, '0') + row.ToString().PadLeft(2, '0') + column.ToString().PadLeft(2, '0') + floor.ToString().PadLeft(2, '0');
             string          no          = row.ToString().PadLeft(2, '0') + column.ToString().PadLeft(2, '0') + floor.ToString().PadLeft(2, '0');
             int             id          = Convert.ToInt32(code);
             Wms_storagerack storagerack = new Wms_storagerack()
             {
                 StorageRackId     = id,
                 StorageRackNo     = "KW-" + no,
                 StorageRackName   = "库位" + code,
                 ReservoirAreaId   = reservoirarea.ReservoirAreaId,
                 ReservoirAreaName = reservoirarea.ReservoirAreaName,
                 WarehouseId       = warehouse.WarehouseId,
                 Row          = row,
                 Floor        = floor,
                 Column       = column,
                 Remark       = "",
                 CreateBy     = 1,
                 CreateUser   = "******",
                 CreateDate   = DateTime.Now,
                 ModifiedBy   = 1,
                 ModifiedUser = "******",
                 ModifiedDate = DateTime.Now,
                 IsDel        = DeleteFlag.Normal,
             };
             sqlClient.Insertable(storagerack).ExecuteCommand();
             Wms_inventorybox box = new Wms_inventorybox()
             {
                 InventoryBoxId    = id,
                 InventoryBoxNo    = "LK_LX_" + code,
                 InventoryBoxName  = "料箱-" + code,
                 WarehouseId       = reservoirarea.WarehouseId,
                 ReservoirAreaId   = reservoirarea.ReservoirAreaId,
                 ReservoirAreaName = reservoirarea.ReservoirAreaName,
                 StorageRackId     = storagerack.StorageRackId,
                 StorageRackName   = storagerack.StorageRackName,
                 Row          = storagerack.Row,
                 Column       = storagerack.Column,
                 Floor        = storagerack.Floor,
                 Size         = 1,
                 UsedSize     = 0,
                 Remark       = "",
                 IsDel        = DeleteFlag.Normal,
                 Status       = (int)InventoryBoxStatus.InPosition,
                 CreateBy     = 1,
                 CreateUser   = "******",
                 CreateDate   = DateTime.Now,
                 ModifiedBy   = 1,
                 ModifiedUser = "******",
                 ModifiedDate = DateTime.Now
             };
             sqlClient.Insertable(box).ExecuteCommand();
         }
     }
 }
        public async Task <IActionResult> BoxBack(long storeId, long inventoryBoxId)
        {
            IWMSBaseApiAccessor          wmsAccessor = WMSApiManager.GetBaseApiAccessor(storeId.ToString(), _client, this.UserDto);
            RouteData <Wms_inventorybox> result      = await wmsAccessor.GetInventoryBox(inventoryBoxId);

            if (!result.IsSccuess)
            {
                return(Json(result));
            }
            Wms_inventorybox     box  = result.Data;
            Wms_inventoryboxTask task = await _client.Queryable <Wms_inventoryboxTask>().FirstAsync(x => x.InventoryBoxId == inventoryBoxId &&
                                                                                                    (x.Status != (int)InventoryBoxTaskStatus.task_canceled &&
                                                                                                     x.Status != (int)InventoryBoxTaskStatus.task_backed));

            if (task == null) //新料箱入库
            {
                if (box.Status == (int)InventoryBoxStatus.None)
                {
                    task = new Wms_inventoryboxTask()
                    {
                        InventoryBoxTaskId = PubId.SnowflakeId,
                        InventoryBoxId     = box.InventoryBoxId,
                        InventoryBoxNo     = box.InventoryBoxNo,
                        ReservoirareaId    = (long)box.ReservoirAreaId,
                        StoragerackId      = (long)box.StorageRackId,
                        Data         = null,
                        OperaterDate = DateTime.Now,
                        OperaterId   = UserDto.UserId,
                        OperaterUser = UserDto.UserName,
                        Status       = InventoryBoxTaskStatus.task_leaved.ToByte()
                    };

                    if (_client.Insertable(task).ExecuteCommand() == 0)
                    {
                        return(Json(YL.Core.Dto.RouteData.From(PubMessages.E0005_DATABASE_INSERT_FAIL, "新料箱入库时任务记录生成失败")));
                    }
                }
                else
                {
                    return(Json(YL.Core.Dto.RouteData.From(PubMessages.E1013_INVENTORYBOXTASK_NOTFOUND)));
                }
            }
            else if (await _client.Queryable <Wms_stockindetail_box>().AnyAsync(x => x.InventoryBoxId == task.InventoryBoxTaskId))
            {
                return(Redirect($"/inventorybox/stockinboxback?storeId={storeId}&inventoryBoxTaskId=" + task.InventoryBoxTaskId));
            }
            else if (await _client.Queryable <Wms_stockoutdetail_box>().AnyAsync(x => x.InventoryBoxId == task.InventoryBoxTaskId))
            {
                return(Redirect($"/inventorybox/stockoutboxback?storeId={storeId}&inventoryBoxTaskId=" + task.InventoryBoxTaskId));
            }
            ViewData["InventoryBoxTaskId"] = task.InventoryBoxTaskId;
            ViewData["currentStoreId"]     = storeId;
            return(View(box));
        }
        /// <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));
        }
        public async Task <IActionResult> Add(long storeId, string id)
        {
            ViewData["currentStoreId"] = storeId;
            var model = new Wms_inventorybox();

            if (id.IsEmpty())
            {
                return(View(model));
            }
            else
            {
                IWMSBaseApiAccessor          wmsAccessor = WMSApiManager.GetBaseApiAccessor(storeId.ToString(), _client);
                RouteData <Wms_inventorybox> result      = await wmsAccessor.GetInventoryBox(SqlFunc.ToInt64(id));

                return(View(result.Data));
            }
        }
Exemplo n.º 9
0
        public async Task <RouteData <Wms_inventorybox> > UpdateInventoryBox(long inventoryBoxId, Wms_inventorybox box)
        {
            Wms_reservoirarea reservoirArea = null;

            if (box.ReservoirAreaId != null)
            {
                reservoirArea = await _sqlClient.Queryable <Wms_reservoirarea>()
                                .FirstAsync(x => x.ReservoirAreaId == box.ReservoirAreaId && x.IsDel == DeleteFlag.Normal);

                if (reservoirArea == null)
                {
                    return(RouteData <Wms_inventorybox> .From(PubMessages.E0006_DATA_VAILD_FAIL, $"指定库区不存在"));
                }
            }

            Wms_storagerack rack = null;

            if (box.StorageRackId != null)
            {
                rack = await _sqlClient.Queryable <Wms_storagerack>()
                       .FirstAsync(x => x.ReservoirAreaId == box.ReservoirAreaId && x.StorageRackId == box.StorageRackId);

                if (rack == null)
                {
                    return(RouteData <Wms_inventorybox> .From(PubMessages.E0006_DATA_VAILD_FAIL, $"指定库位不存在"));
                }
            }
            if (reservoirArea != null)
            {
                box.ReservoirAreaName = rack.ReservoirAreaName;
            }
            if (rack != null)
            {
                box.StorageRackName = rack.StorageRackName;
                box.Row             = rack.Row;
                box.Column          = rack.Column;
                box.Floor           = rack.Floor;
            }
            box.InventoryBoxId = inventoryBoxId;
            box.ModifiedBy     = UserDto.UserId;
            box.ModifiedDate   = DateTime.Now;
            box.ModifiedUser   = UserDto.UserName;
            if (await _sqlClient.Updateable(box).ExecuteCommandAsync() == 0)
            {
                return(RouteData <Wms_inventorybox> .From(PubMessages.E1024_INVENTORYBOX_UPDATE_FAIL));
            }
            return(RouteData <Wms_inventorybox> .From(PubMessages.I1004_INVENTORYBOX_UPDATE_SCCUESS));
        }