LecturerController.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. using HiTeachCE.Context;
  2. using HiTeachCE.Dtos;
  3. using HiTeachCE.Extension;
  4. using HiTeachCE.Helpers;
  5. using HiTeachCE.Models;
  6. using HiTeachCE.Services;
  7. using IdentityModel;
  8. using Microsoft.AspNetCore.Authorization;
  9. using Microsoft.AspNetCore.Mvc;
  10. using Microsoft.Extensions.Configuration;
  11. using OpenXmlPowerTools;
  12. using Org.BouncyCastle.Ocsp;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using System.Linq.Expressions;
  17. using System.Security.Claims;
  18. using System.Text.Json;
  19. using System.Threading.Tasks;
  20. using TEAMModelOS.SDK.Context.Configuration;
  21. using TEAMModelOS.SDK.Context.Exception;
  22. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  23. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  24. using TEAMModelOS.SDK.Extension.JwtAuth.Models;
  25. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  26. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  27. using TEAMModelOS.SDK.Helper.Query.LinqHelper;
  28. using TEAMModelOS.SDK.Helper.Security.ShaHash;
  29. namespace HiTeachCE.Controllers
  30. {
  31. [Route("api/[controller]")]
  32. [ApiController]
  33. public class LecturerController : BaseController
  34. {
  35. private readonly LecturerService lecturerService;
  36. public LecturerController(LecturerService lecturer)
  37. {
  38. lecturerService = lecturer;
  39. }
  40. /// <summary>
  41. /// 获取讲师列表
  42. /// </summary>
  43. /// <param name="request"></param>
  44. /// <returns></returns>
  45. [HttpPost("list")]
  46. [Authorize(Roles =Constant.Role_Root)]
  47. public BaseJosnRPCResponse List(PaginationJosnRPCRequest<Dictionary<string, string>> request)
  48. {
  49. // request.@params.TryAdd("PartitionKey", request.lang);
  50. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  51. List<Lecturer> lecturers = new List<Lecturer>();
  52. Expression<Func<Lecturer, bool>> linq = null;
  53. linq = f => 1 == 1;
  54. if (request.@params.data.TryGetValue("cellphone", out string cellphone) && !string.IsNullOrEmpty(cellphone))
  55. {
  56. linq = linq.And(m => m.cellphone == cellphone);
  57. }
  58. if (request.@params.data.TryGetValue("account", out string account) && !string.IsNullOrEmpty(account))
  59. {
  60. linq = linq.And(s=> s.account == account);
  61. }
  62. if (request.@params.data.TryGetValue("username", out string username) && !string.IsNullOrEmpty(username))
  63. {
  64. linq = linq.And(m => m.username.Contains(username));
  65. }
  66. if (request.@params.data.TryGetValue("id", out string id) && !string.IsNullOrEmpty(id))
  67. {
  68. linq = linq.And(m => m.id == id);
  69. }
  70. if (linq != null)
  71. {
  72. lecturers = lecturerService.GetPageList(linq, request.@params.page);
  73. }
  74. lecturers.ForEach(x => { x.password = null; });
  75. return builder.Data(lecturers).Page(request.@params.page).build();
  76. }
  77. /// <summary>
  78. /// 更新自己的资料
  79. /// </summary>
  80. /// <param name="request"></param>
  81. /// <returns></returns>
  82. [HttpPost("updateSelf")]
  83. [Authorize(Policy = Constant.Role_WebAll)]
  84. public BaseJosnRPCResponse UpdateSelf(JosnRPCRequest<Lecturer> request)
  85. {
  86. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  87. string unionid = GetLoginUser(JwtClaimTypes.Id);
  88. Lecturer lecturer = lecturerService.GetById(request.@params.id);
  89. bool b = false;
  90. //确保更新的是自己
  91. if (unionid.Equals(request.@params.unionid) && unionid.Equals(lecturer.unionid))
  92. {
  93. b = UpdateLecture(request, lecturer);
  94. }
  95. else {
  96. throw new BizException("只能更新自己的信息!");
  97. }
  98. return builder.Data(b).build();
  99. }
  100. /// <summary>
  101. /// 更新
  102. /// </summary>
  103. /// <param name="request">修改后的</param>
  104. /// <param name="lecturer">修改前的</param>
  105. /// <returns></returns>
  106. private bool UpdateLecture(JosnRPCRequest<Lecturer> request ,Lecturer lecturer)
  107. {
  108. bool b = false;
  109. if (lecturer != null)
  110. {
  111. if (!string.IsNullOrEmpty(request.@params.password))
  112. {
  113. request.@params.password = BCrypt.Net.BCrypt.HashPassword(request.@params.password);
  114. }
  115. else
  116. {
  117. request.@params.password = lecturer.password;
  118. }
  119. request.@params.unionid = lecturer.unionid;
  120. if (lecturer.setaccount != 0)
  121. {
  122. request.@params.account = lecturer.account;
  123. }
  124. request.@params.registerTime = lecturer.registerTime;
  125. request.@params.cellphone = lecturer.cellphone;
  126. request.@params.areaCode = lecturer.areaCode;
  127. request.@params.dingOpenid = lecturer.dingOpenid;
  128. request.@params.dingUnionid = lecturer.dingUnionid;
  129. b = lecturerService.Update(request.@params);
  130. }
  131. return b;
  132. }
  133. /// <summary>
  134. /// 更新讲师
  135. /// </summary>
  136. /// <param name="request"></param>
  137. /// <returns></returns>
  138. [HttpPost("update")]
  139. [Authorize(Policy = Constant.Role_Root)]
  140. public BaseJosnRPCResponse Update(JosnRPCRequest<Lecturer> request)
  141. {
  142. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  143. Lecturer lecturer = lecturerService.GetById(request.@params.id);
  144. bool b = UpdateLecture(request, lecturer);
  145. return builder.Data(b).build();
  146. }
  147. /// <summary>
  148. /// 绑定钉钉 参数 TmpAuthCode
  149. /// </summary>
  150. /// <param name="request"></param>
  151. /// <returns></returns>
  152. [HttpPost("bindDing")]
  153. [Authorize(Policy = Constant.Role_WebAll)]
  154. public BaseJosnRPCResponse BindDing(JosnRPCRequest<string> request)
  155. {
  156. bool flag = false;
  157. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  158. if (RedisHelper.Exists("TmpAuthCode:" + request.@params))
  159. {
  160. DingUserInfo dingUserInfo = RedisHelper.HGet<DingUserInfo>("TmpAuthCode:" + request.@params, request.@params);
  161. string unionid = GetLoginUser(JwtClaimTypes.Id);
  162. Expression<Func<Lecturer, bool>> linq = null;
  163. linq = l => l.unionid == unionid;
  164. List<Lecturer> list = lecturerService.GetList(linq);
  165. if (list.IsNotEmpty()&& dingUserInfo!=null)
  166. {
  167. Lecturer lecturer = list[0];
  168. lecturer.dingOpenid = dingUserInfo.Openid;
  169. lecturer.dingUnionid = dingUserInfo.Unionid;
  170. lecturer.dingNick = dingUserInfo.Nick;
  171. flag = lecturerService.Update(lecturer);
  172. }
  173. }
  174. else {
  175. throw new BizException("钉钉临时授权码过期", 2);
  176. }
  177. return builder.Data(flag).build();
  178. }
  179. //Unbound 解除绑定
  180. /// <summary>
  181. /// 注册用户
  182. /// </summary>
  183. /// <param name="request"></param>
  184. /// <returns></returns>
  185. [HttpPost("register")]
  186. public BaseJosnRPCResponse Register(JosnRPCRequest<RegisterDto> request)
  187. {
  188. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  189. if (RedisHelper.Exists("ticket:" + request.@params.ticket))
  190. {
  191. if (request.@params.user != null)
  192. {
  193. string[] phone = RedisHelper.HVals("ticket:" + request.@params.ticket);
  194. if (phone.IsNotEmpty())
  195. {
  196. if (!request.@params.user.cellphone.Equals(phone[0]))
  197. {
  198. throw new BizException("手机号与凭证不匹配!", 2);
  199. }
  200. }
  201. else
  202. {
  203. throw new BizException("凭证无效!", 2);
  204. }
  205. Expression<Func<Lecturer, bool>> linq = null;
  206. linq = m => m.cellphone == request.@params.user.cellphone || m.account == request.@params.user.account;
  207. List<Lecturer> lecturers = lecturerService.GetList(linq);
  208. if (lecturers.IsNotEmpty())
  209. {
  210. throw new BizException("手机号或账号已经存在!", 2);
  211. }
  212. else
  213. {
  214. request.@params.user.id = Guid.NewGuid().ToString();
  215. request.@params.user.unionid = Guid.NewGuid().ToString("N");
  216. request.@params.user.areaCode = "86";
  217. request.@params.user.status = 1;
  218. request.@params.user.registerTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
  219. if (request.@params.user.password == null)
  220. {
  221. request.@params.user.password = "";
  222. }
  223. else
  224. {
  225. request.@params.user.password = BCrypt.Net.BCrypt.HashPassword(request.@params.user.password);
  226. }
  227. bool ib = lecturerService.Insert(request.@params.user);
  228. if (ib)
  229. {
  230. return builder.Data(ib).build();
  231. }
  232. else
  233. {
  234. throw new BizException("注册失败!", 2);
  235. }
  236. }
  237. }
  238. else
  239. {
  240. throw new BizException("参数错误!", 2);
  241. }
  242. }
  243. else
  244. {
  245. throw new BizException("短信验证过期!", 2);
  246. }
  247. }
  248. }
  249. }