123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875 |
- using Microsoft.AspNetCore.Mvc;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using TEAMModelOS.Models;
- using TEAMModelOS.SDK.DI;
- using System.Text.Json;
- using TEAMModelOS.SDK.Models;
- using Microsoft.AspNetCore.Http;
- using TEAMModelOS.SDK.Extension;
- using Azure.Cosmos;
- using System.Text;
- using TEAMModelOS.SDK.DI;
- using Microsoft.Extensions.Options;
- using Azure.Messaging.ServiceBus;
- using Microsoft.Extensions.Configuration;
- using HTEXLib.COMM.Helpers;
- using TEAMModelOS.SDK;
- using System.IdentityModel.Tokens.Jwt;
- using TEAMModelOS.Services;
- using TEAMModelOS.SDK.Models.Service;
- using System.IO;
- using System.Dynamic;
- using Microsoft.AspNetCore.Authorization;
- using Azure.Storage.Blobs.Models;
- using static TEAMModelOS.SDK.Models.Teacher;
- using System.Web;
- using static TEAMModelOS.Controllers.FixDataController;
- using static TEAMModelOS.SDK.SchoolService;
- using Microsoft.AspNetCore.Hosting;
- using static TEAMModelOS.Controllers.ScController;
- using OpenXmlPowerTools;
- using System.Net.Http;
- namespace TEAMModelOS.Controllers.Third
- {
- /// <summary>
- ///
- /// </summary>
- ///
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- //
- //[Route("")]
- [Route("sc-init")]
- [ApiController]
- public class ScDataInitController : ControllerBase
- {
- private readonly SnowflakeId _snowflakeId;
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly AzureRedisFactory _azureRedis;
- private readonly CoreAPIHttpService _coreAPIHttpService;
-
- public readonly string type = "scsyxpt";
- private readonly HttpTrigger _httpTrigger;
- private readonly IWebHostEnvironment _environment;
- private readonly IHttpClientFactory _httpClient;
- public IConfiguration _configuration { get; set; }
- public ScDataInitController(IHttpClientFactory httpClient, IWebHostEnvironment environment, AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage,
- AzureRedisFactory azureRedis, AzureServiceBusFactory serviceBus, IConfiguration configuration, CoreAPIHttpService coreAPIHttpService, HttpTrigger httpTrigger)
- {
- _azureCosmos = azureCosmos;
- _snowflakeId = snowflakeId;
- _dingDing = dingDing;
- _option = option?.Value;
- _azureStorage = azureStorage;
- _serviceBus = serviceBus;
- _configuration = configuration;
- _azureRedis = azureRedis;
- _coreAPIHttpService = coreAPIHttpService;
-
- _httpTrigger = httpTrigger;
- _environment = environment;
- _httpClient = httpClient;
- }
- /// <summary>
- /// 0. 获取省平台相关的项目
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-scs-porject")]
- [AllowAnonymous]
- public async Task<IActionResult> GetScsPorject(JsonElement request)
- {
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScComConfig> scComConfigs = await table.FindListByDict<ScComConfig>(new Dictionary<string, object> { { Constant.PartitionKey, "ScComConfig" } });
- string Code = "GetProjectInfoByTrainComID";
- List<ScProject> projectsSave = new List<ScProject>();
- foreach (var config in scComConfigs)
- {
- Dictionary<string, object> parameterMap = new Dictionary<string, object>();
- parameterMap.Add("TrainComID", config.trainComID);
- ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.1获取项目列表" };
- result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap);
- List<ScProject> projects = result.content.ToObject<List<ScProject>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- List<ScProject> scProjects = await table.FindListByDict<ScProject>(new Dictionary<string, object> { { Constant.PartitionKey, "ScProject" }, { "trainComID", $"{config.trainComID}" } });
- foreach (var project in projects)
- {
- if (scProjects.IsNotEmpty())
- {
- ScProject scProject = scProjects.Find(x => x.ProjectItemID == project.ProjectItemID);
- if (scProject != null)
- {
- scProject.PartitionKey = "ScProject";
- scProject.trainComID = config.trainComID;
- scProject.passKey = config.passKey;
- scProject.privateKey = config.privateKey;
- scProject.RowKey = $"{project.ProjectItemID}";
- scProject.config = "scsyxpt";
- scProject.ProjectID = project.ProjectID;
- scProject.ProjectItemID = project.ProjectItemID;
- scProject.ProjectItemTitle = project.ProjectItemTitle;
- scProject.ProjectTitle = project.ProjectTitle;
- scProject.TCount = project.TCount;
- scProject.IsDiagnosis = project.IsDiagnosis;
- scProject.IsQuota = project.IsQuota;
- scProject.SchoolDiagnosisMinCount = project.SchoolDiagnosisMinCount;
- scProject.SchoolDiagnosisMinDimension = project.SchoolDiagnosisMinDimension;
- scProject.TeacherDiagnosisMinDimension = project.TeacherDiagnosisMinDimension;
- projectsSave.Add(scProject);
- }
- else
- {
- projectsSave.Add(new ScProject
- {
- PartitionKey = "ScProject",
- trainComID = config.trainComID,
- passKey = config.passKey,
- privateKey = config.privateKey,
- RowKey = $"{project.ProjectItemID}",
- config = "scsyxpt",
- ProjectID = project.ProjectID,
- ProjectItemID = project.ProjectItemID,
- ProjectItemTitle = project.ProjectItemTitle,
- ProjectTitle = project.ProjectTitle,
- TCount = project.TCount,
- IsDiagnosis = project.IsDiagnosis,
- IsQuota = project.IsQuota,
- SchoolDiagnosisMinCount = project.SchoolDiagnosisMinCount,
- SchoolDiagnosisMinDimension = project.SchoolDiagnosisMinDimension,
- TeacherDiagnosisMinDimension = project.TeacherDiagnosisMinDimension,
- });
- }
- }
- else
- {
- projectsSave.Add(new ScProject
- {
- PartitionKey = "ScProject",
- trainComID = config.trainComID,
- passKey = config.passKey,
- privateKey = config.privateKey,
- RowKey = $"{project.ProjectItemID}",
- config = "scsyxpt",
- ProjectID = project.ProjectID,
- ProjectItemID = project.ProjectItemID,
- ProjectItemTitle = project.ProjectItemTitle,
- ProjectTitle = project.ProjectTitle,
- TCount = project.TCount,
- IsDiagnosis = project.IsDiagnosis,
- IsQuota = project.IsQuota,
- SchoolDiagnosisMinCount = project.SchoolDiagnosisMinCount,
- SchoolDiagnosisMinDimension = project.SchoolDiagnosisMinDimension,
- TeacherDiagnosisMinDimension = project.TeacherDiagnosisMinDimension,
- });
- }
- }
- }
- await table.SaveOrUpdateAll(projectsSave);
- return Ok(new { projectsSave });
- }
- /// <summary>
- /// 3. 处理 省平台最新的教师以及 反向更新没有绑定醍摩豆id 的账号。
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-unbind-teacher")]
- [AllowAnonymous]
- public async Task<IActionResult> getUnBindTeacher(JsonElement request) {
- if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
- if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
- if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
- if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- var ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
- var unbind = ScTeachers.Where(x => string.IsNullOrWhiteSpace(x.tmdid));
- return Ok(unbind);
- }
- /// <summary>
- /// 4. 同步增加批次的
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-scs-teacher-add")]
- [AllowAnonymous]
- public async Task<IActionResult> getScsTeacherAdd(JsonElement request) {
- if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
- if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
- if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
- if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- var ScTeachers1249 = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "ProjectItemID", 1249 } });
- //数据校验
- var jsondata = ScTeachers1249.Select(x => new { x.schoolCode, x.tmdid, x.PXID, x.TID, x.TeacherName, x.SchoolName, x.SchoolID, x.Account, x.areaId }).ToJsonString();
- //当前区已有的教师
- var ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
- //当前区的学校
- var ScSchools = await table.FindListByDict<ScSchool>(new Dictionary<string, object>() { { "PartitionKey", "ScSchool" }, { "areaId", $"{areaId}" } });
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
- //获取当前期,所有区所有学校的教师
- //(int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetTeachersListByProject");
- (int status, string json) = await ScsStudyApisService.GetTeachersListByProject(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
- //序列化
- List<ScTeacher> teachers = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- // 处理省平台后补的教师,教师的学校不在当前区的学校列表中。
- teachers.RemoveAll(x => !ScSchools.Select(z => z.schoolid).Contains(x.SchoolID));
- string json_teachers = teachers.ToJsonString();
- //拿到当前期的所有且是再当前区内的学校的培训id
- var a = teachers.Select(x => $"{x.PXID}").ToList();
- var s = ScTeachers.Select(z=>z.RowKey).ToList();
- //新增的pxid
- var addPxid = a.Except(s).ToList();
- //原来已经有的pdxid可能需要更新的,如果需要更新,则需要判断两次的TID是否相同,不相同则需要换绑tmdid,则需要把tmdid置空
- var updatePxid = a.Where(x=>s.Contains(x)).ToList();
- if (addPxid.Any())
- {
- List<ScTeacher> newTeachers = new List<ScTeacher>();
- var allScteacher = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- addPxid.ForEach(add =>
- {
- var newTeacher = allScteacher.Find(x => $"{x.PXID}".Equals(add));
- if (newTeacher != null)
- {
- var schoolInfo = ScSchools.Find(x => x.schoolid == newTeacher.SchoolID);
- if (schoolInfo != null)
- {
- newTeacher.status = 1;
- newTeacher.areaId = $"{areaId}";
- newTeacher.PartitionKey = "ScTeacher";
- newTeacher.tmdid = null;
- newTeacher.schoolCode = schoolInfo?.schoolCode;
- newTeacher.RowKey = $"{newTeacher.PXID}";
- newTeachers.Add(newTeacher);
- }
- }
- });
- await table.SaveOrUpdateAll(newTeachers);
- }
- if (updatePxid.Any()) {
- List<ScTeacher> updateTeachers = new List<ScTeacher>();
- var allScteacher = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- updatePxid.ForEach(update => {
- //数据库的教师
- var updateTeacherDB = ScTeachers.Find(x => $"{x.RowKey}".Equals(update));
- //省平台的教师
- var schoolInfo = ScSchools.Find(x => x.schoolid == updateTeacherDB.SchoolID);
- var scTeacher = allScteacher.Find(x => $"{x.PXID}".Equals(update));
- if (updateTeacherDB != null && scTeacher!=null) {
- if (updateTeacherDB.TID == scTeacher.TID)
- {
- //保持tmdid不变
- updateTeacherDB.TID = scTeacher.TID;
- }
- else {
- updateTeacherDB.tmdid = null;
- }
- updateTeacherDB.PXID = scTeacher.PXID;
- updateTeacherDB.TID = scTeacher.TID;
- updateTeacherDB.TeacherName = scTeacher.TeacherName;
- updateTeacherDB.status = 1;
- updateTeacherDB.SchoolID = scTeacher.SchoolID;
- updateTeacherDB.SchoolName = scTeacher.SchoolName;
- updateTeacherDB.ProjectID = scTeacher.ProjectID;
- updateTeacherDB.ProjectItemID = scTeacher.ProjectItemID;
- updateTeacherDB.ProjectItemTitle = scTeacher.ProjectItemTitle;
- updateTeacherDB.ProjectTitle = scTeacher.ProjectTitle;
- updateTeacherDB.CityID = scTeacher.CityID;
- updateTeacherDB.DistrictID = scTeacher.DistrictID;
- updateTeacherDB.CityName = scTeacher.CityName;
- updateTeacherDB.DisName = scTeacher.DisName;
- updateTeacherDB.Account = scTeacher.Account;
- updateTeacherDB.TeacherXK = scTeacher.TeacherXK;
- updateTeacherDB.TeacherXD = scTeacher.TeacherXD;
- updateTeacherDB.Mobile = scTeacher.Mobile;
- updateTeacherDB.Email = scTeacher.Email;
- updateTeacherDB.areaId = $"{areaId}";
- updateTeacherDB.PartitionKey = "ScTeacher";
- updateTeacherDB.schoolCode = schoolInfo?.schoolCode;
- updateTeachers.Add(updateTeacherDB);
- }
-
- });
- await table.SaveOrUpdateAll(updateTeachers);
- }
- return Ok();
- }
- /// <summary>
- /// 3. 处理 省平台最新的教师以及 反向更新没有绑定醍摩豆id 的账号。
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-scs-teacher")]
- [AllowAnonymous]
- public async Task<IActionResult> getScsTeacher(JsonElement request)
- {
- if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
- if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
- if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
- if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
- //数据校验
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- var ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object>() { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
- var ScSchools = await table.FindListByDict<ScSchool>(new Dictionary<string, object>() { { "PartitionKey", "ScSchool" }, { "areaId", $"{areaId}" } });
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
- //(int status, string json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetTeachersListByProject");
- (int status, string json) = await ScsStudyApisService.GetTeachersListByProject(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
- ///
- var teachers = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- // 处理省平台后补的教师,教师的学校不在当前区的学校列表中。
- teachers.RemoveAll(x => !ScSchools.Select(z => z.schoolid).Contains(x.SchoolID));
- string json_teachers = teachers.ToJsonString();
- var a = teachers.Select(x => $"{x.TID}").ToList();
- string json_a=a.ToJsonString();
- var s = ScTeachers.Where(z=>!string.IsNullOrWhiteSpace(z.tmdid)).Select(y => $"{ y.TID}").ToList();
- //未保存在数据库的。
- var asin = a.Except(s).ToList();
- string json_asin = asin.ToJsonString();
- var aa = a.Except(asin);
- //if (aa.Any())
- //{
- // List<ScTeacher> newTeachers = new List<ScTeacher>();
- // var allScteacher = json.ToObject<List<ScTeacher>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- // aa.ToList().ForEach(a =>
- // {
- // var newTeacher = allScteacher.Find(x => $"{x.TID}".Equals(a));
- // if (newTeacher != null)
- // {
- // var schoolInfo = ScSchools.Find(x => x.schoolid == newTeacher.SchoolID);
- // if (schoolInfo != null)
- // {
- // newTeacher.status = 1;
- // newTeacher.areaId = $"{areaId}";
- // newTeacher.PartitionKey = "ScTeacher";
- // newTeacher.tmdid = null;
- // newTeacher.schoolCode = schoolInfo?.schoolCode;
- // newTeacher.RowKey = $"{newTeacher.PXID}";
- // newTeachers.Add(newTeacher);
- // }
- // }
- // });
- // await table.SaveOrUpdateAll(newTeachers);
- //}
- #region 省平台获取到最新的教师,并添加到Table中。
- var adds = teachers.FindAll(x => asin.Contains($"{x.TID}"));
- var addTeachers = ScTeachers.FindAll(x => adds.Select(y => $"{ y.PXID}").Contains($"{x.RowKey}"));
- if (addTeachers.IsNotEmpty())
- {
- //省平台教师替换的。
- addTeachers.ForEach(x =>
- {
- var tt = teachers.Find(z => x.RowKey.Equals($"{z.PXID}"));
- var school = ScSchools.Find(s => s.schoolid == x.SchoolID);
- if (school != null)
- {
- if (tt != null)
- {
- x.status = 1;
- x.TID = tt.TID;
- x.TeacherName = tt.TeacherName;
- x.SchoolID = tt.SchoolID;
- x.SchoolName = tt.SchoolName;
- x.ProjectID = tt.ProjectID;
- x.ProjectItemID = tt.ProjectItemID;
- x.ProjectItemTitle = tt.ProjectItemTitle;
- x.ProjectTitle = tt.ProjectTitle;
- x.CityID = tt.CityID;
- x.DistrictID = tt.DistrictID;
- x.CityName = tt.CityName;
- x.DisName = tt.DisName;
- x.Account = tt.Account;
- x.TeacherXK = tt.TeacherXK;
- x.TeacherXD = tt.TeacherXD;
- x.Mobile = x.Mobile;
- x.Email = tt.Email;
- x.areaId = $"{areaId}";
- x.PartitionKey = "ScTeacher";
- x.tmdid = null;
- x.schoolCode = school?.schoolCode;
- }
- }
- else {
- }
-
- });
- addTeachers = await table.SaveOrUpdateAll(addTeachers);
- }
- else
- {
- //省平台更新的
- foreach (var x in adds)
- {
- x.RowKey = $"{x.PXID}";
- x.status = 1;
- x.areaId = $"{areaId}";
- x.PartitionKey = "ScTeacher";
- var school = ScSchools.Find(s => s.schoolid == x.SchoolID);
- x.schoolCode = school?.schoolCode;
- }
- addTeachers = await table.SaveOrUpdateAll(adds);
- }
- if (ScTeachers.Count == teachers.Count)
- {
- foreach (var x in ScTeachers)
- {
- var tt = teachers.Find(z => x.RowKey.Equals($"{z.PXID}"));
- if (tt != null)
- {
- x.status = 1;
- x.TID = tt.TID;
- x.TeacherName = tt.TeacherName;
- x.SchoolID = tt.SchoolID;
- x.SchoolName = tt.SchoolName;
- x.ProjectID = tt.ProjectID;
- x.ProjectItemID = tt.ProjectItemID;
- x.ProjectItemTitle = tt.ProjectItemTitle;
- x.ProjectTitle = tt.ProjectTitle;
- x.CityID = tt.CityID;
- x.DistrictID = tt.DistrictID;
- x.CityName = tt.CityName;
- x.DisName = tt.DisName;
- x.Account = tt.Account;
- x.TeacherXK = tt.TeacherXK;
- x.TeacherXD = tt.TeacherXD;
- x.Mobile = x.Mobile;
- x.Email = tt.Email;
- x.areaId = $"{areaId}";
- x.PartitionKey = "ScTeacher";
- x.tmdid = null;
- var school = ScSchools.Find(s => s.schoolid == x.SchoolID);
- x.schoolCode = school?.schoolCode;
- }
- }
- addTeachers = await table.SaveOrUpdateAll(ScTeachers);
- }
- #endregion 省平台获取到最新的教师,并添加到Table中。
- //反向去补全四川省平台 Table中没有绑定tmdid的账号
- var unbindtmdid = ScTeachers.FindAll(x => string.IsNullOrEmpty(x.tmdid));
- var tids = unbindtmdid.Select(x => $"{x.TID}").ToHashSet();
- if (tids.Count() > 0)
- {
- List<DbBind> binds = new List<DbBind>();
- string sql = $"SELECT c.id,b.userid,b.data FROM c join b in c.binds where b.userid in ({string.Join(",", tids.Select(x => $"'{x}'"))})";
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<DbBind>
- (queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
- {
- binds.Add(item);
- }
- if (binds.IsNotEmpty())
- {
- List<ScTeacher> update = new();
- binds.ForEach(x =>
- {
- var exs = unbindtmdid.FindAll(z => $"{z.TID}".Equals(x.userid));
- if (exs.IsNotEmpty())
- {
- exs.ForEach(y =>
- {
- y.tmdid = x.id;
- });
- update.AddRange(exs);
- }
- });
- var group = update.GroupBy(x => x.RowKey).Select(z => new { z.Key, list = z.ToList() });
- List<ScTeacher> scTeachers = new();
- group.ToList().ForEach(x =>
- {
- if (x.list.Count() == 1)
- {
- scTeachers.Add(x.list[0]);
- }
- else if (x.list.Count > 1)
- {
- scTeachers.Add(x.list[0]);
- }
- });
- scTeachers = await table.SaveOrUpdateAll(scTeachers);
- }
- }
- //反向更新教师绑定的省平台的SchoolID(int)和schoolCode(string)
- ScTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaId}" } });
- var scSchools = await table.FindListByDict<ScSchool>(new Dictionary<string, object>() { { "PartitionKey", "ScSchool" }, { "areaId", $"{areaId}" } });
- List<ScTeacher> updateTch = new List<ScTeacher>();
- ScTeachers.FindAll(y => string.IsNullOrWhiteSpace(y.schoolCode)).ForEach(x =>
- {
- var scSchool = scSchools.Find(s => s.schoolid == x.SchoolID);
- x.schoolCode = scSchool?.schoolCode;
- updateTch.Add(x);
- });
- if (updateTch.IsNotEmpty())
- {
- // await table.SaveOrUpdateAll(updateTch);
- }
- return Ok(new { addTeachers, update = updateTch.Select(x => new { x.areaId, x.PXID, x.TID, x.TeacherName, x.tmdid, x.SchoolName, x.DisName }), ScTeachers });
- }
- /// <summary>
- ///1. 检查学校是否有同名的
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-sc-school")]
- [AllowAnonymous]
- public async Task<IActionResult> GetScSchool(JsonElement request)
- {
- if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
- if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
- if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
- List<ScSchool> schools = null;
- List<ScSchool> matchSchools = null;
- int status = -1; string json = null;
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
- List<School> ignore = new List<School>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: $"select value(c) from c where c.areaId='{areaId}'",
- requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- ignore.Add(item);
- }
- //(status, json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSchoolList");
- (status, json) = await ScsStudyApisService.GetSchoolList(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
- if (status == 200)
- {
- schools = json.ToObject<List<ScSchool>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- if (ignore.IsNotEmpty())
- {
- matchSchools = schools.FindAll(x => ignore.Select(y => y.name).Contains(x.schoolname));
- if (matchSchools.IsNotEmpty())
- {
- if (matchSchools.Count != ignore.Count)
- {
- var matched = matchSchools.Select(x => x.schoolname);
- var unmatch = ignore.Select(y => y.name).Except(matched);
- List<string> scschoolUnmatch = schools.Select(y => y.schoolname).Except(matched).ToList();
- if (scschoolUnmatch.IsNotEmpty())
- {
- return Ok(new { matched, unmatch, scschoolUnmatch });
- }
- }
- else
- {
- matchSchools.ForEach(x =>
- {
- var exschool = ignore.Find(y => y.name.Equals(x.schoolname));
- if (exschool != null)
- {
- x.schoolCode = exschool.id;
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- }
- });
- }
- }
- else
- {
- return Ok(new { unmatch = ignore, schools = schools.Select(x => new { x.schoolname, x.schoolCode, x.schoolid }) });
- }
- }
- }
- return Ok(new { schools = schools.Select(x => new { x.schoolname, x.schoolCode, x.schoolid }) });
- }
- /// <summary>
- /// 2. 处理 省平台最新的教师以及 反向更新没有绑定醍摩豆id 的账号。
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-project-school")]
- [AllowAnonymous]
- public async Task<IActionResult> GetProjectSchool(JsonElement request)
- {
- if (!request.TryGetProperty("accessConfig", out JsonElement accessConfig)) return BadRequest();
- if (!request.TryGetProperty("city", out JsonElement city)) return BadRequest();
- if (!request.TryGetProperty("dist", out JsonElement dist)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
- if (!request.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
- List<School> ignore = new List<School>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: $"select value(c) from c where c.areaId='{areaId}'",
- requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
- {
- ignore.Add(item);
- }
- Dictionary<string, object> dict = new Dictionary<string, object> { { "accessConfig", $"{accessConfig}" }, { "areaId", $"{areaId}" } };
- int status = -1; string json = null;
- //5.3.1.1获取项目列表
- //(status, json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetProjectInfoByTrainComID");
- //新的方式 5.3.1.1获取项目列表
- (status, json) = await ScsStudyApisService.GetProjectInfoByTrainComID(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
- List<ScProject> projects = null;
- List<ScSchool> saveschools = null;
- List<ScSchool> schools = null;
- List<ScSchool> matchSchools = null;
- List<ScSchool> tbschools = null;
- if (status == 200)
- {
- projects = json.ToObject<List<ScProject>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- }
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- // 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表
- //(status, json) = await _httpTrigger.RequestHttpTrigger(dict, _option.Location, "GetSchoolList");
- (status, json) = await ScsStudyApisService.GetSchoolList(_httpClient.CreateClient(), _dingDing, _azureStorage, $"{areaId}", $"{accessConfig}");
- if (status == 200)
- {
- schools = json.ToObject<List<ScSchool>>(new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
- if (ignore.IsNotEmpty())
- {
- matchSchools = schools.FindAll(x => ignore.Select(y => y.name).Contains(x.schoolname));
- if (matchSchools.IsNotEmpty())
- {
- if (matchSchools.Count != ignore.Count)
- {
- var matched = matchSchools.Select(x => x.schoolname);
- var unmatch = ignore.Select(y => y.name).Except(matched);
- List<string> scschoolUnmatch = schools.Select(y => y.schoolname).Except(matched).ToList();
- if (scschoolUnmatch.IsNotEmpty())
- {
- return Ok(new { matched, unmatch, scschoolUnmatch });
- }
- }
- else
- {
- matchSchools.ForEach(x =>
- {
- var exschool = ignore.Find(y => y.name.Equals(x.schoolname));
- if (exschool != null)
- {
- x.schoolCode = exschool.id;
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- }
- });
- }
- }
- else
- {
- return Ok(new { unmatch = ignore, schools = schools.Select(x => new { x.schoolname, x.schoolCode, x.schoolid }) });
- }
- }
- //数据校验,拉取所有学校的
- tbschools = await table.FindListByDict<ScSchool>(new Dictionary<string, object>() { { "PartitionKey", "ScSchool" }, { "areaId", $"{areaId}" } });
- if (tbschools.IsNotEmpty())
- {
- var a = tbschools.Select(y => $"{y.RowKey}").ToList();
- //不存在的schoolid 才会进行新增操作,如果schoolid已经有。就不再操作
- saveschools = schools.Where(x => !a.Exists(z => z.Equals($"{x.schoolid}"))).ToList();
- List<SchoolData> schoolDatas = new();
- saveschools.ForEach(x =>
- {
- x.RowKey = $"{x.schoolid}";
- x.PartitionKey = "ScSchool";
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- var a = ignore.Find(z => z.name.Equals(x.schoolname));
- if (a != null)
- {
- x.schoolCode = a.id;
- }
- else
- {
- if (string.IsNullOrEmpty(x.schoolCode))
- {
- schoolDatas.Add(new SchoolData { uid = $"{x.schoolid}", province = "四川省", city = $"{city}", name = x.schoolname });
- }
- }
- });
- schoolDatas = await GenerateSchoolCode(schoolDatas, _dingDing, _environment);
- saveschools.ForEach(x =>
- {
- var schoolData = schoolDatas.Find(y => y.uid.Equals($"{x.schoolid}"));
- if (schoolData != null && !string.IsNullOrEmpty(schoolData.id))
- {
- x.schoolCode = schoolData.id;
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- }
- });
- //同时移除没有生成的schoolCode的
- saveschools.RemoveAll(x => string.IsNullOrEmpty(x.schoolCode));
- saveschools.RemoveAll(x => tbschools.FindAll(z => !string.IsNullOrEmpty(z.schoolCode)).Exists(y => y.schoolCode.Equals(x.schoolCode)));
- saveschools = await table.SaveAll(saveschools);
- }
- else
- {
- List<SchoolData> schoolDatas = new List<SchoolData>();
- schools.ForEach(x =>
- {
- x.RowKey = $"{x.schoolid}";
- x.PartitionKey = "ScSchool";
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- var a = ignore.Find(z => z.name.Equals(x.schoolname));
- if (a != null)
- {
- x.schoolCode = a.id;
- }
- else
- {
- if (string.IsNullOrEmpty(x.schoolCode))
- {
- schoolDatas.Add(new SchoolData { uid = $"{x.schoolid}", province = "四川省", city = $"{city}", name = x.schoolname });
- }
- }
- });
- schoolDatas = await SchoolService.GenerateSchoolCode(schoolDatas, _dingDing, _environment);
- schools.ForEach(x =>
- {
- var schoolData = schoolDatas.Find(y => y.uid.Equals($"{x.schoolid}"));
- if (schoolData != null && !string.IsNullOrEmpty(schoolData.id))
- {
- x.schoolCode = schoolData.id;
- x.areaId = $"{areaId}";
- x.city = $"{city}";
- x.dist = $"{dist}";
- }
- });
- schools.RemoveAll(x => string.IsNullOrEmpty(x.schoolCode));
- saveschools = await table.SaveOrUpdateAll(schools);
- }
- }
- List<string> unsave = new List<string>();
- if (saveschools.IsNotEmpty())
- {
- var ex = schools.Select(x => $"{x.schoolid}").Except(saveschools.Select(y => y.RowKey));
- if (ex.Count() > 0)
- {
- unsave.AddRange(ex);
- }
- }
- if (tbschools.IsNotEmpty())
- {
- var ex = schools.Select(x => $"{x.schoolid}").Except(tbschools.Select(y => y.RowKey));
- if (ex.Count() > 0)
- {
- unsave.AddRange(ex);
- }
- }
- var areaschools = await table.FindListByDict<ScSchool>(new Dictionary<string, object>() { { "PartitionKey", $"ScSchool" }, { "areaId", $"{areaId}" } });
- List<School> cosbdschools = new List<School>();
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: $"select value(c) from c where c.areaId='{areaId}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
- {
- cosbdschools.Add(item);
- }
- var tbs = areaschools.FindAll(x => areaschools.Select(z => z.schoolCode).Except(cosbdschools.Select(x => x.id)).Contains(x.schoolCode));
- List<CSchool> cSchools = new List<CSchool>();
- foreach (var sch in tbs)
- {
- cSchools.Add(new CSchool
- {
- id = sch.schoolCode,
- name = sch.schoolname,
- // admin = "1530606136",
- period = new List<string>() { sch.schooltypename },
- size = 1024,
- });
- }
- var client = _azureCosmos.GetCosmosClient();
- List<School> schoolsfailed = new List<School>();
- List<School> schoolsScucess = new List<School>();
- List<string> failedmsg = new List<string>();
- foreach (var sc in cSchools)
- {
- 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,
- semesterCount = 2,
- gradeCount = 1,
- grades=new List<string> { "一年级"},
- subjectCount=1,
- subjects=new List<Subject> { new Subject {name="预设学科" ,id= Guid.NewGuid().ToString()} },
- semesters = new List<Semester>
- {
- new Semester { name = "上学期", start = 1, month = 9, day = 1, id = Guid.NewGuid().ToString() },
- new Semester { name = "下学期", start = 0, month = 3, day = 1, id = Guid.NewGuid().ToString() }
- },
- }) ;
- });
- 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 = $"{city}",
- timeZone = new SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
- type = 1,
- pk = "School",
- ttl = -1,
- schoolCode = sc.id,
- dist = $"{dist}",
- period = periods,
- areaId = $"{areaId}",
- standard = $"{standard}"
- };
- try
- {
- await client.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<School>(school, new PartitionKey(school.code));
- schoolsScucess.Add(school);
- }
- catch (CosmosException ex)
- {
- failedmsg.Add($"{school.ToJsonString()}\n \n{ex.Status}{ex.Message }\n ");
- schoolsfailed.Add(school);
- }
- catch (Exception ex)
- {
- failedmsg.Add($"{school.ToJsonString()}\n{ex.Message }\n ");
- schoolsfailed.Add(school);
- }
- }
- return Ok(new
- {
- projects,
- msg = $"Table中已经有:{tbschools.Count}个学校,省平台获取到:" +
- $"{schools?.Count}个学校,本次保存有:{saveschools?.Count},没有被保存的学校:" +
- $"{unsave?.Count},创建失败的学校有:{schoolsfailed.Count()}," +
- $"创建成功的的学校有:{schoolsScucess.Count()}",
- schoolsfailed,
- failedmsg,
- schoolsScucess,
- tbsch = tbschools.Select(x => new { x.schoolname, x.schoolCode }),
- });
- }
- }
- }
|