Browse Source

代碼調整

JAELYS 4 years ago
parent
commit
789e6df2f7
50 changed files with 1135 additions and 2472 deletions
  1. 24 0
      TEAMModelOS.SDK/DI/AzureServiceBus/AzureServiceBusExtensions.cs
  2. 0 17
      TEAMModelOS.SDK/Extension/HttpClient/HttpClientExtension.cs
  3. 0 177
      TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientSchool.cs
  4. 0 175
      TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientSendCloud.cs
  5. 0 177
      TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientUserInfo.cs
  6. 7 0
      TEAMModelOS.SDK/Extension/JsonExtensions.cs
  7. 0 159
      TEAMModelOS.SDK/Extension/MessagePush/Implements/SendCloudService.cs
  8. 0 42
      TEAMModelOS.SDK/Extension/MessagePush/Interfaces/ISendCloudService.cs
  9. 0 20
      TEAMModelOS.SDK/Extension/MessagePush/MessagePushExtension.cs
  10. 0 30
      TEAMModelOS.SDK/Extension/MessagePush/Model/SendCloudResponse.cs
  11. 0 36
      TEAMModelOS.SDK/Extension/MessagePush/Model/SmsConfig.cs
  12. 0 12
      TEAMModelOS.SDK/Extension/MessagePush/Model/SmsSendCloud.cs
  13. 0 23
      TEAMModelOS.SDK/Extension/SnowFlake/DisposableAction.cs
  14. 0 139
      TEAMModelOS.SDK/Extension/SnowFlake/IdWorker.cs
  15. 0 42
      TEAMModelOS.SDK/Extension/SnowFlake/TimeExtensions.cs
  16. 0 168
      TEAMModelOS.SDK/Helper/Network/HttpHelper/HttpHelper.cs
  17. 2 1
      TEAMModelOS.SDK/Module/Grpc/AspNetCore/Interceptors/Server/JaegerTracingInterceptor.cs
  18. 6 5
      TEAMModelOS.SDK/Module/Grpc/AspNetCore/Interceptors/Server/MonitorInterceptor.cs
  19. 3 2
      TEAMModelOS.SDK/Module/Grpc/AspNetCore/Internal/RegisterServiceHosted.cs
  20. 4 3
      TEAMModelOS.SDK/Module/Grpc/Client/Interceptors/Client/ClientJaegerTracingInterceptor.cs
  21. 6 5
      TEAMModelOS.SDK/Module/Grpc/Client/Interceptors/Client/ClientMonitorInterceptor.cs
  22. 25 18
      TEAMModelOS.SDK/Module/Grpc/Common/BaseService/MetaService.cs
  23. 24 19
      TEAMModelOS.SDK/Module/Grpc/Common/BaseService/MetaServiceAspnetCore.cs
  24. 3 2
      TEAMModelOS.SDK/Module/Grpc/Common/CommonError.cs
  25. 0 126
      TEAMModelOS.SDK/Module/Grpc/Common/JsonSerialization.cs
  26. 0 1
      TEAMModelOS.SDK/Module/OpenXmlTool/WmlToHtmlConverter.cs
  27. 1 1
      TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue
  28. 94 72
      TEAMModelOS/Controllers/Analysis/AchievementController.cs
  29. 17 17
      TEAMModelOS/Controllers/Analysis/ChangeController.cs
  30. 27 0
      TEAMModelOS/Controllers/Client/Attribute/AuthFilter.cs
  31. 99 101
      TEAMModelOS/Controllers/Core/AuthController.cs
  32. 18 15
      TEAMModelOS/Controllers/Core/BlobController.cs
  33. 37 30
      TEAMModelOS/Controllers/Exam/ExamController.cs
  34. 11 11
      TEAMModelOS/Controllers/Exam/PaperController.cs
  35. 17 17
      TEAMModelOS/Controllers/Syllabus/ItemInfoController.cs
  36. 194 149
      TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs
  37. 14 14
      TEAMModelOS/Controllers/Syllabus/ResourceController.cs
  38. 288 30
      TEAMModelOS/Controllers/Syllabus/SyllabusController.cs
  39. 114 12
      TEAMModelOS/Controllers/Syllabus/VolumeController.cs
  40. 28 30
      TEAMModelOS/Controllers/Task/HomeworkController.cs
  41. 23 24
      TEAMModelOS/Controllers/Task/LearnController.cs
  42. 24 25
      TEAMModelOS/Controllers/Task/SurveyController.cs
  43. 25 26
      TEAMModelOS/Controllers/Task/VoteController.cs
  44. 0 1
      TEAMModelOS/Service/Analysis/AchievementService.cs
  45. 0 2
      TEAMModelOS/Service/Evaluation/ImportExerciseService.cs
  46. 0 42
      TEAMModelOS/Service/Learn/ServiceBusService.cs
  47. 0 57
      TEAMModelOS/Service/Syllabus/KnowledgeService.cs
  48. 0 283
      TEAMModelOS/Service/Syllabus/SyllabusService.cs
  49. 0 113
      TEAMModelOS/Service/Syllabus/VolumeService.cs
  50. 0 1
      TEAMModelOS/Startup.cs

+ 24 - 0
TEAMModelOS.SDK/DI/AzureServiceBus/AzureServiceBusExtensions.cs

@@ -9,6 +9,8 @@ using System.Threading.Tasks;
 using System.Linq;
 using Azure.Messaging.ServiceBus;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
+using Grpc.Extension.Common;
+using TEAMModelOS.SDK.Extension;
 
 namespace TEAMModelOS.SDK.DI
 {
@@ -101,5 +103,27 @@ namespace TEAMModelOS.SDK.DI
                 return null;
             }
         }
+
+
+        public static async Task<long> SendLeamMessage<T>(this ServiceBusClient client, string TopicName, string id, string pk, long startTime, int status, string msgId)
+        {
+            //微調代碼
+            var timer = DateTimeOffset.FromUnixTimeMilliseconds(startTime);
+            if (timer.CompareTo(DateTimeOffset.UtcNow) <= 0) return -1;
+            
+            //设定开始时间
+            Dictionary<string, object> dict = new Dictionary<string, object>() {
+                    { "name",typeof(T).Name},
+                    { "id",id},
+                    { "pk",pk},
+                    { "status",status}
+                };
+            //var msgId = "1";
+            string messageBody = $"Message {dict}";
+
+            Console.WriteLine($"Sending message: {messageBody}");
+            long SequenceNumber = await client.SendScheduleMessageAsync(TopicName, new ServiceBusMessage(dict.ToJsonString()), timer);
+            return SequenceNumber;
+        }
     }
 }

+ 0 - 17
TEAMModelOS.SDK/Extension/HttpClient/HttpClientExtension.cs

@@ -1,17 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-using TEAMModelOS.SDK.Extension.HttpClient.Implements;
-
-namespace TEAMModelOS.SDK.Extension.HttpClient
-{
-   public static class HttpClientExtension
-    {
-        public static void AddHttp(this IServiceCollection services)
-        {
-            //services.AddHttpClient();
-            //services.AddSingleton<HttpClientService>();
-            services.AddHttpClient<HttpClientSendCloud>();
-            services.AddHttpClient<HttpClientUserInfo>();
-            services.AddHttpClient<HttpClientSchool>();
-        }
-    }
-}

+ 0 - 177
TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientSchool.cs

@@ -1,177 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.Context.Constant.Common;
-using HttpClientSpace = System.Net.Http;
-
-namespace TEAMModelOS.SDK.Extension.HttpClient.Implements
-{
-    /// <summary>
-    /// 需要调整的  https://blog.yowko.com/httpclientfactory-dotnet-core-dotnet-framework/
-    /// </summary>
-    public class HttpClientSchool
-    {
-        HttpClientSpace.HttpClient client { get; }
-        public HttpClientSchool(HttpClientSpace.HttpClient _client)
-        {
-            // _client.BaseAddress =new Uri(BaseConfigModel.Configuration["HaBookAuth:AccountUrl"]);
-            _client.Timeout = new TimeSpan(0, 0, 1000);
-            _client.DefaultRequestHeaders.Add(Constants.AUTHORIZATION, BaseConfigModel.Configuration["HaBookAuth:SchoolCodeKey"]);
-            client = _client;
-        }
-
-        /// <summary>
-        /// 同步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public string HttpGet(string url)
-        {
-
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            byte[] resultBytes = client.GetByteArrayAsync(url).Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public async Task<string> HttpGetAsync(string url)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            byte[] resultBytes = await client.GetByteArrayAsync(url);
-            return Encoding.Default.GetString(resultBytes);
-        }
-
-
-        /// <summary>
-        /// 同步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public string HttpPost(string url, string postData,  string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = client.PostAsync(url, content).Result;
-            byte[] resultBytes = responseMessage.Content.ReadAsByteArrayAsync().Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, string postData, string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, List<KeyValuePair<string, string>> postData,  string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new FormUrlEncodedContent(postData);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-    }
-}

+ 0 - 175
TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientSendCloud.cs

@@ -1,175 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.Context.Constant.Common;
-using HttpClientSpace = System.Net.Http;
-
-namespace TEAMModelOS.SDK.Extension.HttpClient.Implements
-{
-    /// <summary>
-    /// 需要调整的  https://blog.yowko.com/httpclientfactory-dotnet-core-dotnet-framework/
-    /// </summary>
-    public class HttpClientSendCloud
-    {
-        HttpClientSpace.HttpClient client { get; }
-        public HttpClientSendCloud(HttpClientSpace.HttpClient _client)
-        {
-           // _client.DefaultRequestHeaders.Add(Constants.AUTHORIZATION, BaseConfigModel.Configuration["SmsSendCloud:UserInfoKey"]);
-            client = _client;
-        }
-
-        /// <summary>
-        /// 同步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public string HttpGet(string url, Dictionary<string, string> headers = null, int timeout = 0)
-        {
-
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            byte[] resultBytes = client.GetByteArrayAsync(url).Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public async Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null, int timeout = 0)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            byte[] resultBytes = await client.GetByteArrayAsync(url);
-            return Encoding.Default.GetString(resultBytes);
-        }
-
-
-        /// <summary>
-        /// 同步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public string HttpPost(string url, string postData, Dictionary<string, string> headers = null, string contentType = null, int timeout = 0, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = client.PostAsync(url, content).Result;
-            byte[] resultBytes = responseMessage.Content.ReadAsByteArrayAsync().Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, string postData, Dictionary<string, string> headers = null, string contentType = null, int timeout = 0, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, List<KeyValuePair<string, string>> postData, Dictionary<string, string> headers = null, string contentType = null, int timeout = 0, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new FormUrlEncodedContent(postData);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-    }
-}

+ 0 - 177
TEAMModelOS.SDK/Extension/HttpClient/Implements/HttpClientUserInfo.cs

@@ -1,177 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.Context.Constant.Common;
-using HttpClientSpace = System.Net.Http;
-
-namespace TEAMModelOS.SDK.Extension.HttpClient.Implements
-{
-    /// <summary>
-    /// 需要调整的  https://blog.yowko.com/httpclientfactory-dotnet-core-dotnet-framework/
-    /// </summary>
-    public class HttpClientUserInfo
-    {
-        HttpClientSpace.HttpClient client { get; }
-        public HttpClientUserInfo(HttpClientSpace.HttpClient _client)
-        {
-            // _client.BaseAddress =new Uri(BaseConfigModel.Configuration["HaBookAuth:AccountUrl"]);
-            _client.Timeout = new TimeSpan(0, 0, 1000);
-            _client.DefaultRequestHeaders.Add(Constants.AUTHORIZATION, BaseConfigModel.Configuration["HaBookAuth:UserInfoKey"]);
-            client = _client;
-        }
-
-        /// <summary>
-        /// 同步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public string HttpGet(string url)
-        {
-
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            byte[] resultBytes = client.GetByteArrayAsync(url).Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public async Task<string> HttpGetAsync(string url)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            byte[] resultBytes = await client.GetByteArrayAsync(url);
-            return Encoding.Default.GetString(resultBytes);
-        }
-
-
-        /// <summary>
-        /// 同步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public string HttpPost(string url, string postData,  string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = client.PostAsync(url, content).Result;
-            byte[] resultBytes = responseMessage.Content.ReadAsByteArrayAsync().Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, string postData, string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public async Task<string> HttpPostAsync(string url, List<KeyValuePair<string, string>> postData,  string contentType = null, Encoding encoding = null)
-        {
-            //if (headers != null)
-            //{
-            //    foreach (KeyValuePair<string, string> header in headers)
-            //    {
-            //        client.DefaultRequestHeaders.Add(header.Key, header.Value);
-            //    }
-            //}
-            //if (timeout > 0)
-            //{
-            //    client.Timeout = new TimeSpan(0, 0, timeout);
-            //}
-            HttpContent content = new FormUrlEncodedContent(postData);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-    }
-}

+ 7 - 0
TEAMModelOS.SDK/Extension/JsonExtensions.cs

@@ -33,6 +33,13 @@ namespace TEAMModelOS.SDK.Extension
             return json;
         }
 
