using Azure.Cosmos; using System; using System.Collections.Generic; using System.Text.Json; using System.Threading.Tasks; using TEAMModelBI.Models; using TEAMModelOS.SDK.Models.Cosmos.Common; namespace TEAMModelBI.Tool { public class CommonFind { /// /// 查询总数不带code /// /// /// /// 数据库表集合 /// 返回总数 public static async Task FindTotals(CosmosClient cosmosClient, string sqlTxt, List containerId) { long totals = 0; foreach (var container in containerId) { await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", container).GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { })) { using var json = await JsonDocument.ParseAsync(item.ContentStream); if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt32() > 0) { foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { totals += obj.GetProperty("totals").GetInt64(); } } } } return totals; } /// /// 查询总数带code /// /// /// sql语句 /// 数据库表 /// 数据分区键 /// 返回总数 public static async Task FindTotals(CosmosClient cosmosClient, string sqlTxt, string containerId, string code) { int totals = 0; await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", containerId).GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) })) { using var json = await JsonDocument.ParseAsync(item.ContentStream); if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0) { foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { totals += obj.GetProperty("totals").GetInt32(); } } } return totals; } /// /// 查询学校教师角色列表 /// /// /// 学校Id /// 查询的角色 /// 返回学校角色列表 public static async Task> FindSchoolRoles(CosmosClient cosmosClient,string schoolId,string roles) { List strs = new(); try { string managerSql = $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId, c.id, c.name FROM c WHERE ARRAY_CONTAINS(c.roles, '{roles}', true) AND c.pk = 'Teacher' AND c.status = 'join' AND c.code = 'Teacher-{schoolId}'"; await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: managerSql, requestOptions: new QueryRequestOptions() { })) { using var json = await JsonDocument.ParseAsync(item.ContentStream); foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { SchoolTeacherRoles str = new() { tmdId = obj.GetProperty("id").GetString(), tmdName = obj.GetProperty("name").GetString() }; strs.Add(str); } } return strs; } catch { return strs; } } /// /// 通过醍摩豆账户查询关联学校ID /// /// cosmosDB连接 /// 醍摩豆账户 /// 返回顾问相关的学校ID集合 public static async Task> FindSchoolIds(CosmosClient cosmosClient, string tmdId) { List schoolIds = new(); string schoolSql = $"SELECT DISTINCT REPLACE(c.code,'Teacher-','') AS schoolId,c.code,c.roles,c.id,c.name From c where ARRAY_CONTAINS(c.roles,'assist',true) AND c.pk = 'Teacher' AND c.status = 'join' AND c.id='{tmdId}'"; await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: schoolSql, requestOptions: new QueryRequestOptions() { })) { using var json = await JsonDocument.ParseAsync(item.ContentStream); foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { schoolIds.Add(obj.GetProperty("schoolId").GetString()); } } return schoolIds; } /// /// 通过语句查询学校ID /// /// cosmosDB连接 /// sql语句 /// 数据分区键 /// 返回学校ID的集合 public static async Task> FindSchoolIds(CosmosClient cosmosClient, string sqlTxt, string code) { List schoolIds = new(); await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) })) { using var json = await JsonDocument.ParseAsync(item.ContentStream); foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { schoolIds.Add(obj.GetProperty("id").GetString()); } } return schoolIds; } /// /// 依据学校编号查询学校信息和学校相关的信息 /// /// /// /// public static async Task> FindAssistSchools(CosmosClient cosmosClient, List schoos) { List assistSchools = new(); foreach (var id in schoos) { string sqlTxt = $"select c.id,c.code,c.schoolCode,c.name,c.region,c.province,c.city,c.dist,c.size,c.address,c.picture,c.type,c.scale,c.areaId,c.standard from c where c.id='{id}'"; await foreach (var itemSchool in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") })) { assistSchools.Add(itemSchool); } } foreach (var school in assistSchools) { var response = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(school.id, new PartitionKey("ProductSum")); if (response.Status == 200) { using var json = await JsonDocument.ParseAsync(response.ContentStream); school.serial = json.RootElement.GetProperty("serial").GetArrayLength(); school.service = json.RootElement.GetProperty("service").GetArrayLength(); school.hard = json.RootElement.GetProperty("hard").GetArrayLength(); } school.assists = await FindSchoolRoles(cosmosClient, school.id, "assist"); } return assistSchools; } /// /// 依据学校查询教师列表 /// /// /// /// public static async Task> FindRolesId(CosmosClient cosmosClient, List schools, string roles = null) { string rolesName = "teacher"; if (roles != null) { rolesName = roles; } List teachers = new(); foreach (var school in schools) { string sqlTxt = $"select c.id from c where ARRAY_CONTAINS(c.roles,'{rolesName}',true) and c.status = 'join'"; await foreach (var itemTeac in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() {PartitionKey =new PartitionKey($"Teacher-{school}") })) { using var json = await JsonDocument.ParseAsync(itemTeac.ContentStream); foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray()) { teachers.Add(obj.GetProperty("id").GetString()); } } } return teachers; } } }