|
@@ -18,7 +18,7 @@ using TEAMModelOS.SDK.Models.Service;
|
|
|
|
|
|
namespace TEAMModelOS.FunctionV4.CosmosDB
|
|
|
{
|
|
|
- internal class TriggerArt
|
|
|
+ public class TriggerArt
|
|
|
{
|
|
|
public static async Task Trigger(CoreAPIHttpService _coreAPIHttpService, AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
|
|
|
CosmosClient client, JsonElement input, TriggerData tdata, AzureRedisFactory _azureRedis, IConfiguration _configuration)
|
|
@@ -69,7 +69,7 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
|
|
|
switch (art.progress)
|
|
|
{
|
|
|
case "pending":
|
|
|
- var messageVote = new ServiceBusMessage(new { id = tdata.id, progress = "going", code = tdata.code }.ToJsonString());
|
|
|
+ var messageVote = new ServiceBusMessage(new { tdata.id, progress = "going", code = tdata.code }.ToJsonString());
|
|
|
messageVote.ApplicationProperties.Add("name", "Art");
|
|
|
if (voteRecords.Count > 0)
|
|
|
{
|
|
@@ -86,121 +86,123 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (art.classes.Count > 0) {
|
|
|
- long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageVote, DateTimeOffset.FromUnixTimeMilliseconds(tdata.startTime));
|
|
|
- ChangeRecord changeRecord = new ChangeRecord
|
|
|
- {
|
|
|
- RowKey = tdata.id,
|
|
|
- PartitionKey = PartitionKey,
|
|
|
- sequenceNumber = start,
|
|
|
- msgId = messageVote.MessageId
|
|
|
- };
|
|
|
- await table.Save<ChangeRecord>(changeRecord);
|
|
|
- }
|
|
|
+
|
|
|
+ long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync(Environment.GetEnvironmentVariable("Azure:ServiceBus:ActiveTask"), messageVote, DateTimeOffset.FromUnixTimeMilliseconds(tdata.startTime));
|
|
|
+ ChangeRecord changeRecord = new ChangeRecord
|
|
|
+ {
|
|
|
+ RowKey = tdata.id,
|
|
|
+ PartitionKey = PartitionKey,
|
|
|
+ sequenceNumber = start,
|
|
|
+ msgId = messageVote.MessageId
|
|
|
+ };
|
|
|
+ await table.Save<ChangeRecord>(changeRecord);
|
|
|
}
|
|
|
break;
|
|
|
case "going":
|
|
|
|
|
|
- List<string> classes = ExamService.getClasses(art.classes, art.stuLists);
|
|
|
- (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetMemberByListids(_coreAPIHttpService, client, _dingDing, classes, art.school, null);
|
|
|
- var addStudentsCls = tmdIds.FindAll(x => x.type == 2);
|
|
|
- var addTmdidsCls = tmdIds.FindAll(x => x.type == 1);
|
|
|
- List<string> tmds = new List<string>();
|
|
|
- if (addTmdidsCls.IsNotEmpty())
|
|
|
+ if (art.classes.Count > 0)
|
|
|
{
|
|
|
- tmds.AddRange(addTmdidsCls.Select(x => x.id).ToList());
|
|
|
- }
|
|
|
- List<StuActivity> stuActivities = new List<StuActivity>();
|
|
|
- List<StuActivity> tmdActivities = new List<StuActivity>();
|
|
|
- List<StuActivity> tchActivities = new List<StuActivity>();
|
|
|
- List<string> sub = new();
|
|
|
- if (art.subjects.Count > 0)
|
|
|
- {
|
|
|
- foreach (var course in art.subjects)
|
|
|
+ List<string> classes = ExamService.getClasses(art.classes, art.stuLists);
|
|
|
+ (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetMemberByListids(_coreAPIHttpService, client, _dingDing, classes, art.school, null);
|
|
|
+ var addStudentsCls = tmdIds.FindAll(x => x.type == 2);
|
|
|
+ var addTmdidsCls = tmdIds.FindAll(x => x.type == 1);
|
|
|
+ List<string> tmds = new List<string>();
|
|
|
+ if (addTmdidsCls.IsNotEmpty())
|
|
|
{
|
|
|
- sub.Add(course.id);
|
|
|
+ tmds.AddRange(addTmdidsCls.Select(x => x.id).ToList());
|
|
|
}
|
|
|
- }
|
|
|
- if (tmds.IsNotEmpty())
|
|
|
- {
|
|
|
- tmds.ForEach(x =>
|
|
|
+ List<StuActivity> stuActivities = new List<StuActivity>();
|
|
|
+ List<StuActivity> tmdActivities = new List<StuActivity>();
|
|
|
+ List<StuActivity> tchActivities = new List<StuActivity>();
|
|
|
+ List<string> sub = new();
|
|
|
+ if (art.subjects.Count > 0)
|
|
|
+ {
|
|
|
+ foreach (var course in art.subjects)
|
|
|
+ {
|
|
|
+ sub.Add(course.id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (tmds.IsNotEmpty())
|
|
|
{
|
|
|
- HashSet<string> classIds = new HashSet<string>();
|
|
|
- classLists.ForEach(z =>
|
|
|
+ tmds.ForEach(x =>
|
|
|
{
|
|
|
- z.members.ForEach(y =>
|
|
|
+ HashSet<string> classIds = new HashSet<string>();
|
|
|
+ classLists.ForEach(z =>
|
|
|
{
|
|
|
- if (y.id.Equals(x) && y.type == 1)
|
|
|
+ z.members.ForEach(y =>
|
|
|
{
|
|
|
- classIds.Add(z.id);
|
|
|
- }
|
|
|
+ if (y.id.Equals(x) && y.type == 1)
|
|
|
+ {
|
|
|
+ classIds.Add(z.id);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ tmdActivities.Add(new StuActivity
|
|
|
+ {
|
|
|
+ pk = "Activity",
|
|
|
+ id = art.id,
|
|
|
+ code = $"Activity-{x}",
|
|
|
+ type = "Art",
|
|
|
+ name = art.name,
|
|
|
+ startTime = art.startTime,
|
|
|
+ endTime = art.endTime,
|
|
|
+ scode = art.code,
|
|
|
+ scope = art.scope,
|
|
|
+ school = art.school,
|
|
|
+ creatorId = art.creatorId,
|
|
|
+ subjects = sub,
|
|
|
+ blob = null,
|
|
|
+ owner = art.owner,
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
+ ext = new Dictionary<string, JsonElement>() { { "subjects", art.subjects.ToJsonString().ToObject<JsonElement>() } },
|
|
|
+ taskStatus = -1,
|
|
|
+ classIds = classIds.ToList()
|
|
|
});
|
|
|
});
|
|
|
- tmdActivities.Add(new StuActivity
|
|
|
- {
|
|
|
- pk = "Activity",
|
|
|
- id = art.id,
|
|
|
- code = $"Activity-{x}",
|
|
|
- type = "Art",
|
|
|
- name = art.name,
|
|
|
- startTime = art.startTime,
|
|
|
- endTime = art.endTime,
|
|
|
- scode = art.code,
|
|
|
- scope = art.scope,
|
|
|
- school = art.school,
|
|
|
- creatorId = art.creatorId,
|
|
|
- subjects = sub,
|
|
|
- blob = null,
|
|
|
- owner = art.owner,
|
|
|
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
- ext = new Dictionary<string, JsonElement>() { { "subjects", art.subjects.ToJsonString().ToObject<JsonElement>() } },
|
|
|
- taskStatus = -1,
|
|
|
- classIds = classIds.ToList()
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
- if (addStudentsCls.IsNotEmpty())
|
|
|
- {
|
|
|
- addStudentsCls.ForEach(x =>
|
|
|
+ }
|
|
|
+ if (addStudentsCls.IsNotEmpty())
|
|
|
{
|
|
|
- HashSet<string> classIds = new HashSet<string>();
|
|
|
- classLists.ForEach(z =>
|
|
|
+ addStudentsCls.ForEach(x =>
|
|
|
{
|
|
|
- z.members.ForEach(y =>
|
|
|
+ HashSet<string> classIds = new HashSet<string>();
|
|
|
+ classLists.ForEach(z =>
|
|
|
{
|
|
|
- if (y.id.Equals(x.id) && y.code.Equals(art.school) && y.type == 2)
|
|
|
+ z.members.ForEach(y =>
|
|
|
{
|
|
|
- classIds.Add(z.id);
|
|
|
- }
|
|
|
+ if (y.id.Equals(x.id) && y.code.Equals(art.school) && y.type == 2)
|
|
|
+ {
|
|
|
+ classIds.Add(z.id);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ stuActivities.Add(new StuActivity
|
|
|
+ {
|
|
|
+ pk = "Activity",
|
|
|
+ id = art.id,
|
|
|
+ code = $"Activity-{x.code.Replace("Base-", "")}-{x.id}",
|
|
|
+ type = "Atr",
|
|
|
+ name = art.name,
|
|
|
+ startTime = art.startTime,
|
|
|
+ endTime = art.endTime,
|
|
|
+ scode = art.code,
|
|
|
+ scope = art.scope,
|
|
|
+ school = art.school,
|
|
|
+ creatorId = art.creatorId,
|
|
|
+ subjects = sub,
|
|
|
+ blob = null,
|
|
|
+ owner = art.owner,
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
+ ext = new Dictionary<string, JsonElement>() { { "subjects", art.subjects.ToJsonString().ToObject<JsonElement>() } },
|
|
|
+ taskStatus = -1,
|
|
|
+ classIds = classIds.ToList()
|
|
|
});
|
|
|
});
|
|
|
- stuActivities.Add(new StuActivity
|
|
|
- {
|
|
|
- pk = "Activity",
|
|
|
- id = art.id,
|
|
|
- code = $"Activity-{x.code.Replace("Base-", "")}-{x.id}",
|
|
|
- type = "Atr",
|
|
|
- name = art.name,
|
|
|
- startTime = art.startTime,
|
|
|
- endTime = art.endTime,
|
|
|
- scode = art.code,
|
|
|
- scope = art.scope,
|
|
|
- school = art.school,
|
|
|
- creatorId = art.creatorId,
|
|
|
- subjects = sub,
|
|
|
- blob = null,
|
|
|
- owner = art.owner,
|
|
|
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
- ext = new Dictionary<string, JsonElement>() {{ "subjects", art.subjects.ToJsonString().ToObject<JsonElement>() } },
|
|
|
- taskStatus = -1,
|
|
|
- classIds = classIds.ToList()
|
|
|
- });
|
|
|
- });
|
|
|
+ }
|
|
|
+ await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
|
|
|
+ //await StatisticsService.SendServiceBus(list, _configuration, _serviceBus, client)
|
|
|
+
|
|
|
}
|
|
|
- await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
|
|
|
- //await StatisticsService.SendServiceBus(list, _configuration, _serviceBus, client);
|
|
|
-
|
|
|
- var messageVoteEnd = new ServiceBusMessage(new { id = tdata.id, progress = "finish", code = tdata.code }.ToJsonString());
|
|
|
+ var messageVoteEnd = new ServiceBusMessage(new { tdata.id, progress = "finish",tdata.code }.ToJsonString());
|
|
|
messageVoteEnd.ApplicationProperties.Add("name", "Art");
|
|
|
if (voteRecords.Count > 0)
|
|
|
{
|
|
@@ -228,11 +230,78 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
|
|
|
await table.Save<ChangeRecord>(changeRecord);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
break;
|
|
|
case "finish":
|
|
|
+ //判定是否是区级创建的活动内容
|
|
|
+ if (!art.lost.Any())
|
|
|
+ {
|
|
|
+ if (art.owner.Equals("area") && string.IsNullOrEmpty(art.pId))
|
|
|
+ {
|
|
|
+ List<(string id, string code, List<Tasks> settings)> artSchools = new();
|
|
|
+ string ql = $"select c.id,c.school,c.settings,c.classes from c where c.pk = 'Art' and c.pId = '{art.id}'";
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: ql))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
|
|
|
+ while (accounts.MoveNext())
|
|
|
+ {
|
|
|
+ JsonElement account = accounts.Current;
|
|
|
+ List<Tasks> settings = account.GetProperty("settings").ToObject<List<Tasks>>();
|
|
|
+ artSchools.Add((account.GetProperty("id").GetString(), account.GetProperty("school").GetString(), settings));
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach (var (id, code, settings) in artSchools)
|
|
|
+ {
|
|
|
+ List<(string eId, string sId)> ids = new();
|
|
|
+ var examIds = settings.SelectMany(s => s.task).Where(a => a.type == 1).Select(z => new { z.acId,z.subject}).ToList();
|
|
|
+ examIds.ForEach(x => {
|
|
|
+ ids.Add((x.acId,x.subject));
|
|
|
+ });
|
|
|
+ List<(string code,string sub, List<string> stu)> stuInfo = await getLostAsync(ids, client, code);
|
|
|
+
|
|
|
+ foreach (var lost in stuInfo)
|
|
|
+ {
|
|
|
+ LostStudent lostStudent = new()
|
|
|
+ {
|
|
|
+ code = lost.code,
|
|
|
+ subject = lost.sub,
|
|
|
+ stu = lost.stu.Count
|
|
|
+ };
|
|
|
+ art.lost.Add(lostStudent);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ArtEvaluation>(art, art.id, new PartitionKey(art.code));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //获取当前艺术评价相关评测ID目前暂时排除区级发布的评测信息
|
|
|
|
|
|
+ List<(string eId, string sId)> ids = new();
|
|
|
+ var examId = art.settings.SelectMany(x => x.task).Where(c => c.type == 1).Select(z => new { z.acId,z.subject}).ToList();
|
|
|
+ examId.ForEach(x => {
|
|
|
+ ids.Add((x.acId, x.subject));
|
|
|
+ });
|
|
|
+ List<(string code,string sub, List<string> stu)> stuInfo = await getLostAsync(ids, client, art.school);
|
|
|
|
|
|
+ foreach (var (code,sub, stu) in stuInfo)
|
|
|
+ {
|
|
|
+ LostStudent lostStudent = new()
|
|
|
+ {
|
|
|
+ code = code,
|
|
|
+ subject = sub,
|
|
|
+ stu = stu.Count
|
|
|
+ };
|
|
|
+ art.lost.Add(lostStudent);
|
|
|
+ }
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<ArtEvaluation>(art, art.id, new PartitionKey(art.code));
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -247,5 +316,30 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+ public static async Task<List<(string code, string subject,List<string> stus)>> getLostAsync(List<(string eId, string sId)> examIds, CosmosClient client, string code)
|
|
|
+ {
|
|
|
+ List<(string code,string sub, List<string> stu)> stuInfo = new();
|
|
|
+ if (examIds.Any())
|
|
|
+ {
|
|
|
+ string examSql = $"select c.id,c.school,c.lostStu from c where c.id in ({string.Join(",", examIds.Select(o => $"'{o.eId}'"))})";
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: examSql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Exam-{code}") }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ var accounts = json.RootElement.GetProperty("Documents").EnumerateArray();
|
|
|
+ while (accounts.MoveNext())
|
|
|
+ {
|
|
|
+ JsonElement account = accounts.Current;
|
|
|
+ List<string> lostStu = account.GetProperty("lostStu").ToObject<List<string>>();
|
|
|
+ string id = account.GetProperty("id").GetString();
|
|
|
+ string sub = examIds.Where(c => c.eId.Equals(id)).FirstOrDefault().sId;
|
|
|
+ stuInfo.Add((account.GetProperty("school").GetString(), sub, lostStu));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return stuInfo;
|
|
|
+ }
|
|
|
}
|
|
|
}
|