Selaa lähdekoodia

调整名单数据结构。写入与返回调整结构。

CrazyIter_Bin 3 vuotta sitten
vanhempi
commit
f71450c661

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

@@ -34,7 +34,64 @@ namespace TEAMModelOS.SDK.Models
         public int scount { get; set; }
         public List<Member> members { get; set; } = new List<Member>();
     }
-    public class Member
+    public class RGroupList
+    {
+        public string id { get; set; }
+        public string code { get; set; }
+        public string pk { get; set; }
+        public int? ttl { get; set; } = -1;
+        public RGroupList()
+        {
+            pk = "GroupList";
+        }
+        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 List<RMember> members { get; set; } = new List<RMember>();
+    }
+
+    public class  Member
+    {
+        /// <summary>
+        /// 账号id
+        /// </summary>
+        public string id { get; set; }
+        //学生所在的学校
+        public string code { get; set; }
+        /// <summary>
+        ///类型 1 tmdid,2 student
+        /// </summary>
+        public int type { get; set; }
+        /// <summary>
+        ///座号
+        /// </summary>
+        public string no { get; set; }
+        /// <summary>
+        /// IRS WebIRS编号。
+        /// </summary>
+        public string irs { get; set; }
+        public string tag { get; set; }
+    }
+    public class RMember
     {
         /// <summary>
         /// 账号id

+ 21 - 21
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -59,7 +59,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     else
                     {
                         status = 0;
-                        stuList.members.Add(new Member { id = userid, name = name, no = no, picture = picture, type = type });
+                        stuList.members.Add(new Member { id = userid,  no = no,type = type });
                     }
                 }
                 else if (type == 2)
@@ -73,7 +73,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     else
                     {
                         status = 0;
-                        stuList.members.Add(new Member { id = userid, code = school, name = name, no = no, picture = picture, type = type });
+                        stuList.members.Add(new Member { id = userid, code = school,  no = no, type = type });
                     }
                 }
             }
@@ -275,16 +275,16 @@ namespace TEAMModelOS.SDK.Models.Service
             }
             return list;
         }
-        public static async Task<List<GroupList>> GetStutmdidListids(CosmosClient client, DingDing _dingDing, List<string> classes, string school)
+        public static async Task<List<RGroupList>> GetStutmdidListids(CosmosClient client, DingDing _dingDing, List<string> classes, string school)
         {
-            List<GroupList> groupLists = null;
+            List<RGroupList> groupLists = null;
             if (classes.Count == 1 && classes.First().Equals("default") && !string.IsNullOrEmpty(school))
             {
                 //默认的教研组
-                List<Member> members = new List<Member>();
+                List<RMember> members = new List<RMember>();
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<TmdInfo>(queryText: $"SELECT  value(c) FROM c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{school}") }))
                 {
-                    Member member = new Member
+                    RMember member = new RMember
                     {
                         id = item.id,
                         name = item.name,
@@ -293,7 +293,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     };
                     members.Add(member);
                 }
-                GroupList groupList = new GroupList
+                RGroupList groupList = new RGroupList
                 {
                     id = "default",
                     name = "default",
@@ -303,18 +303,18 @@ namespace TEAMModelOS.SDK.Models.Service
                     type = "research",
                     members = members
                 };
