using _24Hour.Model; using com.sun.org.apache.bcel.@internal.generic; using com.sun.xml.@internal.ws.api.model; using Elight.Entity; using Elight.Logic; using Elight.Logic.SystemModel; using Elight.Utility; using Elight.Utility.Code; using Elight.Utility.Encrypt; using Elight.Utility.Extensions; using Elight.Utility.logs; using java.security; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.IdentityModel.Tokens; using Newtonsoft.Json; using SqlSugar; using System.IdentityModel.Tokens.Jwt; using System.Runtime.Serialization; using System.Security.Claims; using System.Text; namespace _24Hour.Controllers { /// /// 登录 /// // [HiddenApi] [ApiController] [Route("api/APP")] public class LoginController : ControllerBase { private readonly IConfiguration _configuration; private readonly SqlSugarClient _db;//数据库 private readonly WriteSysLog _logs;//操作日志 private readonly ILogger _logger;//日志 private readonly WechatMessagerClient wechatMessagerClient; Result ret = new Result(); public LoginController(ILogger logger, SqlSugarClient db, IConfiguration configuration, WechatMessagerClient _wechatMessagerClient) { _logger = logger; _db = db; _configuration = configuration; this.wechatMessagerClient = _wechatMessagerClient; } [HttpPost] [Route("LoginDefault")] [CustomCorsActionFilterAttribute] public async Task LoginDefault() { var Passmd5 = Md5.Encrypt32("jcy@123456").ToLower(); var date = await _db.Queryable().Where(x => x.phone == "admin" && x.IsDeleted == 0).FirstAsync(); if (date == null) { ret.IsSucceed = false; ret.Message = "账号不存在,请先注册!"; return ret; } if (Passmd5 != date.Password) { ret.IsSucceed = false; ret.Message = "账号或者密码错误!"; return ret; } if (!string.IsNullOrEmpty(date.department)) { var dept = await _db.Queryable().Where(x => x.Id == date.department && x.IsDelete == 0).FirstAsync(); if (dept != null) { date.departmentName = dept.departname; } } #region jwt生成token var tokenHandler = new JwtSecurityTokenHandler(); var claims = new Claim[] { new Claim(ClaimTypes.UserData,JsonConvert.SerializeObject(date)), }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("JwtConfiguration:Jwtkey").Value)); var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //Token var jwttoken = new JwtSecurityToken( issuer: _configuration.GetSection("JwtConfiguration:Issuer").Value, audience: _configuration.GetSection("JwtConfiguration:Audience").Value, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(1), signingCredentials: signingCredentials ); //var token = new JwtSecurityTokenHandler().CreateToken(jwttoken); var tokenString = new JwtSecurityTokenHandler().WriteToken(jwttoken); ret.IsSucceed = true; ret.result = new { Id = date.Id, name = date.name, sex = date.sex, phone = date.phone, photo = date.photo, duties = date.duties, identity = date.identity, unitCode = date.unitCode, department = date.department, departmentName = date.departmentName, token = tokenString }; #endregion ret.IsSucceed = true; return ret; } /// /// 系统登录 /// /// /// [HttpPost] [Route("SystemLogin")] [CustomCorsActionFilterAttribute] public async Task SystemLogin(UserLogin login) { try { var Passmd5 = Md5.Encrypt32(login.Password).ToLower(); var date = await _db.Queryable().Where(x => x.phone == login.phone && x.IsDeleted == 0).FirstAsync(); if (date == null) { ret.IsSucceed = false; ret.Message = "账号不存在,请先注册!"; return ret; } if (Passmd5 != date.Password) { ret.IsSucceed = false; ret.Message = "账号或者密码错误!"; return ret; } if (!string.IsNullOrEmpty(date.department)) { var dept = await _db.Queryable().Where(x => x.Id == date.department && x.IsDelete == 0).FirstAsync(); if (dept != null) { date.departmentName = dept.departname; } } #region jwt生成token var tokenHandler = new JwtSecurityTokenHandler(); var claims = new Claim[] { new Claim(ClaimTypes.UserData,JsonConvert.SerializeObject(date)), }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("JwtConfiguration:Jwtkey").Value)); var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //Token var jwttoken = new JwtSecurityToken( issuer: _configuration.GetSection("JwtConfiguration:Issuer").Value, audience: _configuration.GetSection("JwtConfiguration:Audience").Value, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(1), signingCredentials: signingCredentials ); //var token = new JwtSecurityTokenHandler().CreateToken(jwttoken); var tokenString = new JwtSecurityTokenHandler().WriteToken(jwttoken); var Unitdate = await _db.Queryable().FirstAsync(x => x.unitCode == date.unitCode); ret.IsSucceed = true; ret.result = new { Id = date.Id, name = date.name, sex = date.sex, phone = date.phone, photo = date.photo, duties = date.duties, identity = date.identity, unitCode = date.unitCode, unitname = Unitdate?.unitname, department = date.department, departmentName = date.departmentName, token = tokenString }; #endregion } catch (Exception ex) { ret.IsSucceed = false; ret.Message = $"{ex.Message}"; LogService.WriteLog(ex, "登录"); } return ret; } /// /// app--登录 /// /// /// [HttpPost] [Route("Login")] [CustomCorsActionFilterAttribute] public async Task Login(UserLogin login) { try { var Passmd5 = Md5.Encrypt32(login.Password).ToLower(); var date = await _db.Queryable().Where(x => x.phone == login.phone && x.IsDeleted == 0).FirstAsync(); if (date == null) { ret.IsSucceed = false; ret.Message = "账号不存在,请先注册!"; return ret; } if (date.identity == "律师" && date.audit == 1) { ret.IsSucceed = false; ret.Message = $"用户信息审核未通过,原因:{date.describe},请重新注册!"; return ret; } else if (date.identity == "律师" && date.audit == 2) { ret.IsSucceed = false; ret.Message = "用户信息审核中!"; return ret; } if (Passmd5 != date.Password) { ret.IsSucceed = false; ret.Message = "账号或密码错误!"; return ret; } //else if (date.usertype == 1 && date.audit == null) //{ // ret.IsSucceed = false; // ret.Message = "账号审核中!"; // return ret; //} //else if (date.usertype == 1 && date.audit == 1) //{ // ret.IsSucceed = false; // ret.Message = $"账号审核未通过,原因:{date.describe}!"; // return ret; //} else if (date.usertype == 0 && date.becurrent == 1) { ret.IsSucceed = false; ret.Message = $"账号未授权无法登录,请联系管理员!"; return ret; } if (!string.IsNullOrEmpty(date.department)) { var dept = await _db.Queryable().Where(x => x.Id == date.department && x.IsDelete == 0).FirstAsync(); if (dept != null) { date.departmentName = dept.departname; } } #region jwt生成token var tokenHandler = new JwtSecurityTokenHandler(); var claims = new Claim[] { new Claim(ClaimTypes.UserData,JsonConvert.SerializeObject(date)), }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("JwtConfiguration:Jwtkey").Value)); var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //Token var jwttoken = new JwtSecurityToken( issuer: _configuration.GetSection("JwtConfiguration:Issuer").Value, audience: _configuration.GetSection("JwtConfiguration:Audience").Value, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(1), signingCredentials: signingCredentials ); //var token = new JwtSecurityTokenHandler().CreateToken(jwttoken); var tokenString = new JwtSecurityTokenHandler().WriteToken(jwttoken); ret.result = new { Id = date.Id, name = date.name, sex = date.sex, phone = date.phone, photo = date.photo, duties = date.duties, identity = date.identity, usertype = date.usertype, unitCode = date.unitCode, department = date.department, departmentName = date.departmentName, token = tokenString }; #endregion ret.IsSucceed = true; } catch (Exception ex) { ret.IsSucceed = false; ret.Message = $"{ex.Message}"; LogService.WriteLog(ex, "登录"); } return ret; } /// /// 微信Code 登陆 /// /// /// [HttpGet] [Route("WeChatLoginCode")] public async Task WeChatLoginByCode(string code) { var opendata = await GetOpenId(code); if (opendata.IsSucceed == true) { return await WeChatLogin(opendata.result); } else { return opendata; } } /// /// 微信授权登录 /// /// /// [HttpGet] [Route("WeChatLogin")] public async Task WeChatLogin(string openId) { var date = await _db.Queryable() .Where(q => q.IsDeleted == 0 && q.wechatId == openId) .OrderByDescending(x => x.createtime) .FirstAsync(); if (date != null) { if (date.identity == "律师" && date.audit == 1) { ret.IsSucceed = false; ret.Message = $"用户信息审核未通过,原因:{date.describe},请重新注册!"; return ret; } else if (date.identity == "律师" && date.audit == 2) { ret.IsSucceed = false; ret.Message = "用户信息审核中!"; return ret; } if (date.isdeactivate == 1) { ret.IsSucceed = false; ret.Message = "该账号已被禁用,请联系管理员!"; return ret; } if (date.usertype == 0 && date.becurrent == 1) { ret.IsSucceed = false; ret.Message = $"账号未授权无法登录,请联系管理员!"; return ret; } #region jwt生成token var tokenHandler = new JwtSecurityTokenHandler(); var claims = new Claim[] { new Claim(ClaimTypes.UserData,JsonConvert.SerializeObject(date)), }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("JwtConfiguration:Jwtkey").Value)); var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //Token var jwttoken = new JwtSecurityToken( issuer: _configuration.GetSection("JwtConfiguration:Issuer").Value, audience: _configuration.GetSection("JwtConfiguration:Audience").Value, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(1), signingCredentials: signingCredentials ); //var token = new JwtSecurityTokenHandler().CreateToken(jwttoken); var tokenString = new JwtSecurityTokenHandler().WriteToken(jwttoken); ret.result = new { Id = date.Id, name = date.name, sex = date.sex, phone = date.phone, photo = date.photo, duties = date.duties, identity = date.identity, usertype = date.usertype, unitCode = date.unitCode, token = tokenString, openId = date.wechatId, departmentPhoto = date.departmentPhoto, identityphoto = date.identityphoto, cardIdphoto = date.cardIdphoto }; #endregion ret.IsSucceed = true; } else { ret.IsSucceed = false; ret.Message = "微信未授权,请先注册账号!"; } return ret; } /// /// APP添加用户 /// /// /// [HttpPost] [Route("AddUser1")] public async Task AddUser1(App_Sys_UserModel UserModel) { try { _logger.LogInformation(UserModel.ConvertToJsonStr()); //if (string.IsNullOrEmpty(UserModel.wechatId) && await _db.Queryable().AnyAsync(x => x.wechatId == UserModel.wechatId && x.IsDeleted == 0)) //{ // ret.IsSucceed = false; // ret.Message = "当前微信已与其他账号绑定"; // return ret; //} if (string.IsNullOrEmpty(UserModel.wechatId) == false) { if (await _db.Queryable().AnyAsync(x => x.wechatId == UserModel.wechatId && x.IsDeleted == 0 && x.audit != 1 && x.isdeactivate == 0)) { ret.IsSucceed = false; ret.Message = "当前微信已与其他账号绑定"; return ret; } } var data = await _db.Queryable().Where(q => q.phone == UserModel.phone && q.IsDeleted == 0).FirstAsync(); if (UserModel.identity == "律师") { if (data != null && (data.identity != "律师" || data.audit == 0)) { ret.IsSucceed = false; ret.Message = "电话号码已存在!"; return ret; } else if (data != null && data.audit == 2) { ret.IsSucceed = false; ret.Message = "账号审核中!"; return ret; } if (data != null && data.audit == 1) { _db.BeginTran(); data.audit = 2; data.describe = ""; data.photo = "/CaseFile/resource/headicon.png"; data.name = UserModel.name; data.sex = UserModel.sex; data.phone = UserModel.phone; data.cardId = UserModel.cardId; data.identitycardId = UserModel.identitycardId; data.departmentName = UserModel.departmentName; data.Password = Elight.Utility.Encrypt.Md5.Encrypt32($"{UserModel.Password}").ToLower(); data.cardIdphoto = UserModel.cardIdphoto; data.identityphoto = UserModel.identityphoto; data.departmentPhoto = UserModel.departmentPhoto; var num = await _db.Updateable(data).IgnoreColumns(true).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { ret.IsSucceed = true; ret.result = "添加成功,审核中!"; } } else { _db.BeginTran(); UserModel.Id = Guid.NewGuid().ToString(); UserModel.usertype = 1; UserModel.audit = 2; if (string.IsNullOrEmpty(UserModel.photo)) { UserModel.photo = "/CaseFile/resource/headicon.png"; } //默认密码 UserModel.Password = Elight.Utility.Encrypt.Md5.Encrypt32($"{UserModel.Password}").ToLower(); var num = await _db.Insertable(UserModel).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { ret.IsSucceed = true; ret.result = "添加成功"; } } } else { if (data != null) { ret.IsSucceed = false; ret.Message = "电话号码已存在!"; return ret; } _db.BeginTran(); UserModel.Id = Guid.NewGuid().ToString(); UserModel.usertype = 1; //默认密码 UserModel.Password = Elight.Utility.Encrypt.Md5.Encrypt32($"{UserModel.Password}").ToLower(); if (string.IsNullOrEmpty(UserModel.photo)) { UserModel.photo = "/CaseFile/resource/headicon.png"; } var num = await _db.Insertable(UserModel).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { ret.IsSucceed = true; ret.result = "添加成功"; } } } catch (System.Exception ex) { _db.RollbackTran(); ret.IsSucceed = false; ret.Message = ex.Message; } return ret; } /// /// 单位list集合 /// /// /// [HttpPost] [Route("QueryUnitlist")] public async Task QueryUnitlist(App_Sys_UnitInput Unitdata) { var list = await _db.Queryable() .WhereIF(!Unitdata.unitCode.IsNull(), q => q.unitCode.Contains(Unitdata.unitCode)) .WhereIF(!Unitdata.unitname.IsNull(), q => q.unitname.Contains(Unitdata.unitname)) .WhereIF(!Unitdata.unitjc.IsNull(), q => q.unitjc.Contains(Unitdata.unitjc)) .Where(q => q.IsDelete == 0).ToListAsync(); ret.IsSucceed = true; ret.result = list; return ret; } /// /// 获取设备视频流地址 /// /// /// [HttpGet] [Route("getrtsp")] public async Task getrtsp(string str) { ret.IsSucceed = true; ret.result = $"{_configuration.GetSection($"Videoaddress:{str}").Value}"; return ret; } [HttpGet] [Route("cardIdLogin")] public async Task cardIdLogin(string cardId, string name) { var date = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.cardId == cardId && q.name == name).FirstAsync(); if (date != null) { //if (date.usertype == 1 && date.audit == null) // { // ret.IsSucceed = false; // ret.Message = "用户审核中!"; // return ret; // } // else if (date.usertype == 1 && date.audit == 1) // { // ret.IsSucceed = false; // ret.Message = $"用户审核未通过,原因:{date.describe}!"; // return ret; // } // else if (date.usertype == 0 && date.becurrent == 1 && date.isdeactivate == 1) { ret.IsSucceed = false; ret.Message = $"用户未授权无法登录,请联系管理员!"; return ret; } #region jwt生成token var tokenHandler = new JwtSecurityTokenHandler(); var claims = new Claim[] { new Claim(ClaimTypes.UserData,JsonConvert.SerializeObject(date)), }; var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_configuration.GetSection("JwtConfiguration:Jwtkey").Value)); var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //Token var jwttoken = new JwtSecurityToken( issuer: _configuration.GetSection("JwtConfiguration:Issuer").Value, audience: _configuration.GetSection("JwtConfiguration:Audience").Value, claims: claims, notBefore: DateTime.Now, expires: DateTime.Now.AddDays(1), signingCredentials: signingCredentials ); //var token = new JwtSecurityTokenHandler().CreateToken(jwttoken); var tokenString = new JwtSecurityTokenHandler().WriteToken(jwttoken); ret.result = new { Id = date.Id, name = date.name, sex = date.sex, phone = date.phone, photo = date.photo, duties = date.duties, identity = date.identity, usertype = date.usertype, unitCode = date.unitCode, token = tokenString }; #endregion ret.IsSucceed = true; } else { var datea = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.cardId == cardId).FirstAsync(); if (datea == null) { var UserModel = new App_Sys_UserModel(); _db.BeginTran(); UserModel.Id = Guid.NewGuid().ToString(); UserModel.cardId = cardId; UserModel.name = name; UserModel.usertype = 1; string cardIdpwa = UserModel.cardId.Substring(UserModel.cardId.Length - 6); //默认密码身份证后六位 UserModel.Password = Elight.Utility.Encrypt.Md5.Encrypt32($"{cardIdpwa}").ToLower(); var num = await _db.Insertable(UserModel).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { ret.IsSucceed = true; ret.result = "添加成功"; } } else { ret.IsSucceed = false; ret.Message = $"用户未授权无法登录,请联系管理员!"; return ret; } } return ret; } /// /// 小程序AppID /// private const string appid = "wx48108a0c98a3dab0"; /// /// 小程序secretID /// private const string secid = "e752e4fba67526eca21313a18c96a58f"; /// /// 获取微信openid /// /// /// [HttpGet("getOpenid")] public Task GetOpenId(string code) => wechatMessagerClient.GetOpenId(code); } public class UserLogin { [DataMember] public string phone { get; set; } /// /// 登录密码 /// [DataMember] public string Password { get; set; } } }