|
@@ -74,7 +74,8 @@ namespace TEAMModelOS.SDK
|
|
|
List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
|
|
|
List<ExamClassResult> classResults = new List<ExamClassResult>();
|
|
|
List<PaperSimple> standerAnswers = new List<PaperSimple>();
|
|
|
- if (type.Equals("Exam")) {
|
|
|
+ if (type.Equals("Exam"))
|
|
|
+ {
|
|
|
if (groupChange.scope.Equals("school"))
|
|
|
{
|
|
|
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(queryText: $"select value(c) from c where c.examId = '{activity.id}'",
|
|
@@ -83,14 +84,15 @@ namespace TEAMModelOS.SDK
|
|
|
classResults.Add(item);
|
|
|
}
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<ExamClassResult>(queryText: $"select value(c) from c where c.examId = '{activity.id}'",
|
|
|
requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"ExamClassResult-{groupChange.creatorId}") }))
|
|
|
{
|
|
|
classResults.Add(item);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<PaperSimple>(
|
|
|
queryText: $"select A0.answers from c join A0 in c.papers where c.id = '{activity.id}'",
|
|
|
requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{activity.code}") }))
|
|
@@ -101,7 +103,7 @@ namespace TEAMModelOS.SDK
|
|
|
//stujoin新加入名单的
|
|
|
foreach (Member member in groupChange.stujoin)
|
|
|
{
|
|
|
- await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange,activity.id);
|
|
|
+ await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange, activity.id);
|
|
|
var stucourse = new StuActivity
|
|
|
{
|
|
|
id = activity.id,
|
|
@@ -128,7 +130,7 @@ namespace TEAMModelOS.SDK
|
|
|
//tmdjoin新加入的
|
|
|
foreach (Member member in groupChange.tmdjoin)
|
|
|
{
|
|
|
- await updateClassResulte(client, classResults, standerAnswers, member.id,groupChange, activity.id);
|
|
|
+ await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange, activity.id);
|
|
|
var stucourse = new StuActivity
|
|
|
{
|
|
|
id = activity.id,
|
|
@@ -182,16 +184,17 @@ namespace TEAMModelOS.SDK
|
|
|
try
|
|
|
{
|
|
|
await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange, activity.id);
|
|
|
- StuActivity stuActivity= await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
|
|
|
+ StuActivity stuActivity = await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
|
|
|
stuActivity.classIds.Remove(groupChange.listid);
|
|
|
if (stuActivity.classIds.IsNotEmpty())
|
|
|
{
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(stuActivity,activity.id, new PartitionKey(stuActivity.code));
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(stuActivity, activity.id, new PartitionKey(stuActivity.code));
|
|
|
}
|
|
|
- else {
|
|
|
+ else
|
|
|
+ {
|
|
|
await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
catch (CosmosException)
|
|
|
{
|
|
@@ -203,8 +206,8 @@ namespace TEAMModelOS.SDK
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange,activity.id);
|
|
|
- StuActivity stuActivity= await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
+ await updateClassResulte(client, classResults, standerAnswers, member.id, groupChange, activity.id);
|
|
|
+ StuActivity stuActivity = await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
stuActivity.classIds.Remove(groupChange.listid);
|
|
|
if (stuActivity.classIds.IsNotEmpty())
|
|
|
{
|
|
@@ -225,7 +228,7 @@ namespace TEAMModelOS.SDK
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- StuActivity stuActivity= await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
+ StuActivity stuActivity = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
stuActivity.classIds.Remove(groupChange.listid);
|
|
|
if (stuActivity.classIds.IsNotEmpty())
|
|
|
{
|
|
@@ -233,7 +236,7 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<StuActivity> (activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
|
|
|
}
|
|
|
}
|
|
|
catch (CosmosException)
|
|
@@ -243,7 +246,9 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- } catch (CosmosException e) {
|
|
|
+ }
|
|
|
+ catch (CosmosException e)
|
|
|
+ {
|
|
|
await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{e.Message}\n{e.StackTrace}CosmosException{e.Status}", GroupNames.成都开发測試群組);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -358,7 +363,7 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
- public static async Task RefreshStuActivity(CoreAPIHttpService _coreAPIHttpService ,CosmosClient client, DingDing _dingDing, string id, string code)
|
|
|
+ public static async Task RefreshStuActivity(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, string id, string code)
|
|
|
{
|
|
|
MQActivity activity = null;
|
|
|
try
|
|
@@ -383,7 +388,8 @@ namespace TEAMModelOS.SDK
|
|
|
foreach (RMember tmdid in tmdids)
|
|
|
{
|
|
|
var response = await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemStreamAsync(activity.id, new PartitionKey($"Activity-{tmdid.id}"));
|
|
|
- if (response.Status == 200) {
|
|
|
+ if (response.Status == 200)
|
|
|
+ {
|
|
|
using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
StuActivity stu = json.ToObject<StuActivity>();
|
|
|
stu.id = activity.id;
|
|
@@ -400,8 +406,8 @@ namespace TEAMModelOS.SDK
|
|
|
stu.blob = activity.blob;
|
|
|
stu.owner = activity.owner;
|
|
|
stu.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
- tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync(stu,stu.id, new PartitionKey(stu.code)));
|
|
|
- }
|
|
|
+ tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync(stu, stu.id, new PartitionKey(stu.code)));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (students.IsNotEmpty())
|
|
@@ -435,13 +441,24 @@ namespace TEAMModelOS.SDK
|
|
|
await Task.WhenAll(tasks);
|
|
|
}
|
|
|
}
|
|
|
- public static async Task updateClassResulte(CosmosClient client,List<ExamClassResult> classResults, List<PaperSimple> standerAnswers, string id,GroupChange change,string acId)
|
|
|
+ public static async Task updateClassResulte(CosmosClient client, List<ExamClassResult> classResults, List<PaperSimple> standerAnswers, string id, GroupChange change, string acId)
|
|
|
{
|
|
|
+ ExamInfo info = new ExamInfo();
|
|
|
if (classResults.Count > 0)
|
|
|
{
|
|
|
+ if (classResults[0].scope.Equals("school"))
|
|
|
+ {
|
|
|
+ info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(classResults[0].examId, new PartitionKey($"{classResults[0].school}"));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ string code = classResults[0].code.Replace("ExamClassResult-", "");
|
|
|
+ info = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<ExamInfo>(classResults[0].examId, new PartitionKey($"{code}"));
|
|
|
+ }
|
|
|
foreach (var item in classResults)
|
|
|
{
|
|
|
- if (item.info.id.Equals(change.listid)) {
|
|
|
+ if (item.info.id.Equals(change.listid))
|
|
|
+ {
|
|
|
int index = item.studentIds.IndexOf(id);
|
|
|
if (index == -1)
|
|
|
{
|
|
@@ -480,9 +497,42 @@ namespace TEAMModelOS.SDK
|
|
|
item.studentAnswers.RemoveAt(index);
|
|
|
item.sum.RemoveAt(index);
|
|
|
}
|
|
|
- }
|
|
|
- await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(item, item.id, new PartitionKey($"{item.code}"));
|
|
|
+
|
|
|
+ bool isAns = item.studentScores.Exists(s => s.Contains(-1));
|
|
|
+ if (isAns)
|
|
|
+ {
|
|
|
+ //整合名单
|
|
|
+ List<string> classes = ExamService.getClasses(info.classes, info.stuLists);
|
|
|
+ item.progress = true;
|
|
|
+ info.subjects.ForEach(s =>
|
|
|
+ {
|
|
|
+ if (s.classCount != classes.Count)
|
|
|
+ {
|
|
|
+ if (s.id.Equals(item.subjectId))
|
|
|
+ {
|
|
|
+ s.classCount += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ long nowTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
+ info.updateTime = nowTime;
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(info, id.ToString(), new PartitionKey($"{info.code}"));
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(item, item.id, new PartitionKey($"{item.code}"));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ var isScore = classResults.SelectMany(e => e.studentScores).ToList().Exists(c => c.Contains(-1));
|
|
|
+ if (!isScore)
|
|
|
+ {
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
/*if (change.scope.Equals("school"))
|
|
|
{
|
|
|
try {
|
|
@@ -500,10 +550,11 @@ namespace TEAMModelOS.SDK
|
|
|
exam.updateTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(exam, id.ToString(), new PartitionKey($"Exam-{change.creatorId}"));
|
|
|
}*/
|
|
|
-
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
- public static async Task DeleteActivity(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, ActivityList activityList) {
|
|
|
+ public static async Task DeleteActivity(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, ActivityList activityList)
|
|
|
+ {
|
|
|
List<(string pId, List<string> gid)> ps = new List<(string pId, List<string> gid)>();
|
|
|
if (activityList.groupLists.Count > 0)
|
|
|
{
|
|
@@ -606,7 +657,7 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
public class ActivityList
|
|
|
{
|