StudentController.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using TEAMModelOS.Service.Models.Core;
  8. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  9. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  10. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  11. using TEAMModelOS.SDK.Module.AzureCosmosDB.Interfaces;
  12. using System.Text.Json;
  13. using TEAMModelOS.Models;
  14. using TEAMModelOS.SDK.Extension.SnowFlake;
  15. using TEAMModelOS.SDK.Helper.Security.TmdCrypt;
  16. namespace TEAMModelOS.Controllers.Syllabus
  17. {
  18. [Route("api/[controller]")]
  19. [ApiController]
  20. // [Authorize]
  21. public class StudentController : BaseController
  22. {
  23. private readonly IAzureCosmosDBRepository azureCosmosDBRepository;
  24. public StudentController(IAzureCosmosDBRepository _azureCosmosDBRepository)
  25. {
  26. azureCosmosDBRepository = _azureCosmosDBRepository;
  27. }
  28. [HttpPost("SaveStudent")]
  29. public async Task<BaseJosnRPCResponse> SaveStudentInfo(JosnRPCRequest<Student> request)
  30. {
  31. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  32. //设置密码 isSet 是否加密 如果加密则不会再次加密
  33. if (!request.@params.password.isSet)
  34. {
  35. request.@params.password.value = TmdCrypt.Encrypt(request.@params.password.value);
  36. request.@params.password.isSet = true;
  37. }
  38. Classroom classroom = new Classroom
  39. {
  40. classroomCode = request.@params.classroom.classroomCode,
  41. gradeCode = request.@params.classroom.gradeCode,
  42. periodCode = request.@params.classroom.periodCode,
  43. schoolCode = request.@params.classroom.schoolCode,
  44. };
  45. request.@params.id = classroom.schoolCode + request.@params.studentId;
  46. request.@params.classroom = classroom;
  47. Student data = await azureCosmosDBRepository.Save<Student>(request.@params);
  48. return builder.Data(data).build();
  49. }
  50. [HttpPost("FindStudent")]
  51. public async Task<BaseJosnRPCResponse> FindStudent(JosnRPCRequest<Dictionary<string, object>> request)
  52. {
  53. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  54. if (request.@params.TryGetValue("schoolCode", out object _))
  55. {
  56. List<Student> data = await azureCosmosDBRepository.FindByDict<Student>(request.@params,false);
  57. return builder.Data(data).build();
  58. }
  59. else
  60. {
  61. return builder.Error("schoolCode is null !").build();
  62. }
  63. }
  64. [HttpPost("SaveAllStudent")]
  65. public async Task<BaseJosnRPCResponse> SaveAllStudentInfo(JosnRPCRequest<List<Student>> request)
  66. {
  67. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  68. Dictionary<string, List<Student>> dictInfo = new Dictionary<string, List<Student>>();
  69. foreach (IGrouping<string, Student> group in request.@params.GroupBy(c => c.classroom.classroomCode))
  70. {
  71. dictInfo.Add(group.Key, group.ToList());
  72. }
  73. List<Student> students = new List<Student>();
  74. foreach (string key in dictInfo.Keys)
  75. {
  76. List<Classroom> classrooms = await azureCosmosDBRepository.FindByDict<Classroom>(new Dictionary<string, object> { { "classroomCode", key } } ,true);
  77. if (classrooms.IsNotEmpty())
  78. {
  79. long createDate = DateTimeOffset.UtcNow.Ticks;
  80. dictInfo.TryGetValue(key, out List<Student> sts);
  81. sts.ForEach(x => {
  82. Student student = new Student
  83. {
  84. schoolCode = classrooms[0].schoolCode,
  85. id = x.schoolCode + x.studentId,
  86. TEAMModelId = x.schoolCode + "#" + x.studentId,
  87. virtualId = x.schoolCode + "#" + x.studentId,
  88. createDate = createDate
  89. };
  90. //设置密码 isSet 是否加密 如果加密则不会再次加密
  91. if (!x.password.isSet) {
  92. student.password.value = TmdCrypt.Encrypt(x.password.value);
  93. student.password.isSet = true;
  94. }
  95. Classroom classroom = new Classroom
  96. {
  97. classroomCode = x.classroom.classroomCode,
  98. gradeCode = classrooms[0].gradeCode,
  99. periodCode = classrooms[0].periodCode,
  100. schoolCode = classrooms[0].schoolCode,
  101. };
  102. student.classroom = classroom;
  103. students.Add(student);
  104. });
  105. await azureCosmosDBRepository.SaveAll(students);
  106. }
  107. }
  108. return builder.Data(students).build();
  109. }
  110. [HttpPost("UpdateStudent")]
  111. public async Task<BaseJosnRPCResponse> UpdateStudent(JosnRPCRequest<Student> request)
  112. {
  113. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  114. //设置密码 isSet 是否加密 如果加密则不会再次加密
  115. if (!request.@params.password.isSet)
  116. {
  117. request.@params.password.value = TmdCrypt.Encrypt(request.@params.password.value);
  118. request.@params.password.isSet = true;
  119. }
  120. Student data = await azureCosmosDBRepository.Update<Student>(request.@params);
  121. return builder.Data(data).build();
  122. }
  123. [HttpPost("UpdateAllStudent")]
  124. public async Task<BaseJosnRPCResponse> UpdateAllStudent(JosnRPCRequest<Dictionary<string, Dictionary<string, object>>> request)
  125. {
  126. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  127. bool find = request.@params.TryGetValue("find", out Dictionary<string, object> findObj);
  128. bool update = request.@params.TryGetValue("update", out Dictionary<string, object> updateObj);
  129. List<Student> data = null;
  130. if (find && update)
  131. {
  132. data = await azureCosmosDBRepository.UpdateAll<Student>(findObj, updateObj);
  133. }
  134. return builder.Data(data).build();
  135. }
  136. /// <summary>
  137. /// 根据ID删除
  138. /// </summary>
  139. /// <param name="request"></param>
  140. /// <returns></returns>
  141. [HttpPost("DeleteStudent")]
  142. public async Task<BaseJosnRPCResponse> DeleteStudentInfo(JosnRPCRequest<Student> request)
  143. {
  144. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  145. string data = await azureCosmosDBRepository.DeleteAsync<Student>(request.@params.id, request.@params.schoolCode);
  146. return builder.Data(data).build();
  147. }
  148. }
  149. }