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;
}
}
}