/// <summary> /// 增加一条记录,返回新的ID号。需要有一个单一主键,并且开启有标识符属性(异步方式) /// </summary> /// <param name="entity">实体模型</param> /// <returns></returns> public virtual async Task <int> InsertAsync(ClientLogEntity entity) { if (entity.ClientLogID <= 0) { entity.ClientLogID = GetNewID(); } Dictionary <string, object> dict = new Dictionary <string, object>(); GetParameters(entity, dict); string strSQL = "insert into ClientLog (" + "ClientLogID," + "ClientID," + "RelationType," + "RelationTime," + "Contacter," + "AnnalContent," + "AnnalTime," + "Inputer) " + "values(" + "@ClientLogID," + "@ClientID," + "@RelationType," + "@RelationTime," + "@Contacter," + "@AnnalContent," + "@AnnalTime," + "@Inputer)"; if (await Task.Run(() => _DB.ExeSQLResult(strSQL, dict))) { return(DataConverter.CLng(entity.ClientLogID)); } return(-1); }
/// <summary> /// 修改 客户端日志 /// </summary> /// <param name="clientLogEntity">实体对象</param> public bool Update(ClientLogEntity clientLogEntity) { using (_connection = _DbFactory.GetOpenConnection()) { return(_connection.Update <ClientLogEntity>(clientLogEntity) == 1); } }
/// <summary> /// 增加一条记录 /// </summary> /// <param name="entity">实体模型</param> /// <returns></returns> public virtual bool Add(ClientLogEntity entity) { if (entity.ClientLogID <= 0) { entity.ClientLogID = GetNewID(); } Dictionary <string, object> dict = new Dictionary <string, object>(); GetParameters(entity, dict); string strSQL = "insert into ClientLog (" + "ClientLogID," + "ClientID," + "RelationType," + "RelationTime," + "Contacter," + "AnnalContent," + "AnnalTime," + "Inputer) " + "values(" + "@ClientLogID," + "@ClientID," + "@RelationType," + "@RelationTime," + "@Contacter," + "@AnnalContent," + "@AnnalTime," + "@Inputer)"; return(_DB.ExeSQLResult(strSQL, dict)); }
/// <summary> /// 新增client日志 /// </summary> /// <param name="sessionId"></param> /// <param name="clientModel"></param> /// <param name="description"></param> /// <returns></returns> public static ClientLogEntity clientLoginLog(string sessionId, ClientModel clientModel, string description) { UserModel user = UserUtils.Provider.GetUser(sessionId); ClientLogService clientLogService = new ClientLogService(); ClientLogEntity log = new ClientLogEntity(); log.Create(); log.CasLogId = user.CasLogId; log.AppId = clientModel.ClientId; log.AppName = clientModel.ClientName; log.AppUrl = clientModel.ClientUrl; log.ST = clientModel.Ticket; log.STValidated = clientModel.TicketValidated; log.STCreateTime = clientModel.TicketCreateTime; log.STEFTime = clientModel.TicketEFTime; log.STValidateTime = clientModel.TicketValidateTime; log.SESSIONID = UserUtils.Provider.getCurrentSession(); log.Description = description; return(clientLogService.Save(log) ? log : null); }
/// <summary> /// 新增 客户端日志 /// </summary> /// <param name="clientLogEntity">实体对象</param> /// <returns></returns> public bool Save(ClientLogEntity clientLogEntity) { using (_connection = _DbFactory.GetOpenConnection()) { string query = " insert into [T_SsoAppSession] ([AppLogId],[CasLogId], [AppId], [AppName], [AppUrl], [ST], [STCreateTime], [STEFTime], [STValidated], [STValidateTime], [LoginTime], [LogoutTime], [LogStatus], [Description], [SESSIONID]) values (@AppLogId, @CasLogId, @AppId, @AppName, @AppUrl, @ST, @STCreateTime, @STEFTime, @STValidated, @STValidateTime, @LoginTime, @LogoutTime, @LogStatus, @Description, @SESSIONID)"; return(_connection.Execute(query, clientLogEntity) == 1); //return _connection.Insert<ClientLogEntity>(clientLogEntity) == 1; } }
/// <summary> /// 把实体类转换成键/值对集合 /// </summary> /// <param name="entity"></param> /// <param name="dict"></param> private static void GetParameters(ClientLogEntity entity, Dictionary <string, object> dict) { dict.Add("ClientLogID", entity.ClientLogID); dict.Add("ClientID", entity.ClientID); dict.Add("RelationType", entity.RelationType); dict.Add("RelationTime", entity.RelationTime); dict.Add("Contacter", entity.Contacter); dict.Add("AnnalContent", entity.AnnalContent); dict.Add("AnnalTime", entity.AnnalTime); dict.Add("Inputer", entity.Inputer); }
/// <summary> /// 通过数据读取器生成实体类 /// </summary> /// <param name="rdr"></param> /// <returns></returns> private static ClientLogEntity GetEntityFromrdr(NullableDataReader rdr) { ClientLogEntity info = new ClientLogEntity(); info.ClientLogID = rdr.GetInt32("ClientLogID"); info.ClientID = rdr.GetInt32("ClientID"); info.RelationType = rdr.GetString("RelationType"); info.RelationTime = rdr.GetNullableDateTime("RelationTime"); info.Contacter = rdr.GetString("Contacter"); info.AnnalContent = rdr.GetString("AnnalContent"); info.AnnalTime = rdr.GetNullableDateTime("AnnalTime"); info.Inputer = rdr.GetString("Inputer"); return(info); }
/// <summary> /// 获取实体(异步方式) /// </summary> /// <param name="strWhere">参数化查询条件(例如: and Name = @Name )</param> /// <param name="dict">参数的名/值集合</param> /// <returns></returns> public virtual async Task <ClientLogEntity> GetEntityAsync(string strWhere, Dictionary <string, object> dict = null) { ClientLogEntity obj = null; string strSQL = "select top 1 * from ClientLog where 1=1 " + strWhere; using (NullableDataReader reader = await Task.Run(() => _DB.GetDataReader(strSQL, dict))) { if (reader.Read()) { obj = GetEntityFromrdr(reader); } } return(obj); }
/// <summary> /// 退出时修改client日志 /// </summary> /// <param name="client"></param> /// <returns></returns> public static bool clientLogoutLog(ClientModel client) { try { ClientLogService clientLogService = new ClientLogService(); ClientLogEntity log = clientLogService.GetClientLog(client.ClientLogId); log.LogStatus = 0; log.LogoutTime = DateTime.Now; return(clientLogService.Update(log)); } catch (Exception ex) { LogUtils.myError(log, ex); return(false); } }
/// <summary> /// 更新一条记录(异步方式) /// </summary> /// <param name="entity">实体模型</param> /// <returns></returns> public virtual async Task <bool> UpdateAsync(ClientLogEntity entity) { Dictionary <string, object> dict = new Dictionary <string, object>(); GetParameters(entity, dict); string strSQL = "Update ClientLog SET " + "ClientID = @ClientID," + "RelationType = @RelationType," + "RelationTime = @RelationTime," + "Contacter = @Contacter," + "AnnalContent = @AnnalContent," + "AnnalTime = @AnnalTime," + "Inputer = @Inputer" + " WHERE " + "ClientLogID = @ClientLogID"; return(await Task.Run(() => _DB.ExeSQLResult(strSQL, dict))); }
/// <summary> /// 增加或更新一条记录(异步方式) /// </summary> /// <param name="entity">实体模型</param> /// <param name="IsSave">是否增加</param> /// <returns></returns> public virtual async Task <bool> AddOrUpdateAsync(ClientLogEntity entity, bool IsSave) { return(IsSave ? await AddAsync(entity) : await UpdateAsync(entity)); }
/// <summary> /// 增加或更新一条记录 /// </summary> /// <param name="entity">实体模型</param> /// <param name="IsSave">是否增加</param> /// <returns></returns> public virtual bool AddOrUpdate(ClientLogEntity entity, bool IsSave) { return(IsSave ? Add(entity) : Update(entity)); }
/// <summary> /// 验证ST /// todo:ticket 应该与浏览器,ip绑定 /// </summary> /// <param name="ticket">验证ST</param> /// <param name="service">应用地址</param> /// <param name="code">客户端防伪标识</param> /// <param name="sessionIdKey">客户端 sessionIdKey</param> /// <param name="sessionIdValue">客户端 sessionIdValue</param> public virtual UserModel VerifyTicket(string ticket, string service, string code, string sessionIdKey, string sessionIdValue) { try { string userId = RedisGetTicket(ticket); if (userId == null) { throw new Exception("无效票据!"); } string sessionId = UserUtils.Provider.UserSession(userId); if (sessionId == null) { throw new Exception("用户未登录!"); } UserModel user = UserUtils.Provider.GetUser(sessionId); if (user == null) { throw new Exception("用户未登录!"); } if (user.Clients == null) { throw new Exception("用户未登录客户端!"); } ClientModel clientModel = user.Clients.Find(t => t.ClientUrl == service); if (clientModel == null) { throw new Exception("客户端未登录!"); } else { RedisDelTicket(ticket); if (clientModel.TicketValidated == -1) { user.Clients.Remove(clientModel);//移除旧的 clientModel.TicketValidateTime = DateTime.Now; clientModel.SessionIdKey = sessionIdKey; clientModel.TicketValidated = 1; clientModel.SessionIdValue = sessionIdValue; string description = ""; if (!doDecryptTicket(service, ticket)) { clientModel.TicketValidated = 0; description = "无效票据!"; } if (!clientModel.ClientUrl.Equals(service) || !clientModel.Code.Equals(code)) { clientModel.TicketValidated = 0; description = "客户端不一致!"; } ClientLogEntity log = DataBaseUtils.clientLoginLog(sessionId, clientModel, description); clientModel.ClientLogId = log.AppLogId; user.Clients.Add(clientModel); UserUtils.Provider.UpdateUser(sessionId, user);//添加编辑后的 if (clientModel.TicketValidated == 1) { if (GrobalConfig.IsApiCheck) { user.Clients.ForEach(t => { RedisAddClient(t.SessionIdValue, sessionId); }); } return(user); } else { throw new Exception(description); } } else { throw new Exception("客户端已登录校验!"); } } } catch (Exception ex) { throw ex; } }