黄贺彬 6 lat temu
rodzic
commit
1a4ab91d46

+ 0 - 48
TEAMModelOS.Model/Syllabus/Dtos/SyllabusNode.cs

@@ -1,48 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.Model.Syllabus.Dtos
-{
-    public class SyllabusNode
-    {
-        public ICollection<SyllabusNode> Children { get; set; }
-        /// <summary>
-        /// id
-        /// </summary>
-        public string Id { get; set; }
-        /// <summary>
-        /// 标题
-        /// </summary>
-        public string Title { get; set; }
-        /// <summary>
-        /// 是否展开
-        /// </summary>
-        public bool Expand { get; set; }
-        /// <summary>
-        /// 是否禁用响应
-        /// </summary>
-        public bool Disabled { get; set; }
-        /// <summary>
-        /// 是否禁用复选框
-        /// </summary>
-        public bool DisableCheckbox { get; set; }
-        /// <summary>
-        /// 选中当前节点
-        /// </summary>
-        public bool Selected { get; set; }
-        public bool @Checked { get; set; }
-        /// <summary>
-        /// 排序
-        /// </summary>
-        public int Order { get; set; }
-        /// <summary>
-        /// 类型
-        /// </summary>
-        public int Type { get; set; }
-        /// <summary>
-        /// 备注
-        /// </summary>
-        public string Remark { get; set; }
-    }
-}

+ 24 - 20
TEAMModelOS.Model/Syllabus/Models/Syllabus.cs

@@ -1,52 +1,56 @@
-using Microsoft.WindowsAzure.Storage.Table;
+using MessagePack;
+using Microsoft.WindowsAzure.Storage.Table;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
 using System.Text;
+using TEAMModelOS.SDK.Helper.Common.TreeList;
 
 namespace TEAMModelOS.Model.Syllabus.Models
 {
     /// <summary>
     /// 课纲结构
     /// </summary>
-    public class Syllabus : TableEntity
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class SyllabusNode : TableEntity
     {
-        /// <summary>
-        /// id
-        /// </summary>
-        public string Id { get; set; }
         /// <summary>
         /// 标题
         /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
         public string Title { get; set; }
         /// <summary>
         /// 是否展开
         /// </summary>
         public bool Expand { get; set; }
         /// <summary>
-        /// 是否禁用响应
-        /// </summary>
-        public bool Disabled { get; set; }
-        /// <summary>
-        /// 是否禁用复选框
-        /// </summary>
-        public bool DisableCheckbox { get; set; }
-        /// <summary>
-        /// 选中当前节点
-        /// </summary>
-        public bool Selected { get; set; }
-        public bool @Checked { get; set; }
-        /// <summary>
         /// 排序
         /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
         public int Order { get; set; }
         /// <summary>
         /// 类型
         /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
         public int Type { get; set; }
         /// <summary>
         /// 备注
         /// </summary>
         public string Remark { get; set; }
-
+        /// <summary>
+        /// 节点Key
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public string NodeKey { get; set; }
+        /// <summary>
+        ///主键
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public string Id { get; set; }
+        /// <summary>
+        /// 父级
+        /// </summary>
+        [Required(ErrorMessage = "{0} 必须填写")]
+        public string Pid { get; set; }
     }
 }

+ 20 - 0
TEAMModelOS.Model/Syllabus/Models/TextbookStruct.cs

@@ -0,0 +1,20 @@
+using MessagePack;
+using Microsoft.WindowsAzure.Storage.Table;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.Model.Syllabus.Models
+{
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class TextbookStruct: TableEntity
+    {
+        /// <summary>
+        /// 1.学段,2.科目,
+        /// </summary>
+       public string Type { get; set; }
+       public string Code { get; set; }
+       public string Name { get; set; }
+       public bool Template { get; set; }
+    }
+}

+ 3 - 0
TEAMModelOS.Model/TEAMModelOS.Model.csproj

@@ -12,4 +12,7 @@
   <ItemGroup>
     <PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
   </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\TEAMModelOS.SDK\TEAMModelOS.SDK.csproj" />
+  </ItemGroup>
 </Project>

+ 32 - 0
TEAMModelOS.SDK/Helper/Common/TreeList/ListToTree.cs

