SyllabusService.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using TEAMModelOS.Model.Syllabus.Dtos;
  6. using TEAMModelOS.Model.Syllabus.Models;
  7. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  8. using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
  9. using TEAMModelOS.Service.Syllabus.Interfaces;
  10. namespace TEAMModelOS.Service.Syllabus.Implements
  11. {
  12. public class SyllabusService : ISyllabusService
  13. {
  14. IAzureTableDBRepository _azureTableDBRepository;
  15. public SyllabusService(IAzureTableDBRepository azureTableDBRepository) {
  16. _azureTableDBRepository = azureTableDBRepository;
  17. }
  18. public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
  19. {
  20. List<SyllabusTree> nodes = new List<SyllabusTree>();
  21. TreeToList(trees, nodes);
  22. List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
  23. string pk = Guid.NewGuid().ToString();
  24. foreach (SyllabusNode node in nods) {
  25. node.RowKey = node.Id;
  26. node.PartitionKey = pk;
  27. }
  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.Id, 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. }
  111. }