|
@@ -12,6 +12,8 @@ using System;
|
|
|
using TEAMModelOS.SDK.Helper.Common.JsonHelper;
|
|
|
using System.Linq;
|
|
|
using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
|
|
|
+using Newtonsoft.Json;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers.Syllabus
|
|
|
{
|
|
@@ -35,16 +37,20 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
{
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ Syllabuses syllabus = new Syllabuses();
|
|
|
+
|
|
|
TreeToList(request.@params, nodes);
|
|
|
- // List<SyllabusNode> nods = nodes.ToJson().FromJson<List<SyllabusNode>>() ;
|
|
|
-
|
|
|
- await azureCosmosDBRepository.SaveAll<SyllabusNode>(nodes);
|
|
|
+ // List<SyllabusNode> nods = nodes.ToJson().FromJson<List<SyllabusNode>>() ;
|
|
|
+ syllabus.children = nodes;
|
|
|
+ syllabus.id = request.@params[0].volumeCode;
|
|
|
+ syllabus.volumeCode = request.@params[0].volumeCode;
|
|
|
+ await azureCosmosDBRepository.Update<Syllabuses>(syllabus);
|
|
|
List<SyllabusTree> treess = ListToTree(nodes);
|
|
|
return builder.Data(treess).build();
|
|
|
}
|
|
|
public static List<SyllabusNode> TreeToList(List<SyllabusTree> trees, List<SyllabusNode> nodes)
|
|
|
{
|
|
|
- trees = trees.OrderBy(x => x.order).ToList();
|
|
|
+ trees = trees.OrderBy(x => x.order).ToList();
|
|
|
nodes.AddRange(trees.ToJson().FromJson<List<SyllabusNode>>());
|
|
|
|
|
|
foreach (SyllabusTree tree in trees)
|
|
@@ -63,10 +69,43 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpPost("SaveOrUpdateAsNodes")]
|
|
|
- public async Task<BaseJosnRPCResponse> SaveOrUpdateAsNodes(JosnRPCRequest<List<SyllabusNode>> request) {
|
|
|
+ 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();
|
|
|
+ List<SyllabusNode> syllabusNodes = request.@params;
|
|
|
+ List<Syllabuses> data = await azureCosmosDBRepository.FindByDict<Syllabuses>(new Dictionary<string, object> { { "id", syllabusNodes[0].volumeCode } });
|
|
|
+ List<SyllabusNode> syllabusNodes1 = new List<SyllabusNode>();
|
|
|
+ if (data.Count > 0) {
|
|
|
+
|
|
|
+ syllabusNodes1.AddRange(data[0].children);
|
|
|
+ //replace
|
|
|
+ for (int i = 0; i < data[0].children.Count; i++)
|
|
|
+ {
|
|
|
+ for (int j = 0; j < syllabusNodes.Count; j++)
|
|
|
+ {
|
|
|
+ if (data[0].children[i].id == syllabusNodes[j].id && data[0].children[i].volumeCode == syllabusNodes[j].volumeCode)
|
|
|
+ {
|
|
|
+ syllabusNodes1.Remove(data[0].children[i]);
|
|
|
+ syllabusNodes1.Add(syllabusNodes[j]);
|
|
|
+ syllabusNodes.Remove(syllabusNodes[j]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ data[0].children = syllabusNodes1;
|
|
|
+
|
|
|
+ //新增
|
|
|
+ data[0].children.AddRange(syllabusNodes);
|
|
|
+
|
|
|
+
|
|
|
+ List<Syllabuses> syllabuses = await azureCosmosDBRepository.UpdateAll<Syllabuses>(data);
|
|
|
+ if (syllabuses != null) return builder.Data(request.@params).build();
|
|
|
+ else return builder.Error(false, ResponseCode.FAILED, "保存失败").build();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return builder.Error(false, ResponseCode.FAILED, "保存失败").build();
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private static List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
|
|
@@ -85,11 +124,11 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
|
|
|
public static List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
|
|
|
{
|
|
|
- // list = list.OrderBy(m => m.Order).ToList();
|
|
|
+ // 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)
|
|
|
{
|
|
@@ -110,39 +149,95 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
[HttpPost("Delete")]
|
|
|
public async Task<BaseJosnRPCResponse> Delete(JosnRPCRequest<Dictionary<string, object>> request)
|
|
|
{
|
|
|
- bool flag = false;
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
- List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
- List<SyllabusNode> data = await azureCosmosDBRepository.FindByDict<SyllabusNode>(request.@params);
|
|
|
- if (data.IsNotEmpty())
|
|
|
+ Dictionary<string, object> dict = new Dictionary<string, object>();
|
|
|
+ foreach (KeyValuePair<string, object> keyValuePair in request.@params)
|
|
|
+ {
|
|
|
+ dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Syllabuses> data = await azureCosmosDBRepository.FindByDict<Syllabuses>(dict);
|
|
|
+ Dictionary<string, Syllabuses> syllabuses = new Dictionary<string, Syllabuses>();
|
|
|
+
|
|
|
+ if (data.Count > 0)
|
|
|
{
|
|
|
- await FindByPid(data, nodes, azureCosmosDBRepository);
|
|
|
- if (nodes.IsNotEmpty()) {
|
|
|
- nodes.ForEach(async e => {
|
|
|
- await azureCosmosDBRepository.DeleteAsync<SyllabusNode>(e.id, e.volumeCode);
|
|
|
- });
|
|
|
- flag = true;
|
|
|
+ data.ForEach(x => syllabuses.TryAdd(x.id, x));
|
|
|
+ data = new List<Syllabuses>(syllabuses.Values);
|
|
|
+
|
|
|
+ //是否全删
|
|
|
+ bool flg = false;
|
|
|
+ foreach (Syllabuses item in data)
|
|
|
+ {
|
|
|
+ List<SyllabusNode> nodedata = item.children;
|
|
|
+ if (request.@params.TryGetValue("id", out object id))
|
|
|
+ {
|
|
|
+ foreach (SyllabusNode syllabus in nodedata)
|
|
|
+ {
|
|
|
+ if (syllabus.id == id.ToString())
|
|
|
+ {
|
|
|
+ List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ nodes.Add(syllabus);
|
|
|
+ await FindByPid(syllabus, nodes, nodedata);
|
|
|
+ nodedata = nodes;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SyllabusNode> syllabusNodes = new List<SyllabusNode>();
|
|
|
+ syllabusNodes.AddRange(item.children);
|
|
|
+ for (int i = 0; i < item.children.Count; i++)
|
|
|
+ {
|
|
|
+ for (int j = 0; j < nodedata.Count; j++)
|
|
|
+ {
|
|
|
+ if (item.children[i].id == nodedata[j].id)
|
|
|
+ {
|
|
|
+ syllabusNodes.Remove(item.children[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ item.children = syllabusNodes;
|
|
|
+ if (item.children.Count == 0)
|
|
|
+ {
|
|
|
+ await azureCosmosDBRepository.DeleteAsync<Syllabuses>(item.id, item.volumeCode);
|
|
|
+ flg = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (flg)
|
|
|
+ {
|
|
|
+
|
|
|
+ return builder.Data("全部删除成功").build();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ List<Syllabuses> data1 = await azureCosmosDBRepository.UpdateAll<Syllabuses>(data);
|
|
|
+ return builder.Data(data1).build();
|
|
|
}
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
throw new BizException("数据不存在", ResponseCode.DATA_EMPTY_NULL);
|
|
|
}
|
|
|
- return builder.Data(flag).Extend(new Dictionary<string, object>() { { "deleteData",nodes } }).build();
|
|
|
+
|
|
|
+ //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 , IAzureCosmosDBV3Repository azureCosmosDBRepository) {
|
|
|
- nodes.AddRange(data);
|
|
|
- foreach (SyllabusNode node in data)
|
|
|
+ public static async Task<List<SyllabusNode>> FindByPid(SyllabusNode data, List<SyllabusNode> nodes, List<SyllabusNode> nodedata)
|
|
|
+ {
|
|
|
+ foreach (SyllabusNode syllabus in nodedata)
|
|
|
{
|
|
|
- List<SyllabusNode> syllabusNodes= await azureCosmosDBRepository.FindByDict<SyllabusNode>(new Dictionary<string, object>() { { "pid", node.id } });
|
|
|
- if (syllabusNodes.IsNotEmpty()) {
|
|
|
- await FindByPid(syllabusNodes, nodes ,azureCosmosDBRepository);
|
|
|
+ if (syllabus.pid == data.id)
|
|
|
+ {
|
|
|
+ nodes.Add(syllabus);
|
|
|
+ await FindByPid(syllabus, nodes, nodedata);
|
|
|
}
|
|
|
}
|
|
|
return nodes;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 查找课纲
|
|
|
/// </summary>
|
|
@@ -152,18 +247,46 @@ namespace TEAMModelOS.Controllers.Syllabus
|
|
|
public async Task<BaseJosnRPCResponse> Find(JosnRPCRequest<Dictionary<string, object>> request)
|
|
|
{
|
|
|
JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
|
|
|
- List<SyllabusNode> data =await azureCosmosDBRepository.FindByDict<SyllabusNode>(request.@params);
|
|
|
+ Dictionary<string, object> dict = new Dictionary<string, object>();
|
|
|
+ foreach (KeyValuePair<string, object> keyValuePair in request.@params)
|
|
|
+ {
|
|
|
+ dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
|
|
|
+ }
|
|
|
|
|
|
- if (request.@params.TryGetValue("id", out object id))
|
|
|
+ List<Syllabuses> data = await azureCosmosDBRepository.FindByDict<Syllabuses>(dict);
|
|
|
+ if (data.Count > 0)
|
|
|
{
|
|
|
- List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
- if (data.IsNotEmpty()) {
|
|
|
- await FindByPid(data, nodes, azureCosmosDBRepository);
|
|
|
- data = nodes;
|
|
|
+ Dictionary<string, Syllabuses> syllabuses = new Dictionary<string, Syllabuses>();
|
|
|
+ data.ForEach(x => syllabuses.TryAdd(x.id, x));
|
|
|
+ data = new List<Syllabuses>(syllabuses.Values);
|
|
|
+ List <SyllabusTree> treess = new List<SyllabusTree> ();
|
|
|
+ foreach (Syllabuses item in data)
|
|
|
+ {
|
|
|
+
|
|
|
+ List<SyllabusNode> nodedata = item.children;
|
|
|
+ if (request.@params.TryGetValue("id", out object id))
|
|
|
+ {
|
|
|
+ foreach (SyllabusNode syllabus in nodedata)
|
|
|
+ {
|
|
|
+ if (syllabus.id == id.ToString())
|
|
|
+ {
|
|
|
+ List<SyllabusNode> nodes = new List<SyllabusNode>();
|
|
|
+ nodes.Add(syllabus);
|
|
|
+ await FindByPid(syllabus, nodes, nodedata);
|
|
|
+ nodedata = nodes;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SyllabusTree> treess1 = ListToTree(nodedata);
|
|
|
+ treess.AddRange(treess1);
|
|
|
+
|
|
|
+ //treess.AddRange(treess1);
|
|
|
}
|
|
|
+
|
|
|
+ return builder.Data(treess).build();
|
|
|
}
|
|
|
- List<SyllabusTree> treess = ListToTree(data);
|
|
|
- return builder.Data(treess).build();
|
|
|
+ else return builder.Error(false, ResponseCode.NOT_FOUND, "资源未找到").build();
|
|
|
}
|
|
|
}
|
|
|
}
|