diff --git a/24Hour/Controllers/LoginController.cs b/24Hour/Controllers/LoginController.cs index a3d4302..febc76c 100644 --- a/24Hour/Controllers/LoginController.cs +++ b/24Hour/Controllers/LoginController.cs @@ -34,13 +34,15 @@ namespace _24Hour.Controllers private readonly IConfiguration _configuration; private readonly SqlSugarClient _db;//数据库 private readonly WriteSysLog _logs;//操作日志 - private readonly ILogger _logger;//日志 + private readonly ILogger _logger;//日志 + private readonly WechatMessagerClient wechatMessagerClient; Result ret = new Result(); - public LoginController(ILogger logger, SqlSugarClient db, IConfiguration configuration) + public LoginController(ILogger logger, SqlSugarClient db, IConfiguration configuration, WechatMessagerClient _wechatMessagerClient) { _logger = logger; _db = db; _configuration = configuration; + this.wechatMessagerClient = _wechatMessagerClient; } [HttpPost] @@ -315,9 +317,9 @@ namespace _24Hour.Controllers public async Task WeChatLoginByCode(string code) { var opendata = await GetOpenId(code); - if (opendata.IsSucceed==true) + if (opendata.IsSucceed == true) { - return WeChatLogin(opendata.result); + return await WeChatLogin(opendata.result); } else { @@ -337,20 +339,32 @@ namespace _24Hour.Controllers { var date = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.isdeactivate == 0 && q.wechatId == openId).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 == 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.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.usertype == 0 && date.becurrent == 1) { ret.IsSucceed = false; @@ -388,7 +402,8 @@ namespace _24Hour.Controllers identity = date.identity, usertype = date.usertype, unitCode = date.unitCode, - token = tokenString + token = tokenString, + openId = date.wechatId }; #endregion ret.IsSucceed = true; @@ -396,7 +411,7 @@ namespace _24Hour.Controllers else { ret.IsSucceed = false; - ret.Message = "微信未授权!"; + ret.Message = "微信未授权,请先注册账号!"; } return ret; } @@ -412,6 +427,12 @@ namespace _24Hour.Controllers { try { + if (string.IsNullOrEmpty(UserModel.wechatId) && await _db.Queryable().AnyAsync(x => x.wechatId == UserModel.wechatId && x.IsDeleted == 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 == "律师") @@ -620,29 +641,7 @@ namespace _24Hour.Controllers /// /// [HttpGet("getOpenid")] - public async Task GetOpenId(string code) - { - var opendata = HttpHelper.Get($"https://api.weixin.qq.com/sns/jscode2session?appid={appid}&secret={secid}&js_code={code}&grant_type=authorization_code"); - var data = JsonConvert.DeserializeAnonymousType(opendata, new - { - openid=default(string), - session_key = default(string), - unionid = default(string), - errcode = default(int), - errmsg = default(string), - }); - if (data.errcode==0) - { - ret.IsSucceed = true; - ret.result = data.openid; - } - else - { - ret.IsSucceed = false; - ret.Message = data.errmsg; - } - return ret; - } + public Task GetOpenId(string code) => wechatMessagerClient.GetOpenId(code); } diff --git a/24Hour/Controllers/system/SystemControllerController.cs b/24Hour/Controllers/system/SystemControllerController.cs index b48aa1e..243601f 100644 --- a/24Hour/Controllers/system/SystemControllerController.cs +++ b/24Hour/Controllers/system/SystemControllerController.cs @@ -1,4 +1,5 @@ -锘縰sing com.sun.xml.@internal.ws.api.model; +锘縰sing com.sun.org.apache.bcel.@internal.generic; +using com.sun.xml.@internal.ws.api.model; using Elight.Entity; using Elight.Entity.SystemModel; using Elight.Logic; @@ -28,13 +29,15 @@ namespace _24Hour.Controllers.system private readonly WriteSysLog _logs;//鎿嶄綔鏃ュ織 App_Sys_UserModel _userdata = new App_Sys_UserModel();//褰撳墠鐢ㄦ埛 private readonly ILogger _logger;//鏃ュ織 + private readonly WechatMessagerClient wechatMessagerClient; Result result = new Result(); - public SystemControllerController(ILogger logger, SqlSugarClient db, WriteSysLog logs, User user) + public SystemControllerController(ILogger logger, SqlSugarClient db, WriteSysLog logs, User user, WechatMessagerClient _wechatMessagerClient) { _logger = logger; _db = db; _logs = logs; _userdata = user.Userdata(); + this.wechatMessagerClient = _wechatMessagerClient; } #endregion #region 鐢ㄦ埛绠$悊 @@ -61,7 +64,7 @@ namespace _24Hour.Controllers.system [Route("QueryUserlist")] public async Task QueryUserlist() { - var Unitlist = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.isdeactivate == 0 && q.usertype == 0 && q.unitCode == _userdata.unitCode && q.phone != "admin"&& q.usertype == 0).ToListAsync(); + var Unitlist = await _db.Queryable().Where(q => q.IsDeleted == 0 && q.isdeactivate == 0 && q.usertype == 0 && q.unitCode == _userdata.unitCode && q.phone != "admin" && q.usertype == 0).ToListAsync(); result.IsSucceed = true; result.result = Unitlist.OrderByDescending(q => q.createtime).ToList(); return result; @@ -85,7 +88,7 @@ namespace _24Hour.Controllers.system .WhereIF(!UserModel.phone.IsNull(), q => q.phone.Contains(UserModel.phone)) .WhereIF(!UserModel.duties.IsNull(), q => q.duties.Contains(UserModel.duties)) .WhereIF(!UserModel.cardId.IsNull(), q => q.cardId.Contains(UserModel.cardId)) - .Where(q => q.IsDeleted == 0 &&q.phone!="admin" && q.usertype == 0) + .Where(q => q.IsDeleted == 0 && q.phone != "admin" && q.usertype == 0) .ToPageListAsync(UserModel.PageIndex, UserModel.PageSize, totalNumber); UserModel.RowsCount = totalNumber; list.ForEach(q => @@ -134,7 +137,7 @@ namespace _24Hour.Controllers.system .WhereIF(!UserModel.phone.IsNull(), q => q.phone.Contains(UserModel.phone)) .WhereIF(!UserModel.duties.IsNull(), q => q.duties.Contains(UserModel.duties)) .WhereIF(!UserModel.cardId.IsNull(), q => q.cardId.Contains(UserModel.cardId)) - .WhereIF(UserModel.audit!=null, q => q.audit==UserModel.audit) + .WhereIF(UserModel.audit != null, q => q.audit == UserModel.audit) .Where(q => q.IsDeleted == 0 && q.usertype == 1).ToPageListAsync(UserModel.PageIndex, UserModel.PageSize, totalNumber); UserModel.RowsCount = totalNumber; var data = new QueryResult(UserModel, list); @@ -196,7 +199,7 @@ namespace _24Hour.Controllers.system { try { - var model = await _db.Queryable().Where(x => x.Id== UserModel.Id).FirstAsync(); + var model = await _db.Queryable().Where(x => x.Id == UserModel.Id).FirstAsync(); if (model == null) { result.IsSucceed = false; @@ -211,10 +214,10 @@ namespace _24Hour.Controllers.system return result; } - model.Password= newpass; + model.Password = newpass; _db.BeginTran(); - var num = await _db.Updateable(model).UpdateColumns(it => new { it.Password }).ExecuteCommandAsync(); + var num = await _db.Updateable(model).UpdateColumns(it => new { it.Password }).ExecuteCommandAsync(); _db.CommitTran(); if (num > 0) { @@ -243,16 +246,16 @@ namespace _24Hour.Controllers.system { try { - var model = await _db.Queryable().Where(x => x.Id== UserModel.Id).FirstAsync(); + var model = await _db.Queryable().Where(x => x.Id == UserModel.Id).FirstAsync(); if (model != null) { - model.unitCode=UserModel.unitCode; - model.department=UserModel.department; - model.name=UserModel.name; - model.sex=UserModel.sex; - model.duties=UserModel.duties; - model.phone=UserModel.phone; - model.cardId=UserModel.cardId; + model.unitCode = UserModel.unitCode; + model.department = UserModel.department; + model.name = UserModel.name; + model.sex = UserModel.sex; + model.duties = UserModel.duties; + model.phone = UserModel.phone; + model.cardId = UserModel.cardId; } _db.BeginTran(); var num = await _db.Updateable(model).UpdateColumns(it => new { it.unitCode, it.department, it.name, it.sex, it.duties, it.phone, it.cardId }).ExecuteCommandAsync(); @@ -272,6 +275,88 @@ namespace _24Hour.Controllers.system } _logs.WriteSysLogadd("鐢ㄦ埛绠$悊", "淇敼浜哄憳淇℃伅", result, _db); return result; + } + + [HttpGet] + [Route("UserUnbindWechat")] + public async Task UserUnbindWechat() + { + try + { + var model = await _db.Queryable().Where(x => x.Id == _userdata.Id && x.IsDeleted == 0).FirstAsync(); + if (model != null) + { + model.wechatId = string.Empty; + } + _db.BeginTran(); + var num = await _db.Updateable(model).UpdateColumns(it => new { it.wechatId }).ExecuteCommandAsync(); + //var num = await _db.Updateable(UserModel).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + _db.CommitTran(); + if (num > 0) + { + result.IsSucceed = true; + result.result = ""; + } + } + catch (System.Exception ex) + { + _db.RollbackTran(); + result.IsSucceed = false; + result.Message = ex.Message; + } + _logs.WriteSysLogadd("鐢ㄦ埛绠$悊", "淇敼浜哄憳淇℃伅", result, _db); + return result; + } + + /// + /// 鐢ㄦ埛缁戝畾寰俊openid + /// + /// + /// + [HttpGet] + [Route("UserBindWechat")] + public async Task UserBindWechat(string code) + { + try + { + var getopenid = await wechatMessagerClient.GetOpenId(code); + if (getopenid.IsSucceed == false) + { + return getopenid; + } + string openid = getopenid.result; + + if (await _db.Queryable().AnyAsync(x => x.wechatId == openid && x.IsDeleted == 0)) + { + result.IsSucceed = false; + result.Message = "褰撳墠寰俊宸蹭笌鍏朵粬璐﹀彿缁戝畾"; + return result; + } + + + var model = await _db.Queryable().Where(x => x.Id == _userdata.Id && x.IsDeleted == 0).FirstAsync(); + if (model != null) + { + model.wechatId = getopenid.result; + } + _db.BeginTran(); + var num = await _db.Updateable(model).UpdateColumns(it => new { it.wechatId }).ExecuteCommandAsync(); + //var num = await _db.Updateable(UserModel).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + _db.CommitTran(); + if (num > 0) + { + result.IsSucceed = true; + result.result = getopenid.result; + } + } + catch (System.Exception ex) + { + _db.RollbackTran(); + result.IsSucceed = false; + result.Message = ex.Message; + } + _logs.WriteSysLogadd("鐢ㄦ埛绠$悊", "淇敼浜哄憳淇℃伅", result, _db); + return result; } /// @@ -503,7 +588,7 @@ namespace _24Hour.Controllers.system /// 寰嬪笀淇℃伅瀹℃牳璁よ瘉 [HttpGet] [Route("Examine")] - public async Task Examine(string Id, int status,string describe) + public async Task Examine(string Id, int status, string describe) { try { @@ -519,7 +604,7 @@ namespace _24Hour.Controllers.system if (num > 0) { result.IsSucceed = true; - result.result = status==0?"璁よ瘉閫氳繃":"璁よ瘉涓嶉氳繃"; + result.result = status == 0 ? "璁よ瘉閫氳繃" : "璁よ瘉涓嶉氳繃"; } } catch (System.Exception ex) @@ -688,7 +773,7 @@ namespace _24Hour.Controllers.system try { //鏌ヨ瑙掕壊涓嬬殑鑿滃崟 - var list = await _db.Queryable().Where(q => q.roleId== RoleMenudata.Id).ToListAsync(); + var list = await _db.Queryable().Where(q => q.roleId == RoleMenudata.Id).ToListAsync(); _db.BeginTran(); //鍒犻櫎瑙掕壊涓嬬殑鑿滃崟 await _db.Deleteable(list).ExecuteCommandAsync(); @@ -1073,7 +1158,7 @@ namespace _24Hour.Controllers.system try { //娣诲姞鍗曚綅鍓嶅垽鏂崟浣嶇紪鐮佹槸鍚﹂噸澶 - var data = await _db.Queryable().Where(q => q.departCode == Departdata.departCode && q.IsDelete==0).FirstAsync(); + var data = await _db.Queryable().Where(q => q.departCode == Departdata.departCode && q.IsDelete == 0).FirstAsync(); if (data != null) { @@ -1115,7 +1200,7 @@ namespace _24Hour.Controllers.system try { //鍒ゆ柇鍗曚綅缂栫爜鏄惁宸插瓨鍦 - var data = await _db.Queryable().Where(q => q.departCode == Departdata.departCode && q.IsDelete==0).FirstAsync(); + var data = await _db.Queryable().Where(q => q.departCode == Departdata.departCode && q.IsDelete == 0).FirstAsync(); if (data != null) { @@ -1189,7 +1274,7 @@ namespace _24Hour.Controllers.system [Route("GetQueryMenulist")] public async Task GetQueryMenulist() { - var list = await _db.Queryable().Where(q => q.IsDelete == 0 || q.pid==null || q.pid == "").Select(q => new { q.Id, q.name }).ToListAsync(); + var list = await _db.Queryable().Where(q => q.IsDelete == 0 || q.pid == null || q.pid == "").Select(q => new { q.Id, q.name }).ToListAsync(); result.IsSucceed = true; result.result = list; return result; diff --git a/24Hour/Program.cs b/24Hour/Program.cs index 5619017..5220e55 100644 --- a/24Hour/Program.cs +++ b/24Hour/Program.cs @@ -19,9 +19,9 @@ using System.Runtime.InteropServices; using AutoMapper; using System.Reflection; using Elight.Entity; - + #region builder - + var builder = WebApplication.CreateBuilder(args); var Configuration = builder.Configuration; @@ -165,6 +165,12 @@ builder.Services.AddAuthentication(options => }).AddScheme(nameof(ResponseAuthenticationHandler), o => { }); + +builder.Services.AddHttpClient(opt => +{ + opt.BaseAddress = new Uri("https://api.weixin.qq.com/sns"); +}); + //builder.Services.AddAuthorization(); builder.Services.AddHttpContextAccessor(); builder.Services.AddScoped(); diff --git a/24Hour/WechatMessagerClient.cs b/24Hour/WechatMessagerClient.cs new file mode 100644 index 0000000..092837f --- /dev/null +++ b/24Hour/WechatMessagerClient.cs @@ -0,0 +1,57 @@ +锘縰sing com.sun.org.apache.bcel.@internal.generic; +using com.sun.xml.@internal.xsom; +using Elight.Utility; +using Elight.Utility.Code; +using Newtonsoft.Json; + +namespace _24Hour +{ + + public class WechatMessagerClient + { + private readonly HttpClient httpCliet; + public WechatMessagerClient(HttpClient _httpCliet) + { + this.httpCliet = _httpCliet; + + httpCliet.DefaultRequestHeaders.Add("Accept", "application/json"); + httpCliet.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample"); + httpCliet.DefaultRequestHeaders.ConnectionClose = true; + } + + /// + /// 灏忕▼搴廇ppID + /// + private const string appid = "wx48108a0c98a3dab0"; + /// + /// 灏忕▼搴弒ecretID + /// + private const string secid = "e752e4fba67526eca21313a18c96a58f"; + public async Task GetOpenId(string code) + { + var ret = new Result(); + var reponse = await httpCliet.GetAsync($"/sns/jscode2session?appid={appid}&secret={secid}&js_code={code}&grant_type=authorization_code"); + var opendata = await reponse.EnsureSuccessStatusCode().Content.ReadAsStringAsync(); + var data = JsonConvert.DeserializeAnonymousType(opendata, new + { + openid = default(string), + session_key = default(string), + unionid = default(string), + errcode = default(int), + errmsg = default(string), + }); + if (data.errcode == 0) + { + ret.IsSucceed = true; + ret.result = data.openid; + } + else + { + ret.IsSucceed = false; + ret.Message = data.errmsg; + } + return ret; + } + + } +}