VolumeController.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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.SDK.Context.Exception;
  8. using TEAMModelOS.SDK;
  9. using TEAMModelOS.SDK.Extension.SnowFlake;
  10. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  11. using TEAMModelOS.SDK.Helper.Security.ShaHash;
  12. using TEAMModelOS.SDK.DI;
  13. using TEAMModelOS.Service.Models;
  14. using Org.BouncyCastle.Ocsp;
  15. using TEAMModelOS.Service.Services.Implement;
  16. using System.Text.Json;
  17. namespace TEAMModelOS.Controllers
  18. {
  19. [Route("api/[controller]")]
  20. [ApiController]
  21. public class VolumeController : BaseController
  22. {
  23. private AzureCosmosFactory azureCosmosDBRepository;
  24. public VolumeController(AzureCosmosFactory azureCosmosDBRepository )
  25. {
  26. this.azureCosmosDBRepository = azureCosmosDBRepository;
  27. }
  28. /// <summary>
  29. /// 新增册别
  30. /// </summary>
  31. /// <param name="request"></param>
  32. /// <returns></returns>
  33. [HttpPost("upsert")]
  34. public async Task<BaseResponse> Upsert(Volume request)
  35. {
  36. ResponseBuilder builder = ResponseBuilder.custom();
  37. List<Volume> volume = await VolumeService.SaveOrUpdateVolume(azureCosmosDBRepository,request);
  38. return builder.Data(volume.IsEmpty() ? null : volume[0]).build();
  39. }
  40. /// <summary>
  41. /// 删除册别
  42. /// </summary>
  43. /// <param name="request"></param>
  44. /// <returns></returns>
  45. [HttpPost("delete")]
  46. public async Task<BaseResponse> Delete(Volume request)
  47. {
  48. ResponseBuilder builder = ResponseBuilder.custom();
  49. bool flag = false;
  50. if (!string.IsNullOrEmpty(request.id))
  51. {
  52. //if (request.@params.type == 0)
  53. //{
  54. request.status = 0;
  55. List<Volume> volumes = new List<Volume>
  56. {
  57. request
  58. };
  59. await azureCosmosDBRepository.SaveOrUpdateAll<Volume>(volumes);
  60. flag = true;
  61. //}
  62. //else
  63. //{
  64. // await azureCosmosDBRepository.DeleteAsync<Volume>(request.@params.id, request.@params.schoolCode);
  65. // await azureCosmosDBRepository.DeleteAll<SyllabusNode>(new Dictionary<string, object>() { { "volumeCode", request.@params.id } });
  66. // flag = true;
  67. //}
  68. }
  69. return builder.Data(flag).build();
  70. }
  71. /// <summary>
  72. /// 查找册别
  73. /// </summary>
  74. /// <param name="request"></param>
  75. /// <returns></returns>
  76. [HttpPost("find")]
  77. public async Task<BaseResponse> Find(JsonElement request)
  78. {
  79. ResponseBuilder builder = ResponseBuilder.custom();
  80. Dictionary<string, object> dict = new Dictionary<string, object>();
  81. var emobj = request.EnumerateObject();
  82. while (emobj.MoveNext())
  83. {
  84. dict[emobj.Current.Name] = emobj.Current.Value;
  85. }
  86. List<Volume> volumes ;
  87. if (dict.TryGetValue("code", out object code))
  88. {
  89. List<Syllabus> syllabuses = await azureCosmosDBRepository.FindByDict<Syllabus>(new Dictionary<string, object> { { "code",code.ToString() } });
  90. volumes = await azureCosmosDBRepository.FindByDict<Volume>(request);
  91. //处理单个册别下面的资源和题目
  92. volumes.ForEach(v => {
  93. HashSet<string> rCount = new HashSet<string>();
  94. HashSet<string> iCount = new HashSet<string>();
  95. syllabuses.ForEach(s => {
  96. if (v.volumeCode.Equals(s.code)) {
  97. s.children.ForEach(c => {
  98. if (c.resources.IsNotEmpty())
  99. {
  100. c.resources.ForEach(r => {
  101. rCount.Add(r);
  102. });
  103. }
  104. if (c.items.IsNotEmpty())
  105. {
  106. c.items.ForEach(i => {
  107. iCount.Add(i);
  108. });
  109. }
  110. });
  111. }
  112. });
  113. v.resourceCount = rCount.Count;
  114. v.itemCount = iCount.Count;
  115. });
  116. }
  117. else
  118. {
  119. return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
  120. }
  121. return builder.Data(volumes).build();
  122. }
  123. /// <summary>
  124. /// 查找册别数量
  125. /// </summary>
  126. /// <param name="request"></param>
  127. /// <returns></returns>
  128. [HttpPost("count")]
  129. public async Task<BaseResponse> count(JsonElement request)
  130. {
  131. //List<List<List<List<int>>>> allCount = new List<List<List<List<int>>>>();
  132. ResponseBuilder builder = ResponseBuilder.custom();
  133. Dictionary<string, object> dict = new Dictionary<string, object>();
  134. var emobj = request.EnumerateObject();
  135. while (emobj.MoveNext())
  136. {
  137. dict[emobj.Current.Name] = emobj.Current.Value;
  138. }
  139. List<List<List<int>>> sCount = new List<List<List<int>>>();
  140. if (dict.Keys.Count > 0) {
  141. List<School> sc = await azureCosmosDBRepository.FindByDict<School>(dict);
  142. //查询校本所有册别数据
  143. Dictionary<string, object> scMap = new Dictionary<string, object>
  144. {
  145. { "status", 1}
  146. };
  147. List<Volume> volumeo = await azureCosmosDBRepository.FindByDict<Volume>(scMap);
  148. for (int i = 0; i < sc.Count; i++)
  149. {
  150. for (int j = 0; j < sc[i].period.Count; j++)
  151. {
  152. List<List<int>> pCount = new List<List<int>>();
  153. for (int k = 0; k < sc[i].period[j].subjects.Count; k++)
  154. {
  155. List<int> listCount = new List<int>() { 0, 0 };
  156. //查询校本册别
  157. //计数校本数量
  158. int n = 0;
  159. int s = 0;
  160. for (int m = 0; m < volumeo.Count; m++)
  161. {
  162. if (volumeo[m].type == 0 && sc[i].schoolCode.Equals(volumeo[m].code) &&
  163. sc[i].period[j].periodCode.Equals(volumeo[m].periodCode) &&
  164. sc[i].period[j].subjects[k].subjectCode.Equals(volumeo[m].subjectCode))
  165. {
  166. n++;
  167. }
  168. if (volumeo[m].type == 1 && sc[i].schoolCode.Equals(volumeo[m].code) &&
  169. sc[i].period[j].periodCode.Equals(volumeo[m].periodCode) &&
  170. sc[i].period[j].subjects[k].subjectCode.Equals(volumeo[m].subjectCode) && volumeo[m].TEAMModelId.Equals("habook#0001"))
  171. {
  172. s++;
  173. }
  174. }
  175. //册别数量
  176. listCount[0] = n;
  177. listCount[1] = s;
  178. pCount.Add(listCount);
  179. }
  180. sCount.Add(pCount);
  181. }
  182. }
  183. }
  184. return builder.Data(sCount).build();
  185. }
  186. }
  187. }