From e07c762cd3964ec1af15906119e20563ff2d6432 Mon Sep 17 00:00:00 2001 From: tongfei <244188119@qq.com> Date: Wed, 15 Nov 2023 09:34:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=BA=93=E5=AD=98=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/BackRecordController.cs | 4 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 60 +++++++++++- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 19 +++- .../SaveBackRecordDetailsRequest.cs | 7 ++ .../Dto/BackRecord/SaveBackRecordRequest.cs | 6 -- .../Inventory/BoxInventoryBackGenerateDto.cs | 57 +++++++++++ .../BoxInventoryChangeGenerateDto.cs | 15 --- .../Entitys/BackRecordDetails.cs | 4 + .../IService/IBackRecordService.cs | 4 +- src/WMS.Web.Domain/Mappers/InventoryMapper.cs | 6 +- .../Services/BackRecordService.cs | 5 +- .../Services/InventoryService.cs | 95 +++++++++++++++++++ 12 files changed, 248 insertions(+), 34 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs diff --git a/src/WMS.Web.Api/Controllers/BackRecordController.cs b/src/WMS.Web.Api/Controllers/BackRecordController.cs index 0c2992f1..e092a915 100644 --- a/src/WMS.Web.Api/Controllers/BackRecordController.cs +++ b/src/WMS.Web.Api/Controllers/BackRecordController.cs @@ -59,7 +59,7 @@ namespace WMS.Web.Api.Controllers var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _backRecordService.BackShelf(dto, loginInfo); + return await _backRecordService.BackShelf(dto, BackRecordType.OutstockOn, loginInfo); } /// @@ -74,7 +74,7 @@ namespace WMS.Web.Api.Controllers var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) return Result.ReFailure(ResultCodes.Token_Invalid_Error); - return await _backRecordService.BackShelf(dto, loginInfo); + return await _backRecordService.BackShelf(dto, BackRecordType.InstockOff, loginInfo); } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index fa6192af..c8bfd896 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -205,6 +205,11 @@ 数量 + + + 仓库code + + 仓位ID @@ -220,11 +225,6 @@ 保存出入库回退上下架:请求对象 - - - 类型:1为入库回退下架,2为出库回退上架 - - 明细 @@ -1945,6 +1945,56 @@ 保存入库单-请求对象 + + + 出入库回退上下架-箱库存处理对象 + + + + + 类型:1为入库回退下架,2为出库回退上架 + + + + + 箱ID + + + + + 仓库编码 + + + + + 仓位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 dce2c841..bb947823 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -80,6 +80,11 @@ 数量 + + + 仓库code + + 仓位ID @@ -1836,11 +1841,12 @@ 出入库回退上下架:服务接口 - + 回退上下架 + @@ -2841,11 +2847,12 @@ 出入库回退上下架:服务接口 - + 回退上下架 + @@ -3084,6 +3091,14 @@ + + + 入库回退上下架-箱库存的变更 + + + + + 出库服务 diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs index c5b75ba8..c81bff60 100644 --- a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs +++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs @@ -25,6 +25,13 @@ namespace WMS.Web.Core.Dto.BackRecord /// [Required(ErrorMessage = "数量不能为空")] public decimal Qty { get; set; } + + /// + /// 仓库code + /// + [Required(ErrorMessage = "仓库不能为空")] + public string StockCode { get; set; } + /// /// 仓位ID /// diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs index ad521ddf..a95f588d 100644 --- a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs @@ -10,12 +10,6 @@ namespace WMS.Web.Core.Dto.BackRecord /// public class SaveBackRecordRequest { - /// - /// 类型:1为入库回退下架,2为出库回退上架 - /// - [Required(ErrorMessage = "回退类型不能为空")] - public int BackRecordType { get; set; } - /// /// 明细 /// diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs new file mode 100644 index 00000000..cbab813b --- /dev/null +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto.Inventory +{ + /// + /// 出入库回退上下架-箱库存处理对象 + /// + public class BoxInventoryBackGenerateDto + { + /// + /// 类型:1为入库回退下架,2为出库回退上架 + /// + public int BackRecordType { get; set; } + + /// + /// 箱ID + /// + public int BoxId { get; set; } + + /// + /// 仓库编码 + /// + public string StockCode { get; set; } + + /// + /// 仓位ID + /// + public int SubStockId { get; set; } + + /// + /// 明细 + /// + public List Details { get; set; } + } + + /// + /// 出入库回退上下架明细-箱库存处理对象 + /// + public class BoxInventoryBackDetailsGenerateDto + { + /// + /// 物料ID + /// + public int MaterialId { get; set; } + /// + /// 数量 + /// + public decimal Qty { get; set; } + + /// + /// 序列号集 + /// + public List SerialNumbers { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs index ff8b0472..7c0dadf0 100644 --- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs +++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs @@ -19,21 +19,6 @@ namespace WMS.Web.Core.Dto.Inventory /// public int TargetBoxId { get; set; } - ///// - ///// 仓库编码:目标仓库 - ///// - //public string StockCode { get; set; } - - ///// - ///// 仓位:目标仓位 - ///// - //public int SubStockId { get; set; } - - ///// - ///// 出入库类型:有个枚举的 - ///// - //public int InventoryInOutType { get; set; } - /// /// 明细 /// diff --git a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs index aeea13fa..e33adaf1 100644 --- a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs +++ b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs @@ -33,6 +33,10 @@ namespace WMS.Web.Domain.Entitys /// public decimal Qty { get; set; } /// + /// 仓库code + /// + public string StockCode { get; set; } + /// /// 仓位ID /// public int SubStockId { get; set; } diff --git a/src/WMS.Web.Domain/IService/IBackRecordService.cs b/src/WMS.Web.Domain/IService/IBackRecordService.cs index a5767bb7..7ee6e0b7 100644 --- a/src/WMS.Web.Domain/IService/IBackRecordService.cs +++ b/src/WMS.Web.Domain/IService/IBackRecordService.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using WMS.Web.Core.Dto.BackRecord; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.IService { @@ -17,8 +18,9 @@ namespace WMS.Web.Domain.IService /// 回退上下架 /// /// + /// /// /// - Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo); + Task BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo); } } diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs index bb0b5034..5e50fe18 100644 --- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs +++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs @@ -19,7 +19,11 @@ namespace WMS.Web.Domain.Mappers //移箱映射 CreateMap(); - CreateMap() ; + CreateMap() ; + + //出入库回退上下架映射 + CreateMap(); + CreateMap(); } } } diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs index ef12a86c..0f2019f5 100644 --- a/src/WMS.Web.Domain/Services/BackRecordService.cs +++ b/src/WMS.Web.Domain/Services/BackRecordService.cs @@ -40,16 +40,17 @@ namespace WMS.Web.Domain.Services /// 回退上下架 /// /// + /// /// /// - public async Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo) + public async Task BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo) { IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); bool isRollback = false; bool isTransaction = false; var entity = new BackRecord(); - entity.Type = (BackRecordType)dto.BackRecordType; + entity.Type = type; entity.Details = _mapper.Map>(dto.Details); entity.Create(loginInfo.UserInfo.StaffId); entity = await _backRecordRepositories.Add(entity, isTransaction); diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs index 7b7a4faf..fe49cbd8 100644 --- a/src/WMS.Web.Domain/Services/InventoryService.cs +++ b/src/WMS.Web.Domain/Services/InventoryService.cs @@ -231,5 +231,100 @@ namespace WMS.Web.Domain.Services } return Result.ReSuccess(); } + + /// + /// 入库回退上下架-箱库存的变更 + /// + /// + /// + /// + public async Task GenerateBackBox(List dtoDatas, bool isTransaction) + { + //1.判断来源数据是否存在 + if (dtoDatas != null || dtoDatas.Count == 0) + return Result.ReFailure(ResultCodes.InventoryNoSourceError); + + var update_entitys = new List(); + var add_entitys = new List(); + + //2.获取“箱库存集合” + var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList(); + var boxInventorys = await _boxInventoryRepositories.GetList(boxIds); + var boxs = await _boxRepositories.GetEntityList(boxIds); + var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(boxIds); + //3.遍历:dto + foreach (var dto in dtoDatas) + { + //上架 + if (dto.BackRecordType == (int)BackRecordType.OutstockOn) + { + //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架” + var ishave = boxInventorys.Where(x => x.BoxId == dto.BoxId).Any(); + if (ishave) + return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError); + //3.1.1取箱信息 + var box = boxs.Where(x => x.Id == dto.BoxId).FirstOrDefault(); + if (box == null) + return Result.ReFailure(ResultCodes.BoxNoData); + //3.1.2去箱对应的序列号信息 + var box_serialNumbers = serialNumbers.Where(x => x.BoxId == dto.BoxId).Select(x => new { x.MaterialId, x.SerialNumber }).ToList(); + + //3.2组装要新增的箱库存信息:箱和明细和序列号 + var addEntity = _mapper.Map(dto); + addEntity.Details = _mapper.Map>(box.Details); + + add_entitys.Add(addEntity); + + + }//下架 + else + { + //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱” + var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault(); + if (boxInventory==null) + return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + //3.2创建更新对象 + var update_entity = new BoxInventory(); + update_entity.Details = new List(); + + //3.3遍历dto明细 + foreach (var dtoItem in dto.Details) + { + //找到原来的箱库存对应要改变的物料:这个一定是存在的,不存在就有问题 + var updateDetail = boxInventory.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault(); + if (updateDetail == null) + return Result.ReFailure(ResultCodes.BoxInventoryNoDataError); + //箱物料的库存数量不足;小于要拿出来的数量 + if (updateDetail.Qty < dtoItem.Qty) + return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError); + + var update_entity_det = new BoxInventoryDetails(); + update_entity_det.SerialNumbers = new List(); + update_entity_det.Qty = updateDetail.Qty - dtoItem.Qty; + + //先把现有的序列号复制过来 + update_entity_det.SerialNumbers = updateDetail.SerialNumbers; + //再移除要改箱的序列号;最后就是原箱库存的新序列号 + update_entity_det.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x)); + + update_entity.Details.Add(update_entity_det); + } + } + } + + var isSuccess = true; + //4.数据库更新操作:更新和添加 + if (add_entitys.Count != 0) + { + isSuccess = await _boxInventoryRepositories.AddRange(add_entitys, 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(); + } } }