调整事物

This commit is contained in:
18942506660
2023-10-26 17:06:35 +08:00
parent 5f4e00a436
commit 526e18a129
4 changed files with 85 additions and 2 deletions

View File

@@ -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
{
/// <summary>
/// 获取事务 用来处理即时库存
/// </summary>
/// <returns></returns>
IDbContextTransaction GetTransaction();
/// <summary>
/// 获取事务 用来处理即时库存
/// </summary>
/// <returns></returns>
bool CommitTransaction(bool isRollback, IDbContextTransaction transaction);
}
}

View File

@@ -1,4 +1,5 @@
using AutoMapper; using AutoMapper;
using Microsoft.EntityFrameworkCore.Storage;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@@ -20,11 +21,14 @@ namespace WMS.Web.Domain.Services
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly ILoginService _loginService; private readonly ILoginService _loginService;
private readonly IChangeBoxRecordRepositories _changeBoxRecordRepositories; 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; _mapper = mapper;
_loginService = loginService; _loginService = loginService;
_changeBoxRecordRepositories = changeBoxRecordRepositories; _changeBoxRecordRepositories = changeBoxRecordRepositories;
_transactionRepositories = transactionRepositories;
} }
public async Task<Result> Save(SaveChangeBoxRecordRequest dto, LoginInDto loginInfo) public async Task<Result> 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); 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.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess(); return Result.ReSuccess();
} }
} }

View File

@@ -32,6 +32,8 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
services.AddHttpContextAccessor(); services.AddHttpContextAccessor();
services.AddTransient<ITransactionRepositories, TransactionRepositories>();
services.AddTransient<IInStockRepositories, InStockRepositories>(); services.AddTransient<IInStockRepositories, InStockRepositories>();
services.AddTransient<IChangeBoxRecordRepositories, ChangeBoxRecordRepositories>(); services.AddTransient<IChangeBoxRecordRepositories, ChangeBoxRecordRepositories>();

View File

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