+        public static T ToObject<T>(this string json, JsonSerializerOptions option = null)
+        {
+            var obj = JsonSerializer.Deserialize<T>(json);
+            return obj;
+        }
+
+
         public static T ToObject<T>(this JsonDocument jdoc, JsonSerializerOptions options = null)
         {
             return jdoc.RootElement.ToObject<T>(options);

+ 0 - 159
TEAMModelOS.SDK/Extension/MessagePush/Implements/SendCloudService.cs

@@ -1,159 +0,0 @@
-
-using TEAMModelOS.SDK.Extension.MessagePush.Interfaces;
-using TEAMModelOS.SDK.Extension.MessagePush.Model;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Extension.Language.Interfaces;
-
-using Microsoft.Extensions.Options;
-using TEAMModelOS.SDK.Extension.Language.Model;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.Helper.Security.Md5Hash;
-using TEAMModelOS.SDK.Helper.Network.HttpHelper;
-using TEAMModelOS.SDK.Extension.HttpClient.Implements;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.DI;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush.Implements
-{
-    public class SendCloudService : ISendCloudService
-    {
-        public SmsSendCloud smsSendCloud;
-        public ILanguageService _languageService;
-        public AzureStorageFactory _azureTableDBRepository;
-        public HttpClientSendCloud _httpClientService;
-        public SendCloudService(IOptions<SmsSendCloud> _option, ILanguageService languageService , AzureStorageFactory azureTableDBRepository , HttpClientSendCloud httpClientService )
-        {
-            _azureTableDBRepository = azureTableDBRepository;
-            _languageService = languageService;
-            smsSendCloud = _option.Value;
-            _httpClientService = httpClientService;
-        }
-
-
-        public List<Dictionary<string, string>> Languages { get; set; } = new List<Dictionary<string, string>>
-        {
-            new Dictionary<string, string> { { "name", "简体中文" }, { "code","CHS"  } },
-            new Dictionary<string, string> { { "name", "繁体中文" }, { "code","CHT" } },
-            new Dictionary<string, string> { { "name", "英语" }, { "code","EN"  } } };
-        public List<Dictionary<string, string>> BizCodes { get; set; } = new List<Dictionary<string, string>>
-        {
-            //new Dictionary<string, string> { { "name", "验证码业务" }, { "code", "Captcha" } },
-            new Dictionary<string, string> { { "name", "报名通知业务" }, { "code", "SignUp" } }
-        };
-        public async Task<List<SmsConfig>> SaveOrUpdateSmsConfig(List<SmsConfig> configs) {
-            return await _azureTableDBRepository.SaveOrUpdateAll<SmsConfig>(configs); 
-        }
-        public async Task<List<SmsConfig>> InitSmsConfig(string BizNum)
-        {
-            List<SmsConfig> smsConfigs = new List<SmsConfig>() ;
-            List<SmsConfig> SaveSmsConfigs = new List<SmsConfig>();
-            foreach (Dictionary<string, string> BizCode in BizCodes) {
-                foreach (Dictionary<string, string> Language in Languages) {
-                    Dictionary<string, object> dict = new Dictionary<string, object>
-                    {
-                        { "BizNum", BizNum },{ "BizCode", BizCode["code"] }, { "Language", Language["code"] } ,
-                    };
-                    List<SmsConfig> smsConfig = await _azureTableDBRepository.FindListByDict<SmsConfig>(dict);
-
-                    if (smsConfig.IsNotEmpty()  && smsConfig[0].RowKey != null)
-                    {
-                        smsConfigs.Add(smsConfig[0]);
-                    }
-                    else {
-                        DateTimeOffset now = DateTimeOffset.Now;
-                        SmsConfig SaveSmsConfig = new SmsConfig {
-                            RowKey = BizNum + "-" + BizCode["code"] + "-" + Language["code"],
-                            PartitionKey = BizNum,
-                            Language = Language["code"],
-                            LanguageName = Language["name"],
-                            BizCode = BizCode["code"],
-                            BizName = BizCode["name"],
-                            BizNum = BizNum,
-                            Template = null,
-                            Timestamp= now
-                        };
-                        SaveSmsConfigs.Add(SaveSmsConfig);
-                        smsConfigs.Add(SaveSmsConfig);
-                    }
-                }
-            }
-            if (SaveSmsConfigs.Count > 0) {
-               await _azureTableDBRepository.SaveOrUpdateAll<SmsConfig>(SaveSmsConfigs);
-            }
-            return smsConfigs; 
-        }
-        /// <summary>
-        /// https://sendcloud.kf5.com/posts/view/1074678/
-        /// </summary>
-        /// <param name="BizCode"></param>
-        /// <param name="CountryCode"></param>
-        /// <param name="phone"></param>
-        /// <param name="vars"></param>
-        /// <returns></returns>
-        public async Task<SendCloudResponse> SendSmsByBizCode(string  BizNum  , string BizCode, int CountryCode, string phone, Dictionary<string, string> vars = null)
-        {
-            SmsCountryCode code = null;
-            bool flag = _languageService.GetSmsLanguage().TryGetValue(CountryCode + "", out code);
-            string SmsLang = "EN";
-            int templateId = 0;
-            if (flag)
-            {
-                SmsLang = code.SmsLang;
-            }
-            Dictionary<string, object> dict = new Dictionary<string, object>
-            {
-                { "BizNum", BizNum },{ "BizCode", BizCode }, { "Language", SmsLang } ,
-            };
-            List<SmsConfig> smsConfig = await _azureTableDBRepository.FindListByDict<SmsConfig>(dict);
-
-            if (smsConfig.IsNotEmpty() && smsConfig[0].RowKey != null)
-            {
-             
-                //默认调用英文,不管是否包含,发送时会去处理相关信息
-                int.TryParse(smsConfig[0].Template ,out templateId);
-            }
-            //else {
-            //    throw new BizException("");
-            //   //  templateId = smsSendCloud.SmsCode[code.SmsLang];
-            //}
-            int msgType = 0;
-            if (CountryCode != 86)
-            {
-                msgType = 2;
-                return await SendSms(templateId, "00" + CountryCode + phone, vars, msgType);
-            }
-            else
-            {
-                return await SendSms(templateId, phone, vars, msgType);
-            }
-            
-        }
-        public async Task<SendCloudResponse> SendSms(int templateId, string phone, Dictionary<string, string> vars = null, int msgType = 0)
-        {
-            List<KeyValuePair<string, string>> paramList = new List<KeyValuePair<string, string>>
-            {
-                new KeyValuePair<string, string>("msgType", msgType+""),//0表示短信, 1表示彩信,2表示国际短信, 默认值为0
-                new KeyValuePair<string, string>("phone", phone),
-                new KeyValuePair<string, string>("smsUser", smsSendCloud.SmsUser),
-                new KeyValuePair<string, string>("templateId", templateId+""),
-            };
-            if (vars != null)
-            {
-                paramList.Add(new KeyValuePair<string, string>("vars", vars.ToJsonString()));
-            }
-            var param_str = "";
-            foreach (var param in paramList)
-            {
-                param_str += param.Key.ToString() + "=" + param.Value.ToString() + "&";
-            }
-            string sign_str = smsSendCloud.SmsKey + "&" + param_str + smsSendCloud.SmsKey;
-            string sign = Md5Hash.Encrypt(sign_str);
-            paramList.Add(new KeyValuePair<string, string>("signature", sign));
-            string result = await _httpClientService.HttpPostAsync(smsSendCloud.SmsUrl, paramList);
-            return JsonExtensions.ToObject<SendCloudResponse>(result);
-
-        }
-    }
-}

+ 0 - 42
TEAMModelOS.SDK/Extension/MessagePush/Interfaces/ISendCloudService.cs

@@ -1,42 +0,0 @@
-using TEAMModelOS.SDK.Extension.MessagePush.Model;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush.Interfaces
-{
-    public interface ISendCloudService
-    {
-        /// <summary>
-        /// 发送普通文字短信
-        /// </summary>
-        /// <param name="templateId">模板ID</param>
-        /// <param name="msgType">消息类型0表示短信, 1表示彩信,2表示国际短信, 默认值为0 </param>
-        /// <param name="phone">信人手机号,多个手机号用逗号,分隔,每次调用最大支持2000,更多地址建议使用联系人列表功能</param>
-        /// <param name="vars">替换变量的json串 ,含有特殊字符 请 urlencode ,{"name": "lucy"} or {"%money%": "100"}</param>
-        /// <returns></returns>
-         Task<SendCloudResponse> SendSms(int templateId, string phone, Dictionary<string, string> vars =null , int msgType = 0);
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="BizCode">业务Code</param>
-        /// <param name="CountryCode">国家或地区编码</param>
-        /// <param name="phone">手机号</param>
-        /// <param name="vars">替换变量的json串 ,含有特殊字符 请 urlencode ,{"name": "lucy"} or {"%money%": "100"}</param>
-        /// <returns></returns>
-        Task<SendCloudResponse> SendSmsByBizCode(string BizNum  , string BizCode, int CountryCode, string phone, Dictionary<string, string> vars = null);
-        /// <summary>
-        /// 根据业务流水号初始化短信配置
-        /// </summary>
-        /// <param name="BizNum"></param>
-        /// <returns></returns>
-        Task<List<SmsConfig>> InitSmsConfig(string BizNum);
-        /// <summary>
-        /// 更新或保存
-        /// </summary>
-        /// <param name="configs"></param>
-        /// <returns></returns>
-        Task<List<SmsConfig>> SaveOrUpdateSmsConfig(List<SmsConfig> configs);
-    }
-}

+ 0 - 20
TEAMModelOS.SDK/Extension/MessagePush/MessagePushExtension.cs

@@ -1,20 +0,0 @@
-using TEAMModelOS.SDK.Extension.MessagePush.Implements;
-using TEAMModelOS.SDK.Extension.MessagePush.Interfaces;
-using TEAMModelOS.SDK.Extension.MessagePush.Model;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush
-{
-    public static class MessagePushExtension
-    {
-        public static void SendCloud(this IServiceCollection services, IConfigurationSection configuration)
-        {
-            services.Configure<SmsSendCloud>(configuration);
-            services.AddScoped<ISendCloudService, SendCloudService>();
-        }
-    }
-}

+ 0 - 30
TEAMModelOS.SDK/Extension/MessagePush/Model/SendCloudResponse.cs

@@ -1,30 +0,0 @@
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush.Model
-{
-    
-    public  class SendCloudResponse
-    {
-        public string message { get; set; }
-        public Info info { get; set; }
-        public bool result { get; set; }
-        public int  statusCode { get; set; }
-    }
-    
-    public class Info
-    {
-        public int successCount { get; set; }
-        public string[] smsIds { get; set; }
-        public int failedCount { get; set; }
-        public Item[] items { get; set; }
-    }
-    
-    public class Item
-    {
-        public string phone { get; set; }
-        public string message { get; set; }
-    }
-}

+ 0 - 36
TEAMModelOS.SDK/Extension/MessagePush/Model/SmsConfig.cs

@@ -1,36 +0,0 @@
-
-using Microsoft.Azure.Cosmos.Table;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush.Model
-{
-    /// <summary>
-    /// 短信配置
-    /// </summary>
-    public class SmsConfig : TableEntity
-    {
-        /// <summary>
-        /// 语言
-        /// </summary>
-        public string Language { get; set; }
-        /// <summary>
-        /// 语言名称
-        /// </summary>
-        public string LanguageName { get; set; }
-        /// <summary>
-        /// 业务code
-        /// </summary>
-        public string BizCode { get; set; }
-        /// <summary>
-        /// 业务名称
-        /// </summary>
-        public string BizName { get; set; }
-        /// <summary>
-        /// 模板ID
-        /// </summary>
-        public string Template { get; set; }
-        /// <summary>
-        /// 业务流水号
-        /// </summary>
-        public string BizNum { get; set; }
-    }
-}

+ 0 - 12
TEAMModelOS.SDK/Extension/MessagePush/Model/SmsSendCloud.cs

@@ -1,12 +0,0 @@
-using System.Collections.Generic;
-
-namespace TEAMModelOS.SDK.Extension.MessagePush.Model
-{
-    public class SmsSendCloud
-    {
-        public string SmsUrl { get; set; }
-        public string SmsUser { get; set; }
-        public string SmsKey { get; set; }
-       
-    }
-}

+ 0 - 23
TEAMModelOS.SDK/Extension/SnowFlake/DisposableAction.cs

@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Extension.SnowFlake
-{
-    public class DisposableAction : IDisposable
-    {
-        readonly Action _action;
-
-        public DisposableAction(Action action)
-        {
-            if (action == null)
-                throw new ArgumentNullException("action");
-            _action = action;
-        }
-
-        public void Dispose()
-        {
-            _action();
-        }
-    }
-}

+ 0 - 139
TEAMModelOS.SDK/Extension/SnowFlake/IdWorker.cs

@@ -1,139 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Extension.SnowFlake
-{
-    public class IdWorker
-    {
-        //基准时间
-        public const long Twepoch = 1288834974657L;
-        //机器标识位数
-        const int WorkerIdBits = 5;
-        //数据标志位数
-        const int DatacenterIdBits = 5;
-        //序列号识位数
-        const int SequenceBits = 12;
-        //机器ID最大值
-        const long MaxWorkerId = -1L ^ (-1L << WorkerIdBits);
-        //数据标志ID最大值
-        const long MaxDatacenterId = -1L ^ (-1L << DatacenterIdBits);
-        //序列号ID最大值
-        private const long SequenceMask = -1L ^ (-1L << SequenceBits);
-        //机器ID偏左移12位
-        private const int WorkerIdShift = SequenceBits;
-        //数据ID偏左移17位
-        private const int DatacenterIdShift = SequenceBits + WorkerIdBits;
-        //时间毫秒左移22位
-        public const int TimestampLeftShift = SequenceBits + WorkerIdBits + DatacenterIdBits;
-
-        private long _sequence = 0L;
-        private long _lastTimestamp = -1L;
-
-        private long WorkerId { get;  set; }
-        private long DatacenterId { get;  set; }
-        public long Sequence
-        {
-            get { return _sequence; }
-            internal set { _sequence = value; }
-        }
-        private IdWorker() { }
-        private IdWorker(long workerId, long datacenterId, long sequence = 0L)
-        {
-            // 如果超出范围就抛出异常
-            if (workerId > MaxWorkerId || workerId < 0)
-            {
-                throw new ArgumentException(string.Format("worker Id 必须大于0,且不能大于MaxWorkerId: {0}", MaxWorkerId));
-            }
-
-            if (datacenterId > MaxDatacenterId || datacenterId < 0)
-            {
-                throw new ArgumentException(string.Format("region Id 必须大于0,且不能大于MaxWorkerId: {0}", MaxDatacenterId));
-            }
-
-            //先检验再赋值
-            WorkerId = workerId;
-            DatacenterId = datacenterId;
-            _sequence = sequence;
-        }
-
-        readonly object _lock = new Object();
-        public virtual long NextId()
-        {
-            lock (_lock)
-            {
-                var timestamp = TimeGen();
-                if (timestamp < _lastTimestamp)
-                {
-                    throw new Exception(string.Format("时间戳必须大于上一次生成ID的时间戳.  拒绝为{0}毫秒生成id", _lastTimestamp - timestamp));
-                }
-
-                //如果上次生成时间和当前时间相同,在同一毫秒内
-                if (_lastTimestamp == timestamp)
-                {
-                    //sequence自增,和sequenceMask相与一下,去掉高位
-                    _sequence = (_sequence + 1) & SequenceMask;
-                    //判断是否溢出,也就是每毫秒内超过1024,当为1024时,与sequenceMask相与,sequence就等于0
-                    if (_sequence == 0)
-                    {
-                        //等待到下一毫秒
-                        timestamp = TilNextMillis(_lastTimestamp);
-                    }
-                }
-                else
-                {
-                    //如果和上次生成时间不同,重置sequence,就是下一毫秒开始,sequence计数重新从0开始累加,
-                    //为了保证尾数随机性更大一些,最后一位可以设置一个随机数
-                    _sequence = 0;//new Random().Next(10);
-                }
-
-                _lastTimestamp = timestamp;
-                return ((timestamp - Twepoch) << TimestampLeftShift) | (DatacenterId << DatacenterIdShift) | (WorkerId << WorkerIdShift) | _sequence;
-            }
-        }
-
-        // 防止产生的时间比之前的时间还要小(由于NTP回拨等问题),保持增量的趋势.
-        protected virtual long TilNextMillis(long lastTimestamp)
-        {
-            var timestamp = TimeGen();
-            while (timestamp <= lastTimestamp)
-            {
-                timestamp = TimeGen();
-            }
-            return timestamp;
-        }
-
-        // 获取当前的时间戳
-        protected virtual long TimeGen()
-        {
-            return TimeExtensions.CurrentTimeMillis();
-        }
-
-        public static IdWorker getInstance()
-        {
-            return SingletonInstance.singleton;
-        }
-
-        public static class SingletonInstance
-        {
-           public static IdWorker singleton = new IdWorker(0, 1);
-        }
-        public  static List<long> getIdsByCount(int count)
-        {
-            if (count > 0)
-            {
-                List<long> ids = new List<long>();
-                IdWorker idWorker = IdWorker.getInstance();
-                for (int i = 0; i < count; i++)
-                {
-                    ids.Add(idWorker.NextId());
-                }
-                return ids;
-            }
-            else
-            {
-                return null;
-            }
-        }
-    }
-}

+ 0 - 42
TEAMModelOS.SDK/Extension/SnowFlake/TimeExtensions.cs

@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Extension.SnowFlake
-{
-    public static class TimeExtensions
-    {
-        public static Func<long> currentTimeFunc = InternalCurrentTimeMillis;
-
-        public static long CurrentTimeMillis()
-        {
-            return currentTimeFunc();
-        }
-
-        public static IDisposable StubCurrentTime(Func<long> func)
-        {
-            currentTimeFunc = func;
-            return new DisposableAction(() =>
-            {
-                currentTimeFunc = InternalCurrentTimeMillis;
-            });
-        }
-
-        public static IDisposable StubCurrentTime(long millis)
-        {
-            currentTimeFunc = () => millis;
-            return new DisposableAction(() =>
-            {
-                currentTimeFunc = InternalCurrentTimeMillis;
-            });
-        }
-
-        private static readonly DateTime Jan1st1970 = new DateTime
-           (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
-        private static long InternalCurrentTimeMillis()
-        {
-            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
-        }
-    }
-}

+ 0 - 168
TEAMModelOS.SDK/Helper/Network/HttpHelper/HttpHelper.cs

@@ -1,168 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TEAMModelOS.SDK.Helper.Network.HttpHelper
-{
-    public class HttpHelper
-    {
-        /// <summary>
-        /// 同步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public static string HttpGet(string url, Dictionary<string, string> headers = null, int timeout = 0)
-        {
-            HttpClient client = new HttpClient();
-            if (headers != null)
-            {
-                foreach (KeyValuePair<string, string> header in headers)
-                {
-                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
-                }
-            }
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            Byte[] resultBytes = client.GetByteArrayAsync(url).Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步GET请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="headers"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <returns></returns>
-        public static async Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null, int timeout = 0)
-        {
-            HttpClient client = new HttpClient();
-            if (headers != null)
-            {
-                foreach (KeyValuePair<string, string> header in headers)
-                {
-                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
-                }
-            }
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            Byte[] resultBytes = await client.GetByteArrayAsync(url);
-            return Encoding.Default.GetString(resultBytes);
-        }
-
-
-        /// <summary>
-        /// 同步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public static string HttpPost(string url, string postData, Dictionary<string, string> headers = null, string contentType = "application/json", int timeout = 1000, Encoding encoding = null)
-        {
-            HttpClient client = new HttpClient();
-            if (headers != null)
-            {
-                foreach (KeyValuePair<string, string> header in headers)
-                {
-                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
-                }
-            }
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = client.PostAsync(url, content).Result;
-            Byte[] resultBytes = responseMessage.Content.ReadAsByteArrayAsync().Result;
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public static async Task<string> HttpPostAsync(string url, string postData, Dictionary<string, string> headers = null, string contentType = "application/json", int timeout = 1000, Encoding encoding = null)
-        {
-            HttpClient client = new HttpClient();
-            if (headers != null)
-            {
-                foreach (KeyValuePair<string, string> header in headers)
-                {
-                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
-                }
-            }
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new StringContent(postData ?? "", encoding ?? Encoding.UTF8);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-            Byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-        }
-
-        /// <summary>
-        /// 异步POST请求
-        /// </summary>
-        /// <param name="url"></param>
-        /// <param name="postData"></param>
-        /// <param name="headers"></param>
-        /// <param name="contentType"></param>
-        /// <param name="timeout">请求响应超时时间,单位/s(默认100秒)</param>
-        /// <param name="encoding">默认UTF8</param>
-        /// <returns></returns>
-        public static async Task<string> HttpPostAsync(string url, List<KeyValuePair<string, string>> postData, Dictionary<string, string> headers = null, string contentType = null, int timeout = 0, Encoding encoding = null)
-        {
-            HttpClient client = new HttpClient();
-            if (headers != null)
-            {
-                foreach (KeyValuePair<string, string> header in headers)
-                {
-                    client.DefaultRequestHeaders.Add(header.Key, header.Value);
-                }
-            }
-            if (timeout > 0)
-            {
-                client.Timeout = new TimeSpan(0, 0, timeout);
-            }
-            HttpContent content = new FormUrlEncodedContent(postData);
-            if (contentType != null)
-            {
-                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
-            }
-            HttpResponseMessage responseMessage = await client.PostAsync(url, content);
-
-            Byte[] resultBytes = await responseMessage.Content.ReadAsByteArrayAsync();
-            return Encoding.UTF8.GetString(resultBytes);
-
-        }
-    }
-}
-

+ 2 - 1
TEAMModelOS.SDK/Module/Grpc/AspNetCore/Interceptors/Server/JaegerTracingInterceptor.cs

@@ -6,6 +6,7 @@ using System.Linq;
 using Jaeger;
 using Grpc.Extension.Common;
 using Grpc.Extension.Abstract;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.Interceptors
 {
@@ -17,7 +18,7 @@ namespace Grpc.Extension.Interceptors
         public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>(TRequest request, ServerCallContext context, UnaryServerMethod<TRequest, TResponse> continuation)
         {
             var header = context.RequestHeaders.Where(p => p.Key == Consts.OpenTraceId).FirstOrDefault();
-            var spanBuilder = GlobalTracer.Instance.BuildSpan(context.Method).WithTag("Request", request?.ToJson() ?? "");
+            var spanBuilder = GlobalTracer.Instance.BuildSpan(context.Method).WithTag("Request", request?.ToJsonString() ?? "");
             if(header != null)
             {
                 var spanContext = SpanContext.ContextFromString(header.Value);

+ 6 - 5
TEAMModelOS.SDK/Module/Grpc/AspNetCore/Interceptors/Server/MonitorInterceptor.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using Grpc.Core;
 using System.Linq;
@@ -9,6 +9,7 @@ using Grpc.Extension.Abstract;
 using Grpc.Extension.Abstract.Model;
 using Grpc.Extension.Common.Internal;
 using Grpc.Extension.BaseService.Model;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.Interceptors
 {
@@ -37,7 +38,7 @@ namespace Grpc.Extension.Interceptors
             };
             if (request is TRequest)
             {
-                model.RequestData = request?.ToJson();
+                model.RequestData = request?.ToJsonString();
             }
             else if(request is IAsyncStreamReader<TRequest>)
             {
@@ -46,7 +47,7 @@ namespace Grpc.Extension.Interceptors
                 //    requests.Add(req);
                 //    return Task.CompletedTask;
                 //});
-                model.RequestData = requests?.ToJson();
+                model.RequestData = requests?.ToJsonString();
             }
             try
             {
@@ -55,7 +56,7 @@ namespace Grpc.Extension.Interceptors
                     var result = await (continuation.DynamicInvoke(request, context) as Task<TResponse>);
                     model.Status = "ok";
 
-                    model.ResponseData = MonitorManager.Instance.SaveResponseMethodEnable(context.Method) ? result?.ToJson() : ServerConsts.NotResponseMsg;
+                    model.ResponseData = MonitorManager.Instance.SaveResponseMethodEnable(context.Method) ? result?.ToJsonString() : ServerConsts.NotResponseMsg;
 
                     return result;
                 }
@@ -87,7 +88,7 @@ namespace Grpc.Extension.Interceptors
             {
                 ServerCallContextAccessor.Current = null;
                 model.ResponseTime = DateTime.Now;
-                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJson());
+                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJsonString());
             }
         }
 

+ 3 - 2
TEAMModelOS.SDK/Module/Grpc/AspNetCore/Internal/RegisterServiceHosted.cs

@@ -1,4 +1,4 @@
-using Grpc.Extension.Abstract.Discovery;
+using Grpc.Extension.Abstract.Discovery;
 using Grpc.Extension.BaseService.Model;
 using Microsoft.Extensions.Hosting;
 using System;
@@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Logging;
 using Microsoft.AspNetCore.Hosting.Server.Features;
 using System.Linq;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.AspNetCore.Internal
 {
@@ -61,7 +62,7 @@ namespace Grpc.Extension.AspNetCore.Internal
             Console.WriteLine($"use {_serviceRegister.GetType().Name} register");
             Console.WriteLine($"    DiscoveryUrl:{_grpcServerOptions.DiscoveryUrl}");
             Console.WriteLine($"    ServiceName:{_grpcServerOptions.DiscoveryServiceName}");
-            var registerModel = _grpcServerOptions.ToJson().FromJson<ServiceRegisterModel>();
+            var registerModel = _grpcServerOptions.ToJsonString().ToObject<ServiceRegisterModel>();
             registerModel.ServiceIp = MetaModel.Ip;
             registerModel.ServicePort = MetaModel.Port;
             _serviceRegister.RegisterService(registerModel);

+ 4 - 3
TEAMModelOS.SDK/Module/Grpc/Client/Interceptors/Client/ClientJaegerTracingInterceptor.cs

@@ -1,4 +1,4 @@
-using Grpc.Core;
+using Grpc.Core;
 using Grpc.Core.Interceptors;
 using OpenTracing.Util;
 using System;
@@ -6,6 +6,7 @@ using Grpc.Extension.Common;
 using System.Linq;
 using OpenTracing;
 using Grpc.Extension.Abstract;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.Client.Interceptors
 {
@@ -15,7 +16,7 @@ namespace Grpc.Extension.Client.Interceptors
         {
             var tracer = GlobalTracer.Instance;
             var method = $"{context.Method.ServiceName}/{context.Method.Name}";
-            var span = tracer.BuildSpan(method).AsChildOf(tracer.ActiveSpan).WithTag("Request", request?.ToJson() ?? "").Start();
+            var span = tracer.BuildSpan(method).AsChildOf(tracer.ActiveSpan).WithTag("Request", request?.ToJsonString() ?? "").Start();
             context = SetJaegerHeader(context, span);
             try
             {
@@ -36,7 +37,7 @@ namespace Grpc.Extension.Client.Interceptors
         {
             var tracer = GlobalTracer.Instance;
             var method = $"{context.Method.ServiceName}/{context.Method.Name}";
-            var span = tracer.BuildSpan(method).AsChildOf(tracer.ActiveSpan).WithTag("Request", request?.ToJson() ?? "").Start();
+            var span = tracer.BuildSpan(method).AsChildOf(tracer.ActiveSpan).WithTag("Request", request?.ToJsonString() ?? "").Start();
             context = SetJaegerHeader(context, span);
             try
             {

+ 6 - 5
TEAMModelOS.SDK/Module/Grpc/Client/Interceptors/Client/ClientMonitorInterceptor.cs

@@ -1,4 +1,4 @@
-using Grpc.Core;
+using Grpc.Core;
 using Grpc.Core.Interceptors;
 using Grpc.Extension.Abstract;
 using Grpc.Extension.Abstract.Model;
@@ -6,6 +6,7 @@ using Grpc.Extension.Common;
 using Grpc.Extension.Common.Internal;
 using System;
 using System.Linq;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.Client.Interceptors
 {
@@ -18,7 +19,7 @@ namespace Grpc.Extension.Client.Interceptors
             {
                 ClientIp = context.Host,
                 RequestUrl = context.Method.FullName,
-                RequestData = request?.ToJson(),
+                RequestData = request?.ToJsonString(),
                 RequestHeaders = context.Options.Headers.ToDictionary(p => p.Key, p => p.Value),
                 TraceId = context.Options.Headers?.Where(p => p.Key == Consts.TraceId).FirstOrDefault()?.Value
             };
@@ -42,7 +43,7 @@ namespace Grpc.Extension.Client.Interceptors
             }
             finally
             {
-                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJson(), LogType.ClientLog);
+                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJsonString(), LogType.ClientLog);
             }
         }
 
@@ -53,7 +54,7 @@ namespace Grpc.Extension.Client.Interceptors
             {
                 ClientIp = context.Host,
                 RequestUrl = context.Method.FullName,
-                RequestData = request?.ToJson(),
+                RequestData = request?.ToJsonString(),
                 RequestHeaders = context.Options.Headers.ToDictionary(p => p.Key, p => p.Value),
                 TraceId = context.Options.Headers?.Where(p => p.Key == Consts.TraceId).FirstOrDefault()?.Value
             };
@@ -75,7 +76,7 @@ namespace Grpc.Extension.Client.Interceptors
             }
             finally
             {
-                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJson(), LogType.ClientLog);
+                LoggerAccessor.Instance.OnLoggerMonitor(model.ToJsonString(), LogType.ClientLog);
             }
         }
 

+ 25 - 18
TEAMModelOS.SDK/Module/Grpc/Common/BaseService/MetaService.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Threading.Tasks;
@@ -6,6 +6,8 @@ using Grpc.Core;
 using Grpc.Extension.BaseService.Model;
 using System.Linq;
 using Grpc.Extension.Common;
+using TEAMModelOS.SDK.Extension;
+using System.Text.Json;
 
 namespace Grpc.Extension.BaseService
 {
@@ -56,28 +58,33 @@ namespace Grpc.Extension.BaseService
                 }
                 return new MethodInfoRS
                 {
-                    RequestJson = Activator.CreateInstance(methodInfo.RequestType).FillProp().ToJson(ignoreNullValue: false, isIndented: true),
-                    ResponseJson = Activator.CreateInstance(methodInfo.ResponseType).FillProp().ToJson(ignoreNullValue: false, isIndented: true)
+                    RequestJson = Activator.CreateInstance(methodInfo.RequestType).FillProp().ToJsonString(new JsonSerializerOptions() { IgnoreNullValues = false }),
+                    ResponseJson = Activator.CreateInstance(methodInfo.ResponseType).FillProp().ToJsonString(new JsonSerializerOptions() { IgnoreNullValues = false })
                 };
             });
         }
+
+        //TODO 此段代碼後續檢視
+
         /// <summary>
         /// 服务方法调用
         /// </summary>
-        public Task<MethodInvokeRS> MethodInvoke(MethodInvokeRQ rq, ServerCallContext context)
-        {
-            return Task.Run(() =>
-            {
-                var methodInfo = MetaModel.Methods.FirstOrDefault(q => q.FullName == rq.FullName?.Trim());
-                if (methodInfo == null)
-                {
-                    return new MethodInvokeRS() { ResponseJson = $"not fount method by fullname:{rq.FullName}" };
-                }
-                var task = (Task)methodInfo.Handler.DynamicInvoke(rq.RequestJson?.Trim().FromJson(methodInfo.RequestType), context);
-                task.Wait();
-                dynamic result = task;
-                return new MethodInvokeRS { ResponseJson = ((object)result.Result).ToJson(ignoreNullValue: false, isIndented: true) };
-            });
-        }
+        //public Task<MethodInvokeRS> MethodInvoke(MethodInvokeRQ rq, ServerCallContext context)
+        //{
+           
+
+        //    //return Task.Run(() =>
+        //    //{
+        //    //    var methodInfo = MetaModel.Methods.FirstOrDefault(q => q.FullName == rq.FullName?.Trim());
+        //    //    if (methodInfo == null)
+        //    //    {
+        //    //        return new MethodInvokeRS() { ResponseJson = $"not fount method by fullname:{rq.FullName}" };
+        //    //    }
+        //    //    var task = (Task)methodInfo.Handler.DynamicInvoke(rq.RequestJson?.Trim().FromJson(methodInfo.RequestType), context);
+        //    //    task.Wait();
+        //    //    dynamic result = task;
+        //    //    return new MethodInvokeRS { ResponseJson = ((object)result.Result).ToJson(ignoreNullValue: false, isIndented: true) };
+        //    //});
+        //}
     }
 }

+ 24 - 19
TEAMModelOS.SDK/Module/Grpc/Common/BaseService/MetaServiceAspnetCore.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Threading.Tasks;
@@ -7,6 +7,8 @@ using Grpc.Extension.BaseService.Model;
 using System.Linq;
 using Grpc.Extension.Common;
 using Microsoft.Extensions.DependencyInjection;
