From d4c9bedd24ed27047770adfaf01bab5acec3018a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 10:53:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E7=9B=98=E7=82=B9=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BA=8F=E5=88=97=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 12 +++ src/WMS.Web.Domain/Entitys/Box.cs | 15 ++++ .../IService/ISerialNumberService.cs | 3 +- .../Services/SerialNumberService.cs | 83 +++++++++++++++++++ .../Services/TakeStockService.cs | 10 ++- .../Values/SerialNumberOperateType.cs | 7 +- 6 files changed, 127 insertions(+), 3 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index b9a13442..1696ac01 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -2746,6 +2746,9 @@ 出入库回退 + + 盘点 + 序列号操作记录 @@ -4911,6 +4914,15 @@ + + + 盘点 + + + + + + 盘点单服务 diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs index ea0c380b..542f8b47 100644 --- a/src/WMS.Web.Domain/Entitys/Box.cs +++ b/src/WMS.Web.Domain/Entitys/Box.cs @@ -95,5 +95,20 @@ namespace WMS.Web.Domain.Entitys } return Result.ReSuccess(); } + + //移入 + public Result TakeStock(int materialId, decimal qty) + { + var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId); + if(d==null) + { + this.Details.Add(new BoxDetails() + { + MaterialId = materialId, + Qty= qty + }); + } + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/IService/ISerialNumberService.cs b/src/WMS.Web.Domain/IService/ISerialNumberService.cs index fd4f127f..9831d63e 100644 --- a/src/WMS.Web.Domain/IService/ISerialNumberService.cs +++ b/src/WMS.Web.Domain/IService/ISerialNumberService.cs @@ -24,7 +24,8 @@ namespace WMS.Web.Domain.IService Task InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true); /// 出入库回退 Task BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true); - + /// 盘点 + Task TakeStock(List takeStocks, LoginInDto loginInfo, bool isTransaction = true); /// /// 序列号操作记录 /// diff --git a/src/WMS.Web.Domain/Services/SerialNumberService.cs b/src/WMS.Web.Domain/Services/SerialNumberService.cs index 4da87ee8..5485fc91 100644 --- a/src/WMS.Web.Domain/Services/SerialNumberService.cs +++ b/src/WMS.Web.Domain/Services/SerialNumberService.cs @@ -431,5 +431,88 @@ namespace WMS.Web.Domain.Services return Result.ReSuccess(); } + /// + /// 盘点 + /// + /// + /// + /// + /// + public async Task TakeStock(List takeStocks, LoginInDto loginInfo, bool isTransaction = true) + { + var serialNumbers = takeStocks.SelectMany(s => s.Details).SelectMany(s => s.SerialNumbers).ToList(); + var entityList = await _serialNumbersRepositories.GetEntityList(serialNumbers); + var boxIds = entityList.Select(s => s.BoxId).ToList(); + var boxList = await _boxRepositories.GetEntityList(boxIds); + + List box_New_List = new List(); + List soList = new List(); + List sList = new List(); + foreach (var s in serialNumbers) + { + var takeStockDetail = takeStocks.SelectMany(s => s.Details).FirstOrDefault(w => w.SerialNumbers.Contains(s)); + if (takeStockDetail == null) continue; + var box = boxList.FirstOrDefault(f => f.Id == takeStockDetail.BoxId); + var s_entity = entityList.FirstOrDefault(f => f.SerialNumber.Equals(s)); + if (box != null && box.Details.FirstOrDefault(f => f.MaterialId == takeStockDetail.MaterialId) == null) + { + //如果这个物料不存在箱箱信息 添加进去 + box.TakeStock(takeStockDetail.MaterialId, takeStockDetail.AfterQty); + box_New_List.Add(box); + } + + if (s_entity == null) + { + //序列号 + SerialNumbers s_new = new SerialNumbers(s, takeStockDetail.MaterialId, takeStockDetail.Id, 0, "", DateTime.Now, DateTime.Now); + sList.Add(s_new); + } + else + { + s_entity.BoxId = takeStockDetail.BoxId; + + var takeStock = takeStocks.FirstOrDefault(w => w.Details.FirstOrDefault(w => w.SerialNumbers.Contains(s)) != null); + //记录序列号操作日志 + SerialNumberOperate op = new SerialNumberOperate() + { + MaterialId = takeStockDetail.MaterialId, + SerialNumber = s, + OrgId = box.OrgId, + SupplierId = box.SupplierId, + OperateTime = DateTime.Now, + OperateType = SerialNumberOperateType.TakeStock, + OperateUser = "", + Remark = "单号:" + takeStock.BillNo + "\r\n" + "箱号:" + box.BoxBillNo + }; + soList.Add(op); + } + } + + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _transactionRepositories.GetTransaction(); + bool isRollback = false; + bool isSuccess = true; + isSuccess = await _serialNumbersRepositories.EditEntityList(entityList, false); + if (isSuccess) + isSuccess = await _serialNumbersRepositories.AddRange(sList, false); + if (isSuccess) + isSuccess = await _boxRepositories.EditEntityList(box_New_List,false); + + //序列号操作记录 + var res = await this.SerialNumberOperate(soList, false); + //提交事务 + if (isTransaction) + { + if (!isSuccess) isRollback = true; + if (!res.Success) isRollback = true; + isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + } + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs index 99ef45d1..577c298d 100644 --- a/src/WMS.Web.Domain/Services/TakeStockService.cs +++ b/src/WMS.Web.Domain/Services/TakeStockService.cs @@ -39,11 +39,13 @@ namespace WMS.Web.Domain.Services private readonly ILogger _logger; private readonly IBoxInventoryService _boxInventoryService; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + private readonly ISerialNumberService _serialNumberService; public TakeStockService(IMapper mapper, ILoginService loginService, IBasicsRepositories transactionRepositories, ITakeStockRepositories takeStockRepositories, ILoginRepositories loginRepositories, ISingleDataService singleDataService, IErpService erpService, ILogger logger, - IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService) + IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService, + ISerialNumberService serialNumberService) { _mapper = mapper; _loginService = loginService; @@ -55,6 +57,7 @@ namespace WMS.Web.Domain.Services _logger = logger; _boxInventoryService = boxInventoryService; _erpBasicDataExtendService = erpBasicDataExtendService; + _serialNumberService = serialNumberService; } /// /// 保存 @@ -114,6 +117,11 @@ namespace WMS.Web.Domain.Services if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); } if (res_Rollback.IsSuccess) + { + var res_change = await _serialNumberService.TakeStock(list, loginInfo, false); + if (!res_change.IsSuccess) res_Rollback = res_change; + } + if (res_Rollback.IsSuccess) { var res_Inventory = await _boxInventoryService.GenerateTakeBox(list, false); if (!res_Inventory.IsSuccess) res_Rollback = res_Inventory; diff --git a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs index 34d8f68d..a46aeb18 100644 --- a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs +++ b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs @@ -93,6 +93,11 @@ namespace WMS.Web.Domain.Values /// [EnumRemark("出库回退上架")] BackRecord_On = 16, - + /// + /// 盘点 + /// + [EnumRemark("盘点")] + TakeStock = 17, + } } From 347d12736ed282c22f339c82975b6bc1f7853394 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 11:43:06 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=B1=E5=B7=AE?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E5=8D=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SysConfigController.cs | 24 ++++++++++++++- .../Infrastructure/IOutStockRepositories.cs | 3 ++ .../OutStockRepositories.cs | 30 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index e03f3ae8..d5f9ccc6 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -37,10 +37,11 @@ namespace WMS.Web.Api.Controllers private readonly IBoxInventoryRepositories _boxInventoryRepositories; private readonly IMapper _mapper; private readonly IErpBasicDataExtendService _erpBasicDataExtendService; + private readonly IOutStockRepositories _outStockRepositories; public SysConfigController(ILoginService loginService, IBasicsRepositories basicsRepositories, IBoxRepositories boxRepositories, IErpService erpService, ISingleDataService singleDataService, ISerialNumbersRepositories serialNumbersRepositories, IBoxInventoryRepositories boxInventoryRepositories, - IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService) + IMapper mapper, IErpBasicDataExtendService erpBasicDataExtendService, IOutStockRepositories outStockRepositories) { _loginService = loginService; _basicsRepositories = basicsRepositories; @@ -51,6 +52,7 @@ namespace WMS.Web.Api.Controllers _boxInventoryRepositories = boxInventoryRepositories; _mapper = mapper; _erpBasicDataExtendService = erpBasicDataExtendService; + _outStockRepositories = outStockRepositories; } /// @@ -357,6 +359,26 @@ namespace WMS.Web.Api.Controllers return Result.ReSuccess(res.First()); } + + /// + /// 根据箱号获取箱对应出库单信息 最新一条 + /// + /// 必填 + /// + [HttpGet] + [Route("GetBox_OutStock")] + public async Task> GetBox_OutStock([FromQuery] string boxBillNo) + { + var res = await _boxRepositories.GetBox(new List() { boxBillNo }); + if (res.Count() <= 0) + return Result.ReFailure("箱号" + boxBillNo + "不存在", 800000); + var response = res[0]; + var detail = await _outStockRepositories.GetDetailsByBoxId(response.Id); + response.Details = detail; + response.TotalQty = detail.Sum(s => s.Qty); + return Result.ReSuccess(response); + } + /// /// 根据序列号或规格型号,物料编码搜索物料信息-PDA /// diff --git a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs index 3d42c2f2..9b917767 100644 --- a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Domain.Entitys; @@ -23,5 +24,7 @@ namespace WMS.Web.Domain.Infrastructure Task EditEntityList(List entitys, bool isTransaction = true); //获取详情 Task GetInfo(int id); + //获取出库单明细 + Task> GetDetailsByBoxId(int boxId); } } diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index ca96dc0e..18d0e857 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Help; @@ -320,5 +321,34 @@ namespace WMS.Web.Repositories { return await GetListAsync(dto); } + + public async Task> GetDetailsByBoxId(int boxId) + { + var res = await _context.OutStock + .Include(s => s.Details).ThenInclude(s => s.ErpDetails) + .Include(s => s.Details).ThenInclude(s => s.BoxsDetails.Where(w => w.BoxId == boxId)) + .Where(f => f.Details.SelectMany(s => s.BoxsDetails).Where(w => w.BoxId == boxId).Any()) + .OrderByDescending(o => o.Id) + .FirstAsync(); + List details = new List(); + + var materials_result = await _erpService.BillQueryForMaterial(); + if (!materials_result.IsSuccess) + return new List(); + var materials = materials_result.Data.ToList(); + + foreach (var d in res.Details) + { + BoxDetailResponse detail = new BoxDetailResponse(); + detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId); + detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId); + detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId); + detail.SerialNumbers = d.SerialNumbers; + detail.MaterialId = d.MaterialId; + detail.Qty = d.BoxsDetails.FirstOrDefault(f => f.BoxId == boxId)?.Qty ?? 0; + details.Add(detail); + } + return details; + } } } From a32f9e50f8f2507a4b705a5ae40fda49d2c088f1 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 11:44:49 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml | 7 +++++++ src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index 96a36ff3..c4befb68 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -517,6 +517,13 @@ 必填 + + + 根据箱号获取箱对应出库单信息 最新一条 + + 必填 + + 根据序列号或规格型号,物料编码搜索物料信息-PDA diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 1696ac01..d4db2e29 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -5503,6 +5503,11 @@ 出库回退上架 + + + 盘点 + + 非采购上架方式 From d2adf51555cb8c7c51136493cd9fc3abef2af0e6 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 11:56:30 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Repositories/OutStockRepositories.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index 18d0e857..bafd2ad8 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -339,13 +339,15 @@ namespace WMS.Web.Repositories foreach (var d in res.Details) { + var boxDetail = d.BoxsDetails.FirstOrDefault(f => f.BoxId == boxId); + if (boxDetail == null) continue; BoxDetailResponse detail = new BoxDetailResponse(); detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId); detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId); detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId); detail.SerialNumbers = d.SerialNumbers; detail.MaterialId = d.MaterialId; - detail.Qty = d.BoxsDetails.FirstOrDefault(f => f.BoxId == boxId)?.Qty ?? 0; + detail.Qty = boxDetail.Qty; details.Add(detail); } return details; From be93afa55984d198147cbcb0525a8527414c7d46 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 13:31:14 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Domain/Services/SerialNumberService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/WMS.Web.Domain/Services/SerialNumberService.cs b/src/WMS.Web.Domain/Services/SerialNumberService.cs index 5485fc91..a7230e0d 100644 --- a/src/WMS.Web.Domain/Services/SerialNumberService.cs +++ b/src/WMS.Web.Domain/Services/SerialNumberService.cs @@ -469,6 +469,7 @@ namespace WMS.Web.Domain.Services } else { + if (s_entity.BoxId == takeStockDetail.BoxId) continue; s_entity.BoxId = takeStockDetail.BoxId; var takeStock = takeStocks.FirstOrDefault(w => w.Details.FirstOrDefault(w => w.SerialNumbers.Contains(s)) != null); From ef2e5916c1c43212097b00d9d793ad35fb0fe919 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Mon, 18 Dec 2023 13:38:18 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Repositories/OutStockRepositories.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index bafd2ad8..e3885d86 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -342,9 +342,9 @@ namespace WMS.Web.Repositories var boxDetail = d.BoxsDetails.FirstOrDefault(f => f.BoxId == boxId); if (boxDetail == null) continue; BoxDetailResponse detail = new BoxDetailResponse(); - detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId); - detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId); - detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId); + detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, d.MaterialId); + detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, d.MaterialId); + detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, d.MaterialId); detail.SerialNumbers = d.SerialNumbers; detail.MaterialId = d.MaterialId; detail.Qty = boxDetail.Qty;