From ba2d1e672362fca72363d5aff76d4018a5007752 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 31 Oct 2023 15:08:35 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=94=B9=E7=AE=B1=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/SysConfigController.cs | 14 +++---- src/WMS.Web.Core/Dto/BoxDetailResponse.cs | 10 +---- src/WMS.Web.Core/Dto/BoxResponse.cs | 25 +++++++++++ .../SaveChangeBoxRecordRequest.cs | 19 +++------ src/WMS.Web.Domain/Entitys/BoxDetails.cs | 2 +- src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs | 7 +++- .../Infrastructure/IBoxRepositories.cs | 4 +- src/WMS.Web.Repositories/BoxRepositories.cs | 42 +++++++++++-------- .../Configuration/RepositoryDbContext.cs | 10 +++++ 9 files changed, 81 insertions(+), 52 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/BoxResponse.cs diff --git a/src/WMS.Web.Api/Controllers/SysConfigController.cs b/src/WMS.Web.Api/Controllers/SysConfigController.cs index 4488185a..def8569c 100644 --- a/src/WMS.Web.Api/Controllers/SysConfigController.cs +++ b/src/WMS.Web.Api/Controllers/SysConfigController.cs @@ -118,17 +118,17 @@ namespace WMS.Web.Api.Controllers /// 必填 /// [HttpGet] - [Route("GetBoxDetails")] - public async Task> GetBoxDetails([FromQuery] string billNo) + [Route("GetBox")] + public async Task> GetBox([FromQuery] string billNo) { var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); if (loginInfo == null || loginInfo.UserInfo == null) - return ResultList.ReFailure(ResultCodes.Token_Invalid_Error); - if(string.IsNullOrEmpty(billNo)) - return ResultList.ReSuccess(new List()); + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + if (string.IsNullOrEmpty(billNo)) + return Result.ReSuccess(null); - var r = await _boxRepositories.GetDetails(billNo); - return ResultList.ReSuccess(r); + var r = await _boxRepositories.GetBox(billNo); + return Result.ReSuccess(r); } } } diff --git a/src/WMS.Web.Core/Dto/BoxDetailResponse.cs b/src/WMS.Web.Core/Dto/BoxDetailResponse.cs index 0e50d697..ea6103f0 100644 --- a/src/WMS.Web.Core/Dto/BoxDetailResponse.cs +++ b/src/WMS.Web.Core/Dto/BoxDetailResponse.cs @@ -9,14 +9,6 @@ namespace WMS.Web.Core.Dto /// public class BoxDetailResponse { - /// - /// 单据头ID - /// - public int Fid { get; set; } - /// - /// 箱Id - /// - public int BoxId { get; set; } /// /// 物料ID /// @@ -44,6 +36,6 @@ namespace WMS.Web.Core.Dto /// /// 序列号集 /// - public string SerialNumbers { get; set; } + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Core/Dto/BoxResponse.cs b/src/WMS.Web.Core/Dto/BoxResponse.cs new file mode 100644 index 00000000..2a43290b --- /dev/null +++ b/src/WMS.Web.Core/Dto/BoxResponse.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto +{ + /// + /// 箱信息(头部) + /// + public class BoxResponse + { + /// + /// 单据头ID + /// + public int Id { get; set; } + /// + /// 箱Id + /// + public int BoxId { get; set; } + /// + /// 明细信息 + /// + public List Details = new List(); + } +} diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index 3aa186f7..e443118b 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -16,11 +16,6 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord [Required(ErrorMessage = "物料不能为空")] public int MaterialId { get; set; } /// - /// 仓库Id - /// - [Required(ErrorMessage = "仓库不能为空")] - public int StockId { get; set; } - /// /// 原箱子ID /// [Required(ErrorMessage = "原箱子不能为空")] @@ -31,14 +26,10 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord [Required(ErrorMessage = "目标箱子不能为空")] public int DestBoxId { get; set; } /// - /// 原仓位ID - /// - [Required(ErrorMessage = "原仓位不能为空")] - public int SrcSubStockId { get; set; } - /// - /// 目标仓位ID - /// - [Required(ErrorMessage = "目标仓位不能为空")] - public int DestSubStockId { get; set; } + /// 数量 + /// + [Required(ErrorMessage = "数量不能为空")] + public decimal Qty { get; set; } + } } diff --git a/src/WMS.Web.Domain/Entitys/BoxDetails.cs b/src/WMS.Web.Domain/Entitys/BoxDetails.cs index fa75df3f..1b066b16 100644 --- a/src/WMS.Web.Domain/Entitys/BoxDetails.cs +++ b/src/WMS.Web.Domain/Entitys/BoxDetails.cs @@ -37,6 +37,6 @@ namespace WMS.Web.Domain.Entitys /// /// 序列号集 /// - public string SerialNumbers { get; set; } + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs b/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs index c7ce8ee6..6382327e 100644 --- a/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs +++ b/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs @@ -33,13 +33,18 @@ namespace WMS.Web.Domain.Entitys /// 序列号 /// [Column("SerialNumbers")] - public string SerialNumbers { get; set; } + public List SerialNumbers { get; set; } = new List(); /// /// 原箱子ID /// [Column("SrcBoxId")] public int SrcBoxId { get; set; } /// + /// 数量 + /// + [Column("Qty")] + public decimal Qty { get; set; } + /// /// 目标箱子ID /// [Column("DestBoxId")] diff --git a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs index 70bcfc01..0fa4ce3a 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs @@ -13,7 +13,7 @@ namespace WMS.Web.Domain.Infrastructure public interface IBoxRepositories { Task Get(string BoxBillNo); - //根据箱号查询物料信息 - Task> GetDetails(string BoxBillNo); + //根据箱号查询明细信息 + Task GetBox(string BoxBillNo); } } diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 51b195e0..54e66981 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -45,25 +45,31 @@ namespace WMS.Web.Repositories /// /// /// - public async Task> GetDetails(string BoxBillNo) + public async Task GetBox(string BoxBillNo) { - return await _context.BoxDetails - .GroupJoin(_context.Box, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) - .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) - .Where(w => w.order.BoxBillNo.Equals(BoxBillNo)) - .Select(s => new BoxDetailResponse() - { - Fid = s.detail.Fid, - BoxId = s.order.OpsBoxId, - MaterialId = s.detail.MaterialId, - MaterialName = "", - MaterialNumber = "", - Specifications = "", - SerialNumbers = s.detail.SerialNumbers, - SupplierId = s.detail.SupplierId, - Qty = s.detail.Qty - }) - .ToListAsync(); + var entity = await _context.Box.FirstOrDefaultAsync(f => f.BoxBillNo.Equals(BoxBillNo)); + if (entity == null) return null; + BoxResponse result = new BoxResponse() + { + Id = entity.Id, + BoxId = entity.OpsBoxId + }; + result.Details = await _context.BoxDetails + .GroupJoin(_context.Box, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) + .SelectMany(x => x.orders.DefaultIfEmpty(), (p, order) => new { p.detail, order }) + .Where(w => w.order.BoxBillNo.Equals(BoxBillNo)) + .Select(s => new BoxDetailResponse() + { + MaterialId = s.detail.MaterialId, + MaterialName = "", + MaterialNumber = "", + Specifications = "", + SerialNumbers = s.detail.SerialNumbers, + SupplierId = s.detail.SupplierId, + Qty = s.detail.Qty + }) + .ToListAsync(); + return result; } } } diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs index 80f4c4d1..23bdb3fe 100644 --- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs +++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs @@ -1,9 +1,11 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Debug; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Text; +using System.Text.Json; using WMS.Web.Domain.Entitys; using WMS.Web.Repositories.Configuration.Log; @@ -35,6 +37,10 @@ namespace WMS.Web.Repositories.Configuration { ent.ToTable("t_wms_changebox_record"); ent.HasKey(x => x.Id); + + ent.Property(f => f.SerialNumbers).HasConversion( + v => JsonConvert.SerializeObject(v), + v => JsonConvert.DeserializeObject>(v)); }); //移箱 builder.Entity(ent => @@ -197,6 +203,10 @@ namespace WMS.Web.Repositories.Configuration { ent.ToTable("t_ops_box_details"); ent.HasKey(x => x.Id); + + ent.Property(f => f.SerialNumbers).HasConversion( + v => JsonConvert.SerializeObject(v), + v => JsonConvert.DeserializeObject>(v)); }); #endregion From f011244048fb660caea0c7da19ce424c8598d4a1 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 31 Oct 2023 15:12:17 +0800 Subject: [PATCH 2/5] =?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.Api/wwwroot/WMS.Web.Api.xml | 2 +- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 48 +++++++++---------- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 5 ++ .../ChangeBoxRecordRepositories.cs | 3 +- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index f52f3a5d..966ca712 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -249,7 +249,7 @@ 仓库模糊匹配 不必填 - + 根据箱号获取箱信息 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 6ad4f45b..3a673fb1 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -230,16 +230,6 @@ 根据箱号获取物料信息 - - - 单据头ID - - - - - 箱Id - - 物料ID @@ -275,6 +265,26 @@ 序列号集 + + + 箱信息(头部) + + + + + 单据头ID + + + + + 箱Id + + + + + 明细信息 + + 改箱列表请求 @@ -390,11 +400,6 @@ 物料ID - - - 仓库Id - - 原箱子ID @@ -405,15 +410,10 @@ 目标箱子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 2452347b..22a88a65 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -235,6 +235,11 @@ 原箱子ID + + + 数量 + + 目标箱子ID diff --git a/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs b/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs index 5637de04..eb44847e 100644 --- a/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs +++ b/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs @@ -1,6 +1,7 @@ using AutoMapper; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -117,7 +118,7 @@ namespace WMS.Web.Repositories MaterialNumber = "", Specifications = "", Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.changeBox.StockId), - SerialNumbers = s.changeBox.SerialNumbers, + SerialNumbers = JsonConvert.SerializeObject(s.changeBox.SerialNumbers), SrcBox = s.srcBox.BoxBillNo, DestBox = s.destBox.BoxBillNo, SrcSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.changeBox.SrcSubStockId), From fad2cb04cf3a0dfb7a6ed1e485a483880e951ddb Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 31 Oct 2023 15:14:54 +0800 Subject: [PATCH 3/5] =?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.Core/Dto/BoxResponse.cs | 4 ++-- src/WMS.Web.Repositories/BoxRepositories.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/WMS.Web.Core/Dto/BoxResponse.cs b/src/WMS.Web.Core/Dto/BoxResponse.cs index 2a43290b..81965de6 100644 --- a/src/WMS.Web.Core/Dto/BoxResponse.cs +++ b/src/WMS.Web.Core/Dto/BoxResponse.cs @@ -14,9 +14,9 @@ namespace WMS.Web.Core.Dto /// public int Id { get; set; } /// - /// 箱Id + /// 箱号 /// - public int BoxId { get; set; } + public string BoxBillNo { get; set; } /// /// 明细信息 /// diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 54e66981..892fd0a5 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -52,7 +52,7 @@ namespace WMS.Web.Repositories BoxResponse result = new BoxResponse() { Id = entity.Id, - BoxId = entity.OpsBoxId + BoxBillNo = entity.BoxBillNo }; result.Details = await _context.BoxDetails .GroupJoin(_context.Box, detail => detail.Fid, order => order.Id, (detail, orders) => new { detail, orders }) From 4e453835324e99dda2ed350fecf57143e2e6c47a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 31 Oct 2023 15:20:27 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaveChangeBoxRecordRequest.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index e443118b..7f4921dc 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -10,11 +10,6 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// public class SaveChangeBoxRecordRequest { - /// - /// 物料ID - /// - [Required(ErrorMessage = "物料不能为空")] - public int MaterialId { get; set; } /// /// 原箱子ID /// @@ -25,11 +20,23 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// [Required(ErrorMessage = "目标箱子不能为空")] public int DestBoxId { get; set; } + + public List Details = new List(); + } + /// + /// 明细 + /// + public class SaveChangeBoxRecordDetailsRequest + { + /// + /// 物料ID + /// + [Required(ErrorMessage = "物料不能为空")] + public int MaterialId { get; set; } /// /// 数量 /// [Required(ErrorMessage = "数量不能为空")] public decimal Qty { get; set; } - } } From c1c3ec29281374b510cf9fecb3f75c1186321772 Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Tue, 31 Oct 2023 16:06:51 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=94=B9=E7=AE=B1=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 26 ++++++---- src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 20 ++------ .../SaveChangeBoxRecordRequest.cs | 4 ++ src/WMS.Web.Domain/Entitys/Box.cs | 44 ++++++++++++++++- src/WMS.Web.Domain/Entitys/BoxDetails.cs | 5 +- src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs | 25 ++++------ .../Infrastructure/IBoxRepositories.cs | 4 +- .../IChangeBoxRecordRepositories.cs | 2 + .../Services/ChangeMoveBoxService.cs | 43 ++++++++++++++--- src/WMS.Web.Domain/Values/ResultCodes.cs | 3 ++ src/WMS.Web.Repositories/BoxRepositories.cs | 47 +++++++++++++++++-- .../ChangeBoxRecordRepositories.cs | 46 ++++++++++++++---- 12 files changed, 205 insertions(+), 64 deletions(-) diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index 3a673fb1..f20aa460 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -275,9 +275,9 @@ 单据头ID - + - 箱Id + 箱号 @@ -395,11 +395,6 @@ 保存改箱 - - - 物料ID - - 原箱子ID @@ -410,11 +405,26 @@ 目标箱子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 22a88a65..fcc8a227 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -220,11 +220,6 @@ 物料ID - - - 仓库Id - - 序列号 @@ -245,16 +240,6 @@ 目标箱子ID - - - 原仓位ID - - - - - 目标仓位ID - - 操作人 @@ -265,11 +250,14 @@ 操作时间 - + 创建 + + + diff --git a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs index 7f4921dc..ef24724b 100644 --- a/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs +++ b/src/WMS.Web.Core/Dto/ChangeBoxRecord/SaveChangeBoxRecordRequest.cs @@ -38,5 +38,9 @@ namespace WMS.Web.Core.Dto.ChangeBoxRecord /// [Required(ErrorMessage = "数量不能为空")] public decimal Qty { get; set; } + /// + /// 序列号 + /// + public List SerialNumbers { get; set; } = new List(); } } diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs index d3c0512e..5270dce2 100644 --- a/src/WMS.Web.Domain/Entitys/Box.cs +++ b/src/WMS.Web.Domain/Entitys/Box.cs @@ -1,7 +1,11 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Text; +using WMS.Web.Core; +using WMS.Web.Core.Internal.Results; +using WMS.Web.Domain.Values; namespace WMS.Web.Domain.Entitys { @@ -11,12 +15,12 @@ namespace WMS.Web.Domain.Entitys [Serializable] [Table("t_ops_box")] - public class Box + public class Box : EntityBase { /// /// ID /// - public int Id { get; set; } + public override int Id { get; set; } /// /// 对应老OPS的箱ID @@ -37,5 +41,41 @@ namespace WMS.Web.Domain.Entitys /// 明细 /// public List Details = new List(); + + //移出 + public Result Out(List<(int MaterialId, decimal Qty, List SerialNumbers)> list) + { + foreach(var l in list) + { + var d = this.Details.FirstOrDefault(f => f.MaterialId == l.MaterialId); + if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData); + d.Qty = d.Qty - l.Qty; + if (d.Qty <= 0) this.Details.Remove(d); + foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s); + } + return Result.ReSuccess(); + } + + //移入 + public Result In(List<(int MaterialId, decimal Qty, List SerialNumbers)> list) + { + foreach (var l in list) + { + var d = this.Details.FirstOrDefault(f => f.MaterialId == l.MaterialId); + if (d == null) + { + this.Details.Add(new BoxDetails() + { + MaterialId = l.MaterialId, + Qty=l.Qty, + SerialNumbers=l.SerialNumbers + }); + continue; + } + d.Qty = d.Qty + l.Qty; + d.SerialNumbers.AddRange(l.SerialNumbers); + } + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Entitys/BoxDetails.cs b/src/WMS.Web.Domain/Entitys/BoxDetails.cs index 1b066b16..c976d4ae 100644 --- a/src/WMS.Web.Domain/Entitys/BoxDetails.cs +++ b/src/WMS.Web.Domain/Entitys/BoxDetails.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Text; +using WMS.Web.Core; namespace WMS.Web.Domain.Entitys { @@ -11,12 +12,12 @@ namespace WMS.Web.Domain.Entitys [Serializable] [Table("t_ops_box_details")] - public class BoxDetails + public class BoxDetails : EntityBase { /// /// ID /// - public int Id { get; set; } + public override int Id { get; set; } /// /// 单据头ID diff --git a/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs b/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs index 6382327e..2d5b371d 100644 --- a/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs +++ b/src/WMS.Web.Domain/Entitys/ChangeBoxRecord.cs @@ -25,11 +25,6 @@ namespace WMS.Web.Domain.Entitys [Column("MaterialId")] public int MaterialId { get; set; } /// - /// 仓库Id - /// - [Column("StockId")] - public int StockId { get; set; } - /// /// 序列号 /// [Column("SerialNumbers")] @@ -50,16 +45,6 @@ namespace WMS.Web.Domain.Entitys [Column("DestBoxId")] public int DestBoxId { get; set; } /// - /// 原仓位ID - /// - [Column("SrcSubStockId")] - public int SrcSubStockId { get; set; } - /// - /// 目标仓位ID - /// - [Column("DestSubStockId")] - public int DestSubStockId { get; set; } - /// /// 操作人 /// [Column("CreatorId")] @@ -73,8 +58,16 @@ namespace WMS.Web.Domain.Entitys /// 创建 /// /// - public void Create(int creatorId) + /// + /// + /// + public void Create(int creatorId,decimal qty,int materialId, List serialNumbers,int srcBoxId,int destBoxId) { + this.SrcBoxId = srcBoxId; + this.DestBoxId = destBoxId; + this.SerialNumbers = serialNumbers; + this.MaterialId = materialId; + this.Qty = qty; this.CreatorId = creatorId; this.CreateTime = DateTime.Now; } diff --git a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs index 0fa4ce3a..91f01e51 100644 --- a/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IBoxRepositories.cs @@ -12,8 +12,10 @@ namespace WMS.Web.Domain.Infrastructure /// public interface IBoxRepositories { - Task Get(string BoxBillNo); + Task Get(int id); //根据箱号查询明细信息 Task GetBox(string BoxBillNo); + //批量修改 + Task EditEntityList(List entitys, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Infrastructure/IChangeBoxRecordRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IChangeBoxRecordRepositories.cs index 945f4d21..e48e1183 100644 --- a/src/WMS.Web.Domain/Infrastructure/IChangeBoxRecordRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IChangeBoxRecordRepositories.cs @@ -12,6 +12,8 @@ namespace WMS.Web.Domain.Infrastructure { // 新增 Task Add(ChangeBoxRecord entity, bool isTransaction = true); + // 批量新增 + Task AddRange(List list, bool isTransaction = true); // 获取列表 Task<(List list,int total)> GetListAsync(ChangeBoxRecordQueryRequest dto); diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index 1682f60d..6cd7a3a9 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; +using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto.ChangeBoxRecord; @@ -24,15 +25,17 @@ namespace WMS.Web.Domain.Services private readonly IChangeBoxRecordRepositories _changeBoxRecordRepositories; public readonly ITransactionRepositories _transactionRepositories; private readonly IMoveBoxRecordRepositories _moveBoxRecordRepositories; - public ChangeMoveBoxService(IMapper mapper, ILoginService loginService, + private readonly IBoxRepositories _boxRepositories; + public ChangeMoveBoxService(IMapper mapper, ILoginService loginService, IChangeBoxRecordRepositories changeBoxRecordRepositories, ITransactionRepositories transactionRepositories, - IMoveBoxRecordRepositories moveBoxRecordRepositories) + IMoveBoxRecordRepositories moveBoxRecordRepositories, IBoxRepositories boxRepositories) { _mapper = mapper; _loginService = loginService; _changeBoxRecordRepositories = changeBoxRecordRepositories; _transactionRepositories = transactionRepositories; _moveBoxRecordRepositories = moveBoxRecordRepositories; + _boxRepositories = boxRepositories; } /// /// 改箱保存 @@ -40,10 +43,32 @@ namespace WMS.Web.Domain.Services /// /// /// - public async Task ChangeBoxSave(SaveChangeBoxRecordRequest dto, LoginInDto loginInfo) + public async Task ChangeBoxSave(SaveChangeBoxRecordRequest dto, LoginInDto loginInfo) { - var entity = _mapper.Map(dto); - entity.Create(loginInfo.UserInfo.StaffId); + List boxList = new List(); + var srcBox = await _boxRepositories.Get(dto.SrcBoxId); + var destBox = await _boxRepositories.Get(dto.DestBoxId); + if (srcBox == null) return Result.ReFailure(ResultCodes.BoxNoData); + if (destBox == null) return Result.ReFailure(ResultCodes.BoxNoData); + var l = dto.Details.Select(s => (s.MaterialId, s.Qty, s.SerialNumbers)).ToList(); + //原箱移出 + var res = srcBox.Out(l); + if (!res.IsSuccess) return res; + //目标箱移入 + res = destBox.In(l); + if (!res.IsSuccess) return res; + + boxList.Add(srcBox); + boxList.Add(destBox); + + //var entity = _mapper.Map(dto);\ + List list = new List(); + foreach (var d in dto.Details) + { + ChangeBoxRecord entity = new ChangeBoxRecord(); + entity.Create(loginInfo.UserInfo.StaffId, d.Qty, d.MaterialId, d.SerialNumbers, dto.SrcBoxId, dto.DestBoxId); + list.Add(entity); + } //需要填写序列号 //需要修改库存 @@ -51,8 +76,12 @@ namespace WMS.Web.Domain.Services IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); bool isRollback = false; bool isSuccess = true; - entity = await _changeBoxRecordRepositories.Add(entity, true); - if (entity == null) isRollback = true; + isSuccess = await _changeBoxRecordRepositories.AddRange(list, false); + if (!isSuccess) isRollback = true; + + isSuccess = await _boxRepositories.EditEntityList(boxList, false); + if (!isSuccess) isRollback = true; + //提交事务 isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index cddf6d70..a3fcd4bf 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -24,5 +24,8 @@ namespace WMS.Web.Domain.Values //出库任务单 public static ValueTuple MergeStatusError = (70000, "所选单据数据不一致,不能合并"); + + public static ValueTuple BoxNoData = (80000, "箱信息不存在"); + public static ValueTuple BoxMateriaNoData = (800010, "箱对应物料信息不存在"); } } diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs index 892fd0a5..de1108fd 100644 --- a/src/WMS.Web.Repositories/BoxRepositories.cs +++ b/src/WMS.Web.Repositories/BoxRepositories.cs @@ -1,14 +1,17 @@ using AutoMapper; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WMS.Web.Core.Dto; +using WMS.Web.Core.Help; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService.Public; +using WMS.Web.Domain.Mappers; using WMS.Web.Repositories.Configuration; namespace WMS.Web.Repositories @@ -35,10 +38,12 @@ namespace WMS.Web.Repositories _loginRepositories = loginRepositories; _basicsRepositories = basicsRepositories; } - public async Task Get(string BoxBillNo) + public async Task Get(int id) { - return await _context.Box.Include(x => x.Details) - .FirstOrDefaultAsync(f => f.BoxBillNo.Equals(BoxBillNo)); + var entity= await _context.Box.Include(x => x.Details) + .FirstOrDefaultAsync(f => f.Id.Equals(id)); + + return entity.Clone(); } /// /// 根据箱号查询物料信息 @@ -71,5 +76,41 @@ namespace WMS.Web.Repositories .ToListAsync(); return result; } + + /// + /// 批量修改 + /// + /// + /// + /// + public async Task EditEntityList(List entitys, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + List list = entitys.Select(s => s.Id).ToList(); + + var res = await _context.Box + .Include(s => s.Details) + .Where(f => list.Contains(f.Id)).ToListAsync(); + + _mapper.ToMapList(entitys, res); + _mapper.ToMapList(entitys.SelectMany(s => s.Details).ToList(), res.SelectMany(s => s.Details).ToList()); + + await _context.SaveChangesAsync(); + if (_transaction != null) + _transaction.Commit(); + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + return true; + + } } } diff --git a/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs b/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs index eb44847e..59d182ca 100644 --- a/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs +++ b/src/WMS.Web.Repositories/ChangeBoxRecordRepositories.cs @@ -71,6 +71,34 @@ namespace WMS.Web.Repositories } } + /// + /// 批量添加 + /// + /// + /// + /// + public async Task AddRange(List list, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + try + { + _context.ChangeBoxRecord.AddRange(list); + await _context.SaveChangesAsync(); + + if (_transaction != null) + _transaction.Commit(); + return true; + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + } + /// /// 列表 /// @@ -99,12 +127,12 @@ namespace WMS.Web.Repositories query = query.Where(w => EF.Functions.Like(w.srcBox.BoxBillNo, "%" + dto.SrcBox + "%")); if (!string.IsNullOrEmpty(dto.DestBox)) query = query.Where(w => EF.Functions.Like(w.destBox.BoxBillNo, "%" + dto.DestBox + "%")); - if (dto.StockId != null) - query = query.Where(w => w.changeBox.StockId == dto.StockId); - if (dto.SrcSubStockId != null) - query = query.Where(w => w.changeBox.SrcSubStockId == dto.SrcSubStockId); - if (dto.DestSubStockId != null) - query = query.Where(w => w.changeBox.DestSubStockId == dto.DestSubStockId); + //if (dto.StockId != null) + // query = query.Where(w => w.changeBox.StockId == dto.StockId); + //if (dto.SrcSubStockId != null) + // query = query.Where(w => w.changeBox.SrcSubStockId == dto.SrcSubStockId); + //if (dto.DestSubStockId != null) + // query = query.Where(w => w.changeBox.DestSubStockId == dto.DestSubStockId); if (dto.CreateBeginDate != null) query = query.Where(w => w.changeBox.CreateTime >= dto.CreateBeginDate); if (dto.CreateEndDate != null) @@ -117,12 +145,12 @@ namespace WMS.Web.Repositories MaterialName = "", MaterialNumber = "", Specifications = "", - Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.changeBox.StockId), + //Stock = _singleDataService.GetSingleData(SingleAction.Stocks, _loginRepositories.CompanyId, s.changeBox.StockId), SerialNumbers = JsonConvert.SerializeObject(s.changeBox.SerialNumbers), SrcBox = s.srcBox.BoxBillNo, DestBox = s.destBox.BoxBillNo, - SrcSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.changeBox.SrcSubStockId), - DestSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.changeBox.DestSubStockId), + //SrcSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.changeBox.SrcSubStockId), + //DestSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, _loginRepositories.CompanyId, s.changeBox.DestSubStockId), Creator = _singleDataService.GetSingleData(SingleAction.Staffs, _loginRepositories.CompanyId, s.changeBox.CreatorId), CreateTime = s.changeBox.CreateTime.DateToStringSeconds() #endregion