+using TEAMModelOS.SDK.Extension;
+using System.Text.Json;
 
 namespace Grpc.Extension.BaseService
 {
@@ -63,29 +65,32 @@ namespace Grpc.Extension.BaseService
                 }
                 return new MethodInfoRS
                 {
-                    RequestJson = Activator.CreateInstance(methodInfo.RequestType).FillProp().ToJson(ignoreNullValue: false, isIndented: true),
-                    ResponseJson = Activator.CreateInstance(methodInfo.ResponseType).FillProp().ToJson(ignoreNullValue: false, isIndented: true)
+                    RequestJson = Activator.CreateInstance(methodInfo.RequestType).FillProp().ToJsonString(new JsonSerializerOptions() { IgnoreNullValues = false }),
+                    ResponseJson = Activator.CreateInstance(methodInfo.ResponseType).FillProp().ToJsonString(new JsonSerializerOptions() { IgnoreNullValues = false })
                 };
             });
         }
+
+        //TODO 此段代碼後續檢視(重複方法)
+
         /// <summary>
         /// 服务方法调用
         /// </summary>
-        public Task<MethodInvokeRS> MethodInvoke(MethodInvokeRQ rq, ServerCallContext context)
-        {
-            return Task.Run(() =>
-            {
-                var methodInfo = MetaModel.Methods.FirstOrDefault(q => q.FullName == rq.FullName?.Trim());
-                if (methodInfo == null)
-                {
-                    return new MethodInvokeRS() { ResponseJson = $"not fount method by fullname:{rq.FullName}" };
-                }
-                var service = ActivatorUtilities.CreateInstance(_serviceProvider, methodInfo.ServiceType);
-                var task = (Task)methodInfo.Handler.DynamicInvoke(service, rq.RequestJson?.Trim().FromJson(methodInfo.RequestType), context);
-                task.Wait();
-                dynamic result = task;
-                return new MethodInvokeRS { ResponseJson = ((object)result.Result).ToJson(ignoreNullValue: false, isIndented: true) };
-            });
-        }
+        //public Task<MethodInvokeRS> MethodInvoke(MethodInvokeRQ rq, ServerCallContext context)
+        //{
+        //    return Task.Run(() =>
+        //    {
+        //        var methodInfo = MetaModel.Methods.FirstOrDefault(q => q.FullName == rq.FullName?.Trim());
+        //        if (methodInfo == null)
+        //        {
+        //            return new MethodInvokeRS() { ResponseJson = $"not fount method by fullname:{rq.FullName}" };
+        //        }
+        //        var service = ActivatorUtilities.CreateInstance(_serviceProvider, methodInfo.ServiceType);
+        //        var task = (Task)methodInfo.Handler.DynamicInvoke(service, rq.RequestJson?.Trim().FromJson(methodInfo.RequestType), context);
+        //        task.Wait();
+        //        dynamic result = task;
+        //        return new MethodInvokeRS { ResponseJson = ((object)result.Result).ToJsonString(new JsonSerializerOptions() { IgnoreNullValues = false });
+        //    });
+        //}
     }
 }

+ 3 - 2
TEAMModelOS.SDK/Module/Grpc/Common/CommonError.cs

@@ -1,6 +1,7 @@
-using Grpc.Core;
+using Grpc.Core;
 using System;
 using Grpc.Extension.Abstract.Model;
+using TEAMModelOS.SDK.Extension;
 
 namespace Grpc.Extension.Common
 {
@@ -30,7 +31,7 @@ namespace Grpc.Extension.Common
                 Internal = ex.GetFlatException(),
                 Status = (int)StatusCode.Internal
             };
-            var rpcEx = new RpcException(new Status(StatusCode.Internal, errModel.ToJson()));
+            var rpcEx = new RpcException(new Status(StatusCode.Internal, errModel.ToJsonString()));
             rpcEx.Data.Add("ErrorCode", errModel.Code);
             return rpcEx;
         }

+ 0 - 126
TEAMModelOS.SDK/Module/Grpc/Common/JsonSerialization.cs

@@ -1,126 +0,0 @@
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace Grpc.Extension.Common
-{
-    /// <summary>
-    /// JsonSerialization
-    /// </summary>
-    public static class JsonSerialization
-    {
-        static JsonSerializerSettings settings = new JsonSerializerSettings()
-        {
-            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-            PreserveReferencesHandling = PreserveReferencesHandling.Objects
-        };
-
-        /// <summary>
-        /// 使用json序列化为字符串
-        /// </summary>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制,如:"\/Date(1439335800000+0800)\/"</param>
-        /// <param name="ignoreNullValue"></param>
-        /// <param name="isIndented"></param>
-        /// <returns></returns>
-        public static string ToJson(this object input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true, bool isIndented = false)
-        {
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            //no format
-            var format = isIndented ? Newtonsoft.Json.Formatting.Indented : Formatting.None;
-            var json = JsonConvert.SerializeObject(input, format, settings);
-            return json;
-        }
-
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <param name="ignoreNullValue"></param>
-        /// <returns></returns>
-        public static T TryFromJson<T>(this string input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            try
-            {
-                return input.FromJson<T>(dateTimeFormat, ignoreNullValue);
-            }
-            catch
-            {
-                return default(T);
-            }
-        }
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="input"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <param name="ignoreNullValue"></param>
-        /// <returns></returns>
-        public static T FromJson<T>(this string input, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            var settings = new JsonSerializerSettings()
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
-            };
-            settings.NullValueHandling = ignoreNullValue ? Newtonsoft.Json.NullValueHandling.Ignore : NullValueHandling.Include;
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            return JsonConvert.DeserializeObject<T>(input, settings);
-        }
-        /// <summary>
-        /// 从序列化字符串里反序列化
-        /// </summary>
-        /// <param name="input"></param>
-        /// <param name="type"></param>
-        /// <param name="dateTimeFormat">默认null,即使用json.net默认的序列化机制</param>
-        /// <param name="ignoreNullValue"></param>
-        /// <returns></returns>
-        public static object FromJson(this string input, Type type, string dateTimeFormat = "yyyy-MM-dd HH:mm:ss", bool ignoreNullValue = true)
-        {
-            var settings = new JsonSerializerSettings()
-            {
-                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
-                PreserveReferencesHandling = PreserveReferencesHandling.Objects,
-            };
-            if (ignoreNullValue)
-            {
-                settings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
-            }
-
-            if (!string.IsNullOrWhiteSpace(dateTimeFormat))
-            {
-                var jsonConverter = new List<JsonConverter>()
-                {
-                    new Newtonsoft.Json.Converters.IsoDateTimeConverter(){ DateTimeFormat = dateTimeFormat }//如: "yyyy-MM-dd HH:mm:ss"
-                };
-                settings.Converters = jsonConverter;
-            }
-
-            return JsonConvert.DeserializeObject(input, type, settings);
-        }
-    }
-}

+ 0 - 1
TEAMModelOS.SDK/Module/OpenXmlTool/WmlToHtmlConverter.cs

@@ -16,7 +16,6 @@ using System.Xml.Xsl;
 using DocumentFormat.OpenXml.Packaging;
 using TEAMModelOS.SDK.Context.Configuration;
 using TEAMModelOS.SDK.Context.Constant;
-using TEAMModelOS.SDK.Extension.SnowFlake;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using TEAMModelOS.SDK.Module.AzureBlob.Container;
 

+ 1 - 1
TEAMModelOS/ClientApp/src/components/public/frontEndMain/Index.vue

@@ -74,7 +74,7 @@
     </div>
 
     <div class="login-footer">
-      <h5 style="padding: 7px;color: #515a6e;">&copy; HABOOL Group 2019000</h5>
+      <h5 style="padding: 7px;color: #515a6e;">&copy; HABOOK Group 20190000000</h5>
       <span v-if="srvAdr == 'China'" style="padding: 0 5px;">|</span>
       <a v-if="srvAdr == 'China'" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=51010402000615" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"><img src="@/assets/icon/icon_record.png" style="float:left;"/><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#515a6e;">川公网安备 51010402000615</p></a>
     </div>

+ 94 - 72
TEAMModelOS/Controllers/Analysis/AchievementController.cs

@@ -8,14 +8,14 @@ using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using TEAMModelOS.SDK.DI;
- 
+
 
 using System.Diagnostics;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.SDK.Helper.Network.HttpHelper;
+
 using TEAMModelOS.Service.Analysis.Implements;
 using OpenXmlPowerTools;
 using System.Text.Json;
@@ -29,13 +29,13 @@ namespace TEAMModelOS.Controllers.Analysis
     {
 
         private readonly AzureCosmosFactory azureCosmosDBRepository;
-         
+
         private const string CacheCosmosPrefix = "Analysis:";
         private const int timeoutSeconds = 3600;
-        public AchievementController( AzureCosmosFactory _azureCosmosDBRepository)
+        public AchievementController(AzureCosmosFactory _azureCosmosDBRepository)
         {
             azureCosmosDBRepository = _azureCosmosDBRepository;
-           
+
 
         }
         [HttpPost("Achievement")]
@@ -92,7 +92,8 @@ namespace TEAMModelOS.Controllers.Analysis
 
             }
         }
-        public async Task<Dictionary<string, dynamic>> FindExamRedis(Dictionary<string, object> dict, string method) {
+        public async Task<Dictionary<string, dynamic>> FindExamRedis(Dictionary<string, object> dict, string method)
+        {
 
             ResponseBuilder builder = ResponseBuilder.custom();
             //Console.WriteLine(DateTimeOffset.Now.Second);
@@ -103,7 +104,7 @@ namespace TEAMModelOS.Controllers.Analysis
             /*if (RedisHelper.Instance != null)
             {
                 exams = await RedisHelper.CacheShellAsync(CacheCosmosPrefix + "FindExamResultRedis",
-                    ShaHashHelper.GetSHA1(JsonNetHelper.ToJson(dict)), timeoutSeconds, () => { return FindExamResultRedis(dict, "FindExamResultRedis"); });
+                    ShaHashHelper.GetSHA1(dict.ToJsonString()), timeoutSeconds, () => { return FindExamResultRedis(dict, "FindExamResultRedis"); });
             }
             else
             {
@@ -118,7 +119,7 @@ namespace TEAMModelOS.Controllers.Analysis
                     exams.Add(result);
                 }
             }
-            
+
 
             Dictionary<string, object> stuMap = new Dictionary<string, object>
             {
@@ -565,7 +566,7 @@ namespace TEAMModelOS.Controllers.Analysis
         }
         public async Task<List<Dictionary<string, dynamic>>> FindPointAnalysisRedis(Dictionary<string, object> dict, string method)
         {
-             //ResponseBuilder builder = ResponseBuilder.custom();
+            //ResponseBuilder builder = ResponseBuilder.custom();
             List<Dictionary<string, dynamic>> scatterAnalysis = new List<Dictionary<string, dynamic>>();
             //Dictionary<string, object> scatterAnalysis = new Dictionary<string, object>();
             List<ExamResult> exams = new List<ExamResult>();
@@ -577,11 +578,11 @@ namespace TEAMModelOS.Controllers.Analysis
              for (int i = 0; i < subjectCouns.Count; i++)
              {*/
             if (RedisHelper.Exists(CacheCosmosPrefix + "examResult" + subjectCode.ToString()))
-                {
-                    ExamResult result = RedisHelper.HGet<ExamResult>(CacheCosmosPrefix + "examResult" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
-                    //builder.Data(info);
-                    exams.Add(result);
-                }
+            {
+                ExamResult result = RedisHelper.HGet<ExamResult>(CacheCosmosPrefix + "examResult" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
+                //builder.Data(info);
+                exams.Add(result);
+            }
             //}
             //List<Student> students = await azureCosmosDBRepository.FindByDict<Student>(stuMap);
             List<Student> students = null;
@@ -691,7 +692,8 @@ namespace TEAMModelOS.Controllers.Analysis
                                 {
                                     info.Add("无");
                                 }
-                                else {
+                                else
+                                {
                                     info.Add(striveAll.Substring(0, striveAll.Length - 1));
                                 }
                                 if (string.IsNullOrEmpty(careAll))
@@ -701,7 +703,7 @@ namespace TEAMModelOS.Controllers.Analysis
                                 else
                                 {
                                     info.Add(careAll.Substring(0, careAll.Length - 1)); ;
-                                }                               
+                                }
                                 info.Add(stu[i].ToString());
                                 datas.Add(info);
 
@@ -736,7 +738,8 @@ namespace TEAMModelOS.Controllers.Analysis
                     }
                 }
                 return scatterAnalysis;
-            }else return scatterAnalysis;
+            }
+            else return scatterAnalysis;
 
         }
 
@@ -778,31 +781,31 @@ namespace TEAMModelOS.Controllers.Analysis
             dict.TryGetValue("schoolCode", out object schoolCode);
             dict.TryGetValue("code", out object code);
             //dict.TryGetValue("scopeCode", out object scopeCode);
-/*            Dictionary<string, object> sub = new Dictionary<string, object>
-            {
-                { "subjectCode",  subjectCode.ToString()},
-                { "code",code.ToString()}
-            };
-            Dictionary<string, object> examMap = new Dictionary<string, object>
-            {
-                { "subjectCode", subjectCode.ToString()},
-                { "code", code.ToString()},
-                { "schoolCode", schoolCode.ToString()}
-            };*/
+            /*            Dictionary<string, object> sub = new Dictionary<string, object>
+                        {
+                            { "subjectCode",  subjectCode.ToString()},
+                            { "code",code.ToString()}
+                        };
+                        Dictionary<string, object> examMap = new Dictionary<string, object>
+                        {
+                            { "subjectCode", subjectCode.ToString()},
+                            { "code", code.ToString()},
+                            { "schoolCode", schoolCode.ToString()}
+                        };*/
             //List<ExamResult> exams = await azureCosmosDBRepository.FindByDict<ExamResult>(examMap);
             List<ExamResult> exams = new List<ExamResult>();
             if (RedisHelper.Exists(CacheCosmosPrefix + "examResult" + subjectCode.ToString()))
             {
                 ExamResult result = RedisHelper.HGet<ExamResult>(CacheCosmosPrefix + "examResult" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
                 exams.Add(result);
-            }            
+            }
             List<Paper> paper = new List<Paper>();
             if (RedisHelper.Exists(CacheCosmosPrefix + "paperInfo" + subjectCode.ToString()))
             {
                 Paper paper1 = RedisHelper.HGet<Paper>(CacheCosmosPrefix + "paperInfo" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
-                paper.Add(paper1);              
+                paper.Add(paper1);
             }
-          
+
 
             List<string> key = new List<string>
             {
@@ -971,17 +974,20 @@ namespace TEAMModelOS.Controllers.Analysis
                             values[20] = quality[k].ToString();
                             values[21] = answer[k].ToString();
                             string pointName = "";
-                            if (paper[0].item[k].points.Count == 1 ) {
+                            if (paper[0].item[k].points.Count == 1)
+                            {
                                 foreach (string index in paper[0].item[k].points)
                                 {
-                                    pointName = index ;
+                                    pointName = index;
                                 }
-                            } else if (paper[0].item[k].points.Count > 1) {
+                            }
+                            else if (paper[0].item[k].points.Count > 1)
+                            {
                                 foreach (string index in paper[0].item[k].points)
                                 {
                                     pointName += index + ",";
                                 }
-                            }                           
+                            }
                             values[22] = pointName;
                             datas.Add(values);
 
@@ -1024,34 +1030,34 @@ namespace TEAMModelOS.Controllers.Analysis
             dict.TryGetValue("schoolCode", out object schoolCode);
             dict.TryGetValue("code", out object code);
             //dict.TryGetValue("scopeCode", out object scopeCode);
-           /* Dictionary<string, object> sub = new Dictionary<string, object>
-            {
-                { "subjectCode",  subjectCode.ToString()},
-                { "code",code.ToString()}
+            /* Dictionary<string, object> sub = new Dictionary<string, object>
+             {
+                 { "subjectCode",  subjectCode.ToString()},
+                 { "code",code.ToString()}
 
-            };
-            Dictionary<string, object> examMap = new Dictionary<string, object>
-            {
-                { "schoolCode", schoolCode.ToString()},
-                { "code", code.ToString()},
-                { "subjectCode",  subjectCode.ToString()}
+             };
+             Dictionary<string, object> examMap = new Dictionary<string, object>
+             {
+                 { "schoolCode", schoolCode.ToString()},
+                 { "code", code.ToString()},
+                 { "subjectCode",  subjectCode.ToString()}
 
 
-            };*/
+             };*/
             List<ExamResult> exams = new List<ExamResult>();
 
-                if (RedisHelper.Exists(CacheCosmosPrefix + "examResult" + subjectCode.ToString()))
-                {
-                    ExamResult res = RedisHelper.HGet<ExamResult>(CacheCosmosPrefix + "examResult" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
-                    exams.Add(res);
-                }
+            if (RedisHelper.Exists(CacheCosmosPrefix + "examResult" + subjectCode.ToString()))
+            {
+                ExamResult res = RedisHelper.HGet<ExamResult>(CacheCosmosPrefix + "examResult" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
+                exams.Add(res);
+            }
             List<Paper> paper = new List<Paper>();
             if (RedisHelper.Exists(CacheCosmosPrefix + "paperInfo" + subjectCode.ToString()))
             {
 
                 Paper papers = RedisHelper.HGet<Paper>(CacheCosmosPrefix + "paperInfo" + subjectCode.ToString(), ShaHashHelper.GetSHA1(code.ToString()));
                 paper.Add(papers);
-            }          
+            }
             Dictionary<string, object> stuMap = new Dictionary<string, object>
             {
                 { "schoolCode", "Habook" }
@@ -1085,7 +1091,8 @@ namespace TEAMModelOS.Controllers.Analysis
                     });
                 });
             }