@@ -0,0 +1,32 @@
+using Microsoft.WindowsAzure.Storage.Table;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+
+namespace TEAMModelOS.SDK.Helper.Common.TreeList
+{
+    public class ListToTree
+    {
+        public static List<N> Convert<N>(List<N> list) where N: Node , new() {
+            var lookup = list.ToDictionary(n => n.Id, n => n);
+            var rootNodes = new List<N>();
+            foreach (var node in list)
+            {
+                if (!string.IsNullOrEmpty(node.Pid))
+                {
+                    Tree<N> parent = new Tree<N>();
+                    bool  s=   lookup.TryGetValue(node.Pid ,out N ss);
+                    parent.Children.Add(MessagePackHelper.JsonToObject<Tree<N>>(MessagePackHelper.ObjectToJson(node)));
+                }
+                else
+                {
+                    rootNodes.Add(node);
+                }
+            }
+            return rootNodes;
+        }
+    }
+}

+ 15 - 0
TEAMModelOS.SDK/Helper/Common/TreeList/Node.cs

@@ -0,0 +1,15 @@
+using MessagePack;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Module.GrpcServer.Implements;
+
+namespace TEAMModelOS.SDK.Helper.Common.TreeList
+{
+    
+    public interface Node 
+    {
+         dynamic Id { get; set; }
+         dynamic Pid { get; set; }
+    }
+}

+ 14 - 0
TEAMModelOS.SDK/Helper/Common/TreeList/Tree.cs

@@ -0,0 +1,14 @@
+using MessagePack;
+using System;
+using System.Collections.Generic;
+
+namespace TEAMModelOS.SDK.Helper.Common.TreeList
+{
+    [MessagePackObject(keyAsPropertyName: true)]
+    public class Tree<N>
+    {
+        public dynamic Id { get; set; }
+        public dynamic Pid { get; set; }
+        public List<Tree<N>> Children { get; set; } = new List<Tree<N>>();
+    }
+}

+ 2 - 0
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -6,7 +6,9 @@
 
   <ItemGroup>
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="1.2.0" />
+    <PackageReference Include="AutoFixture" Version="4.8.0" />
     <PackageReference Include="BCrypt.Net-Next" Version="3.1.3" />
+    <PackageReference Include="BinaryTree" Version="5.0.0" />
     <PackageReference Include="Google.Protobuf" Version="3.7.0" />
     <PackageReference Include="Grpc" Version="1.19.0" />
     <PackageReference Include="Grpc.HealthCheck" Version="1.19.0" />

+ 72 - 2
TEAMModelOS.Service/Syllabus/Implements/SyllabusService.cs

@@ -1,10 +1,80 @@
 using System;
 using System.Collections.Generic;
-using System.Text;
+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
 {
-    class SyllabusService
+    public class SyllabusService : ISyllabusService
     {
+
+        IAzureTableDBRepository _azureTableDBRepository;
+        public SyllabusService(IAzureTableDBRepository azureTableDBRepository) {
+            _azureTableDBRepository = azureTableDBRepository;
+        }
+
+
+        public async Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees)
+        {
+            List<SyllabusTree> nodes = new List<SyllabusTree>();
+            TreeToList(trees, nodes);
+            List<SyllabusNode> nods = MessagePackHelper.JsonToObject<List<SyllabusNode>>(MessagePackHelper.ObjectToJson(nodes));
+            string pk = Guid.NewGuid().ToString();
+            foreach (SyllabusNode node in nods) {
+                node.RowKey = node.Id;
+                node.PartitionKey = pk;
+            }
+             await _azureTableDBRepository.SaveOrUpdateAll<SyllabusNode>(nods);
+            List<SyllabusTree> treess = ListToTree(nods);
+            return treess;
+           // return Task.Factory.StartNew(() => { return treess; });
+        }
+
+        public List<SyllabusTree> TreeToList(List<SyllabusTree> trees, List<SyllabusTree> nodes)
+        {
+            nodes.AddRange(MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(trees)));
+            foreach (SyllabusTree tree in trees)
+            {
+                if (null != tree.Children && tree.Children.Count > 0)
+                {
+                    TreeToList(tree.Children, nodes);
+                }
+            }
+            return nodes;
+        }
+
+        private  List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
+        {
+            List<SyllabusTree> list = MessagePackHelper.JsonToObject<List<SyllabusTree>>(MessagePackHelper.ObjectToJson(noes));
+ 
+            var lookup = list.ToDictionary(n => n.Id, n => n);
+            return GetChild(list, lookup);
+        }
+
+        public List<SyllabusTree> GetChild(List<SyllabusTree> list ,Dictionary<string , SyllabusTree> dict) {
+            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; 
+        }
+
+        public async  Task<SyllabusNode> SaveOrUpdate(SyllabusNode node )
+        {
+
+            return await _azureTableDBRepository.SaveOrUpdate<SyllabusNode>(node);
+        }
     }
 }

