Przeglądaj źródła

移除StuList的代码

CrazyIter_Bin 3 lat temu
rodzic
commit
ee8feb2b19

+ 3 - 3
TEAMModelFunction/ActivityHttpTrigger.cs

@@ -211,7 +211,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities,null);
+                    await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities,null);
                 }
             }
             return new OkObjectResult(new { });
@@ -313,7 +313,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
+                    await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
                 }
             }
             return new OkObjectResult(new { });
@@ -415,7 +415,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
+                    await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
                 }
             }
             return new OkObjectResult(new { });

+ 5 - 46
TEAMModelFunction/MonitorServicesBus.cs

@@ -355,47 +355,6 @@ namespace TEAMModelFunction
         ///// </data>
         /// <param name="msg"></param>
         /// <returns></returns>
-        [FunctionName("StuList")]
-        public async Task StuList([ServiceBusTrigger("%Azure:ServiceBus:ActiveTask%", "stulist", Connection = "Azure:ServiceBus:ConnectionString")] string msg)
-        {
-            var client = _azureCosmos.GetCosmosClient();
-            try
-            {
-              
-                var jsonMsg = JsonDocument.Parse(msg);
-                ListChange stuListChange = msg.ToObject<ListChange>();
-                //名单变动修改学生课程关联信息
-                //await StuListService.FixStuCourse(client, stuListChange);
-                //Vote投票 Survey问卷 Exam评测 Learn学习活动 Homework作业活动
-                //名单变动修改学生问卷关联信息
-                await StuListService.FixActivity(client, _dingDing, stuListChange, "Survey");
-                //名单变动修改学生投票关联信息
-                await StuListService.FixActivity(client, _dingDing, stuListChange, "Vote");
-                //名单变动修改学生评测关联信息
-                await StuListService.FixActivity(client, _dingDing, stuListChange, "Exam");
-                //TODO学习活动
-                //await FixActivity(client, stuListChange, "Learn");
-                //TODO作业活动
-                await StuListService.FixActivity(client,_dingDing, stuListChange, "Homework");
-
-                if (stuListChange.type==null||!stuListChange.type.Equals("research")) {
-                    //课程名单变动修改学生课程关联信息
-                    await StuListService.FixStuCourse(client, _dingDing, stuListChange);
-                }
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-StuListServiceBus-StuList\n{ex.Message}\n{ex.StackTrace}\n{msg}", GroupNames.成都开发測試群組);
-            }
-        }
-        /// <summary>
-        /// 完善课程变更,StuListChange,  originCode是学校编码 则表示名单是学校自定义名单,如果是tmdid则表示醍摩豆的私有名单,scope=school,private。
-        /// </summary>
-        /// <data msg>
-        /// CourseChange
-        ///// </data>
-        /// <param name="msg"></param>
-        /// <returns></returns>
         [FunctionName("GroupChange")]
         public async Task GroupChange([ServiceBusTrigger("%Azure:ServiceBus:ActiveTask%", "group-change", Connection = "Azure:ServiceBus:ConnectionString")] string msg)
         {
@@ -408,20 +367,20 @@ namespace TEAMModelFunction
                 //await StuListService.FixStuCourse(client, stuListChange);
                 //Vote投票 Survey问卷 Exam评测 Learn学习活动 Homework作业活动
                 //名单变动修改学生问卷关联信息
-                await GroupListService.FixActivity(client, _dingDing, groupChange, "Survey");
+                await ActivityService.FixActivity(client, _dingDing, groupChange, "Survey");
                 //名单变动修改学生投票关联信息
-                await GroupListService.FixActivity(client, _dingDing, groupChange, "Vote");
+                await ActivityService.FixActivity(client, _dingDing, groupChange, "Vote");
                 //名单变动修改学生评测关联信息
-                await GroupListService.FixActivity(client, _dingDing, groupChange, "Exam");
+                await ActivityService.FixActivity(client, _dingDing, groupChange, "Exam");
                 //TODO学习活动
                 //await FixActivity(client, stuListChange, "Learn");
                 //名单变动修改学生作业活动信息
-                await GroupListService.FixActivity(client, _dingDing, groupChange, "Homework");
+                await ActivityService.FixActivity(client, _dingDing, groupChange, "Homework");
 
                 if (groupChange.type == null || !groupChange.type.Equals("research"))
                 {
                     //课程名单变动修改学生课程关联信息
-                    await GroupListService.FixStuCourse(client, _dingDing, groupChange);
+                    await ActivityService.FixStuCourse(client, _dingDing, groupChange);
                 }
             }
             catch (Exception ex)

