SyllabusService.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 readonly IAzureTableDBRepository _azureTableDBRepository;
  19. public SyllabusService(IAzureTableDBRepository azureTableDBRepository) {
  20. _azureTableDBRepository = azureTableDBRepository;
  21. }
  22. public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
  23. {
  24. List<SyllabusTree> nodes = new List<SyllabusTree>();
  25. TreeToList(trees, nodes);
  26. List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
  27. await _azureTableDBRepository.SaveOrUpdateAll<SyllabusNode>(nods);
  28. List<SyllabusTree> treess = ListToTree(nods);
  29. return treess;
  30. // return Task.Factory.StartNew(() => { return treess; });
  31. }
  32. public List<SyllabusTree> TreeToList(List<SyllabusTree> trees, List<SyllabusTree> nodes)
  33. {
  34. nodes.AddRange(MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(trees)));
  35. foreach (SyllabusTree tree in trees)
  36. {
  37. if (null != tree.Children && tree.Children.Count > 0)
  38. {
  39. TreeToList(tree.Children, nodes);
  40. }
  41. }
  42. return nodes;
  43. }
  44. private List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
  45. {
  46. List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
  47. var lookup = list.ToDictionary(n => n.RowKey, n => n);
  48. return GetChild(list, lookup);
  49. }
  50. public List<SyllabusTree> GetChild(List<SyllabusTree> list ,Dictionary<string , SyllabusTree> dict) {
  51. List<SyllabusTree> trees = new List<SyllabusTree>();
  52. foreach (SyllabusTree node in list) {
  53. bool flag= dict.TryGetValue(node.Pid, out SyllabusTree syllabus);
  54. if (flag && syllabus != null)
  55. {
  56. syllabus.Children.Add(node);
  57. }
  58. else {
  59. trees.Add(node);
  60. }
  61. }
  62. return trees;
  63. }
  64. public async Task<SyllabusNode> SaveOrUpdate(SyllabusNode node )
  65. {
  66. return await _azureTableDBRepository.SaveOrUpdate<SyllabusNode>(node);
  67. }
  68. }
  69. }