-            else {
+            else
+            {
                 paper.ForEach(p =>
                 {
                     p.item.ForEach(i =>
@@ -1124,7 +1131,8 @@ namespace TEAMModelOS.Controllers.Analysis
             resultSum.Sort(delegate (double s1, double s2) { return s1.CompareTo(s2); });
             double rhlCount = resultSum.Count * 0.27;
             double rhl = resultSum[int.Parse(rhwCount.ToString("0"))];
-            foreach (ExamResult ex in exams) {
+            foreach (ExamResult ex in exams)
+            {
                 point = ex.point;
                 result = ex.result;
                 classes = ex.classes;
@@ -1142,8 +1150,10 @@ namespace TEAMModelOS.Controllers.Analysis
             {
                 knowledgeName.Add(cla);
             }
-            for (int k = 0;k < knowledgeName.Count;k++ ) {
-                if (null == knowledgeName[k]) {
+            for (int k = 0; k < knowledgeName.Count; k++)
+            {
+                if (null == knowledgeName[k])
+                {
                     knowledgeName.Remove(knowledgeName[k]);
                 }
             }
@@ -1248,7 +1258,8 @@ namespace TEAMModelOS.Controllers.Analysis
                 paper.ForEach(p =>
                 {
                     int n = 0;
-                    if (dict.TryGetValue("type", out object Type)) {
+                    if (dict.TryGetValue("type", out object Type))
+                    {
                         p.item.ForEach(i =>
                         {
                             if (i.field != null && i.field.Contains(knowledgeName[k]))
@@ -1260,7 +1271,9 @@ namespace TEAMModelOS.Controllers.Analysis
                             }
                             n++;
                         });
-                    } else {
+                    }
+                    else
+                    {
                         p.item.ForEach(i =>
                         {
                             if (i.points != null && i.points.Contains(knowledgeName[k]))
@@ -1317,7 +1330,7 @@ namespace TEAMModelOS.Controllers.Analysis
                         {
                             if (dict.TryGetValue("type", out object Type))
                             {
-                                if (i.field!= null && i.field.Contains(knowledgeName[k]))
+                                if (i.field != null && i.field.Contains(knowledgeName[k]))
                                 {
 
                                     //Dictionary<string, double> mapkeyItem = new Dictionary<string, double>();
@@ -1346,7 +1359,8 @@ namespace TEAMModelOS.Controllers.Analysis
                                 }
                                 n++;
                             }
-                            else {
+                            else
+                            {
                                 if (i.points != null && i.points.Contains(knowledgeName[k]))
                                 {
 
@@ -1428,7 +1442,8 @@ namespace TEAMModelOS.Controllers.Analysis
                                         }
                                         x++;
                                     }
-                                    else {
+                                    else
+                                    {
                                         if (i.points != null && i.points.Contains(knowledgeName[k]))
                                         {
                                             //当前知识点在该题占比多少
@@ -1522,28 +1537,32 @@ namespace TEAMModelOS.Controllers.Analysis
             }
             if (RedisHelper.Instance != null)
             {
-                try {
+                try
+                {
                     ///RedisHelper.Instance.CurrentSerialize = obj => System.Text.Json.JsonSerializer.Serialize(obj);
-                   /// RedisHelper.Instance.CurrentDeserialize = (json, type) => System.Text.Json.JsonSerializer.Deserialize(json, type);
+                    /// RedisHelper.Instance.CurrentDeserialize = (json, type) => System.Text.Json.JsonSerializer.Deserialize(json, type);
                     List<ExamInfo> info = await RedisHelper.CacheShellAsync(CacheCosmosPrefix + "FindExamInfo",
                     ShaHashHelper.GetSHA1(dict.ToJsonString()), timeoutSeconds, () => { return FindExamInfoRedis(dict, "FindExamInfo"); });
                  
                     builder.Data(info);
-                } catch (Exception e) {
+                }
+                catch (Exception e)
+                {
                     throw new BizException(e.Message);
-                }             
+                }
             }
             else
             {
-                List<ExamInfo> info =  await FindExamInfoRedis(dict, "FindExamInfo");
+                List<ExamInfo> info = await FindExamInfoRedis(dict, "FindExamInfo");
                 builder.Data(info);
             }
             return builder.build();
         }
 
-        public async Task<List<ExamInfo>> FindExamInfoRedis(Dictionary<string, object> dict,string method)
+        public async Task<List<ExamInfo>> FindExamInfoRedis(Dictionary<string, object> dict, string method)
         {
-            try {
+            try
+            {
                 List<ExamInfo> info = await azureCosmosDBRepository.FindByDict<ExamInfo>(dict);
 
                 if (RedisHelper.Instance != null)
@@ -1559,7 +1578,9 @@ namespace TEAMModelOS.Controllers.Analysis
                     }
                 }
                 return info;
-            } catch (Exception e) {
+            }
+            catch (Exception e)
+            {
                 throw new BizException(e.Message);
 
             }
@@ -1722,7 +1743,8 @@ namespace TEAMModelOS.Controllers.Analysis
             }
             return builder.build();
         }
-        public async Task<List<Dictionary<string, dynamic>>> FindHomeStatisticsRedis(Dictionary<string, object> dict, string method) {
+        public async Task<List<Dictionary<string, dynamic>>> FindHomeStatisticsRedis(Dictionary<string, object> dict, string method)
+        {
 
             //request.@params.TryGetValue("subjectCode", out object subjectCode);
             dict.TryGetValue("schoolCode", out object schoolCode);
@@ -1751,7 +1773,7 @@ namespace TEAMModelOS.Controllers.Analysis
             List<ExamInfo> newInfo = new List<ExamInfo>();
             //获取各个学段最新的考试信息
             foreach (IGrouping<string, ExamInfo> group in exams.GroupBy(c => c.conditions.period))
-            {                 
+            {
                 ExamInfo examInfo = group.ToList().OrderByDescending(e => e.createTime).ToList().FirstOrDefault();
                 newInfo.Add(examInfo);
             };
@@ -2072,7 +2094,7 @@ namespace TEAMModelOS.Controllers.Analysis
                             { "KeyLines",KeyLines}
                         };
                         map.Add(AveragePointMap);
-                    }   
+                    }
                 }
 
                 //Redis处理结果集

+ 17 - 17
TEAMModelOS/Controllers/Analysis/ChangeController.cs

@@ -25,17 +25,17 @@ namespace TEAMModelOS.Controllers.Analysis
     [ApiController]
     public class ChangeController : Controller
     {
-        private SnowflakeId SnowflakeId;
+        private readonly SnowflakeId _snowflakeId;
         private readonly IWebHostEnvironment _hostingEnvironment;
-        public AzureCosmosFactory _cosmosrepository;
-        public AzureStorageFactory azureBlobDB;
+        public readonly AzureCosmosFactory _azureCosmos;
+        public readonly AzureStorageFactory _azureStorage;
         private const string CacheCosmosPrefix = "Analysis:";
-        public ChangeController(IWebHostEnvironment hostingEnvironment, AzureCosmosFactory cosmosDBRepository, AzureStorageFactory _azureBlobDB, SnowflakeId _SnowflakeId)
+        public ChangeController(IWebHostEnvironment hostingEnvironment, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, SnowflakeId snowflakeId)
         {
-            SnowflakeId= _SnowflakeId;
+            _snowflakeId= snowflakeId;
             _hostingEnvironment = hostingEnvironment;
-            _cosmosrepository = cosmosDBRepository;
-            azureBlobDB = _azureBlobDB;
+            _azureCosmos = azureCosmos;
+            _azureStorage = azureStorage;
         }
 
 
@@ -172,7 +172,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 //考试基本信息
                 examInfo = new ExamInfo
                 {
-                    id = SnowflakeId.NextId()+"",
+                    id = _snowflakeId.NextId()+"",
                     code = "88924E4C-F00D-4A1D-B2C3-234F930F29D4",
                     name = s.ex_name,
                     type = s.ex_type,
@@ -199,7 +199,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 string schoolName = x.info.school_name;
                 Classroom classInfo = new Classroom
                 {
-                    id = SnowflakeId.NextId() + "",
+                    id = _snowflakeId.NextId() + "",
                     classroomName = key,
                     //classroomType = schoolName,
                     studentCount = k,
@@ -324,14 +324,14 @@ namespace TEAMModelOS.Controllers.Analysis
                 { "examResult",simple},
                 { "examAnswer",examAnswer}
             };            
-            AzureBlobModel modle = await azureBlobDB.UploadFileByContainer("hbcn", keyValues.ToJsonString(), "exam", sc.schoolCode + examInfo.examCode + paper.subjectCode + ".json");
+            AzureBlobModel modle = await _azureStorage.UploadFileByContainer("hbcn", keyValues.ToJsonString(), "exam", sc.schoolCode + examInfo.examCode + paper.subjectCode + ".json");
             //examInfo.blobUrl = modle.BlobUrl;
             //判定是否存储考试基本信息
             Dictionary<string, object> sub = new Dictionary<string, object>
                     {
                         { "examCode",  examInfo.examCode}
                     };
-            List<ExamInfo> eInfo = await _cosmosrepository.FindByDict<ExamInfo>(sub);
+            List<ExamInfo> eInfo = await _azureCosmos.FindByDict<ExamInfo>(sub);
             if (eInfo.Count > 0)
             {
                 eInfo.ForEach(e =>
@@ -349,7 +349,7 @@ namespace TEAMModelOS.Controllers.Analysis
             }
             else {
                 examInfo.blobUrl = new List<string> { modle.BlobUrl };
-                await _cosmosrepository.Save(examInfo);
+                await _azureCosmos.Save(examInfo);
             }
 
  
@@ -387,13 +387,13 @@ namespace TEAMModelOS.Controllers.Analysis
             ExamResult result = null;
             if (request.@params.TryGetValue("id", out object id) && request.@params.TryGetValue("pk", out object pk))
             {
-                 examInfo = await _cosmosrepository.FindByIdPk<ExamInfo>(id.ToString(), pk.ToString());
+                 examInfo = await _azureCosmos.FindByIdPk<ExamInfo>(id.ToString(), pk.ToString());
                 //获取发布对象
                 if (request.@params.TryGetValue("schoolCode", out object schoolCode))
                 {
                     List<string> targetCode = examInfo.target;
-                    List<ClassStudent> classroomStudents = await _cosmosrepository.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", targetCode } });
-                    List<Student> students = await _cosmosrepository.FindByDict<Student>(
+                    List<ClassStudent> classroomStudents = await _azureCosmos.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", targetCode } });
+                    List<Student> students = await _azureCosmos.FindByDict<Student>(
                         new Dictionary<string, object>() { { "classroomCode", targetCode }, { "code", schoolCode } },
                         new List<string> { "id", "name", "code", "seatNo", "studentId", "classroomCode" });
                     List<dynamic> stus = new List<dynamic>();
@@ -423,7 +423,7 @@ namespace TEAMModelOS.Controllers.Analysis
                                 ids.Add(x.code);
                             }
                         });
-                        var sts = await _cosmosrepository.FindByDict<Student>(new Dictionary<string, object>() { { "studentId", ids.ToArray() } });
+                        var sts = await _azureCosmos.FindByDict<Student>(new Dictionary<string, object>() { { "studentId", ids.ToArray() } });
                         if (sts.IsNotEmpty())
                         {
                             sts.ForEach(x =>
@@ -437,7 +437,7 @@ namespace TEAMModelOS.Controllers.Analysis
                     //保存新增学生
                     if (newClassStudents.IsNotEmpty())
                     {
-                        classroomStudents.AddRange(await _cosmosrepository.SaveOrUpdateAll(newClassStudents));
+                        classroomStudents.AddRange(await _azureCosmos.SaveOrUpdateAll(newClassStudents));
                     }
                     
                     //处理学生信息以便学情使用

+ 27 - 0
TEAMModelOS/Controllers/Client/Attribute/AuthFilter.cs

@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc.Filters;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using TEAMModelOS.SDK.Extension;
+
+namespace TEAMModelOS.Controllers.Client.Attribute
+{
+    public class AuthFilter : IResourceFilter
+    {
+        public void OnResourceExecuting(ResourceExecutingContext context)
+        {
+            var authtoken = context.HttpContext.GetXAuth("AuthToken");
+
+            context.Result = new ContentResult()
+            {
+                Content = "Resource unavailable - header not set."
+            };
+        }
+
+        public void OnResourceExecuted(ResourceExecutedContext context)
+        {
+        }
+    }    
+}

+ 99 - 101
TEAMModelOS/Controllers/Core/AuthController.cs

@@ -1,112 +1,110 @@
-using Microsoft.AspNetCore.Authentication;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Configuration;
-using Microsoft.IdentityModel.Tokens;
-using OpenXmlPowerTools;
-using System;
-using System.Collections.Generic;
-using System.IdentityModel.Tokens.Jwt;
-using System.Linq;
-using System.Security.Claims;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK;
-using TEAMModelOS.SDK.Context.Configuration;
-using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.Helper.Network.HttpHelper;
-using TEAMModelOS.SDK.Helper.Security.AESCrypt;
-using TEAMModelOS.SDK.Helper.Security.DesCrypt;
-using JsonExtensions = TEAMModelOS.SDK.Extension.JsonExtensions;
+//using Microsoft.AspNetCore.Authentication;
+//using Microsoft.AspNetCore.Mvc;
+//using Microsoft.Extensions.Configuration;
+//using Microsoft.IdentityModel.Tokens;
+//using OpenXmlPowerTools;
+//using System;
+//using System.Collections.Generic;
+//using System.IdentityModel.Tokens.Jwt;
+//using System.Linq;
+//using System.Security.Claims;
+//using System.Text;
+//using System.Text.Json;
+//using System.Threading.Tasks;
+//using TEAMModelOS.SDK;
+//using TEAMModelOS.SDK.Context.Configuration;
+//using TEAMModelOS.SDK.Helper.Common.JsonHelper;
+//using TEAMModelOS.SDK.Helper.Network.HttpHelper;
+//using TEAMModelOS.SDK.Helper.Security.AESCrypt;
+//using TEAMModelOS.SDK.Helper.Security.DesCrypt;
 
-namespace TEAMModelOS.Controllers
-{
-    [Route("api/[controller]")]
-    [ApiController]
-    public class AuthController :BaseController
-    {
-        [HttpPost("token")]
-        public object Token (string random){
-            string url = BaseConfigModel.Configuration["HaBookAuth:IES5Auth:url"];
-            Dictionary<string,object> token= BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:token").Get<Dictionary<string,object>>();
-            JsonElement json = JsonExtensions.ToObject<JsonElement>(HttpHelper.HttpPost(url, token.ToJsonString()));
-            Dictionary<string, object> refresh_token = BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:refresh_token").Get<Dictionary<string, object>>();
-            var atoken = refresh_token.ToJsonString().Replace("{access_token}", json.GetString("access_token")!=null? json.GetString("access_token").ToString():"");
-            return JsonExtensions.ToObject<JsonElement>(HttpHelper.HttpPost(url, token.ToJsonString())); 
-        }
+//namespace TEAMModelOS.Controllers
+//{
+//    [Route("api/[controller]")]
+//    [ApiController]
+//    public class AuthController :BaseController
+//    {
+//        [HttpPost("token")]
+//        public object Token (string random){
+//            string url = BaseConfigModel.Configuration["HaBookAuth:IES5Auth:url"];
+//            Dictionary<string,object> token= BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:token").Get<Dictionary<string,object>>();
+//            JsonElement json = JsonApiHelper.FromApiJson<JsonElement>(HttpHelper.HttpPost(url, token.ToApiJson()));
+//            Dictionary<string, object> refresh_token = BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:refresh_token").Get<Dictionary<string, object>>();
+//            var atoken = refresh_token.ToApiJson().Replace("{access_token}", json.GetString("access_token")!=null? json.GetString("access_token").ToString():"");
+//            return JsonApiHelper.FromApiJson<JsonElement>(HttpHelper.HttpPost(url, token.ToApiJson())); 
+//        }
 
-        [HttpPost("refresh_token")]
-        public object Refresh_token(string token)
-        {
-            string url = BaseConfigModel.Configuration["HaBookAuth:IES5Auth:url"];
-            Dictionary<string, object> refresh_token = BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:refresh_token").Get<Dictionary<string, object>>();
-            token=  refresh_token.ToJsonString().Replace("{access_token}", token);
-            return new { url, refresh_token= JsonExtensions.ToObject<JsonElement>(token) };
-        }
+//        [HttpPost("refresh_token")]
+//        public object Refresh_token(string token)
+//        {
+//            string url = BaseConfigModel.Configuration["HaBookAuth:IES5Auth:url"];
+//            Dictionary<string, object> refresh_token = BaseConfigModel.Configuration.GetSection("HaBookAuth:IES5Auth:refresh_token").Get<Dictionary<string, object>>();
+//            token=  refresh_token.ToApiJson().Replace("{access_token}", token);
+//            return new { url, refresh_token= JsonApiHelper.FromApiJson<JsonElement>(token) };
+//        }
 
-        [HttpPost("validateIdToken")]
-        public BaseResponse ValidateIdToken(string request)
-        {
-            ResponseBuilder builder = new ResponseBuilder();
-         //  bool b = CoreTokenExtensions.ValidateIdToken(request.@params, BaseConfigModel.Configuration["Option:IdTokenSalt"]);
-            var a = CreateToken("habook0001", BaseConfigModel.Configuration["Option:IdTokenSalt"],
-                new string[] { "admin","teacher"},new string []{"update","create" },
-                BaseConfigModel.Configuration.GetSection("Option:Exp").Get<int>());
-            return builder.Data(a).build();
-        }
+//        [HttpPost("validateIdToken")]
+//        public BaseResponse ValidateIdToken(string request)
+//        {
+//            ResponseBuilder builder = new ResponseBuilder();
+//         //  bool b = CoreTokenExtensions.ValidateIdToken(request.@params, BaseConfigModel.Configuration["Option:IdTokenSalt"]);
+//            var a = CreateToken("habook0001", BaseConfigModel.Configuration["Option:IdTokenSalt"],
+//                new string[] { "admin","teacher"},new string []{"update","create" },
+//                BaseConfigModel.Configuration.GetSection("Option:Exp").Get<int>());
+//            return builder.Data(a).build();
+//        }
 
-        public static string CreateToken(string userID, string salt, string[] roles = null, string[] permissions = null, int expire = 86400)
-        {
-            // 設定要加入到 JWT Token 中的聲明資訊(Claims)
-            var claims = new List<Claim>();
-            string iss = BaseConfigModel.Configuration["Option:Issuer"];
-            // 在 RFC 7519 規格中(Section#4),總共定義了 7 個預設的 Claims
-            claims.Add(new Claim(JwtRegisteredClaimNames.Iss, iss)); //發行者
-            claims.Add(new Claim(JwtRegisteredClaimNames.Sub, userID)); // 用戶ID            
-            claims.Add(new Claim(JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddHours(expire).ToUnixTimeSeconds().ToString())); // 到期的時間,必須為數字
+//        public static string CreateToken(string userID, string salt, string[] roles = null, string[] permissions = null, int expire = 86400)
+//        {
+//            // 設定要加入到 JWT Token 中的聲明資訊(Claims)
+//            var claims = new List<Claim>();
+//            string iss = BaseConfigModel.Configuration["Option:Issuer"];
+//            // 在 RFC 7519 規格中(Section#4),總共定義了 7 個預設的 Claims
+//            claims.Add(new Claim(JwtRegisteredClaimNames.Iss, iss)); //發行者
+//            claims.Add(new Claim(JwtRegisteredClaimNames.Sub, userID)); // 用戶ID            
+//            claims.Add(new Claim(JwtRegisteredClaimNames.Exp, DateTimeOffset.UtcNow.AddHours(expire).ToUnixTimeSeconds().ToString())); // 到期的時間,必須為數字
 
-            // 擴充 "roles" 加入登入者的角色,角色類型 (USER、HABOOK)   
-            if (roles != null)
-            {
-                foreach (var role in roles)
-                {
-                    claims.Add(new Claim("roles", role));
-                }
-            }
-            // 擴充 "permissions" 加入登入者的權限請求  
-            if (permissions != null)
-            {
-                foreach (var role in permissions)
-                {
-                    claims.Add(new Claim("permissions", role));
-                }
-            }
+//            // 擴充 "roles" 加入登入者的角色,角色類型 (USER、HABOOK)   
+//            if (roles != null)
+//            {
+//                foreach (var role in roles)
+//                {
+//                    claims.Add(new Claim("roles", role));
+//                }
+//            }
+//            // 擴充 "permissions" 加入登入者的權限請求  
+//            if (permissions != null)
+//            {
+//                foreach (var role in permissions)
+//                {
+//                    claims.Add(new Claim("permissions", role));
+//                }
+//            }
 
-            var userClaimsIdentity = new ClaimsIdentity(claims);
+//            var userClaimsIdentity = new ClaimsIdentity(claims);
 
-            // 建立一組對稱式加密的金鑰,主要用於 JWT 簽章之用
-            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
+//            // 建立一組對稱式加密的金鑰,主要用於 JWT 簽章之用
+//            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(salt));
 
-            // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
-            // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
-            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
+//            // HmacSha256 有要求必須要大於 128 bits,所以 salt 不能太短,至少要 16 字元以上
+//            // https://stackoverflow.com/questions/47279947/idx10603-the-algorithm-hs256-requires-the-securitykey-keysize-to-be-greater
+//            var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
 
-            // 建立 SecurityTokenDescriptor
-            var tokenDescriptor = new SecurityTokenDescriptor
-            {
-                Issuer = iss,
-                Subject = userClaimsIdentity,
-                Expires = DateTime.Now.AddSeconds(expire),
-                SigningCredentials = signingCredentials
-            };
+//            // 建立 SecurityTokenDescriptor
+//            var tokenDescriptor = new SecurityTokenDescriptor
+//            {
+//                Issuer = iss,
+//                Subject = userClaimsIdentity,
+//                Expires = DateTime.Now.AddSeconds(expire),
+//                SigningCredentials = signingCredentials
+//            };
 
-            // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
-            var tokenHandler = new JwtSecurityTokenHandler();
-            var securityToken = tokenHandler.CreateToken(tokenDescriptor);
-            var serializeToken = tokenHandler.WriteToken(securityToken);
+//            // 產出所需要的 JWT securityToken 物件,並取得序列化後的 Token 結果(字串格式)
+//            var tokenHandler = new JwtSecurityTokenHandler();
+//            var securityToken = tokenHandler.CreateToken(tokenDescriptor);
+//            var serializeToken = tokenHandler.WriteToken(securityToken);
 
-            return serializeToken;
-        }
-    }
-}
+//            return serializeToken;
+//        }
+//    }
+//}

+ 18 - 15
TEAMModelOS/Controllers/Core/BlobController.cs

@@ -9,9 +9,9 @@ using TEAMModelOS.SDK.Context.Configuration;
 using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.Helper.Network.HttpHelper;
 using TEAMModelOS.SDK.Module.AzureBlob.Configuration;
 using TEAMModelOS.SDK.DI;
+using System.Net.Http;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.Extension;
 
@@ -21,12 +21,16 @@ namespace TEAMModelOS.Controllers.Core
     [ApiController]
     public class BlobController : BaseController
     {
-        
-        private readonly AzureStorageFactory azureBlobDBRepository;
-        private readonly SnowflakeId SnowflakeId;
-        public BlobController(AzureStorageFactory _azureBlobDBRepository, SnowflakeId _SnowflakeId) {
-            azureBlobDBRepository = _azureBlobDBRepository;
-            SnowflakeId = _SnowflakeId;
+
+        private readonly AzureStorageFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
+        private readonly IHttpClientFactory _clientFactory;
+
+        public BlobController(AzureStorageFactory azureCosmos, SnowflakeId snowflakeId, IHttpClientFactory clientFactory)
+        {
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
+            _clientFactory = clientFactory;
         }
 
         /// <summary>
@@ -35,13 +39,13 @@ namespace TEAMModelOS.Controllers.Core
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("blobSasR")]
-        public    BaseResponse  BlobSasR(BlobSas request)
+        public BaseResponse BlobSasR(BlobSas request)
         {
             ///返回金钥过期时间
             ResponseBuilder builder = new ResponseBuilder();
             // Dictionary<string, object> dict = await azureBlobDBRepository.GetBlobSasUri(request.@params,true);
-           // dict.Add(d.Key, d.Value);
-            return builder.Data(  azureBlobDBRepository.GetContainerSasUri(request, true)).build() ;
+            // dict.Add(d.Key, d.Value);
+            return builder.Data(_azureCosmos.GetContainerSasUri(request, true)).build();
         }
         /// <summary>
         /// 某个文件的上传SAS rcw权限
@@ -56,7 +60,7 @@ namespace TEAMModelOS.Controllers.Core
             // Dictionary<string,object> dict=  await azureBlobDBRepository.GetBlobSasUri(request.@params,false);
             //   Dictionary<string, object> dict = ;
             //dict.Add(d.Key, d.Value);
-            return builder.Data(azureBlobDBRepository.GetContainerSasUri(request, false)).build();
+            return builder.Data(_azureCosmos.GetContainerSasUri(request, false)).build();
         }
         /// <summary>
         /// 链接只读(读)
@@ -75,7 +79,7 @@ namespace TEAMModelOS.Controllers.Core
             bool flg = IsBlobName(BlobName);
             if (flg)
             {
-                return responseBuilder.Data(azureBlobDBRepository.GetBlobSasUriRead(ContainerName, BlobName)).build();
+                return responseBuilder.Data(_azureCosmos.GetBlobSasUriRead(ContainerName, BlobName)).build();
             }
             else
             {
@@ -101,7 +105,7 @@ namespace TEAMModelOS.Controllers.Core
             {
                 BlobAuth blobAuth=    azureBlobDBRepository.GetBlobSasUriRead(ContainerName, BlobName);
                 string  text= await HttpHelper.HttpGetAsync(blobAuth.url + blobAuth.sas);
-                JsonElement json = text.ToObject<JsonElement>();
+                JsonElement json = text.FromApiJson<JsonElement>();
                 return responseBuilder.Data(json).build();
             }
             else
@@ -120,8 +124,7 @@ namespace TEAMModelOS.Controllers.Core
         public async Task<BaseResponse> UploadText(JsonElement request)
         {
             ResponseBuilder responseBuilder = new ResponseBuilder();
-            request.TryGetProperty("code", out JsonElement code);
-            return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn", code.ToString(), "exam", SnowflakeId.NextId() + ".json")).build();
+            return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn", request, "exam", SnowflakeId.NextId() + ".json")).build();
           
         }
 

+ 37 - 30
TEAMModelOS/Controllers/Exam/ExamController.cs

@@ -10,8 +10,10 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
-using TEAMModelOS.Service.Services.Learn.Implements;
 using System.Text.Json;
+using Azure.Messaging.ServiceBus;
+using Grpc.Extension.Common;
+using TEAMModelOS.SDK.Extension;
 
 namespace TEAMModelOS.Controllers
 {
@@ -19,15 +21,15 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class ExamController : BaseController
     {
-        private readonly SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory cosmosDBV3Repository;
+        private readonly AzureCosmosFactory _azureCosmos;        
+        private readonly SnowflakeId _snowflakeId;     
         private readonly AzureServiceBusFactory _serviceBus;
-        public ExamController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
-        {
-            
-            cosmosDBV3Repository = _cosmosDBV3Repository;
+
+        public ExamController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
+        {            
+            _azureCosmos = azureCosmos;
             _serviceBus = serviceBus;
-            SnowflakeId = _SnowflakeId;
+            _snowflakeId = snowflakeId;
         }
 
         /// <summary>
@@ -42,9 +44,9 @@ namespace TEAMModelOS.Controllers
             
             if (string.IsNullOrEmpty(request.id))
             {
-                request.id = SnowflakeId.NextId()+"";
+                request.id = _snowflakeId.NextId()+"";
                 request.status = 100;
-                // await cosmosDBV3Repository.SaveOrUpdate(request.@params);
+                // await _azureCosmos.SaveOrUpdate(request.@params);
             }
             if (request.publish.Equals("0"))
             {
@@ -54,8 +56,8 @@ namespace TEAMModelOS.Controllers
             else if (request.publish.Equals("1"))
             {
                 //设定开始时间
-                string msgId = SnowflakeId.NextId() + "";
-                long SequenceNumber = await _serviceBus.SendMessage<ExamInfo>(Constants.TopicName, request.id, request.code, request.startTime, 200, msgId);
+                string msgId = _snowflakeId.NextId() + "";
+                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<ExamInfo>(Constants.TopicName, request.id, request.code, request.startTime, 200, msgId);
                 request.sequenceNumber = SequenceNumber;
             }
             if (request.status == 0)
@@ -63,10 +65,10 @@ namespace TEAMModelOS.Controllers
                 if (request.startTime < new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds()) request.status = 200;
                 else request.status = 100;
             }
-            await cosmosDBV3Repository.SaveOrUpdate(request);
+            await _azureCosmos.SaveOrUpdate(request);
             //设定结束时间
-            string msgEndId = SnowflakeId.NextId() + "";
-            await _serviceBus.SendMessage<ExamInfo>(Constants.TopicName, request.id, request.code, request.endTime, 300, msgEndId);
+            string msgEndId = _snowflakeId.NextId() + "";
+            await _serviceBus.GetServiceBusClient().SendLeamMessage<ExamInfo>(Constants.TopicName, request.id, request.code, request.endTime, 300, msgEndId);
             return builder.Data(request).build();
         }
         /// <summary>
@@ -78,8 +80,8 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Delete(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            IdPk items = await cosmosDBV3Repository.DeleteAsync<ExamInfo>(request.id, request.pk);
-            await cosmosDBV3Repository.DeleteAll<Paper>(new Dictionary<string, object>() { { "code", request.id } });
+            IdPk items = await _azureCosmos.DeleteAsync<ExamInfo>(request.id, request.pk);
+            await _azureCosmos.DeleteAll<Paper>(new Dictionary<string, object>() { { "code", request.id } });
             return builder.Data(items).build();
         }
         /// <summary>
@@ -101,7 +103,7 @@ namespace TEAMModelOS.Controllers
             }
             if (keys > 0)
             {
-                return builder.Data(await cosmosDBV3Repository.FindByDict<ExamInfo>(request)).build();
+                return builder.Data(await _azureCosmos.FindByDict<ExamInfo>(request)).build();
             }
             else {
                 return builder.build();
@@ -117,7 +119,7 @@ namespace TEAMModelOS.Controllers
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             //判断是否每一个题目都有分数
-            List<ExamInfo> exams = await cosmosDBV3Repository.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request.examCode } });
+            List<ExamInfo> exams = await _azureCosmos.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request.examCode } });
 
             if (exams.IsNotEmpty())
             {
@@ -126,7 +128,7 @@ namespace TEAMModelOS.Controllers
                 if ( examInfo.status == 300 &&
                    examInfo.endTime <= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds())
                 {
-                    return builder.Data(await cosmosDBV3Repository.SaveOrUpdate(request)).build();
+                    return builder.Data(await _azureCosmos.SaveOrUpdate(request)).build();
                 }
                 else
                 {
@@ -152,11 +154,11 @@ namespace TEAMModelOS.Controllers
             if (request.IsNotEmpty())
             {
                 //要先处理状态,判断卷子是否存在,并判断卷子归属的考试是否允许再次提交
-                List<ExamInfo> exams = await cosmosDBV3Repository.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request[0].examCode } });
+                List<ExamInfo> exams = await _azureCosmos.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request[0].examCode } });
                 if (exams.IsNotEmpty())
                 {
                     
-                    return builder.Data(await cosmosDBV3Repository.SaveOrUpdateAll(request)).build();
+                    return builder.Data(await _azureCosmos.SaveOrUpdateAll(request)).build();
                 }
                 else
                 {
@@ -178,7 +180,7 @@ namespace TEAMModelOS.Controllers
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             //要先处理状态,判断卷子是否存在,并判断卷子归属的考试是否允许再次提交
-            List<ExamInfo> exams=  await cosmosDBV3Repository.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request.examCode } });
+            List<ExamInfo> exams=  await _azureCosmos.FindByDict<ExamInfo>(new Dictionary<string, object> { { "id", request.examCode } });
             if (exams.IsNotEmpty())
             {
                 ExamInfo examInfo = exams[0];
@@ -186,7 +188,7 @@ namespace TEAMModelOS.Controllers
                 if (examInfo.startTime <= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds() && examInfo.status == 200 &&
                    examInfo.endTime >= new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds())
                 {
-                    return builder.Data(await cosmosDBV3Repository.SaveOrUpdate(request)).build();
+                    return builder.Data(await _azureCosmos.SaveOrUpdate(request)).build();
                 }
                 else
                 {
@@ -223,14 +225,14 @@ namespace TEAMModelOS.Controllers
             if (keys == 1 && skey.Contains("code"))
             {
                 List<string> props = new List<string> { "id", "code", "examCode", "status", "mark", "score" };
-                List<ExamRecord> examRecords = await cosmosDBV3Repository.FindByDict<ExamRecord>(request, props);
+                List<ExamRecord> examRecords = await _azureCosmos.FindByDict<ExamRecord>(request, props);
                 return builder.Data(examRecords).Extend(new Dictionary<string, object> { { "props", props } }).build();
             }
             else {
                 if (skey.Contains("examCode"))
                 {
                     List<string> props = new List<string> { "id", "code", "examCode", "status", "mark", "score" };
-                    List<ExamRecord> examRecords = await cosmosDBV3Repository.FindByDict<ExamRecord>(request, props);
+                    List<ExamRecord> examRecords = await _azureCosmos.FindByDict<ExamRecord>(request, props);
                     return builder.Data(examRecords).Extend(new Dictionary<string, object> { { "props", props } }).build();
                 }
                 else {
@@ -247,10 +249,10 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> findByIdPk(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            ExamRecord record = await cosmosDBV3Repository.FindByIdPk<ExamRecord>(request.id,request.pk);
+            ExamRecord record = await _azureCosmos.FindByIdPk<ExamRecord>(request.id,request.pk);
             if (record != null) {
                 //处理客观题自动阅卷
-                Paper paper = await cosmosDBV3Repository.FindByIdPk<Paper>(record.id, record.examCode);
+                Paper paper = await _azureCosmos.FindByIdPk<Paper>(record.id, record.examCode);
                 //允许自动对客观题阅卷及,及阅卷状态大于2 已完成.
                 if (paper.markConfig != null && paper.markConfig.auto && record.mark<2) {
                     // TODO 需要处理已经打分的作答,以防止手动改分后被冲掉。
@@ -263,7 +265,10 @@ namespace TEAMModelOS.Controllers
             return builder.Data(record).build();
         }
 
-        public static List<Answer> autoMark(List<ItemInfo> items ,List<Answer> stdAnswers, List<Answer> stuAnswers ,MarkConfig markConfig) {
+
+        #region private        
+
+        private List<Answer> autoMark(List<ItemInfo> items ,List<Answer> stdAnswers, List<Answer> stuAnswers ,MarkConfig markConfig) {
             int size = stuAnswers.Count;
             for (int i = 0; i < size; i++) {
                 //如果当前题目已经打分则直接跳过。
@@ -346,6 +351,8 @@ namespace TEAMModelOS.Controllers
                 }
             }
             return stuAnswers;
-        } 
+        }
+
+        #endregion
     }
 }

+ 11 - 11
TEAMModelOS/Controllers/Exam/PaperController.cs

@@ -14,12 +14,12 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class PaperController: BaseController
     {
-        private SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory cosmosDBV3Repository;
-        public PaperController(AzureCosmosFactory _cosmosDBV3Repository, SnowflakeId _SnowflakeId)
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;
+        public PaperController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId)
         {
-            cosmosDBV3Repository = _cosmosDBV3Repository;
-            SnowflakeId = _SnowflakeId;
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
         }
         /// <summary>
         /// 删除
@@ -30,7 +30,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Delete(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            IdPk items = await cosmosDBV3Repository.DeleteAsync<Paper>(request.id, request.pk);
+            IdPk items = await _azureCosmos.DeleteAsync<Paper>(request.id, request.pk);
             return builder.Data(items).build();
         }
 
@@ -57,7 +57,7 @@ namespace TEAMModelOS.Controllers
             };
             if (keys > 0)
             {
-                return builder.Data(await cosmosDBV3Repository.FindByDict<Paper>(request, propertys: props)).build();
+                return builder.Data(await _azureCosmos.FindByDict<Paper>(request, propertys: props)).build();
             }
             else {
                 return builder.build();
@@ -83,7 +83,7 @@ namespace TEAMModelOS.Controllers
                 //dict[emobj.Current.Name] = emobj.Current.Value;
             }
             if (keys > 0) {
-                return builder.Data(await cosmosDBV3Repository.FindByDict<Paper>(request)).build();
+                return builder.Data(await _azureCosmos.FindByDict<Paper>(request)).build();
             }
             else
             {
@@ -102,13 +102,13 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (string.IsNullOrEmpty(request.id))
             {
-                request.id = SnowflakeId.NextId() + ""; 
+                request.id = _snowflakeId.NextId() + ""; 
                 request.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
-                await cosmosDBV3Repository.SaveOrUpdate(request);
+                await _azureCosmos.SaveOrUpdate(request);
             }
             else
             {
-                await cosmosDBV3Repository.SaveOrUpdate(request);
+                await _azureCosmos.SaveOrUpdate(request);
             }
             
             return builder.Data(request).build();

+ 17 - 17
TEAMModelOS/Controllers/Syllabus/ItemInfoController.cs

@@ -16,12 +16,12 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class ItemInfoController : BaseController
     {
-        private SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory cosmosDBV3Repository;
-        public ItemInfoController(AzureCosmosFactory _cosmosDBV3Repository ,SnowflakeId _SnowflakeId)
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;
+        public ItemInfoController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId)
         {
-            cosmosDBV3Repository = _cosmosDBV3Repository;
-            SnowflakeId = _SnowflakeId;
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
         }
 
         /// <summary>
@@ -37,11 +37,11 @@ namespace TEAMModelOS.Controllers
             request.ForEach(x => {
               
                 if (string.IsNullOrEmpty(x.id)) {
-                    x.id = SnowflakeId.NextId()+"";
+                    x.id = _snowflakeId.NextId()+"";
                 };
                 x.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
             });
-            return builder.Data(await cosmosDBV3Repository.SaveOrUpdateAll(request)).build();
+            return builder.Data(await _azureCosmos.SaveOrUpdateAll(request)).build();
         }
         [HttpPost("upsert")]
         public async Task<BaseResponse> Upsert(ItemInfo request)
@@ -52,10 +52,10 @@ namespace TEAMModelOS.Controllers
              
             if (string.IsNullOrEmpty(request.id))
             {
-                request.id = SnowflakeId.NextId() + "";
+                request.id = _snowflakeId.NextId() + "";
             };
             request.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
-            return builder.Data(await cosmosDBV3Repository.SaveOrUpdate(request)).build();
+            return builder.Data(await _azureCosmos.SaveOrUpdate(request)).build();
         }
         /// <summary>
         //获取题目摘要信息
@@ -78,7 +78,7 @@ namespace TEAMModelOS.Controllers
             }; 
             List<ItemInfo> items = new List<ItemInfo>();
             if (dict.Keys.Count > 0) {
-                items = await cosmosDBV3Repository.FindByDict<ItemInfo>(request, propertys: props);
+                items = await _azureCosmos.FindByDict<ItemInfo>(request, propertys: props);
             }
             
             return builder.Data(items).Extend(new Dictionary<string, object> { { "props", props } }).build();
@@ -92,7 +92,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> FindByIds(List<string> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<ItemInfo> items = await cosmosDBV3Repository.FindByIds<ItemInfo>(request);
+            List<ItemInfo> items = await _azureCosmos.FindByIds<ItemInfo>(request);
             return builder.Data(items).build();
         }
 
@@ -105,7 +105,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Delete(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            IdPk idPk = await cosmosDBV3Repository.DeleteAsync<ItemInfo>( request );
+            IdPk idPk = await _azureCosmos.DeleteAsync<ItemInfo>( request );
             return builder.Data(idPk).build();
         }
 
@@ -118,7 +118,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> DeleteAll(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<IdPk> idPk = await cosmosDBV3Repository.DeleteAll<ItemInfo>(request);
+            List<IdPk> idPk = await _azureCosmos.DeleteAll<ItemInfo>(request);
             return builder.Data(idPk).build();
         }
         /// <summary>
@@ -132,7 +132,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             List<ItemInfo> items =new List<ItemInfo>();
             if (StringHelper.getKeyCount(request) > 0) {
-                items = await cosmosDBV3Repository.FindByDict<ItemInfo>(request);
+                items = await _azureCosmos.FindByDict<ItemInfo>(request);
             }
             return builder.Data(items).build();
         }
@@ -146,7 +146,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> FindCacheShell(List<string> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<ItemInfo> items = await cosmosDBV3Repository.FindByIds<ItemInfo>(request);
+            List<ItemInfo> items = await _azureCosmos.FindByIds<ItemInfo>(request);
             //List<string> ps = new List<string>() { "6f705b1b-8221-5307-18da-13da05adf91e", "c3e1e95a-561e-fabf-cce3-3a564782e443" };
             //
             //
@@ -213,7 +213,7 @@ namespace TEAMModelOS.Controllers
                             ///
                             dict.Add("type", quInfo.type);
                             dict.Add("level", custom.level);
-                            List<ItemInfo> items = await cosmosDBV3Repository.FindByDict<ItemInfo>(dict);
+                            List<ItemInfo> items = await _azureCosmos.FindByDict<ItemInfo>(dict);
                             //id去重
                             items = items.Where((x, i) => items.FindIndex(z => z.id == x.id) == i).ToList();
                             ////均分知识点题目
@@ -237,7 +237,7 @@ namespace TEAMModelOS.Controllers
                         }
                         dict.Add("lite", false);
                         dict.Add("type", quInfo.type);
-                        List<ItemInfo> items = await cosmosDBV3Repository.FindByDict<ItemInfo>(dict);
+                        List<ItemInfo> items = await _azureCosmos.FindByDict<ItemInfo>(dict);
                         //id去重
                         items = items.Where((x, i) => items.FindIndex(z => z.id == x.id) == i).ToList();
                         itemInfos.AddRange(items);

+ 194 - 149
TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs

@@ -12,7 +12,6 @@ using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.DI;
 
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Implement;
 using System.Text.Json;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using TEAMModelOS.SDK.Extension;
@@ -23,17 +22,16 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     //[Authorize]
     public class KnowledgeController : BaseController
-    {
-        private SnowflakeId SnowflakeId;
-        private AzureStorageFactory _table;
-        private AzureCosmosFactory _cosmos; 
+    {       
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
 
-        public KnowledgeController(AzureStorageFactory table, AzureCosmosFactory cosmos , SnowflakeId _SnowflakeId)
+        public KnowledgeController(AzureStorageFactory azureStorage, AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId)
         {
-            SnowflakeId = _SnowflakeId;
-            _table = table;
-            _cosmos = cosmos;
-          
+            _snowflakeId = snowflakeId;
+            _azureStorage = azureStorage;
+            _azureCosmos = azureCosmos;          
         }
 
         /// <summary>
@@ -50,9 +48,9 @@ namespace TEAMModelOS.Controllers
         /// </summary>
         /// <typeparam name="T"></typeparam>
         /// <param name="schoolBlock"></param>
-        /// <param name="_cosmos"></param>
+        /// <param name="_azureCosmos"></param>
         /// <returns></returns>
-        delegate Task<string> SchoolSaveOrUpdate<T>(dynamic schoolBlock, AzureCosmosFactory _cosmos);
+        delegate Task<string> SchoolSaveOrUpdate<T>(dynamic schoolBlock, AzureCosmosFactory _azureCosmos);
 
         //  private delegate dynamic SaveOrUpdate(dynamic t);
 
@@ -69,7 +67,7 @@ namespace TEAMModelOS.Controllers
             List<KnowledgePoint> data = new List<KnowledgePoint>();
             if (request != null && request.PointParams.TryGetValue("SubjectCode", out _))
             {
-                List<KnowledgePoint> points = await _table.FindListByDict<KnowledgePoint>(request.PointParams);
+                List<KnowledgePoint> points = await _azureStorage.FindListByDict<KnowledgePoint>(request.PointParams);
                 if (request.Periods.IsNotEmpty())
                 {
                     HashSet<KnowledgePoint> knowledges = new HashSet<KnowledgePoint>();
@@ -109,8 +107,8 @@ namespace TEAMModelOS.Controllers
             List<BlockPointDto> data = new List<BlockPointDto>();
             if (request != null && request.PointParams.TryGetValue("SubjectCode", out _))
             {
-                List<KnowledgeBlockPoint> blockPoints = await _table.FindListByDict<KnowledgeBlockPoint>(request.PointParams);
-                List<KnowledgeBlock> blocks = await _table.FindListByDict<KnowledgeBlock>(request.PointParams);
+                List<KnowledgeBlockPoint> blockPoints = await _azureStorage.FindListByDict<KnowledgeBlockPoint>(request.PointParams);
+                List<KnowledgeBlock> blocks = await _azureStorage.FindListByDict<KnowledgeBlock>(request.PointParams);
                 if (request.Periods.IsNotEmpty())
                 {
                     HashSet<KnowledgeBlock> knowledges = new HashSet<KnowledgeBlock>();
@@ -135,90 +133,6 @@ namespace TEAMModelOS.Controllers
             }
             return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
         }
-        private static List<BlockPointDto> ListToTree(List<KnowledgeBlock> blocks, List<KnowledgeBlockPoint> points)
-        {
-            List<PointDto> pointList = points.ToJsonString().ToObject<List<PointDto>>();
-            List<BlockPointDto> blockList = points.ToJsonString().ToObject<List<BlockPointDto>>();
-            Dictionary<string, List<PointDto>> pointDict = new Dictionary<string, List<PointDto>>();
-            List<string> keys = (pointList.GroupBy(c => c.BlockId).Select(group => group.Key)).ToList();
-            foreach (string key in keys)
-            {
-                pointDict.Add(key, pointList.Where(x => x.BlockId.Equals(key)).ToList());
-            }
-            //var blockDict = blockList.ToDictionary(n => n.RowKey, n => n);
-
-            var res = from r in blockList group r by r.RowKey into g select g;
-            Dictionary<string, BlockPointDto> blockDict = new Dictionary<string, BlockPointDto>();
-            foreach (var s in res)
-            {
-                blockDict.TryAdd(s.First().RowKey, s.First());
-            }
-            return GetChild(blockList, blockDict, pointDict);
-        }
-        public static List<BlockPointDto> GetChild(List<BlockPointDto> list, Dictionary<string, BlockPointDto> blockDict, Dictionary<string, List<PointDto>> pointDict)
-        {
-            List<PointDto> empt = new List<PointDto>();
-            list = list.OrderBy(m => m.Order).ToList();
-            List<BlockPointDto> trees = new List<BlockPointDto>();
-            foreach (BlockPointDto node in list)
-            {
-                node.Type = 0;
-                bool fl = pointDict.TryGetValue(node.RowKey, out List<PointDto> points);
-                if (fl && points.IsNotEmpty())
-                {
-                    points.ForEach(m =>
-                    {
-                        node.Children.Add(new BlockPointDto
-                        {
-                            PartitionKey = m.PartitionKey,
-                            Pid = m.BlockId,
-                            RowKey = m.PointId,
-                            Type = 1,
-                            Order = m.Order,
-                            Name = m.Name,
-                            SubjectCode = m.SubjectCode,
-                            AdvicePeriodCode = m.AdvicePeriodCode,
-                            //Timestamp = m.Timestamp
-                        });
-                    });
-                }
-                bool flag = blockDict.TryGetValue(node.Pid, out BlockPointDto syllabus);
-                if (flag && syllabus != null)
-                {
-                    syllabus.Children.Add(node);
-                }
-                else
-                {
-                    trees.Add(node);
-                }
-            }
-            return trees.OrderBy(x => x.Order).ToList();
-        }
-        public static List<BlockPointDto> FindTree(List<BlockPointDto> trees, String rowKey, List<BlockPointDto> blockPoints)
-        {
-            if (!string.IsNullOrEmpty(rowKey))
-            {
-                foreach (BlockPointDto tree in trees)
-                {
-                    if (tree.RowKey.Equals(rowKey))
-                    {
-                        blockPoints.Add(tree);
-                    }
-
-                    if (null != tree.Children && tree.Children.Count > 0)
-                    {
-                        FindTree(tree.Children, rowKey, blockPoints);
-                    }
-                }
-            }
-            else
-            {
-                blockPoints = trees;
-            }
-            return blockPoints;
-        }
-
-
 
         /// <summary>
         /// 获取知识
@@ -233,7 +147,7 @@ namespace TEAMModelOS.Controllers
             List<Knowledge> data = new List<Knowledge>();
             if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Knowledge>(request);
+                data = await _azureCosmos.FindByDict<Knowledge>(request);
                 data.ForEach(d =>
                 {
                     if (d.type == 1) {
@@ -269,7 +183,7 @@ namespace TEAMModelOS.Controllers
             List<Knowledge> data = new List<Knowledge>();
             if (request.IsNotEmpty())
             {
-                data = await _cosmos.FindByIds<Knowledge>(request);
+                data = await _azureCosmos.FindByIds<Knowledge>(request);
             }
             else
             {
@@ -293,7 +207,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request.IsNotEmpty())
             {
-                List<Knowledge> ts = await KnowledgeService.SaveOrUpdateKnowledge(_cosmos,SnowflakeId,request);
+                List<Knowledge> ts = await SaveOrUpdateKnowledge(request);
                 if (ts.Count > 0) builder.Data(ts).Extend(new Dictionary<string, object> { { "count", ts.Count } });
                 else {
                     return builder.Error(ResponseCode.FAILED, "失败!").build();
@@ -318,57 +232,17 @@ namespace TEAMModelOS.Controllers
             List<Knowledge> Knowledges = await deleteDelegate1(request, builder);
             foreach (Knowledge Knowledge in Knowledges) {
                 if (Knowledge.type == 1) {
-                    List<Knowledge> knowledges = await  _cosmos.FindSQL<Knowledge>("SELECT value(c) FROM c join a in c.points where c.pk='Knowledge'and  Contains(a, '" + Knowledge.id + "') = true ");
-                    List<Resource> Resources = await _cosmos.FindSQL<Resource>("SELECT value(c) FROM c join a in c.points where c.pk='Resources' and  Contains(a, '" + Knowledge.id + "') = true ");
+                    List<Knowledge> knowledges = await  _azureCosmos.FindSQL<Knowledge>("SELECT value(c) FROM c join a in c.points where c.pk='Knowledge'and  Contains(a, '" + Knowledge.id + "') = true ");
+                    List<Resource> Resources = await _azureCosmos.FindSQL<Resource>("SELECT value(c) FROM c join a in c.points where c.pk='Resources' and  Contains(a, '" + Knowledge.id + "') = true ");
                     //select value(c) from c join A0  in c.points where 1=1  and A0 =  @points0
                     foreach (Knowledge knowledge in knowledges) knowledge.points.Remove(Knowledge.id);
                     foreach (Resource Resource in Resources) Resource.points.Remove(Knowledge.id);
-                    await _cosmos.SaveOrUpdateAll(Resources);
-                    await _cosmos.SaveOrUpdateAll(knowledges);
+                    await _azureCosmos.SaveOrUpdateAll(Resources);
+                    await _azureCosmos.SaveOrUpdateAll(knowledges);
                 }
             }
             return builder.build();
-        }
-
-        private async Task<List<T>> Delete<T>(JsonElement request, ResponseBuilder builder) where T : ID
-        {
-            List<T> schoolBlocks = null;
-            //Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            int keys = 0;
-            while (emobj.MoveNext())
-            {
-                keys++;
-                //dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            if (keys > 0)
-            {
-                  schoolBlocks = await _cosmos.FindByDict<T>(request);
-                Type t = typeof(T);
-                List<T> list = new List<T>();
-                if (schoolBlocks.IsNotEmpty())
-                {
-                    List<IdPk> idPks = await _cosmos.DeleteAll<T>(schoolBlocks);
-                    if (idPks.IsNotEmpty())
-                    {
-                        builder.Data("删除成功");
-                    }
-                    else
-                    {
-                          builder.Error(ResponseCode.FAILED, "删除失败!");
-
-                    }
-
-                }
-                else
-                {
-                   
-
-                }
-            }
-            else { builder.Error(ResponseCode.PARAMS_ERROR, "参数未定义!"); }
-            return schoolBlocks;
-        }
+        }       
 
         /// <summary>
         /// 统计个数
@@ -382,14 +256,14 @@ namespace TEAMModelOS.Controllers
             //List<List<List<List<int>>>> allCount = new List<List<List<List<int>>>>();
             ResponseBuilder builder = ResponseBuilder.custom();
             if (StringHelper.getKeyCount(request) > 0) {
-                List<School> sc = await _cosmos.FindByDict<School>(request);
+                List<School> sc = await _azureCosmos.FindByDict<School>(request);
                 //查询校本所有知识块
                 Dictionary<string, object> scMap = new Dictionary<string, object>
             {
                  { "type", 0},
                  { "status", 1}
             };
-                List<Knowledge> knowlegeo = await _cosmos.FindByDict<Knowledge>(scMap);
+                List<Knowledge> knowlegeo = await _azureCosmos.FindByDict<Knowledge>(scMap);
                
                 for (int i = 0; i < sc.Count; i++)
                 {
@@ -429,5 +303,176 @@ namespace TEAMModelOS.Controllers
             }
             return builder.Data(sCount).build();
         }
+           
+
+
+        #region private
+        private List<BlockPointDto> ListToTree(List<KnowledgeBlock> blocks, List<KnowledgeBlockPoint> points)
+        {
+            List<PointDto> pointList = points.ToJsonString().ToObject<List<PointDto>>();
+            List<BlockPointDto> blockList = points.ToJsonString().ToObject<List<BlockPointDto>>();
+            Dictionary<string, List<PointDto>> pointDict = new Dictionary<string, List<PointDto>>();
+            List<string> keys = (pointList.GroupBy(c => c.BlockId).Select(group => group.Key)).ToList();
+            foreach (string key in keys)
+            {
+                pointDict.Add(key, pointList.Where(x => x.BlockId.Equals(key)).ToList());
+            }
+            //var blockDict = blockList.ToDictionary(n => n.RowKey, n => n);
+
+            var res = from r in blockList group r by r.RowKey into g select g;
+            Dictionary<string, BlockPointDto> blockDict = new Dictionary<string, BlockPointDto>();
+            foreach (var s in res)
+            {
+                blockDict.TryAdd(s.First().RowKey, s.First());
+            }
+            return GetChild(blockList, blockDict, pointDict);
+        }
+        private List<BlockPointDto> GetChild(List<BlockPointDto> list, Dictionary<string, BlockPointDto> blockDict, Dictionary<string, List<PointDto>> pointDict)
+        {
+            List<PointDto> empt = new List<PointDto>();
+            list = list.OrderBy(m => m.Order).ToList();
+            List<BlockPointDto> trees = new List<BlockPointDto>();
+            foreach (BlockPointDto node in list)
+            {
+                node.Type = 0;
+                bool fl = pointDict.TryGetValue(node.RowKey, out List<PointDto> points);
+                if (fl && points.IsNotEmpty())
+                {
+                    points.ForEach(m =>
+                    {
+                        node.Children.Add(new BlockPointDto
+                        {
+                            PartitionKey = m.PartitionKey,
+                            Pid = m.BlockId,
+                            RowKey = m.PointId,
+                            Type = 1,
+                            Order = m.Order,
+                            Name = m.Name,
+                            SubjectCode = m.SubjectCode,
+                            AdvicePeriodCode = m.AdvicePeriodCode,
+                            //Timestamp = m.Timestamp
+                        });
+                    });
+                }
+                bool flag = blockDict.TryGetValue(node.Pid, out BlockPointDto syllabus);
+                if (flag && syllabus != null)
+                {
+                    syllabus.Children.Add(node);
+                }
+                else
+                {
+                    trees.Add(node);
+                }
+            }
+            return trees.OrderBy(x => x.Order).ToList();
+        }
+        private List<BlockPointDto> FindTree(List<BlockPointDto> trees, String rowKey, List<BlockPointDto> blockPoints)
+        {
+            if (!string.IsNullOrEmpty(rowKey))
+            {
+                foreach (BlockPointDto tree in trees)
+                {
+                    if (tree.RowKey.Equals(rowKey))
+                    {
+                        blockPoints.Add(tree);
+                    }
+
+                    if (null != tree.Children && tree.Children.Count > 0)
+                    {
+                        FindTree(tree.Children, rowKey, blockPoints);
+                    }
+                }
+            }
+            else
+            {
+                blockPoints = trees;
+            }
+            return blockPoints;
+        }
+
+        private async Task<List<T>> Delete<T>(JsonElement request, ResponseBuilder builder) where T : ID
+        {
+            List<T> schoolBlocks = null;
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
+            var emobj = request.EnumerateObject();
+            int keys = 0;
+            while (emobj.MoveNext())
+            {
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
+            }
+            if (keys > 0)
+            {
+                schoolBlocks = await _azureCosmos.FindByDict<T>(request);
+                Type t = typeof(T);
+                List<T> list = new List<T>();
+                if (schoolBlocks.IsNotEmpty())
+                {
+                    List<IdPk> idPks = await _azureCosmos.DeleteAll<T>(schoolBlocks);
+                    if (idPks.IsNotEmpty())
+                    {
+                        builder.Data("删除成功");
+                    }
+                    else
+                    {
+                        builder.Error(ResponseCode.FAILED, "删除失败!");
+
+                    }
+
+                }
+                else
+                {
+
+
+                }
+            }
+            else { builder.Error(ResponseCode.PARAMS_ERROR, "参数未定义!"); }
+            return schoolBlocks;
+        }
+
+        private async Task<List<IdPk>> DeleteKnowledge(List<IdPk> listPid)
+        {
+            List<IdPk> idPks = await _azureCosmos.DeleteAll<Knowledge>(listPid);
+            foreach (IdPk Knowledge in idPks)
+            {
+                List<Knowledge> knowledges = await _azureCosmos.FindSQL<Knowledge>($"select value(c) from c join A0  in c.points where 1=1 and c.pk='Knowledge'  and  c.type = 0 and A0 =  '" + Knowledge.id + "' ");
+                List<Resource> Resources = await _azureCosmos.FindSQL<Resource>($"select value(c) from c join A0  in c.points where 1=1 and c.pk='Resource' and  c.type = 0 and A0 =  '" + Knowledge.id + "' ");
+                foreach (Knowledge knowledge in knowledges) knowledge.points.Remove(Knowledge.id);
+                foreach (Resource Resource in Resources) Resource.points.Remove(Knowledge.id);
+                await _azureCosmos.SaveOrUpdateAll(Resources);
+                await _azureCosmos.SaveOrUpdateAll(knowledges);
+            }
+            return idPks;
+        }
+
+        private async Task<List<Knowledge>> SaveOrUpdateKnowledge(List<Knowledge> request)
+        {
+            foreach (Knowledge item in request)
+            {
+                if (item.id == null)
+                {
+                    item.id = _snowflakeId.NextId() + "";
+                }
+                if (item.type == 1 && item.points.Count > 0)
+                {
+                    List<string> vs = item.points;
+                    foreach (string s in vs)
+                    {
+                        List<Knowledge> knowledges = await _azureCosmos.FindByDict<Knowledge>(new Dictionary<string, object>() { { "id", s } });
+                        foreach (Knowledge knowledge in knowledges)
+                        {
+                            knowledge.points.Remove(item.id);
+                            knowledge.points.Add(item.id);
+                        }
+                        await _azureCosmos.SaveOrUpdateAll(knowledges);
+                    }
+                    item.points.Clear();
+                }
+            }
+            List<Knowledge> ts = await _azureCosmos.SaveOrUpdateAll(request);
+            return ts;
+        }
+
+        #endregion
     }
 }

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

@@ -18,14 +18,14 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class ResourceController : BaseController
     {
-        private AzureStorageFactory _table;
-        private AzureCosmosFactory _cosmos;
-        private SnowflakeId SnowflakeId;
-        public ResourceController(AzureStorageFactory table, AzureCosmosFactory cosmos, SnowflakeId _SnowflakeId)
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
+        public ResourceController(AzureStorageFactory azureStorage, AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId)
         {
-            _table = table;
-            _cosmos = cosmos;
-            SnowflakeId = _SnowflakeId;
+            _azureStorage = azureStorage;
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
         }
 
         /// <summary>
@@ -44,11 +44,11 @@ namespace TEAMModelOS.Controllers
                 {
                     if (item.id == null)
                     {
-                        item.id = SnowflakeId.NextId()+""; //item.sha1Code + "-" + item.extension + "-" + item.size;
+                        item.id = _snowflakeId.NextId()+""; //item.sha1Code + "-" + item.extension + "-" + item.size;
                         
                     }
                 }
-                List<Resource> ts = await _cosmos.SaveOrUpdateAll(resource);
+                List<Resource> ts = await _azureCosmos.SaveOrUpdateAll(resource);
                 builder.Data("保存或新增成功");
             }
             return builder.build();
@@ -68,7 +68,7 @@ namespace TEAMModelOS.Controllers
             if (StringHelper.getKeyCount(request) > 0)
             {
                 List<Resource> data = new List<Resource>();
-                data = await _cosmos.FindByDict<Resource>(request);
+                data = await _azureCosmos.FindByDict<Resource>(request);
 
                 return builder.Data(data.OrderBy(m => m.createTime)).Extend(new Dictionary<string, object> { { "count", data.IsNotEmpty() ? data.Count : 0 } }).build();
             }
@@ -93,7 +93,7 @@ namespace TEAMModelOS.Controllers
             if (request != null)
             {
                 List<Resource> data = new List<Resource>();
-                data = await _cosmos.FindByIds<Resource>(request);
+                data = await _azureCosmos.FindByIds<Resource>(request);
 
                 return builder.Data(data.OrderBy(m => m.createTime)).Extend(new Dictionary<string, object> { { "count", data.IsNotEmpty() ? data.Count : 0 } }).build();
 
@@ -144,11 +144,11 @@ namespace TEAMModelOS.Controllers
             }
             if (keys > 0)
             {
-                List<T> schoolBlocks = await _cosmos.FindByDict<T>(request);
+                List<T> schoolBlocks = await _azureCosmos.FindByDict<T>(request);
                 Type t = typeof(T);
                 if (schoolBlocks.IsNotEmpty())
                 {
-                    await _cosmos.DeleteAll<T>(schoolBlocks);
+                    await _azureCosmos.DeleteAll<T>(schoolBlocks);
                     builder.Data("删除成功");
                 }
 
@@ -177,7 +177,7 @@ namespace TEAMModelOS.Controllers
                 dict[emobj.Current.Name] = emobj.Current.Value;
             }
             List<ResourceReference> data = new List<ResourceReference>();
-            data = await _table.FindListByDict<ResourceReference>(dict);
+            data = await _azureStorage.FindListByDict<ResourceReference>(dict);
             return builder.Data(data.OrderBy(m => m.CreateTime)).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
         }
     }

+ 288 - 30
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

@@ -3,15 +3,15 @@ using System.Collections.Generic;
 using System.Threading.Tasks;
 using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
-using TEAMModelOS.SDK.Extension.SnowFlake;
+
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using System;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using System.Linq; 
+using System.Linq;
 using TEAMModelOS.Service.Models;
-using TEAMModelOS.Service.Services.Implement;
 using System.Text.Json;
+using TEAMModelOS.SDK.Extension;
 
 namespace TEAMModelOS.Controllers
 {
@@ -20,13 +20,12 @@ namespace TEAMModelOS.Controllers
     //[Authorize]
     public class SyllabusController : BaseController
     {
-        private AzureCosmosFactory azureCosmosDBRepository;
-         
+        private readonly AzureCosmosFactory _azureCosmos;
+
 
-        public SyllabusController(AzureCosmosFactory azureCosmosDBRepository )
+        public SyllabusController(AzureCosmosFactory azureCosmos)
         {
-            this.azureCosmosDBRepository = azureCosmosDBRepository;
-           
+            _azureCosmos = azureCosmos;
         }
 
 
@@ -39,7 +38,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> SaveOrUpdateAsTree(List<SyllabusTree> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<SyllabusTree> treess = await SyllabusService.SaveOrUpdateAsTree(azureCosmosDBRepository,request);
+            List<SyllabusTree> treess = await SaveOrUpdateToTree(request);
             return builder.Data(treess).build();
         }
 
@@ -53,7 +52,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> SaveOrUpdateAsNodes(List<SyllabusNode> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Syllabus> syllabuses = await SyllabusService.SaveOrUpdateAsNodes(azureCosmosDBRepository, request);
+            List<Syllabus> syllabuses = await SaveOrUpdateToNodes(request);
             if (syllabuses.IsNotEmpty()) return builder.Data(request).build();
             else return builder.Data(syllabuses).build();
         }
@@ -75,7 +74,7 @@ namespace TEAMModelOS.Controllers
             }
             if (dict.Keys.Count > 0)
             {
-                List<Syllabus> syllabuses = await SyllabusService.DeleteSyllabus(azureCosmosDBRepository ,dict);
+                List<Syllabus> syllabuses = await DeleteSyllabus(dict);
 
                 if (syllabuses.IsNotEmpty())
                 {
@@ -87,16 +86,88 @@ namespace TEAMModelOS.Controllers
 
                 }
             }
-            else {
+            else
+            {
                 return builder.Error(ResponseCode.PARAMS_ERROR, "参数异常!").build();
             }
-            
-            
+
+
+        }
+
+        /// <summary>
+        /// 查找课纲 
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("find")]
+        public async Task<BaseResponse> Find(JsonElement request)
+        {
+            ResponseBuilder builder = ResponseBuilder.custom();
+            Dictionary<string, object> dict = new Dictionary<string, object>();
+            var emobj = request.EnumerateObject();
+            while (emobj.MoveNext())
+            {
+                dict[emobj.Current.Name] = emobj.Current.Value;
+            }
+            List<SyllabusTree> treess = await Find(dict);
+            return builder.Data(treess).build();
         }
 
-       
 
-        public static async Task<List<SyllabusNode>> FindByPid(SyllabusNode data, List<SyllabusNode> nodes, List<SyllabusNode> nodedata)
+        #region private       
+
+        /// <summary>
+        /// 查找课纲 
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        private async Task<List<SyllabusTree>> Find(Dictionary<string, object> request)
+        {
+            Dictionary<string, object> dict = new Dictionary<string, object>();
+            foreach (KeyValuePair<string, object> keyValuePair in request)
+            {
+                dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
+            }
+            List<Syllabus> data = await _azureCosmos.FindByDict<Syllabus>(dict);
+            List<SyllabusTree> treess = new List<SyllabusTree>();
+            if (data.IsNotEmpty())
+            {
+                Dictionary<string, Syllabus> syllabuses = new Dictionary<string, Syllabus>();
+                data.ForEach(x => syllabuses.TryAdd(x.id, x));
+                data = new List<Syllabus>(syllabuses.Values);
+
+                foreach (Syllabus item in data)
+                {
+
+                    List<SyllabusNode> nodedata = item.children;
+                    if (request.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();
+            }
+            // else return builder.Data(data).build();
+            return treess;
+
+        }
+
+        private async Task<List<SyllabusNode>> FindByPid(SyllabusNode data, List<SyllabusNode> nodes, List<SyllabusNode> nodedata)
         {
             foreach (SyllabusNode syllabus in nodedata)
             {
@@ -110,26 +181,213 @@ namespace TEAMModelOS.Controllers
         }
 
 
+        private async Task<List<Syllabus>> SaveOrUpdateToNodes(List<SyllabusNode> syllabusNodes)
+        {
+            List<Syllabus> syllabuses;
+
+            List<Syllabus> data = await _azureCosmos.FindByDict<Syllabus>(new Dictionary<string, object> { { "id", syllabusNodes[0].code } });
+            if (data.IsEmpty())
+            {
+                var syllabus = new Syllabus { id = syllabusNodes[0].code, code = syllabusNodes[0].code, children = new List<SyllabusNode>() };
+                await _azureCosmos.SaveOrUpdate(syllabus);
+                data = new List<Syllabus>() { syllabus };
+            }
+            List<SyllabusNode> syllabusNodes1 = new List<SyllabusNode>();
+            if (data.IsNotEmpty())
+            {
+                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].code == syllabusNodes[j].code)
+                        {
+                            syllabusNodes1.Remove(data[0].children[i]);
+                            syllabusNodes1.Add(syllabusNodes[j]);
+                            syllabusNodes.Remove(syllabusNodes[j]);
+                        }
+                    }
+                }
+                data[0].children = syllabusNodes1;
 
-        /// <summary>
-        /// 查找课纲 
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [HttpPost("find")]
-        public async Task<BaseResponse> Find(JsonElement request)
+                //新增
+                data[0].children.AddRange(syllabusNodes);
+
+                if (data[0].children.IsNotEmpty())
+                {
+                    var len = data[0].children.Count;
+                    for (int i = 0; i < len; i++)
+                    {
+                        if (data[0].children[i].items.IsNotEmpty())
+                        {
+                            data[0].children[i].item = true;
+                        }
+                        if (data[0].children[i].resources.IsNotEmpty())
+                        {
+                            data[0].children[i].resource = true;
+                        }
+                    }
+                }
+                syllabuses = await _azureCosmos.SaveOrUpdateAll<Syllabus>(data);
+
+            }
+            else
+            {
+                throw new BizException("保存失败", ResponseCode.FAILED);
+
+            }
+
+            return syllabuses;
+        }
+
+        private async Task<List<SyllabusTree>> SaveOrUpdateToTree(List<SyllabusTree> request)
+        {
+            List<SyllabusNode> nodes = new List<SyllabusNode>();
+            Syllabus syllabus = new Syllabus();
+
+            TreeToList(request, nodes);
+            // List<SyllabusNode> nods = nodes.ToJson().FromJson<List<SyllabusNode>>() ;
+            syllabus.children = nodes;
+            syllabus.id = request[0].code;
+            syllabus.code = request[0].code;
+            await _azureCosmos.SaveOrUpdate<Syllabus>(syllabus);
+            List<SyllabusTree> treess = ListToTree(nodes);
+            return treess;
+        }
+
+        private List<SyllabusNode> TreeToList(List<SyllabusTree> trees, List<SyllabusNode> nodes)
+        {
+            int index = 0;
+            foreach (SyllabusTree tr in trees)
+            {
+                tr.order = index;
+                index++;
+            }
+            trees = trees.OrderBy(x => x.order).ToList();
+            nodes.AddRange(trees.ToJsonString().ToObject<List<SyllabusNode>>());
+
+            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 = noes.ToJsonString().ToObject<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)
+            {
+                blockDict.TryAdd(s.First().id, s.First());
+            }
+            return GetChild(list, blockDict);
+        }
+
+        private List<SyllabusTree> GetChild(List<SyllabusTree> list, Dictionary<string, SyllabusTree> dict)
+        {
+            //  list = list.OrderBy(m => m.Order).ToList();
+            List<SyllabusTree> trees = new List<SyllabusTree>();
+            trees = trees.OrderBy(x => x.order).ToList();
+            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;
+        }
+
+        private async Task<List<Syllabus>> DeleteSyllabus(Dictionary<string, object> request)
         {
-            ResponseBuilder builder = ResponseBuilder.custom();
             Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
+            foreach (KeyValuePair<string, object> keyValuePair in request)
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
             }
-            List<SyllabusTree> treess = await SyllabusService.Find(azureCosmosDBRepository, dict);
-            return builder.Data(treess).build();
+
+            List<Syllabus> data = await _azureCosmos.FindByDict<Syllabus>(dict);
+            Dictionary<string, Syllabus> syllabuses = new Dictionary<string, Syllabus>();
+            List<Syllabus> data1 = new List<Syllabus>();
+            if (data.Count > 0)
+            {
+                data.ForEach(x => syllabuses.TryAdd(x.id, x));
+                data = new List<Syllabus>(syllabuses.Values);
+
+                //是否全删
+                bool flg = false;
+                foreach (Syllabus item in data)
+                {
+                    List<SyllabusNode> nodedata = item.children;
+                    if (request.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 _azureCosmos.DeleteAsync<Syllabus>(item.id, item.code);
+                        flg = true;
+                    }
+                }
+                if (!flg)
+                {
+                    data1 = await _azureCosmos.SaveOrUpdateAll<Syllabus>(data);
+
+                }
+
+
+                //if (flg)
+                //{
+
+                //    return builder.Data("全部删除成功").build();
+                //}
+                //else
+                //{
+                //    List<Syllabuses> data1 = await azureCosmosDBRepository.SaveOrUpdateAll<Syllabuses>(data);
+                //    return builder.Data(data1).build();
+                //}
+
+
+            }
+            return data1;
         }
+        #endregion
+
 
-        
     }
 }

+ 114 - 12
TEAMModelOS/Controllers/Syllabus/VolumeController.cs

@@ -6,13 +6,12 @@ using System.Text;
 using System.Threading.Tasks;
 using TEAMModelOS.SDK.Context.Exception;
 using TEAMModelOS.SDK;
-using TEAMModelOS.SDK.Extension.SnowFlake;
+
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;
 using TEAMModelOS.SDK.DI; 
 using TEAMModelOS.Service.Models;
 using Org.BouncyCastle.Ocsp;
-using TEAMModelOS.Service.Services.Implement;
 using System.Text.Json;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
@@ -22,12 +21,13 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class VolumeController : BaseController
     {
-        private AzureCosmosFactory azureCosmosDBRepository;
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
 
-        public VolumeController(AzureCosmosFactory azureCosmosDBRepository )
+        public VolumeController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId)
         {
-            this.azureCosmosDBRepository = azureCosmosDBRepository;
-            
+            _azureCosmos = azureCosmos;
+            _snowflakeId = snowflakeId;
         }
 
 
@@ -40,7 +40,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Upsert(Volume request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Volume> volume = await VolumeService.SaveOrUpdateVolume(azureCosmosDBRepository,request);
+            List<Volume> volume = await SaveOrUpdateVolume(request);
             return builder.Data(volume.IsEmpty() ? null : volume[0]).build();
         }
 
@@ -64,7 +64,7 @@ namespace TEAMModelOS.Controllers
                     {
                         request
                     };
-                    await azureCosmosDBRepository.SaveOrUpdateAll<Volume>(volumes);
+                    await _azureCosmos.SaveOrUpdateAll<Volume>(volumes);
                     flag = true;
                 //}
                 //else
@@ -90,8 +90,8 @@ namespace TEAMModelOS.Controllers
             List<Volume> volumes ;
             if (request.TryGetProperty("code", out JsonElement code))
             {
-                List<Syllabus> syllabuses = await azureCosmosDBRepository.FindByDict<Syllabus>(new Dictionary<string, object> { { "code",code.ToString() } });
-                volumes = await azureCosmosDBRepository.FindByDict<Volume>(request);
+                List<Syllabus> syllabuses = await _azureCosmos.FindByDict<Syllabus>(new Dictionary<string, object> { { "code",code.ToString() } });
+                volumes = await _azureCosmos.FindByDict<Volume>(request);
                 //处理单个册别下面的资源和题目
                 volumes.ForEach(v => {
                     
@@ -141,13 +141,13 @@ namespace TEAMModelOS.Controllers
 
             List<List<List<int>>> sCount = new List<List<List<int>>>();
             if (StringHelper.getKeyCount(request) > 0) {
-                List<School> sc = await azureCosmosDBRepository.FindByDict<School>(request);
+                List<School> sc = await _azureCosmos.FindByDict<School>(request);
                 //查询校本所有册别数据
                 Dictionary<string, object> scMap = new Dictionary<string, object>
             {
                  { "status", 1}
             };
-                List<Volume> volumeo = await azureCosmosDBRepository.FindByDict<Volume>(scMap);
+                List<Volume> volumeo = await _azureCosmos.FindByDict<Volume>(scMap);
                 
                 for (int i = 0; i < sc.Count; i++)
                 {
@@ -188,5 +188,107 @@ namespace TEAMModelOS.Controllers
             
             return builder.Data(sCount).build();
         }
+
+
+
+        #region private
+
+        public async Task<List<Volume>> SaveOrUpdateVolume(Volume request)
+        {
+            if (request.editors != null && request.editors.Count > 5)
+            {
+                throw new BizException("共编人数大于5人!");
+            }
+            if (string.IsNullOrEmpty(request.id))
+            {
+                if (request.type == 0)
+                {
+                    List<Volume> volumesFind = await _azureCosmos.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "code",request.code},{ "periodCode", request.periodCode},
+                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
+                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
+                        { "status",1} ,{ "type",0} });
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        throw new BizException("已存在!", ResponseCode.DATA_EXIST);
+                    }
+                    //校本课纲
+                    string key = request.code + _snowflakeId.NextId();
+                    request.id = key;
+                    request.volumeCode = key;
+                }
+                else if (request.type == 1)
+                {
+                    List<Volume> volumesFind = await _azureCosmos.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "code",request.code},{ "periodCode", request.periodCode},
+                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
+                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
+                        { "TEAMModelId",request.TEAMModelId}, { "status",1} ,{ "type",1} });
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        throw new BizException("已存在!", ResponseCode.DATA_EXIST);
+                    }
+                    //个人课纲
+                    string key = "dynamic" + request.TEAMModelId.Replace("#", "") + _snowflakeId.NextId();
+                    request.id = key;
+                    request.volumeCode = key;
+                }
+                else if (request.type == 2)
+                {
+                    //系统课纲
+                    string key = "system" + _snowflakeId.NextId();
+                    request.code = "system";
+                    request.id = key;
+                    request.volumeCode = key;
+                }
+            }
+            else
+            {
+                if (request.type == 0)
+                {
+                    List<Volume> volumesFind = await _azureCosmos.FindByDict<Volume>(new Dictionary<string, object>() {
+                    { "code",request.code},{ "periodCode", request.periodCode},
+                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
+                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName}  ,
+                        { "status",1} ,{ "type",0} });
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        if (!volumesFind[0].id.Equals(request.id))
+                        {
+                            throw new BizException("已存在!", ResponseCode.DATA_EXIST);
+                        }
+                    }
+                }
+                else if (request.type == 1)
+                {
+                    List<Volume> volumesFind = await _azureCosmos.FindByDict<Volume>(new Dictionary<string, object>() {
+                        { "code",request.code},{ "periodCode", request.periodCode},
+                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
+                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
+                        { "TEAMModelId",request.TEAMModelId}, { "status",1} ,{ "type",1} });
+                    if (volumesFind.IsNotEmpty())
+                    {
+                        if (!volumesFind[0].id.Equals(request.id))
+                        {
+                            throw new BizException("已存在!", ResponseCode.DATA_EXIST);
+                        }
+                    }
+
+                }
+                else if (request.type == 2)
+                {
+                }
+
+            }
+            List<Volume> volumes = new List<Volume>
+            {
+                request
+            };
+            List<Volume> volume = await _azureCosmos.SaveOrUpdateAll<Volume>(volumes);
+            return volume;
+        }
+
+
+        #endregion
     }
 }

+ 28 - 30
TEAMModelOS/Controllers/Task/HomeworkController.cs

@@ -17,7 +17,6 @@ using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.DI; 
 using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
-using TEAMModelOS.Service.Services.Learn.Implements;
 using System.Text.Json;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using TEAMModelOS.SDK.Extension;
@@ -31,15 +30,14 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class HomeworkController : ControllerBase
     {
-        private SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory _cosmos;
-       
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;       
         private readonly AzureServiceBusFactory _serviceBus;
-        public HomeworkController(AzureCosmosFactory cosmos , AzureServiceBusFactory serviceBus , SnowflakeId _SnowflakeId)
+        public HomeworkController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus , SnowflakeId snowflakeId)
         {
-            _cosmos = cosmos;
+            _azureCosmos = azureCosmos;            
+            _snowflakeId = snowflakeId;
             _serviceBus = serviceBus;
-            SnowflakeId = _SnowflakeId;
         }
 
 
@@ -59,7 +57,7 @@ namespace TEAMModelOS.Controllers.Learn
             {
                 homeWork.status = 100;
             }
-            List<Homework> homeWorks1 = await _cosmos.UpdateAll<Homework>(homeWorks);
+            List<Homework> homeWorks1 = await _azureCosmos.UpdateAll<Homework>(homeWorks);
 
             //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
             List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", homeWorkId.ToString() } });
@@ -67,7 +65,7 @@ namespace TEAMModelOS.Controllers.Learn
             {
 
                 //TODO 删除上传的文件
-                await _cosmos.DeleteAll(homeWorkStudents);
+                await _azureCosmos.DeleteAll(homeWorkStudents);
             }
             return builder.Data(homeWorks1).build();
         }
