CrazyIter_Bin 3 years ago
parent
commit
67eac8889c

+ 16 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Inner/GroupChange.cs

@@ -30,14 +30,30 @@ namespace TEAMModelOS.SDK.Models
         /// 学校教师名单离开的成员
         /// </summary>
         public List<Member> tchleave { get; set; } = new List<Member>();
+        /// <summary>
+        /// 名单id
+        /// </summary>
         public string listid { get; set; }
         /// <summary>
         /// 分区
         /// </summary>
         public string scope { get; set; }
+        /// <summary>
+        /// 名单 分区键的coude
+        /// </summary>
         public string originCode { get; set; }
         public string school { get; set; }
+        /// <summary>
+        /// 名单创建者
+        /// </summary>
         public string creatorId { get; set; }
+        /// <summary>
+        /// 名单类型
+        /// </summary>
         public string type { get; set; }
+        /// <summary>
+        /// 名单的状态 upsert(创建或更新)   delete(删除状态,用于移除课程名单id,活动名单id) ,默认upsert
+        /// </summary>
+        public string status { get; set; } = "upsert";
     }
 }

+ 38 - 13
TEAMModelOS.SDK/Models/Service/ActivityService.cs

@@ -265,25 +265,44 @@ namespace TEAMModelOS.SDK
         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}'";
+            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}' or A0.classId = '{groupChange.listid}' ";
+            if (groupChange.status.Equals("delete")) {
+                query = $"select distinct value(c) from c join A0 in c.schedule where A0.stulist = '{groupChange.listid}' or A0.classId = '{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}") }))
+            if (!string.IsNullOrWhiteSpace(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);
                 }
             }
-            if (groupChange.scope.Equals("private") && !string.IsNullOrEmpty(groupChange.creatorId))
+            if (!string.IsNullOrWhiteSpace(groupChange.school))
             {
-                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}") }))
+                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);
                 }
             }
-            long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+            //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)
@@ -304,8 +323,9 @@ namespace TEAMModelOS.SDK
                         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));
+                    try { await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code)); } catch (Exception  ) {
+                        continue;
+                    }
                 }
                 //tmd新加入的
                 foreach (Member member in groupChange.tmdjoin)
@@ -323,8 +343,7 @@ namespace TEAMModelOS.SDK
                         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));
+                    try { await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code)); } catch (Exception  ) { continue; }
                 }
                 //移除名单的。 在点击相关的课程,再去二次校验是否存在,不存在则再去删除。
                 foreach (var delStu in groupChange.stuleave)
@@ -335,7 +354,13 @@ namespace TEAMModelOS.SDK
                 {
                     await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delTmd}"));
                 }
+
             }