+ 1 - 1
TEAMModelFunction/TriggerExam.cs

@@ -162,7 +162,7 @@ namespace TEAMModelFunction
                                         });
                                     });
                                 }
-                                await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
+                                await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, null);
                                 //向学生或醍摩豆账号发起通知
                                 #region
                                 //Notice notice = new Notice()

+ 1 - 1
TEAMModelFunction/TriggerExamLite.cs

@@ -101,7 +101,7 @@ namespace TEAMModelFunction
                                     });
                                 });
                             }
-                            await TriggerStuActivity.SaveStuActivity(client, _dingDing, null, null, tchActivities);
+                            await ActivityService.SaveStuActivity(client, _dingDing, null, null, tchActivities);
                             var messageWorkEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
                             messageWorkEnd.ApplicationProperties.Add("name", "ExamLite");
                             if (changeRecords.Count > 0)

+ 1 - 1
TEAMModelFunction/TriggerHomework.cs

@@ -159,7 +159,7 @@ namespace TEAMModelFunction
                                     });
                                 });
                             }
-                            await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
+                            await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
 
                             var messageWorkEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
                             messageWorkEnd.ApplicationProperties.Add("name", "Homework");

+ 1 - 1
TEAMModelFunction/TriggerStudy.cs

@@ -101,7 +101,7 @@ namespace TEAMModelFunction
                                     });
                                 });
                             }
-                            await TriggerStuActivity.SaveStuActivity(client, _dingDing, null, null, tchActivities);
+                            await ActivityService.SaveStuActivity(client, _dingDing, null, null, tchActivities);
                             var messageWorkEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = tdata.code }.ToJsonString());
                             messageWorkEnd.ApplicationProperties.Add("name", "Study");
                             if (changeRecords.Count > 0)

+ 1 - 1
TEAMModelFunction/TriggerSurvey.cs

@@ -167,7 +167,7 @@ namespace TEAMModelFunction
                                     });
                                 });
                             }
-                            await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
+                            await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
                             //向学生或醍摩豆账号发起通知
                             #region
                             //Notice notice = new Notice()

+ 1 - 3
TEAMModelFunction/TriggerVote.cs

@@ -147,8 +147,6 @@ namespace TEAMModelFunction
                                 });
                             }
                             (List<RMember> tchList, List<RGroupList> classInfos) = await GroupListService.GetStutmdidListids(client, _dingDing, vote.tchLists, vote.school);