@@ -81,11 +79,11 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> Delete(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            IdPk idPk = await _cosmos.DeleteAsync<Homework>(request);
+            IdPk idPk = await _azureCosmos.DeleteAsync<Homework>(request);
             //按作业id删除提交记录
-            List<HomeworkRecord> homeWorkStudents =  await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", idPk.id } });
+            List<HomeworkRecord> homeWorkStudents =  await _azureCosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", idPk.id } });
             //TODO 删除上传的文件
-            await _cosmos.DeleteAll<HomeworkRecord>(homeWorkStudents);
+            await _azureCosmos.DeleteAll<HomeworkRecord>(homeWorkStudents);
             return builder.Data(idPk).build();
         }
 
@@ -103,7 +101,7 @@ namespace TEAMModelOS.Controllers.Learn
             if (string.IsNullOrEmpty(request.homeWork.id))
 
             {
-                request.homeWork.id = SnowflakeId.NextId()+"";
+                request.homeWork.id = _snowflakeId.NextId()+"";
                 request.homeWork.status = 100;
                 request.reset = true;
                 request.homeWork.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
@@ -119,8 +117,8 @@ namespace TEAMModelOS.Controllers.Learn
             {
                 //TimerWork<HomeWork>(request.@params.homeWork.startTime,new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
                 //设定开始时间
-                string msgId = SnowflakeId.NextId() + "";
-                long SequenceNumber =  await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.homeWork.id, request.homeWork.code, request.homeWork.startTime,200, msgId);
+                string msgId = _snowflakeId.NextId() + "";
+                long SequenceNumber =  await _serviceBus.GetServiceBusClient().SendLeamMessage<Homework>(Constants.TopicName, request.homeWork.id, request.homeWork.code, request.homeWork.startTime,200, msgId);
                 request.homeWork.sequenceNumber = SequenceNumber;
 
                 //serviceBusReviceService.ReciveMessageAsync();
@@ -134,11 +132,11 @@ namespace TEAMModelOS.Controllers.Learn
                 else  request.homeWork.status = 100;
             }
 
