using HiTeachCE.Context; using HiTeachCE.Dtos; using HiTeachCE.Extension; using HiTeachCE.Helpers; using HiTeachCE.Models; using HiTeachCE.Services; using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using OpenXmlPowerTools; using Org.BouncyCastle.Ocsp; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Security.Claims; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.SDK.Context.Configuration; using TEAMModelOS.SDK.Context.Exception; using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest; using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse; using TEAMModelOS.SDK.Extension.JwtAuth.Models; using TEAMModelOS.SDK.Helper.Common.CollectionHelper; using TEAMModelOS.SDK.Helper.Common.JsonHelper; using TEAMModelOS.SDK.Helper.Query.LinqHelper; using TEAMModelOS.SDK.Helper.Security.ShaHash; namespace HiTeachCE.Controllers { [Route("api/[controller]")] [ApiController] public class LecturerController : BaseController { private readonly LecturerService lecturerService; public LecturerController(LecturerService lecturer) { lecturerService = lecturer; } /// /// 获取讲师列表 /// /// /// [HttpPost("list")] [Authorize(Roles =Constant.Role_Root)] public BaseJosnRPCResponse List(PaginationJosnRPCRequest> request) { // request.@params.TryAdd("PartitionKey", request.lang); JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom(); List lecturers = new List(); Expression> linq = null; linq = f => 1 == 1; if (request.@params.data.TryGetValue("cellphone", out string cellphone) && !string.IsNullOrEmpty(cellphone)) { linq = linq.And(m => m.cellphone == cellphone); } if (request.@params.data.TryGetValue("account", out string account) && !string.IsNullOrEmpty(account)) { linq = linq.And(s=> s.account == account); } if (request.@params.data.TryGetValue("username", out string username) && !string.IsNullOrEmpty(username)) { linq = linq.And(m => m.username.Contains(username)); } if (request.@params.data.TryGetValue("id", out string id) && !string.IsNullOrEmpty(id)) { linq = linq.And(m => m.id == id); } if (linq != null) { lecturers = lecturerService.GetPageList(linq, request.@params.page); } lecturers.ForEach(x => { x.password = null; }); return builder.Data(lecturers).Page(request.@params.page).build(); } /// /// 更新自己的资料 /// /// /// [HttpPost("updateSelf")] [Authorize(Policy = Constant.Role_WebAll)] public BaseJosnRPCResponse UpdateSelf(JosnRPCRequest request) { JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom(); string unionid = GetLoginUser(JwtClaimTypes.Id); Lecturer lecturer = lecturerService.GetById(request.@params.id); bool b = false; //确保更新的是自己 if (unionid.Equals(request.@params.unionid) && unionid.Equals(lecturer.unionid)) { b = UpdateLecture(request, lecturer); } else { throw new BizException("只能更新自己的信息!"); } return builder.Data(b).build(); } /// /// 更新 /// /// 修改后的 /// 修改前的 /// private bool UpdateLecture(JosnRPCRequest request ,Lecturer lecturer) { bool b = false; if (lecturer != null) { if (!string.IsNullOrEmpty(request.@params.password)) { request.@params.password = BCrypt.Net.BCrypt.HashPassword(request.@params.password); } else { request.@params.password = lecturer.password; } request.@params.unionid = lecturer.unionid; if (lecturer.setaccount != 0) { request.@params.account = lecturer.account; } request.@params.registerTime = lecturer.registerTime; request.@params.cellphone = lecturer.cellphone; request.@params.areaCode = lecturer.areaCode; request.@params.dingOpenid = lecturer.dingOpenid; request.@params.dingUnionid = lecturer.dingUnionid; b = lecturerService.Update(request.@params); } return b; } /// /// 更新讲师 /// /// /// [HttpPost("update")] [Authorize(Policy = Constant.Role_Root)] public BaseJosnRPCResponse Update(JosnRPCRequest request) { JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom(); Lecturer lecturer = lecturerService.GetById(request.@params.id); bool b = UpdateLecture(request, lecturer); return builder.Data(b).build(); } /// /// 绑定钉钉 参数 TmpAuthCode /// /// /// [HttpPost("bindDing")] [Authorize(Policy = Constant.Role_WebAll)] public BaseJosnRPCResponse BindDing(JosnRPCRequest request) { bool flag = false; JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom(); if (RedisHelper.Exists("TmpAuthCode:" + request.@params)) { DingUserInfo dingUserInfo = RedisHelper.HGet("TmpAuthCode:" + request.@params, request.@params); string unionid = GetLoginUser(JwtClaimTypes.Id); Expression> linq = null; linq = l => l.unionid == unionid; List list = lecturerService.GetList(linq); if (list.IsNotEmpty()&& dingUserInfo!=null) { Lecturer lecturer = list[0]; lecturer.dingOpenid = dingUserInfo.Openid; lecturer.dingUnionid = dingUserInfo.Unionid; lecturer.dingNick = dingUserInfo.Nick; flag = lecturerService.Update(lecturer); } } else { throw new BizException("钉钉临时授权码过期", 2); } return builder.Data(flag).build(); } //Unbound 解除绑定 /// /// 注册用户 /// /// /// [HttpPost("register")] public BaseJosnRPCResponse Register(JosnRPCRequest request) { JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom(); if (RedisHelper.Exists("ticket:" + request.@params.ticket)) { if (request.@params.user != null) { string[] phone = RedisHelper.HVals("ticket:" + request.@params.ticket); if (phone.IsNotEmpty()) { if (!request.@params.user.cellphone.Equals(phone[0])) { throw new BizException("手机号与凭证不匹配!", 2); } } else { throw new BizException("凭证无效!", 2); } Expression> linq = null; linq = m => m.cellphone == request.@params.user.cellphone || m.account == request.@params.user.account; List lecturers = lecturerService.GetList(linq); if (lecturers.IsNotEmpty()) { throw new BizException("手机号或账号已经存在!", 2); } else { request.@params.user.id = Guid.NewGuid().ToString(); request.@params.user.unionid = Guid.NewGuid().ToString("N"); request.@params.user.areaCode = "86"; request.@params.user.status = 1; request.@params.user.registerTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); if (request.@params.user.password == null) { request.@params.user.password = ""; } else { request.@params.user.password = BCrypt.Net.BCrypt.HashPassword(request.@params.user.password); } bool ib = lecturerService.Insert(request.@params.user); if (ib) { return builder.Data(ib).build(); } else { throw new BizException("注册失败!", 2); } } } else { throw new BizException("参数错误!", 2); } } else { throw new BizException("短信验证过期!", 2); } } } }