SyllabusService.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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.Syllabus.Interfaces;
  14. namespace TEAMModelOS.Service.Syllabus.Implements
  15. {
  16. public class SyllabusService : ISyllabusService
  17. {
  18. private IAzureTableDBRepository _azureTableDBRepository;
  19. private IHttpContextAccessor _httpContextAccessor;
  20. public SyllabusService(IAzureTableDBRepository azureTableDBRepository , IHttpContextAccessor httpContextAccessor) {
  21. _azureTableDBRepository = azureTableDBRepository;
  22. _httpContextAccessor = httpContextAccessor;
  23. }
  24. public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
  25. {
  26. List<SyllabusTree> nodes = new List<SyllabusTree>();
  27. TreeToList(trees, nodes);
  28. List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
  29. await _azureTableDBRepository.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. private List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
  47. {
  48. List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
  49. var lookup = list.ToDictionary(n => n.RowKey, n => n);
  50. return GetChild(list, lookup);
  51. }
  52. public List<SyllabusTree> GetChild(List<SyllabusTree> list ,Dictionary<string , SyllabusTree> dict) {
  53. List<SyllabusTree> trees = new List<SyllabusTree>();
  54. foreach (SyllabusTree node in list) {
  55. bool flag= dict.TryGetValue(node.Pid, out SyllabusTree syllabus);
  56. if (flag && syllabus != null)
  57. {
  58. syllabus.Children.Add(node);
  59. }
  60. else {
  61. trees.Add(node);
  62. }
  63. }
  64. return trees;
  65. }
  66. public async Task<SyllabusNode> SaveOrUpdate(SyllabusNode node )
  67. {
  68. return await _azureTableDBRepository.SaveOrUpdate<SyllabusNode>(node);
  69. }
  70. }
  71. }