-                            // (List<TmdInfo> tmdInfos, List<ClassListInfo> classInfos) = await TriggerStuActivity.GetTchList(client, _dingDing, ids, $"{school}");
-                           // (List<TmdInfo> tchList, _) = await TriggerStuActivity.GetTchList(client, _dingDing, vote.tchLists, vote.school);
                             if (tchList.IsNotEmpty())
                             {
                                 tchList.ForEach(x => {
@@ -177,7 +175,7 @@ namespace TEAMModelFunction
                             await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}投票活动,:教研组活动:" +
                              
                                $"{tchActivities.ToJsonString()}\n", GroupNames.成都开发測試群組);
-                            await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
+                            await ActivityService.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
                             //向学生或醍摩豆账号发起通知
                             #region
                             //Notice notice = new Notice()

+ 380 - 0
TEAMModelOS.SDK/Models/Service/ActivityService.cs

@@ -0,0 +1,380 @@
+using Azure;
+using Azure.Cosmos;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.SDK.Models.Service;
+using HTEXLib.COMM.Helpers;
+
+namespace TEAMModelOS.SDK
+{
+    public class ActivityService
+    {
+        public static async Task FixActivity(CosmosClient client, DingDing _dingDing, GroupChange groupChange, string type)
+        {
+            try
+            {
+                var query = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c  where  c.pk='{type}' " +
+                    $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}'))or ( array_contains(c.tchLists,'{groupChange.listid}')))";
+                //$"and A1 in('{groupChange.listid}') ";
+                List<MQActivity> datas = new List<MQActivity>();
+                if (groupChange.scope.Equals("school", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.school))
+                {
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
+                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.school}") }))
+                    {
+                        datas.Add(item);
+                    }
+                    ///还要处理该学校每个老师发布的班级的
+                    List<SchoolTeacher> teachers = new List<SchoolTeacher>();
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<SchoolTeacher>(queryText: $"SELECT c.id, c.name FROM c",
+                        requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{groupChange.school}") }))
+                    {
+                        teachers.Add(item);
+                    }
+                    foreach (var techer in teachers)
+                    {
+                        var queryTech = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c " +
+                            $" where c.school='{groupChange.school}'   and   c.pk='{type}'" +
+                            $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}')))";
+                        //  $" and A1 in('{groupChange.listid}') ";
+                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: queryTech,
+                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{techer.id}") }))
+                        {
+                            datas.Add(item);
+                        }
+                    }
+                }
+                if (groupChange.scope.Equals("private", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.creatorId))
+                {
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
+                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.creatorId}") }))
+                    {
+                        datas.Add(item);
+                    }
+                }
+                long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                foreach (MQActivity activity in datas)
+                {
+                    //已经完结的不再允许加入,还未开始的。
+                    if (activity.progress.Equals("finish") || activity.progress.Equals("pending"))
+                    {
+                        continue;
+                    }
+                    List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
+                    //stujoin新加入名单的
+                    foreach (Member member in groupChange.stujoin)
+                    {
+                        var stucourse = new StuActivity
+                        {
+                            id = activity.id,
+                            scode = activity.code,
+                            name = activity.name,
+                            code = $"Activity-{member.code.Replace("Base-", "")}-{member.id}",
+                            scope = activity.scope,
+                            school = activity.school,
+                            creatorId = activity.creatorId,
+                            pk = "Activity",
+                            type = type,
+                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
+                            startTime = activity.startTime,
+                            endTime = activity.endTime,
+                            blob = activity.blob,
+                            owner = activity.owner,
+                            createTime = nowtime,
+                            taskStatus = -1,
+                            classIds = classes
+                        };
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                    }
+
+                    //tmdjoin新加入的
+                    foreach (Member member in groupChange.tmdjoin)
+                    {
+                        var stucourse = new StuActivity
+                        {
+                            id = activity.id,
+                            scode = activity.code,
+                            name = activity.name,
+                            code = $"Activity-{member.id}",
+                            scope = activity.scope,
+                            school = activity.school,
+                            creatorId = activity.creatorId,
+                            pk = "Activity",
+                            type = type,
+                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
+                            startTime = activity.startTime,
+                            endTime = activity.endTime,
+                            blob = activity.blob,
+                            owner = activity.owner,
+                            createTime = nowtime,
+                            taskStatus = -1,
+                            classIds = classes
+                        };
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                    }
+                    //tchjoin新加入的
+                    foreach (Member member in groupChange.tchjoin)
+                    {
+                        var stucourse = new StuActivity
+                        {
+                            id = activity.id,
+                            scode = activity.code,
+                            name = activity.name,
+                            code = $"Activity-{member.id}",
+                            scope = activity.scope,
+                            school = activity.school,
+                            creatorId = activity.creatorId,
+                            pk = "Activity",
+                            type = type,
+                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
+                            startTime = activity.startTime,
+                            endTime = activity.endTime,
+                            blob = activity.blob,
+                            owner = activity.owner,
+                            createTime = nowtime,
+                            taskStatus = -1,
+                            classIds = classes
+                        };
+                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                    }
+                    foreach (Member member in groupChange.stuleave)
+                    {
+                        try
+                        {
+
+                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
+                        }
+                        catch (CosmosException)
+                        {
+                            continue;
+                            // 继续执行 删除失败
+                        }
+                    }
+                    foreach (Member member in groupChange.tmdleave)
+                    {
+                        try
+                        {
+
+                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
+                        }
+                        catch (CosmosException)
+                        {
+                            continue;
+                            // 继续执行 删除失败
+                        }
+                    }
+                    foreach (Member member in groupChange.tchleave)
+                    {
+                        try
+                        {
+                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
+                        }
+                        catch (CosmosException)
+                        {
+                            continue;
+                            // 继续执行 删除失败
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{ex.Message}{ex.StackTrace}{groupChange.ToJsonString()}{type}", GroupNames.醍摩豆服務運維群組);
+            }
+        }
+        public static async Task FixStuCourse(CosmosClient client, DingDing _dingDing, GroupChange groupChange)
+        {
+            //1.查找学校或教师的课程是否包含该名单的课程。
+            var query = $"select distinct c.code,c.id,c.no,c.name,c.scope, c.creatorId,c.school from c join A0 in c.schedule where A0.stulist = '{groupChange.listid}'";
+            List<Course> courses = new List<Course>();
+            if (groupChange.scope.Equals("school") && !string.IsNullOrEmpty(groupChange.school))
+            {
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: query,
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.school}") }))
+                {
+                    courses.Add(item);
+                }
+            }
+            if (groupChange.scope.Equals("private") && !string.IsNullOrEmpty(groupChange.creatorId))
+            {
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: query,
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.creatorId}") }))
+                {
+                    courses.Add(item);
+                }
+            }
+            long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+            // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 需要处理的课程\n{courses.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
+            //2.获取课程的id 并尝试添加或移除对应的学生课程记录StuCourse。
+            foreach (var course in courses)
+            {
+                //学生新加入名单的
+                foreach (Member member in groupChange.stujoin)
+                {
+                    var stucourse = new StuCourse
+                    {
+                        id = course.id,
+                        scode = course.code,
+                        name = course.name,
+                        code = $"StuCourse-{member.code.Replace("Base-", "")}-{member.id}",
+                        scope = course.scope,
+                        school = course.school,
+                        creatorId = course.creatorId,
+                        pk = "StuCourse",
+                        stulist = new List<string> { groupChange.listid },
+                        createTime = nowtime
+                    };
+                    // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
+                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                }
+                //tmd新加入的
+                foreach (Member member in groupChange.tmdjoin)
+                {
+                    var stucourse = new StuCourse
+                    {
+                        id = course.id,
+                        scode = course.code,
+                        name = course.name,
+                        code = $"StuCourse-{member.id}",
+                        scope = course.scope,
+                        school = course.school,
+                        creatorId = course.creatorId,
+                        pk = "StuCourse",
+                        stulist = new List<string> { groupChange.listid },
+                        createTime = nowtime
+                    };
+                    // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
+                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                }
+                //移除名单的。 在点击相关的课程,再去二次校验是否存在,不存在则再去删除。
+                foreach (var delStu in groupChange.stuleave)
+                {
+                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delStu.code.Replace("Base-", "")}-{delStu.id}"));
+                }
+                foreach (var delTmd in groupChange.tmdleave)
+                {
+                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delTmd}"));
+                }
+            }
+        }
+        public static async Task<string> SaveStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities, List<StuActivity> tmdActivities, List<StuActivity> tchActivities)
+        {
+            try
+            {
+                if (stuActivities.IsNotEmpty())
+                {
+                    foreach (var x in stuActivities)
+                    {
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
+                    }
+                }
+                if (tmdActivities.IsNotEmpty())
+                {
+                    foreach (var x in tmdActivities)
+                    {
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
+                    }
+                }
+                if (tchActivities.IsNotEmpty())
+                {
+                    foreach (var x in tchActivities)
+                    {
+                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(x, new PartitionKey(x.code));
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-OS,TriggerStuActivity-SaveStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+            }
+            return "";
+        }
+        public static async Task RefreshStuActivity(CosmosClient client, DingDing _dingDing, string id, string code)
+        {
+            MQActivity activity = null;
+            try
+            {
+                var aactivity = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync(id, new Azure.Cosmos.PartitionKey(code));
+                using var da = await JsonDocument.ParseAsync(aactivity.ContentStream);
+                activity = da.ToObject<MQActivity>();
+            }
+            catch (CosmosException)
+            {
+                activity = null;
+            }
+            if (activity != null)
+            {
+                List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
+                (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetStutmdidListids(client, _dingDing, classes, activity.school);
+                var students = tmdIds.FindAll(x => x.type == 2);
+                var tmdids = tmdIds.FindAll(x => x.type == 1);
+                if (tmdids.IsNotEmpty())
+                {
+                    foreach (RMember tmdid in tmdids)
+                    {
+                        var stucourse = new StuActivity
+                        {
+                            id = activity.id,
+                            scode = activity.code,
+                            name = activity.name,
+                            code = $"Activity-{tmdid.id}",
+                            source = activity.source,
+                            scope = activity.scope,
+                            school = activity.school,
+                            creatorId = activity.creatorId,
+                            pk = "Activity",
+                            type = activity.pk,
+                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
+                            startTime = activity.startTime,
+                            endTime = activity.endTime,
+                            blob = activity.blob,
+                            owner = activity.owner,
+                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
+                            taskStatus = -1,
+                            classIds = classes
+                        };
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                    }
+                }
+                if (students.IsNotEmpty())
+                {
+                    foreach (RMember student in students)
+                    {
+                        var stucourse = new StuActivity
+                        {
+                            id = activity.id,
+                            scode = activity.code,
+                            name = activity.name,
+                            code = $"Activity-{activity.school}-{student.id}",
+                            scope = activity.scope,
+                            source = activity.source,
+                            school = activity.school,
+                            creatorId = activity.creatorId,
+                            pk = "Activity",
+                            type = activity.pk,
+                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
+                            startTime = activity.startTime,
+                            endTime = activity.endTime,
+                            blob = activity.blob,
+                            owner = activity.owner,
+                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
+                            taskStatus = -1,
+                            classIds = classes
+                        };
+                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
+                    }
+                }
+            }
+        }
+    }
+}

+ 1 - 248
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -660,254 +660,7 @@ namespace TEAMModelOS.SDK.Models
             return (null, null);
         }
 
