HomeworkController.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. 
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Azure.ServiceBus;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Configuration;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using TEAMModelOS.Models;
  12. using TEAMModelOS.SDK.Context.Configuration;
  13. using TEAMModelOS.SDK.Context.Exception;
  14. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
  15. using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
  16. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  17. using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
  18. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  19. using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
  20. using TEAMModelOS.SDK.Module.AzureServiceBus;
  21. using TEAMModelOS.Service.Models;
  22. using TEAMModelOS.Service.Services.Learn;
  23. using TEAMModelOS.Service.Services.Learn.Interfaces;
  24. using TEAMModelOS.SDK.Context.Constant.Common;
  25. namespace TEAMModelOS.Controllers.Learn
  26. {
  27. /// <summary>
  28. /// 作业活动
  29. /// </summary>
  30. [Route("api/[controller]")]
  31. [ApiController]
  32. public class HomeworkController : ControllerBase
  33. {
  34. private readonly IAzureCosmosDBV3Repository _cosmos;
  35. private readonly IServiceBusService _serviceBus;
  36. private readonly IServiceBusReviceService serviceBusReviceService;
  37. public HomeworkController(IAzureCosmosDBV3Repository cosmos , IServiceBusService serviceBus , IServiceBusReviceService _serviceBusReviceService)
  38. {
  39. serviceBusReviceService = _serviceBusReviceService;
  40. _cosmos = cosmos;
  41. _serviceBus = serviceBus;
  42. }
  43. /// <summary>
  44. /// 撤消作业
  45. /// </summary>
  46. /// <param name="request"></param>
  47. /// <returns></returns>
  48. [HttpPost("cancel")]
  49. public async Task<BaseResponse> Cancel(JosnRequest<string> homeWorkId)
  50. {
  51. ResponseBuilder builder = ResponseBuilder.custom();
  52. List<Homework> homeWorks = await _cosmos.FindByDict<Homework>(new Dictionary<string, object> { { "id", homeWorkId.@params } });
  53. foreach (Homework homeWork in homeWorks)
  54. {
  55. homeWork.status = 100;
  56. }
  57. List<Homework> homeWorks1 = await _cosmos.UpdateAll<Homework>(homeWorks);
  58. //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
  59. List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", homeWorkId.@params } });
  60. if (homeWorkStudents.IsNotEmpty())
  61. {
  62. //TODO 删除上传的文件
  63. await _cosmos.DeleteAll(homeWorkStudents);
  64. }
  65. return builder.Data(homeWorks1).build();
  66. }
  67. /// <summary>
  68. /// 删除作业
  69. /// </summary>
  70. /// <param name="request"></param>
  71. /// <returns></returns>
  72. [HttpPost("delete")]
  73. public async Task<BaseResponse> Delete(JosnRequest<IdPk> request)
  74. {
  75. ResponseBuilder builder = ResponseBuilder.custom();
  76. IdPk idPk = await _cosmos.DeleteAsync<Homework>(request.@params);
  77. //按作业id删除提交记录
  78. List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", idPk.id } });
  79. //TODO 删除上传的文件
  80. await _cosmos.DeleteAll<HomeworkRecord>(homeWorkStudents);
  81. return builder.Data(idPk).build();
  82. }
  83. /// <summary>
  84. /// 新增或修改 作业活动 同时创建关联关系表
  85. /// </summary>
  86. /// <param name="request"></param>
  87. /// <returns></returns>
  88. [HttpPost("upsert")]
  89. public async Task<BaseResponse> Upsert(JosnRequest<HomeworkDto> request)
  90. {
  91. ResponseBuilder builder = ResponseBuilder.custom();
  92. //新增
  93. if (string.IsNullOrEmpty(request.@params.homeWork.id))
  94. {
  95. request.@params.homeWork.id = Guid.NewGuid().ToString();
  96. request.@params.homeWork.status = 100;
  97. request.@params.reset = true;
  98. request.@params.homeWork.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
  99. }
  100. if (request.@params.homeWork.publishModel.Equals("0"))
  101. {
  102. request.@params.homeWork.startTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  103. request.@params.homeWork.status = 200;
  104. }
  105. else if (request.@params.homeWork.publishModel.Equals("1"))
  106. {
  107. //TimerWork<HomeWork>(request.@params.homeWork.startTime,new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
  108. //设定开始时间
  109. string msgId = Guid.NewGuid().ToString();
  110. long SequenceNumber = await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.@params.homeWork.id, request.@params.homeWork.code, request.@params.homeWork.startTime,200, msgId);
  111. request.@params.homeWork.sequenceNumber = SequenceNumber;
  112. //serviceBusReviceService.ReciveMessageAsync();
  113. //await _serviceBus.ReciveMessageAsync<Homework>(Constants.SubName);
  114. //_timerWorkService.TimerWork<Homework>(request.@params.homeWork.startTime,200, new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
  115. }
  116. if (request.@params.homeWork.status == 0) {
  117. if (request.@params.homeWork.startTime < new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds()) request.@params.homeWork.status = 200;
  118. else request.@params.homeWork.status = 100;
  119. }
  120. Homework homeWork = await _cosmos.SaveOrUpdate<Homework>(request.@params.homeWork);
  121. //设定结束时间
  122. string msgEndId = Guid.NewGuid().ToString();
  123. await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.@params.homeWork.id, request.@params.homeWork.code, request.@params.homeWork.endTime,300, msgEndId);
  124. //_timerWorkService.TimerWork<Homework>(request.@params.homeWork.endTime, 300, new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
  125. //清除作业
  126. if (request.@params.reset)
  127. {
  128. //根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
  129. // List<Target> targets = request.@params.homeWork.target;
  130. //List<HomeworkRecord> homeWorkStudents = new List<HomeworkRecord>();
  131. // foreach (Target target in targets)
  132. // {
  133. //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
  134. List<HomeworkRecord> homeWorks = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
  135. if (homeWorks.IsNotEmpty())
  136. {
  137. await _cosmos.DeleteAll(homeWorks);
  138. }
  139. //List<ClassStudent> classroom = await _cosmos.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", target.classroomCode }});
  140. //if (classroom.IsNotEmpty())
  141. //{
  142. // foreach (ClassStudent student in classroom)
  143. // {
  144. // HomeworkRecord homeWorkStudent = new HomeworkRecord();
  145. // homeWorkStudent.code = student.code;
  146. // homeWorkStudent.id = request.@params.homeWork.id;
  147. // homeWorkStudent.classroom.code = target.classroomCode;
  148. // homeWorkStudent.classroom.name = target.classroomName;
  149. // homeWorkStudents.Add(homeWorkStudent);
  150. // }
  151. //}
  152. //}
  153. //if (homeWorkStudents.IsNotEmpty())
  154. //{
  155. // foreach (HomeworkRecord homeWorkStudents1 in homeWorkStudents)
  156. // {
  157. // List<Student> student = await _cosmos.FindById<Student>(homeWorkStudents1.code);//FindByDict<Student>(new Dictionary<string, object> { { "id", homeWorkStudents1.studentId } });
  158. // if (student.IsNotEmpty())
  159. // {
  160. // homeWorkStudents1.code = student[0].studentId;
  161. // // homeWorkStudents1.nativeroom.code = student[0].classroomCode;
  162. // }
  163. // }
  164. // await _cosmos.SaveOrUpdateAll<HomeworkRecord>(homeWorkStudents);
  165. //}
  166. }
  167. return builder.Data(homeWork).build();
  168. }
  169. /// <summary>
  170. /// 新增或修改学生作业关联表
  171. /// </summary>
  172. /// <param name="request"></param>
  173. /// <returns></returns>
  174. [HttpPost("upsertRecord")]
  175. public async Task<BaseResponse> UpsertRecord(JosnRequest<List<HomeworkRecord>> request)
  176. {
  177. ResponseBuilder builder = ResponseBuilder.custom();
  178. await _cosmos.SaveOrUpdateAll<HomeworkRecord>(request.@params);
  179. return builder.Data(request.@params).build();
  180. }
  181. /// <summary>
  182. /// 查询作业活动
  183. /// </summary>
  184. /// <param name="request"></param>
  185. /// <returns></returns>
  186. [HttpPost("find")]
  187. public async Task<BaseResponse> Find(JosnRequest<Dictionary<string, object>> request)
  188. {
  189. ResponseBuilder builder = ResponseBuilder.custom();
  190. List<Homework> data = new List<Homework>();
  191. List<HomeworkFindDto> homeWorkFindDtos = new List<HomeworkFindDto>();
  192. if (request.@params.Keys.Count>0)
  193. {
  194. data = await _cosmos.FindByDict<Homework>(request.@params);
  195. //判断作业提交信息
  196. if (data.IsNotEmpty())
  197. {
  198. foreach (Homework homeWork in data)
  199. {
  200. HomeworkFindDto homeWorkFindDto = new HomeworkFindDto();
  201. List<string> pro = new List<string>();
  202. pro.Add("submit");
  203. List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(dict: new Dictionary<string, object> { { "id", homeWork.id } }, propertys: pro);
  204. int sub = 0;
  205. Dictionary<string, object> dict = new Dictionary<string, object>();
  206. dict.Add("Sum", homeWorkStudents.Count);
  207. dict.Add("Finish", sub);
  208. homeWorkFindDto = homeWork.ToJson().FromJson<HomeworkFindDto>();
  209. homeWorkFindDto.statistics = dict;
  210. homeWorkFindDtos.Add(homeWorkFindDto);
  211. }
  212. }
  213. }
  214. else
  215. {
  216. return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
  217. }
  218. return builder.Data(homeWorkFindDtos).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  219. }
  220. /// <summary>
  221. /// 查询作业学生关联
  222. /// </summary>
  223. /// <param name="request"></param>
  224. /// <returns></returns>
  225. [HttpPost("findRecord")]
  226. public async Task<BaseResponse> FindRecord(JosnRequest<Dictionary<string, object>> request)
  227. {
  228. ResponseBuilder builder = ResponseBuilder.custom();
  229. List<HomeworkRecord> data = new List<HomeworkRecord>();
  230. if (request.@params.Keys.Count>0)
  231. {
  232. data = await _cosmos.FindByDict<HomeworkRecord>(request.@params);
  233. }
  234. else
  235. {
  236. return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
  237. }
  238. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  239. }
  240. /// <summary>
  241. /// 教师作业打分评论
  242. /// </summary>
  243. /// <param name="request"></param>
  244. /// <returns></returns>
  245. [HttpPost("tchScore")]
  246. public async Task<BaseResponse> TchScore(JosnRequest<HomeworkScoringDto> request)
  247. {
  248. ResponseBuilder builder = ResponseBuilder.custom();
  249. List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.@params.studentId }, { "id", request.@params.homeWorkId } });
  250. HomeworkRecord data = new HomeworkRecord();
  251. if (homeWorkStudents.IsNotEmpty())
  252. {
  253. homeWorkStudents[0].score = request.@params.score ?? homeWorkStudents[0].score;
  254. HomeWorkComment homeWorkComment = new HomeWorkComment
  255. {
  256. comment = request.@params.comments,
  257. createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(),
  258. TEAMModelId = request.@params.TEAMModelId
  259. };
  260. homeWorkStudents[0].tchCmt = homeWorkComment;
  261. data = await _cosmos.SaveOrUpdate(homeWorkStudents[0]);
  262. }
  263. return builder.Data(data).build();
  264. }
  265. /// <summary>
  266. /// 学生作业打分评论
  267. /// </summary>
  268. /// <param name="request"></param>
  269. /// <returns></returns>
  270. [HttpPost("stuScore")]
  271. public async Task<BaseResponse> StuScore(JosnRequest<HomeworkCommentDto> request)
  272. {
  273. ResponseBuilder builder = ResponseBuilder.custom();
  274. List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.@params.studentId }, { "id", request.@params.homeWorkId } });
  275. List<Homework> homeWorks = await _cosmos.FindByDict<Homework>(new Dictionary<string, object> { { "id", request.@params.homeWorkId } });
  276. HomeworkRecord data = new HomeworkRecord();
  277. if (homeWorks.IsNotEmpty() && homeWorks[0].other.Contains("comment"))
  278. {
  279. if (homeWorkStudents.IsNotEmpty())
  280. {
  281. if (string.IsNullOrEmpty(request.@params.commentid))
  282. {
  283. //评论
  284. StudentComment homeWorkComment = new StudentComment
  285. {
  286. commentid = Guid.NewGuid().ToString(),
  287. comment = request.@params.comment,
  288. createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(),
  289. fromId = request.@params.fromId,
  290. score = request.@params.score
  291. };
  292. homeWorkStudents[0].stuCmt.Add(homeWorkComment);
  293. }
  294. else
  295. {
  296. //回复评论
  297. foreach (StudentComment comment in homeWorkStudents[0].stuCmt)
  298. {
  299. if (comment.commentid == request.@params.commentid)
  300. {
  301. Reply reply = new Reply();
  302. reply.fromId = request.@params.fromId;
  303. reply.toId = request.@params.toId;
  304. reply.identity = request.@params.identity;
  305. reply.comment = request.@params.comment;
  306. reply.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  307. comment.reply.Add(reply);
  308. }
  309. }
  310. }
  311. data = await _cosmos.Update(homeWorkStudents[0]);
  312. }
  313. return builder.Data(data).build();
  314. }
  315. else {
  316. return builder.Error(ResponseCode.FAILED, "未开放互评!").build();
  317. }
  318. }
  319. }
  320. }