KnowledgeService.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Model.Syllabus.Dtos;
  7. using TEAMModelOS.Model.Syllabus.Models;
  8. using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
  9. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  10. using TEAMModelOS.Service.Core.Implements;
  11. using TEAMModelOS.Service.Syllabus.Interfaces;
  12. namespace TEAMModelOS.Service.Syllabus.Implements
  13. {
  14. public class KnowledgeService : BaseService, IKnowledgeService
  15. {
  16. public async Task<List<KnowledgePoint>> FindKnowledgePointByDict(KnowledgeDto knowledgePoint) {
  17. List<KnowledgePoint> points = await FindListByDict<KnowledgePoint>(knowledgePoint.PointParams);
  18. if (knowledgePoint.Periods.IsNotEmpty()) {
  19. HashSet<KnowledgePoint> knowledges = new HashSet<KnowledgePoint>();
  20. foreach (string period in knowledgePoint.Periods) {
  21. if (!string.IsNullOrEmpty(period)) {
  22. knowledges.UnionWith(points.Where(x => x.AdvicePeriodCode.Contains(period)).ToHashSet());
  23. }
  24. }
  25. return knowledges.OrderBy(x=>x.Order).ToList();
  26. }
  27. return points.OrderBy(x => x.Order).ToList();
  28. }
  29. public async Task<List<BlockPointDto>> FindKnowledgeBlockAndPointByDict(KnowledgeDto knowledgePoint) {
  30. List<KnowledgeBlock> blocks = await FindListByDict<KnowledgeBlock>(knowledgePoint.PointParams);
  31. List<KnowledgeBlockPoint> blockPoints = await FindListByDict<KnowledgeBlockPoint>(knowledgePoint.PointParams);
  32. if (knowledgePoint.Periods.IsNotEmpty())
  33. {
  34. HashSet<KnowledgeBlock> knowledges = new HashSet<KnowledgeBlock>();
  35. HashSet<KnowledgeBlockPoint> knowledgeBlocks = new HashSet<KnowledgeBlockPoint>();
  36. foreach (string period in knowledgePoint.Periods)
  37. {
  38. if (!string.IsNullOrEmpty(period))
  39. {
  40. knowledges.UnionWith(blocks.Where(x => x.AdvicePeriodCode.Contains(period)).ToHashSet());
  41. knowledgeBlocks.UnionWith(blockPoints.Where(x => x.AdvicePeriodCode.Contains(period)).ToHashSet());
  42. }
  43. }
  44. blocks= knowledges.OrderBy(x => x.Order).ToList();
  45. blockPoints= knowledgeBlocks.OrderBy(x => x.Order).ToList();
  46. }
  47. return ListToTree(blocks, blockPoints);
  48. }
  49. private List<BlockPointDto> ListToTree(List<KnowledgeBlock> blocks ,List<KnowledgeBlockPoint> points)
  50. {
  51. List<PointDto> pointList = MessagePackHelper.JsonToObject<List<PointDto>>(MessagePackHelper.ObjectToJson(points));
  52. List<BlockPointDto> blockList = MessagePackHelper.JsonToObject<List<BlockPointDto>>(MessagePackHelper.ObjectToJson(blocks));
  53. Dictionary<string, List<PointDto>> pointDict = new Dictionary<string, List<PointDto>>();
  54. List<string> keys = (pointList.GroupBy(c => c.BlockId).Select(group => group.Key)).ToList();
  55. foreach (string key in keys) {
  56. pointDict.Add(key, pointList.Where(x => x.BlockId.Equals(key)).ToList());
  57. }
  58. var blockDict = blockList.ToDictionary(n => n.RowKey, n => n);
  59. return GetChild(blockList, blockDict , pointDict);
  60. }
  61. public List<BlockPointDto> GetChild(List<BlockPointDto> list, Dictionary<string, BlockPointDto> blockDict, Dictionary<string, List<PointDto>> pointDict)
  62. {
  63. List<PointDto> empt = new List<PointDto>();
  64. list = list.OrderBy(m => m.Order).ToList();
  65. List<BlockPointDto> trees = new List<BlockPointDto>();
  66. foreach (BlockPointDto node in list)
  67. {
  68. bool fl= pointDict.TryGetValue(node.RowKey,out List<PointDto> points);
  69. if (fl && points.IsNotEmpty())
  70. {
  71. node.Points = points;
  72. }
  73. else {
  74. node.Points = empt;
  75. }
  76. bool flag = blockDict.TryGetValue(node.Pid, out BlockPointDto syllabus);
  77. if (flag && syllabus != null)
  78. {
  79. syllabus.Children.Add(node);
  80. }
  81. else
  82. {
  83. trees.Add(node);
  84. }
  85. }
  86. return trees.OrderBy(x=>x.Order).ToList();
  87. }
  88. }
  89. }