-            Homework homeWork = await _cosmos.SaveOrUpdate<Homework>(request.homeWork);
+            Homework homeWork = await _azureCosmos.SaveOrUpdate<Homework>(request.homeWork);
 
             //设定结束时间
-            string msgEndId = SnowflakeId.NextId() + "";
-            await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.homeWork.id, request.homeWork.code, request.homeWork.endTime,300, msgEndId);
+            string msgEndId = _snowflakeId.NextId() + "";
+            await _serviceBus.GetServiceBusClient().SendLeamMessage<Homework>(Constants.TopicName, request.homeWork.id, request.homeWork.code, request.homeWork.endTime,300, msgEndId);
             //_timerWorkService.TimerWork<Homework>(request.@params.homeWork.endTime, 300, new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
             //清除作业
             if (request.reset)
@@ -149,10 +147,10 @@ namespace TEAMModelOS.Controllers.Learn
                // foreach (Target target in targets)
                // {
                     //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
-                    List<HomeworkRecord> homeWorks = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", request.homeWork.id } });
+                    List<HomeworkRecord> homeWorks = await _azureCosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "id", request.homeWork.id } });
                     if (homeWorks.IsNotEmpty())
                     {
-                        await _cosmos.DeleteAll(homeWorks);
+                        await _azureCosmos.DeleteAll(homeWorks);
                     }
                     //List<ClassStudent> classroom = await _cosmos.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", target.classroomCode }});
                     //if (classroom.IsNotEmpty())
