From 8abdbd9746643d69b0a5eba49347bcac1c8b494f Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Sat, 28 Oct 2023 14:53:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=BA=93=E4=BB=BB=E5=8A=A1=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E5=92=8C=E4=BD=9C=E5=BA=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 | Bin 225182 -> 225182 bytes .../Controllers/OutStockTaskController.cs | 34 +++++++ src/WMS.Web.Core/Dto/OperateRequest.cs | 22 +++++ src/WMS.Web.Domain/Entitys/OutStockTask.cs | 45 ++++++++- .../IService/IOutStockService.cs | 7 +- .../Infrastructure/IOutStockRepositories.cs | 4 + .../IOutStockTaskRepositories.cs | 7 ++ .../Services/OutStockService.cs | 57 +++++++++++- src/WMS.Web.Domain/Values/ResultCodes.cs | 4 + .../OutStockRepositories.cs | 50 ++++++++++ .../OutStockTaskRepositories.cs | 87 +++++++++++++++++- 11 files changed, 312 insertions(+), 5 deletions(-) create mode 100644 src/WMS.Web.Core/Dto/OperateRequest.cs diff --git a/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 b/.vs/WMS.Web/DesignTimeBuild/.dtbcache.v2 index 12ed97eb805fe49c78c3ffeb4abed863b445d550..20883aa23cee1caacb22e25b5c4b764981cf6e55 100644 GIT binary patch delta 33303 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
    6>&ff@h(5$1r8|SpaS0G2fe^S1sqbq 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 Kmi5MG+y5U8Z<1;N delta 9347 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 SIT{{!ooJK7FZ_aBIru*UKJ-lh diff --git a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs index 2a97a0b2..07d6b5b6 100644 --- a/src/WMS.Web.Api/Controllers/OutStockTaskController.cs +++ b/src/WMS.Web.Api/Controllers/OutStockTaskController.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.OutStockTask; using WMS.Web.Core.Internal.Results; using WMS.Web.Domain.Infrastructure; @@ -50,5 +51,38 @@ namespace WMS.Web.Api.Controllers var result = ResultPagedList.ReSuccess(list, count); return result; } + + /// + /// 作废 + /// + /// + /// + [HttpPost] + [Route("Repeal")] + public async Task Repeal(OperateRequest dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + return await _outStockService.Repeal(dto,loginInfo); + } + + /// + /// 合并 + /// + /// + /// + [HttpPost] + [Route("merge")] + public async Task merge(OperateRequest dto) + { + var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); + if (loginInfo == null || loginInfo.UserInfo == null) + return Result.ReFailure(ResultCodes.Token_Invalid_Error); + + return await _outStockService.merge(dto, loginInfo); + } + } } diff --git a/src/WMS.Web.Core/Dto/OperateRequest.cs b/src/WMS.Web.Core/Dto/OperateRequest.cs new file mode 100644 index 00000000..1d8ba550 --- /dev/null +++ b/src/WMS.Web.Core/Dto/OperateRequest.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Core.Dto +{ + /// + /// 操作 Id集合 + /// + public class OperateRequest + { + public List Ids { get; set; } = new List(); + } + + /// + /// 操作 Id集合 + /// + public class OperatePagedRequest : PaginationBaseRequestDto + { + public List Ids { get; set; } = new List(); + } +} diff --git a/src/WMS.Web.Domain/Entitys/OutStockTask.cs b/src/WMS.Web.Domain/Entitys/OutStockTask.cs index 00a82828..9a5a4cca 100644 --- a/src/WMS.Web.Domain/Entitys/OutStockTask.cs +++ b/src/WMS.Web.Domain/Entitys/OutStockTask.cs @@ -1,8 +1,10 @@ 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 @@ -12,7 +14,7 @@ namespace WMS.Web.Domain.Entitys /// [Serializable] [Table("t_erp_outstock_task")] - public class OutStockTask: EntityBase + public class OutStockTask : EntityBase { public OutStockTask() { } /// @@ -49,5 +51,46 @@ namespace WMS.Web.Domain.Entitys /// 明细 /// public List Details = new List(); + + /// + /// 作废 + /// + public void Repeal(int creatorId) + { + this.OperatorId = creatorId; + this.OperateTime = DateTime.Now; + this.Status = OutStockStatus.Repeal; + } + /// + /// 合并 + /// + /// + /// + /// + public Result Merge(List list, int creatorId) + { + // 符合合并数据逻辑:出库状态为”待拣货”+出库类型为:销售出库+发货组织一致+收货客户一致+发货仓库一致 + if (list.Where(w => w.Status != OutStockStatus.Wait).Any()) return Result.ReFailure(ResultCodes.MergeStatusError); + if (list.Where(w => w.Type != OrderType.Sal_Out).Any()) return Result.ReFailure(ResultCodes.MergeStatusError); + + var details = list.SelectMany(s => s.Details).ToList(); + if (details.GroupBy(g => g.DeliveryOrgId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError); + if (details.GroupBy(g => g.ReceiptCustomerId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError); + if (details.GroupBy(g => g.StockId).Count() > 1) return Result.ReFailure(ResultCodes.MergeStatusError); + + //清空数据绑定 + foreach (var d in details) + { + d.Id = 0; + d.Fid = 0; + } + this.OperatorId = creatorId; + this.OperateTime = DateTime.Now; + this.Status = OutStockStatus.Wait; + this.Type = OrderType.Sal_Out; + this.Details = details; + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/IService/IOutStockService.cs b/src/WMS.Web.Domain/IService/IOutStockService.cs index ea8873b0..a2915edc 100644 --- a/src/WMS.Web.Domain/IService/IOutStockService.cs +++ b/src/WMS.Web.Domain/IService/IOutStockService.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using WMS.Web.Core.Dto; using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Internal.Results; @@ -18,7 +19,9 @@ namespace WMS.Web.Domain.IService Task Save(List dto, LoginInDto loginInfo); // 同步金蝶 Task Sync(int id); - - + //出库任务作废 + Task Repeal(OperateRequest dto, LoginInDto loginInfo); + //出库任务作废 + Task merge(OperateRequest dto, LoginInDto loginInfo); } } diff --git a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs index f6ec7a34..8c0948a4 100644 --- a/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IOutStockRepositories.cs @@ -13,5 +13,9 @@ namespace WMS.Web.Domain.Infrastructure Task Add(OutStock entity, bool isTransaction = true); // 获取列表 Task<(List list, int total)> GetListAsync(OutStockQueryRequest dto); + /// 查询实体集合 + Task> GetEntityList(List ids); + /// 修改实体集合 + Task EditEntityList(List entitys, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Infrastructure/IOutStockTaskRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IOutStockTaskRepositories.cs index e041570a..2df89219 100644 --- a/src/WMS.Web.Domain/Infrastructure/IOutStockTaskRepositories.cs +++ b/src/WMS.Web.Domain/Infrastructure/IOutStockTaskRepositories.cs @@ -13,5 +13,12 @@ namespace WMS.Web.Domain.Infrastructure Task Add(OutStockTask entity, bool isTransaction = true); // 获取列表 Task<(List list, int total)> GetListAsync(OutStockTaskQueryRequest dto); + /// 查询实体集合 + Task> GetEntityList(List ids); + /// 修改实体集合 + Task EditEntityList(List entitys, bool isTransaction = true); + + /// 删除实体集合 + Task DeleteEntityList(List ids, bool isTransaction = true); } } diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs index 18a4683f..d2846b24 100644 --- a/src/WMS.Web.Domain/Services/OutStockService.cs +++ b/src/WMS.Web.Domain/Services/OutStockService.cs @@ -2,8 +2,10 @@ 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.Dto.Login; using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Dto.TakeStock; @@ -25,15 +27,23 @@ namespace WMS.Web.Domain.Services private readonly ILoginService _loginService; public readonly ITransactionRepositories _transactionRepositories; private readonly IOutStockRepositories _outStockRepositories; + private readonly IOutStockTaskRepositories _outStockTaskRepositories; public OutStockService(IMapper mapper, ILoginService loginService, ITransactionRepositories transactionRepositories, - IOutStockRepositories outStockRepositories) + IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories) { _mapper = mapper; _loginService = loginService; _transactionRepositories = transactionRepositories; _outStockRepositories = outStockRepositories; + _outStockTaskRepositories = outStockTaskRepositories; } + /// + /// 出库单 + /// + /// + /// + /// public async Task Save(List dto, LoginInDto loginInfo) { OutStock entity = new OutStock(); @@ -66,5 +76,50 @@ namespace WMS.Web.Domain.Services { return Task.FromResult(Result.ReSuccess()); } + /// + /// 出库任务作废 + /// + /// + /// + public async Task Repeal(OperateRequest dto, LoginInDto loginInfo) + { + var list = await _outStockTaskRepositories.GetEntityList(dto.Ids); + foreach (var entity in list) + { + //作废 + entity.Repeal(loginInfo.UserInfo.StaffId); + } + var isSuccess = await _outStockTaskRepositories.EditEntityList(list, true); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } + /// + /// 出库任务合并 + /// + /// + /// + public async Task merge(OperateRequest dto, LoginInDto loginInfo) + { + var list = await _outStockTaskRepositories.GetEntityList(dto.Ids); + // 2:符合合并数据逻辑:出库状态为”待拣货”+出库类型为:销售出库+发货组织一致+收货客户一致+发货仓库一致 + OutStockTask entity = new OutStockTask(); + var res = entity.Merge(list, loginInfo.UserInfo.StaffId); + if (!res.IsSuccess) return res; + + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + bool isRollback = false; + bool isSuccess = true; + entity = await _outStockTaskRepositories.Add(entity, false); + if (entity == null) isRollback = true; + isSuccess = await _outStockTaskRepositories.DeleteEntityList(list.Select(s => s.Id).ToList(), false); + if (isSuccess == false) isRollback = true; + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) + return Result.ReFailure(ResultCodes.DateWriteError); + + return Result.ReSuccess(); + } } } diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs index 50def08b..cddf6d70 100644 --- a/src/WMS.Web.Domain/Values/ResultCodes.cs +++ b/src/WMS.Web.Domain/Values/ResultCodes.cs @@ -20,5 +20,9 @@ namespace WMS.Web.Domain.Values /// 数据操作失败 /// public static ValueTuple DateWriteError = (40004, "数据操作失败"); + + + //出库任务单 + public static ValueTuple MergeStatusError = (70000, "所选单据数据不一致,不能合并"); } } diff --git a/src/WMS.Web.Repositories/OutStockRepositories.cs b/src/WMS.Web.Repositories/OutStockRepositories.cs index 90cfa57a..b0a095fd 100644 --- a/src/WMS.Web.Repositories/OutStockRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockRepositories.cs @@ -10,6 +10,7 @@ using WMS.Web.Core.Dto.OutStock; using WMS.Web.Core.Help; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.Mappers; using WMS.Web.Repositories.Configuration; namespace WMS.Web.Repositories @@ -101,5 +102,54 @@ namespace WMS.Web.Repositories }).Skip((dto.PageNo - 1) * dto.PageSize).Take(dto.PageSize).ToListAsync(); return (list, total); } + /// + /// 批量修改 + /// + /// + /// + /// + 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.OutStock + .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; + + } + /// + /// 根据单据头id获取数据 + /// + /// + /// + public async Task> GetEntityList(List ids) + { + var res = await _context.OutStock + .Include(s => s.Details) + .Where(f => ids.Contains(f.Id)) + .ToListAsync(); + + return res.Clone(); + } } } diff --git a/src/WMS.Web.Repositories/OutStockTaskRepositories.cs b/src/WMS.Web.Repositories/OutStockTaskRepositories.cs index ee9ee67d..ee70a539 100644 --- a/src/WMS.Web.Repositories/OutStockTaskRepositories.cs +++ b/src/WMS.Web.Repositories/OutStockTaskRepositories.cs @@ -10,11 +10,12 @@ using WMS.Web.Core.Dto.OutStockTask; using WMS.Web.Core.Help; using WMS.Web.Domain.Entitys; using WMS.Web.Domain.Infrastructure; +using WMS.Web.Domain.Mappers; using WMS.Web.Repositories.Configuration; namespace WMS.Web.Repositories { - public class OutStockTaskRepositories: IOutStockTaskRepositories + public class OutStockTaskRepositories : IOutStockTaskRepositories { private readonly IMapper _mapper; private readonly IServiceProvider _serviceProvider; @@ -61,6 +62,90 @@ namespace WMS.Web.Repositories } } + /// + /// 批量删除(合并后删除原数据) + /// + /// + /// + /// + public async Task DeleteEntityList(List ids, bool isTransaction = true) + { + IDbContextTransaction _transaction = null; + if (isTransaction) + _transaction = _context.Database.BeginTransaction(); + + try + { + var res_list = await _context.OutStockTask + .Include(s => s.Details) + .Where(f => ids.Contains(f.Id)) + .ToListAsync(); + + _context.OutStockTask.RemoveRange(res_list); + await _context.SaveChangesAsync(); + + if (_transaction != null) + _transaction.Commit(); + return true; + } + catch (Exception ex) + { + if (_transaction != null) + _transaction.Rollback(); + return false; + } + } + + /// + /// 批量修改 + /// + /// + /// + /// + 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.OutStockTask + .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; + + } + /// + /// 根据单据头id获取数据 + /// + /// + /// + public async Task> GetEntityList(List ids) + { + var res = await _context.OutStockTask + .Include(s => s.Details) + .Where(f => ids.Contains(f.Id)) + .ToListAsync(); + + return res.Clone(); + } + /// /// 列表 ///