Browse Source

参数优化

zhouj1203@hotmail.com 4 years ago
parent
commit
a6acafd89c

+ 11 - 0
TEAMModelOS.SDK/Helper/Common/StringHelper/StringHelper.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Text.Json;
 
 namespace TEAMModelOS.SDK.Helper.Common.StringHelper
 {
@@ -168,5 +169,15 @@ namespace TEAMModelOS.SDK.Helper.Common.StringHelper
             }
             return doubles;
         }
+
+        public static int getKeyCount(JsonElement element) {
+            int keys = 0;
+            var emobj = element.EnumerateObject();
+            while (emobj.MoveNext())
+            {
+                keys++;
+            }
+            return keys;
+        } 
     }
 }

+ 12 - 16
TEAMModelOS/Controllers/Analysis/AchievementController.cs

@@ -1567,14 +1567,16 @@ namespace TEAMModelOS.Controllers.Analysis
         [HttpPost("FindExamPaper")]
         public BaseResponse FindExamPaper(JsonElement request)
         {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            dict.TryGetValue("subjectCode", out object subjectCode);
-            dict.TryGetValue("code", out object code);
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
+            /* var emobj = request.EnumerateObject();
+             while (emobj.MoveNext())
+             {
+                 dict[emobj.Current.Name] = emobj.Current.Value;
+             }*/
+            request.TryGetProperty("subjectCode", out JsonElement subjectCode);
+            request.TryGetProperty("code", out JsonElement code);
+            /*dict.TryGetValue("subjectCode", out object subjectCode);
+            dict.TryGetValue("code", out object code);*/
             ResponseBuilder builder = ResponseBuilder.custom();
             /*if (RedisHelper.Instance != null)
             {
@@ -1627,14 +1629,8 @@ namespace TEAMModelOS.Controllers.Analysis
         [HttpPost("FindExamAnswer")]
         public BaseResponse FindExamAnswer(JsonElement request)
         {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            dict.TryGetValue("subjectCode", out object subjectCode);
-            dict.TryGetValue("code", out object code);
+            request.TryGetProperty("subjectCode", out JsonElement subjectCode);
+            request.TryGetProperty("code", out JsonElement code);
             ResponseBuilder builder = ResponseBuilder.custom();
             List<ExamAnswer> exams = new List<ExamAnswer>();
             if (RedisHelper.Exists(CacheCosmosPrefix + "examAnswer" + subjectCode.ToString()))

+ 15 - 7
TEAMModelOS/Controllers/Exam/ExamController.cs

@@ -91,13 +91,15 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Find(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            if (dict.Keys.Count > 0)
+            if (keys > 0)
             {
                 return builder.Data(await cosmosDBV3Repository.FindByDict<ExamInfo>(request)).build();
             }
@@ -205,21 +207,27 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> findSummaryRecord(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
+            List<string> skey = new List<string>();
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                skey.Add(emobj.Current.Name);
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
+
+            //request.TryGetProperty("code",out JsonElement code);
             // 如果只有学生id则返回学生参加过的考试 只返回相关摘要信息
-            if (dict.Keys.Count == 1 && dict.ContainsKey("code"))
+            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);
                 return builder.Data(examRecords).Extend(new Dictionary<string, object> { { "props", props } }).build();
             }
             else {
-                if (dict.ContainsKey("examCode"))
+                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);

+ 5 - 5
TEAMModelOS/Controllers/Exam/ImportExerciseController.cs

@@ -120,15 +120,15 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> HtmlToHtex(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+/*            Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
             while (emobj.MoveNext())
             {
                 dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            bool flag = dict.TryGetValue("htmlString", out object htmlString);
-            bool flagLang = dict.TryGetValue("lang", out object lang);
-            if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
+            }*/
+            bool flag = request.TryGetProperty("htmlString", out JsonElement htmlString);
+            bool flagLang = request.TryGetProperty("lang", out JsonElement lang);
+            if (flag && htmlString.ToString() != null && !string.IsNullOrEmpty(htmlString.ToString()))
             {
                 LangConfig langConfig = langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
                 HtmlAnalyzeService htmlAnalyzeService = new HtmlAnalyzeService(langConfig);

+ 17 - 13
TEAMModelOS/Controllers/Exam/PaperController.cs

@@ -43,17 +43,19 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> findSummary(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
+            int keys = 0;
             var emobj = request.EnumerateObject();
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
             List<string> props = new List<string> {
                 "subjectCode", "id", "code", "periodCode",
                 "name","itemCount","level","pointItem","pointScore","score", "gradeCode"
             };
-            if (dict.Keys.Count > 0)
+            if (keys > 0)
             {
                 return builder.Data(await cosmosDBV3Repository.FindByDict<Paper>(request, propertys: props)).build();
             }
@@ -72,13 +74,15 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Find(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            if (dict.Keys.Count > 0) {
+            if (keys > 0) {
                 return builder.Data(await cosmosDBV3Repository.FindByDict<Paper>(request)).build();
             }
             else
@@ -93,21 +97,21 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("upsert")]
-        public async Task<BaseResponse> Upsert(JosnRequest<Paper> request)
+        public async Task<BaseResponse> Upsert(Paper request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            if (string.IsNullOrEmpty(request.@params.id))
+            if (string.IsNullOrEmpty(request.id))
             {
-                request.@params.id = SnowflakeId.NextId() + ""; 
-                request.@params.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
-                await cosmosDBV3Repository.SaveOrUpdate(request.@params);
+                request.id = SnowflakeId.NextId() + ""; 
+                request.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
+                await cosmosDBV3Repository.SaveOrUpdate(request);
             }
             else
             {
-                await cosmosDBV3Repository.SaveOrUpdate(request.@params);
+                await cosmosDBV3Repository.SaveOrUpdate(request);
             }
             
-            return builder.Data(request.@params).build();
+            return builder.Data(request).build();
         }
     }
 }

+ 2 - 7
TEAMModelOS/Controllers/School/ClassRoomController.cs

@@ -74,13 +74,8 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> Delete(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;
-            }
-            if (dict.TryGetValue("id", out object id))
+
+            if (request.TryGetProperty("id", out JsonElement id))
             {
                 List<Classroom> sc = await cosmosrepository.FindByDict<Classroom>(request);
                 if (sc.IsNotEmpty())

+ 4 - 4
TEAMModelOS/Controllers/School/ClassStudentController.cs

@@ -34,16 +34,16 @@ namespace TEAMModelOS.Controllers
         [HttpPost("find")]
         public async Task<BaseResponse> find(JsonElement request) {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+/*            Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
             while (emobj.MoveNext())
             {
                 dict[emobj.Current.Name] = emobj.Current.Value;
-            }
+            }*/
             // 班级编码
-            if (dict.TryGetValue("classroomCode", out object classroomCode)
+            if (request.TryGetProperty("classroomCode", out JsonElement classroomCode)
                  ///学校编码
-                 && dict.TryGetValue("schoolCode", out object schoolCode)
+                 && request.TryGetProperty("schoolCode", out JsonElement schoolCode)
                 )
             {
                 List<ClassStudent> classroomStudents = await _cosmos.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", classroomCode } });

+ 31 - 34
TEAMModelOS/Controllers/School/CourseController.cs

@@ -9,6 +9,7 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -51,14 +52,9 @@ namespace TEAMModelOS.Controllers
         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<Course> data = new List<Course>();
-            if (dict.Keys.Count > 0) {
+            if (StringHelper.getKeyCount(request) > 0) {
                 data = await _cosmos.FindByDict<Course>(request);
             }
             return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
@@ -210,20 +206,20 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("upsertPlan")]
-        public async Task<BaseResponse> UpsertPlan(JosnRequest<CoursePlan> request) {
+        public async Task<BaseResponse> UpsertPlan(CoursePlan request) {
             ResponseBuilder builder = ResponseBuilder.custom();
-            CoursePlan datas = await _cosmos.FindByIdPk<CoursePlan>(request.@params.id,request.@params.code);
+            CoursePlan datas = await _cosmos.FindByIdPk<CoursePlan>(request.id,request.code);
             if (datas!=null) {
-                request.@params.semesterCode = datas.semesterCode;
-                request.@params.classes.ForEach(x => {
+                request.semesterCode = datas.semesterCode;
+                request.classes.ForEach(x => {
                     datas.classes.ForEach(m => { 
                     if (m.classroomCode == x.classroomCode) {
                         x.courseTimes = m.courseTimes;
                     } }); 
                 });
-                await _cosmos.Update(request.@params);
+                await _cosmos.Update(request);
             }
-            return builder.Data(request.@params).build();
+            return builder.Data(request).build();
         }
 
         /// <summary>
@@ -232,20 +228,20 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("findPlan")]
-        public async Task<BaseResponse> FindPlan(JosnRequest<Dictionary<string, object>> request)
+        public async Task<BaseResponse> FindPlan(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             List<CoursePlan> data = new List<CoursePlan>();
-            if (request.@params.Keys.Count > 0 
+            if (StringHelper.getKeyCount(request) > 0 
                 &&
                 //必须保证这几个参数之一有传递
-                (request.@params.ContainsKey("id")|| request.@params.ContainsKey("code") ||
-                request.@params.ContainsKey("classes[*].classroomCode"))
+                (request.TryGetProperty("id",out _)|| request.TryGetProperty("code",out _) ||
+                request.TryGetProperty("classes[*].classroomCode",out _))
                 )
             {
-                data = await _cosmos.FindByDict<CoursePlan>(request.@params);
+                data = await _cosmos.FindByDict<CoursePlan>(request);
                 if (data.IsNotEmpty()) {
-                    if (request.@params.TryGetValue("classes[*].classroomCode",out  object classcode)) {
+                    if (request.TryGetProperty("classes[*].classroomCode",out  JsonElement classcode)) {
                         List<CoursePlan> coursePlans = new List<CoursePlan>();
                         data.ForEach(x => {
                             x.classes.ForEach(y => {
@@ -270,15 +266,15 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("findTeach")]
-        public async Task<BaseResponse> FindTeach(JosnRequest<string> request)
+        public async Task<BaseResponse> FindTeach(string request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            List<CoursePlan> data= await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "code", request.@params } }, new List<string> { "id" });
+            List<CoursePlan> data= await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "code", request } }, new List<string> { "id" });
             List<Course> courses = new List<Course>();
             if (data.IsNotEmpty()) {
                 courses= await  _cosmos.FindByDict<Course>(new Dictionary<string, object> { { "id", courses.Select(x => x.id).ToArray() } });
             }
-            List<Course> coursesp = await _cosmos.FindByDict<Course>(new Dictionary<string, object> { { "code", request.@params } });
+            List<Course> coursesp = await _cosmos.FindByDict<Course>(new Dictionary<string, object> { { "code", request } });
             if (courses.IsNotEmpty())
             {
                 //个人教室
@@ -304,20 +300,20 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("findTeachClass")]
-        public async Task<BaseResponse> FindPlan(JosnRequest<string> request)
+        public async Task<BaseResponse> FindPlan(string request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             HashSet<string> data = new HashSet<string>();
             List<dynamic> room = new List<dynamic>();
-            if (!string.IsNullOrEmpty(request.@params))
+            if (!string.IsNullOrEmpty(request))
             {
                 var prop = new List<string> { "classes" };
-                var teachers= await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "code",request.@params} } , prop);
+                var teachers= await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "code",request} } , prop);
                 if (teachers.IsNotEmpty()) {
                     teachers.Select(x => x.classes).ToList().ForEach(x => { x.ForEach(y => { data.Add(y.classroomCode); }); });
                    
                 }
-                var assistant = await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "assistant[*]", request.@params } }, prop);
+                var assistant = await _cosmos.FindByDict<CoursePlan>(new Dictionary<string, object> { { "assistant[*]", request } }, prop);
                 if (assistant.IsNotEmpty()) {
                     assistant.Select(x => x.classes).ToList().ForEach(x => { x.ForEach(y => { data.Add(y.classroomCode); }); });
                 }
@@ -338,23 +334,24 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("deleteTime")]
-        public async Task<BaseResponse> DeletePlan(JosnRequest<Dictionary<string,object>> request)
+        public async Task<BaseResponse> DeletePlan(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            if (request.@params.ContainsKey("id") && request.@params.ContainsKey("code") && request.@params.ContainsKey("classroomCode") && request.@params.ContainsKey("time") && request.@params.ContainsKey("day")) {
-                CoursePlan coursePlan = await _cosmos.FindByIdPk<CoursePlan>(request.@params["id"].ToString(), request.@params["code"].ToString());
+            if (request.TryGetProperty("id",out JsonElement id) && request.TryGetProperty("code",out JsonElement code) && request.TryGetProperty("classroomCode",out JsonElement classroomCode) 
+                && request.TryGetProperty("time",out JsonElement time) && request.TryGetProperty("day",out JsonElement day)) {
+                CoursePlan coursePlan = await _cosmos.FindByIdPk<CoursePlan>(id.ToString(), code.ToString());
                 List<CourseTime> courseTimes = new List<CourseTime>();
                 coursePlan.classes.ForEach(x=> {
-                    if (x.classroomCode == request.@params["classroomCode"].ToString()) {
+                    if (x.classroomCode == classroomCode.ToString()) {
                         x.courseTimes.ForEach(y => {
-                            if (y.time == request.@params["time"].ToString() && y.day == request.@params["day"].ToString())
+                            if (y.time == time.ToString() && y.day == day.ToString())
                             {
                                 courseTimes.Add(y);
                             }
                         });
                     }
                 });
-               coursePlan.classes.ForEach(x => { if (x.classroomCode == request.@params["classroomCode"].ToString()) {
+               coursePlan.classes.ForEach(x => { if (x.classroomCode == classroomCode.ToString()) {
                        courseTimes.ForEach(y => { x.courseTimes.Remove(y); });
                    } });
                await _cosmos.Update(coursePlan);
@@ -368,10 +365,10 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("deletePlan")]
-        public async Task<BaseResponse> DeletePlan(JosnRequest<IdPk> request)
+        public async Task<BaseResponse> DeletePlan(IdPk request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            IdPk idPk = await _cosmos.DeleteAsync<CoursePlan>(request.@params);
+            IdPk idPk = await _cosmos.DeleteAsync<CoursePlan>(request);
             return builder.Data(idPk).build();
         }
     }

+ 2 - 7
TEAMModelOS/Controllers/School/SchoolController.cs

@@ -67,13 +67,8 @@ namespace TEAMModelOS.Controllers
         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;
-            }
-            if (dict.TryGetValue("code", out object code) && null !=  code &&! string.IsNullOrEmpty(code.ToString()))
+            
+            if (request.TryGetProperty("code", out JsonElement code) &&! string.IsNullOrEmpty(code.ToString()))
             {
                 List<School> sc = await _cosmosrepository.FindByDict<School>(request);
                 return builder.Data(sc).build();

+ 6 - 10
TEAMModelOS/Controllers/Student/StudentController.cs

@@ -65,13 +65,7 @@ namespace TEAMModelOS.Controllers
         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;
-            }
-            if (dict.TryGetValue("code", out object _))
+            if (request.TryGetProperty("code", out _))
             {
                 List<Student> data = await azureCosmosDBRepository.FindByDict<Student>(request);
                 return builder.Data(data).build();
@@ -174,13 +168,15 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> BulkDelete(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            if (dict.Keys.Count > 0&& dict.ContainsKey("code")) {
+            if (keys > 0&& request.TryGetProperty("code",out JsonElement code)) {
                 List<Student> students = await azureCosmosDBRepository.FindByDict<Student>(request);
                 await azureCosmosDBRepository.DeleteAll<Student>(students);
                 ///更新学生关系表

+ 2 - 7
TEAMModelOS/Controllers/Syllabus/ItemInfoController.cs

@@ -8,6 +8,7 @@ using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -129,14 +130,8 @@ namespace TEAMModelOS.Controllers
         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<ItemInfo> items =new List<ItemInfo>();
-            if (dict.Keys.Count > 0) {
+            if (StringHelper.getKeyCount(request) > 0) {
                 items = await cosmosDBV3Repository.FindByDict<ItemInfo>(request);
             }
             return builder.Data(items).build();

+ 10 - 13
TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs

@@ -14,6 +14,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
 using TEAMModelOS.Service.Services.Implement;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -228,14 +229,8 @@ namespace TEAMModelOS.Controllers
         {
             // request.@params.TryAdd("PartitionKey", request.lang);
             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<Knowledge> data = new List<Knowledge>();
-            if (dict.Keys.Count>0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
                 data = await _cosmos.FindByDict<Knowledge>(request);
                 data.ForEach(d =>
@@ -337,13 +332,15 @@ namespace TEAMModelOS.Controllers
         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>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+                //dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            if (dict.Keys.Count > 0)
+            if (keys > 0)
             {
                   schoolBlocks = await _cosmos.FindByDict<T>(request);
                 Type t = typeof(T);
@@ -378,13 +375,13 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("count")]
-        public async Task<BaseResponse> Count(JosnRequest<Dictionary<string, object>> request)
+        public async Task<BaseResponse> Count(JsonElement request)
         {
             List<List<List<int>>> sCount = new List<List<List<int>>>();
             //List<List<List<List<int>>>> allCount = new List<List<List<List<int>>>>();
             ResponseBuilder builder = ResponseBuilder.custom();
-            if (request.@params.Keys.Count > 0) {
-                List<School> sc = await _cosmos.FindByDict<School>(request.@params);
+            if (StringHelper.getKeyCount(request) > 0) {
+                List<School> sc = await _cosmos.FindByDict<School>(request);
                 //查询校本所有知识块
                 Dictionary<string, object> scMap = new Dictionary<string, object>
             {

+ 7 - 10
TEAMModelOS/Controllers/Syllabus/ResourceController.cs

@@ -10,6 +10,7 @@ using TEAMModelOS.SDK.DI;
 
 using TEAMModelOS.Service.Models;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -64,13 +65,7 @@ namespace TEAMModelOS.Controllers
         {
             // request.@params.TryAdd("PartitionKey", request.lang);
             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;
-            }
-            if (dict.Keys.Count > 0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
                 List<Resource> data = new List<Resource>();
                 data = await _cosmos.FindByDict<Resource>(request);
@@ -139,13 +134,15 @@ namespace TEAMModelOS.Controllers
 
         private async Task<List<T>> Delete<T>(JsonElement request, ResponseBuilder builder)where T:ID
         {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+            //Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
+            int keys = 0;
             while (emobj.MoveNext())
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
+                keys++;
+               //dict[emobj.Current.Name] = emobj.Current.Value;
             }
-            if (dict.IsNotEmpty() && dict.Keys.Count > 0)
+            if (keys > 0)
             {
                 List<T> schoolBlocks = await _cosmos.FindByDict<T>(request);
                 Type t = typeof(T);

+ 5 - 15
TEAMModelOS/Controllers/Syllabus/VolumeController.cs

@@ -14,6 +14,7 @@ using TEAMModelOS.Service.Models;
 using Org.BouncyCastle.Ocsp;
 using TEAMModelOS.Service.Services.Implement;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -86,14 +87,8 @@ namespace TEAMModelOS.Controllers
         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<Volume> volumes ;
-            if (dict.TryGetValue("code", out object code))
+            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);
@@ -143,15 +138,10 @@ namespace TEAMModelOS.Controllers
         {
             //List<List<List<List<int>>>> allCount = new List<List<List<List<int>>>>();
             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<List<List<int>>> sCount = new List<List<List<int>>>();
-            if (dict.Keys.Count > 0) {
-                List<School> sc = await azureCosmosDBRepository.FindByDict<School>(dict);
+            if (StringHelper.getKeyCount(request) > 0) {
+                List<School> sc = await azureCosmosDBRepository.FindByDict<School>(request);
                 //查询校本所有册别数据
                 Dictionary<string, object> scMap = new Dictionary<string, object>
             {

+ 6 - 16
TEAMModelOS/Controllers/Task/HomeworkController.cs

@@ -19,6 +19,7 @@ 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;
 
 namespace TEAMModelOS.Controllers.Learn
 {
@@ -208,17 +209,11 @@ namespace TEAMModelOS.Controllers.Learn
         {
 
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict_re = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dict_re[emobj.Current.Name] = emobj.Current.Value;
-            }
             List<Homework> data = new List<Homework>();
             List<HomeworkFindDto> homeWorkFindDtos = new List<HomeworkFindDto>();
-            if (dict_re.Keys.Count>0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Homework>(dict_re);
+                data = await _cosmos.FindByDict<Homework>(request);
                 //判断作业提交信息
                 if (data.IsNotEmpty())
                 {
@@ -255,15 +250,10 @@ namespace TEAMModelOS.Controllers.Learn
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             List<HomeworkRecord> data = new List<HomeworkRecord>();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            if (dict.Keys.Count>0)
+
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<HomeworkRecord>(dict);
+                data = await _cosmos.FindByDict<HomeworkRecord>(request);
             }
             else
             {

+ 11 - 31
TEAMModelOS/Controllers/Task/LearnController.cs

@@ -13,6 +13,8 @@ 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;
 
 namespace TEAMModelOS.Controllers.Learn
 {
@@ -64,15 +66,9 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> FindTask(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
+            if (request.TryGetProperty("id",out _) || request.TryGetProperty("code",out _))
             {
-                dict[emobj.Current.Name] = emobj.Current.Value;
-            }
-            if (dict.ContainsKey("id") || dict.ContainsKey("code"))
-            {
-                List<LearnTask> tasks = await cosmosDBV3Repository.FindByDict<LearnTask>(dict);
+                List<LearnTask> tasks = await cosmosDBV3Repository.FindByDict<LearnTask>(request);
                 return builder.Data(tasks).build();
             }
             else {
@@ -125,13 +121,8 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> FindUnit(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;
-            }
-            if (dict.Keys.Count > 0)
+
+            if (StringHelper.getKeyCount(request) > 0)
             {
                 return builder.Data(await cosmosDBV3Repository.FindByDict<LearnUnit>(dict)).build();
             }
@@ -183,15 +174,10 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> FindProcess(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;
-            }
-            if (dict.Keys.Count>0) {
 
-                builder.Data(await cosmosDBV3Repository.FindByDict<LearnProcess>(dict));
+            if (StringHelper.getKeyCount(request) > 0) {
+
+                builder.Data(await cosmosDBV3Repository.FindByDict<LearnProcess>(request));
             }
 
             return builder.build();
@@ -246,15 +232,9 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> FindRecord(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;
-            }
-            if (dict.Keys.Count > 0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                builder.Data(await cosmosDBV3Repository.FindByDict<LearnRecord>(dict));
+                builder.Data(await cosmosDBV3Repository.FindByDict<LearnRecord>(request));
             }
             return builder.build();
         }

+ 5 - 16
TEAMModelOS/Controllers/Task/VoteController.cs

@@ -16,6 +16,7 @@ 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;
 
 namespace TEAMModelOS.Controllers.Learn
 {
@@ -132,16 +133,10 @@ namespace TEAMModelOS.Controllers.Learn
         {
 
             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<Vote> data = new List<Vote>();
-            if (dict.Keys.Count > 0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Vote>(dict);
+                data = await _cosmos.FindByDict<Vote>(request);
             }
             else
             {
@@ -212,18 +207,12 @@ namespace TEAMModelOS.Controllers.Learn
         public async Task<BaseResponse> FindRecord(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<VoteRecord> data = new List<VoteRecord>();
             List<Options> options = new List<Options>();
 
-            if (dict.Keys.Count > 0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<VoteRecord>(dict);
+                data = await _cosmos.FindByDict<VoteRecord>(request);
                 if (data.IsNotEmpty()) {
                     List< Vote > votes = await _cosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", data[0].id } });
                     List<Vote.Option> options2 = votes[0].option;

+ 4 - 8
TEAMModelOS/Controllers/Teacher/CommentController.cs

@@ -10,6 +10,7 @@ using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.Service.Models;
 using System.Text.Json;
+using TEAMModelOS.SDK.Helper.Common.StringHelper;
 
 namespace TEAMModelOS.Controllers
 {
@@ -60,16 +61,11 @@ namespace TEAMModelOS.Controllers
         {
             // request.TryAdd("PartitionKey", request.lang);
             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<Comment> data = new List<Comment>();
-            if (dict.Keys.Count > 0)
+            if (StringHelper.getKeyCount(request) > 0)
             {
-                data = await _cosmos.FindByDict<Comment>(dict);
+                data = await _cosmos.FindByDict<Comment>(request);
             }
             else
             {

+ 24 - 51
TEAMModelOS/Controllers/Teacher/SchoolUserController.cs

@@ -17,6 +17,7 @@ using Newtonsoft.Json;
 using System.Collections;
 using TEAMModelOS.SDK.Context.Exception;
 using System.Reflection;
+using Microsoft.Azure.Cosmos.Linq;
 
 namespace TEAMModelOS.Controllers
 {
@@ -51,18 +52,12 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> GetSingleSchoolUser(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;
-            }
-            dict.TryGetValue("schoolCode", out object schoolCodeObj);
-            dict.TryGetValue("id", out object idObj);
-            dict.TryGetValue("joinStatus", out object joinStatusObj);
-            string schoolCode = (schoolCodeObj != null) ? schoolCodeObj.ToString() : null;
-            string id = (idObj != null) ? idObj.ToString() : null;
-            string joinStatusStr = (joinStatusObj != null) ? joinStatusObj.ToString() : null;
+            //request.TryGetProperty("schoolCode", out JsonElement schoolCodeObj);
+            //request.TryGetProperty("id", out JsonElement idObj);
+            //request.TryGetProperty("joinStatus", out JsonElement joinStatusObj);
+            string schoolCode = request.TryGetProperty("schoolCode", out JsonElement schoolCodeObj) ? schoolCodeObj.ToString() : null;
+            string id = request.TryGetProperty("id", out JsonElement idObj) ? idObj.ToString() : null;
+            string joinStatusStr = request.TryGetProperty("joinStatus", out JsonElement joinStatusObj) ? joinStatusObj.ToString() : null;
             int joinStatus = (joinStatusStr != null) ? Convert.ToInt32(joinStatusStr) : -1;
             Dictionary<string, object> userDict = new Dictionary<string, object>
             {
@@ -91,21 +86,16 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> SetAuthToSchoolUser(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;
-            }
-            dict.TryGetValue("schoolCode", out object schoolCode);
-            dict.TryGetValue("ids", out object idsJson);
+
+            request.TryGetProperty("schoolCode", out JsonElement schoolCode);
+            request.TryGetProperty("ids", out JsonElement idsJson);
             List<string> ids = new List<string>();
             var idsArr = JArray.Parse(idsJson.ToString());
             foreach (var idInfo in idsArr)
             {
                 ids.Add(idInfo["id"].ToString());
             }
-            dict.TryGetValue("authList", out object authListObj);
+            request.TryGetProperty("authList", out JsonElement authListObj);
             List<string> authList = JsonConvert.DeserializeObject<List<string>>(authListObj.ToString());
 
             //取得已加入該校的使用者 (joinStatus=1: [加入狀態]  1:已加入)
@@ -138,15 +128,9 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> updParamToSchoolUser(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dictRequest = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dictRequest[emobj.Current.Name] = emobj.Current.Value;
-            }
-            dictRequest.TryGetValue("schoolCode", out object schoolCode);
-            dictRequest.TryGetValue("id", out object id);
-            dictRequest.TryGetValue("param", out object paramJson);
+            request.TryGetProperty("schoolCode", out JsonElement schoolCode);
+            request.TryGetProperty("id", out JsonElement id);
+            request.TryGetProperty("param", out JsonElement paramJson);
             //dynamic param = JsonConvert.DeserializeObject<dynamic>(paramJson.ToString());
             dynamic param = JObject.Parse(paramJson.ToString()) as dynamic;
 
@@ -194,15 +178,9 @@ namespace TEAMModelOS.Controllers
         [HttpPost("rmvSchoolUser")]
         public async Task<BaseResponse> RmvSchoolUser(JsonElement request)
         {
-            Dictionary<string, object> dict = new Dictionary<string, object>();
-            var emobj = request.EnumerateObject();
-            while (emobj.MoveNext())
-            {
-                dict[emobj.Current.Name] = emobj.Current.Value;
-            }
             ResponseBuilder builder = ResponseBuilder.custom();
-            dict.TryGetValue("schoolCode", out object schoolCode);
-            dict.TryGetValue("Ids", out object Ids);
+            request.TryGetProperty("schoolCode", out JsonElement schoolCode);
+            request.TryGetProperty("Ids", out JsonElement Ids);
             //以TEAMModelId(array)取得該校的使用者
             Dictionary<string, object> userDict = new Dictionary<string, object>
             {
@@ -243,17 +221,17 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> AddSchoolUser(JsonElement request)
         {
             ResponseBuilder builder = ResponseBuilder.custom();
-            Dictionary<string, object> dict = new Dictionary<string, object>();
+ /*           Dictionary<string, object> dict = new Dictionary<string, object>();
             var emobj = request.EnumerateObject();
             while (emobj.MoveNext())
             {
                 dict[emobj.Current.Name] = emobj.Current.Value;
-            }
+            }*/
             try
             {
                
-                dict.TryGetValue("schoolCode", out object schoolCode);
-                dict.TryGetValue("userlist", out object userList);
+                request.TryGetProperty("schoolCode", out JsonElement schoolCode);
+                request.TryGetProperty("userlist", out JsonElement userList);
                 List<SchoolUser> addUserlist = JsonConvert.DeserializeObject<List<SchoolUser>>(userList.ToString());
                 //整形
                 foreach (SchoolUser addUser in addUserlist)
@@ -284,17 +262,12 @@ namespace TEAMModelOS.Controllers
         public async Task<BaseResponse> AddSchoolUserSingle(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;
-            }
+
             try
             {
-                
-                dict.TryGetValue("schoolCode", out object schoolCode);
-                dict.TryGetValue("userinfo", out object userinfo);
+
+                request.TryGetProperty("schoolCode", out JsonElement schoolCode);
+                request.TryGetProperty("userinfo", out JsonElement userinfo);
                 SchoolUser addUserinfo = JsonConvert.DeserializeObject<SchoolUser>(userinfo.ToString());
                 //整形
                 addUserinfo.pk = "SchoolUser";