Browse Source

Merge branch 'develop' into develop8.0

CrazyIter_Bin 11 tháng trước cách đây
mục cha
commit
35ad8e8771

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

@@ -1,7 +1,10 @@
 using Azure.Cosmos;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Office2010.Excel;
+using HTEXLib.Helpers.ShapeHelpers;
 using MathNet.Numerics.Distributions;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 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("continuationToken", 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) {
                     foreach (string k in knowledges)

+ 19 - 13
TEAMModelOS/ClientApp/src/components/student-web/achievement/MyAchievement.vue

@@ -35,9 +35,9 @@
                 <Table :columns="examCol" :data="examRep" height="550">
                     <template slot-scope="{ row }" slot="name">
                         <p style="word-break: keep-all;">
-                            <template v-if="row.subjects.length">
+                            <template v-if="row.subject.length">
                                 <span class="tag-style" style="border-color: #499c8d; color: #499c8d;"
-                                        v-for="sub in row.subjects" :key="sub.id"
+                                        v-for="sub in row.subject" :key="sub.id"
                                 >
                                     {{ sub.name }}
                                 </span>
@@ -77,14 +77,14 @@
                         </p>
                     </template>
                     <template slot-scope="{ row }" slot="score">
-                        <template v-if="row.subjects.length">
-                            <span v-if="row.subjects.length === 1">
-                                {{ row.subjects[0].score ? row.subjects[0].score : 0 }}
+                        <template v-if="row.subject.length">
+                            <span v-if="row.subject.length === 1">
+                                {{ row.subject[0].score ? row.subject[0].score : 0 }}
                             </span>
                             <template v-else>
                                 <p>总分:{{ row.total }}</p>
                                 <p>
-                                    <span v-for="(sub, index) in row.subjects" :key="index" style="margin: 5px;">
+                                    <span v-for="(sub, index) in row.subject" :key="index" style="margin: 5px;">
                                         {{ sub.name }}:{{ sub.score }}
                                     </span>
                                 </p>
@@ -610,11 +610,14 @@ export default {
                         let teaName = teaId.length ? await this.getTeacherName(teaId) : []
                         res.result.forEach(result => {
                             let examData = {...result}
+                        console.log('44444444444', examData.subject);
                             let hasCourse = false
                             // 先匹配课程和名单
                             examData.subject.forEach((sub, index) => {
                                 if(sub.id === this.courseNow.id || sub.id === this.courseNow.subject.id) {
+                                    console.log('22222222222');
                                     if(examData.result[index + index * examData.point.length].cId === this.courseNow.groupId) {
+                                    console.log('333333333333');
                                         hasCourse = true
                                     }
                                 }
@@ -629,8 +632,8 @@ export default {
                                 examData.total = 0
                                 examData.class = []
                                 if(result.ext) {
-                                    examData.subjects = result.ext.subjects ? result.ext.subjects : []
-                                    examData.type = result.ext.type
+                                    // examData.subjects = result.ext.subjects ? result.ext.subjects : []
+                                    examData.type = result.ext
                                 }
                                 if(result.result.length) {
                                     result.result.forEach(score => {
@@ -656,16 +659,16 @@ export default {
                                                     cname: score.cname
                                                 })
                                             }
-                                            if(examData.subjects.length) {
+                                            if(examData.subject.length) {
                                                 // 查找当前科目
-                                                let subjIn = examData.subjects.findIndex(subj => {
+                                                let subjIn = examData.subject.findIndex(subj => {
                                                     return subj.id === score.sub
                                                 })
                                                 if(subjIn != -1) {
-                                                    examData.subjects[subjIn].score = score.sum[myId]
+                                                    examData.subject[subjIn].score = score.sum[myId]
                                                 }
                                             } else {
-                                                examData.subjects.push({
+                                                examData.subject.push({
                                                     id: score.sub,
                                                     name: null,
                                                     score: 0
@@ -674,7 +677,7 @@ export default {
                                         }
                                     })
                                     let totalScore = 0
-                                    examData.subjects.forEach(subje => {
+                                    examData.subject.forEach(subje => {
                                         totalScore += (subje.score ? subje.score : 0)
                                     })
                                     examData.total = totalScore
@@ -683,6 +686,9 @@ export default {
                             }
                             
                         })
+                        if(this.examRep.length < 15 && this.continuationTokenExam) {
+                            this.getExamList()
+                        }
                     }
                 }
             }).finally(() => {

+ 3 - 1
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -1326,6 +1326,7 @@ namespace TEAMModelOS.Controllers
             if (!request.TryGetProperty("subjectId", out JsonElement subjectId)) return BadRequest();
             if (!request.TryGetProperty("paperAns", out JsonElement paperAns)) return BadRequest();
             if (!request.TryGetProperty("point", out JsonElement point)) return BadRequest();
+            if (!request.TryGetProperty("kno", out JsonElement kno)) return BadRequest();
             if (!request.TryGetProperty("multipleRule", out JsonElement multipleRule)) return BadRequest();
             //根据不同评测的类型返回对应的编码
             if (!request.TryGetProperty("scode", out JsonElement scode)) return BadRequest();
@@ -1362,7 +1363,7 @@ namespace TEAMModelOS.Controllers
                     }
                 }
                 //examClassResults = examClassResults.Where(c => c.studentIds.Contains(userId)).ToList(); wo
-                ExamClassResult classResult = new ExamClassResult();                
+                ExamClassResult classResult = new();
                 List<List<string>> standard = paperAns.ToObject<List<List<string>>>();
                 int rule = int.Parse(multipleRule.ToString());
                 List<double> points = point.ToObject<List<double>>();
@@ -1370,6 +1371,7 @@ namespace TEAMModelOS.Controllers
                 info.papers.ForEach(c => {
                     if (c.id.Equals(paperId.GetString())) {
                         c.answers = standard;
+                        c.point = points;
                     }
                 });
                 foreach (ExamClassResult result in examClassResults)

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

@@ -17,6 +17,7 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Service;
 using TEAMModelOS.SDK.Services;
 using static TEAMModelOS.SDK.StudentService;
 
@@ -130,12 +131,12 @@ namespace TEAMModelOS.Controllers
         {
             var (id, name, pic, school) = HttpContext.GetAuthTokenInfo();
             //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();
             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)
             {
@@ -194,8 +195,8 @@ namespace TEAMModelOS.Controllers
                 e.scope,
                 e.source,
                 e.createId,
-                e.qamode,
                 e.ext,
+                e.qamode,
                 e.time,
                 e.owner,
                 point = pst.Where(s => s.key == e.id).Select(c => c.po),
@@ -208,9 +209,9 @@ namespace TEAMModelOS.Controllers
                 s.name,
                 s.scope,
                 s.source,
+                s.ext,
                 s.createId,
                 s.qamode,
-                s.ext,
                 s.time,
                 s.owner,
                 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();
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(