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 { /// /// 上下文 /// public class BizContext : IBizContext { //查看类全名 public static string _fullname = typeof(MySqlConnection).FullName; /// /// 当前项目 /// public static string CurrentProject => BizConfig.Configuration["CurrentProject"]; public string GetCurrentProject() => CurrentProject; /// /// 服务器机器码 /// public static string MachineCode = $"{Base.Hardware.CPU_ID}";//-{Base.Hardware.HDD_SN}"; public string GetMachineCode() => MachineCode; /// /// Tiger 项目激活实体 /// public static TigerActive TigerActive = new(); public ITigerActive GetTigerActive() => TigerActive; /// /// 接口任务服务 /// public static IInterfaceService InterfaceService; public IInterfaceService GetInterfaceService() => InterfaceService; /// /// DI Container /// public static IContainer Container; #region 事务管理 /// /// WMS事务字典 /// public static Dictionary TransactionDic = new Dictionary(); /// /// 创建一个新事务,并加到事务列表 /// /// 请求的HttpContext /// 新的事务 /// 相同客户端是否只允许开启一个同类型事务 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 事务管理 } /// /// DI公用方法 /// public static class DI { public static T Resolve() where T : notnull { return BizContext.Container.Resolve(); } } }