diff --git a/src/WMS.Web.Domain/Services/InStockService.cs b/src/WMS.Web.Domain/Services/InStockService.cs
index e80f8382..5197a88d 100644
--- a/src/WMS.Web.Domain/Services/InStockService.cs
+++ b/src/WMS.Web.Domain/Services/InStockService.cs
@@ -119,18 +119,39 @@ namespace WMS.Web.Domain.Services
///
public async Task Receive(UpdateInStockTaskRequest dto, LoginInDto loginInfo)
{
- IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
- bool isRollback = false;
- bool isTransaction = false;
- var result = await this.Receive(dto, loginInfo.UserInfo.StaffId, isTransaction);
- if (!result.IsSuccess) isRollback = true;
+ // 构建 Redis 锁的键名
+ string lockKey = $"lock:taskidreceive{dto.Id}";
+ // 构建 Redis 锁的值,用于标识锁的持有者
+ string lockValue = Guid.NewGuid().ToString();
+ // 获取 Redis 锁,设置超时时间为 10 秒
+ if (await _redisDb.LockTakeAsync(lockKey, lockValue, TimeSpan.FromSeconds(10)))
+ {
+ try
+ {
+ IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isTransaction = false;
+ var result = await this.Receive(dto, loginInfo.UserInfo.StaffId, isTransaction);
+ if (!result.IsSuccess) isRollback = true;
- //提交事务
- var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction);
- if (!isSuccess)
- return result;
+ //提交事务
+ var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction);
+ if (!isSuccess)
+ return result;
+
+ return Result.ReSuccess();
+ }
+ finally
+ {
+ // 释放 Redis 锁
+ await _redisDb.LockReleaseAsync(lockKey, lockValue);
+ }
+ }
+ else
+ {
+ return Result.ReFailure(ResultCodes.Concurrent_Instock);
+ }
- return Result.ReSuccess();
}
///
@@ -144,7 +165,7 @@ namespace WMS.Web.Domain.Services
var taskId = instock.Details.Select(x => x.TaskId).FirstOrDefault();
// 构建 Redis 锁的键名
- string lockKey = $"lock:taskid{taskId}";
+ string lockKey = $"lock:taskidshelf{taskId}";
// 构建 Redis 锁的值,用于标识锁的持有者
string lockValue = Guid.NewGuid().ToString();
// 获取 Redis 锁,设置超时时间为 10 秒
@@ -198,18 +219,38 @@ namespace WMS.Web.Domain.Services
///
public async Task ShelfNoPurchase(NoPurchaseShelfRequest dto, LoginInDto loginInDto)
{
- _logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId + loginInDto.UserInfo.Nickname}");
- IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
- bool isRollback = false;
- bool isTransaction = false;
- //保存非采购上架的数据
- var shelfSave_result = await this.ShelfNoPurchaseSave(dto, loginInDto, isTransaction);
- if (!shelfSave_result.IsSuccess) isRollback = true;
- //提交事务
- var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction);
- if (!isSuccess)
- return shelfSave_result;
- return Result.ReSuccess();
+ // 构建 Redis 锁的键名
+ string lockKey = $"lock:taskidshelfnopurchase{dto.TaskId}";
+ // 构建 Redis 锁的值,用于标识锁的持有者
+ string lockValue = Guid.NewGuid().ToString();
+ // 获取 Redis 锁,设置超时时间为 10 秒
+ if (await _redisDb.LockTakeAsync(lockKey, lockValue, TimeSpan.FromSeconds(10)))
+ {
+ try
+ {
+ _logger.LogInformation($"非采购入库:{JsonConvert.SerializeObject(dto)} 操作人:{loginInDto.UserInfo.StaffId + loginInDto.UserInfo.Nickname}");
+ IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isTransaction = false;
+ //保存非采购上架的数据
+ var shelfSave_result = await this.ShelfNoPurchaseSave(dto, loginInDto, isTransaction);
+ if (!shelfSave_result.IsSuccess) isRollback = true;
+ //提交事务
+ var isSuccess = _basicsRepositories.CommitTransaction(isRollback, _transaction);
+ if (!isSuccess)
+ return shelfSave_result;
+ return Result.ReSuccess();
+ }
+ finally
+ {
+ // 释放 Redis 锁
+ await _redisDb.LockReleaseAsync(lockKey, lockValue);
+ }
+ }
+ else
+ {
+ return Result.ReFailure(ResultCodes.Concurrent_Instock);
+ }
}
///