@@ -197,7 +195,7 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> UpsertRecord(List<HomeworkRecord> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            await _cosmos.SaveOrUpdateAll<HomeworkRecord>(request);
+            await _azureCosmos.SaveOrUpdateAll<HomeworkRecord>(request);
             return builder.Data(request).build();
         }
 
@@ -215,7 +213,7 @@ namespace TEAMModelOS.Controllers.Learn
             List<HomeworkFindDto> homeWorkFindDtos = new List<HomeworkFindDto>();
             if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Homework>(request);
+                data = await _azureCosmos.FindByDict<Homework>(request);
                 //判断作业提交信息
                 if (data.IsNotEmpty())
                 {
@@ -224,7 +222,7 @@ namespace TEAMModelOS.Controllers.Learn
                         HomeworkFindDto homeWorkFindDto = new HomeworkFindDto();
                         List<string> pro = new List<string>();
                         pro.Add("submit");
-                        List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(dict: new Dictionary<string, object> { { "id", homeWork.id } }, propertys: pro);
+                        List<HomeworkRecord> homeWorkStudents = await _azureCosmos.FindByDict<HomeworkRecord>(dict: new Dictionary<string, object> { { "id", homeWork.id } }, propertys: pro);
                         int sub = 0;
                         Dictionary<string, object> dict = new Dictionary<string, object>();
                         dict.Add("Sum", homeWorkStudents.Count);
@@ -255,7 +253,7 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<HomeworkRecord>(request);
+                data = await _azureCosmos.FindByDict<HomeworkRecord>(request);
             }
             else
             {
@@ -276,7 +274,7 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> TchScore(HomeworkScoringDto request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.studentId }, { "id", request.homeWorkId } });
+            List<HomeworkRecord> homeWorkStudents = await _azureCosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.studentId }, { "id", request.homeWorkId } });
             HomeworkRecord data = new HomeworkRecord();
             if (homeWorkStudents.IsNotEmpty())
             {
@@ -290,7 +288,7 @@ namespace TEAMModelOS.Controllers.Learn
                 };
 
                 homeWorkStudents[0].tchCmt = homeWorkComment;
-                data = await _cosmos.SaveOrUpdate(homeWorkStudents[0]);
+                data = await _azureCosmos.SaveOrUpdate(homeWorkStudents[0]);
             }
             return builder.Data(data).build();
         }
@@ -306,8 +304,8 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> StuScore(HomeworkCommentDto request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<HomeworkRecord> homeWorkStudents = await _cosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.studentId }, { "id", request.homeWorkId } });
-            List<Homework> homeWorks = await _cosmos.FindByDict<Homework>(new Dictionary<string, object> { { "id", request.homeWorkId } });
+            List<HomeworkRecord> homeWorkStudents = await _azureCosmos.FindByDict<HomeworkRecord>(new Dictionary<string, object> { { "code", request.studentId }, { "id", request.homeWorkId } });
+            List<Homework> homeWorks = await _azureCosmos.FindByDict<Homework>(new Dictionary<string, object> { { "id", request.homeWorkId } });
             HomeworkRecord data = new HomeworkRecord();
             if (homeWorks.IsNotEmpty() && homeWorks[0].other.Contains("comment"))
             {
@@ -318,7 +316,7 @@ namespace TEAMModelOS.Controllers.Learn
                         //评论
                         StudentComment homeWorkComment = new StudentComment
                         {
-                            commentid = SnowflakeId.NextId() + "",
+                            commentid = _snowflakeId.NextId() + "",
                             comment = request.comment,
                             createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(),
                             fromId = request.fromId,
@@ -345,7 +343,7 @@ namespace TEAMModelOS.Controllers.Learn
                             }
                         }
                     }
-                    data = await _cosmos.Update(homeWorkStudents[0]);
+                    data = await _azureCosmos.Update(homeWorkStudents[0]);
                 }
                 return builder.Data(data).build();
             }

+ 23 - 24
TEAMModelOS/Controllers/Task/LearnController.cs

@@ -11,7 +11,6 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
 using TEAMModelOS.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common; 
-using TEAMModelOS.Service.Services.Learn.Implements;
 using System.Text.Json;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 using Org.BouncyCastle.Ocsp;
@@ -25,14 +24,14 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class LearnController: BaseController
     {
-        private SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory cosmosDBV3Repository;
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;
         private readonly AzureServiceBusFactory _serviceBus;
-        public LearnController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
+        public LearnController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
         {
-            SnowflakeId = _SnowflakeId;
+            _snowflakeId = snowflakeId;
             _serviceBus = serviceBus;
-            cosmosDBV3Repository = _cosmosDBV3Repository;
+            _azureCosmos = azureCosmos;
         }
 
         /// <summary>
@@ -50,10 +49,10 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (request.endTime > 0) {
                 //设定结束时间
-                string msgEndId = SnowflakeId.NextId()+"";
-                await _serviceBus.SendMessage<LearnTask>(Constants.TopicName, request.id, request.code, request.endTime, 300, msgEndId);
+                string msgEndId = _snowflakeId.NextId()+"";
+                await _serviceBus.GetServiceBusClient().SendLeamMessage<LearnTask>(Constants.TopicName, request.id, request.code, request.endTime, 300, msgEndId);
             }
-            await cosmosDBV3Repository.Save(request);
+            await _azureCosmos.Save(request);
             return builder.Data(request).build();
         }
 
@@ -68,7 +67,7 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request.TryGetProperty("id",out _) || request.TryGetProperty("code",out _))
             {
-                List<LearnTask> tasks = await cosmosDBV3Repository.FindByDict<LearnTask>(request);
+                List<LearnTask> tasks = await _azureCosmos.FindByDict<LearnTask>(request);
                 return builder.Data(tasks).build();
             }
             else {
@@ -85,7 +84,7 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> DeleteTask(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            return builder.Data(await cosmosDBV3Repository.DeleteAsync<LearnTask>(request)).build();
+            return builder.Data(await _azureCosmos.DeleteAsync<LearnTask>(request)).build();
         }
 
         /// <summary>
@@ -99,13 +98,13 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (string.IsNullOrEmpty(request.id))
             {
-                request.id = SnowflakeId.NextId() + "";
+                request.id = _snowflakeId.NextId() + "";
                 request.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
-                await cosmosDBV3Repository.Save(request);
+                await _azureCosmos.Save(request);
             }
             else
             {
-                await cosmosDBV3Repository.Update(request);
+                await _azureCosmos.Update(request);
             }
             return builder.Data(request).build();
         }
@@ -124,7 +123,7 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (StringHelper.getKeyCount(request) > 0)
             {
-                return builder.Data(await cosmosDBV3Repository.FindByDict<LearnUnit>(request)).build();
+                return builder.Data(await _azureCosmos.FindByDict<LearnUnit>(request)).build();
             }
             else {
                 return builder.build();
@@ -140,7 +139,7 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> DeleteUnit(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            return builder.Data(await cosmosDBV3Repository.DeleteAsync<LearnUnit>(request)).build();
+            return builder.Data(await _azureCosmos.DeleteAsync<LearnUnit>(request)).build();
         }
 
         /// <summary>
@@ -154,12 +153,12 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (string.IsNullOrEmpty(request.id))
             {
-                request.id = SnowflakeId.NextId() + "";
+                request.id = _snowflakeId.NextId() + "";
                 request.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
-                await cosmosDBV3Repository.Save<LearnProcess>(request);
+                await _azureCosmos.Save<LearnProcess>(request);
             }
             else {
-                await cosmosDBV3Repository.Update<LearnProcess>(request);
+                await _azureCosmos.Update<LearnProcess>(request);
             }
            
             return builder.Data(request).build();
@@ -177,7 +176,7 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (StringHelper.getKeyCount(request) > 0) {
 
-                builder.Data(await cosmosDBV3Repository.FindByDict<LearnProcess>(request));
+                builder.Data(await _azureCosmos.FindByDict<LearnProcess>(request));
             }
 
             return builder.build();
@@ -194,7 +193,7 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request != null)
             {
-                builder.Data(await cosmosDBV3Repository.DeleteAsync<LearnProcess>(request));
+                builder.Data(await _azureCosmos.DeleteAsync<LearnProcess>(request));
             }
             return builder.build();
         }
@@ -217,7 +216,7 @@ namespace TEAMModelOS.Controllers.Learn
                      
                     }
                 });
-                List<LearnRecord> leanProcesses = await cosmosDBV3Repository.SaveOrUpdateAll<LearnRecord>(request);
+                List<LearnRecord> leanProcesses = await _azureCosmos.SaveOrUpdateAll<LearnRecord>(request);
                 builder.Data(leanProcesses);
             }
             return builder.build();
@@ -234,7 +233,7 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (StringHelper.getKeyCount(request) > 0)
             {
-                builder.Data(await cosmosDBV3Repository.FindByDict<LearnRecord>(request));
+                builder.Data(await _azureCosmos.FindByDict<LearnRecord>(request));
             }
             return builder.build();
         }
@@ -251,7 +250,7 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request != null)
             {
-                builder.Data(await cosmosDBV3Repository.DeleteAsync<LearnRecord>(request));
+                builder.Data(await _azureCosmos.DeleteAsync<LearnRecord>(request));
             }
             return builder.build();
         }

+ 24 - 25
TEAMModelOS/Controllers/Task/SurveyController.cs

@@ -10,7 +10,6 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
-using TEAMModelOS.Service.Services.Learn.Implements;
 using System.Text.Json;
 
 namespace TEAMModelOS.Controllers
