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;
+ }
+
+ }
+}