-        public static async Task FixActivity(CosmosClient client, DingDing _dingDing, GroupChange groupChange, string type)
-        {
-            try
-            {
-                var query = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c  where  c.pk='{type}' " +
-                    $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}'))or ( array_contains(c.tchLists,'{groupChange.listid}')))";
-                //$"and A1 in('{groupChange.listid}') ";
-                List<MQActivity> datas = new List<MQActivity>();
-                if (groupChange.scope.Equals("school", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.school))
-                {
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.school}") }))
-                    {
-                        datas.Add(item);
-                    }
-                    ///还要处理该学校每个老师发布的班级的
-                    List<SchoolTeacher> teachers = new List<SchoolTeacher>();
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<SchoolTeacher>(queryText: $"SELECT c.id, c.name FROM c",
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{groupChange.school}") }))
-                    {
-                        teachers.Add(item);
-                    }
-                    foreach (var techer in teachers)
-                    {
-                        var queryTech = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c " +
-                            $" where c.school='{groupChange.school}'   and   c.pk='{type}'" +
-                            $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}')))";
-                        //  $" and A1 in('{groupChange.listid}') ";
-                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: queryTech,
-                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{techer.id}") }))
-                        {
-                            datas.Add(item);
-                        }
-                    }
-                }
-                if (groupChange.scope.Equals("private", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.creatorId))
-                {
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.creatorId}") }))
-                    {
-                        datas.Add(item);
-                    }
-                }
-                long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                foreach (MQActivity activity in datas)
-                {
-                    //已经完结的不再允许加入,还未开始的。
-                    if (activity.progress.Equals("finish") || activity.progress.Equals("pending"))
-                    {
-                        continue;
-                    }
-                    List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
-                    //stujoin新加入名单的
-                    foreach (Member member in groupChange.stujoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{member.code.Replace("Base-", "")}-{member.id}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = nowtime,
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-
-                    //tmdjoin新加入的
-                    foreach (Member member in groupChange.tmdjoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{member.id}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = nowtime,
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                    //tchjoin新加入的
-                    foreach (Member member in groupChange.tchjoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{member.id}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = nowtime,
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                    foreach (Member member in groupChange.stuleave)
-                    {
-                        try
-                        {
-
-                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
-                        }
-                        catch (CosmosException)
-                        {
-                            continue;
-                            // 继续执行 删除失败
-                        }
-                    }
-                    foreach (Member member in groupChange.tmdleave)
-                    {
-                        try
-                        {
-
-                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
-                        }
-                        catch (CosmosException)
-                        {
-                            continue;
-                            // 继续执行 删除失败
-                        }
-                    }
-                    foreach (Member member in groupChange.tchleave)
-                    {
-                        try
-                        {
-                            await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
-                        }
-                        catch (CosmosException)
-                        {
-                            continue;
-                            // 继续执行 删除失败
-                        }
-                    }
-                }
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{ex.Message}{ex.StackTrace}{groupChange.ToJsonString()}{type}", GroupNames.醍摩豆服務運維群組);
-            }
-        }
-        public static async Task FixStuCourse(CosmosClient client, DingDing _dingDing, GroupChange groupChange)
-        {
-            //1.查找学校或教师的课程是否包含该名单的课程。
-            var query = $"select distinct c.code,c.id,c.no,c.name,c.scope, c.creatorId,c.school from c join A0 in c.schedule where A0.stulist = '{groupChange.listid}'";
-            List<Course> courses = new List<Course>();
-            if (groupChange.scope.Equals("school") && !string.IsNullOrEmpty(groupChange.school))
-            {
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: query,
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.school}") }))
-                {
-                    courses.Add(item);
-                }
-            }
-            if (groupChange.scope.Equals("private") && !string.IsNullOrEmpty(groupChange.creatorId))
-            {
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: query,
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.creatorId}") }))
-                {
-                    courses.Add(item);
-                }
-            }
-            long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-            // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 需要处理的课程\n{courses.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-            //2.获取课程的id 并尝试添加或移除对应的学生课程记录StuCourse。
-            foreach (var course in courses)
-            {
-                //学生新加入名单的
-                foreach (Member member in groupChange.stujoin)
-                {
-                    var stucourse = new StuCourse
-                    {
-                        id = course.id,
-                        scode = course.code,
-                        name = course.name,
-                        code = $"StuCourse-{member.code.Replace("Base-", "")}-{member.id}",
-                        scope = course.scope,
-                        school = course.school,
-                        creatorId = course.creatorId,
-                        pk = "StuCourse",
-                        stulist = new List<string> { groupChange.listid },
-                        createTime = nowtime
-                    };
-                    // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                }
-                //tmd新加入的
-                foreach (Member member in groupChange.tmdjoin)
-                {
-                    var stucourse = new StuCourse
-                    {
-                        id = course.id,
-                        scode = course.code,
-                        name = course.name,
-                        code = $"StuCourse-{member.id}",
-                        scope = course.scope,
-                        school = course.school,
-                        creatorId = course.creatorId,
-                        pk = "StuCourse",
-                        stulist = new List<string> { groupChange.listid },
-                        createTime = nowtime
-                    };
-                    // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                }
-                //移除名单的。 在点击相关的课程,再去二次校验是否存在,不存在则再去删除。
-                foreach (var delStu in groupChange.stuleave)
-                {
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delStu.code.Replace("Base-", "")}-{delStu.id}"));
-                }
-                foreach (var delTmd in groupChange.tmdleave)
-                {
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delTmd}"));
-                }
-            }
-        }
+        
     }
     public class CompareIdCode : IEqualityComparer<(string id, string code)>
     {

+ 0 - 257
TEAMModelOS.SDK/Models/Service/StuListService.cs

@@ -1,257 +0,0 @@
-using Azure.Cosmos;
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK;
-using TEAMModelOS.SDK.Models;
-using TEAMModelOS.SDK.Models.Cosmos.Common;
-using TEAMModelOS.SDK.Models.Service;
-using HTEXLib.COMM.Helpers;
-
-namespace TEAMModelFunction
-{
-    public class StuListService
-    {
-        public static async Task FixActivity(CosmosClient client,DingDing _dingDing, ListChange stuListChange, string type)
-        {
-            
-            try
-            {
-                var query = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c  where  c.pk='{type}' " +
-                    $" and (( array_contains(c.classes,'{stuListChange.listid}')) or ( array_contains(c.stuLists,'{stuListChange.listid}'))or ( array_contains(c.tchLists,'{stuListChange.listid}')))";
-                    //$"and A1 in('{stuListChange.listid}') ";
-                List<MQActivity> datas = new List<MQActivity>();
-                if (stuListChange.scope.Equals("school", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(stuListChange.school)) {
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
-                       requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{stuListChange.school}") }))
-                    {
-                        datas.Add(item);
-                    }
-                    ///还要处理该学校每个老师发布的班级的
-                    List<SchoolTeacher> teachers = new List<SchoolTeacher>();
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<SchoolTeacher>(queryText: $"SELECT c.id, c.name FROM c",
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{stuListChange.school}") }))
-                    {
-                        teachers.Add(item);
-                    }
-                    foreach (var techer in teachers) {
-                        var queryTech = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime   FROM c " +
-                            $" where c.school='{stuListChange.school}'   and   c.pk='{type}'" +
-                            $" and (( array_contains(c.classes,'{stuListChange.listid}')) or ( array_contains(c.stuLists,'{stuListChange.listid}')))";
-                      //  $" and A1 in('{stuListChange.listid}') ";
-                        await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: queryTech,
-                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{techer.id}") }))
-                        {
-                            datas.Add(item);
-                        }
-                    }
-                }
-                if (stuListChange.scope.Equals("private", StringComparison.OrdinalIgnoreCase)&&!string.IsNullOrEmpty(stuListChange.creatorId))
-                {
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
-                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{stuListChange.creatorId}") }))
-                    {
-                        datas.Add(item);
-                    }
-                }
-              //  await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n名单发生变更:涉及活动类型变更的 \n{datas.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                foreach (MQActivity activity in datas)
-                {
-                    //已经完结的不再允许加入
-                    if (string.IsNullOrEmpty(activity.progress)|| activity.progress.Equals("finish") || activity.progress.Equals("pending"))
-                    {
-                        continue;
-                    }
-                    List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
-                    //学生新加入名单的
-                    foreach (Students students in stuListChange.stujoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{students.code.Replace("Base-","")}-{students.id}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                     //   await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n名单发生变更 新建活动中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                    
-                    //tmd新加入的
-                    foreach (string tmdid in stuListChange.tmdjoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{tmdid}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = -1,
-                            classIds = classes
-                        }; 
-                      //  await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n名单发生变更 新建活动中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                    //tmd新加入的
-                    foreach (string tch in stuListChange.tchjoin)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{tch}",
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = type,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        //  await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n名单发生变更 新建活动中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                    foreach (Students students in stuListChange.stuleave)
-                    {
-                        try
-                        {
-
-                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{students.code.Replace("Base-", "")}-{students.id}"));
-                        }
-                        catch (CosmosException ex)
-                        {
-                            //仅处理未写入的数据。
-                        }
-                    }
-                    foreach (string tmdid in stuListChange.tmdhleave)
-                    {
-                        try
-                        {
-
-                            await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{tmdid}"));
-                        }
-                        catch(CosmosException ex )
-                        {
-                            //仅处理未写入的数据。
-                        }
-                    }
-                }
-            }
-            catch(Exception ex ) {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{ex.Message}{ex.StackTrace}{stuListChange.ToJsonString()}{type}", GroupNames.醍摩豆服務運維群組);
-            }
-        }
-
-        public static async Task FixStuCourse(CosmosClient client,DingDing  _dingDing, ListChange stuListChange)
-        {
-            //1.查找学校或教师的课程是否包含该名单的课程。
-            var query = $"select distinct c.code,c.id,c.no,c.name,c.scope, c.creatorId,c.school from c join A0 in c.schedule where A0.stulist = '{stuListChange.listid}'";
-            List<Course> courses = new List<Course>();
-            if (stuListChange.scope.Equals("school") && !string.IsNullOrEmpty(stuListChange.school))
-            {
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: query,
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{stuListChange.school}") }))
-                {
-                    courses.Add(item);
-                }
-            }
-            if (stuListChange.scope.Equals("private") && !string.IsNullOrEmpty(stuListChange.creatorId))
-            {
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: query,
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{stuListChange.creatorId}") }))
-                {
-                    courses.Add(item);
-                }
-            }
-           // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 需要处理的课程\n{courses.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-            //2.获取课程的id 并尝试添加或移除对应的学生课程记录StuCourse。
-            foreach (var course in courses)
-            {
-                //学生新加入名单的
-                foreach (Students students in stuListChange.stujoin)
-                {
-                    var stucourse = new StuCourse
-                    {
-                        id = course.id,
-                        scode = course.code,
-                        name = course.name,
-                        code = $"StuCourse-{students.code.Replace("Base-", "")}-{students.id}",
-                        scope = course.scope,
-                        school = course.school,
-                        creatorId = course.creatorId,
-                        pk = "StuCourse",
-                        stulist = new List<string> { stuListChange.listid },
-                        createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
-                    };
-                   // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                }
-                //tmd新加入的
-                foreach (string tmdid in stuListChange.tmdjoin)
-                {
-                    var stucourse = new StuCourse
-                    {
-                        id = course.id,
-                        scode = course.code,
-                        name = course.name,
-                        code = $"StuCourse-{tmdid}",
-                        scope = course.scope,
-                        school = course.school,
-                        creatorId = course.creatorId,
-                        pk = "StuCourse",
-                        stulist= new List<string> { stuListChange .listid},
-                        createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
-                    };
-                   // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                }
-                //移除名单的。 在点击相关的课程,再去二次校验是否存在,不存在则再去删除。
-                foreach (var delStu in stuListChange.stuleave)
-                {
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delStu.code.Replace("Base-", "")}-{delStu.id}"));
-                }
-                foreach (var delTmd in stuListChange.tmdhleave)
-                {
-                    await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delTmd}"));
-                }
-            }
-        }
-
-    }
-}

+ 0 - 134
TEAMModelOS.SDK/Models/Service/TriggerStuActivity.cs

@@ -1,134 +0,0 @@
-using Azure;
-using Azure.Cosmos;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-using TEAMModelOS.SDK.DI;
-using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK;
-using TEAMModelOS.SDK.Models;
-using TEAMModelOS.SDK.Models.Cosmos.Common;
-using TEAMModelOS.SDK.Models.Service;
-using HTEXLib.COMM.Helpers;
-
-namespace TEAMModelOS.SDK
-{
-    public class TriggerStuActivity
-    {
-        public static async Task RefreshStuActivity(CosmosClient client, DingDing _dingDing, string id, string code)
-        {
-            MQActivity activity = null;
-            try
-            {
-                var aactivity = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync(id, new Azure.Cosmos.PartitionKey(code));
-                using var da = await JsonDocument.ParseAsync(aactivity.ContentStream);
-                activity = da.ToObject<MQActivity>();
-            }
-            catch (CosmosException)
-            {
-                activity = null;
-            }
-            if (activity != null)
-            {
-                List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
-                (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetStutmdidListids(client, _dingDing, classes, activity.school);
-                var students = tmdIds.FindAll(x => x.type == 2);
-                var tmdids = tmdIds.FindAll(x => x.type == 1);
-                if (tmdids.IsNotEmpty())
-                {
-                    foreach (RMember tmdid in tmdids)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{tmdid.id}",
-                            source = activity.source,
-                            scope = activity.scope,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = activity.pk,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                }
-                if (students.IsNotEmpty())
-                {
-                    foreach (RMember student in students)
-                    {
-                        var stucourse = new StuActivity
-                        {
-                            id = activity.id,
-                            scode = activity.code,
-                            name = activity.name,
-                            code = $"Activity-{activity.school}-{student.id}",
-                            scope = activity.scope,
-                            source = activity.source,
-                            school = activity.school,
-                            creatorId = activity.creatorId,
-                            pk = "Activity",
-                            type = activity.pk,
-                            subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
-                            startTime = activity.startTime,
-                            endTime = activity.endTime,
-                            blob = activity.blob,
-                            owner = activity.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = -1,
-                            classIds = classes
-                        };
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
-                    }
-                }
-            }
-        }
-
-        public static async Task<string> SaveStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities, List<StuActivity> tmdActivities, List<StuActivity> tchActivities)
-        {
-            try
-            {
-                if (stuActivities.IsNotEmpty())
-                {
-                    foreach (var x in stuActivities)
-                    {
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
-                    }
-                }
-                if (tmdActivities.IsNotEmpty())
-                {
-                    foreach (var x in tmdActivities)
-                    {
-                        await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
-                    }
-                }
-                if (tchActivities.IsNotEmpty())
-                {
-                    foreach (var x in tchActivities)
-                    {
-                        await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(x, new PartitionKey(x.code));
-                    }
-                }
-            }
-            catch (Exception ex)
-            {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-OS,TriggerStuActivity-SaveStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
-            }
-            return "";
-        }
-         
-    }
-}

+ 1 - 1
TEAMModelOS/Controllers/Common/CommonController.cs

@@ -159,7 +159,7 @@ namespace TEAMModelOS.Controllers.Common
                 await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync<Dictionary<string, object>>(dy, dy["id"].ToString(), new Azure.Cosmos.PartitionKey(dy["code"].ToString()));
                 var httpClient = _clientFactory.CreateClient();
                 var content = new { id = $"{id}", code = $"{code}" };
-                await TriggerStuActivity.RefreshStuActivity(client, _dingDing, $"{id}", $"{code}");
+                await ActivityService.RefreshStuActivity(client, _dingDing, $"{id}", $"{code}");
                 return Ok(new { code=200});
             }
             catch (Exception ex)