Explorar el Código

1、修改课纲相关接口,调整课纲数据结构。
2、课程、资源引用。知识点相关接口CosmosDB中Save修改为Update

李思淳 hace 5 años
padre
commit
6931771f41

+ 7 - 4
TEAMModelOS.Service/Models/Syllabus/SyllabusNode.cs

@@ -5,8 +5,7 @@ using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
 
 namespace TEAMModelOS.Service.Models.Syllabus
 {
-    [CosmosDB(RU = 400, Name = "SyllabusNode")]
-    public class SyllabusNode:ID
+    public class SyllabusNode
     {
 
         public SyllabusNode() {
@@ -64,18 +63,22 @@ namespace TEAMModelOS.Service.Models.Syllabus
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
         public string pid { get; set; }
-      
+
         /// <summary>
         /// 册别编码
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
-        [PartitionKey]
         public string volumeCode { get; set; }
+
         /// <summary>
         /// 数据状态
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
         public int status { get; set; } = 1;
+
+         public List<string> resources { get; set; }
+        public List<string> knowledges { get; set; }
+
         public  bool resource { get; set; }
         public bool knowledge { get; set; }
         

+ 28 - 0
TEAMModelOS.Service/Models/Syllabus/Syllabuses.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
+
+namespace TEAMModelOS.Service.Models.Syllabus
+{
+    [CosmosDB(RU = 400, Name = "Syllabus")]
+    public class Syllabuses : ID
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public string id { get; set; }
+
+        /// <summary>
+        /// 册别编码
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        [PartitionKey]
+        public string volumeCode { get; set; }
+
+        public List<SyllabusNode> children { get; set; }
+    }
+}

+ 1 - 1
TEAMModelOS/ClientApp/package.json

@@ -94,7 +94,7 @@
     "font-awesome": "^4.7.0",
     "less-loader": "^4.1.0",
     "mini-css-extract-plugin": "^0.5.0",
-    "node-sass": "^4.12.0",
+    "node-sass": "^4.13.1",
     "optimize-css-assets-webpack-plugin": "^5.0.3",
     "postcss": "^7.0.18",
     "postcss-loader": "^3.0.0",

+ 1 - 1
TEAMModelOS/Controllers/Courses/CourseController.cs

@@ -29,7 +29,7 @@ namespace TEAMModelOS.Controllers.Courses
         {
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
             List<Course> courses = request.@params;
-            List<Course> response = await _cosmos.SaveAll<Course>(courses);
+            List<Course> response = await _cosmos.UpdateAll<Course>(courses);
             if (response.Count > 0) builder.Data(response).Extend(new Dictionary<string, object> { { "count", response.Count } });
             else builder.Error(false, ResponseCode.FAILED, "失败");
             return builder.build();

+ 4 - 4
TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs

@@ -268,12 +268,12 @@ namespace TEAMModelOS.Controllers.Syllabus
                                 knowledge.points.Remove(item.id);
                                 knowledge.points.Add(item.id);
                             }
-                            await _cosmos.SaveAll(knowledges);
+                            await _cosmos.UpdateAll(knowledges);
                         }
                         item.points.Clear();
                     }
                 }
-                List<Knowledge> ts = await _cosmos.SaveAll(schoolBlocks);
+                List<Knowledge> ts = await _cosmos.UpdateAll(schoolBlocks);
                 if (ts.Count > 0) builder.Data(ts).Extend(new Dictionary<string, object> { { "count", ts.Count } });
                 else builder.Error(false, ResponseCode.FAILED, "失败");
             }
@@ -297,8 +297,8 @@ namespace TEAMModelOS.Controllers.Syllabus
                     List<SyllabusResource> Resources = await _cosmos.FindSQL<SyllabusResource>("SELECT value(c) FROM c join a in c.points where Contains(a, '" + Knowledge.id + "') = true ");
                     foreach (Knowledge knowledge in knowledges) knowledge.points.Remove(Knowledge.id);
                     foreach (SyllabusResource Resource in Resources) Resource.points.Remove(Knowledge.id);
-                    await _cosmos.SaveAll(Resources);
-                    await _cosmos.SaveAll(knowledges);
+                    await _cosmos.UpdateAll(Resources);
+                    await _cosmos.UpdateAll(knowledges);
                 }
             }
             return builder.build();

+ 1 - 1
TEAMModelOS/Controllers/Syllabus/ResourceController.cs

@@ -54,7 +54,7 @@ namespace TEAMModelOS.Controllers.Syllabus
                         
                     }
                 }
-                List<SyllabusResource> ts = await _cosmos.SaveAll(resource);
+                List<SyllabusResource> ts = await _cosmos.UpdateAll(resource);
                 if (ts.Count > 0) builder.Data("保存或新增成功");
                 else builder.Error(false, ResponseCode.FAILED, "失败");
             }

+ 158 - 35
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

@@ -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();
         }
     }
 }