zhouj1203@hotmail.com пре 11 месеци
родитељ
комит
f0c62c5b2b

+ 113 - 0
TEAMModelOS.SDK/Models/Service/ExamService.cs

@@ -1,7 +1,10 @@
 using Azure.Cosmos;
 using Azure.Cosmos;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Office2010.Excel;
 using DocumentFormat.OpenXml.Office2010.Excel;
+using HTEXLib.Helpers.ShapeHelpers;
 using MathNet.Numerics.Distributions;
 using MathNet.Numerics.Distributions;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
@@ -222,6 +225,116 @@ namespace TEAMModelOS.SDK.Models.Service
 
 
             }
             }
         }
         }
+
+
+        public static async Task<(List<ExamInfo> datas, string continuationToken)> FindExam(JsonElement request, string id, string school, AzureCosmosFactory _azureCosmos)
+        {
+            List<ExamInfo> examInfo = new();
+            try
+            {
+                var client = _azureCosmos.GetCosmosClient();
+                string sub = string.Empty;
+                string subject = string.Empty;
+               /* if (request.TryGetProperty("subjectId", out JsonElement subjectId) && !string.IsNullOrWhiteSpace($"{subjectId}"))
+                {
+                    sub = $" join A0 in c.subjects ";
+                    subject = $" and A0.id = '{subjectId}'";
+                }*/
+                StringBuilder stringBuilder = new($"select c.id,c.name,c.code,c.period,c.startTime,c.endTime,c.stuCount,c.type,c.progress,c.examType,c.createTime,c.source, c.subjects, c.grades,c.owner, c.scope,c.classes, c.stuLists, c.sRate,c.lostStu,c.sStatus,c.qamode,c.school,c.cloudas from c where (c.status<>404 or IS_DEFINED(c.status) = false) and c.pk = 'Exam'");               
+                //开始时间,
+                if (request.TryGetProperty("stime", out JsonElement stime))
+                {
+                    if (long.TryParse($"{stime}", out long data))
+                    {
+                        stringBuilder.Append($" and  c.startTime >= {data} ");
+
+                    };
+                };
+                //默认当前时间
+                var etimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                stringBuilder.Append($" and  c.startTime <= {etimestamp} ");
+                /*if (request.TryGetProperty("etime", out JsonElement etime))
+                {
+                    if (long.TryParse($"{etime}", out long data))
+                    {
+                        stringBuilder.Append($" and  c.createTime <= {data} ");
+                    };
+                };*/
+                string periodId = string.Empty;
+                
+                if (request.TryGetProperty("name", out JsonElement name) && !string.IsNullOrWhiteSpace($"{name}"))
+                {
+                    stringBuilder.Append($" and Contains( c.name , '{name}') =  true ");
+                }
+                if (request.TryGetProperty("owner", out JsonElement owner) && !string.IsNullOrWhiteSpace($"{owner}"))
+                {
+                    stringBuilder.Append($" and c.owner = '{owner}' ");
+                }
+                if (request.TryGetProperty("source", out JsonElement source) && !string.IsNullOrWhiteSpace($"{source}"))
+                {
+                    stringBuilder.Append($" and c.source = '{source}' ");
+                }
+                if (request.TryGetProperty("type", out JsonElement type))
+                {
+
+                    if (!type.ValueKind.Equals(JsonValueKind.Undefined) && !type.ValueKind.Equals(JsonValueKind.Null) && type.ValueKind.Equals(JsonValueKind.String))
+                    {
+                        stringBuilder.Append($" and c.pk = '{type}' ");
+                    }
+                }
+                stringBuilder.Append("order by c.createTime desc");
+                //string token = null;
+                string token = default;
+                //默认不指定返回大小
+                int? topcout = null;
+                if (request.TryGetProperty("count", out JsonElement jcount))
+                {
+                    if (!jcount.ValueKind.Equals(JsonValueKind.Undefined) && !jcount.ValueKind.Equals(JsonValueKind.Null) && jcount.TryGetInt32(out int data))
+                    {
+                        topcout = data;
+                    }
+                }
+                //是否需要进行分页查询,默认不分页
+                bool iscontinuation = false;
+                if (topcout != null && topcout.Value > 0)
+                {
+                    iscontinuation = true;
+                }
+                //如果指定了返回大小
+                if (request.TryGetProperty("token", out JsonElement token_1))
+                {
+                    if (!token_1.ValueKind.Equals(JsonValueKind.Null) && token_1.ValueKind.Equals(JsonValueKind.String))
+                    {
+                        token = token_1.GetString();
+
+                    }
+                }
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: stringBuilder.ToString(), continuationToken: token, requestOptions: new QueryRequestOptions() { MaxItemCount = topcout }))
+                {
+
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    {
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            examInfo.Add(obj.ToObject<ExamInfo>());
+                        }
+                    }
+                    if (iscontinuation)
+                    {
+                        token = item.GetContinuationToken();
+                        break;
+                    }
+
+                }
+                return (examInfo, token);
+            }
+            catch (Exception e)
+            {              
+                return (examInfo,"500");
+            }
+
+        }
         /*
         /*
                 public static async Task<string> getKnowledges(List<string> knowledges,List<ExamClassResult> answers ,string sub,List<List<string>> kones,List<double> point) {
                 public static async Task<string> getKnowledges(List<string> knowledges,List<ExamClassResult> answers ,string sub,List<List<string>> kones,List<double> point) {
                     foreach (string k in knowledges)
                     foreach (string k in knowledges)

+ 7 - 6
TEAMModelOS/Controllers/Student/StudentCommonController.cs

@@ -17,6 +17,7 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Service;
 using TEAMModelOS.SDK.Services;
 using TEAMModelOS.SDK.Services;
 using static TEAMModelOS.SDK.StudentService;
 using static TEAMModelOS.SDK.StudentService;
 
 
@@ -130,12 +131,12 @@ namespace TEAMModelOS.Controllers
         {
         {
             var (id, name, pic, school) = HttpContext.GetAuthTokenInfo();
             var (id, name, pic, school) = HttpContext.GetAuthTokenInfo();
             //if (!HttpContext.Items.TryGetValue("Scope", out object _scope)) return BadRequest();
             //if (!HttpContext.Items.TryGetValue("Scope", out object _scope)) return BadRequest();
-            (List<StuActivity> datas, string continuationToken) = await ActivityStudentService.FindActivity(request, id, school, _azureCosmos, _azureRedis);
-            List<(string id, string scope, string name, string source, List<string> cIds, int qamode, string createId, Dictionary<string, JsonElement> ext, long time, string owner)> eIds = new();
+            (List<ExamInfo> datas, string continuationToken) = await ExamService.FindExam(request, id, school, _azureCosmos);
+            List<(string id, string scope, string name, string source, List<string> cIds, int qamode, string createId, dynamic ext, long time, string owner)> eIds = new();
             //List<(string id, string scope, string name, List<string> cIds, string createId,long time)> wIds = new();
             //List<(string id, string scope, string name, List<string> cIds, string createId,long time)> wIds = new();
             foreach (var data in datas)
             foreach (var data in datas)
             {
             {
-                eIds.Add((data.id, data.scope, data.name, data.source, data.classIds, data.qamode, data.creatorId, data.ext, data.createTime, data.owner));
+                eIds.Add((data.id, data.scope, data.name, data.source, data.classes, data.qamode, data.creatorId, data.examType, data.createTime, data.owner));
             }
             }
             if (eIds.Count == 0)
             if (eIds.Count == 0)
             {
             {
@@ -194,8 +195,8 @@ namespace TEAMModelOS.Controllers
                 e.scope,
                 e.scope,
                 e.source,
                 e.source,
                 e.createId,
                 e.createId,
-                e.qamode,
                 e.ext,
                 e.ext,
+                e.qamode,
                 e.time,
                 e.time,
                 e.owner,
                 e.owner,
                 point = pst.Where(s => s.key == e.id).Select(c => c.po),
                 point = pst.Where(s => s.key == e.id).Select(c => c.po),
@@ -208,9 +209,9 @@ namespace TEAMModelOS.Controllers
                 s.name,
                 s.name,
                 s.scope,
                 s.scope,
                 s.source,
                 s.source,
+                s.ext,
                 s.createId,
                 s.createId,
                 s.qamode,
                 s.qamode,
-                s.ext,
                 s.time,
                 s.time,
                 s.owner,
                 s.owner,
                 point = s.point.FirstOrDefault(),
                 point = s.point.FirstOrDefault(),
@@ -533,7 +534,7 @@ namespace TEAMModelOS.Controllers
             }
             }
         }
         }
 
 
-        private async Task<List<(string eId, string sub, string cId, string cname, List<string> sIds, List<double> sum)>> getExamClassResult(List<(string id, string scope, string name, string source, List<string> cIds, int qamode, string createId, Dictionary<string, JsonElement> ext, long time, string owner)> eIds, CosmosClient client)
+        private async Task<List<(string eId, string sub, string cId, string cname, List<string> sIds, List<double> sum)>> getExamClassResult(List<(string id, string scope, string name, string source, List<string> cIds, int qamode, string createId, dynamic ext,long time, string owner)> eIds, CosmosClient client)
         {
         {
             List<(string eId, string sub, string cId, string cname, List<string> sIds, List<double> sum)> classResults = new();
             List<(string eId, string sub, string cId, string cname, List<string> sIds, List<double> sum)> classResults = new();
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(