SyllabusService.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. using Microsoft.AspNetCore.Http;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Model.Syllabus.Dtos;
  7. using TEAMModelOS.Model.Syllabus.Models;
  8. using TEAMModelOS.SDK.Context.Exception;
  9. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  10. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  11. using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
  12. using TEAMModelOS.Service.Syllabus.Interfaces;
  13. namespace TEAMModelOS.Service.Syllabus.Implements
  14. {
  15. public class SyllabusService : ISyllabusService
  16. {
  17. private IAzureTableDBRepository _azureTableDBRepository;
  18. private IHttpContextAccessor _httpContextAccessor;
  19. public SyllabusService(IAzureTableDBRepository azureTableDBRepository , IHttpContextAccessor httpContextAccessor) {
  20. _azureTableDBRepository = azureTableDBRepository;
  21. _httpContextAccessor = httpContextAccessor;
  22. }
  23. public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
  24. {
  25. List<SyllabusTree> nodes = new List<SyllabusTree>();
  26. TreeToList(trees, nodes);
  27. List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
  28. await _azureTableDBRepository.SaveOrUpdateAll<SyllabusNode>(nods);
  29. List<SyllabusTree> treess = ListToTree(nods);
  30. return treess;
  31. // return Task.Factory.StartNew(() => { return treess; });
  32. }
  33. public List<SyllabusTree> TreeToList(List<SyllabusTree> trees, List<SyllabusTree> nodes)
  34. {
  35. nodes.AddRange(MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(trees)));
  36. foreach (SyllabusTree tree in trees)
  37. {
  38. if (null != tree.Children && tree.Children.Count > 0)
  39. {
  40. TreeToList(tree.Children, nodes);
  41. }
  42. }
  43. return nodes;
  44. }
  45. private List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
  46. {
  47. List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
  48. var lookup = list.ToDictionary(n => n.RowKey, n => n);
  49. return GetChild(list, lookup);
  50. }
  51. public List<SyllabusTree> GetChild(List<SyllabusTree> list ,Dictionary<string , SyllabusTree> dict) {
  52. List<SyllabusTree> trees = new List<SyllabusTree>();
  53. foreach (SyllabusTree node in list) {
  54. bool flag= dict.TryGetValue(node.Pid, out SyllabusTree syllabus);
  55. if (flag && syllabus != null)
  56. {
  57. syllabus.Children.Add(node);
  58. }
  59. else {
  60. trees.Add(node);
  61. }
  62. }
  63. return trees;
  64. }
  65. public async Task<SyllabusNode> SaveOrUpdate(SyllabusNode node )
  66. {
  67. return await _azureTableDBRepository.SaveOrUpdate<SyllabusNode>(node);
  68. }
  69. /// <summary>
  70. /// 获取教学段
  71. /// </summary>
  72. /// <param name="dict"></param>
  73. /// <returns></returns>
  74. public async Task<List<Period>> FindPeriodsByDict(Dictionary<string, object> dict){
  75. if (dict.Count <= 0)
  76. {
  77. return await _azureTableDBRepository.FindAll<Period>();
  78. }
  79. else {
  80. return await _azureTableDBRepository.FindListByDict<Period>(dict);
  81. }
  82. }
  83. /// <summary>
  84. /// 获取科目
  85. /// </summary>
  86. /// <param name="dict"></param>
  87. /// <returns></returns>
  88. public async Task<List<PeriodSubject>> FindSubjectsByDict(Dictionary<string, object> dict)
  89. {
  90. return await _azureTableDBRepository.FindListByDict<PeriodSubject>(dict);
  91. }
  92. /// <summary>
  93. /// 获取教材版本
  94. /// </summary>
  95. /// <param name="dict"></param>
  96. /// <returns></returns>
  97. public async Task<List<PeriodSubjectEdition>> FindEditionsByDict(Dictionary<string, object> dict)
  98. {
  99. return await _azureTableDBRepository.FindListByDict<PeriodSubjectEdition>(dict);
  100. }
  101. /// <summary>
  102. /// 获取册别
  103. /// </summary>
  104. /// <param name="dict"></param>
  105. /// <returns></returns>
  106. public async Task<List<PeriodSubjectEditionTerm>> FindTermsByDict(Dictionary<string, object> dict)
  107. {
  108. return await _azureTableDBRepository.FindListByDict<PeriodSubjectEditionTerm>(dict);
  109. }
  110. /// <summary>
  111. /// 获取标准教材
  112. /// </summary>
  113. /// <param name="params"></param>
  114. /// <returns></returns>
  115. public async Task<StandardTextbook> FindTextbooksByDict(Dictionary<string, object> dict) {
  116. Dictionary<string, object> parDict = new Dictionary<string, object>
  117. {
  118. { "Period", dict["Period"] },
  119. { "Subject", dict["Subject"] },
  120. { "Edition", dict["Edition"] },
  121. { "Term", dict["Term"] }
  122. };
  123. List<StandardTextbook> standardTextbooks= await _azureTableDBRepository.FindListByDict<StandardTextbook>(parDict);
  124. if (standardTextbooks != null && standardTextbooks.Count > 0)
  125. {
  126. int index = 0;
  127. foreach (StandardTextbook textbook in standardTextbooks)
  128. {
  129. if (index > 0)
  130. {
  131. await _azureTableDBRepository.Delete<StandardTextbook>(textbook);
  132. }
  133. index++;
  134. }
  135. return standardTextbooks[0];
  136. }
  137. else
  138. {
  139. // 校验 几个Code 是否存在
  140. string RowKey = "RowKey";
  141. StandardTextbook textbook = dict.DictToObj<StandardTextbook>();
  142. List<Period> periods= await FindPeriodsByDict(new Dictionary<string, object> { { RowKey, textbook.Period} });
  143. List<PeriodSubject> subjects = await FindSubjectsByDict(new Dictionary<string, object> { { RowKey, textbook.Subject } });
  144. List<PeriodSubjectEdition> editions = await FindEditionsByDict(new Dictionary<string, object> { { RowKey, textbook.Edition } });
  145. List<PeriodSubjectEditionTerm> terms = await FindTermsByDict(new Dictionary<string, object> { { RowKey, textbook.Term } });
  146. if (periods.IsNotEmpty()&& subjects.IsNotEmpty()&& editions.IsNotEmpty()&& terms.IsNotEmpty())
  147. {
  148. textbook.RowKey = Guid.NewGuid().ToString();
  149. textbook.PartitionKey = Guid.NewGuid().ToString();
  150. textbook = await _azureTableDBRepository.Save<StandardTextbook>(textbook);
  151. return textbook;
  152. }
  153. else {
  154. throw new BizException("Codes is required: Period,Subject,Edition,Term");
  155. }
  156. }
  157. }
  158. }
  159. }