Browse Source

课纲接口处理

CrazyIter 5 years ago
parent
commit
c18c380877

+ 4 - 1
TEAMModelOS.SDK/Context/Filters/HttpGlobalExceptionInvoke.cs

@@ -62,9 +62,12 @@ namespace TEAMModelOS.SDK.Context.Filter
             {
                 if (!isCatched && context.Response.StatusCode != 200)//未捕捉过并且状态码不为200
                 {
-                    string msg = "";
+                    string msg ;
                     switch (context.Response.StatusCode)
                     {
+                        case 400:
+                            msg = "Bad Request";
+                            break;
                         case 401:
                             msg = "Unauthorized";
                             break;

+ 2 - 5
TEAMModelOS.Service/Models/Syllabus/SyllabusNode.cs

@@ -10,6 +10,7 @@ namespace TEAMModelOS.Service.Models.Syllabus
         /// <summary>
         /// 
         /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
         public string id { get; set; }
         /// <summary>
         /// 标题
@@ -57,11 +58,7 @@ namespace TEAMModelOS.Service.Models.Syllabus
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
         public string pid { get; set; }
-        public SyllabusNode()
-        {
-            children = new List<SyllabusNode>();
-        }
-        public List<SyllabusNode> children { get; set; }
+      
         /// <summary>
         /// 册别编码
         /// </summary>

+ 14 - 0
TEAMModelOS.Service/Models/Syllabus/SyllabusTree.cs

@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.Service.Models.Syllabus
+{
+     public class SyllabusTree :SyllabusNode
+    {
+        public SyllabusTree() {
+            children = new List<SyllabusTree>();
+        }
+        public List<SyllabusTree> children { get; set; }
+    }
+}

+ 108 - 22
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

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