using System; using System.Collections.Generic; 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 { public class SyllabusService : ISyllabusService { IAzureTableDBRepository _azureTableDBRepository; public SyllabusService(IAzureTableDBRepository azureTableDBRepository) { _azureTableDBRepository = azureTableDBRepository; } public async Task> SaveOrUpdateAll(List trees) { List nodes = new List(); TreeToList(trees, nodes); List nods = MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(nodes)); //string pk = Guid.NewGuid().ToString(); //foreach (SyllabusNode node in nods) { // //node.RowKey = node.Id; // node.PartitionKey = pk; //} await _azureTableDBRepository.SaveOrUpdateAll(nods); List treess = ListToTree(nods); return treess; // return Task.Factory.StartNew(() => { return treess; }); } public List TreeToList(List trees, List nodes) { nodes.AddRange(MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(trees))); foreach (SyllabusTree tree in trees) { if (null != tree.Children && tree.Children.Count > 0) { TreeToList(tree.Children, nodes); } } return nodes; } private List ListToTree(List noes) { List list = MessagePackHelper.JsonToObject>(MessagePackHelper.ObjectToJson(noes)); var lookup = list.ToDictionary(n => n.RowKey, n => n); return GetChild(list, lookup); } public List GetChild(List list ,Dictionary dict) { List trees = new List(); 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 SaveOrUpdate(SyllabusNode node ) { return await _azureTableDBRepository.SaveOrUpdate(node); } /// /// 获取教学段 /// /// /// public async Task> FindPeriodsByDict(Dictionary dict){ if (dict.Count <= 0) { return await _azureTableDBRepository.FindAll(); } else { return await _azureTableDBRepository.FindListByDict(dict); } } /// /// 获取科目 /// /// /// public async Task> FindSubjectsByDict(Dictionary dict) { return await _azureTableDBRepository.FindListByDict(dict); } /// /// 获取教材版本 /// /// /// public async Task> FindEditionsByDict(Dictionary dict) { return await _azureTableDBRepository.FindListByDict(dict); } /// /// 获取册别 /// /// /// public async Task> FindTermsByDict(Dictionary dict) { return await _azureTableDBRepository.FindListByDict(dict); } } }