using System; using System.Web.UI.WebControls; using ADODB; using log4net; using UFIDA.U8.Framework.Api.ControlObject.Entity; using UFSoft.U8.Framework.BizBase; using UFSoft.U8.Framework.ContextSrv; using UFSoft.U8.Framework.Login.UI; using UFSoft.U8.Framework.LoginContext; using NetLogin = UFSoft.U8.Framework.Login.UI.clsLogin; using ThreadContext = UFSoft.U8.Framework.ContextSrv.ThreadContext; using VBLogin = U8Login.clsLogin; // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming // ReSharper disable CommentTypo // ReSharper disable FieldCanBeMadeReadOnly.Local namespace UFIDA.U8.Framework.Api.ControlObject.U8M { public class BaseLogin { private ILog _logInfo = LogManager.GetLogger("logInfo"); public NetLogin _netLogin; public VBLogin _vbLogin; public ProductContext _productContext; public Connection Connection; public string userToken => _vbLogin.userToken; public string UfDbName => _vbLogin.UfDbName; public string UFDataConnstringForNet => _vbLogin.UFDataConnstringForNet; public string UfMetaName => _vbLogin.UfMetaName; public string UFMetaConnstringForNet => _vbLogin.UFMetaConnstringForNet; public string UfSystemDb => _vbLogin.UfSystemDb; public IContextContainer callar { get; set; } /// /// 初始化生产制造上下文 /// /// 登录参数 /// /// /// /// public void Init(LoginParamter paramter,bool bMon=true, int traceTimes=0) { if (traceTimes > 5) throw new Exception("U8登录异常"); try { //if (!string.IsNullOrWhiteSpace(ThreadContext.ServerToken)) //{ // ThreadContext.ServerToken = null; //} //if (!string.IsNullOrWhiteSpace(ThreadContext.U8LoginInfo!=null)) //{ // ThreadContext.U8LoginInfo = null; //} if (paramter == null) throw new ArgumentNullException(nameof(paramter)); if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) { Cryptography.m_userToken = ""; } if (bMon) { #if DEBUG _vbLogin = new VBLogin(); _vbLogin.ClearError(); _logInfo.Debug($"VB--开始进行U8登录:{paramter.cSrv}--{paramter.pUserId}--{paramter.pAccId}"); if (!_vbLogin.Login(paramter.pSubId, paramter.pAccId, paramter.pYearId, paramter.pUserId, paramter.pPassword, paramter.pDate, paramter.cSrv, paramter.cSerial) && string.IsNullOrWhiteSpace(_vbLogin.userToken)) { throw new Exception($"VB--U8登录失败---{_vbLogin.ShareString}"); } _netLogin = new NetLogin(); _productContext= _netLogin.Login("DP", _vbLogin.userToken); if (_productContext == null) { _logInfo.Debug($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); if (!_netLogin.login(paramter.pSubId, paramter.pUserId, paramter.pPassword, paramter.cSrv, paramter.pDate, paramter.pAccId, paramter.cSerial) && string.IsNullOrWhiteSpace(_netLogin.userToken)) { //throw new Exception($"Net--U8登录失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文构建:{_netLogin.userToken}"); _productContext = _netLogin.SubLogin("DP") ?? _netLogin.Login("DP", _vbLogin.userToken); //throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); #else _netLogin = new NetLogin(); _logInfo.Debug($"Net--开始进行U8登录:{paramter.cSrv}--{paramter.pUserId}--{paramter.pAccId}"); if (!_netLogin.login(paramter.pSubId, paramter.pUserId, paramter.pPassword, paramter.cSrv, paramter.pDate, paramter.pAccId, paramter.cSerial) && string.IsNullOrWhiteSpace(_netLogin.userToken)) { throw new Exception($"Net--U8登录失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文构建:{_netLogin.userToken}"); _productContext = _netLogin.SubLogin("DP"); if (_productContext == null) { throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); return; #endif } _vbLogin = new VBLogin(); _vbLogin.ClearError(); _logInfo.Debug($"VB--开始进行U8登录:{paramter.cSrv}--{paramter.pUserId}--{paramter.pAccId}"); if (!_vbLogin.Login(paramter.pSubId, paramter.pAccId, paramter.pYearId, paramter.pUserId, paramter.pPassword, paramter.pDate, paramter.cSrv, paramter.cSerial) && string.IsNullOrWhiteSpace(_vbLogin.userToken)) { throw new Exception($"VB--U8登录失败---{_vbLogin.ShareString}"); } _logInfo.Debug($"VB--开始创建连接对象:{_vbLogin.userToken}"); Connection = new Connection(); Connection.Open(_vbLogin.UfDbName); _logInfo.Debug("VB--完成登录进程"); return; if (!bMon) { _logInfo.Debug("非生产制造模块无需下面操作"); //Trace.WriteLine("非生产制造模块无需下面操作"); return; } _logInfo.Debug($"U8版本:{_vbLogin.GetVersionInfo()}"); _logInfo.Debug($"1--登录令牌:{_vbLogin.userToken}"); if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) { Cryptography.m_userToken = ""; } _productContext = _netLogin.Login("DP", _vbLogin.userToken); if (_productContext != null) { _logInfo.Debug($"222--成功初始化上下文信息:{_vbLogin.userToken}"); ClientUserContext.Instance.RefreshContext(); //ThreadContext.ServerToken = _netLogin.userToken; Connection = new Connection(); Connection.Open(_vbLogin.UfDbName); _logInfo.Debug($"333--完成局部构建:{_netLogin.userToken}"); return; } if (_netLogin.login(paramter.pSubId, paramter.pUserId, paramter.pPassword, paramter.cSrv, paramter.pDate, paramter.pAccId, paramter.cSerial)) { _productContext = _netLogin.SubLogin("AS"); if (_productContext == null) throw new Exception($"11--初始化U8登录上下文失败------{_netLogin.ErrDescript}"); _logInfo.Debug($"22--登录令牌:{_netLogin.userToken}"); //Trace.WriteLine($"2--上下文令牌:{_productContext.calledContext.token}"); //_vbLogin.ClearError(); //_vbLogin.ConstructLogin(_netLogin.userToken); //var taskId = DateTime.Now.Ticks.ToString(); //_vbLogin.set_TaskId(taskId); _logInfo.Debug($"33--登录令牌:{_vbLogin.userToken}"); _logInfo.Debug($"44--正在创建应用池:{_netLogin.userToken}"); ClientUserContext.Instance.RefreshContext(); //ThreadContext.ServerToken = _netLogin.userToken; _logInfo.Debug($"55--完成局部构建:{_netLogin.userToken}"); return; } _productContext = _netLogin.Login("AS", _vbLogin.userToken); _logInfo.Debug($"3--上下文令牌:{_productContext.calledContext.token}"); if (_productContext == null) throw new Exception($"2--初始化U8登录上下文失败------{_netLogin.ErrDescript}"); ClientUserContext.Instance.RefreshContext(); //ThreadContext.ServerToken = _netLogin.userToken; Connection = new Connection(); Connection.Open(_vbLogin.UfDbName); } catch (Exception ex) { _logInfo.Error($"重试次数:{traceTimes},错误信息:{ex.Message}", ex); Init(paramter, bMon, traceTimes + 1); } } public void Init(string userToken, bool bMon = true, int traceTimes = 0) { if (traceTimes > 5) throw new Exception("U8登录异常"); try { //if (!string.IsNullOrWhiteSpace(ThreadContext.ServerToken)) //{ // ThreadContext.ServerToken = null; //} //if (!string.IsNullOrWhiteSpace(ThreadContext.U8LoginInfo!=null)) //{ // ThreadContext.U8LoginInfo = null; //} if (string.IsNullOrWhiteSpace(userToken)) throw new ArgumentNullException(nameof(userToken)); if (!string.IsNullOrWhiteSpace(Cryptography.m_userToken)) { Cryptography.m_userToken = ""; } if (bMon) { #if DEBUG _vbLogin = new VBLogin(); _vbLogin.ClearError(); _logInfo.Debug($"VB--开始进行U8登录:{userToken}"); if (!_vbLogin.ConstructLogin(userToken)) { throw new Exception($"VB--U8登录失败---{_vbLogin.ShareString}"); } _netLogin = new NetLogin(); _productContext = _netLogin.Login("DP", _vbLogin.userToken); if (_productContext == null) { _logInfo.Debug($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); _logInfo.Debug($"Net--开始进行上下文构建:{userToken}"); _productContext = _netLogin.Login("DP", _vbLogin.userToken); //throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); #else _netLogin = new NetLogin(); _logInfo.Debug($"Net--开始进行U8登录:{userToken}"); _productContext = _netLogin.Login("DP", userToken); if (_productContext == null) { throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); return; #endif } _vbLogin = new VBLogin(); _vbLogin.ClearError(); _logInfo.Debug($"VB--开始进行U8登录:{userToken}"); if (!_vbLogin.ConstructLogin(userToken)) { throw new Exception($"VB--U8登录失败---{_vbLogin.ShareString}"); } _logInfo.Debug($"VB--开始创建连接对象:{_vbLogin.userToken}"); Connection = new Connection(); Connection.Open(_vbLogin.UfDbName); _logInfo.Debug("VB--完成登录进程"); return; } catch (Exception ex) { _logInfo.Error($"重试次数:{traceTimes},错误信息:{ex.Message}", ex); if (ex.Message == "VB--U8登录失败---登录使用时间超过系统预置时间,请重新登录!") { throw new Exception("登录使用时间超过系统预置时间,请重新登录!"); } Init(userToken, bMon, traceTimes + 1); } } public bool CheckCallar() { return callar != null; } public void RefreshCallar(LoginParamter paramter) { #if DEBUG _netLogin = new NetLogin(); _productContext= _netLogin.Login("DP", _vbLogin.userToken); if (_productContext == null) { _logInfo.Debug($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); if (!_netLogin.login(paramter.pSubId, paramter.pUserId, paramter.pPassword, paramter.cSrv, paramter.pDate, paramter.pAccId, paramter.cSerial) && string.IsNullOrWhiteSpace(_netLogin.userToken)) { //throw new Exception($"Net--U8登录失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文构建:{_netLogin.userToken}"); _productContext = _netLogin.SubLogin("DP") ?? _netLogin.Login("DP", _vbLogin.userToken); //throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); #else _netLogin = new NetLogin(); _logInfo.Debug($"Net--开始进行U8登录:{paramter.cSrv}--{paramter.pUserId}--{paramter.pAccId}"); if (!_netLogin.login(paramter.pSubId, paramter.pUserId, paramter.pPassword, paramter.cSrv, paramter.pDate, paramter.pAccId, paramter.cSerial) && string.IsNullOrWhiteSpace(_netLogin.userToken)) { throw new Exception($"Net--U8登录失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文构建:{_netLogin.userToken}"); _productContext = _netLogin.SubLogin("DP"); if (_productContext == null) { throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); return; #endif } public void RefreshCallar(string userToken) { #if DEBUG _netLogin = new NetLogin(); _productContext = _netLogin.Login("DP", _vbLogin.userToken); if (_productContext == null) { _logInfo.Debug($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); _logInfo.Debug($"Net--开始进行上下文构建:{userToken}"); _productContext = _netLogin.Login("DP", _vbLogin.userToken); //throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); #else _netLogin = new NetLogin(); _logInfo.Debug($"Net--开始进行U8登录:{userToken}"); _productContext = _netLogin.Login("DP", userToken); if (_productContext == null) { throw new Exception($"Net--U8上下文构建失败---{_netLogin.ErrDescript}"); } _logInfo.Debug($"Net--开始进行上下文刷新:{_productContext.calledContext.token}"); ClientUserContext.Instance.RefreshContext(); _logInfo.Debug("Net--完成生产制造登录进程"); callar = new DefaultContextContainer(); _logInfo.Debug($"Net--构建制造上下文:{callar.context.calledContext.token}"); return; #endif } public void ShutDown() { U8LoginInfoPool.Clear(); ThreadContext.ServerToken = null; _vbLogin?.ShutDown(); _productContext=null; _netLogin?.SubLogout("DP"); _netLogin?.ShutDown(); _vbLogin = null; _netLogin = null; } public bool CheckAccId(string cAccId) { return _vbLogin.get_cAcc_Id() == cAccId; } } }