diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index f5f4812f..8b264b74 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -2241,6 +2241,46 @@ 序列号集 + + + 出库-箱库存变更请求对象 + + + + + 出入库存-方式(详情见枚举值) + + + + + 箱ID + + + + + 明细 + + + + + 出库明细-箱库存变更请求对象 + + + + + 物料ID + + + + + 数量 + + + + + 序列号集 + + 采购上架-箱库存处理对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 5b3f58a4..33586b06 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3241,6 +3241,14 @@ + + + 出库下架-箱库存变更 + + + + + 出库服务 @@ -4256,6 +4264,21 @@ 出入库回退上下架 + + + 出入库存-方式 + + + + + 按箱 + + + + + 按产品 + + 入库状态 diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs new file mode 100644 index 00000000..32b8fd5b --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 出库-箱库存变更请求对象 + /// + public class BoxInventoryOutStockGenerateDto + { + /// + /// 出入库存-方式(详情见枚举值) + /// + public int InOutInventoryMethod { get; set; } + + /// + /// 箱ID + /// + public int BoxId { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } = new List(); + } + /// + /// 出库明细-箱库存变更请求对象 + /// + public class BoxInventoryOutStockDetailsGenerateDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + + /// + /// 序列号集 + /// + public List SerialNumbers { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs index 6132dcd5..a39680e3 100644 --- a/src/WMS.Web.Domain/Services/InventoryService.cs +++ b/src/WMS.Web.Domain/Services/InventoryService.cs @@ -370,7 +370,7 @@ namespace WMS.Web.Domain.Services foreach (var dto in dtoDatas) { //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” - var ishave = boxInventorys.Where(x =>dto.BoxIds.Contains(x.BoxId)).Any(); + var ishave = dto.BoxIds.All(x => boxInventorys.Any(t => t.BoxId == x));////代码意义:当前dto中的BoxIds是否全部等于箱库存中的boxId;dto中有一个boxID不等于箱库存中的,就失败 if (ishave) return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); @@ -416,8 +416,8 @@ namespace WMS.Web.Domain.Services if (dto.ShelfMethod == (int)ShelfMethod.Box) { //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” - var ishave = boxInventorys.Where(x => dto.BoxIds.Contains(x.BoxId)).Any(); - if (ishave) + var isAllTrueHave = dto.BoxIds.All(x => boxInventorys.Any(t => t.BoxId == x));//代码意义:当前dto中的BoxIds是否全部等于箱库存中的boxId;dto中有一个boxID不等于箱库存中的,就失败 + if (isAllTrueHave) return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); //3.2组装要新增的箱库存信息:箱和明细和序列号 @@ -486,5 +486,89 @@ namespace WMS.Web.Domain.Services } return Result.ReSuccess(); } + + /// + /// 出库下架-箱库存变更 + /// + /// + /// + /// + public async Task GenerateOutStockBox(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + if (dtoDatas != null || dtoDatas.Count == 0) + return Result.ReFailure(ResultCodes.InventoryNoSourceError); + + var delete_entitys_ids = new List(); + var update_entitys = new List(); + + //1.1通过箱IDS获取箱库存 + var boxIds = dtoDatas.Select(x => x.BoxId).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + + //2.遍历:dto + foreach (var dto in dtoDatas) + { + //3.1出库的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱库存数据不存在,请稍候再试!” + // 获取箱库存 + var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault(); + if (boxInventory==null) + return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + + //按箱:出库 + if (dto.InOutInventoryMethod == (int)InOutInventoryMethod.Box) + { + //直接添加要删除的箱 + delete_entitys_ids.Add(boxInventory.Id); + } + //按产品:出库 + else + { + //3.3创建更新对象 + var update_entity = boxInventory; + update_entity.Details = boxInventory.Details; + + //3.2.遍历:dto明细 + foreach (var dtoItem in dto.Details) + { + //3.3.找到当前明细物料:没有则返回失败;提示:“该箱物料库存不存在” + var update_entityDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + if (update_entityDetail == null) + return Result.ReFailure(ResultCodes.BoxInventoryMaterialNoDataError); + //3.4判断库存数量是否不足 + if (update_entityDetail.Qty < dtoItem.Qty) + return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); + + //3.5物料库存数量变更:减库存 + update_entityDetail.Qty = update_entityDetail.Qty - dtoItem.Qty; + //3.6移除要出库的序列号 + update_entityDetail.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); + + } + //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改; + var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0); + if (isAllNoInventory) + delete_entitys_ids.Add(update_entity.Id); + else + //4.2添加要更新的箱库存实体 + update_entitys.Add(update_entity); + } + + } + + //4.数据库更新操作:更新和删除 + var isSuccess = true; + if (delete_entitys_ids.Count != 0) + { + isSuccess = await _boxInventoryRepositories.DeleteRange(delete_entitys_ids, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + if (update_entitys.Count != 0) + { + isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + } + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs b/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs new file mode 100644 index 00000000..66cf9fc3 --- /dev/null +++ b/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Core; + +namespace WMS.Web.Domain.Values +{ + /// + /// 出入库存-方式 + /// + public enum InOutInventoryMethod + { + /// + /// 按箱 + /// + [EnumRemark("按箱")] + Box =1, + /// + /// 按产品 + /// + [EnumRemark("按产品")] + Product =2 + } +} diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 66a1e945..53c50191 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -48,6 +48,7 @@ namespace WMS.Web.Domain.Values public static ValueTuple AdjustError = (80009, "与金蝶校准发生错误,请稍候再试!"); public static ValueTuple InventoryNoSourceError = (800010, "来源数据不存在,请稍候再试!"); public static ValueTuple BoxInventoryNoDataError = (800011, "箱库存数据不存在,请稍候再试!"); + public static ValueTuple BoxInventoryMaterialNoDataError = (800041, "箱物料库存数据不存在,请稍候再试!"); public static ValueTuple BoxInventoryNoInventoryError = (800012, "箱库存物料数量不足,请核对后再试!"); public static ValueTuple BoxInventoryHaveInventoryError = (800013, "该箱库存已经存在,请核对后再试!");