using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Threading.Tasks; using Autofac.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MySqlX.XDevAPI.Common; using New_College.AuthHelper.OverWrite; using New_College.IServices; using New_College.Model; using New_College.Model.Models; using New_College.Model.Request; using New_College.Model.ViewModels; using Org.BouncyCastle.Asn1.Ocsp; namespace New_College.Api.Controllers.Front { [Route("api/front/[controller]/[action]")] [ApiController] [Authorize(Roles = "users")] public class CustomerController : ControllerBase { private readonly IV_CustomerInfoServices _services; private readonly ID_UserSettingBaseServices _userSetting; private readonly ICasdoorUserServices _casdoorUserServices; public CustomerController(IV_CustomerInfoServices IV_CustomerInfoServices, ID_UserSettingBaseServices userSetting, ICasdoorUserServices casdoorUserServices) { _services = IV_CustomerInfoServices; _userSetting = userSetting; _casdoorUserServices = casdoorUserServices; } /// /// /// /// /// [HttpPost] [AllowAnonymous] public async Task> SyncCustomerInfo([FromBody] SyncCustomerDto sync) { switch (sync.action) { case "signup": break; case "login": case "logout": case "update-user": case "delete-user": case "add-user": if (!string.IsNullOrWhiteSpace(sync.extendedUser.id)) { var singlelist = await _services.Query(e => e.OpenId == sync.extendedUser.id); if (singlelist.Any()) { var single = singlelist.FirstOrDefault(); var custome = new CustomerUpdateQuery() { StudentId = single.Id, NickName = sync.extendedUser.displayName, Phone = sync.extendedUser.phone, Expectedscore = sync.extendedUser.score, AvatarUrl = sync.extendedUser.avatar }; await _services.UpdateCustomer(custome); } } break; } return new MessageModel() { msg = "ok", response = true, success = true }; } /// ///账号注销 /// /// 传入OpenId [HttpPost] public async Task> AccountCancel([FromBody] LoginQuery login) { var single = await _services.Query(c => c.OpenId == login.openId); if (single.Any()) { var newmodel = single.FirstOrDefault(); newmodel.IsDelete = true; var update = await _services.Update(newmodel); await _casdoorUserServices.AccontCancel(login.openId); return new MessageModel() { success = true, msg = "ok", response = update, status = 200 }; } return new MessageModel() { status = 200, response = false, msg = "fail", }; } /// /// 获取微信openid /// /// /// [HttpPost] [AllowAnonymous] public MessageModel GetWxOpenId(WeixinLogin login) { var response = new CustomerInfoResult(); try { var result = _services.AuthCode2Session(login.code); if (result.openid != "" && result.openid != null) { var loginstatus = _services.Logined(new LoginQuery() { openId = result.openid }).Result; if (loginstatus.Item1) { response = loginstatus.Item2; } else { var save = _services.CustomerSave(new DecryptUserInfoRequest() { openid = result.openid }).Result; response.OpenId = result.openid; response.Id = save; } TokenModelJwt tokenModel = new TokenModelJwt { Uid = response.Id, Role = "users" }; response.Token = JwtHelper.IssueJwt(tokenModel); response.session_key = result.session_key; return new MessageModel() { success = true, msg = "success", response = response }; } else { return new MessageModel() { success = false, response = response }; } } catch (Exception ex) { return new MessageModel() { msg = ex.ToString(), success = false, response = response }; } } [AllowAnonymous] [HttpPost] [DisplayName("获取微信用户电话号码")] public async Task> GetWxPhone(DecryptUserPhoneRequest request) { var accessToken = _services.access_Token(); var reqUserPhoneNumber = new WxaBusinessGetUserPhoneNumberRequest() { code = request.code, access_Token = accessToken.access_token, }; var repUserPhoneNumber = _services.WxaBusinessGetUserPhoneNumber(reqUserPhoneNumber); var customerinfo = (await _services.Query(e => e.OpenId == request.openId)).FirstOrDefault(); customerinfo.Phone = repUserPhoneNumber.phone_info.phoneNumber; var result = repUserPhoneNumber.errcode == 0 ? await _services.Update(customerinfo) : false; return new MessageModel() { msg = result ? "修改成功" : "保存失败", response = repUserPhoneNumber.phone_info.phoneNumber, success = result ? true : false, }; } /// /// 解密手机号同时保存用户信息 /// /// /// [HttpPost] [AllowAnonymous] public async Task> WeixinDecryptUserInfo(DecryptUserInfoRequest request) { var phoneinfo = _services.GetWeixinPhone(new GetPhoneInfo() { encryptedData = request.encryptedData, iv = request.iv, openid = request.openid, session_key = request.session_key }); request.phone = phoneinfo; var customerinfo = (await _services.Query(e => e.OpenId == request.openid)).FirstOrDefault(); customerinfo.AvatarUrl = request.avatarUrl; customerinfo.NickName = request.nickName; customerinfo.Gender = request.gender; customerinfo.Phone = phoneinfo; var result = await _services.Update(customerinfo); if (result) { return new MessageModel() { msg = result ? "修改成功" : "保存失败", response = phoneinfo, success = result }; } else { return new MessageModel() { msg = result ? "修改成功" : "保存失败", response = "0", success = result }; } } /// ///用户获取用户信息有OpenId 调用此接口 /// /// /// [HttpGet] public async Task> GetUserInfo([FromQuery] LoginQuery query) { var result = await _services.GetUserInfo(query); return new MessageModel() { response = result.Item2, success = result.Item1, msg = result.Item1 ? "登陆成功" : "用户不存在" }; } /// /// 更改分数 /// /// /// [HttpPost] public async Task> UpdateScore(UpdateScoreQuery query) { var customersingle = await _services.QueryById(query.StudentId); if (customersingle == null) { return new MessageModel() { }; } var result = await _services.UpdateScore(query); if (result.Id > 0) { await _userSetting.UpdateSingleCustomerSetting(new UserBaseSettingUpdateDTO() { UType = 0, CustomerId = query.StudentId });//修改参数次数 var token = JwtHelper.IssueJwt(new TokenModelJwt() { Uid = result.Id, Role = "学生" }); result.Token = token; } return new MessageModel() { success = result.Status == 1, msg = result.Status == 1 ? "修改成功" : "修改失败", response = result }; } /// /// 完善用户信息 /// /// /// [HttpPost] public async Task> UpdateCustomer([FromBody] CustomerUpdateQuery query) { var result = await _services.UpdateCustomer(query); if (result.Id > 0) { var token = JwtHelper.IssueJwt(new TokenModelJwt() { Uid = result.Id, Role = "学生" }); result.Token = token; } return new MessageModel() { success = result.Status == 1, msg = result.Status == 1 ? "成功" : "失败", response = result }; } /// /// 修改用户头像与名称 /// /// /// [HttpPost] public async Task> UpdateCustomerAvatarUrl(UpdateCustomerQuery query) { var result = await _services.UpdateCustomerInfo(query); if (result.Id > 0) { var token = JwtHelper.IssueJwt(new TokenModelJwt() { Uid = result.Id, Role = "学生" }); result.Token = token; } return new MessageModel() { success = result.Status == 1, msg = result.Status == 1 ? "成功" : "失败", response = result }; } /// /// 根绝Id获取用户信息 /// /// /// [HttpGet] public async Task> GetCustomerInfoById([FromQuery] IdQuery query) { return await _services.GetCustomerInfoById(query); } } }