Przeglądaj źródła

Merge branch 'develop5.0-tmd' of http://106.12.23.251:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

liqk 3 lat temu
rodzic
commit
e8d7b57d8e

+ 52 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs

@@ -139,6 +139,57 @@ namespace TEAMModelOS.SDK.Models
         public string groupName { get; set; }
 
     }
+    public class GroupListGrp
+    {
+        public GroupListGrp() { }
+        public GroupListGrp(GroupList groupList, HashSet<string> groupName)
+        {
+            this.id = groupList.id;
+            this.code = groupList.code;
+            this.periodId = groupList.periodId;
+            this.pk = groupList.pk;
+            this.name = groupList.name;
+            this.school = groupList.school;
+            this.creatorId = groupList.creatorId;
+            this.no = groupList.no;
+            this.scope = groupList.scope;
+            this.type = groupList.type;
+            this.scount = groupList.scount;
+            this.tcount = groupList.tcount;
+            this.leader = groupList.leader;
+            this.year = groupList.year;
+            this.groupName = groupName;
+
+        }
+        public string pk { get; set; }
+        public string id { get; set; }
+        public string code { get; set; }
+        public string name { get; set; }
+        //标记该名单唯一code
+        public string no { get; set; }
+        public string periodId { get; set; }
+        //课程id,需要标记则标记
+        //public string courseId { get; set; }
+        public string scope { get; set; }
+        public string school { get; set; }
+        public string creatorId { get; set; }
+        /// <summary>
+        ///教学班teach ,行政班(学生搜寻classId动态返回)class ,教研组research,学科组(学科搜寻动态返回)subject,好友friend,管理manage,群组group等
+        /// </summary>
+        public string type { get; set; } = "teach";
+        public int year { get; set; }
+        /// <summary>
+        /// 醍摩豆id成员数量
+        /// </summary>
+        public int tcount { get; set; }
+        /// <summary>
+        /// 校内账号成员数量
+        /// </summary>
+        public int scount { get; set; }
+        public string leader { get; set; }
+        public HashSet<string> groupName { get; set; }
+    }
+   
     public class GroupListDto
     {
         public string pk { get; set; }
@@ -175,7 +226,7 @@ namespace TEAMModelOS.SDK.Models
         public string period { get; set; }
         public string name { get; set; }
         public string id { get; set; }
-        public List<GroupListDto> groups { get; set; } = new List<GroupListDto>();
+        public List<GroupListGrp> groups { get; set; } = new List<GroupListGrp>();
     }
     public class TeachCourse
     {

+ 24 - 2
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -401,7 +401,7 @@ namespace TEAMModelOS.SDK
             }
             return groupLists;
         }
-        public static async Task<(List<RMember>, List<RGroupList> groups)> GetStutmdidListids(CosmosClient client, DingDing _dingDing, List<string> classes, string school)
+        public static async Task<(List<RMember>, List<RGroupList> groups)> GetStutmdidListids(CosmosClient client, DingDing _dingDing, List<string> classes, string school, List<(string, List<string>)> groupids = null)
         {
             List<RMember> members = new List<RMember>();
             List<RGroupList> groupLists = new List<RGroupList>();
@@ -422,6 +422,7 @@ namespace TEAMModelOS.SDK
                         type = 1,
                     };
                     members.Add(member);
+                     
                 }
                 RGroupList groupList = new RGroupList
                 {
@@ -570,7 +571,28 @@ namespace TEAMModelOS.SDK
                     members = members.FindAll(x => x.type == 2).Where((x, i) => members.FindAll(x => x.type == 2).FindIndex(n => n.id.Equals(x.id) && n.code.Equals(x.code)) == i).ToList();
                 }
             }
-            return (members,groupLists);
+            if (groupids.IsNotEmpty()) {
+                List<RMember> rmembers = new List<RMember>();
+                groupLists.ForEach(y => {
+                    (string id, List<string> grpids) = groupids.Find(x => x.Item1.Equals(y.id));
+                    var gpmember=y.members.FindAll(x=>string.IsNullOrEmpty(x.groupName) &&  grpids.Contains(x.groupName));
+                    y.members = gpmember;
+                });
+                var gpgpmembers =   groupLists.SelectMany(x => x.members).ToList();
+                List<RMember> tmdids = gpgpmembers.FindAll(x => x.type == 1).Where((x, i) => gpgpmembers.FindAll(x => x.type == 1).FindIndex(n => n.id.Equals(x.id)) == i).ToList();
+                List<RMember> students = gpgpmembers.FindAll(x => x.type == 2).Where((x, i) => gpgpmembers.FindAll(x => x.type == 2).FindIndex(n => n.id.Equals(x.id) && n.code.Equals(x.code)) == i).ToList();
+                if (tmdids.IsNotEmpty()) {
+                    rmembers.AddRange(tmdids);
+                }
+                if (students.IsNotEmpty())
+                {
+                    rmembers.AddRange(students);
+                }
+                return (rmembers, groupLists);
+            }
+            else {
+                return (members, groupLists);
+            }
         }
         public static async Task< List<RGroupList>  > GetGroupListMemberByType(CosmosClient client,string type, List<string> scopes, string school, DingDing _dingDing)
         {

+ 17 - 15
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -86,22 +86,24 @@ namespace TEAMModelOS.Controllers
                     request.startTime = now;
                 }
                 //查询所有学生名单
