|
@@ -356,7 +356,7 @@ namespace TEAMModelOS.SDK.Models.Service
|
|
|
var list = item.Value.GroupBy(x => x.type).Select(y => new { key = y.Key, list = y.ToList() });
|
|
|
foreach (var group in list)
|
|
|
{
|
|
|
- await GetGroupListMemberInfo(client, group.key, group.list, item.Key);
|
|
|
+ await GetGroupListMemberInfo(client, group.key, group.list, item.Key,_dingDing);
|
|
|
}
|
|
|
}
|
|
|
groupLists = groups.SelectMany(x => x.Value).ToList();
|
|
@@ -389,116 +389,123 @@ 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)
|
|
|
+ public static async Task<(List<GroupList> groups, List<Member> members)> GetGroupListMemberInfo(CosmosClient client, string type, List<GroupList> groups, string groupTbname, DingDing _dingDing)
|
|
|
{
|
|
|
|
|
|
- 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();
|
|
|
- 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)
|
|
|
- {
|
|
|
- foreach (var item in stu)
|
|
|
+ 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();
|
|
|
+ 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)
|
|
|
{
|
|
|
- var ids = item.list.Select(x => x.id).ToList();
|
|
|
- if (ids.IsNotEmpty())
|
|
|
- {
|
|
|
- StringBuilder stuSql = new StringBuilder($"SELECT distinct c.name,c.id,c.code,c.picture,c.no FROM c ");
|
|
|
- string insql = string.Join(",", ids.Select(x => $"'{x}'"));
|
|
|
- stuSql.Append($"c.id in ({insql})");
|
|
|
- await foreach (var student in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: stuSql.ToString(),
|
|
|
- requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{item.key}") }))
|
|
|
+ foreach (var item in stu)
|
|
|
+ {
|
|
|
+ var ids = item.list.Select(x => x.id).ToList();
|
|
|
+ if (ids.IsNotEmpty())
|
|
|
{
|
|
|
- studentsData.Add(student);
|
|
|
+ StringBuilder stuSql = new StringBuilder($"SELECT distinct c.name,c.id,c.code,c.picture,c.no FROM c ");
|
|
|
+ string insql = string.Join(",", ids.Select(x => $"'{x}'"));
|
|
|
+ stuSql.Append($"where c.id in ({insql})");
|
|
|
+ await foreach (var student in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: stuSql.ToString(),
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{item.key}") }))
|
|
|
+ {
|
|
|
+ student.schoolId = item.key;
|
|
|
+ studentsData.Add(student);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- List<TmdUser> tmdsData = new List<TmdUser>();
|
|
|
- if (tmids.IsNotEmpty())
|
|
|
- {
|
|
|
- string memberTbname = "";
|
|
|
- //可能会出现在两种表中
|
|
|
- if ($"{type}".Equals("teach") || $"{type}".Equals("research") || $"{type}".Equals("group")
|
|
|
- || $"{type}".Equals("friend") || $"{type}".Equals("manage") || $"{type}".Equals("subject"))
|
|
|
+ List<TmdUser> tmdsData = new List<TmdUser>();
|
|
|
+ if (tmids.IsNotEmpty())
|
|
|
{
|
|
|
- StringBuilder tmdidSql = new StringBuilder($"SELECT distinct c.name,c.id,c.picture FROM c ");
|
|
|
- string insql = string.Join(",", tmids.Select(x => $"'{x.id}'"));
|
|
|
- tmdidSql.Append($" where c.id in ({insql})");
|
|
|
- memberTbname = "Teacher";
|
|
|
- await foreach (var tmd in client.GetContainer(Constant.TEAMModelOS, memberTbname).GetItemQueryIterator<TmdUser>(queryText: tmdidSql.ToString(),
|
|
|
- requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
|
|
|
- {
|
|
|
- tmdsData.Add(tmd);
|
|
|
- }
|
|
|
- }
|
|
|
- if ($"{type}".Equals("teach") || $"{type}".Equals("friend") || $"{type}".Equals("group"))
|
|
|
- {
|
|
|
- //取差集,减少二次搜寻
|
|
|
- var tmdidexp = tmids.Select(x => x.id).Except(tmdsData.Select(y => y.id)).ToList();
|
|
|
- if (tmdidexp.IsNotEmpty())
|
|
|
+ string memberTbname = "";
|
|
|
+ //可能会出现在两种表中
|
|
|
+ if ($"{type}".Equals("teach") || $"{type}".Equals("research") || $"{type}".Equals("group")
|
|
|
+ || $"{type}".Equals("friend") || $"{type}".Equals("manage") || $"{type}".Equals("subject"))
|
|
|
{
|
|
|
StringBuilder tmdidSql = new StringBuilder($"SELECT distinct c.name,c.id,c.picture FROM c ");
|
|
|
- string insql = string.Join(",", tmdidexp.Select(x => $"'{x}'"));
|
|
|
+ string insql = string.Join(",", tmids.Select(x => $"'{x.id}'"));
|
|
|
tmdidSql.Append($" where c.id in ({insql})");
|
|
|
-
|
|
|
- memberTbname = "Student";
|
|
|
+ memberTbname = "Teacher";
|
|
|
await foreach (var tmd in client.GetContainer(Constant.TEAMModelOS, memberTbname).GetItemQueryIterator<TmdUser>(queryText: tmdidSql.ToString(),
|
|
|
requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
|
|
|
{
|
|
|
tmdsData.Add(tmd);
|
|
|
}
|
|
|
}
|
|
|
+ if ($"{type}".Equals("teach") || $"{type}".Equals("friend") || $"{type}".Equals("group"))
|
|
|
+ {
|
|
|
+ //取差集,减少二次搜寻
|
|
|
+ var tmdidexp = tmids.Select(x => x.id).Except(tmdsData.Select(y => y.id)).ToList();
|
|
|
+ if (tmdidexp.IsNotEmpty())
|
|
|
+ {
|
|
|
+ StringBuilder tmdidSql = new StringBuilder($"SELECT distinct c.name,c.id,c.picture FROM c ");
|
|
|
+ string insql = string.Join(",", tmdidexp.Select(x => $"'{x}'"));
|
|
|
+ tmdidSql.Append($" where c.id in ({insql})");
|
|
|
+
|
|
|
+ memberTbname = "Student";
|
|
|
+ await foreach (var tmd in client.GetContainer(Constant.TEAMModelOS, memberTbname).GetItemQueryIterator<TmdUser>(queryText: tmdidSql.ToString(),
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
|
|
|
+ {
|
|
|
+ tmdsData.Add(tmd);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //去重
|
|
|
+ tmdsData = tmdsData.Where((x, i) => tmdsData.FindIndex(n => n.id.Equals(x.id)) == i).ToList();
|
|
|
}
|
|
|
- //去重
|
|
|
- tmdsData = tmdsData.Where((x, i) => tmdsData.FindIndex(n => n.id.Equals(x.id)) == i).ToList();
|
|
|
- }
|
|
|
- HashSet<GroupList> changes = new HashSet<GroupList>();
|
|
|
- var unexist_tmdid = tmids.Select(x => x.id).Except(tmdsData.Select(y => y.id)).ToList();
|
|
|
- groups.ForEach(x =>
|
|
|
- {
|
|
|
- int item = x.members.RemoveAll(y => unexist_tmdid.Contains(y.id) && y.type == 1);
|
|
|
- if (item > 0)
|
|
|
+ HashSet<GroupList> changes = new HashSet<GroupList>();
|
|
|
+ var unexist_tmdid = tmids.Select(x => x.id).Except(tmdsData.Select(y => y.id)).ToList();
|
|
|
+ groups.ForEach(x =>
|
|
|
{
|
|
|
- changes.Add(x);
|
|
|
- }
|
|
|
- });
|
|
|
- var unexist_student = students.Select(x => (x.id, x.code)).Except(studentsData.Select(y => (y.id, y.code)), new CompareIdCode()).ToList();
|
|
|
- groups.ForEach(x =>
|
|
|
- {
|
|
|
- int item = x.members.RemoveAll(y => y.type == 2 && unexist_student.Exists(x => x.id.Equals(y.id) && x.code.Equals(y.code)));
|
|
|
- if (item > 0)
|
|
|
+ int item = x.members.RemoveAll(y => unexist_tmdid.Contains(y.id) && y.type == 1);
|
|
|
+ if (item > 0)
|
|
|
+ {
|
|
|
+ changes.Add(x);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ var unexist_student = students.Select(x => (x.id, x.code)).Except(studentsData.Select(y => (y.id, y.schoolId)), new CompareIdCode()).ToList();
|
|
|
+ groups.ForEach(x =>
|
|
|
{
|
|
|
- changes.Add(x);
|
|
|
- }
|
|
|
- });
|
|
|
- if (changes.Count > 0 && !string.IsNullOrEmpty(groupTbname))
|
|
|
- {
|
|
|
- foreach (var change in changes)
|
|
|
+ int item = x.members.RemoveAll(y => y.type == 2 && !unexist_student.Exists(x => x.id.Equals(y.id) && x.Item2.Equals(y.code)));
|
|
|
+ if (item > 0)
|
|
|
+ {
|
|
|
+ changes.Add(x);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ tmids.ForEach(x =>
|
|
|
+ {
|
|
|
+ var user = tmdsData.Find(y => y.id.Equals(x.id));
|
|
|
+ x.name = user?.name;
|
|
|
+ x.picture = user?.picture;
|
|
|
+ });
|
|
|
+ students.ForEach(x =>
|
|
|
+ {
|
|
|
+ var student = studentsData.Find(y => y.id.Equals(x.id) && y.schoolId.Equals(x.code));
|
|
|
+ x.name = student?.name;
|
|
|
+ x.picture = student?.picture;
|
|
|
+ x.no = student?.no;
|
|
|
+ });
|
|
|
+ var mbs = tmids;
|
|
|
+ mbs.AddRange(students);
|
|
|
+ if (changes.Count > 0 && !string.IsNullOrEmpty(groupTbname))
|
|
|
{
|
|
|
- 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));
|
|
|
+ foreach (var change in changes)
|
|
|
+ {
|
|
|
+ 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));
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ return (groups, mbs);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ await _dingDing.SendBotMsg($"OS,GetGroupListMemberInfo()\n{ex.Message}{ex.StackTrace}\n", GroupNames.醍摩豆服務運維群組);
|
|
|
}
|
|
|
- tmids.ForEach(x =>
|
|
|
- {
|
|
|
- var user = tmdsData.Find(y => y.id.Equals(x.id));
|
|
|
- x.name = user?.name;
|
|
|
- x.picture = user?.picture;
|
|
|
- });
|
|
|
- students.ForEach(x =>
|
|
|
- {
|
|
|
- var student = studentsData.Find(y => y.id.Equals(x.id) && y.code.Equals(x.code));
|
|
|
- x.name = student?.name;
|
|
|
- x.picture = student?.picture;
|
|
|
- x.no = student?.no;
|
|
|
- });
|
|
|
- var mbs = tmids;
|
|
|
- mbs.AddRange(students);
|
|
|
- return (groups, mbs);
|
|
|
+ return (null, null);
|
|
|
}
|
|
|
|
|
|
public static async Task FixActivity(CosmosClient client, DingDing _dingDing, GroupChange groupChange, string type)
|