SyllabusService.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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.Core.Models;
  7. using TEAMModelOS.Model.Syllabus.Dtos;
  8. using TEAMModelOS.Model.Syllabus.Models;
  9. using TEAMModelOS.SDK.Context.Exception;
  10. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  11. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  12. using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
  13. using TEAMModelOS.Service.Core.Implements;
  14. using TEAMModelOS.Service.Syllabus.Interfaces;
  15. namespace TEAMModelOS.Service.Syllabus.Implements
  16. {
  17. public class SyllabusService : BaseService, ISyllabusService
  18. {
  19. //private readonly IAzureTableDBRepository _azureTableDBRepository;
  20. //public SyllabusService(IAzureTableDBRepository azureTableDBRepository) {
  21. // _azureTableDBRepository = azureTableDBRepository;
  22. //}
  23. public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees ,string lang )
  24. {
  25. List<SyllabusTree> nodes = new List<SyllabusTree>();
  26. TreeToList(trees, nodes);
  27. List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
  28. nods.ForEach(m => { m.PartitionKey = lang; });
  29. await SaveOrUpdateAll<SyllabusNode>(nods);
  30. List<SyllabusTree> treess = ListToTree(nods);
  31. return treess;
  32. // return Task.Factory.StartNew(() => { return treess; });
  33. }
  34. public List<SyllabusTree> TreeToList(List<SyllabusTree> trees, List<SyllabusTree> nodes)
  35. {
  36. nodes.AddRange(MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(trees)));
  37. foreach (SyllabusTree tree in trees)
  38. {
  39. if (null != tree.Children && tree.Children.Count > 0)
  40. {
  41. TreeToList(tree.Children, nodes);
  42. }
  43. }
  44. return nodes;
  45. }
  46. public async Task<List<SyllabusTree>> FindSyllabusTreeByDict(Dictionary<string, object> dict)
  47. {
  48. List<SyllabusNode> syllabusNodes = await FindListByDict<SyllabusNode>(dict);
  49. return ListToTree(syllabusNodes);
  50. }
  51. private List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
  52. {
  53. List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
  54. var lookup = list.ToDictionary(n => n.RowKey, n => n);
  55. return GetChild(list, lookup);
  56. }
  57. public List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
  58. {
  59. list = list.OrderBy(m => m.Order).ToList();
  60. List<SyllabusTree> trees = new List<SyllabusTree>();
  61. foreach (SyllabusTree node in list)
  62. {
  63. bool flag = dict.TryGetValue(node.Pid, out SyllabusTree syllabus);
  64. if (flag && syllabus != null)
  65. {
  66. syllabus.Children.Add(node);
  67. }
  68. else
  69. {
  70. trees.Add(node);
  71. }
  72. }
  73. return trees;
  74. }
  75. }
  76. }