|
@@ -8,6 +8,9 @@ using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
|
|
|
using TEAMModelOS.SDK.Extension.SnowFlake;
|
|
|
using TEAMModelOS.SDK.Module.AzureCosmosDB.Interfaces;
|
|
|
using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
|
|
|
+using System;
|
|
|
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
|
|
|
+using System.Linq;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers.Syllabus
|
|
|
{
|
|
@@ -26,17 +29,75 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
/// </summary>
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpPost("SaveOrUpdateAll")]
|
|
|
- public async Task<BaseJosnRPCResponse> SaveOrUpdateAll(JosnRPCRequest<List<SyllabusNode>> request)
|
|
|
+ [HttpPost("SaveOrUpdateAsTree")]
|
|
|
+ public async Task<BaseJosnRPCResponse> SaveOrUpdateAsTree(JosnRPCRequest<List<SyllabusTree>> request)
|
|
|
{
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
- List<SyllabusNode> data = new List<SyllabusNode>();
|
|
|
- if (request.@params.IsNotEmpty())
|
|
|
+ List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ TreeToList(request.@params, nodes);
|
|
|
+ // List<SyllabusNode> nods = nodes.ToJson().FromJson<List<SyllabusNode>>() ;
|
|
|
+
|
|
|
+ await azureCosmosDBRepository.SaveAll<SyllabusNode>(nodes);
|
|
|
+ List<SyllabusTree> treess = ListToTree(nodes);
|
|
|
+ return builder.Data(treess).build();
|
|
|
+ }
|
|
|
+ public static List<SyllabusNode> TreeToList(List<SyllabusTree> trees, List<SyllabusNode> nodes)
|
|
|
+ {
|
|
|
+ nodes.AddRange(trees.ToJson().FromJson<List<SyllabusNode>>());
|
|
|
+ foreach (SyllabusTree tree in trees)
|
|
|
+ {
|
|
|
+ if (null != tree.children && tree.children.Count > 0)
|
|
|
+ {
|
|
|
+ TreeToList(tree.children, nodes);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return nodes;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量保存或更新课纲
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="request"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("SaveOrUpdateAsNodes")]
|
|
|
+ public async Task<BaseJosnRPCResponse> SaveOrUpdateAsNodes(JosnRPCRequest<List<SyllabusNode>> request) {
|
|
|
+ JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
+ List<SyllabusNode> nodes = await azureCosmosDBRepository.SaveAll<SyllabusNode>(request.@params);
|
|
|
+ return builder.Data(nodes).build();
|
|
|
+ }
|
|
|
+
|
|
|
+ private static List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
|
|
|
+ {
|
|
|
+ List<SyllabusTree> list = noes.ToJson().FromJson<List<SyllabusTree>>();
|
|
|
+ //var lookup = list.ToDictionary(n => n.RowKey, n => n);
|
|
|
+
|
|
|
+ var res = from r in list group r by r.id into g select g;
|
|
|
+ Dictionary<string, SyllabusTree> blockDict = new Dictionary<string, SyllabusTree>();
|
|
|
+ foreach (var s in res)
|
|
|
{
|
|
|
- //string key = IdWorker.getInstance().NextId() + "";
|
|
|
- data = await azureCosmosDBRepository.SaveAll(request.@params);
|
|
|
+ blockDict.TryAdd(s.First().id, s.First());
|
|
|
}
|
|
|
- return builder.Data(data).build();
|
|
|
+ return GetChild(list, blockDict);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
|
|
|
+ {
|
|
|
+ // list = list.OrderBy(m => m.Order).ToList();
|
|
|
+ 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;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 删除课纲
|
|
@@ -44,37 +105,62 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("Delete")]
|
|
|
- public async Task<BaseJosnRPCResponse> Delete(JosnRPCRequest<SyllabusNode> request)
|
|
|
+ public async Task<BaseJosnRPCResponse> Delete(JosnRPCRequest<Dictionary<string, object>> request)
|
|
|
{
|
|
|
bool flag = false;
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
- if (string.IsNullOrEmpty(request.@params.id))
|
|
|
+ List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ List<SyllabusNode> data = await azureCosmosDBRepository.FindByDict<SyllabusNode>(request.@params, true);
|
|
|
+ if (data.IsNotEmpty())
|
|
|
+ {
|
|
|
+ await FindByPid(data, nodes, azureCosmosDBRepository);
|
|
|
+ if (nodes.IsNotEmpty()) {
|
|
|
+ nodes.ForEach(async e => {
|
|
|
+ await azureCosmosDBRepository.DeleteAsync<SyllabusNode>(e.id, e.volumeCode);
|
|
|
+ });
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ throw new BizException("数据不存在", ResponseCode.DATA_EMPTY_NULL);
|
|
|
+ }
|
|
|
+ return builder.Data(flag).Extend(new Dictionary<string, object>() { { "deleteData",nodes } }).build();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static async Task<List<SyllabusNode>> FindByPid(List<SyllabusNode> data, List<SyllabusNode> nodes , IAzureCosmosDBRepository azureCosmosDBRepository) {
|
|
|
+ nodes.AddRange(data);
|
|
|
+ foreach (SyllabusNode node in data)
|
|
|
{
|
|
|
- await azureCosmosDBRepository.DeleteAsync<SyllabusNode>(request.@params.id, request.@params.volumeCode);
|
|
|
- flag = true;
|
|
|
+ List<SyllabusNode> syllabusNodes= await azureCosmosDBRepository.FindByDict<SyllabusNode>(new Dictionary<string, object>() { { "pid", node.id } }, true);
|
|
|
+ if (syllabusNodes.IsNotEmpty()) {
|
|
|
+ await FindByPid(syllabusNodes, nodes ,azureCosmosDBRepository);
|
|
|
+ }
|
|
|
}
|
|
|
- return builder.Data(flag).build();
|
|
|
+ return nodes;
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 查找课纲
|
|
|
+ /// 查找课纲
|
|
|
/// </summary>
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("Find")]
|
|
|
public async Task<BaseJosnRPCResponse> Find(JosnRPCRequest<Dictionary<string, object>> request)
|
|
|
{
|
|
|
- bool flag = false;
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
- if (request.@params.TryGetValue("volumeCode", out _))
|
|
|
- {
|
|
|
- await azureCosmosDBRepository.FindByParams<SyllabusNode>(request.@params);
|
|
|
- flag = true;
|
|
|
- }
|
|
|
- else
|
|
|
+ List<SyllabusNode> data =await azureCosmosDBRepository.FindByParams<SyllabusNode>(request.@params);
|
|
|
+
|
|
|
+ if (request.@params.TryGetValue("id", out object id))
|
|
|
{
|
|
|
- throw new BizException("volumeCode is null!");
|
|
|
+ List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ if (data.IsNotEmpty()) {
|
|
|
+ await FindByPid(data, nodes, azureCosmosDBRepository);
|
|
|
+ data = nodes;
|
|
|
+ }
|
|
|
}
|
|
|
- return builder.Data(flag).build();
|
|
|
+ List<SyllabusTree> treess = ListToTree(data);
|
|
|
+ return builder.Data(treess).build();
|
|
|
}
|
|
|
}
|
|
|
}
|