HomeWorkController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using OpenXmlPowerTools;
  8. using TEAMModelOS.Models;
  9. using TEAMModelOS.SDK.Context.Exception;
  10. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  11. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  12. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  13. using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
  14. using TEAMModelOS.Service.Models.Core;
  15. using TEAMModelOS.Service.Models.Courses;
  16. using TEAMModelOS.Service.Models.Learn;
  17. using static TEAMModelOS.Service.Models.Learn.HomeWork;
  18. namespace TEAMModelOS.Controllers.Learn
  19. {
  20. [Route("api/[controller]")]
  21. [ApiController]
  22. public class HomeWorkController : ControllerBase
  23. {
  24. private readonly IAzureCosmosDBV3Repository _cosmos;
  25. public HomeWorkController(IAzureCosmosDBV3Repository cosmos)
  26. {
  27. _cosmos = cosmos;
  28. }
  29. /// <summary>
  30. /// 新增或修改 作业活动 同时创建关联关系表
  31. /// </summary>
  32. /// <param name="request"></param>
  33. /// <returns></returns>
  34. [HttpPost("SaveorUpdataHomeWork")]
  35. public async Task<BaseJosnRPCResponse> SaveorUpdataHomeWork(JosnRPCRequest<HomeWork> request)
  36. {
  37. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  38. if (request.@params.publishModel.Equals("0"))
  39. {
  40. request.@params.startTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  41. }
  42. bool flg = false;
  43. if (string.IsNullOrEmpty(request.@params.id)) {
  44. request.@params.id = Guid.NewGuid().ToString();
  45. flg = true;
  46. }
  47. HomeWork homeWork = await _cosmos.SaveOrUpdate<HomeWork>(request.@params);
  48. if (flg) {
  49. //根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
  50. List<Target> targets = request.@params.target;
  51. List<ClassroomStudent> Classrooms = new List<ClassroomStudent>();
  52. List<HomeWorkStudent> homeWorkStudents = new List<HomeWorkStudent>();
  53. foreach (Target target in targets)
  54. {
  55. List<ClassroomStudent> classroom = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", target.classroomCode }, { "scopeCode", target.scopeCode } });
  56. if (classroom.IsNotEmpty()) {
  57. foreach (string studentid in classroom[0].studentId)
  58. {
  59. HomeWorkStudent homeWorkStudent = new HomeWorkStudent();
  60. homeWorkStudent.id = Guid.NewGuid().ToString();
  61. homeWorkStudent.homeWorkId = request.@params.id;
  62. homeWorkStudent.studentId = studentid;
  63. homeWorkStudent.classroomCode = target.classroomCode;
  64. homeWorkStudents.Add(homeWorkStudent);
  65. }
  66. }
  67. }
  68. if (homeWorkStudents.IsNotEmpty())
  69. {
  70. foreach (HomeWorkStudent homeWorkStudents1 in homeWorkStudents)
  71. {
  72. Student student = await _cosmos.FindById<Student>(homeWorkStudents1.studentId);//FindByDict<Student>(new Dictionary<string, object> { { "id", homeWorkStudents1.studentId } });
  73. if (student != null)
  74. {
  75. homeWorkStudents1.name = student.name;
  76. homeWorkStudents1.TEAMModelId = student.TEAMModelId;
  77. homeWorkStudents1.nativeroomCode = student.classroomCode;
  78. }
  79. }
  80. await _cosmos.SaveOrUpdateAll<HomeWorkStudent>(homeWorkStudents);
  81. }
  82. }
  83. return builder.Data(homeWork).build();
  84. }
  85. /// <summary>
  86. /// 保存或修改学生作业关联表
  87. /// </summary>
  88. /// <param name="request"></param>
  89. /// <returns></returns>
  90. [HttpPost("SaveorUpdataWorkStudents")]
  91. public async Task<BaseJosnRPCResponse> SaveorUpdataWorkStudents(JosnRPCRequest<List<HomeWorkStudent>> request)
  92. {
  93. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  94. await _cosmos.SaveOrUpdateAll<HomeWorkStudent>(request.@params);
  95. return builder.Data(request.@params).build();
  96. }
  97. /// <summary>
  98. /// 查询作业活动
  99. /// </summary>
  100. /// <param name="request"></param>
  101. /// <returns></returns>
  102. [HttpPost("FindHomeWork")]
  103. public async Task<BaseJosnRPCResponse> FindHomeWork(JosnRPCRequest<Dictionary<string,object>> request) {
  104. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  105. List<HomeWork> data = new List<HomeWork>();
  106. if (request.@params.IsNotEmpty())
  107. {
  108. data = await _cosmos.FindByDict<HomeWork>(request.@params);
  109. }
  110. else
  111. {
  112. throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
  113. //builder.Error(false,ResponseCode.PARAMS_ERROR,"参数异常");
  114. }
  115. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  116. }
  117. /// <summary>
  118. /// 查询作业学生关联
  119. /// </summary>
  120. /// <param name="request"></param>
  121. /// <returns></returns>
  122. [HttpPost("FindStudent")]
  123. public async Task<BaseJosnRPCResponse> FindStudent(JosnRPCRequest<Dictionary<string, object>> request)
  124. {
  125. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  126. List<HomeWorkStudent> data = new List<HomeWorkStudent>();
  127. if (request.@params.IsNotEmpty())
  128. {
  129. data = await _cosmos.FindByDict<HomeWorkStudent>(request.@params);
  130. }
  131. else
  132. {
  133. throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
  134. //builder.Error(false,ResponseCode.PARAMS_ERROR,"参数异常");
  135. }
  136. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  137. }
  138. /// <summary>
  139. /// 查询教师教的课程的教室的详细信息
  140. /// </summary>
  141. /// <param name="request"></param>
  142. /// <returns></returns>
  143. [HttpPost("FindClassroom")]
  144. public async Task<BaseJosnRPCResponse> FindClassroom(JosnRPCRequest<string> request)
  145. {
  146. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  147. List<Course> courses = await _cosmos.FindByDict<Course>(dict:new Dictionary<string, object> { { "assistTeacher[*]", request.@params },{ "scopeCode.|", request.@params } }, propertys: new List<string> { "classroom" });
  148. //List<Course> courses2 = await _cosmos.FindByDict<Course>(dict:new Dictionary<string, object> { { "scopeCode", request.@params } }, propertys: new List<string> { "classroom" });
  149. //List<Course> courses = new List<Course>();
  150. //courses.AddRange(courses1);
  151. //courses.AddRange(courses2);
  152. if (courses.IsNotEmpty())
  153. {
  154. List<string> classroom = new List<string>();
  155. foreach (Course course in courses)
  156. {
  157. classroom.AddRange(course.classroom);
  158. }
  159. List<Classroom> classroom1 = await _cosmos.FindByDict<Classroom>(dict: new Dictionary<string, object> { { "classroomCode", classroom } }, propertys: new List<string> { "classroomCode", "classroomName", "headMaster", "periodCode", "gradeCode", "scopeCode", "id", "studentCount", "status" });
  160. if (classroom1.IsNotEmpty())
  161. {
  162. builder.Data(classroom1);
  163. }
  164. }
  165. else {
  166. throw new BizException("没有找到该老师协同课程", ResponseCode.NOT_FOUND);
  167. }
  168. return builder.build();
  169. }
  170. /// <summary>
  171. /// 作业打分
  172. /// </summary>
  173. /// <param name="request"></param>
  174. /// <returns></returns>
  175. [HttpPost("Scoring")]
  176. public async Task<BaseJosnRPCResponse> HomeWorkScoring(JosnRPCRequest<HomeWorkScoringDto> request)
  177. {
  178. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  179. List<HomeWorkStudent> homeWorkStudents = await _cosmos.FindByDict<HomeWorkStudent>(new Dictionary<string, object> { { "id", request.@params.id }, { "homeWorkId", request.@params.homeWorkId } });
  180. HomeWorkStudent data = new HomeWorkStudent();
  181. if (homeWorkStudents.IsNotEmpty()) {
  182. homeWorkStudents[0].score = request.@params.score;
  183. data = await _cosmos.Update(homeWorkStudents[0]);
  184. }
  185. return builder.Data(data).build() ;
  186. }
  187. /// <summary>
  188. /// 作业评论
  189. /// </summary>
  190. /// <param name="request"></param>
  191. /// <returns></returns>
  192. [HttpPost("Comment")]
  193. public async Task<BaseJosnRPCResponse> HomeWorkComment(JosnRPCRequest<HomeWorkCommentDto> request)
  194. {
  195. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  196. List<HomeWorkStudent> homeWorkStudents = await _cosmos.FindByDict<HomeWorkStudent>(new Dictionary<string, object> { { "id", request.@params.id }, { "homeWorkId", request.@params.homeWorkId } });
  197. HomeWorkStudent data = new HomeWorkStudent();
  198. if (homeWorkStudents.IsNotEmpty())
  199. {
  200. if (string.IsNullOrEmpty(request.@params.commentid))
  201. {
  202. //评论
  203. HomeWorkComment comment = new HomeWorkComment();
  204. comment.commentid = Guid.NewGuid().ToString();
  205. comment.fromId = request.@params.fromId;
  206. comment.toId = request.@params.toId;
  207. comment.identity = request.@params.identity;
  208. comment.comment = request.@params.comment;
  209. comment.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  210. homeWorkStudents[0].comments.Add(comment);
  211. }
  212. else
  213. {
  214. //回复评论
  215. foreach (HomeWorkComment comment in homeWorkStudents[0].comments ) {
  216. if (comment.commentid == request.@params.commentid) {
  217. Reply reply = new Reply();
  218. reply.fromId = request.@params.fromId;
  219. reply.toId = request.@params.toId;
  220. reply.identity = request.@params.identity;
  221. reply.comment = request.@params.comment;
  222. reply.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  223. comment.reply.Add(reply);
  224. }
  225. }
  226. }
  227. //homeWorkStudents[0].comments[request.@params.TEAMModelId] = request.@params.comment;
  228. data = await _cosmos.Update(homeWorkStudents[0]);
  229. }
  230. return builder.Data(data).build();
  231. }
  232. }
  233. }