using Microsoft.Azure.Cosmos; using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using TEAMModelBI.Models; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Cosmos.BI; using TEAMModelOS.SDK.Models.Cosmos.BI.BISchool; namespace TEAMModelBI.Tool.CosmosBank { public class SchoolWay { /// /// 依据钉钉人员信息中的学校列表 /// /// /// /// public async static Task> GetSchoolInfos(CosmosClient cosmosClient, List schoolIds) { List advSchools = new(); foreach (var item in schoolIds) { await foreach (var info in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIteratorSql(queryText: $"select c.id,c.name,c.picture,c.areaId from c where c.id='{item}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") })) { advSchools.Add(info); } } return advSchools; } /// /// 移除和添加顾问方法 /// /// /// /// /// /// public async static Task> SchoolAdviser(CosmosClient cosmosClient, DingDingUserInfo ddUserInfo, List schoolIds, string role, string busy) { List noSchool = new(); foreach (var item in schoolIds) { BIRelation bIRelation = new(); var resBiRel = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(item, new PartitionKey($"BIRel")); if (resBiRel.StatusCode == System.Net.HttpStatusCode.OK) { JsonDocument jsonD = JsonDocument.Parse(resBiRel.Content); bIRelation = jsonD.RootElement.ToObject(); } if (role.Equals("assist")) { switch ($"{busy}") { case "add": var addAss = bIRelation.assists.Find(f => f.id.Equals(ddUserInfo.tmdId)); if (addAss == null) bIRelation.assists.Add(new IdInfo() { id = ddUserInfo.tmdId, name = ddUserInfo.tmdName, picture = ddUserInfo.picture }); break; case "del": var delAss = bIRelation.assists.Find(f => f.id.Equals(ddUserInfo.tmdId)); if (delAss != null) bIRelation.assists.Remove(new IdInfo() { id = ddUserInfo.tmdId, name = ddUserInfo.tmdName, picture = ddUserInfo.picture }); break; } } if (role.Equals("sales")) { switch ($"{busy}") { case "add": var tempSa = bIRelation.sales.Find(f => f.id.Equals(ddUserInfo.tmdId)); if (tempSa == null) bIRelation.sales.Add(new IdInfo() { id = ddUserInfo.tmdId, name = ddUserInfo.tmdName, picture = ddUserInfo.picture }); break; case "del": var delSa = bIRelation.sales.Find(f => f.id.Equals(ddUserInfo.tmdId)); if (delSa != null) bIRelation.sales.Remove(new IdInfo() { id = ddUserInfo.tmdId, name = ddUserInfo.tmdName, picture = ddUserInfo.picture }); break; } } bIRelation.upDate = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(bIRelation, bIRelation.id, new PartitionKey("BIRel")); } return noSchool; //List noSchool = new(); //Teacher teacher = null; //bool isReadTec = false; //bool isAddUpd = false; //string joinStatus = ""; //if (role.Equals("assist")) // joinStatus = "顾问"; //if (role.Equals("sales")) // joinStatus = "销售"; //var tecResponse = await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync(ddUserInfo.tmdId, new PartitionKey($"Base")); //if (tecResponse.Status == 200) //{ // JsonDocument jsonDocument = JsonDocument.Parse(tecResponse.Content); // teacher = jsonDocument.RootElement.ToObject(); //} //else //{ // teacher = new Teacher() // { // id = ddUserInfo.tmdId, // name = ddUserInfo.tmdName, // picture = ddUserInfo.picture, // size = 1, // code = "Base", // pk = "Base", // }; // isAddUpd = true; //} //List>> addSchoolTeache = new(); //List>> updSchoolTeache = new(); //foreach (var schoolId in schoolIds) //{ // School school = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync(schoolId, new PartitionKey("Base")); // var tempSc = teacher.schools.Find(x => x.schoolId == schoolId); // if (tempSc == null) // { // teacher.schools.Add(new Teacher.TeacherSchool { schoolId = school.id, name = school.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), picture = school.picture, areaId = school.areaId }); // isReadTec = true; // } // SchoolTeacher schoolTeacher = new(); // var stResponse = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(ddUserInfo.tmdId, new PartitionKey($"Teacher-{schoolId}")); // if (stResponse.Status == 200) // { // JsonDocument tempJson = JsonDocument.Parse(stResponse.Content); // schoolTeacher = tempJson.RootElement.ToObject(); // if ($"{busy}".Equals("add")) // { // if (!schoolTeacher.roles.Contains($"{role}")) // { // schoolTeacher.roles.Add($"{role}"); // addSchoolTeache.Add(cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{schoolId}"))); // } // else // noSchool.Add(schoolId); // } // if ($"{busy}".Equals("del")) // { // if (schoolTeacher.roles.Contains($"{role}")) // { // schoolTeacher.roles.Remove($"{role}"); // teacher.schools.Remove(teacher.schools.Find(x => x.schoolId == schoolId)); // updSchoolTeache.Add(cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{schoolId}"))); // } // else // noSchool.Add(schoolId); // } // } // else // { // schoolTeacher = new SchoolTeacher() // { // id = ddUserInfo.tmdId, // name = ddUserInfo.tmdName, // picture = ddUserInfo.picture, // job = joinStatus, // subjectIds = new List(), // roles = new List { $"{role}" }, // permissions = new List(), // status = "join", // code = $"Teacher-{schoolId}", // pk = "Teacher", // createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() // }; // addSchoolTeache.Add(cosmosClient.GetContainer("TEAMModelOS", "School").CreateItemAsync(schoolTeacher, new PartitionKey(schoolTeacher.code))); // } //} //if (isReadTec == true) //{ // if (isAddUpd == true) // { // await cosmosClient.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(teacher, new PartitionKey($"Base")); // } // else // { // await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(teacher, teacher.id, new PartitionKey("Base")); // } //} //if (updSchoolTeache.Count > 0) //{ // if (updSchoolTeache.Count < 256) // { // await Task.WhenAll(updSchoolTeache); // } // else // { // int pages = (updSchoolTeache.Count + 255) / 256; // for (int i = 0; i < pages; i++) // { // List>> tempAbility = updSchoolTeache.Skip((i) * 256).Take(256).ToList(); // await Task.WhenAll(tempAbility); // } // } //} //if (addSchoolTeache.Count > 0) //{ // if (addSchoolTeache.Count < 256) // { // await Task.WhenAll(addSchoolTeache); // } // else // { // int pages = (addSchoolTeache.Count + 255) / 256; // for (int i = 0; i < pages; i++) // { // List>> tempAbility = addSchoolTeache.Skip((i) * 256).Take(256).ToList(); // await Task.WhenAll(tempAbility); // } // } //} //return noSchool; } } }