@@ -22,15 +21,15 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class SurveyController : BaseController
     {
-        private readonly AzureCosmosFactory azureCosmosDBV3Repository;
-        private SnowflakeId SnowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly SnowflakeId _snowflakeId;
         private readonly AzureServiceBusFactory _serviceBus;
-        public SurveyController(AzureCosmosFactory _azureCosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
+        public SurveyController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
         {
-            SnowflakeId= _SnowflakeId;
+            _snowflakeId= snowflakeId;
             //  _timerWorkService = timerWorkService;
             _serviceBus = serviceBus;
-              azureCosmosDBV3Repository = _azureCosmosDBV3Repository;
+              _azureCosmos = azureCosmos;
         }
 
         /// <summary>
@@ -45,7 +44,7 @@ namespace TEAMModelOS.Controllers
             //新增
             if (string.IsNullOrEmpty(request.survey.id))
             {
-                request.survey.id = SnowflakeId.NextId()+"";
+                request.survey.id = _snowflakeId.NextId()+"";
                 request.survey.status = 100;
             }
             if (request.survey.publishModel.Equals("0"))
@@ -56,28 +55,28 @@ namespace TEAMModelOS.Controllers
             else if (request.survey.publishModel.Equals("1"))
             {
 
-                string msgId = SnowflakeId.NextId() + "";
-                long SequenceNumber = await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.survey.id, request.survey.code, request.survey.startTime, 200, msgId);
+                string msgId = _snowflakeId.NextId() + "";
+                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Survey>(Constants.TopicName, request.survey.id, request.survey.code, request.survey.startTime, 200, msgId);
                 request.survey.sequenceNumber = SequenceNumber;
 
             }
 
 
 
-            Survey homeWork = await azureCosmosDBV3Repository.SaveOrUpdate<Survey>(request.survey);
+            Survey homeWork = await _azureCosmos.SaveOrUpdate<Survey>(request.survey);
 
             //设定结束时间
-            string msgEndId = SnowflakeId.NextId() + "";
-            await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.survey.id, request.survey.code, request.survey.endTime, 300, msgEndId);
+            string msgEndId = _snowflakeId.NextId() + "";
+            await _serviceBus.GetServiceBusClient().SendLeamMessage<Survey>(Constants.TopicName, request.survey.id, request.survey.code, request.survey.endTime, 300, msgEndId);
 
             //清除作业
             if (!request.reset)
             {
                 //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
-                List<SurveyRecord> surveyRecords = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", request.survey.id } });
+                List<SurveyRecord> surveyRecords = await _azureCosmos.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", request.survey.id } });
                 if (surveyRecords.IsNotEmpty())
                 {
-                    await azureCosmosDBV3Repository.DeleteAll(surveyRecords);
+                    await _azureCosmos.DeleteAll(surveyRecords);
                 }
 
                 ////根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
@@ -137,7 +136,7 @@ namespace TEAMModelOS.Controllers
             if (dict.Keys.Count > 0)
             { 
                 
-                data = await azureCosmosDBV3Repository.FindByDict<Survey>(dict, props);
+                data = await _azureCosmos.FindByDict<Survey>(dict, props);
             }
             else
             {
@@ -165,7 +164,7 @@ namespace TEAMModelOS.Controllers
             List<Survey> data = new List<Survey>();
             if (dict.Keys.Count > 0)
             {
-                data = await azureCosmosDBV3Repository.FindByDict<Survey>(dict);
+                data = await _azureCosmos.FindByDict<Survey>(dict);
             }
             else
             {
@@ -184,13 +183,13 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Delete(List<IdPk> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<IdPk> idPks = await azureCosmosDBV3Repository.DeleteAll<Survey>(request);
+            List<IdPk> idPks = await _azureCosmos.DeleteAll<Survey>(request);
             if (idPks.IsNotEmpty())
             {
                 foreach (IdPk idPk in idPks)
                 {
-                    List<SurveyRecord> surveys = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", idPk.id } });
-                    await azureCosmosDBV3Repository.DeleteAll(surveys);
+                    List<SurveyRecord> surveys = await _azureCosmos.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", idPk.id } });
+                    await _azureCosmos.DeleteAll(surveys);
                 }
                 builder.Data(idPks);
             }
@@ -211,19 +210,19 @@ namespace TEAMModelOS.Controllers
         {
             request.TryGetProperty("id", out JsonElement surveyId);
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Survey> surveys = await azureCosmosDBV3Repository.FindByDict<Survey>(new Dictionary<string, object> { { "id", surveyId.ToString() } });
+            List<Survey> surveys = await _azureCosmos.FindByDict<Survey>(new Dictionary<string, object> { { "id", surveyId } });
 
             foreach (Survey survey in surveys)
             {
                 survey.status = 100;
             }
-            List<Survey> survey1 = await azureCosmosDBV3Repository.UpdateAll<Survey>(surveys);
+            List<Survey> survey1 = await _azureCosmos.UpdateAll<Survey>(surveys);
 
             //查询之前是否有 关联关系表  有则删除
-            List<SurveyRecord> surveyStudents = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", surveyId.ToString() } });
+            List<SurveyRecord> surveyStudents = await _azureCosmos.FindByDict<SurveyRecord>(new Dictionary<string, object> { { "id", surveyId } });
             if (surveyStudents.IsNotEmpty())
             {
-                await azureCosmosDBV3Repository.DeleteAll(surveyStudents);
+                await _azureCosmos.DeleteAll(surveyStudents);
             }
             return builder.Data(survey1).build();
         }
@@ -247,7 +246,7 @@ namespace TEAMModelOS.Controllers
 
             if (dict.Keys.Count > 0)
             {
-                data = await azureCosmosDBV3Repository.FindByDict<SurveyRecord>(dict);
+                data = await _azureCosmos.FindByDict<SurveyRecord>(dict);
             }
             else
             {
@@ -264,7 +263,7 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> UpsertRecord(List<SurveyRecord> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            await azureCosmosDBV3Repository.SaveOrUpdateAll<SurveyRecord>(request);
+            await _azureCosmos.SaveOrUpdateAll<SurveyRecord>(request);
             return builder.Data(request).build();
         }
          

+ 25 - 26
TEAMModelOS/Controllers/Task/VoteController.cs

@@ -14,7 +14,6 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models; 
 using TEAMModelOS.SDK.Context.Constant.Common;
-using TEAMModelOS.Service.Services.Learn.Implements;
 using System.Text.Json;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
@@ -27,14 +26,14 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class VoteController : BaseController
     {
-        private SnowflakeId SnowflakeId;
-        private readonly AzureCosmosFactory _cosmos;
-       
+        private readonly SnowflakeId _snowflakeId;
+        private readonly AzureCosmosFactory _azureCosmos;       
         private readonly AzureServiceBusFactory _serviceBus;
-        public VoteController(AzureCosmosFactory cosmos, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
+
+        public VoteController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
         {
-            SnowflakeId = _SnowflakeId;
-            _cosmos = cosmos;
+            _snowflakeId = snowflakeId;
+            _azureCosmos = azureCosmos;
             _serviceBus = serviceBus;
         }
 
@@ -51,7 +50,7 @@ namespace TEAMModelOS.Controllers.Learn
             //新增
             if (string.IsNullOrEmpty(request.vote.id))
             {
-                request.vote.id = SnowflakeId.NextId()+"";
+                request.vote.id = _snowflakeId.NextId()+"";
                 request.vote.status = 100;
             }
             if (request.vote.publishModel.Equals("0"))
@@ -61,30 +60,30 @@ namespace TEAMModelOS.Controllers.Learn
                 
             } else if (request.vote.publishModel.Equals("1")) {
 
-                string msgId = SnowflakeId.NextId() + "";
-                long SequenceNumber = await _serviceBus.SendMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime, 200, msgId);
+                string msgId = _snowflakeId.NextId() + "";
+                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime, 200, msgId);
                 request.vote.sequenceNumber = SequenceNumber;
             }
 
 
 
-            Vote homeWork = await _cosmos.SaveOrUpdate<Vote>(request.vote);
+            Vote homeWork = await _azureCosmos.SaveOrUpdate<Vote>(request.vote);
 
             //设定结束时间
             //_timerWorkService.TimerWork<Vote>(request.vote.endTime, 300, new Dictionary<string, object> { { "id", request.vote.id } });
             //设定结束时间
-            string msgEndId = SnowflakeId.NextId() + "";
-            await _serviceBus.SendMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.endTime, 300, msgEndId);
+            string msgEndId = _snowflakeId.NextId() + "";
+            await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.endTime, 300, msgEndId);
             //清除作业
             if (!request.reset)
             {
                 //根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
 
-                List<VoteRecord> voteRecords = await _cosmos.FindByDict<VoteRecord>(new Dictionary<string, object> { { "id", request.vote.id } });
+                List<VoteRecord> voteRecords = await _azureCosmos.FindByDict<VoteRecord>(new Dictionary<string, object> { { "id", request.vote.id } });
 
                 if (voteRecords.IsNotEmpty())
                 {
-                    await _cosmos.DeleteAll(voteRecords);
+                    await _azureCosmos.DeleteAll(voteRecords);
                 }
                 //List<Target> targets = request.@params.vote.target;
                 //List<VoteRecord> votekStudents = new List<VoteRecord>();
@@ -136,7 +135,7 @@ namespace TEAMModelOS.Controllers.Learn
             List<Vote> data = new List<Vote>();
             if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Vote>(request);
+                data = await _azureCosmos.FindByDict<Vote>(request);
             }
             else
             {
@@ -155,13 +154,13 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> Delete(List<IdPk> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<IdPk> idPks = await _cosmos.DeleteAll<Vote>(request);
+            List<IdPk> idPks = await _azureCosmos.DeleteAll<Vote>(request);
             if (idPks.IsNotEmpty())
             {
                 foreach (IdPk idPk in idPks) 
                 { 
-                    List<VoteRecord> votes =  await _cosmos.FindByDict<VoteRecord>(new Dictionary<string, object> {  { "id", idPk.id } });
-                    await _cosmos.DeleteAll(votes);
+                    List<VoteRecord> votes =  await _azureCosmos.FindByDict<VoteRecord>(new Dictionary<string, object> {  { "id", idPk.id } });
+                    await _azureCosmos.DeleteAll(votes);
                 }
                 builder.Data(idPks);
             }
@@ -182,19 +181,19 @@ namespace TEAMModelOS.Controllers.Learn
         {
             request.TryGetProperty("id", out JsonElement voteId);
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<Vote> votes = await _cosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", voteId.ToString() } });
+            List<Vote> votes = await _azureCosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", voteId } });
 
             foreach (Vote vote in votes)
             {
                 vote.status = 100;
             }
-            List<Vote> vote1 = await _cosmos.UpdateAll<Vote>(votes);
+            List<Vote> vote1 = await _azureCosmos.UpdateAll<Vote>(votes);
 
             //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
-            List<VoteRecord> voteStudents = await _cosmos.FindByDict<VoteRecord>(new Dictionary<string, object> { { "id", voteId.ToString() } });
+            List<VoteRecord> voteStudents = await _azureCosmos.FindByDict<VoteRecord>(new Dictionary<string, object> { { "id", voteId } });
             if (voteStudents.IsNotEmpty())
             {
-                await _cosmos.DeleteAll(voteStudents);
+                await _azureCosmos.DeleteAll(voteStudents);
             }
             return builder.Data(vote1).build();
         }
@@ -213,9 +212,9 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<VoteRecord>(request);
+                data = await _azureCosmos.FindByDict<VoteRecord>(request);
                 if (data.IsNotEmpty()) {
-                    List< Vote > votes = await _cosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", data[0].id } });
+                    List< Vote > votes = await _azureCosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", data[0].id } });
                     List<Vote.Option> options2 = votes[0].option;
                     foreach (IGrouping<string, VoteRecord> voteStudents in data.GroupBy(x => x.option))
                     {
@@ -247,7 +246,7 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> UpsertRecord(List<VoteRecord> request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            await _cosmos.SaveOrUpdateAll<VoteRecord>(request);
+            await _azureCosmos.SaveOrUpdateAll<VoteRecord>(request);
             return builder.Data(request).build();
         }
 

+ 0 - 1
TEAMModelOS/Service/Analysis/AchievementService.cs

@@ -9,7 +9,6 @@ namespace TEAMModelOS.Service.Analysis.Implements
 {
     public static class AchievementService 
     {
-       
 
         
         //处理各个班级均分分析

+ 0 - 2
TEAMModelOS/Service/Evaluation/ImportExerciseService.cs

@@ -11,10 +11,8 @@ using System.Text;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using System.Xml.Linq;
-
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.SDK.Extension.SnowFlake;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Common.FileHelper;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;

+ 0 - 42
TEAMModelOS/Service/Learn/ServiceBusService.cs

@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using Azure.Messaging.ServiceBus;
-using TEAMModelOS.SDK.Extension;
-
-namespace TEAMModelOS.Service.Services.Learn.Implements
-{
-    
-    public static class ServiceBusService  
-    {
-
-        public static async Task<long> SendMessage<T>(this AzureServiceBusFactory _serviceBus ,string TopicName, string id,string pk, long startTime, int status, string msgId)
-        { 
-            //微調代碼
-            var timer = DateTimeOffset.FromUnixTimeMilliseconds(startTime);
-            if (timer.CompareTo(DateTimeOffset.UtcNow) <= 0) return -1;
-
-            var  topicClient = _serviceBus.GetServiceBusClient();
-            //设定开始时间
-            Dictionary<string, object> dict = new Dictionary<string, object>() {
-                    { "name",typeof(T).Name},
-                    { "id",id},
-                    { "pk",pk},
-                    { "status",status}
-                };
-            //var msgId = "1";
-            string messageBody = $"Message {dict}";   
-
-            Console.WriteLine($"Sending message: {messageBody}");
-            long SequenceNumber = await topicClient.SendScheduleMessageAsync(TopicName,new ServiceBusMessage( dict.ToJsonString()), timer);            
-            return 0;
-        }
-    }
-}

+ 0 - 57
TEAMModelOS/Service/Syllabus/KnowledgeService.cs

@@ -1,57 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.Implement
-{
-    public static class KnowledgeService  
-    {
-       
-
-        public static async Task<List<IdPk>> DeleteKnowledge(this AzureCosmosFactory _cosmos ,List<IdPk> listPid)
-        {
-            List<IdPk> idPks = await _cosmos.DeleteAll<Knowledge>(listPid);
-            foreach (IdPk Knowledge in idPks)
-            {
-                List<Knowledge> knowledges = await _cosmos.FindSQL<Knowledge>($"select value(c) from c join A0  in c.points where 1=1 and c.pk='Knowledge'  and  c.type = 0 and A0 =  '" + Knowledge.id + "' ");
-                List<Resource> Resources = await _cosmos.FindSQL<Resource>($"select value(c) from c join A0  in c.points where 1=1 and c.pk='Resource' and  c.type = 0 and A0 =  '" + Knowledge.id + "' ");
-                foreach (Knowledge knowledge in knowledges) knowledge.points.Remove(Knowledge.id);
-                foreach (Resource Resource in Resources) Resource.points.Remove(Knowledge.id);
-                await _cosmos.SaveOrUpdateAll(Resources);
-                await _cosmos.SaveOrUpdateAll(knowledges);
-            }
-            return idPks;
-        }
-
-        public static async Task<List<Knowledge>> SaveOrUpdateKnowledge(this AzureCosmosFactory _cosmos, SnowflakeId snowflakeId, List<Knowledge> request)
-        {
-            foreach (Knowledge item in request)
-            {
-                if (item.id == null)
-                {
-                    item.id = snowflakeId.NextId()+"";
-                }
-                if (item.type == 1 && item.points.Count > 0)
-                {
-                    List<string> vs = item.points;
-                    foreach (string s in vs)
-                    {
-                        List<Knowledge> knowledges = await _cosmos.FindByDict<Knowledge>(new Dictionary<string, object>() { { "id", s } });
-                        foreach (Knowledge knowledge in knowledges)
-                        {
-                            knowledge.points.Remove(item.id);
-                            knowledge.points.Add(item.id);
-                        }
-                        await _cosmos.SaveOrUpdateAll(knowledges);
-                    }
-                    item.points.Clear();
-                }
-            }
-            List<Knowledge> ts = await _cosmos.SaveOrUpdateAll(request);
-            return ts;
-        }
-    }
-}

+ 0 - 283
TEAMModelOS/Service/Syllabus/SyllabusService.cs

@@ -1,283 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Exception;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.Helper.Common.JsonHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-using TEAMModelOS.SDK.Extension;
-
-namespace TEAMModelOS.Service.Services.Implement
-{
-    public static class SyllabusService 
-    {
-
-        /// <summary>
-        /// 查找课纲 
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        public static async Task<List<SyllabusTree>> Find(this AzureCosmosFactory azureCosmosDBRepository,  Dictionary<string, object> request)
-        {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            foreach (KeyValuePair<string, object> keyValuePair in request)
-            {
-                dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
-            }
-            List<Syllabus> data = await azureCosmosDBRepository.FindByDict<Syllabus>(dict);
-            List<SyllabusTree> treess = new List<SyllabusTree>();
-            if (data.IsNotEmpty())
-            {
-                Dictionary<string, Syllabus> syllabuses = new Dictionary<string, Syllabus>();
-                data.ForEach(x => syllabuses.TryAdd(x.id, x));
-                data = new List<Syllabus>(syllabuses.Values);
-               
-                foreach (Syllabus item in data)
-                {
-
-                    List<SyllabusNode> nodedata = item.children;
-                    if (request.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();
-            }
-            // else return builder.Data(data).build();
-            return treess;
-
-        }
-
-        public static async Task<List<SyllabusNode>> FindByPid(SyllabusNode data, List<SyllabusNode> nodes, List<SyllabusNode> nodedata)
-        {
-            foreach (SyllabusNode syllabus in nodedata)
-            {
-                if (syllabus.pid == data.id)
-                {
-                    nodes.Add(syllabus);
-                    await FindByPid(syllabus, nodes, nodedata);
-                }
-            }
-            return nodes;
-        }
-        
-
-        public static async Task<List<Syllabus>> SaveOrUpdateAsNodes(this AzureCosmosFactory azureCosmosDBRepository,  List<SyllabusNode> syllabusNodes)
-        {
-            List<Syllabus> syllabuses;
-
-            List<Syllabus> data = await azureCosmosDBRepository.FindByDict<Syllabus>(new Dictionary<string, object> { { "id", syllabusNodes[0].code } });
-            if (data.IsEmpty()) {
-                var syllabus = new Syllabus { id = syllabusNodes[0].code, code = syllabusNodes[0].code, children = new List<SyllabusNode>() };
-                await azureCosmosDBRepository.SaveOrUpdate(syllabus);
-                data = new List<Syllabus>() { syllabus };
-            }
-            List<SyllabusNode> syllabusNodes1 = new List<SyllabusNode>();
-            if (data.IsNotEmpty())
-            {
-                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].code == syllabusNodes[j].code)
-                        {
-                            syllabusNodes1.Remove(data[0].children[i]);
-                            syllabusNodes1.Add(syllabusNodes[j]);
-                            syllabusNodes.Remove(syllabusNodes[j]);
-                        }
-                    }
-                }
-                data[0].children = syllabusNodes1;
-
-                //新增
-                data[0].children.AddRange(syllabusNodes);
-
-                if (data[0].children.IsNotEmpty()) {
-                    var len = data[0].children.Count;
-                    for (int i = 0; i < len; i++) {
-                        if (data[0].children[i].items.IsNotEmpty()) {
-                            data[0].children[i].item = true;
-                        }
-                        if (data[0].children[i].resources.IsNotEmpty())
-                        {
-                            data[0].children[i].resource = true;
-                        }
-                    }
-                }
-                syllabuses = await azureCosmosDBRepository.SaveOrUpdateAll<Syllabus>(data);
-
-            }
-            else
-            {
-                throw new BizException("保存失败", ResponseCode.FAILED);
-               
-            }
-
-            return syllabuses;
-        }
-
-        public static async Task<List<SyllabusTree>> SaveOrUpdateAsTree(this AzureCosmosFactory azureCosmosDBRepository,  List<SyllabusTree> request)
-        {
-            List<SyllabusNode> nodes = new List<SyllabusNode>();
-            Syllabus syllabus = new Syllabus();
-
-            TreeToList(request, nodes);
-            // List<SyllabusNode> nods = nodes.ToJson().FromJson<List<SyllabusNode>>() ;
-            syllabus.children = nodes;
-            syllabus.id = request[0].code;
-            syllabus.code = request[0].code;
-            await azureCosmosDBRepository.SaveOrUpdate<Syllabus>(syllabus);
-            List<SyllabusTree> treess = ListToTree(nodes);
-            return treess;
-        }
-
-        public static List<SyllabusNode> TreeToList(List<SyllabusTree> trees, List<SyllabusNode> nodes)
-        {   int index = 0;
-            foreach (SyllabusTree tr in trees) {
-                tr.order = index;
-                index++;
-            }
-            trees = trees.OrderBy(x => x.order).ToList();
-            nodes.AddRange(trees.ToJsonString().ToObject<List<SyllabusNode>>());
-
-            foreach (SyllabusTree tree in trees)
-            {
-                if (null != tree.children && tree.children.Count > 0)
-                {
-                    TreeToList(tree.children, nodes);
-                }
-            }
-            return nodes;
-        }
-        private static List<SyllabusTree> ListToTree(List<SyllabusNode> noes)
-        {
-            List<SyllabusTree> list = noes.ToJsonString().ToObject<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)
-            {
-                blockDict.TryAdd(s.First().id, s.First());
-            }
-            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>();
-            trees = trees.OrderBy(x => x.order).ToList();
-            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 static async Task<List<Syllabus>> DeleteSyllabus(this AzureCosmosFactory azureCosmosDBRepository, Dictionary<string, object> request)
-        {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            foreach (KeyValuePair<string, object> keyValuePair in request)
-            {
-                dict.Add("children[*]." + keyValuePair.Key, keyValuePair.Value);
-            }
-
-            List<Syllabus> data = await azureCosmosDBRepository.FindByDict<Syllabus>(dict);
-            Dictionary<string, Syllabus> syllabuses = new Dictionary<string, Syllabus>();
-            List<Syllabus> data1 = new List<Syllabus>();
-            if (data.Count > 0)
-            {
-                data.ForEach(x => syllabuses.TryAdd(x.id, x));
-                data = new List<Syllabus>(syllabuses.Values);
-
-                //是否全删
-                bool flg = false;
-                foreach (Syllabus item in data)
-                {
-                    List<SyllabusNode> nodedata = item.children;
-                    if (request.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<Syllabus>(item.id, item.code);
-                        flg = true;
-                    }
-                }
-                if (!flg)
-                {
-                    data1 = await azureCosmosDBRepository.SaveOrUpdateAll<Syllabus>(data);
-
-                }
-
-
-                //if (flg)
-                //{
-
-                //    return builder.Data("全部删除成功").build();
-                //}
-                //else
-                //{
-                //    List<Syllabuses> data1 = await azureCosmosDBRepository.SaveOrUpdateAll<Syllabuses>(data);
-                //    return builder.Data(data1).build();
-                //}
-
-
-            }
-            return data1;
-        }
-    }
-}

+ 0 - 113
TEAMModelOS/Service/Syllabus/VolumeService.cs

@@ -1,113 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.Context.Exception;
-using TEAMModelOS.SDK.Extension.SnowFlake;
-using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Models;
-
-namespace TEAMModelOS.Service.Services.Implement
-{
-    public static class VolumeService 
-    {
-
-        
-
-        public static  async Task<List<Volume>> SaveOrUpdateVolume(this AzureCosmosFactory azureCosmosDBRepository, Volume request)
-        {
-            if (request.editors != null && request.editors.Count > 5)
-            {
-                throw new BizException("共编人数大于5人!");
-            }
-            if (string.IsNullOrEmpty(request.id))
-            {
-                if (request.type == 0)
-                {
-                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
-                        { "code",request.code},{ "periodCode", request.periodCode},
-                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
-                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
-                        { "status",1} ,{ "type",0} });
-                    if (volumesFind.IsNotEmpty())
-                    {
-                        throw new BizException("已存在!", ResponseCode.DATA_EXIST);
-                    }
-                    //校本课纲
-                    string key = request.code + IdWorker.getInstance().NextId();
-                    request.id = key;
-                    request.volumeCode = key;
-                }
-                else if (request.type == 1)
-                {
-                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
-                        { "code",request.code},{ "periodCode", request.periodCode},
-                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
-                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
-                        { "TEAMModelId",request.TEAMModelId}, { "status",1} ,{ "type",1} });
-                    if (volumesFind.IsNotEmpty())
-                    {
-                        throw new BizException("已存在!", ResponseCode.DATA_EXIST);
-                    }
-                    //个人课纲
-                    string key = "dynamic" + request.TEAMModelId.Replace("#", "") + IdWorker.getInstance().NextId();
-                    request.id = key;
-                    request.volumeCode = key;
-                }
-                else if (request.type == 2)
-                {
-                    //系统课纲
-                    string key = "system" + IdWorker.getInstance().NextId();
-                    request.code = "system";
-                    request.id = key;
-                    request.volumeCode = key;
-                }
-            }
-            else
-            {
-                if (request.type == 0)
-                {
-                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
-                    { "code",request.code},{ "periodCode", request.periodCode},
-                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
-                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName}  ,
-                        { "status",1} ,{ "type",0} });
-                    if (volumesFind.IsNotEmpty())
-                    {
-                        if (!volumesFind[0].id.Equals(request.id))
-                        {
-                            throw new BizException("已存在!", ResponseCode.DATA_EXIST);
-                        }
-                    }
-                }
-                else if (request.type == 1)
-                {
-                    List<Volume> volumesFind = await azureCosmosDBRepository.FindByDict<Volume>(new Dictionary<string, object>() {
-                        { "code",request.code},{ "periodCode", request.periodCode},
-                        { "subjectCode", request.subjectCode},{ "gradeCode", request.gradeCode},
-                        { "semesterCode",request.semesterCode},{ "volumeName",request.volumeName},
-                        { "TEAMModelId",request.TEAMModelId}, { "status",1} ,{ "type",1} });
-                    if (volumesFind.IsNotEmpty())
-                    {
-                        if (!volumesFind[0].id.Equals(request.id))
-                        {
-                            throw new BizException("已存在!", ResponseCode.DATA_EXIST);
-                        }
-                    }
-
-                }
-                else if (request.type == 2)
-                {
-                }
-
-            }
-            List<Volume> volumes = new List<Volume>
-            {
-                request
-            };
-            List<Volume> volume = await azureCosmosDBRepository.SaveOrUpdateAll<Volume>(volumes);
-            return volume;
-        }
-    }
-}

+ 0 - 1
TEAMModelOS/Startup.cs

@@ -25,7 +25,6 @@ using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.Context.Configuration;
 using TEAMModelOS.SDK.Context.Filter;
 using TEAMModelOS.SDK.DI;
-using TEAMModelOS.Service.Services.Learn.Implements;
 using VueCliMiddleware;
 
 namespace TEAMModelOS