using Autofac;
|
using Microsoft.AspNetCore.Http;
|
using MySqlConnector;
|
using Rhea.Common;
|
using Rhea.Common.Authorization;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection;
|
using Tiger.IBusiness;
|
|
namespace Tiger.Business
|
{
|
/// <summary>
|
/// 上下文
|
/// </summary>
|
public class BizContext : IBizContext
|
{
|
//查看类全名
|
public static string _fullname = typeof(MySqlConnection).FullName;
|
|
/// <summary>
|
/// 当前项目
|
/// </summary>
|
public static string CurrentProject => BizConfig.Configuration["CurrentProject"];
|
public string GetCurrentProject() => CurrentProject;
|
/// <summary>
|
/// 服务器机器码
|
/// </summary>
|
public static string MachineCode = $"{Base.Hardware.CPU_ID}";//-{Base.Hardware.HDD_SN}";
|
public string GetMachineCode() => MachineCode;
|
/// <summary>
|
/// Tiger 项目激活实体
|
/// </summary>
|
public static TigerActive TigerActive = new();
|
public ITigerActive GetTigerActive() => TigerActive;
|
/// <summary>
|
/// 接口任务服务
|
/// </summary>
|
public static IInterfaceService InterfaceService;
|
public IInterfaceService GetInterfaceService() => InterfaceService;
|
|
/// <summary>
|
/// DI Container
|
/// </summary>
|
public static IContainer Container;
|
|
#region 事务管理
|
|
/// <summary>
|
/// WMS事务字典
|
/// </summary>
|
public static Dictionary<string, ITransaction> TransactionDic = new Dictionary<string, ITransaction>();
|
|
/// <summary>
|
/// 创建一个新事务,并加到事务列表
|
/// </summary>
|
/// <param name="context">请求的HttpContext</param>
|
/// <param name="trans">新的事务</param>
|
/// <param name="IsUniqueInSameClient">相同客户端是否只允许开启一个同类型事务</param>
|
public static void NewTransaction(HttpContext context, ITransaction trans, bool IsUniqueInSameClient = true)
|
{
|
trans.RemoteAddress = $"[{context.Connection.RemoteIpAddress}]:{context.Connection.RemotePort}";
|
trans.ApiHost = context.Request.Host.ToString();
|
if (IsUniqueInSameClient)
|
{
|
//查找有没有相同客户端开启的同类型事务,有的话都关闭掉
|
var sameTrans = TransactionDic.Where(q => !q.Value.IsFinished && q.Value.GetType() == trans.GetType() && q.Value.RemoteAddress == trans.RemoteAddress);
|
foreach (var item in sameTrans)
|
{
|
try
|
{
|
TransactionDic[item.Key].Close();
|
}
|
catch (System.Exception ex)
|
{
|
Logger.Console.Fatal(ex, $"删除同客户端同类型事务Transaction[{item.Key}]({TransactionDic[item.Key].GetType().FullName})异常");
|
}
|
}
|
}
|
TransactionDic.Add(trans.TransID, trans);
|
}
|
|
#endregion 事务管理
|
}
|
|
/// <summary>
|
/// DI公用方法
|
/// </summary>
|
public static class DI
|
{
|
public static T Resolve<T>() where T : notnull
|
{
|
return BizContext.Container.Resolve<T>();
|
}
|
|
public static dynamic Resolve(string typeFullName)
|
{
|
return BizContext.Container.Resolve(System.Type.GetType(typeFullName, true));
|
}
|
}
|
}
|