SurveyController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Models;
  7. using TEAMModelOS.SDK.Context.Exception;
  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.AzureCosmosDBV3;
  12. using TEAMModelOS.Service.Models;
  13. using TEAMModelOS.Service.Services.Learn.Interfaces;
  14. namespace TEAMModelOS.Controllers
  15. {
  16. /// <summary>
  17. /// 投票活动
  18. /// </summary>
  19. [Route("api/[controller]")]
  20. [ApiController]
  21. public class SurveyController : BaseController
  22. {
  23. private readonly IAzureCosmosDBV3Repository azureCosmosDBV3Repository;
  24. private readonly IServiceBusService _serviceBus;
  25. public SurveyController(IAzureCosmosDBV3Repository _azureCosmosDBV3Repository, IServiceBusService serviceBus)
  26. {
  27. // _timerWorkService = timerWorkService;
  28. _serviceBus = serviceBus;
  29. azureCosmosDBV3Repository = _azureCosmosDBV3Repository;
  30. }
  31. /// <summary>
  32. /// 新增 或 修改投票活动
  33. /// </summary>
  34. /// <param name="request"></param>
  35. /// <returns></returns>
  36. [HttpPost("upsert")]
  37. public async Task<BaseJosnRPCResponse> Upsert(JosnRPCRequest<SurveyDto> request)
  38. {
  39. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  40. //新增
  41. if (string.IsNullOrEmpty(request.@params.survey.id))
  42. {
  43. request.@params.survey.id = Guid.NewGuid().ToString();
  44. request.@params.survey.status = 100;
  45. }
  46. if (request.@params.survey.publishModel.Equals("0"))
  47. {
  48. request.@params.survey.startTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  49. request.@params.survey.status = 200;
  50. }
  51. else if (request.@params.survey.publishModel.Equals("1"))
  52. {
  53. string msgId = Guid.NewGuid().ToString();
  54. long SequenceNumber = await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.@params.survey.id, request.@params.survey.code, request.@params.survey.startTime, 200, msgId);
  55. request.@params.survey.sequenceNumber = SequenceNumber;
  56. }
  57. Survey homeWork = await azureCosmosDBV3Repository.SaveOrUpdate<Survey>(request.@params.survey);
  58. //设定结束时间
  59. string msgEndId = Guid.NewGuid().ToString();
  60. await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.@params.survey.id, request.@params.survey.code, request.@params.survey.endTime, 300, msgEndId);
  61. //清除作业
  62. if (!request.@params.reset)
  63. {
  64. //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
  65. List<SurveyRecord> surveyRecords = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", request.@params.survey.id } });
  66. if (surveyRecords.IsNotEmpty())
  67. {
  68. await azureCosmosDBV3Repository.DeleteAll(surveyRecords);
  69. }
  70. ////根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
  71. //List<Target> targets = request.@params.survey.target;
  72. //List<SurveyRecord> surveykStudents = new List<SurveyRecord>();
  73. //foreach (Target target in targets)
  74. //{
  75. // List<ClassStudent> classroom = await azureCosmosDBV3Repository.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", target.classroomCode } });
  76. // if (classroom.IsNotEmpty() && classroom[0].code != null)
  77. // {
  78. // foreach (ClassStudent student in classroom)
  79. // {
  80. // SurveyRecord surveyStudent = new SurveyRecord();
  81. // surveyStudent.id = request.@params.survey.id;
  82. // surveyStudent.code = student.code;
  83. // surveyStudent.classroom.code = target.classroomCode;
  84. // surveyStudent.classroom.name = target.classroomName;
  85. // surveykStudents.Add(surveyStudent);
  86. // }
  87. // }
  88. //}
  89. //if (surveykStudents.IsNotEmpty())
  90. //{
  91. // foreach (SurveyRecord surveyRecord in surveykStudents)
  92. // {
  93. // List<Student> student = await azureCosmosDBV3Repository.FindById<Student>(surveyRecord.code);
  94. // if (student.IsNotEmpty())
  95. // {
  96. // surveyRecord.name = student[0].name;
  97. // surveyRecord.code = student[0].TEAMModelId;
  98. // }
  99. // }
  100. // await azureCosmosDBV3Repository.SaveOrUpdateAll(surveykStudents);
  101. //}
  102. }
  103. return builder.Data(homeWork).build();
  104. }
  105. /// <summary>
  106. /// 查询投票活动
  107. /// </summary>
  108. /// <param name="request"></param>
  109. /// <returns></returns>
  110. [HttpPost("findSummary")]
  111. public async Task<BaseJosnRPCResponse> FindSummary(JosnRPCRequest<Dictionary<string, object>> request)
  112. {
  113. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  114. List<Survey> data = new List<Survey>();
  115. List<string> props = new List<string> { "id", "code", "name", "type", "status", "startTime" };
  116. if (request.@params.Keys.Count > 0)
  117. {
  118. data = await azureCosmosDBV3Repository.FindByDict<Survey>(request.@params, props);
  119. }
  120. else
  121. {
  122. throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
  123. }
  124. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count },{ "props", props } }).build();
  125. }
  126. /// <summary>
  127. /// 查询投票活动
  128. /// </summary>
  129. /// <param name="request"></param>
  130. /// <returns></returns>
  131. [HttpPost("find")]
  132. public async Task<BaseJosnRPCResponse> Find(JosnRPCRequest<Dictionary<string, object>> request)
  133. {
  134. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  135. List<Survey> data = new List<Survey>();
  136. if (request.@params.Keys.Count > 0)
  137. {
  138. data = await azureCosmosDBV3Repository.FindByDict<Survey>(request.@params);
  139. }
  140. else
  141. {
  142. throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
  143. }
  144. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  145. }
  146. /// <summary>
  147. /// 删除投票活动
  148. /// </summary>
  149. /// <param name="request"></param>
  150. /// <returns></returns>
  151. [HttpPost("delete")]
  152. public async Task<BaseJosnRPCResponse> Delete(JosnRPCRequest<List<IdPk>> request)
  153. {
  154. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  155. List<IdPk> idPks = await azureCosmosDBV3Repository.DeleteAll<Survey>(request.@params);
  156. if (idPks.IsNotEmpty())
  157. {
  158. foreach (IdPk idPk in idPks)
  159. {
  160. List<SurveyRecord> surveys = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", idPk.id } });
  161. await azureCosmosDBV3Repository.DeleteAll(surveys);
  162. }
  163. builder.Data(idPks);
  164. }
  165. else
  166. {
  167. throw new BizException("删除失败", ResponseCode.FAILED);
  168. }
  169. return builder.build();
  170. }
  171. /// <summary>
  172. /// 撤消投票
  173. /// </summary>
  174. /// <param name="request"></param>
  175. /// <returns></returns>
  176. [HttpPost("cancel")]
  177. public async Task<BaseJosnRPCResponse> Cancel(JosnRPCRequest<string> surveyId)
  178. {
  179. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  180. List<Survey> surveys = await azureCosmosDBV3Repository.FindByDict<Survey>(new Dictionary<string, object> { { "id", surveyId.@params } });
  181. foreach (Survey survey in surveys)
  182. {
  183. survey.status = 100;
  184. }
  185. List<Survey> survey1 = await azureCosmosDBV3Repository.UpdateAll<Survey>(surveys);
  186. //查询之前是否有 关联关系表 有则删除
  187. List<SurveyRecord> surveyStudents = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", surveyId.@params } });
  188. if (surveyStudents.IsNotEmpty())
  189. {
  190. await azureCosmosDBV3Repository.DeleteAll(surveyStudents);
  191. }
  192. return builder.Data(survey1).build();
  193. }
  194. /// <summary>
  195. /// 查询学生问卷调查记录
  196. /// </summary>
  197. /// <param name="request"></param>
  198. /// <returns></returns>
  199. [HttpPost("findRecord")]
  200. public async Task<BaseJosnRPCResponse> FindRecord(JosnRPCRequest<Dictionary<string, object>> request)
  201. {
  202. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  203. List<SurveyRecord> data = new List<SurveyRecord>();
  204. if (request.@params.Keys.Count > 0)
  205. {
  206. data = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(request.@params);
  207. }
  208. else
  209. {
  210. throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
  211. }
  212. return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
  213. }
  214. /// <summary>
  215. /// 学生问卷作答
  216. /// </summary>
  217. /// <param name="request"></param>
  218. /// <returns></returns>
  219. [HttpPost("upsertRecord")]
  220. public async Task<BaseJosnRPCResponse> UpsertRecord(JosnRPCRequest<List<SurveyRecord>> request)
  221. {
  222. JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  223. await azureCosmosDBV3Repository.SaveOrUpdateAll<SurveyRecord>(request.@params);
  224. return builder.Data(request.@params).build();
  225. }
  226. ///// <summary>
  227. ///// 学生提交问卷调查
  228. ///// </summary>
  229. ///// <param name="request"></param>
  230. ///// <returns></returns>
  231. //[HttpPost("action")]
  232. //public async Task<BaseJosnRPCResponse> Action(JosnRPCRequest<SurveyDto> request)
  233. //{
  234. // JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
  235. // List<SurveyRecord> survey = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", request.@params.studentID }, { "id", request.@params.surveyWorkId } });
  236. // SurveyRecord response = new SurveyRecord();
  237. // if (survey.IsNotEmpty())
  238. // {
  239. // List<Survey> surveys = await azureCosmosDBV3Repository.FindByDict<Survey>(new Dictionary<string, object> { { "id", request.@params.surveyWorkId } });
  240. // List<Survey.Option> options2 = surveys[0].option;
  241. // bool flg = false;
  242. // options2.ForEach(x => { if (x.code == request.@params.option) flg = true; });
  243. // if (flg)
  244. // {
  245. // survey[0].option = request.@params.option;
  246. // survey[0].submitTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
  247. // survey[0].submit = true;
  248. // response = await azureCosmosDBV3Repository.SaveOrUpdate(survey[0]);
  249. // }
  250. // else throw new BizException($"该投票活动没有当前选项 { request.@params.option }", ResponseCode.FAILED);
  251. // }
  252. // return builder.Data(response).build();
  253. //}
  254. }
  255. }