+            foreach (var item in courses) { 
+            
+            }
+
+
         }
         public static async Task<string> SaveStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities, List<StuActivity> tmdActivities, List<StuActivity> tchActivities)
         {

+ 1 - 0
TEAMModelOS/Controllers/Both/GroupListController.cs

@@ -911,6 +911,7 @@ namespace TEAMModelOS.Controllers
                 change.school = groupList.school;
                 change.creatorId = groupList.creatorId;
                 change.type = groupList.type;
+                change.status = "delete";
                 if (change.tmdleave.IsNotEmpty() || change.tchleave.IsNotEmpty() || change.stuleave.IsNotEmpty()) {
                     var messageChange = new ServiceBusMessage(change.ToJsonString());
                     messageChange.ApplicationProperties.Add("name", "GroupChange");

+ 37 - 37
TEAMModelOS/Controllers/School/ClassController.cs

@@ -1,8 +1,10 @@
 using Azure.Cosmos;
+using Azure.Messaging.ServiceBus;
 using HTEXLib.COMM.Helpers;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Options;
 using System;
 using System.Collections.Generic;
@@ -31,12 +33,16 @@ namespace TEAMModelOS.Controllers
         public readonly AzureCosmosFactory _azureCosmos;
         private readonly Option _option;
         private readonly DingDing _dingDing;
-        public ClassController(AzureCosmosFactory azureCosmos, DingDing dingDing,
+        public IConfiguration _configuration { get; set; }
+        private readonly AzureServiceBusFactory _serviceBus;
+        public ClassController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureServiceBusFactory serviceBus, IConfiguration configuration,
             IOptionsSnapshot<Option> option)
         {
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
             _option = option?.Value;
+            _serviceBus = serviceBus;
+            _configuration = configuration;
         }
         [ProducesDefaultResponseType]
         //[AuthToken(Roles = "teacher")]
@@ -209,48 +215,19 @@ namespace TEAMModelOS.Controllers
         {
             if (!request.TryGetProperty("school_code", out JsonElement code)) return BadRequest();
             if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
-            //if (!request.TryGetProperty("scope", out JsonElement scope)) return BadRequest();
+           
             try
             {
-                //string school_code = code.ToString().Substring(6);
+                
                 string school_code = code.ToString();
-                Class classroom = new Class();
+                
                 var client = _azureCosmos.GetCosmosClient();
-                classroom = await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemAsync<Class>(id.ToString(), new PartitionKey($"Class-{school_code}"));
-                //List<TeacherCourse> classes = new List<TeacherCourse>();
-
-                //await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"CourseManagement-{school_code}"));
-                //await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryStreamIterator(queryText: $"select value(c) from c join A0 in c.classes where A0.id = '{id}'"))
-                //{
-                //    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                //    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                //    {
-                //        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                //        {
-                //            classes.Add(obj.ToObject<TeacherCourse>());
-                //        }
-                //    }
-                //}
-                //for (int i = 0; i < classes.Count; i++)
-                //{
-                //    bool flag = false;
-                //    for (int j = 0; j < classes[i].classes.Count; j++)
-                //    {
-                //        if (classes[i].classes[j].id.Equals(id.ToString()))
-                //        {
-                //            classes[i].classes.Remove(classes[i].classes[j]);
-                //            flag = true;
-                //        }
-                //    }
-                //    if (flag)
-                //    {
-                //        await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(classes[i], classes[i].id, new PartitionKey($"{classes[i].code}"));
-                //    }
-                //}
+                Class classroom = await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemAsync<Class>(id.ToString(), new PartitionKey($"Class-{school_code}"));
+                
                 List<Student> students = new List<Student>();
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: $"select *  from c where c.classId='{id}' ", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base-{code}") }))
                 {
-                    item.classId = "";
+                    item.classId = null ;
                     students.Add(item);
                 }
                 List<Task<ItemResponse<Student>>> tasks = new List<Task<ItemResponse<Student>>>();
@@ -258,6 +235,30 @@ namespace TEAMModelOS.Controllers
                 {
                     tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync(stu, stu.id, new PartitionKey(($"Base-{code}"))));
                 }
+
+                GroupChange change = new GroupChange();
+                if (students.IsNotEmpty()) {
+                    change.stuleave.AddRange(students.Select(x=> new Member {
+                        id = x.id,
+                        type = 2,
+                        nickname = x.name,
+                        irs = x.irs,
+                        no = x.no,
+                        groupId = x.groupId,
+                        groupName = x.groupName,
+                        code = $"{code}"
+                    }));
+                }
+                change.listid = classroom.id;
+                change.scope = "school";
+                change.originCode = $"{code}";
+                change.school = classroom.school;
+                change.type = "class";
+                change.status = "delete";
+                var messageChange = new ServiceBusMessage(change.ToJsonString());
+                messageChange.ApplicationProperties.Add("name", "GroupChange");
+                var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChange);
                 //查询含有该班级的课程ID
                 List<string> cids = new List<string>();
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(
@@ -303,7 +304,6 @@ namespace TEAMModelOS.Controllers
 
                 await Task.WhenAll(tasks);
                 await Task.WhenAll(taskCourses);
-                //}
                 return Ok(new { classroom });
             }
             catch (Exception ex)

+ 13 - 16
TEAMModelOS/Controllers/School/SchoolTeacherController.cs

@@ -97,8 +97,8 @@ namespace TEAMModelOS.Controllers
             }
             Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync($"{school_code}", new PartitionKey("TeacherImport"));
             IEnumerable<string> ids =null;
+            List<CoreUser> coreUsers = new List<CoreUser>();
             if (response.Status == 200) {
-                List<CoreUser> coreUsers = new List<CoreUser>();
                 TeacherImport teacherImport = JsonDocument.Parse(response.Content).RootElement.ToObject<TeacherImport>();
                 var idsIn = teacherImport.teachers.Where(x => !string.IsNullOrWhiteSpace(x.id));
                 //id是空 其他不是空的
@@ -289,13 +289,7 @@ namespace TEAMModelOS.Controllers
                 }
             }
             IEnumerable<string> coreids = null;
-            if (ids != null && ids.Any())
-            {
-                coreids = teachers.Where(z => !string.IsNullOrWhiteSpace(z.id)).Select(x => x.id).Except(ids);
-            }
-            else {
-                coreids = teachers.Where(z => !string.IsNullOrWhiteSpace(z.id)).Select(x => x.id);
-            }
+            coreids = teachers.Where(z => !string.IsNullOrWhiteSpace(z.id)).Select(x => x.id);
             List<CoreUser> users = new List<CoreUser>();
             if (coreids != null && coreids.Any()) {
                 try
@@ -314,14 +308,17 @@ namespace TEAMModelOS.Controllers
             }
             if (users.Any()) {
                 teachers.ForEach(x => {
-                    CoreUser coreUser= users.Find(u => u.id.Equals(x.id));
-                    if (coreUser != null)
-                    {
-                        x.phone = coreUser.mobile;
-                        x.email = coreUser.mail;
-                    }
-                    else {
-                        x.status = "delete";
+                    if (!string.IsNullOrWhiteSpace(x.id)) {
+                        CoreUser coreUser = users.Find(u => u.id.Equals(x.id));
+                        if (coreUser != null)
+                        {
+                            x.phone = coreUser.mobile;
+                            x.email = coreUser.mail;
+                        }
+                        else
+                        {
+                            x.status = "delete";
+                        }
                     }
                 });
             }