-                groupLists = new List<GroupList> { groupList };
+                groupLists = new List<RGroupList> { groupList };
             }
             else
             {
-                Dictionary<string, List<GroupList>> groups = new Dictionary<string, List<GroupList>>();
+                Dictionary<string, List<RGroupList>> groups = new Dictionary<string, List<RGroupList>>();
                 List<Student> students = new List<Student>();
                 string sql = string.Join(",", classes.Select(x => $"'{x}'"));
                 if (!string.IsNullOrEmpty(school))
                 {
-                    List<GroupList> schoolList = new List<GroupList>();
+                    List<RGroupList> schoolList = new List<RGroupList>();
 
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: $"select value(c) from c where c.id in ({sql})",
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<RGroupList>(queryText: $"select value(c) from c where c.id in ({sql})",
                             requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school}") }))
                     {
                         schoolList.Add(item);
@@ -339,9 +339,9 @@ namespace TEAMModelOS.SDK.Models.Service
                 }
                 if (classes.IsNotEmpty())
                 {
-                    List<GroupList> privateList = new List<GroupList>();
+                    List<RGroupList> privateList = new List<RGroupList>();
                     sql = string.Join(",", classes.Select(x => $"'{x}'"));
-                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<GroupList>(queryText: $"select value(c) from c where c.id in ({sql})",
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<RGroupList>(queryText: $"select value(c) from c where c.id in ({sql})",
                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList") }))
                     {
                         privateList.Add(item);
@@ -368,8 +368,8 @@ namespace TEAMModelOS.SDK.Models.Service
                               requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Class-{school}") }))
                     {
                         ///行政班(学生搜寻classId动态返回)class
-                        List<Member> members = students.Where(x => x.classId.Equals(item.id)).Select(y => new Member { id = y.id, code = school, name = y.name, type = 2, picture = y.picture, no = y.no }).ToList();
-                        GroupList group = new GroupList
+                        List<RMember> members = students.Where(x => x.classId.Equals(item.id)).Select(y => new RMember { id = y.id, code = school, name = y.name, type = 2, picture = y.picture, no = y.no }).ToList();
+                        RGroupList group = new RGroupList
                         {
                             id = item.id,
                             code = $"GroupList-{school}",
@@ -389,14 +389,14 @@ namespace TEAMModelOS.SDK.Models.Service
             return groupLists;
         }
 
-        public static async Task<(List<GroupList> groups, List<Member> members)> GetGroupListMemberInfo(CosmosClient client, string type, List<GroupList> groups, string groupTbname, DingDing _dingDing)
+        public static async Task<(List<RGroupList> groups, List<RMember> members)> GetGroupListMemberInfo(CosmosClient client, string type, List<RGroupList> groups, string groupTbname, DingDing _dingDing)
         {
 
             try {
                 var members = groups.SelectMany(y => y.members).ToList();
                 //去重
-                List<Member> tmids = members.FindAll(x => x.type == 1).Where((x, i) => members.FindAll(x => x.type == 1).FindIndex(n => n.id.Equals(x.id)) == i).ToList();
-                List<Member> students = 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();
+                List<RMember> tmids = members.FindAll(x => x.type == 1).Where((x, i) => members.FindAll(x => x.type == 1).FindIndex(n => n.id.Equals(x.id)) == i).ToList();
+                List<RMember> students = 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();
                 var stu = students.GroupBy(x => x.code).Select(y => new { key = y.Key, list = y.ToList() });
                 List<Student> studentsData = new List<Student>();
                 if (stu != null)
@@ -457,7 +457,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     //去重
                     tmdsData = tmdsData.Where((x, i) => tmdsData.FindIndex(n => n.id.Equals(x.id)) == i).ToList();
                 }
-                HashSet<GroupList> changes = new HashSet<GroupList>();
+                HashSet<RGroupList> changes = new HashSet<RGroupList>();
                 var unexist_tmdid = tmids.Select(x => x.id).Except(tmdsData.Select(y => y.id)).ToList();
                 groups.ForEach(x =>
                 {
@@ -498,10 +498,10 @@ namespace TEAMModelOS.SDK.Models.Service
                     {
                         change.tcount = change.members.Where(x => x.type == 1).Count();
                         change.scount = change.members.Where(x => x.type == 2).Count();
-                        await client.GetContainer(Constant.TEAMModelOS, groupTbname).ReplaceItemAsync(change, change.id, new PartitionKey(change.code));
+                        GroupList group= change.ToJsonString().ToObject<GroupList>();
+                        await client.GetContainer(Constant.TEAMModelOS, groupTbname).ReplaceItemAsync(group, group.id, new PartitionKey(group.code));
                     }
                 }
-               
                 return (groups, mbs);
             } catch (Exception ex) {
                 await _dingDing.SendBotMsg($"OS,GetGroupListMemberInfo()\n{ex.Message}{ex.StackTrace}\n", GroupNames.醍摩豆服務運維群組);

+ 7 - 7
TEAMModelOS/Controllers/School/GroupListController.cs

@@ -349,7 +349,7 @@ namespace TEAMModelOS.Controllers
             if (!json.TryGetProperty("ids", out JsonElement ids)) return BadRequest();
             json.TryGetProperty("schoolId", out JsonElement schoolId);
             List<string> listids = ids.ToObject<List<string>>();
-            List<GroupList> groups = await GroupListService.GetStutmdidListids(client, _dingDing, listids, $"{schoolId}");
+            List<RGroupList> groups = await GroupListService.GetStutmdidListids(client, _dingDing, listids, $"{schoolId}");
             return Ok(new { groups });
         }
         /// <summary>
@@ -372,7 +372,7 @@ namespace TEAMModelOS.Controllers
                 json.TryGetProperty("periodId", out JsonElement periodId);
                 json.TryGetProperty("no", out JsonElement no);
                 StringBuilder sql = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='{type}'");
-                List<GroupList> groups = new List<GroupList>();
+                List<RGroupList> groups = new List<RGroupList>();
                 string tbname = "Teacher";
                 string code = $"GroupList";
                 if ($"{scope}".Equals("school", StringComparison.OrdinalIgnoreCase))
@@ -392,12 +392,12 @@ namespace TEAMModelOS.Controllers
                 {
                     sql.Append($" and c.creatorId='{_tmdid}'");
                 }
-                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, tbname).GetItemQueryIterator<GroupList>(queryText: sql.ToString(),
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, tbname).GetItemQueryIterator<RGroupList>(queryText: sql.ToString(),
                  requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) }))
                 {
                     groups.Add(item);
                 }
-                (List<GroupList> groupsData, List<Member> members) = await GroupListService.GetGroupListMemberInfo(client, $"{type}", groups, tbname,_dingDing);
+                (List<RGroupList> groupsData, List<RMember> members) = await GroupListService.GetGroupListMemberInfo(client, $"{type}", groups, tbname,_dingDing);
                 return Ok(new { groups = groupsData, members });
             }
             catch (CosmosException ex)
@@ -474,7 +474,7 @@ namespace TEAMModelOS.Controllers
         [HttpPost("get-grouplist-idcode")]
         public async Task<IActionResult> GetGrouplistIdcode(JsonElement json)
         {
-            GroupList groupList = null;
+            RGroupList groupList = null;
             try
             {
                 var client = _azureCosmos.GetCosmosClient();
@@ -493,8 +493,8 @@ namespace TEAMModelOS.Controllers
                     //学校自定义名单
                     code = !code.StartsWith("GroupList-") ? $"GroupList-{_code}" : code;
                 }
-                groupList = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<GroupList>($"{id}", new PartitionKey($"{code}"));
-                (List<GroupList> groupsData, List<Member> members) = await GroupListService.GetGroupListMemberInfo(client, $"{groupList.type}", new List<GroupList> { groupList }, tbname,_dingDing);
+                groupList = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<RGroupList>($"{id}", new PartitionKey($"{code}"));
+                (List<RGroupList> groupsData, List<RMember> members) = await GroupListService.GetGroupListMemberInfo(client, $"{groupList.type}", new List<RGroupList> { groupList }, tbname,_dingDing);
                 groupList = groupsData.FirstOrDefault();
             }
             catch (CosmosException ex)

+ 15 - 15
TEAMModelOS/Controllers/XTest/DataMigrationController.cs

@@ -66,8 +66,8 @@ namespace TEAMModelOS.Controllers
                 }
                 foreach (var school in schools)
                 {
-                    List<GroupList> teachlists = new List<GroupList>();
-                    List<GroupList> reschlists = new List<GroupList>();
+                   // List<GroupList> teachlists = new List<GroupList>();
+                   // List<GroupList> reschlists = new List<GroupList>();
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<StuList>(queryText: "SELECT  value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"StuList-{school.id}") }))
                     {
                         List<Member> members = new List<Member>();
@@ -102,12 +102,12 @@ namespace TEAMModelOS.Controllers
                             school = school.id
                         };
                         await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(group, new PartitionKey(group.code));
-                        teachlists.Add(group);
-                    }
-                    if (teachlists.IsNotEmpty())
-                    {
-                        await GroupListService.GetGroupListMemberInfo(client, "teach", teachlists, "School", _dingDing);
+                       // teachlists.Add(group);
                     }
+                    //if (teachlists.IsNotEmpty())
+                    //{
+                    //    await GroupListService.GetGroupListMemberInfo(client, "teach", teachlists, "School", _dingDing);
+                    //}
                   
 
                     await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<TchList>(queryText: "SELECT  value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"TchList-{school.id}") }))
@@ -138,15 +138,15 @@ namespace TEAMModelOS.Controllers
                             school = school.id
                         };
                         await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(group, new PartitionKey(group.code));
-                        reschlists.Add(group);
-                    }
-                    if (reschlists.IsNotEmpty())
-                    {
-                        await GroupListService.GetGroupListMemberInfo(client, "research", reschlists, "School", _dingDing);
+                      //  reschlists.Add(group);
                     }
+                    //if (reschlists.IsNotEmpty())
+                    //{
+                    //    await GroupListService.GetGroupListMemberInfo(client, "research", reschlists, "School", _dingDing);
+                    //}
                        
                 }
-                List<GroupList> groupLists = new List<GroupList>();
+              //  List<GroupList> groupLists = new List<GroupList>();
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<StuList>(queryText: "SELECT  value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"StuList") }))
                 {
                     List<Member> members = new List<Member>();
@@ -180,9 +180,9 @@ namespace TEAMModelOS.Controllers
 
                     };
                     await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(group, new PartitionKey(group.code));
-                    groupLists.Add(group);
+                    //groupLists.Add(group);
                 }
-                await GroupListService.GetGroupListMemberInfo(client, "teach", groupLists, "Teacher",_dingDing);
+               // await GroupListService.GetGroupListMemberInfo(client, "teach", groupLists, "Teacher",_dingDing);
             }
             catch (Exception ex) {
                 await _dingDing.SendBotMsg($"OS,restore-stulist()\n{ex.Message}{ex.StackTrace}\n", GroupNames.醍摩豆服務運維群組);