-               /* List<string> sids = new List<string>();
-                //List<Student> students = new List<Student>();
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{request.school}") }))
-                {
-                    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;
-                            sids.Add(account.GetProperty("id").GetString());
-                        }
-                    }
-                }*/
+                /* List<string> sids = new List<string>();
+                 //List<Student> students = new List<Student>();
+                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryStreamIterator(queryText: $"select c.id from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{request.school}") }))
+                 {
+                     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;
+                             sids.Add(account.GetProperty("id").GetString());
+                         }
+                     }
+                 }*/
                 //int stuCount = 0;
+                List<(string,List<string>) > groups =new List<(string, List<string>)> {("uuid1", new List<string>() { "A","B"})};
+
                 List<string> classes = ExamService.getClasses(request.classes, request.stuLists);
                 (List<RMember> tchList, List<RGroupList> classLists) = await GroupListService.GetStutmdidListids(client, _dingDing, classes, request.school);
                 /*for (int i = 0; i < classes.Count; i++)

+ 1 - 1
TEAMModelOS/Controllers/Research/AbilitySubController.cs

@@ -661,7 +661,7 @@ namespace TEAMModelOS.Controllers
             if (!request.TryGetProperty("tmdid", out JsonElement _tmdid)) return Ok(new { error = 400 });
             if (!request.TryGetProperty("abilityId", out JsonElement _abilityId)) return Ok(new { error = 400 });
             List<RGroupList> yxtrain= await  GroupListService.GetGroupListMemberByType(client, "yxtrain", new List<string> { "school" }, $"{_school}",_dingDing);
-            //排除自己,如果不是组长则不排除
+            
             List<AbilitySub> abilitySubs = new List<AbilitySub>();
             if (yxtrain.IsNotEmpty()) {
                 var members = yxtrain.SelectMany(m => m.members).ToList();

+ 48 - 18
TEAMModelOS/Controllers/School/GroupListController.cs

@@ -216,7 +216,7 @@ namespace TEAMModelOS.Controllers
             json.TryGetProperty("schoolId", out JsonElement schoolId);
             if (!json.TryGetProperty("opt", out JsonElement opt)) { return BadRequest(); }
             json.TryGetProperty("periodId", out JsonElement periodId);
-            List<GroupListDto> groupLists = new List<GroupListDto>();
+            List<GroupListGrp> groupLists = new List<GroupListGrp>();
             switch (true)
             {
                 //我管理的
@@ -230,8 +230,15 @@ namespace TEAMModelOS.Controllers
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ClassInfo>(queryText: sql.ToString(),
                         requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{schoolId}") }))
                     {
+                        HashSet<string> groupNames = new HashSet<string>();
+                        string gpsql = $"SELECT distinct c.groupId,c.groupName FROM c where  c.classId='{item.id}'and c.groupName <>null";
+                        await foreach (var gp in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: gpsql,
+                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Base-{schoolId}") }))
+                        {
+                            groupNames.Add(gp.groupName);
+                        }
                         ///行政班(学生搜寻classId动态返回)class
-                        GroupListDto group = new GroupListDto
+                        GroupListGrp group = new GroupListGrp
                         {
                             id = item.id,
                             code = $"GroupList-{schoolId}",
@@ -240,11 +247,12 @@ namespace TEAMModelOS.Controllers
                             scope = "school",
                             school = $"{schoolId}",
                             type = "class",
-                            year = item.year
+                            year = item.year,
+                            groupName= groupNames
                         };
                         groupLists.Add(group);
                     }
-                    string sqls = $"SELECT distinct {SummarySql} FROM c ";
+                    string sqls = $"SELECT distinct value(c) FROM c ";
                     //教学班
                     sql = new StringBuilder($"{sqls} where c.type='teach'");
                     if (!string.IsNullOrEmpty($"{periodId}"))
@@ -252,16 +260,25 @@ namespace TEAMModelOS.Controllers
                         sql.Append($" and c.periodId='{periodId}'");
                     }
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
-                        GetItemQueryIterator<GroupListDto>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{schoolId}") }))
+                        GetItemQueryIterator<GroupList>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{schoolId}") }))
                     {
-                        groupLists.Add(item);
+                        HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y=>y.groupName).ToHashSet();
+                        groupLists.Add(new GroupListGrp(item, groupName));
                     }
                     //教研组
                     sql = new StringBuilder($"{sqls} where c.type='research'");
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
-                        GetItemQueryIterator<GroupListDto>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{schoolId}") }))
+                        GetItemQueryIterator<GroupList>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{schoolId}") }))
+                    {
+                        HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                        groupLists.Add(new GroupListGrp(item, groupName));
+                    }//教研组
+                    sql = new StringBuilder($"{sqls} where c.type='yxtrain'");
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
+                        GetItemQueryIterator<GroupList>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{schoolId}") }))
                     {
-                        groupLists.Add(item);
+                        HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                        groupLists.Add(new GroupListGrp(item, groupName));
                     }
                     return Ok(new { groupLists });
                 case bool when $"{opt}".Equals("teach", StringComparison.OrdinalIgnoreCase):
@@ -298,7 +315,14 @@ namespace TEAMModelOS.Controllers
                         await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ClassInfo>(queryText: $"select c.id,c.name ,c.periodId  ,c.year from c where c.id in ({insql})",
                         requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Class-{schoolId}") }))
                         {
-                            GroupListDto group = new GroupListDto
+                            HashSet<string> groupNames = new HashSet<string>();
+                            string gpsql = $"SELECT distinct c.groupId,c.groupName FROM c where  c.classId='{item.id}'and c.groupName <>null";
+                            await foreach (var gp in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: gpsql,
+                                requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Base-{schoolId}") }))
+                            {
+                                groupNames.Add(gp.groupName);
+                            }
+                            GroupListGrp group = new GroupListGrp
                             {
                                 id = item.id,
                                 code = $"GroupList-{schoolId}",
@@ -307,9 +331,12 @@ namespace TEAMModelOS.Controllers
                                 scope = "school",
                                 school = $"{schoolId}",
                                 type = "class",
-                                year = item.year
+                                year = item.year,
+                                groupName = groupNames
                             };
-                            groupLists.Add(group);
+                           
+                             
+                           groupLists.Add(group);
                         }
                     }
                     if (schedule.IsNotEmpty())
@@ -318,10 +345,12 @@ namespace TEAMModelOS.Controllers
                         if (privateList.Count() > 0)
                         {
                             string insql = string.Join(",", privateList.Select(x => $"'{x}'"));
-                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<GroupListDto>(queryText: $"select distinct {SummarySql} from c where c.id in ({insql})",
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<GroupList>(queryText: $"select distinct {SummarySql} from c where c.id in ({insql})",
                              requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList") }))
                             {
-                                groupLists.Add(item);
+                                HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                groupLists.Add(new GroupListGrp(item, groupName));
+                               
                             }
                         }
                         var schoolList = schedule.Where(x => x.scope.Equals("school")).Select(x => x.schedule.stulist).Distinct();
@@ -329,20 +358,21 @@ namespace TEAMModelOS.Controllers
                         {
                             List<GroupListDto> groups = new List<GroupListDto>();
                             string insql = string.Join(",", schoolList.Select(x => $"'{x}'"));
-                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupListDto>(queryText: $"select distinct {SummarySql} from c where c.id in ({insql})",
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: $"select distinct {SummarySql} from c where c.id in ({insql})",
                             requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{schoolId}") }))
                             {
-                                groupLists.Add(item);
+                                HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                groupLists.Add(new GroupListGrp(item, groupName));
                             }
                         }
                     }
                     List<CourseGroupList> courseGroups = new List<CourseGroupList>();
                     teachCourses.GroupBy(y => (y.id, y.name, y.scope, y.period.name, y.period.id, y.subject.name, y.subject.id)).ToList().ForEach(x => {
-                        List<GroupListDto> classIds = groupLists.Where(n => x.Where(m => !string.IsNullOrEmpty(m.schedule.classId)).Select(b=>b.schedule.classId).Contains(n.id)).ToList();
-                        List<GroupListDto> stulists = groupLists.Where(n => x.Where(m => !string.IsNullOrEmpty(m.schedule.stulist)).Select(b => b.schedule.stulist).Contains(n.id)).ToList();
+                        List<GroupListGrp> classIds = groupLists.Where(n => x.Where(m => !string.IsNullOrEmpty(m.schedule.classId)).Select(b=>b.schedule.classId).Contains(n.id)).ToList();
+                        List<GroupListGrp> stulists = groupLists.Where(n => x.Where(m => !string.IsNullOrEmpty(m.schedule.stulist)).Select(b => b.schedule.stulist).Contains(n.id)).ToList();
                         if (classIds == null)
                         {
-                            classIds = new List<GroupListDto>();
+                            classIds = new List<GroupListGrp>();
                         }
                         if (stulists != null)
                         {

+ 1 - 2
TEAMModelOS/Controllers/School/SchoolTeacherController.cs

@@ -82,8 +82,7 @@ namespace TEAMModelOS.Controllers
             public int size { get; set; }
             public List<string> permissions { get; set; }
             public List<string> roles { get; set; }
-            public string groupId { get; set; } = "default";
-            public string groupName { get; set; } = "默认组别";
+        
         }
         /// <summary>
         /// 取得某位老師的權限