1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591 |
- using Azure.Cosmos;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Newtonsoft.Json;
- using StackExchange.Redis;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Net.Http.Json;
- using System.Text;
- using System.Text.Json;
- using System.Threading.Tasks;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK.Extension;
- using TEAMModelOS.SDK;
- using TEAMModelOS.SDK.Models;
- using TEAMModelOS.SDK.Models.Cosmos.Common;
- using TEAMModelOS.SDK.Models.Service;
- using HTEXLib.COMM.Helpers;
- using Azure.Storage.Blobs.Models;
- using Azure.Storage.Blobs;
- using System.Security.Cryptography;
- using Azure;
- using Microsoft.Extensions.Options;
- using Microsoft.Extensions.Configuration;
- using TEAMModelOS.Models;
- using System.Text.RegularExpressions;
- using TEAMModelOS.SDK.Services;
- namespace TEAMModelOS.Controllers
- {
- [Route("fix-data")]
- [ApiController]
- public class FixDataController : ControllerBase
- {
- private readonly IConfiguration _configuration;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly HttpTrigger _httpTrigger;
- private readonly CoreAPIHttpService _coreAPIHttpService;
- public FixDataController(HttpTrigger httpTrigger,AzureServiceBusFactory serviceBus,AzureCosmosFactory azureCosmos, AzureRedisFactory azureRedis, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration, CoreAPIHttpService coreAPIHttpService)
- {
- _azureCosmos = azureCosmos;
- _azureRedis = azureRedis;
- _azureStorage = azureStorage;
- _dingDing = dingDing;
- _option = option?.Value;
- _configuration = configuration;
- _serviceBus = serviceBus;
- _httpTrigger = httpTrigger;
- _coreAPIHttpService = coreAPIHttpService;
- }
- /// <summary>
- /// 修复能力点学习记录中 nodeid taskid为空的数据
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("fix-nodeid-taskid")]
- public async Task<IActionResult> FixNodeIdTaskId(JsonElement json)
- {
- var client = _azureCosmos.GetCosmosClient();
- string sql = $"SELECT distinct value(c) FROM c join b in c.fileRecords join a in b.files where a.taskId =null or a.nodeId=null ";
- List<TeacherFile> teacherFiles= new List<TeacherFile>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherFile>(queryText: sql))
- {
- teacherFiles.Add(item);
- }
- teacherFiles.ForEach(x => {
- x.fileRecords.ForEach(y => {
- y.files.RemoveAll(x => x.taskId == null || x.nodeId == null);
- });
- });
- foreach (var a in teacherFiles) {
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(a, a.id, new PartitionKey(a.code));
- }
- return Ok(teacherFiles);
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("check-repeat-name")]
- public async Task<IActionResult> CheckRepeatName(JsonElement json) {
- var client = _azureCosmos.GetCosmosClient();
- string sql = $"SELECT distinct value(c) FROM c join b in c.schools where b.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
- List<Teacher> teachers = new();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") })) {
- teachers.Add(item);
- }
- var group = teachers.SelectMany(x => x.binds).Select(y => y.userid).GroupBy(z=>z).Select(m=>new { key=m.Key,list=m.ToList()});
- Dictionary<string, dynamic> dict = new Dictionary<string, dynamic>();
- group.ToList().ForEach(x => {
-
- if (x.list.Count() > 1) {
- HashSet<Teacher> teacherR = new();
- teachers.ForEach(z => {
- z.binds.ForEach(y => {
- if (y.userid.Equals(x.key)) {
- teacherR.Add(z);
- }
- });
- });
- dict.Add(x.key, teacherR.ToList().Select(x=>new { x.name,x.id}));
- }
- });
- return Ok(dict);
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("set-admin")]
- public async Task<IActionResult> SetAdmin(JsonElement json)
- {
- var client = _azureCosmos.GetCosmosClient();
- string sql = $"SELECT value(c) FROM c where c.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
- Teacher teacher =await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>("1528783259", new PartitionKey("Base"));
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
- {
- var sc= teacher.schools.Find(x => x.schoolId.Equals(item.id));
- if (sc != null)
- {
- if (string.IsNullOrEmpty(sc.status)||!sc.status.Equals("join"))
- {
- sc.status = "join";
- }
- try
- {
- SchoolTeacher schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(teacher.id, new PartitionKey($"Teacher-{sc.schoolId}"));
- if (schoolTeacher != null)
- {
- if (schoolTeacher.roles.IsEmpty() || !schoolTeacher.roles.Contains("admin"))
- {
- schoolTeacher.roles = new List<string> { "admin" };
- }
- schoolTeacher.status = "join";
- schoolTeacher.pk = "Teacher";
- schoolTeacher.name = teacher.name;
- schoolTeacher.picture = teacher.picture;
- schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
- schoolTeacher.ttl = -1;
- schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
- }
- }
- catch (CosmosException ex)
- {
- SchoolTeacher schoolTeacher = new SchoolTeacher
- {
- id = teacher.id,
- code = $"Teacher-{sc.schoolId}",
- roles = new List<string> { "teacher" },
- permissions = new List<string>(),
- pk = "Teacher",
- name = teacher.name,
- picture = teacher.picture,
- status = "join",
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
- ttl = -1
- };
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
- }
- }
- else {
- teacher.schools.Add(new Teacher.TeacherSchool { schoolId = item.id, name = item.name, areaId = item.areaId, picture = item.picture, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), status = "join" });
- SchoolTeacher schoolTeacher = new SchoolTeacher { id = teacher.id, code = $"Teacher-{item.id}",
- roles = new List<string> { "admin", "teacher" },permissions= new List<string>(),
- pk= "Teacher",name=teacher.name,picture=teacher.picture ,
- status="join",createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- };
- await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
- }
- }
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(teacher, teacher.id,new PartitionKey("Base"));
- return Ok();
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("fix-teacher-statistics")]
- public async Task<IActionResult> FixTeacherStatistics(JsonElement json)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
- string sql = $"SELECT distinct value(c) FROM c where c.pk='TeacherTrain' ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherTrain>(queryText: sql))
- {
- teacherTrains.Add(item);
- }
- foreach (var train in teacherTrains)
- {
- train.update.Add(StatisticsService.TeacherAbility);
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
- }
- return Ok();
- }
- /// <summary>
- ///
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("fix-teacher-file")]
- public async Task<IActionResult> FixTeacherFile(JsonElement json) {
- var client = _azureCosmos.GetCosmosClient();
- List<TeacherFile> teacherFiles = new List<TeacherFile>();
- string sql = $"SELECT distinct value(c) FROM c join b in c.fileRecords where c.pk='TeacherFile' and b.type='video' and b.done=true and b.duration>0 and b.view<TRUNC(b.duration) ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherFile>(queryText: sql))
- {
- teacherFiles.Add(item);
- }
- foreach (var flie in teacherFiles) {
- var records = flie.fileRecords.FindAll(x => x.type.Equals("video") && x.duration > 0 && x.view < (int)x.duration);
- records.ForEach(x => { x.view =(int) x.duration; });
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(flie, flie.id, new PartitionKey(flie.code));
- TeacherTrain train = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<TeacherTrain>(flie.id, new PartitionKey($"TeacherTrain-{flie.code.Replace("TeacherFile-","")}"));
- train.update.Add(StatisticsService.TeacherAbility);
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(train, train.id, new PartitionKey(train.code));
- }
- return Ok();
- }
- /// <summary>
- /// 批量导入自动加入学校
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("fix-joinschool")]
- public async Task<IActionResult> GenerateSchoolCodes(JsonElement json)
- {
-
- JsonElement _teachers =json.GetProperty("teachers");
- string jsons = _teachers.ToJsonString();
- jsons = Regex.Replace(jsons, @"\s", "");
- List<JoinSchool> joins= jsons.ToObject<List<JoinSchool>>();
- string url = _configuration.GetValue<string>("HaBookAuth:CoreId:userinfo");
- HttpClient client = new HttpClient();
- var tmdids= joins.Select(x => x.tmdid).ToList();
- var content = new StringContent(tmdids.ToJsonString(), Encoding.UTF8, "application/json");
- HttpResponseMessage responseMessage = await client.PostAsync(url, content);
- List<Teacher> ids = null;
- if (responseMessage.StatusCode == HttpStatusCode.OK)
- {
- string responseBody = responseMessage.Content.ReadAsStringAsync().Result;
- ids= responseBody.ToObject<List<Teacher>>();
- }
- if (ids.IsNotEmpty()) {
- var school = joins.Select(x => x.schoolId);
- HashSet<string> scho= new HashSet<string>(school);
- string sql = $"select value(c) from c where c.id in ({string.Join(",", scho.Select(x => $"'{x}'"))})";
- List<School> schools = new List<School>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").
- GetItemQueryIterator<School>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
- {
- schools.Add(item);
- }
- var noexist = tmdids.Except( ids.Select(x=>x.id));
- sql = $"select value(c) from c where c.id in ({string.Join(",", ids.Select(x => $"'{x.id}'"))})";
- List<Teacher> teachers = new List<Teacher>();
- List<Teacher> updTeachers = new List<Teacher>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").
- GetItemQueryIterator<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
- {
- teachers.Add(item);
- }
- long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
- var nobinds = ids.Select(x => x.id).Except(teachers.Select(t => t.id)).ToList();
- foreach (var tch in teachers) {
- var join = joins.Find(x => x.tmdid.Equals(tch.id));
- if (join != null) {
- var joinschool= tch.schools.Find(x => x.schoolId.Equals(join.schoolId));
-
- if (joinschool == null) {
- var schoolInfo= schools.Find(x => x.id.Equals(join.schoolId));
- if (schoolInfo != null) {
- tch.defaultSchool = join.schoolId;
- tch.schools.Add(new Teacher.TeacherSchool { schoolId = join.schoolId, areaId = schoolInfo.areaId, name = schoolInfo?.name, picture = schoolInfo?.picture, status = "join", time = now });
-
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(tch, tch.id, new PartitionKey("Base"));
- updTeachers.Add(tch);
- }
- }
-
- }
- }
- HashSet<Teacher> changeTeacher = new HashSet<Teacher>();
- List<Teacher> addTeachers = new List<Teacher>();
- if (nobinds != null) {
- foreach (var tch in nobinds)
- {
- var teacher = ids.Find(x => x.id.Equals(tch));
- var join = joins.Find(x => x.tmdid.Equals(tch));
- var schoolInfo = schools.Find(x => x.id.Equals(join.schoolId));
- if (schoolInfo!=null && teacher != null)
- {
- teacher.ttl = -1;
- teacher.pk = "Teacher";
- teacher.code = "Base";
- teacher.size = 2;
- teacher.schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = join.schoolId, areaId = schoolInfo.areaId, name = schoolInfo?.name, picture = schoolInfo?.picture, status = "join", time = now } };
- teacher.defaultSchool = schoolInfo?.id;
- List<string> roles = new List<string> { "teacher" };
- if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
- {
- roles.Add("admin");
- }
- var container = _azureStorage.GetBlobContainerClient(teacher.id);
- await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
- teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
- addTeachers.Add(teacher);
- }
- }
- }
- foreach (var sch in schools)
- {
- StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
- List<GroupList> yxtrain = new List<GroupList>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{sch.id}") }))
- {
- yxtrain.Add(item);
- }
- if (yxtrain.IsNotEmpty())
- {
- var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
- schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
- GroupList groupList = yxtrain[0];
- //不在研修名单
- schjoins= schjoins.FindAll(z => !yxtrain.SelectMany(x => x.members).Where(y => y.type == 1).Select(m=>m.id).Contains(z.tmdid));
- if (schjoins.IsNotEmpty())
- {
- foreach (var schjoin in schjoins)
- {
- groupList.members.Add(new Member { id = schjoin.tmdid, type = 1 });
- }
- await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus);
- }
- }
- else
- {
- var schjoins = joins.FindAll(x => x.schoolId.Equals(sch.id));
- schjoins.RemoveAll(x => noexist.Contains(x.tmdid));
- if (schjoins.IsNotEmpty()) {
- List<Member> members = new List<Member>();
- foreach (var schjoin in schjoins)
- {
- members.Add(new Member { id = schjoin.tmdid, type = 1 });
- }
- GroupList groupList = new GroupList()
- {
- id = Guid.NewGuid().ToString(),
- code = $"GroupList-{sch.id}",
- creatorId = schjoins[0].tmdid,
- type = "yxtrain",
- year = DateTimeOffset.UtcNow.Year,
- members = members,
- scope = "school",
- school = sch.id,
- name = "研修名单",
- pk = "GroupList",
- ttl = -1
- };
- await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus);
- }
- }
- var schtch = joins.FindAll(x => x.schoolId.Equals(sch.id));
- schtch.RemoveAll(x => noexist.Contains(x.tmdid));
- var tchs =teachers.FindAll(x => schtch.Select(x => x.tmdid).Contains(x.id));
- foreach (var joinc in tchs) {
- SchoolTeacher schoolTeacher = null;
- var join = joins.Find(x => x.tmdid.Equals(joinc.id));
- joinc.schools.ForEach(x => {
- if (x.schoolId.Equals(sch.id) &&x.status.Equals("request") ) {
- x.status = "join";
- changeTeacher.Add(joinc);
- }
- });
- List<string> roles = new List<string> { "teacher" };
- if (!string.IsNullOrEmpty(join.role) && join.role.Equals("admin"))
- {
- roles.Add("admin");
- }
- try
- {
- schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(joinc.id, new PartitionKey($"Teacher-{join.schoolId}"));
- if (roles.Contains("admin") && !schoolTeacher.roles.Contains("admin"))
- {
- schoolTeacher.roles.Add("admin");
- }
- if (roles.Contains("teacher") && !schoolTeacher.roles.Contains("teacher"))
- {
- schoolTeacher.roles.Add("teacher");
- }
- schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions: new List<string>();
- schoolTeacher.status = "join";
- }
- catch (CosmosException)
- {
- schoolTeacher = new SchoolTeacher
- {
- id = joinc.id,
- name = joinc.name,
- picture = joinc.picture,
- code = $"Teacher-{sch.id}",
- pk = "SchoolTeacher",
- ttl = -1,
- size = 0,
- roles = roles,
- status = "join",
- createTime = now,
- permissions = new List<string>()
- };
- }
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
- }
- }
- foreach (var tch in changeTeacher) {
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(tch,tch.id, new PartitionKey("Base"));
- }
- return Ok(new { noexist ,update= updTeachers,add= addTeachers });
- }
- return Ok(new { status=404 });
- }
- public class JoinSchool{
- public string name { get; set; }
- public string schoolId { get; set; }
- public string mobile { get; set; }
- public string tmdid { get; set; }
- public string role { get; set; }
- }
- [ProducesDefaultResponseType]
- [HttpPost("fix-md5-duration")]
- public async Task<IActionResult> FixMD5Duration(JsonElement json) {
- json.TryGetProperty("standard", out JsonElement standard);
- json.TryGetProperty("abilityIds", out JsonElement _abilityIds);
- if (string.IsNullOrEmpty($"{standard}")
- && (!$"{standard}".Equals("standard1")
- || !$"{standard}".Equals("standard2")
- || !$"{standard}".Equals("standard3")
- || !$"{standard}".Equals("standard4")
- || !$"{standard}".Equals("standard7"))) {
- return Ok();
- }
- var client = _azureStorage.GetBlobContainerClient($"teammodelos");
- await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/standard1/jyzx/15d96330-54d8-95fd-cf9a-8785836fad03"))
- {
- string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
- Console.WriteLine($"{item.Name}-{hash}");
- }
- var CosmosClient = _azureCosmos.GetCosmosClient();
- HashSet<AbilityTask> abilityTasks = new HashSet<AbilityTask>();
- List<string> abilityIds = _abilityIds.ToObject<List<string>>();
- if (abilityIds.IsEmpty()) {
- return Ok();
- }
- MD5 md5 = new MD5CryptoServiceProvider();
- string sql = $"select value(c) from c where c.abilityId in ({string.Join(",",abilityIds.Select(x=>$"'{x}'"))}) ";
- await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
- {
- var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
- if (nodes != null && nodes.Count() > 0)
- {
- foreach (var node in item.children)
- {
- foreach (var r in node.rnodes)
- {
- if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
- {
- abilityTasks.Add(item);
- }
- }
- }
- }
- abilityTasks.Add(item);
- }
- foreach (var item in abilityTasks) {
- var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
- if (nodes != null && nodes.Count() > 0)
- {
- foreach (var node in item.children)
- {
- foreach (var r in node.rnodes)
- {
- if (!r.type.Equals("link") && (string.IsNullOrWhiteSpace(r.hash) || r.size == 0))
- {
- BlobDownloadInfo blobDownload = await client.GetBlobClient(r.link).DownloadAsync(range: new HttpRange(0, 4*1048576),rangeGetContentHash:true);
-
- if (blobDownload.Details.ContentHash != null) {
- string hash = Md5Hash.GetbyteToString(blobDownload.Details.ContentHash);
- r.hash = hash;
- }
-
- //byte[] retVal = md5.ComputeHash(blobDownload.Content);
- //string hash = Md5Hash.GetbyteToString(retVal);
- //r.hash = hash;
- //r.size = blobDownload.Content.Length;
- }
- }
- }
- await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync<AbilityTask>(item, item.id, new PartitionKey(item.code));
- }
- }
- return Ok(abilityTasks);
- }
- /// <summary>
- /// 修复能力点任务的资源节点的文件大小,hash值等。
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("fix-blobitem-md5")]
- public async Task<IActionResult> GetBlobitemMd5(JsonElement jsonMsg)
- {
- List<string> standards = new List<string>() { "standard1", "standard2", "standard3", "standard4" };
- var client = _azureStorage.GetBlobContainerClient($"teammodelos");
- var CosmosClient = _azureCosmos.GetCosmosClient();
- List<BlobFile> itemInfos = new List<BlobFile>();
- List<string> fils = new List<string>() ;
- foreach (var standard in standards)
- {
- await foreach (BlobItem item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{standard}/jyzx/"))
- {
- if (item.Properties.ContentHash.Length < 16)
- {
- fils.Add(item.Name);
- }
- string hash = Md5Hash.GetbyteToString(item.Properties.ContentHash);
- if (string.IsNullOrEmpty(hash))
- {
- fils.Add(item.Name);
- }
- var blobitem = itemInfos.Find(x => x.id.Equals(hash));
- if (blobitem != null)
- {
- blobitem.paths.Add(item.Name);
- }
- else
- {
- long? ContentLength = item.Properties.ContentLength;
- blobitem = new BlobFile() { code = $"BlobFile-{standard}", source = "standard", pk = "BlobFile", ttl = -1, id = hash, size = ContentLength != null ? ContentLength.Value : 0 };
- blobitem.paths.Add(item.Name);
- itemInfos.Add(blobitem);
- }
- }
- }
- List<Rnode> rnode = new List<Rnode>();
- foreach (var standard in standards)
- {
- List<AbilityTask> abilityTasks = new List<AbilityTask>();
- string sql = "select value(c) from c ";
- await foreach (var item in CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<AbilityTask>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"AbilityTask-{standard}") }))
- {
- var nodes = item.children.SelectMany(x => x.rnodes).Where(m => !m.type.Equals("link") && string.IsNullOrEmpty(m.hash));
- if (nodes!=null && nodes.Count() > 0) {
- foreach (var node in item.children) {
-
- foreach (var r in node.rnodes) {
- if (!r.type.Equals("link") && string.IsNullOrEmpty(r.hash)) {
- string str = r.link.Substring(1);
- BlobFile itemInfo = itemInfos.Find(s => s.paths.Contains(str));
- if (itemInfo != null)
- {
- r.size = itemInfo.size;
- r.hash = itemInfo.id;
- }
- rnode.Add(r);
- }
- }
- node.rnodes.RemoveAll(x => x.hash == null);
- }
- await CosmosClient.GetContainer(Constant.TEAMModelOS, "Normal").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
- }
- abilityTasks.Add(item);
- }
- }
- await _dingDing.SendBotMsg($"fix-blobitem-md5, {fils.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
- return Ok(new { rnode , itemInfos });
- }
-
- /// <summary>
- /// 修复学生的id
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-student-id")]
- public async Task<IActionResult> FixStudentId(JsonElement data) {
- var client = _azureCosmos.GetCosmosClient();
- var queryslt = $"SELECT value(c) FROM c ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: queryslt)) {
- //item.id
- }
- return Ok();
- }
- /// <summary>
- /// 修复学生的id
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-school")]
- public async Task<IActionResult> FixSchool(JsonElement data)
- {
- List<string> arr = new List<string> {
- "pjzx",
- "pjsazx",
- "pjsywgyxx",
- "pjbjxx",
- "pjhszcjzx",
- "pjcyhzjnzxx",
- "pjxnxx",
- "pjthxx",
- "pjsazsmxx",
- "pjcyxx",
- "pjsazcjzx",
- "pjwxjnzxx",
- "ptsxxpjfx",
- "pjjysxx",
- "pjxlzjnzxx",
- "pjfxxx",
- "pjdtjnzxx",
- "pjgxzjnzxx",
- "pjcjzjnzxx",
- "pjdxjnzxx",
- "pjwjxx",
- "pjzyzx",
- "pjnjyey",
- "pjbjyey",
- "pjcbyey",
- "pjcxyey",
- "pjcnyey",
- "pjxj5hyey",
- "pjxlyey",
- "pjsazxyey",
- "pjsaxcyey",
- "pjthyey",
- "pjsmyey",
- "pjshyey",
- "pjwxyey",
- "pjjysyey",
- "pjfxyey",
- "pjgxyey",
- "pjcjyey",
- "pjcyhyey",
- "pjbyyey",
- "pjdtyey",
- "pjnjyeydxfy",
- "pjcxyeygmfy",
- "pjcbyeygqfy",
- "pjsaxcyeyzqfy",
- "pjxyheyey",
- "pjxhyey",
- "pjxbeyey",
- "pjhhzyey",
- "pjxxyey",
- "sazxgyey",
- "xlzlxyey",
- "dxzxmyey",
- "dtzxmyey",
- "dtzydyey"
- };
- var client = _azureCosmos.GetCosmosClient();
- foreach (var ar in arr) {
- SchoolTeacher teacher = new SchoolTeacher {
- id = "1528783259",
- code = $"Teacher-{ar}",
- picture= "https://corestorageservice.blob.core.windows.net/account/avatar/1528783259",
- name= "郭杰",
- job="管理员",
- roles=new List<string> { "admin", "teacher" },
- status="join",
- pk= "Teacher",
- ttl=-1,
- createTime= 1631703528741,
- };
- await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(teacher, partitionKey: new PartitionKey(teacher.code));
- }
- //await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- //{
- // if (arr.Contains(item.id)) {
- // string periodid = Guid.NewGuid().ToString();
- // string campuses = Guid.NewGuid().ToString();
- // item.period = new List<Period> { new Period { name = "默认学段", id = periodid, campusId = campuses } };
- // item.campuses = new List<Campus> { new Campus { name = "本部", id = campuses } };
- // item.timeZone.label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐";
- // item.timeZone.value = "+08:00";
- // await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(item, item.id, new PartitionKey(item.code));
- // }
- //}
- return Ok();
- }
- /// <summary>
- /// 修复学生的id
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-teacher")]
- public async Task<IActionResult> FixTeacher(JsonElement data) {
- var client = _azureCosmos.GetCosmosClient();
- List<Teacher> teachers = new List<Teacher>();
- string sql = $"SELECT value(c) FROM c ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- teachers.Add(item);
- }
- List<School> schools = new List<School>(0);
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- schools.Add(item);
- }
- teachers.ForEach(x=> {
- x.schools.ForEach(y => {
- School? school= schools.Find(z => z.id.Equals(y.schoolId));
- if (school != null) {
- y.name = school.name;
- y.picture = school.picture;
- y.areaId = school.areaId;
- }
- });
- });
- foreach (var item in teachers) {
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey($"Base"));
- }
- return Ok();
- }
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-item")]
- public async Task<IActionResult> FixItem(JsonElement data) {
- var client = _azureCosmos.GetCosmosClient();
- List<School> schools = new List<School>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText:"SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey= new PartitionKey("Base") })){
- schools.Add(item);
- }
- Random random = new Random();
- foreach (var school in schools) {
- List<ItemInfo> items = new List<ItemInfo>();
- var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
- List<ItemInfo> noPeriodId = new List<ItemInfo>();
- List<ItemInfo> noSubjectId = new List<ItemInfo>();
- List<ItemInfo> noGradeIds = new List<ItemInfo>();
-
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{school.id}") }))
- {
- if (string.IsNullOrEmpty(item.periodId))
- {
- noPeriodId.Add(item);
- }
- if (string.IsNullOrEmpty(item.subjectId))
- {
- noSubjectId.Add(item);
- }
- if (!item.gradeIds.IsNotEmpty())
- {
- noGradeIds.Add(item);
- }
- bool errorData = false;
- foreach (var x in item.gradeIds)
- {
- if (string.IsNullOrEmpty(x))
- {
- errorData = true;
- }
- }
- if (errorData)
- {
- List<string> grds = new List<string>();
- item.gradeIds.ForEach(x => {
- if (string.IsNullOrEmpty(x))
- {
- grds.Add($"{random.Next(0, 5)}");
- }
- else
- {
- grds.Add(x);
- }
- });
- item.gradeIds = grds;
- await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<ItemInfo>(item, item.id, new PartitionKey(item.code));
- }
- items.Add(item);
- }
- List<ItemInfo> unMatch = new List<ItemInfo>();
- foreach (var item in items)
- {
- bool match = false;
- school.period.ForEach(x =>
- {
- if (item.periodId.Equals(x.id))
- {
- if (x.subjects.Select(y => y.id).Contains(item.subjectId))
- {
- match = true;
- }
- }
- });
- if (!match)
- {
- unMatch.Add(item);
- }
- }
- if (noGradeIds.IsNotEmpty())
- {
- var ids = noGradeIds.Select(x => x.id);
- await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
- foreach (var rm in noGradeIds)
- {
- items.Remove(rm);
- }
- }
- if (noPeriodId.IsNotEmpty())
- {
- var ids = noPeriodId.Select(x => x.id);
- await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
- foreach (var rm in noPeriodId)
- {
- items.Remove(rm);
- }
- }
- if (noSubjectId.IsNotEmpty())
- {
- var ids = noSubjectId.Select(x => x.id);
- await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
- foreach (var rm in noSubjectId)
- {
- items.Remove(rm);
- }
- }
- if (unMatch.IsNotEmpty())
- {
- var ids = unMatch.Select(x => x.id);
- await client.GetContainer(Constant.TEAMModelOS, "School").DeleteItemsAsync<ItemInfo>(ids.ToList(), $"Item-{school.id}");
- foreach (var rm in unMatch)
- {
- items.Remove(rm);
- }
- }
- List<ItemCond> itemConds = new List<ItemCond>();
- items.GroupBy(x => x.periodId).Select(y => new { key = y.Key, list = y.ToList() }).ToList().ForEach(z =>
- {
- ItemCond cond = new ItemCond() { id = z.key, code = $"ItemCond-{school.id}", pk = "ItemCond", ttl = -1, count = z.list.Count, grades = new List<GradeCount>(), subjects = new List<SubjectItemCount>() };
- z.list.ForEach(y =>
- {
- ItemService.CountItemCond(y, null, cond);
- });
- itemConds.Add(cond);
- });
- itemConds.ForEach(async cond =>
- {
- await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
- });
- }
- return Ok(new { });
- }
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-item-teacher")]
- public async Task<IActionResult> FixItemTeacher(JsonElement data)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<Teacher > teachers = new List<Teacher>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: "SELECT value(c) FROM c", requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- teachers.Add(item);
- }
- Random random = new Random();
- foreach (var teacher in teachers)
- {
- List<ItemInfo> items = new List<ItemInfo>();
- var queryslt = $"SELECT value(c) FROM c where c.pid = null ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<ItemInfo>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{teacher.id}") }))
- {
- items.Add(item);
- }
- List<ItemInfo> unMatch = new List<ItemInfo>();
- ItemCond cond = new ItemCond() { id = teacher.id, code = $"ItemCond", pk = "ItemCond", ttl = -1, count = items.Count };
- items.ForEach(z =>
- {
- ItemService.CountItemCond(z, null, cond);
- });
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync<ItemCond>(cond, new PartitionKey(cond.code));
- }
- return Ok(new { });
- }
- /// <summary>
- /// 修复名单的scope,school,creatorid
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-stulist-scope&school&creatorid")]
- public async Task<IActionResult> FixStulist(JsonElement data)
- {
- try
- {
- var client = _azureCosmos.GetCosmosClient();
- //先处理未关联课程的教师私人名单
- 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") })) {
- string scdsql = $"SELECT value(A1) FROM c join A1 in c.schedule where A1.stulist='{item.id}'";
- int count = 0;
- await foreach (var schedule in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Schedule>(queryText: scdsql ))
- {
- count += 1;
- }
- if (count == 0) {
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemStreamAsync(item.id, new PartitionKey("StuList"));
- }
- }
- HashSet<string> plistId = new HashSet<string>();
- List<KeyValuePair<string, string>> pkeyValuePairs = new List<KeyValuePair<string, string>>();
- List<StuList> pstuLists = new List<StuList>();
- //List<Course> pcourses = new List<Course>();
- //处理私人名单
- string sql = "select value(c) from c where c.pk='Course' ";
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: sql))
- {
- if (item.schedule.IsNotEmpty()) {
- foreach (var scd in item.schedule) {
- if (!string.IsNullOrEmpty(scd.stulist)) {
- plistId.Add(scd.stulist);
- var tmdid= item.code.Replace("Course-", "");
- pkeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, tmdid));
- item.creatorId = tmdid;
- item.scope = "private";
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
- }
- }
- }
- }
- List<string> pfaildId = new List<string>();
- foreach (var list in plistId) {
- try {
- StuList stuList= await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuList>(list, new PartitionKey("StuList"));
- var a = pkeyValuePairs.Where(x => x.Key == list).FirstOrDefault();
- if (stuList.students.IsNotEmpty()) {
- stuList.school = stuList.students[0].code.Replace("Base-", "");
- }
- stuList.creatorId = a.Value;
- stuList.scope = "private";
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuList>(stuList, list, new PartitionKey("StuList"));
- } catch (CosmosException ex) {
- pfaildId.Add(list);
- }
- }
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败私人的名单pfaildId:\n {pfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
- //处理学校的名单
- HashSet<string> slistId = new HashSet<string>();
- List<KeyValuePair<string, string>> skeyValuePairs = new List<KeyValuePair<string, string>>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: sql))
- {
- if (item.schedule.IsNotEmpty())
- {
- foreach (var scd in item.schedule)
- {
- if (!string.IsNullOrEmpty(scd.stulist))
- {
- slistId.Add(scd.stulist);
- var school = item.code.Replace("Course-", "");
- skeyValuePairs.Add(new KeyValuePair<string, string>(scd.stulist, school));
- item.scope = "school";
- item.school = school;
- await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
- }
- }
- }
- }
- List<string> sfaildId = new List<string>();
- foreach (var list in skeyValuePairs)
- {
- try
- {
- StuList stuList = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<StuList>(list.Key, new PartitionKey($"StuList-{list.Value}"));
- stuList.scope = "school";
- stuList.school = list.Value;
- await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<StuList>(stuList, list.Key, new PartitionKey(stuList.code));
- }
- catch (CosmosException ex)
- {
- sfaildId.Add(list.Key);
- }
- }
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n修复失败学校的的名单sfaildId:\n {sfaildId.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
- return Ok(new { });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-stulist-scope&school&creatorid()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- /// <summary>
- /// 修复blob容器逻辑
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-blob-content")]
- public async Task<IActionResult> FixBlobContent(JsonElement data) {
- try
- {
- var client = _azureCosmos.GetCosmosClient();
- await FixDataService.FixBlobContent(client, _dingDing, _azureStorage, data);
- return Ok(new { });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- public class SchoolIdSid {
-
- public string id { get; set; }
- public string sid { get; set; }
- public string name { get; set; }
- }
- /// <summary>
- /// 修复blob容器逻辑
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-long-schoolid")]
- public async Task<IActionResult> FixLongSchoolId(JsonElement data)
- {
- try
- {
- //{\"id\":\"cdqcsxx\",\"sid\":\"qcsxx\",\"name\":\"青城山学校\"},
- //{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}
- List<JsonElement> elements = new List<JsonElement>();
- // string josn = "[{\"id\":\"pjsywgyxx\",\"sid\":\"psywgy\",\"name\":\"蒲江实验外国语小学\"},{\"id\":\"pjhszcjzx\",\"sid\":\"hscjzx\",\"name\":\"蒲江鹤山镇初级中学\"},{\"id\":\"pjcyhzjnzxx\",\"sid\":\"cyhjnz\",\"name\":\"蒲江朝阳湖镇九年制学校\"},{\"id\":\"pjsazsmxx\",\"sid\":\"psasmx\",\"name\":\"蒲江寿安镇寿民小学\"},{\"id\":\"pjsazcjzx\",\"sid\":\"psacjz\",\"name\":\"蒲江寿安镇初级中学\"},{\"id\":\"pjwxjnzxx\",\"sid\":\"pwxjnx\",\"name\":\"蒲江五星九年制学校\"},{\"id\":\"ptsxxpjfx\",\"sid\":\"pptsfx\",\"name\":\"泡桐树小学蒲江分校(蒲江松华小学)\"},{\"id\":\"pjjysxx\",\"sid\":\"pjjysx\",\"name\":\"蒲江金钥匙学校\"},{\"id\":\"pjxlzjnzxx\",\"sid\":\"xlzjnx\",\"name\":\"蒲江西来镇九年制学校\"},{\"id\":\"pjdtjnzxx\",\"sid\":\"pdtjnx\",\"name\":\"蒲江大塘九年制学校\"},{\"id\":\"pjgxzjnzxx\",\"sid\":\"pgxjnx\",\"name\":\"蒲江甘溪镇九年制学校\"},{\"id\":\"pjcjzjnzxx\",\"sid\":\"pcjjnx\",\"name\":\"蒲江成佳镇九年制学校\"},{\"id\":\"pjdxjnzxx\",\"sid\":\"pdxjnx\",\"name\":\"蒲江大兴九年制学校\"},{\"id\":\"pjnjyey\",\"sid\":\"pnjyey\",\"name\":\"蒲江南街幼儿园\"},{\"id\":\"pjbjyey\",\"sid\":\"pbjyey\",\"name\":\"蒲江北街幼儿园\"},{\"id\":\"pjcbyey\",\"sid\":\"pcbyey\",\"name\":\"蒲江城北幼儿园\"},{\"id\":\"pjcxyey\",\"sid\":\"pcxyey\",\"name\":\"蒲江城西幼儿园\"},{\"id\":\"pjcnyey\",\"sid\":\"pcnyey\",\"name\":\"蒲江城南幼儿园\"},{\"id\":\"pjxj5hyey\",\"sid\":\"xjwhye\",\"name\":\"蒲江熙锦5号幼儿园\"},{\"id\":\"pjxlyey\",\"sid\":\"pxlyey\",\"name\":\"蒲江西来幼儿园\"},{\"id\":\"pjsazxyey\",\"sid\":\"sazxye\",\"name\":\"蒲江寿安中心幼儿园\"},{\"id\":\"pjsaxcyey\",\"sid\":\"saxcye\",\"name\":\"蒲江寿安新城幼儿园\"},{\"id\":\"pjthyey\",\"sid\":\"pthyey\",\"name\":\"蒲江天华幼儿园\"},{\"id\":\"pjsmyey\",\"sid\":\"psmyey\",\"name\":\"蒲江寿民幼儿园\"},{\"id\":\"pjshyey\",\"sid\":\"pshyey\",\"name\":\"蒲江松华幼儿园\"},{\"id\":\"pjwxyey\",\"sid\":\"pwxyey\",\"name\":\"蒲江五星幼儿园\"},{\"id\":\"pjjysyey\",\"sid\":\"pjysye\",\"name\":\"蒲江金钥匙幼儿园\"},{\"id\":\"pjfxyey\",\"sid\":\"pfxyey\",\"name\":\"蒲江复兴幼儿园\"},{\"id\":\"pjgxyey\",\"sid\":\"pgxyey\",\"name\":\"蒲江甘溪幼儿园\"},{\"id\":\"pjcjyey\",\"sid\":\"pcjyey\",\"name\":\"蒲江成佳幼儿园\"},{\"id\":\"pjcyhyey\",\"sid\":\"pcyhye\",\"name\":\"蒲江朝阳湖幼儿园\"},{\"id\":\"pjbyyey\",\"sid\":\"pbyyey\",\"name\":\"蒲江白云幼儿园\"},{\"id\":\"pjdtyey\",\"sid\":\"pdtyey\",\"name\":\"蒲江大塘幼儿园\"},{\"id\":\"pjnjyeydxfy\",\"sid\":\"njyedx\",\"name\":\"蒲江南街幼儿园大兴分园\"},{\"id\":\"pjcxyeygmfy\",\"sid\":\"cxyegm\",\"name\":\"蒲江城西幼儿园光明分园\"},{\"id\":\"pjcbyeygqfy\",\"sid\":\"cbyrgq\",\"name\":\"蒲江城北幼儿园高桥分园\"},{\"id\":\"pjsaxcyeyzqfy\",\"sid\":\"saxyqf\",\"name\":\"蒲江寿安新城幼儿园长秋分园\"},{\"id\":\"pjxyheyey\",\"sid\":\"xyheye\",\"name\":\"星源慧恩幼儿园\"},{\"id\":\"pjxhyey\",\"sid\":\"xhyey\",\"name\":\"仙鹤幼儿园\"},{\"id\":\"pjxbeyey\",\"sid\":\"xbeyey\",\"name\":\"轩贝尔幼儿园\"},{\"id\":\"pjhhzyey\",\"sid\":\"hhzyey\",\"name\":\"好孩子幼儿园\"},{\"id\":\"pjxxyey\",\"sid\":\"xxyey\",\"name\":\"新星幼儿园\"},{\"id\":\"sazxgyey\",\"sid\":\"saxgye\",\"name\":\"寿安镇星光幼儿园\"},{\"id\":\"xlzlxyey\",\"sid\":\"xllxye\",\"name\":\"西来镇李霞幼儿园\"},{\"id\":\"dxzxmyey\",\"sid\":\"dxxmye\",\"name\":\"大兴镇新苗幼儿园\"},{\"id\":\"dtzxmyey\",\"sid\":\"dtxmye\",\"name\":\"大塘镇新苗幼儿园\"},{\"id\":\"dtzydyey\",\"sid\":\"dtydye\",\"name\":\"大塘镇雨朵幼儿园\"},{\"id\":\"jnqzhjyzzjspxb\",\"sid\":\"jnzzjy\",\"name\":\"金牛区智慧教育种子教师培训班\"}]";
- string josn = "[{\"id\":\"xagxdsbxx\",\"sid\":\"xagxsb\",\"name\":\"西安高新第十八小学\"},{\"id\":\"xajkdbxx\",\"sid\":\"xajkbx\",\"name\":\"西安经开第八小学\"}]";
- List<SchoolIdSid> schools = josn.ToObject<List<SchoolIdSid>>();
- var client = _azureCosmos.GetCosmosClient();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions() { }))
- {
- using var json = await JsonDocument.ParseAsync(item.ContentStream);
- List<string> ids = schools.Select(x => x.id).ToList();
- if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
- {
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- { string s = obj.ToJsonString();
- IdCode idcode =s.ToObject<IdCode>();
- foreach (var id in ids) {
- if (idcode.id.Contains( id) || idcode.code.Contains(id))
- {
- await client.GetContainer(Constant.TEAMModelOS, "Common").DeleteItemStreamAsync(idcode.id, new PartitionKey(idcode.code));
- elements.Add(s.ToObject<JsonElement>());
- }
- }
-
- }
- }
- }
- return Ok(new { elements });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- public class IdCode {
-
- public string id { get; set; }
- public string code { get; set; }
- }
- public class CSchool
- {
- public string id { get; set; }
- public string name { get; set; }
- public string admin { get; set; }
- public List<string> period { get; set; } = new List<string>();
- public int size { get; set; } = 100;
- }
- /// <summary>
- /// 修复blob容器逻辑
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("create-school")]
- public async Task<IActionResult> CreateSchool(JsonElement data)
- {
- try
- {
- List<CSchool> schools = new List<CSchool>() {
- new CSchool{
- id="sqtszx",
- name="四川师范大学附属青台山中学",
- admin="1530606136",
- period=new List<string>(){ "初中","高中"},
- size=100,
- }
- };
- var client = _azureCosmos.GetCosmosClient();
- foreach (var sc in schools) {
- List<Period> periods = new List<Period>();
- string campusId = Guid.NewGuid().ToString();
- sc.period.ForEach(x => {
- periods.Add(new Period { id=Guid.NewGuid().ToString(),name=x,campusId= campusId }); });
- School school = new School {
- id = sc.id,
- name = sc.name,
- size = sc.size,
- code = "Base",
- campuses= new List<Campus> { new Campus {name = sc.name,id= campusId } },
- region= "中国",
- province="四川",
- city="成都",
- timeZone= new SDK.Models.TimeZone { label= "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value= "+08:00" },
- type=2,
- pk="School",
- ttl=-1,
- schoolCode=sc.id,
- period= periods
- };
- await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<School>(school, new PartitionKey(school.code));
- Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(sc.admin, new PartitionKey("Base"));
- teacher.schools.Add(new Teacher.TeacherSchool { schoolId = sc.id, name = sc.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
- await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, sc.admin, new PartitionKey("Base"));
- SchoolTeacher schoolTeacher = new SchoolTeacher
- {
- id = sc.admin,
- code = $"Teacher-{sc.id}",
- roles = new List<string> { "admin", "teacher" },
- job = "管理员",
- name = teacher.name,
- picture = teacher.picture,
- status = "join",
- createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
- pk = "Teacher",
- ttl = -1,
- };
- await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey(schoolTeacher.code));
- }
- return Ok(new { });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- /// <summary>
- /// 修复blob容器逻辑
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-student-info")]
- public async Task<IActionResult> FixStudentInfo(JsonElement data)
- {
- try
- {
- var client = _azureCosmos.GetCosmosClient();
- var list= await FixDataService.FixStudentInfo(client, _dingDing, _azureStorage, data);
- return Ok(new { list});
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-blob-content()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- /// <summary>
- /// 修正學段ID非英數邏輯
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-periodid")]
- public async Task<IActionResult> FixPeriodid(JsonElement data)
- {
- try
- {
- if (!data.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
- string schoolCode = school_code.GetString();
- var client = _azureCosmos.GetCosmosClient();
- //學校 Base
- List<string> periodList = await FixDataService.FixSchoolPeriodId(client, schoolCode);
- if (periodList.Count > 0)
- {
- string periodId = periodList[0]; //修正的問題校都只有一個學段,以第一個學段ID為其餘資料的學段ID
- Dictionary<string, string> dataDic = new Dictionary<string, string>();
- dataDic["periodId"] = periodId;
- //班級 Class
- List<string> fixClassIdList = await FixDataService.FixClassInfo(client, schoolCode, dataDic);
- //課程 Course
- List<string> fixCourseIdList = await FixDataService.FixCourseInfo(client, schoolCode, dataDic);
- //知識點 Knowledge
- List<string> fixKnowledgeIdList = await FixDataService.FixKnowledgeInfo(client, schoolCode, dataDic);
- //試題 Item
- List<string> fixItemIdList = await FixDataService.FixItemInfo(client, schoolCode, dataDic);
- //試卷 Paper
- List<string> fixPaperIdList = await FixDataService.FixPaperInfo(client, schoolCode, dataDic);
- //課綱 Volume
- List<string> fixVolumeIdList = await FixDataService.FixVolumeInfo(client, schoolCode, dataDic);
- //評測 Exam
- List<string> fixExamIdList = await FixDataService.FixExamInfo(client, schoolCode, dataDic);
- //學生 Student
- List<string> fixStudentIdList = await FixDataService.FixStudentInfo(client, schoolCode, dataDic);
- return Ok(new { schoolCode, fixClassIdList, fixCourseIdList, fixKnowledgeIdList, fixItemIdList, fixPaperIdList, fixVolumeIdList, fixExamIdList, fixStudentIdList });
- }
- else
- {
- string message = "No period is changed";
- return Ok(new { message });
- }
- }
- catch (Exception ex)
- {
- //await _dingDing.SendBotMsg($"TEAMModelFunction,ActivityHttpTrigger,fix-periodid()\n{ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- }
- /// <summary>
- /// 修复评测publish字段内容
- /// </summary>
- /// <param name="req"></param>
- /// <param name="log"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-exam-publish")]
- public async Task<IActionResult> FixExamPublish(JsonElement data)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<string> infos = await FixDataService.FixExamPublish(client, data);
- return Ok(new { infos });
- }
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-exam-class-result")]
- public async Task<IActionResult> FixExamClassResult(JsonElement data)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<string> infos = await FixDataService.FixExamClassResult(client, data, _dingDing, _coreAPIHttpService, _option);
- return Ok(new { infos });
- }
- /// <summary>
- /// add admin
- /// </summary>
- /// <param name="req"></param>
- /// <param name="log"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("add-area-school-admin")]
- public async Task<IActionResult> AddAreaSchoolAdmin(JsonElement data)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<string> tmdids = data.GetProperty("tmdids").ToObject<List<string>>();
- data.TryGetProperty("areaId",out JsonElement areaId);
- data.TryGetProperty("schoolIds", out JsonElement schoolIds);
- data.TryGetProperty("areaAdmin", out JsonElement areaAdmin);
- List<string> ids = new List<string>();
- string idsSql = "";
- if (schoolIds.ValueKind.Equals(JsonValueKind.Array)) {
- ids = schoolIds.ToObject<List<string>>();
- if (ids.IsNotEmpty()) {
- idsSql = $" or c.id in ({string.Join(",", ids.Select(x=>$"'{x}'"))})";
- }
- }
- string areaIdsql = string.IsNullOrWhiteSpace($"{areaId}")?"-0000000":$"{areaId}";
- string sql = $"select distinct value(c) from c where c.areaId='{areaIdsql}' {idsSql}";
- List<School> schools = new List<School>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(
- queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- schools.Add(item);
- }
- long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
- Azure.Response responseArea= await client.GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync($"{areaId}", new PartitionKey("Base-Area"));
- Area area = null;
- if (responseArea.Status == 200) {
- area = JsonDocument.Parse(responseArea.ContentStream).RootElement.ToObject<Area>();
- }
- List<Teacher> teachers = new List<Teacher>();
- List<SchoolTeacher> schoolsTeachers = new List<SchoolTeacher>();
- foreach (var tmdid in tmdids) {
- Teacher teacher= await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<Teacher>(tmdid, new PartitionKey("Base"));
- if (areaAdmin.ValueKind.Equals(JsonValueKind.True) && !string.IsNullOrWhiteSpace($"{areaId}") && area!= null) {
- if (teacher.areas.IsNotEmpty())
- {
- if (!teacher.areas.Select(x => x.areaId).Contains(area.id)) {
- teacher.areas.Add(new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" });
- }
- }
- else {
- teacher.areas= new List<Teacher.TeacherArea> { new Teacher.TeacherArea { areaId = area.id, name = area.name, status = "join" } };
- }
- }
- foreach (var school in schools) {
- Azure .Response response = await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync(tmdid, new PartitionKey($"Teacher-{school.id}"));
- if (response.Status == 200)
- {
- SchoolTeacher schoolTeacher= JsonDocument.Parse(response.ContentStream).RootElement.ToObject<SchoolTeacher>();
- if (schoolTeacher.roles==null) {
- schoolTeacher.roles = new List<string> { "admin" };
- }
- if (!schoolTeacher.roles.Contains("admin")) {
- schoolTeacher.roles.Add("admin");
- }
- schoolTeacher.name = teacher.name;
- schoolTeacher.picture = teacher.picture;
- schoolTeacher.createTime = now;
- schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
- schoolTeacher.status = "join";
- schoolTeacher.job = "管理员";
- await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(schoolTeacher, tmdid, new PartitionKey($"Teacher-{school.id}"));
- schoolsTeachers.Add(schoolTeacher);
- }
- else
- {
- SchoolTeacher schoolTeacher = new SchoolTeacher() {
- id = tmdid,
- code = $"Teacher-{school.id}",
- roles = new List<string> { "admin", "teacher" },
- permissions = new List<string>(),
- };
- schoolTeacher.name = teacher.name;
- schoolTeacher.picture = teacher.picture;
- schoolTeacher.createTime = now;
- schoolTeacher.subjectIds = schoolTeacher.subjectIds == null ? new List<string>() : schoolTeacher.subjectIds;
- schoolTeacher.status = "join";
- schoolTeacher.job = "管理员";
- await client.GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(schoolTeacher, new PartitionKey($"Teacher-{school.id}"));
- schoolsTeachers.Add(schoolTeacher);
- }
- if (teacher.schools.IsNotEmpty())
- {
- if (!teacher.schools.Select(x => x.schoolId).Contains(school.id))
- {
- teacher.schools.Add(new Teacher.TeacherSchool { schoolId = school.id, areaId = school.areaId, picture = school.picture, name = school.name, status = "join", time = now });
- }
- else {
- var sch= teacher.schools.Find(x => x.schoolId.Equals(school.id));
- if (sch != null) {
- sch.time = now;
- sch.name = school.name;
- sch.areaId = school.areaId;
- sch.picture = school.picture;
- sch.status = "join";
- }
- }
- }
- else
- {
- teacher.schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = school.id,areaId=school.areaId,picture=school.picture, name = school.name, status = "join" ,time= now } };
- }
- }
- await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacher, tmdid, new PartitionKey($"Base"));
- teachers.Add(teacher);
- }
- return Ok(new { teachers, schoolsTeachers });
- }
- /// <summary>
- /// 修复评测publish字段内容
- /// </summary>
- /// <param name="req"></param>
- /// <param name="log"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpGet("fix-group-list")]
- public async Task<IActionResult> FixGroupList() {
- List<GroupList> groupLists = new List<GroupList>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<GroupList>
- (queryText: "select value(c) from c ", requestOptions: new QueryRequestOptions {PartitionKey= new PartitionKey("GroupList") })) {
- groupLists.Add(item);
- }
- List<GroupList> groupLists_up = new List<GroupList>();
- groupLists.ForEach(async list => {
- var smembers = list.members.Where(x => x.type == 2);
- list.scount = smembers.Count();
- if (smembers.Count() > 0 && smembers.Select(x => x.code).ToHashSet().Count() >= 2)
- {
- //处理移除多个学校的名单,只保留一个学校的。
- if (string.IsNullOrWhiteSpace(list.school))
- {
- HashSet<string> codes = smembers.Select(x => x.code).ToHashSet();
- list.school = codes.First();
- codes.Remove(codes.First());
- list.members.RemoveAll(x => codes.Contains(x.code));
- }
- else
- {
- list.members.RemoveAll(x => x.code.Equals(list.school));
- }
- groupLists_up.Add(list);
- }
-
- });
- foreach (var item in groupLists_up)
- {
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
- }
- return Ok();
- }
- /// <summary>
- /// 修复评测publish字段内容
- /// </summary>
- /// <param name="req"></param>
- /// <param name="log"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("fix-scapi-data")]
- public async Task<IActionResult> FixScApiData(JsonElement data)
- {
- //List<ScSchool> schools= await _azureStorage.FindListByDict<ScSchool>(new Dictionary<string, object> { { "PartitionKey", "ScSchool" } });
- //schools.ForEach(x =>{
- // if (x.areaid== 510106)
- // {//金牛
- // x.ProjectID = 72;
- // x.ProjectItemID = 1086;
- // }
- // if (x.areaid== 510131)
- // {//蒲江
- // x.ProjectID = 60;
- // x.ProjectItemID = 1068;
- // }
- //});
- //await _azureStorage.SaveOrUpdateAll<ScSchool>(schools);
- //var school72 = schools.Where(x => x.ProjectID == 72).ToList();
- //foreach(var z in school72) {
- // string accessConfig = "{\"homeworkType\":[\"pdf\"],\"path\":\"scjinniu\",\"config\":\"scsyxpt\",\"passKey\":\"MSmZQnjvySxwB8KZ\",\"trainComID\":\"3072\",\"privateKey\":\"CA00580BB7BFA3817334CFA38257AC9A\",\"url\":\"https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService\",\"p\":[{\"pd\":\"72\",\"pt\":\"金牛区直属学校培训项目\",\"pid\":\"1086\",\"pit\":\"金牛区信息技术2.0提升工程直属学校培训(第一轮)\"}]}";
- // Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig }, { "schoolCode", $"{z.schoolid}" }, { "areaId", "f35e0031-a53f-45e5-b307-1cd39446a2cf" } };
- // (int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSchoolDiagnosis");
- //};
- //var school60 = schools.Where(x => x.ProjectID == 60).ToList();
- //foreach (var z in school60)
- //{
- // string accessConfig = "{\"homeworkType\":[\"pdf\"],\"path\":\"scpjx\",\"config\":\"scsyxpt\",\"passKey\":\"fst4clhyXqrhXblY\",\"trainComID\":\"3069\",\"privateKey\":\"52C1C240E4BE086DD15DB10814E243E6\",\"url\":\"https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService\",\"p\":[{\"pd\":\"60\",\"pt\":\"蒲江县中小学教师信息技术应用能力提升工程2.0培训\",\"pid\":\"1068\",\"pit\":\"蒲江县中小学教师信息技术应用能力提升工程2.0培训 第一期\"}]}";
- // Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig }, { "schoolCode", $"{z.schoolid}" }, { "areaId", "99a4a33b-e21b-44ac-80a1-b31dc40496e0" } };
- // (int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSchoolDiagnosis");
- //};
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScTeacher> teachers= await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" } });
- List<ScTeacherDiagnosis> diagnoses = await table.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" } });
- List<string> rowkeys= diagnoses.Where(z => !string.IsNullOrEmpty(z.schoolCode)).Select(x => x.RowKey).ToList();
- teachers.RemoveAll(x => rowkeys.Contains(x.RowKey));
- await _dingDing.SendBotMsg($"Diagnosis :{ rowkeys.Count }",GroupNames.成都开发測試群組);
- foreach (ScTeacher teacher in teachers) {
- if (teacher.areaId.Equals("99a4a33b-e21b-44ac-80a1-b31dc40496e0")) {
- string accessConfig = "{\"homeworkType\":[\"pdf\"],\"path\":\"scpjx\",\"config\":\"scsyxpt\",\"passKey\":\"fst4clhyXqrhXblY\",\"trainComID\":\"3069\",\"privateKey\":\"52C1C240E4BE086DD15DB10814E243E6\",\"url\":\"https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService\",\"p\":[{\"pd\":\"60\",\"pt\":\"蒲江县中小学教师信息技术应用能力提升工程2.0培训\",\"pid\":\"1068\",\"pit\":\"蒲江县中小学教师信息技术应用能力提升工程2.0培训 第一期\"}]}";
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig },{ "schoolCode", teacher.schoolCode} ,{ "pxid", $"{teacher.PXID}" }, { "areaId", "99a4a33b-e21b-44ac-80a1-b31dc40496e0" } };
- await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetDiagnosisListByProject_V2");
- }
- if (teacher.areaId.Equals("f35e0031-a53f-45e5-b307-1cd39446a2cf"))
- {
- string accessConfig = "{\"homeworkType\":[\"pdf\"],\"path\":\"scjinniu\",\"config\":\"scsyxpt\",\"passKey\":\"MSmZQnjvySxwB8KZ\",\"trainComID\":\"3072\",\"privateKey\":\"CA00580BB7BFA3817334CFA38257AC9A\",\"url\":\"https://scts.scedu.com.cn/webservice/EduService.asmx/RequestService\",\"p\":[{\"pd\":\"72\",\"pt\":\"金牛区直属学校培训项目\",\"pid\":\"1086\",\"pit\":\"金牛区信息技术2.0提升工程直属学校培训(第一轮)\"}]}";
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", accessConfig }, { "schoolCode", teacher.schoolCode }, { "pxid", $"{teacher.PXID}" }, { "areaId", "f35e0031-a53f-45e5-b307-1cd39446a2cf" } };
- await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetDiagnosisListByProject_V2");
- }
- }
- return Ok(new { rowkeys.Count });
- }
- /// <summary>
- /// 学生活动中间表ClassIds去重
- /// </summary>
- /// <param name="jsonElement"></param>
- /// <returns></returns>
- [HttpPost("fix-classIds")]
- public async Task<IActionResult> CorrectActivityClassIds()
- {
- try
- {
- var cosmosClient = _azureCosmos.GetCosmosClient();
- //string sqlTxt = "SELECT select c.id,c.code,c.classIds FROM c where c.pk='Activity' and c.classIds <> []";
- string sqlTxt = "select c.id,c.code,c.classIds from c where c.classIds <> []";
- List<CorrectStu> correctStus = new List<CorrectStu>();
- await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Student").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
- {
- using var json = await JsonDocument.ParseAsync(item.ContentStream);
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- {
- obj.TryGetProperty("id", out JsonElement tempTd);
- obj.TryGetProperty("code", out JsonElement code);
- obj.TryGetProperty("classIds", out JsonElement _classIds);
- List<string> templist = _classIds.ToObject<List<string>>();
- //List<string> newList = templist.Distinct().ToList(); //Equals实现去重
- //List<string> newLis1 = templist.Where((x, i) => templist.FindIndex(z => z == x) == i).ToList(); //Lambda表达式去重
- HashSet<string> hashSet = new HashSet<string>(templist);//哈希自动去重
- if (hashSet.Count != templist.Count)
- {
- CorrectStu correctList = new CorrectStu() { id = $"{tempTd}", code = $"{code}", classIds = hashSet.ToList() };
- correctStus.Add(correctList);
- }
- }
- }
- List<Task<ItemResponse<StuActivity>>> tasks = new List<Task<ItemResponse<StuActivity>>>();
- if (correctStus.Count > 0)
- {
- foreach (var correct in correctStus)
- {
- StuActivity stuActivity = await cosmosClient.GetContainer("TEAMModelOS", "Student").ReadItemAsync<StuActivity>(correct.id, new PartitionKey(correct.code));
- if (stuActivity != null)
- {
- stuActivity.classIds = correct.classIds;
- tasks.Add(cosmosClient.GetContainer("TEAMModelOS", "Student").ReplaceItemAsync<StuActivity>(stuActivity, stuActivity.id, new PartitionKey(stuActivity.code)));
- }
- }
- await Task.WhenAll(tasks);
- return Ok(new { state = 200, msg = "去重成功" });
- }
- else
- {
- return Ok(new { state = 201, msg = "学生活动中间表无重复班级ID" });
- }
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"OS,{_option.Location} /fix-data/fix-classIds \n {ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
- return Ok(new { state = 401 });
- }
- }
- public record CorrectStu
- {
- public string id { get; set; }
- public string code { get; set; }
- public List<string> classIds { get; set; }
- }
- }
- }
|