+ 7 - 1
TEAMModelOS.Service/Syllabus/Interfaces/ISyllabusService.cs

@@ -1,10 +1,16 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.Model.Syllabus.Dtos;
+using TEAMModelOS.Model.Syllabus.Models;
+using TEAMModelOS.Service.Common.Interfaces;
 
 namespace TEAMModelOS.Service.Syllabus.Interfaces
 {
-    interface ISyllabusService
+    public interface ISyllabusService : IBusinessService
     {
+        Task<List<SyllabusTree>> SaveOrUpdateAll(List<SyllabusTree> trees);
+        Task<SyllabusNode> SaveOrUpdate(SyllabusNode @params);
     }
 }

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

@@ -1,8 +1,11 @@
 using Microsoft.AspNetCore.Mvc;
-using System.Threading.Tasks;
+using System.Collections.Generic;
 using TEAMModelOS.Model.Syllabus.Dtos;
+using TEAMModelOS.Model.Syllabus.Models;
 using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
-using TEAMModelOS.SDK.Extension.HttpClient.Implements;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
+using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+using TEAMModelOS.Service.Syllabus.Interfaces;
 
 namespace TEAMModelOS.Controllers.Syllabus
 {
@@ -10,16 +13,26 @@ namespace TEAMModelOS.Controllers.Syllabus
     [ApiController]
     public class SyllabusController: Controller
     {
-        HttpClientService httpClientService;
-        public SyllabusController(HttpClientService _HttpClientService) {
-            httpClientService = _HttpClientService;
+        public ISyllabusService syllabusService; 
+
+        // HttpClientService httpClientService;
+        public SyllabusController(ISyllabusService _syllabusService) {
+            //httpClientService = _HttpClientService;
+            syllabusService = _syllabusService;
+        }
+        [HttpPost("SaveOrUpdateAll")]
+        public BaseJosnRPCResponse SaveOrUpdateAll(JosnRPCRequest<List<SyllabusTree>> request )
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<SyllabusTree> data = syllabusService.SaveOrUpdateAll(request.@params).Result;
+            return builder.Data(data).build(); 
         }
         [HttpPost("SaveOrUpdate")]
-        public string SaveOrUpdate(JosnRPCRequest<SyllabusNode> request )
+        public BaseJosnRPCResponse SaveOrUpdate(JosnRPCRequest<SyllabusNode> request)
         {
-
-            string s = httpClientService.HttpGet("https://www.cnblogs.com/AnAng/p/9370913.html");
-            return s; 
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            SyllabusNode data = syllabusService.SaveOrUpdate(request.@params).Result;
+            return builder.Data(data).build();
         }
     }
 }

+ 4 - 4
TEAMModelOS/appsettings.Development.json

@@ -1,4 +1,4 @@
-{
+{
   "Logging": {
     "LogLevel": {
       "Default": "Debug",
@@ -14,13 +14,13 @@
     },
     "Blob": {
       "ConnectionString": "https://teammodelstorage.blob.core.chinacloudapi.cn/teammodelcontest?st=2019-03-11T08%3A20%3A19Z&se=2040-03-12T08%3A20%3A00Z&sp=rwdl&sv=2018-03-28&sr=c&sig=mZ%2BnzDWpcw0Vn2AQRCzo8I9%2Bh%2FnbujjWo8ObOwHwZjg%3D",
-      "Container": "teammodelcontest",
+      "Container": "teammodelos",
       "AzureTableDialect": ""
     },
     "CosmosDB": {
       "ConnectionString": "https://localhost:8081",
       "ConnectionKey": "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
-      "Database": "Contest",
+      "Database": "TEAMModelOS",
       "AzureTableDialect": ""
     }
   },
@@ -180,4 +180,4 @@
       }
     ]
   }
-}
+}