using NCC.Common.Configuration;
using NCC.Common.Const;
using NCC.Common.Core.Manager;
using NCC.Common.Enum;
using NCC.Common.Extension;
using NCC.Common.Util;
using NCC.DataEncryption;
using NCC.Dependency;
using NCC.DynamicApiController;
using NCC.EventBridge;
using NCC.FriendlyException;
using NCC.JsonSerialization;
using NCC.OAuth.Service.Dto;
using NCC.RemoteRequest.Extensions;
using NCC.System.Entitys.Dto.Permission.User;
using NCC.System.Entitys.Dto.System.SysConfig;
using NCC.System.Entitys.Dto.System.SysLog;
using NCC.System.Entitys.Permission;
using NCC.System.Entitys.System;
using NCC.System.Interfaces.Permission;
using NCC.System.Interfaces.System;
using NCC.UnifyResult;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using UAParser;
using Yitter.IdGenerator;
using NCC.Expand.Thirdparty.Sms;
using NCC.Expand.Thirdparty.Sms.Model;
using NCC.Core.Pay.Wechat;
namespace NCC.OAuth.Service
{
///
/// 业务实现:身份认证模块
///
[ApiDescriptionSettings(Tag = "OAuth", Name = "OAuth", Order = 160)]
[Route("api/[controller]")]
public class OAuthService : IDynamicApiController, ITransient
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISqlSugarRepository _userRepository; // 用户表仓储
private readonly IUsersService _userService; // 用户表仓储
private readonly ISysConfigService _sysConfigService; //系统配置仓储
private readonly IModuleService _moduleService;//功能模块
private readonly IModuleColumnService _columnService; //功能列
private readonly IModuleButtonService _moduleButtonService;//功能按钮
private readonly IModuleFormService _formService;//表单
private readonly IModuleDataAuthorizeSchemeService _moduleDataAuthorizeSchemeService;
private readonly IUserManager _userManager; // 用户管理
private readonly ISysCacheService _sysCacheService;
private readonly IUserRelationService _userRelationService; // 用户关系表服务
private readonly SqlSugarScope _db;
private readonly ITenant _tenant;
///
/// 初始化一个类型的新实例
///
public OAuthService(IUsersService userService,
ISqlSugarRepository userRepository,
IHttpContextAccessor httpContextAccessor,
ISysConfigService sysConfigService,
IModuleService moduleService,
IModuleColumnService columnService,
IModuleButtonService moduleButtonService,
IModuleFormService formService,
IModuleDataAuthorizeSchemeService moduleDataAuthorizeSchemeService,
IUserManager userManager,
ISysCacheService sysCacheService,
IUserRelationService userRelationService,
ISqlSugarClient db)
{
_httpContextAccessor = httpContextAccessor;
_userRepository = userRepository;
_userService = userService;
_sysConfigService = sysConfigService;
_moduleService = moduleService;
_columnService = columnService;
_formService = formService;
_moduleButtonService = moduleButtonService;
_moduleDataAuthorizeSchemeService = moduleDataAuthorizeSchemeService;
_userManager = userManager;
_sysCacheService = sysCacheService;
_userRelationService = userRelationService;
_db = (SqlSugarScope)db;
_tenant = (ITenant)_db;
}
///
/// 用户登录
///
/// 登录输入参数
///
[HttpPost("Login")]
[AllowAnonymous]
[Consumes("application/x-www-form-urlencoded")]
public async Task Login([FromForm] LoginInput input)
{
string tenantDbName = App.Configuration["ConnectionStrings:DBName"];
string tenantId = App.Configuration["ConnectionStrings:ConfigId"];
string tenantAccout = string.Empty;
if (KeyVariable.MultiTenancy)
{
//分割账号
var tenantAccount = input.account.Split('@');
tenantId = tenantAccount.FirstOrDefault();
if (tenantAccount.Length == 1)
input.account = "admin";
else
input.account = tenantAccount[1];
tenantAccout = input.account;
var interFace = App.Configuration["NCC_App:MultiTenancyDBInterFace"] + tenantId;
var response = await interFace.GetAsStringAsync();
var data = JSON.Deserialize>(response);
if (data == null)
throw NCCException.Oh(ErrorCode.D1024);
else if (data.data == null)
throw NCCException.Oh(ErrorCode.D1023);
else
tenantDbName = data.data.dotnet;
_tenant.AddConnection(new ConnectionConfig()
{
DbType = (DbType)Enum.Parse(typeof(DbType), App.Configuration["ConnectionStrings:DBType"]),
ConfigId = tenantId,//设置库的唯一标识
IsAutoCloseConnection = true,
ConnectionString = string.Format($"{App.Configuration["ConnectionStrings:DefaultConnection"]}", tenantDbName)
});
_tenant.ChangeDatabase(tenantId);
}
//根据用户账号获取用户秘钥
var user = await _userService.GetInfoByAccount(input.account);
_ = user ?? throw NCCException.Oh(ErrorCode.D5002);
bool isMoble = false;
if (input.account == user.MobilePhone) isMoble = true;
//获取加密后的密码
var encryptPasswod = MD5Encryption.Encrypt(input.password + user.Secretkey);
var userAnyPwd = await _userService.GetInfoByLogin(input.account, encryptPasswod, isMoble);
_ = userAnyPwd ?? throw NCCException.Oh(ErrorCode.D1000);
// 验证账号是否未被激活
if (user.EnabledMark == null)
throw NCCException.Oh(ErrorCode.D1018);
// 验证账号是否被禁用
if (user.EnabledMark == 0)
throw NCCException.Oh(ErrorCode.D1019);
// 验证账号是否被删除
if (user.DeleteMark == 1)
throw NCCException.Oh(ErrorCode.D1017);
// app权限验证
if (NetUtil.isMobileBrowser && user.IsAdministrator == 0 && !ExistRoleByApp(user.RoleId))
throw NCCException.Oh(ErrorCode.D1022);
//登录成功时 判断单点登录信息
//token过期时间
var tokenTimeout = await _sysConfigService.GetInfo("SysConfig", "tokentimeout");
var accessToken = string.Empty;
// 生成Token令牌
if (KeyVariable.MultiTenancy)
{
accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, userAnyPwd.Id },
{ ClaimConst.CLAINM_ACCOUNT, userAnyPwd.Account },
{ ClaimConst.CLAINM_REALNAME, userAnyPwd.RealName },
{ ClaimConst.CLAINM_ADMINISTRATOR, userAnyPwd.IsAdministrator },
{ ClaimConst.TENANT_ID, tenantId },
{ ClaimConst.TENANT_DB_NAME, tenantDbName }
}, long.Parse(tokenTimeout.Value));
}
else
{
accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, userAnyPwd.Id },
{ ClaimConst.CLAINM_ACCOUNT, userAnyPwd.Account },
{ ClaimConst.CLAINM_REALNAME, userAnyPwd.RealName },
{ ClaimConst.CLAINM_ADMINISTRATOR, userAnyPwd.IsAdministrator },
{ ClaimConst.TENANT_ID, tenantId },
{ ClaimConst.TENANT_DB_NAME, tenantDbName }
}, long.Parse(tokenTimeout.Value));
}
var httpContext = _httpContextAccessor.HttpContext;
// 设置Swagger自动登录
httpContext.SigninToSwagger(accessToken);
// 生成刷新Token令牌
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 30);
// 设置刷新Token令牌
httpContext.Response.Headers["x-access-token"] = refreshToken;
var ip = httpContext.GetRemoteIpAddressToIPv4();
// 修改用户登录信息
await Event.EmitAsync("User:UpdateUserLoginInfo", new UserEventDealWithInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new UserEntity()
{
Id = user.Id,
FirstLogIP = user.FirstLogIP ?? ip,
FirstLogTime = user.FirstLogTime ?? DateTime.Now,
PrevLogTime = user.LastLogTime,
PrevLogIP = user.LastLogIP,
LastLogTime = DateTime.Now,
LastLogIP = ip,
LogSuccessCount = user.LogSuccessCount + 1
}
});
//登录时间
var clent = Parser.GetDefault().Parse(httpContext.Request.Headers["User-Agent"]);
// 增加登录日志
await Event.EmitAsync("Log:CreateVisLog", new LogEventBridgeCrInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new SysLogEntity
{
Id = YitIdHelper.NextId().ToString(),
UserId = user.Id,
UserName = user.RealName,
Category = 1,
IPAddress = ip,
Abstracts = "登录成功",
PlatForm = clent.String,
CreatorTime = DateTime.Now
}
});
return new LoginOutput()
{
theme = user.Theme == null ? "classic" : user.Theme,
token = "Bearer " + accessToken
};
}
///
/// 小程序用户登录
///
/// 登录输入参数
///
[HttpPost("AppleteLogin")]
[AllowAnonymous]
[Consumes("application/x-www-form-urlencoded")]
public async Task AppleteLogin([FromForm] AppleteLoginInput input)
{
if (input == null || input.code.IsNullOrEmpty()) throw NCCException.Oh("访问异常!");
//var dd = App.GetConfig("PaymentSettings", true);
var appuser = new AppleteHelper().GetUserOpenIdForCode(input.code);
if (appuser == null || appuser.openid.IsNullOrEmpty()) throw NCCException.Oh("用户信息拉取失败!");
string tenantDbName = App.Configuration["ConnectionStrings:DBName"];
string tenantId = App.Configuration["ConnectionStrings:ConfigId"];
string tenantAccout = string.Empty;
var user = await _userRepository.Entities.FirstAsync(o => (o.OpenId == appuser.OpenId || o.Account == appuser.OpenId) && (o.DeleteMark != 1 || o.DeleteMark == null));
if (user == null)
{
//注册
UserEntity adduser = new UserEntity
{
Account = appuser.OpenId,
NickName = input.nickName,
RealName = input.nickName,
HeadIcon = input.HeadIcon,
Password = "99999999",
OpenId = appuser.openid,
IsAdministrator = 0,
OrganizeId = "274772725216576773" //小程序用户
};
var isExist = await _userRepository.AnyAsync(u => u.Account == adduser.Account && u.DeleteMark == null);
if (isExist) throw NCCException.Oh(ErrorCode.D1003);
var entity = adduser.Adapt();
#region 用户表单
entity.IsAdministrator = 0;
entity.EntryDate = DateTime.Now;
entity.Birthday = DateTime.Now;
entity.Secretkey = Guid.NewGuid().ToString();
entity.Password = MD5Encryption.Encrypt(MD5Encryption.Encrypt(entity.Password ?? CommonConst.DEFAULT_PASSWORD) + entity.Secretkey);
entity.EnabledMark = 1;
#endregion
//新增用户记录
user = await _userRepository.Context.Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteReturnEntityAsync();
}
//登录成功时 判断单点登录信息
//token过期时间
var tokenTimeout = await _sysConfigService.GetInfo("SysConfig", "tokentimeout");
var accessToken = string.Empty;
// 生成Token令牌
if (KeyVariable.MultiTenancy)
{
accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, user.Id },
{ ClaimConst.CLAINM_ACCOUNT, user.Account },
{ ClaimConst.CLAINM_REALNAME, user.RealName },
{ ClaimConst.CLAINM_ADMINISTRATOR, user.IsAdministrator },
{ ClaimConst.TENANT_ID, tenantId },
{ ClaimConst.TENANT_DB_NAME, tenantDbName }
}, long.Parse(tokenTimeout.Value));
}
else
{
accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, user.Id },
{ ClaimConst.CLAINM_ACCOUNT, user.Account },
{ ClaimConst.CLAINM_REALNAME, user.RealName },
{ ClaimConst.CLAINM_ADMINISTRATOR, user.IsAdministrator },
{ ClaimConst.TENANT_ID, tenantId },
{ ClaimConst.TENANT_DB_NAME, tenantDbName }
}, long.Parse(tokenTimeout.Value));
}
var httpContext = _httpContextAccessor.HttpContext;
// 设置Swagger自动登录
//httpContext.SigninToSwagger(accessToken);
// 生成刷新Token令牌
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 30);
// 设置刷新Token令牌
httpContext.Response.Headers["x-access-token"] = refreshToken;
var ip = httpContext.GetRemoteIpAddressToIPv4();
// 修改用户登录信息
await Event.EmitAsync("User:UpdateUserLoginInfo", new UserEventDealWithInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new UserEntity()
{
Id = user.Id,
FirstLogIP = user.FirstLogIP ?? ip,
FirstLogTime = user.FirstLogTime ?? DateTime.Now,
PrevLogTime = user.LastLogTime,
PrevLogIP = user.LastLogIP,
LastLogTime = DateTime.Now,
LastLogIP = ip,
LogSuccessCount = user.LogSuccessCount + 1
}
});
//登录时间
var clent = Parser.GetDefault().Parse(httpContext.Request.Headers["User-Agent"]);
// 增加登录日志
await Event.EmitAsync("Log:CreateVisLog", new LogEventBridgeCrInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new SysLogEntity
{
Id = YitIdHelper.NextId().ToString(),
UserId = user.Id,
UserName = user.RealName,
Category = 1,
IPAddress = ip,
Abstracts = "登录成功",
PlatForm = clent.String,
CreatorTime = DateTime.Now
}
});
return new LoginOutput()
{
theme = user.Theme == null ? "classic" : user.Theme,
token = "Bearer " + accessToken,
user = new
{
id = user.Id,
openid = user.OpenId,
realname = user.RealName,
headicon = user.HeadIcon
}
};
}
///
/// 系统信息获取
///
///
[HttpPost("SystemInfo")]
[AllowAnonymous]
public object SystemInfo()
{
return new
{
//httpUrl = "http://disk.fengshiyun.com/api",
httpUrl = "http://localhost:8061/api",
Version = "1.0.1"
};
}
[HttpPost("PisLogin")]
[AllowAnonymous]
[Consumes("application/x-www-form-urlencoded")]
public async Task PisLogin([FromForm] PisLoginInput input)
{
string tenantDbName = App.Configuration["ConnectionStrings:DBName"];
string tenantId = App.Configuration["ConnectionStrings:ConfigId"];
string tenantAccout = string.Empty;
if (KeyVariable.MultiTenancy)
{
//分割账号
var tenantAccount = input.account.Split('@');
tenantId = tenantAccount.FirstOrDefault();
if (tenantAccount.Length == 1)
input.account = "admin";
else
input.account = tenantAccount[1];
tenantAccout = input.account;
var interFace = App.Configuration["NCC_App:MultiTenancyDBInterFace"] + tenantId;
var response = await interFace.GetAsStringAsync();
var data = JSON.Deserialize>(response);
if (data == null)
throw NCCException.Oh(ErrorCode.D1024);
else if (data.data == null)
throw NCCException.Oh(ErrorCode.D1023);
else
tenantDbName = data.data.dotnet;
_tenant.AddConnection(new ConnectionConfig()
{
DbType = (DbType)Enum.Parse(typeof(DbType), App.Configuration["ConnectionStrings:DBType"]),
ConfigId = tenantId,//设置库的唯一标识
IsAutoCloseConnection = true,
ConnectionString = string.Format($"{App.Configuration["ConnectionStrings:DefaultConnection"]}", tenantDbName)
});
_tenant.ChangeDatabase(tenantId);
}
//根据用户账号获取用户秘钥
var user = await _userService.GetInfoByAccount(input.account);
_ = user ?? throw NCCException.Oh(ErrorCode.D5002);
bool isMoble = false;
if (input.account == user.MobilePhone) isMoble = true;
//获取加密后的密码
// var encryptPasswod = MD5Encryption.Encrypt(input.password + user.Secretkey);
//var userAnyPwd = await _userService.GetInfoByLogin(input.account, encryptPasswod, isMoble);
//_ = userAnyPwd ?? throw NCCException.Oh(ErrorCode.D1000);
// 验证账号是否未被激活
if (user.EnabledMark == null)
throw NCCException.Oh(ErrorCode.D1018);
// 验证账号是否被禁用
if (user.EnabledMark == 0)
throw NCCException.Oh(ErrorCode.D1019);
// 验证账号是否被删除
if (user.DeleteMark == 1)
throw NCCException.Oh(ErrorCode.D1017);
// app权限验证
if (NetUtil.isMobileBrowser && user.IsAdministrator == 0 && !ExistRoleByApp(user.RoleId))
throw NCCException.Oh(ErrorCode.D1022);
//登录成功时 判断单点登录信息
//token过期时间
var tokenTimeout = await _sysConfigService.GetInfo("SysConfig", "tokentimeout");
var accessToken = string.Empty;
// 生成Token令牌
if (KeyVariable.MultiTenancy)
{
//accessToken = JWTEncryption.Encrypt(new Dictionary
//{
// { ClaimConst.CLAINM_USERID, userAnyPwd.Id },
// { ClaimConst.CLAINM_ACCOUNT, userAnyPwd.Account },
// { ClaimConst.CLAINM_REALNAME, userAnyPwd.RealName },
// { ClaimConst.CLAINM_ADMINISTRATOR, userAnyPwd.IsAdministrator },
// { ClaimConst.TENANT_ID, tenantId },
// { ClaimConst.TENANT_DB_NAME, tenantDbName }
//}, long.Parse(tokenTimeout.Value));
}
else
{
accessToken = JWTEncryption.Encrypt(new Dictionary
{
{ ClaimConst.CLAINM_USERID, user.Id },
{ ClaimConst.CLAINM_ACCOUNT, input.account },
{ ClaimConst.CLAINM_REALNAME, user.RealName },
{ ClaimConst.CLAINM_ADMINISTRATOR, 0 },
{ ClaimConst.TENANT_ID, tenantId },
{ ClaimConst.TENANT_DB_NAME, tenantDbName }
}, long.Parse(tokenTimeout.Value));
}
var httpContext = _httpContextAccessor.HttpContext;
// 设置Swagger自动登录
httpContext.SigninToSwagger(accessToken);
// 生成刷新Token令牌
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 30);
// 设置刷新Token令牌
httpContext.Response.Headers["x-access-token"] = refreshToken;
var ip = httpContext.GetRemoteIpAddressToIPv4();
// 修改用户登录信息
await Event.EmitAsync("User:UpdateUserLoginInfo", new UserEventDealWithInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new UserEntity()
{
Id = user.Id,
FirstLogIP = user.FirstLogIP ?? ip,
FirstLogTime = user.FirstLogTime ?? DateTime.Now,
PrevLogTime = user.LastLogTime,
PrevLogIP = user.LastLogIP,
LastLogTime = DateTime.Now,
LastLogIP = ip,
Description = input.hospitalname,
LogSuccessCount = user.LogSuccessCount + 1
}
}); ;
//登录时间
var clent = Parser.GetDefault().Parse(httpContext.Request.Headers["User-Agent"]);
// 增加登录日志
await Event.EmitAsync("Log:CreateVisLog", new LogEventBridgeCrInput
{
tenantId = tenantId,
tenantDbName = tenantDbName,
entity = new SysLogEntity
{
Id = YitIdHelper.NextId().ToString(),
UserId = user.Id,
UserName = user.RealName,
Category = 1,
IPAddress = ip,
Abstracts = "登录成功",
PlatForm = clent.String,
CreatorTime = DateTime.Now
}
});
return new LoginOutput()
{
theme = user.Theme == null ? "classic" : user.Theme,
token = "Bearer " + accessToken
};
}
///
/// 锁屏解锁登录
///
/// 登录输入参数
///
[HttpPost("LockScreen")]
public async Task LockScreen([Required] LoginInput input)
{
var users = await _userService.GetInfoByAccount(input.account);
_ = users ?? throw NCCException.Oh(ErrorCode.D5002);
//根据用户账号获取用户秘钥
var secretkey = (await _userService.GetInfoByAccount(input.account)).Secretkey;
//获取加密后的密码
var encryptPasswod = MD5Encryption.Encrypt(input.password + secretkey);
bool isMoble = false;
if (input.account == users.MobilePhone) isMoble = true;
var user = await _userService.GetInfoByLogin(input.account, encryptPasswod, isMoble);
_ = user ?? throw NCCException.Oh(ErrorCode.D1000);
}
///
/// 获取当前登录用户信息
///
///
[HttpGet("CurrentUser")]
public async Task GetCurrentUser()
{
var user = await _userManager.GetUserInfo();
var userId = user.userId;
var userContext = App.User;
var httpContext = _httpContextAccessor.HttpContext;
var tenantId = userContext?.FindFirstValue(ClaimConst.TENANT_ID);
var tenantDbName = userContext?.FindFirstValue(ClaimConst.TENANT_DB_NAME);
var loginOutput = new CurrentUserOutput();
loginOutput.userInfo = user;
//菜单
loginOutput.menuList = await _moduleService.GetUserTreeModuleList(_userManager.IsAdministrator, userId);
var currentUserModel = new CurrentUserModelOutput();
currentUserModel.moduleList = await _moduleService.GetUserModueList(_userManager.IsAdministrator, userId);
currentUserModel.buttonList = await _moduleButtonService.GetUserModuleButtonList(_userManager.IsAdministrator, userId);
currentUserModel.columnList = await _columnService.GetUserModuleColumnList(_userManager.IsAdministrator, userId);
currentUserModel.formList = await _formService.GetUserModuleFormList(_userManager.IsAdministrator, userId);
currentUserModel.resourceList = await _moduleDataAuthorizeSchemeService.GetResourceList(_userManager.IsAdministrator, userId);
//权限信息
var permissionList = new List();
currentUserModel.moduleList.ForEach(menu =>
{
var permissionModel = new PermissionModel();
permissionModel.modelId = menu.id;
permissionModel.moduleName = menu.fullName;
permissionModel.button = currentUserModel.buttonList.FindAll(t => t.moduleId.Equals(menu.id)).Adapt>();
permissionModel.column = currentUserModel.columnList.FindAll(t => t.moduleId.Equals(menu.id)).Adapt>();
permissionModel.form = currentUserModel.formList.FindAll(t => t.moduleId.Equals(menu.id)).Adapt>();
permissionModel.resource = currentUserModel.resourceList.FindAll(t => t.moduleId.Equals(menu.id)).Adapt>();
permissionList.Add(permissionModel);
});
//await _sysCacheService.SetAsync(CommonConst.CACHE_KEY_PERMISSION + "");
loginOutput.permissionList = permissionList;
return loginOutput;
}
///
/// 获取当前登录用户信息(简单信息)
///
///
[HttpGet("GetSimpleCurrentUser")]
public async Task GetSimpleCurrentUser()
{
var user = await _userManager.GetUserInfo();
//var userId = user.userId;
//var userContext = App.User;
//var httpContext = _httpContextAccessor.HttpContext;
var loginOutput = new CurrentUserOutput();
loginOutput.userInfo = user;
return loginOutput;
}
///
/// 退出
///
///
[HttpGet("Logout")]
public async Task Logout()
{
var httpContext = _httpContextAccessor.HttpContext;
httpContext.SignoutToSwagger();
var user = _userManager.User;
await _sysCacheService.DelUserInfo(_userManager.TenantId + "_" + user.Id);
var clent = Parser.GetDefault().Parse(httpContext.Request.Headers["User-Agent"]);
var userContext = App.User;
var tenantId = userContext?.FindFirstValue(ClaimConst.TENANT_ID);
var tenantDbName = userContext?.FindFirstValue(ClaimConst.TENANT_DB_NAME);
//清除IM中的webSocket
//var list = _sysCacheService.GetOnlineUserList(tenantId);
//var onlineUser = list.Find(it => it.tenantId == tenantId && it.userId == user.Id);
//list.RemoveAll((x) => x.connectionId == onlineUser.connectionId);
//_sysCacheService.SetOnlineUserList(tenantId, list);
//// 增加退出日记
//Event.Emit("Log:CreateVisLog", new LogEventBridgeCrInput
//{
// tenantId = tenantId,
// tenantDbName = tenantDbName,
// entity = new SysLogEntity
// {
// Id = YitIdHelper.NextId().ToString(),
// UserId = user.Id,
// UserName = user.RealName,
// Category = 1,
// IPAddress = httpContext.GetRemoteIpAddressToIPv4(),
// Abstracts = "退出成功",
// PlatForm = clent.String,
// CreatorTime = DateTime.Now
// }
//});
}
#region PrivateMethod
///
/// 判断app用户角色是否存在且有效
///
///
///
private bool ExistRoleByApp(string roleIds)
{
if (roleIds.IsEmpty())
{
return false;
}
var roleIdList1 = roleIds.Split(",").ToList();
var roleIdList2 = _db.Queryable().Where(x => x.DeleteMark == null && x.EnabledMark == 1).Select(x => x.Id).ToList();
return roleIdList1.Intersect(roleIdList2).ToList().Count > 0;
}
///
/// 短信
///
///
///
///
private void SmsSend(string code, string mobile, SysConfigOutput sysconfig)
{
var telList = new List();
var smsModel = new SmsModel()
{
keyId = sysconfig.smsKeyId,
keySecret = sysconfig.smsKeySecret,
signName = sysconfig.smsSignName,
appId = sysconfig.smsAppId,
templateId = sysconfig.smsTemplateId,
region = "ap-guangzhou",
mobileAli = mobile,
mobileTx = null,
templateParamAli = "{\"code\":\"" + code + "\"}",
templateParamTx = new string[] { "12345" }
};
if (sysconfig.smsCompany.Equals("2"))
{
Sms.SendSmsByTencent(smsModel);
}
else
{
Sms.SendSmsByAli(smsModel);
}
}
///
/// 获取随机6位数字
///
///
private int getKey()
{
Random rd = new Random();
int key = (int)(rd.NextDouble() * 999999);
return key;
}
#endregion
}
}