|
@@ -1,10 +1,80 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
-using System.Text;
|
|
|
+using System.Linq;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using TEAMModelOS.Model.Syllabus.Dtos;
|
|
|
+using TEAMModelOS.Model.Syllabus.Models;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
|
|
|
+using TEAMModelOS.SDK.Module.AzureTable.Interfaces;
|
|
|
+using TEAMModelOS.Service.Syllabus.Interfaces;
|
|
|
|
|
|
namespace TEAMModelOS.Service.Syllabus.Implements
|
|
|
{
|
|
|
- class SyllabusService
|
|
|
+ public class SyllabusService : ISyllabusService
|
|
|
{
|
|
|
+
|
|
|
+ IAzureTableDBRepository _azureTableDBRepository;
|
|
|
+ public SyllabusService(IAzureTableDBRepository azureTableDBRepository) {
|
|
|
+ _azureTableDBRepository = azureTableDBRepository;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
|
|
|
+ {
|
|
|
+ List<SyllabusTree> nodes = new List<SyllabusTree>();
|
|
|
+ TreeToList(trees, nodes);
|
|
|
+ List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
|
|
|
+ string pk = Guid.NewGuid().ToString();
|
|
|
+ foreach (SyllabusNode node in nods) {
|
|
|
+ node.RowKey = node.Id;
|
|
|
+ node.PartitionKey = pk;
|
|
|
+ }
|
|
|
+ await _azureTableDBRepository.SaveOrUpdateAll<SyllabusNode>(nods);
|
|
|
+ List<SyllabusTree> treess = ListToTree(nods);
|
|
|
+ return treess;
|
|
|
+ // return Task.Factory.StartNew(() => { return treess; });
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<SyllabusTree> TreeToList(List<SyllabusTree> trees, List<SyllabusTree> nodes)
|
|
|
+ {
|
|
|
+ nodes.AddRange(MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(trees)));
|
|
|
+ foreach (SyllabusTree tree in trees)
|
|
|
+ {
|
|
|
+ if (null != tree.Children && tree.Children.Count > 0)
|
|
|
+ {
|
|
|
+ TreeToList(tree.Children, nodes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nodes;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
|
|
|
+ {
|
|
|
+ List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
|
|
|
+
|
|
|
+ var lookup = list.ToDictionary(n => n.Id, n => n);
|
|
|
+ return GetChild(list, lookup);
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<SyllabusTree> GetChild(List<SyllabusTree> list ,Dictionary<string , SyllabusTree> dict) {
|
|
|
+ List<SyllabusTree> trees = new List<SyllabusTree>();
|
|
|
+ foreach (SyllabusTree node in list) {
|
|
|
+ bool flag= dict.TryGetValue(node.Pid, out SyllabusTree syllabus);
|
|
|
+ if (flag && syllabus != null)
|
|
|
+ {
|
|
|
+ syllabus.Children.Add(node);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ trees.Add(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return trees;
|
|
|
+ }
|
|
|
+
|
|
|
+ public async Task<SyllabusNode> SaveOrUpdate(SyllabusNode node )
|
|
|
+ {
|
|
|
+
|
|
|
+ return await _azureTableDBRepository.SaveOrUpdate<SyllabusNode>(node);
|
|
|
+ }
|
|
|
}
|
|
|
}
|