From 733e63cb362f17aea4a1020654fa348a0d0c1f06 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 24 二月 2025 00:08:59 +0800
Subject: [PATCH] 优化入库逻辑,优化直接出库逻辑,优化移库任务逻辑
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs | 194 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 194 insertions(+), 0 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs"
new file mode 100644
index 0000000..81607a6
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseRepository/UnitOfWorks/UnitOfWorkManage.cs"
@@ -0,0 +1,194 @@
+锘縰sing Microsoft.Extensions.Logging;
+using SqlSugar;
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Helper;
+
+namespace WIDESEA_Core.BaseRepository
+{
+ public class UnitOfWorkManage : IUnitOfWorkManage
+ {
+ private readonly ILogger<UnitOfWorkManage> _logger;
+ private readonly ISqlSugarClient _sqlSugarClient;
+
+ private int _tranCount { get; set; }
+ public int TranCount => _tranCount;
+ public readonly ConcurrentStack<string> TranStack = new();
+
+ public UnitOfWorkManage(ISqlSugarClient sqlSugarClient, ILogger<UnitOfWorkManage> logger)
+ {
+ _sqlSugarClient = sqlSugarClient;
+ _logger = logger;
+ _tranCount = 0;
+ }
+
+ /// <summary>
+ /// 鑾峰彇DB锛屼繚璇佸敮涓�鎬�
+ /// </summary>
+ /// <returns></returns>
+ public SqlSugarClient GetDbClient()
+ {
+ // 蹇呴』瑕乤s锛屽悗杈逛細鐢ㄥ埌鍒囨崲鏁版嵁搴撴搷浣�
+ return _sqlSugarClient as SqlSugarClient;
+ }
+
+
+ public UnitOfWork CreateUnitOfWork()
+ {
+ UnitOfWork uow = new UnitOfWork();
+ uow.Logger = _logger;
+ uow.Db = _sqlSugarClient;
+ uow.Tenant = (ITenant)_sqlSugarClient;
+ uow.IsTran = true;
+
+ uow.Db.Open();
+ uow.Tenant.BeginTran();
+
+ _logger.LogDebug("UnitOfWork Begin");
+ return uow;
+ }
+
+ public void BeginTran()
+ {
+ lock (this)
+ {
+ _tranCount++;
+ GetDbClient().BeginTran();
+ }
+ }
+
+ public void BeginTran(MethodInfo method)
+ {
+ lock (this)
+ {
+ GetDbClient().BeginTran();
+ TranStack.Push(method.GetFullName());
+ _tranCount = TranStack.Count;
+ }
+ }
+
+ public WebResponseContent BeginTran(Func<WebResponseContent> func)
+ {
+ lock (this)
+ {
+ BeginTran();
+ try
+ {
+ WebResponseContent content = func();
+ if (content.Status)
+ {
+ CommitTran();
+ }
+ else
+ {
+ RollbackTran();
+ }
+ return content;
+ }
+ catch(Exception ex)
+ {
+ RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ }
+ }
+
+ public void CommitTran()
+ {
+ lock (this)
+ {
+ _tranCount--;
+ if (_tranCount == 0)
+ {
+ try
+ {
+ GetDbClient().CommitTran();
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ GetDbClient().RollbackTran();
+ }
+ }
+ }
+ }
+
+ public void CommitTran(MethodInfo method)
+ {
+ lock (this)
+ {
+ string result = "";
+ while (!TranStack.IsEmpty && !TranStack.TryPeek(out result))
+ {
+ Thread.Sleep(1);
+ }
+
+
+ if (result == method.GetFullName())
+ {
+ try
+ {
+ GetDbClient().CommitTran();
+
+ _logger.LogDebug($"Commit Transaction");
+ Console.WriteLine($"Commit Transaction");
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ GetDbClient().RollbackTran();
+ _logger.LogDebug($"Commit Error , Rollback Transaction");
+ }
+ finally
+ {
+ while (!TranStack.TryPop(out _))
+ {
+ Thread.Sleep(1);
+ }
+
+ _tranCount = TranStack.Count;
+ }
+ }
+ }
+ }
+
+ public void RollbackTran()
+ {
+ lock (this)
+ {
+ _tranCount--;
+ GetDbClient().RollbackTran();
+ }
+ }
+
+ public void RollbackTran(MethodInfo method)
+ {
+ lock (this)
+ {
+ string result = "";
+ while (!TranStack.IsEmpty && !TranStack.TryPeek(out result))
+ {
+ Thread.Sleep(1);
+ }
+
+ if (result == method.GetFullName())
+ {
+ GetDbClient().RollbackTran();
+ _logger.LogDebug($"Rollback Transaction");
+ Console.WriteLine($"Rollback Transaction");
+ while (!TranStack.TryPop(out _))
+ {
+ Thread.Sleep(1);
+ }
+
+ _tranCount = TranStack.Count;
+ }
+ }
+ }
+ }
+}
--
Gitblit v1.9.3