From 526e18a1292d100ae180a262607b0d19889de29a Mon Sep 17 00:00:00 2001 From: 18942506660 <18942506660@A18942506660> Date: Thu, 26 Oct 2023 17:06:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=8B=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ITransactionRepositories.cs | 22 +++++++++ .../Services/ChangeMoveBoxService.cs | 16 ++++++- .../AppBuilderExtensions.cs | 2 + .../TransactionRepositories.cs | 47 +++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/WMS.Web.Domain/Infrastructure/ITransactionRepositories.cs create mode 100644 src/WMS.Web.Repositories/TransactionRepositories.cs diff --git a/src/WMS.Web.Domain/Infrastructure/ITransactionRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ITransactionRepositories.cs new file mode 100644 index 00000000..4896a418 --- /dev/null +++ b/src/WMS.Web.Domain/Infrastructure/ITransactionRepositories.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Storage; +using System; +using System.Collections.Generic; +using System.Text; + +namespace WMS.Web.Domain.Infrastructure +{ + public interface ITransactionRepositories + { + /// + /// 获取事务 用来处理即时库存 + /// + /// + IDbContextTransaction GetTransaction(); + + /// + /// 获取事务 用来处理即时库存 + /// + /// + bool CommitTransaction(bool isRollback, IDbContextTransaction transaction); + } +} diff --git a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs index 50f0f904..e927a50d 100644 --- a/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs +++ b/src/WMS.Web.Domain/Services/ChangeMoveBoxService.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Microsoft.EntityFrameworkCore.Storage; using System; using System.Collections.Generic; using System.Text; @@ -20,11 +21,14 @@ namespace WMS.Web.Domain.Services private readonly IMapper _mapper; private readonly ILoginService _loginService; private readonly IChangeBoxRecordRepositories _changeBoxRecordRepositories; - public ChangeMoveBoxService(IMapper mapper, ILoginService loginService, IChangeBoxRecordRepositories changeBoxRecordRepositories) + public readonly ITransactionRepositories _transactionRepositories; + public ChangeMoveBoxService(IMapper mapper, ILoginService loginService, + IChangeBoxRecordRepositories changeBoxRecordRepositories, ITransactionRepositories transactionRepositories) { _mapper = mapper; _loginService = loginService; _changeBoxRecordRepositories = changeBoxRecordRepositories; + _transactionRepositories = transactionRepositories; } public async Task Save(SaveChangeBoxRecordRequest dto, LoginInDto loginInfo) @@ -35,9 +39,17 @@ namespace WMS.Web.Domain.Services //需要填写序列号 //需要修改库存 + IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); + bool isRollback = false; + bool isSuccess = true; entity = await _changeBoxRecordRepositories.Add(entity, true); - if (entity == null) + if (entity == null) isRollback = true; + + //提交事务 + isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction); + if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError); + return Result.ReSuccess(); } } diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs index d69bac59..57141188 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs @@ -32,6 +32,8 @@ namespace Microsoft.Extensions.DependencyInjection { services.AddHttpContextAccessor(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); diff --git a/src/WMS.Web.Repositories/TransactionRepositories.cs b/src/WMS.Web.Repositories/TransactionRepositories.cs new file mode 100644 index 00000000..f674cedb --- /dev/null +++ b/src/WMS.Web.Repositories/TransactionRepositories.cs @@ -0,0 +1,47 @@ +using Microsoft.EntityFrameworkCore.Storage; +using System; +using System.Collections.Generic; +using System.Text; +using WMS.Web.Domain.Infrastructure; +using WMS.Web.Repositories.Configuration; + +namespace WMS.Web.Repositories +{ + public class TransactionRepositories: ITransactionRepositories + { + private RepositoryDbContext _context; + + + public TransactionRepositories(RepositoryDbContext context) + { + _context = context; + } + public IDbContextTransaction GetTransaction() + { + return _context.Database.BeginTransaction(); + } + + public bool CommitTransaction(bool isRollback, IDbContextTransaction transaction) + { + try + { + if (transaction == null) + return true; + + if (isRollback) + { + transaction.Rollback(); + return false; + } + transaction.Commit(); + } + catch (Exception ex) + { + transaction.Rollback(); + return false; + } + return true; + } + + } +}