|
@@ -97,67 +97,70 @@ namespace TEAMModelOS.Controllers.Core
|
|
|
if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
//TODO 取得Teacher 個人相關數據(課程清單、虛擬教室清單、歷史紀錄清單等),學校數據另外API處理,多校切換時不同
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
- var response = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync($"{id}", new PartitionKey("Base"));
|
|
|
- int size = 0;
|
|
|
- //老師個人資料(含初始化)
|
|
|
- if (response.Status == 200)
|
|
|
- {
|
|
|
- var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ var response = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync($"{id}", new PartitionKey("Base"));
|
|
|
+ int size = 0;
|
|
|
+ //老師個人資料(含初始化)
|
|
|
+ if (response.Status == 200)
|
|
|
+ {
|
|
|
+ List<dynamic> schoolExam = new List<dynamic>();
|
|
|
+ var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
string name = $"{json.RootElement.GetProperty("name")}";
|
|
|
string picture = $"{json.RootElement.GetProperty("picture")}";
|
|
|
if (json.RootElement.TryGetProperty("schools", out JsonElement value))
|
|
|
- {
|
|
|
+ {
|
|
|
|
|
|
if (json.RootElement.TryGetProperty("size", out JsonElement _size) && _size.ValueKind.Equals(JsonValueKind.Number))
|
|
|
+ {
|
|
|
+ size = _size.GetInt32();
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var obj in value.EnumerateArray())
|
|
|
+ {
|
|
|
+ string statusNow = obj.GetProperty("status").ToString();
|
|
|
+ //正式加入才会有
|
|
|
+ if (statusNow == "join")
|
|
|
{
|
|
|
- size = _size.GetInt32();
|
|
|
- }
|
|
|
- foreach (var obj in value.EnumerateArray())
|
|
|
- {
|
|
|
- string statusNow = obj.GetProperty("status").ToString();
|
|
|
- //正式加入才会有
|
|
|
- if (statusNow == "join")
|
|
|
+ //dynamic schoolExtobj = new ExpandoObject();
|
|
|
+ var schoolJson = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync($"{obj.GetProperty("schoolId")}", new PartitionKey("Base"));
|
|
|
+ var school = await JsonDocument.ParseAsync(schoolJson.ContentStream);
|
|
|
+ var schoolId = obj.GetProperty("schoolId");
|
|
|
+ var schoolName = obj.GetProperty("name");
|
|
|
+ var schoolStatus = obj.GetProperty("status");
|
|
|
+ var schoolPicture = school.RootElement.GetProperty("picture");
|
|
|
+ //检查学校购买的模组是否包含阅卷模组
|
|
|
+ int count = 0;
|
|
|
+ string sql = $" SELECT value(count(product)) FROM c join product in c.service.product where c.id ='{schoolId}' and c.pk='Product' and product.prodCode='YMPCVCIM' ";
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<int>(sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Product") })) {
|
|
|
+ count = item;
|
|
|
+ }
|
|
|
+ if (count > 0)
|
|
|
{
|
|
|
- //dynamic schoolExtobj = new ExpandoObject();
|
|
|
- var schoolJson = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync($"{obj.GetProperty("schoolId")}", new PartitionKey("Base"));
|
|
|
- var school = await JsonDocument.ParseAsync(schoolJson.ContentStream);
|
|
|
- var schoolId = obj.GetProperty("schoolId");
|
|
|
- var schoolName = obj.GetProperty("name");
|
|
|
- var schoolStatus = obj.GetProperty("status");
|
|
|
- var schoolPicture = school.RootElement.GetProperty("picture");
|
|
|
- //检查学校购买的模组是否包含阅卷模组
|
|
|
- int count = 0;
|
|
|
- string sql = $" SELECT value(count(product)) FROM c join product in c.service.product where c.id ='{schoolId}' and c.pk='Product' and product.prodCode='YMPCVCIM' ";
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<int>(sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Product") })) {
|
|
|
- count = item;
|
|
|
- }
|
|
|
- if (count > 0) {
|
|
|
- //生成token
|
|
|
- var stoken = JwtAuthExtension.CreateAuthToken(_option.HostName, $"{id}", name?.ToString(), picture?.ToString(), _option.JwtSecretKey, roles: new[] { "teacher" }, schoolID: $"{schoolId}");
|
|
|
- //获取学校线下阅卷评测
|
|
|
- var sexams= await GetExam($"{schoolId}", "school", client);
|
|
|
- var container = _azureStorage.GetBlobContainerClient($"{schoolId}");
|
|
|
- await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建School容器,如存在則不做任何事,保障容器一定存在
|
|
|
- var (sblob_uri, sblob_sas) = _azureStorage.GetBlobContainerSAS($"{schoolId}", BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Write);
|
|
|
- schools.Add(new ScanSchool { name = $"schoolName", picture = $"{schoolPicture}", code = $"{schoolId}", status = $"{schoolStatus}" ,token= stoken, exams = sexams, bloburl=sblob_uri ,blobsas=sblob_sas});
|
|
|
+ //生成token
|
|
|
+ var stoken = JwtAuthExtension.CreateAuthToken(_option.HostName, $"{id}", name?.ToString(), picture?.ToString(), _option.JwtSecretKey, roles: new[] { "teacher" }, schoolID: $"{schoolId}");
|
|
|
+ //获取学校线下阅卷评测
|
|
|
+ var sexams= await GetExam($"{schoolId}", "school", client);
|
|
|
+ if (sexams.IsNotEmpty())
|
|
|
+ {
|
|
|
+ schoolExam.Add(new { schoolCode = schoolId, exams= sexams });
|
|
|
}
|
|
|
+
|
|
|
+ var container = _azureStorage.GetBlobContainerClient($"{schoolId}");
|
|
|
+ await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建School容器,如存在則不做任何事,保障容器一定存在
|
|
|
+ var (sblob_uri, sblob_sas) = _azureStorage.GetBlobContainerSAS($"{schoolId}", BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Write);
|
|
|
+ schools.Add(new ScanSchool { name = $"{schoolName}", picture = $"{schoolPicture}", code = $"{schoolId}",token= stoken, bloburl=sblob_uri ,blobsas=sblob_sas});
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- var ttoken = JwtAuthExtension.CreateAuthToken(_option.HostName, $"{id}", name?.ToString(), picture?.ToString(), _option.JwtSecretKey, roles: new[] { "teacher" });
|
|
|
- var (tblob_uri, tblob_sas) = _azureStorage.GetBlobContainerSAS($"{id}", BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Delete);
|
|
|
- //获取个人线下阅卷评测
|
|
|
- var exams = await GetExam($"{id}", "private", client);
|
|
|
- //換取AuthToken,提供給前端
|
|
|
- var data = new { name, picture, id, schools , exams, bloburl= tblob_uri, blobsas = tblob_sas, token= ttoken };
|
|
|
- //await sseClient.SendEventAsync(data.ToJsonString());
|
|
|
- return Ok(data);
|
|
|
- /////////////////////////////TODO 返回TMDID和学生的头像 名字 id
|
|
|
- // }
|
|
|
- //else
|
|
|
- //{
|
|
|
- // return Ok(new { status = 404 });
|
|
|
- //}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var ttoken = JwtAuthExtension.CreateAuthToken(_option.HostName, $"{id}", name?.ToString(), picture?.ToString(), _option.JwtSecretKey, roles: new[] { "teacher" });
|
|
|
+ var (tblob_uri, tblob_sas) = _azureStorage.GetBlobContainerSAS($"{id}", BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Delete);
|
|
|
+ //获取个人线下阅卷评测
|
|
|
+ var privateExam = await GetExam($"{id}", "private", client);
|
|
|
+ //換取AuthToken,提供給前端
|
|
|
+ var data = new { name, picture, id, schools , privateExam, schoolExam, bloburl= tblob_uri, blobsas = tblob_sas, token= ttoken };
|
|
|
+ //await sseClient.SendEventAsync(data.ToJsonString());
|
|
|
+ return Ok(data);
|
|
|
+
|
|
|
}
|
|
|
} catch (Exception ex ) {
|
|
|
await _dingDing.SendBotMsg($"IES5,{_option.Location},hiscan/verify-qrcode()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
|
|
@@ -187,18 +190,51 @@ namespace TEAMModelOS.Controllers.Core
|
|
|
foreach (var cls in exam.classes)
|
|
|
{
|
|
|
(List<TmdInfo> tmdids, List<StuInfo> students) stulist = await TriggerStuActivity.GetStuList(client, _dingDing, new List<string> { cls }, code);
|
|
|
- classes.Add(new ExamClass { classId = cls, tmdids = stulist.tmdids, stulist = stulist.students });
|
|
|
+ List<dynamic> dynamics = new List<dynamic>();
|
|
|
+ stulist.students.ForEach(x => { dynamics.Add(new { x.name, x.picture, x.id }); });
|
|
|
+ var clssinfo = await TriggerStuActivity.GetClassInfo(client, _dingDing, new List<string> { cls }, code);
|
|
|
+ classes.Add(new ExamClass { classId = cls, className = clssinfo.IsNotEmpty() ? clssinfo[0].name : null, tmdids = stulist.tmdids, stulist = dynamics });
|
|
|
}
|
|
|
- corrects.Add(new { exam = new { name= exam.name, school =exam.school,
|
|
|
- startTime =exam.startTime , endTime =exam.endTime , classes =exam.classes,
|
|
|
- type = exam.type,
|
|
|
- period = exam.period,
|
|
|
- grades = exam.grades,
|
|
|
- subjects = exam.subjects,
|
|
|
- progress = exam.progress,
|
|
|
- examType = exam.examType,
|
|
|
- creatorId = exam.creatorId,
|
|
|
- papers =exam.papers.Select(x=> new { x.name,x.sheet})}, classes = classes });
|
|
|
+ List<dynamic> dys = new List<dynamic>();
|
|
|
+ foreach (var pap in exam.papers)
|
|
|
+ {
|
|
|
+ dynamic dy = new { pap.name, pap.answers, pap.point, sheet = pap.sheet };
|
|
|
+ if (!string.IsNullOrEmpty(pap.sheet))
|
|
|
+ {
|
|
|
+ if (scope == "school")
|
|
|
+ {
|
|
|
+ SheetConfig config = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<SheetConfig>($"{pap.sheet}", new PartitionKey($"SheetConfig-{code}"));
|
|
|
+ dy.sheet = config;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SheetConfig config = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<SheetConfig>($"{pap.sheet}", new PartitionKey($"SheetConfig-{code}"));
|
|
|
+ dy.sheet = config;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dys.Add(dy);
|
|
|
+ }
|
|
|
+
|
|
|
+ corrects.Add(new
|
|
|
+ {
|
|
|
+ exam = new
|
|
|
+ {
|
|
|
+ name = exam.name,
|
|
|
+ // school = exam.school,
|
|
|
+ startTime = exam.startTime,
|
|
|
+ endTime = exam.endTime,
|
|
|
+ // type = exam.type,
|
|
|
+ period = exam.period,
|
|
|
+ grades = exam.grades,
|
|
|
+ subjects = exam.subjects,
|
|
|
+ //progress = exam.progress,
|
|
|
+ //examType = exam.examType,
|
|
|
+ // creatorId = exam.creatorId,
|
|
|
+ // papers =exam.papers.Select(x=> new { x.name,x.sheet})
|
|
|
+ papers = dys
|
|
|
+ },
|
|
|
+ classes = classes
|
|
|
+ }) ;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -211,25 +247,46 @@ namespace TEAMModelOS.Controllers.Core
|
|
|
foreach (var cls in exam.classes)
|
|
|
{
|
|
|
(List<TmdInfo> tmdids, List<StuInfo> students) stulist = await TriggerStuActivity.GetStuList(client, _dingDing, new List<string> { cls }, code);
|
|
|
- classes.Add(new ExamClass { classId = cls, tmdids = stulist.tmdids, stulist = stulist.students });
|
|
|
+ List<dynamic> dynamics = new List<dynamic>();
|
|
|
+ stulist.students.ForEach(x=> { dynamics.Add(new { x.name,x.picture,x.id}); });
|
|
|
+ var clssinfo= await TriggerStuActivity.GetClassInfo(client, _dingDing, new List<string> { cls},code);
|
|
|
+ classes.Add(new ExamClass { classId = cls, className = clssinfo.IsNotEmpty() ? clssinfo[0].name : null, tmdids = stulist.tmdids, stulist = dynamics }) ;
|
|
|
+ }
|
|
|
+ List<dynamic> dys = new List<dynamic>();
|
|
|
+ foreach (var pap in exam.papers) {
|
|
|
+ dynamic dy = new { pap.name, pap.answers, pap.point, sheet =pap.sheet};
|
|
|
+ if (!string.IsNullOrEmpty(pap.sheet)) {
|
|
|
+ if (scope == "school")
|
|
|
+ {
|
|
|
+ SheetConfig config = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<SheetConfig>($"{pap.sheet}", new PartitionKey($"SheetConfig-{code}"));
|
|
|
+ dy.sheet = config;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ SheetConfig config = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<SheetConfig>($"{pap.sheet}", new PartitionKey($"SheetConfig-{code}"));
|
|
|
+ dy.sheet = config;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dys.Add(dy);
|
|
|
}
|
|
|
+
|
|
|
corrects.Add(new
|
|
|
{
|
|
|
exam = new
|
|
|
{
|
|
|
name = exam.name,
|
|
|
- school = exam.school,
|
|
|
+ //school = exam.school,
|
|
|
startTime = exam.startTime,
|
|
|
endTime = exam.endTime,
|
|
|
- classes = exam.classes,
|
|
|
- type = exam.type,
|
|
|
+ // type = exam.type,
|
|
|
period = exam.period,
|
|
|
grades = exam.grades,
|
|
|
subjects = exam.subjects,
|
|
|
- progress = exam.progress,
|
|
|
- examType = exam.examType,
|
|
|
- creatorId = exam.creatorId,
|
|
|
- papers = exam.papers.Select(x => new { x.name, x.sheet })
|
|
|
+ //progress = exam.progress,
|
|
|
+ //examType = exam.examType,
|
|
|
+ // creatorId = exam.creatorId,
|
|
|
+ // papers =exam.papers.Select(x=> new { x.name,x.sheet})
|
|
|
+ papers = dys
|
|
|
},
|
|
|
classes = classes
|
|
|
});
|
|
@@ -246,16 +303,16 @@ namespace TEAMModelOS.Controllers.Core
|
|
|
public string name { get; set; }
|
|
|
public string picture { get; set; }
|
|
|
public string code { get; set; }
|
|
|
- public string status { get; set; }
|
|
|
+ // public string status { get; set; }
|
|
|
public string token { get; set; }
|
|
|
// public List<(Correct,ExamInfo, (List<string> tmdids, List<Students> stulist))> exams{ get; set; }
|
|
|
- public List<dynamic> exams { get; set; }
|
|
|
}
|
|
|
|
|
|
|
|
|
public class ExamClass {
|
|
|
public string classId { get; set; }
|
|
|
+ public string className { get; set; }
|
|
|
public List<TmdInfo> tmdids { get; set; }
|
|
|
- public List<StuInfo> stulist { get; set; }
|
|
|
+ public List<dynamic> stulist { get; set; }
|
|
|
}
|
|
|
}
|