123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383 |
-
- using Microsoft.AspNetCore.Mvc;
- 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;
- using TEAMModelOS.SDK.Models;
- using Microsoft.AspNetCore.Http;
- using TEAMModelOS.SDK.Extension;
- using Azure.Cosmos;
- using System.Text;
- using Microsoft.Extensions.Options;
- using Microsoft.Extensions.Configuration;
- using HTEXLib.COMM.Helpers;
- using System.Threading;
- using Microsoft.Azure.Cosmos.Table;
- using DinkToPdf;
- using DinkToPdf.Contracts;
- using System.IO;
- using Microsoft.AspNetCore.Authorization;
- using TEAMModelOS.Filter;
- using System.Net.Http;
- namespace TEAMModelOS.Controllers
- {
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [ApiController]
- [Route("data-push")]
- public class ScDataPushController : ControllerBase
- {
- #region
- public readonly string tdhtml = @"
- <tr>
- <td>{{type}}</td>
- <td>{{teacherName}}</td>
- <td>{{tmdid}}</td>
- <td>{{pxid}}</td>
- <td>{{tid}}</td>
- <td>{{comPassed}}</td>
- <td>{{comPassedTime}}</td>
- </tr>
- ";
- string html = @"
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset=""UTF-8"">
- <meta http-equiv=""X-UA-Compatible"" content=""IE=edge"">
- <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">
- <title>{{projectItemTitle}}推送报告</title>
- <style>
- body {
- font-family: 'fangsong';
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- .tch-table,
- .details-table {
- width: 100%;
- }
- .tch-table table {
- width: 100%;
- margin: 15px 0;
- border: 0;
- }
- .tch-table th {
- background-color: #c5c5c5;
- color: #222222;
- /* width:33%; */
- }
- .tch-table,
- .tch-table th,
- .tch-table td {
- font-size: 0.95em;
- text-align: center;
- padding: 4px;
- border-collapse: collapse;
- font-weight: bolder;
- }
- .tch-table th,
- .tch-table td {
- border-bottom: 1px solid #918b8c;
- border-width: 1px 0 1px 0;
- }
- .tch-table tr {
- border: 1px solid #ffffff;
- height: 3.2em;
- }
- .title {
- font-weight: bold;
- align-self: flex-start;
- margin: 30px 5px;
- }
- .title::before {
- content: '';
- width: 10px;
- height: 10px;
- background: #3a3a3a;
- display: inline-block;
- margin-right: 10px;
- }
- </style>
- </head>
- <body>
- <h1 style=""text-align:center;font-weight: bold;"">{{projectItemTitle}}推送报告</h1>
- <h3 style=""text-align:center;font-weight: bold;"">{{schoolName}}</h3>
- <p class=""title"">推送概况</p>
- <table class=""tch-table"" id=""tchTable"">
- <tr>
- <th style=""width:20%;"">学校名称</th>
- <th style=""width:20%;"">参训人数</th>
- <th style=""width:20%;"">优秀人数</th>
- <th style=""width:20%;"">合格人数</th>
- <th style=""width:20%;"">异常人数</th>
- </tr>
- <tr>
- <td>{{schoolName}}</td>
- <td>{{joinCount}}</td>
- <td>{{yxCount}}</td>
- <td>{{hgCount}}</td>
- <td>{{ycCount}}</td>
- </tr>
- </table>
- <p class=""title"">异常名单</p>
- <table class=""tch-table"" id=""acTable"">
- <tr>
- <th style=""width:10%;"">类型</th>
- <th style=""width:10%;"">姓名</th>
- <th style=""width:10%;"">id</th>
- <th style=""width:10%;"">省平台培训ID</th>
- <th style=""width:10%;"">省平台培训教师ID</th>
- <th style=""width:10%;"">状态</th>
- <th style=""width:20%;"">推送时间</th>
- </tr>
- {{eachData}}
- </table>
- </body>
- </html>
- ";
- #endregion
- private readonly AzureCosmosFactory _azureCosmos;
- private readonly AzureStorageFactory _azureStorage;
- private readonly IConverter _converter;
- public readonly string type = "scsyxpt";
- public readonly IHttpClientFactory _httpClient;
-
- public IConfiguration _configuration { get; set; }
- public ScDataPushController(IHttpClientFactory httpClient,IConverter converter, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, IConfiguration configuration)
- {
- _azureCosmos = azureCosmos;
- _azureStorage = azureStorage;
- _converter = converter;
- _configuration = configuration;
- _httpClient = httpClient;
- }
- [ProducesDefaultResponseType]
- [HttpPost("push-leave")]
- public async Task<IActionResult> PushLeave(JsonElement json) {
- var client = _azureCosmos.GetCosmosClient();
- JsonElement areaIdJson = json.GetProperty("areaId");
- // JsonElement school = json.GetProperty("school");
- Dictionary<string, Dictionary<string, object>> pushDatas = new Dictionary<string, Dictionary<string, object>>();
- List<string> pushTeachers = json.GetProperty("leaveTeacher").ToObject<List<string>>();
- List<string> pushPxids = json.GetProperty("pushPxids").ToObject<List<string>>();
- AreaSetting areaSetting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<AreaSetting>($"{areaIdJson}", new PartitionKey("AreaSetting"));
- ScAccessConfig config = areaSetting.accessConfig.ToObject<ScAccessConfig>();
- Dictionary<string, dynamic> checkDatas = new Dictionary<string, dynamic>();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScTeacher> scTeachers = new List<ScTeacher>();
-
-
- List<string> Codes = new List<string>();
- if (pushTeachers.IsNotEmpty())
- {
- pushTeachers.ForEach(tch => {
- Codes.Add($" tmdid {QueryComparisons.Equal} '{tch}' ");
- });
- }
- if (pushPxids.IsNotEmpty())
- {
- pushPxids.ForEach(pxid => {
- Codes.Add($"RowKey {QueryComparisons.Equal} '{pxid}' ");
- });
- }
- string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacher' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Codes)} ) ";
- var result = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacher>().Where(tbqurey), null);
- scTeachers = result.Results;
- var aaaa =pushTeachers.Except(scTeachers.Select(x => x.tmdid));
- HashSet<TeacherTrain> updatePush = new HashSet<TeacherTrain>();
- //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
- List<TeacherTrain> trains53112OK = new List<TeacherTrain>();
- Dictionary<string, object> parameterContent53112 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53112 = new List<Dictionary<string, object>>();
- parameterContent53112.Add("TrainComID", config.trainComID);
- parameterContent53112.Add("List", list53112);
- foreach (var t in scTeachers) {
- Dictionary<string, object> pushData = new Dictionary<string, object>();
- Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
- parameterMapData.Add("PXID", $"{t.PXID}");
- parameterMapData.Add("TID", $"{t.TID}");
- parameterMapData.Add("TeacherName", $"{t.TeacherName}");
- parameterMapData.Add("CourseHour", $"0");
- parameterMapData.Add("ResearchText","");
- /// <summary>
- ///省上标准 最终结果 0未认定,1合格,2优秀,3不合格,4其他
- ///系统标准 -2 其他 -1 未认定,0不合格,1合格,2优秀
- /// </summary>
- string ComPassed = "3";
- parameterMapData.Add("ComPassed", ComPassed);//0、未认定 1、合格 2、优秀 3、不合格 4、其他
- pushData.Add("success-UpdateTeacherListSituation", parameterMapData);
- list53112.Add(parameterMapData);
- if (!string.IsNullOrWhiteSpace(t.tmdid)) {
- TeacherTrain teacherTrain= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS,Constant.Teacher).ReadItemAsync<TeacherTrain>(t.tmdid,new PartitionKey($"TeacherTrain-{t.schoolCode}"));
- teacherTrain.pushes.Add("53112");
- teacherTrain.pushes.Add("53113");
- teacherTrain.pushes.Add("53117");
- teacherTrain.pushes.Add("53122");
- trains53112OK.Add(teacherTrain);
- }
- }
- ScsResult UpdateTeacherListSituation = null;
- if (list53112.IsNotEmpty())
- {
- UpdateTeacherListSituation = await ThirdApisService.Post(_httpClient,config.url, "UpdateTeacherListSituation", config.passKey, config.privateKey, parameterContent53112);
- UpdateTeacherListSituation.bizcode = "UpdateTeacherListSituation";
- UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写";
- if (UpdateTeacherListSituation.result) {
- foreach (var teacherTrain in trains53112OK)
- {
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(teacherTrain, teacherTrain.id, new PartitionKey(teacherTrain.code));
- }
- }
- }
- return Ok(new { UpdateTeacherListSituation, aaaa });
- }
- [ProducesDefaultResponseType]
- [HttpPost("push-check")]
- public async Task<IActionResult> PushCheck(JsonElement json) {
- var client = _azureCosmos.GetCosmosClient();
- JsonElement areaIdJson = json.GetProperty("areaId");
- // JsonElement school = json.GetProperty("school");
- JsonElement schoolsJson = json.GetProperty("schools");
- Dictionary<string, Dictionary<string, object>> pushDatas = new Dictionary<string, Dictionary<string, object>>();
- List<string> pushTeachers = json.GetProperty("pushTeachers").ToObject<List<string>>();
-
- AreaSetting areaSetting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<AreaSetting>($"{areaIdJson}", new PartitionKey("AreaSetting"));
- ScAccessConfig config = areaSetting.accessConfig.ToObject<ScAccessConfig>();
- Dictionary<string, dynamic> checkDatas = new Dictionary<string, dynamic>();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScTeacher> scTeachers = new List<ScTeacher>();
- List<ScTeacherDiagnosis> scTeacherDiagnoses = new List<ScTeacherDiagnosis>();
- if (pushTeachers.IsNotEmpty())
- {
- List<string> Codes = new List<string>();
- pushTeachers.ForEach(tch => {
- Codes.Add($" tmdid {QueryComparisons.Equal} '{tch}' ");
- });
- string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacher' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Codes)} ) ";
- var result = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacher>().Where(tbqurey), null);
- scTeachers = result.Results;
- List<string> Pxids = new List<string>();
- scTeachers.ForEach(tch => {
- Pxids.Add($" RowKey {QueryComparisons.Equal} '{tch.PXID}' ");
- });
- string ditbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacherDiagnosis' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Pxids)} ) ";
- var diresult = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacherDiagnosis>().Where(ditbqurey), null);
- scTeacherDiagnoses = diresult.Results;
- }
- else
- {
- scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaIdJson}" } });
- scTeacherDiagnoses = await table.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" }, { "areaId", $"{areaIdJson}" } });
- }
- var teammodelossas = _azureStorage.GetBlobContainerSAS99Year("teammodelos", Azure.Storage.Sas.BlobContainerSasPermissions.Read);
- List<PushFail> failse = new List<PushFail>();
- List<string> schools = schoolsJson.ToObject<List<string>>();
- foreach (var school 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-{school}") }))
- {
- yxtrain.Add(item);
- }
- List<TeacherTrain> trains = new List<TeacherTrain>();
- var members = yxtrain.SelectMany(x => x.members).ToList();
- //指定推送一部分的教师
- if (pushTeachers.IsNotEmpty())
- {
- members = members.FindAll(x => pushTeachers.Contains(x.id));
- }
- if (members.IsNotEmpty())
- {
- queryText = new StringBuilder($"SELECT distinct value(c) FROM c where 1=1 " +
- $"and c.id in ({string.Join(",", members.Select(x => $"'{x.id}'"))}) ");
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherTrain>(queryText: queryText.ToString(),
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"TeacherTrain-{school}") }))
- {
- trains.Add(item);
- }
- }
- int pages = (trains.Count + 99) / 100; //pages = (total + max -1) / max;
- var schoolsas = _azureStorage.GetBlobContainerSAS99Year($"{school}", Azure.Storage.Sas.BlobContainerSasPermissions.Read);
- HashSet<TeacherTrain> updatePush = new HashSet<TeacherTrain>();
- for (int i = 0; i < pages; i++)
- {
- List<TeacherTrain> lists = trains.Skip((i) * 50).Take(50).ToList();
- //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
- List<TeacherTrain> trains53112OK = new List<TeacherTrain>();
- Dictionary<string, object> parameterContent53112 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53112 = new List<Dictionary<string, object>>();
- parameterContent53112.Add("TrainComID", config.trainComID);
- parameterContent53112.Add("List", list53112);
- //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis 300条限制
- List<TeacherTrain> trains53113OK = new List<TeacherTrain>();
- Dictionary<string, object> parameterContent53113 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53113 = new List<Dictionary<string, object>>();
- parameterContent53113.Add("TrainComID", config.trainComID);
- parameterContent53113.Add("List", list53113);
- //5.3.1.17学员课堂实录批量回写-UploadKTSLList 300条限制
- List<TeacherTrain> trains53117OK = new List<TeacherTrain>();
- Dictionary<string, object> parameterContent53117 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53117 = new List<Dictionary<string, object>>();
- parameterContent53117.Add("TrainComID", config.trainComID);
- parameterContent53117.Add("List", list53117);
- //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2 100条限制
- List<TeacherTrain> trains53122OK = new List<TeacherTrain>();
- Dictionary<string, object> parameterContent53122 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53122 = new List<Dictionary<string, object>>();
- parameterContent53122.Add("TrainComID", config.trainComID);
- parameterContent53122.Add("List", list53122);
- //装载数据
- List<Task> tasks = new List<Task>();
- lists.ForEach(x =>
- {
- tasks.Add(CheckTeacher(x, scTeachers, scTeacherDiagnoses, $"{school}", schoolsas, list53112, list53113, list53117, list53122, teammodelossas, pushDatas, failse, updatePush));
- });
- await Task.WhenAll(tasks);
- //推送数据
- }
- pushDatas.Keys.ToList().ForEach(x => {
- if (pushDatas[x].Keys.Any())
- {
- Dictionary<string, dynamic> dict = new Dictionary<string, dynamic>();
- dict.Add($"tmdid", x);
- List<string> types = new List<string>();
- pushDatas[x].Keys.ToList().ForEach(y => {
- if (y.Contains("fail-"))
- {
- types.Add(y);
- }
- });
- dict.Add($"msg", pushDatas[x][pushDatas[x].Keys.First()]);
- dict.Add($"types", types);
- if (types.Any())
- {
- checkDatas[x] = dict;
- }
- }
- });
- }
- List<PushFail> fails = new List<PushFail>();
- failse.ForEach(x =>
- {
- if (x != null && !string.IsNullOrWhiteSpace(x.tmdid)) {
- var f = fails.FindAll(y => y.tmdid.Equals(x.tmdid));
- if (f.IsNotEmpty())
- {
- f.ForEach(ff => {
- ff.type = $"{ff.type},{x.type}";
- });
- }
- else
- {
- x.msgs.ForEach(msg =>
- {
- fails.Add(new PushFail { tmdid = x.tmdid, name = x.name, school = x.school, schoolname = x.schoolname, code = msg.code, msg = msg.value, type = x.type });
- });
- }
- }
- });
- return Ok(new { data = new { fails } });
- }
- [ProducesDefaultResponseType]
- [HttpPost("push-self")]
- [Authorize(Roles = "IES")]
- [AuthToken(Roles = "teacher,admin,student", Permissions = "knowledge-read,knowledge-upd")]
- public async Task<IActionResult> PushSelf(JsonElement json) {
- var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
- List<string> schools =new List<string> { school};
- List<string> pushTeachers = new List<string> { userid};
- School schoolData =await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
- (List<ScsResult> results, List<PushFail> fails, List<Dictionary<string, object>> dicts) = await PushData(schoolData.areaId, schools, pushTeachers);
- (List<dynamic> ycd, List<dynamic> okd, List<TeacherSc> teachers, List<PushData> datas) = await CheckScPush(pushTeachers, schoolData.areaId, schools);
- return Ok(new { results, fails, dicts, ycd, okd, teachers, datas });
- }
- [ProducesDefaultResponseType]
- [HttpPost("push")]
- public async Task<IActionResult> Push(JsonElement json) {
-
-
- string areaIdJson = $"{json.GetProperty("areaId")}";
- List<string> schools = json.GetProperty("schools").ToObject<List<string>>();
- List<string> pushTeachers = json.GetProperty("pushTeachers").ToObject<List<string>>();
- (List<ScsResult> results, List<PushFail> fails, List<Dictionary<string, object>> dicts)= await PushData(areaIdJson, schools, pushTeachers);
- return Ok(new { data = new { results, fails, dicts } });
- }
- private async Task<(List<ScsResult> results, List<PushFail> fails, List<Dictionary<string, object>> dicts)> PushData(string areaIdJson, List<string> schools, List<string> pushTeachers) {
- var client = _azureCosmos.GetCosmosClient();
- Dictionary<string, Dictionary<string, object>> pushDatas = new Dictionary<string, Dictionary<string, object>>();
- List<Dictionary<string, object>> dicts = new List<Dictionary<string, object>>();
- List<ScsResult> results = new List<ScsResult>();
- AreaSetting areaSetting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<AreaSetting>($"{areaIdJson}", new PartitionKey("AreaSetting"));
- ScAccessConfig config = areaSetting.accessConfig.ToObject<ScAccessConfig>();
- Dictionary<string, dynamic> checkDatas = new Dictionary<string, dynamic>();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScTeacher> scTeachers = new List<ScTeacher>();
- List<ScTeacherDiagnosis> scTeacherDiagnoses = new List<ScTeacherDiagnosis>();
- if (pushTeachers.IsNotEmpty())
- {
- List<string> Codes = new List<string>();
- pushTeachers.ForEach(tch => {
- Codes.Add($" tmdid {QueryComparisons.Equal} '{tch}' ");
- });
- StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.pk='TeacherTrain' and c.id in ({string.Join(",", pushTeachers.Select(z => $"'{z}'"))})");
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<TeacherTrain>(queryText: queryText.ToString(),
- requestOptions: new QueryRequestOptions() { }))
- {
- item.pushes = new HashSet<string>();
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
- }
- string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacher' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Codes)} ) ";
- var result = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacher>().Where(tbqurey), null);
- scTeachers = result.Results;
- List<string> Pxids = new List<string>();
- scTeachers.ForEach(tch => {
- Pxids.Add($" RowKey {QueryComparisons.Equal} '{tch.PXID}' ");
- });
- string ditbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacherDiagnosis' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Pxids)} ) ";
- var diresult = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacherDiagnosis>().Where(ditbqurey), null);
- scTeacherDiagnoses = diresult.Results;
- }
- else
- {
- scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaIdJson}" } });
- scTeacherDiagnoses = await table.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" }, { "areaId", $"{areaIdJson}" } });
- }
- var teammodelossas = _azureStorage.GetBlobContainerSAS99Year("teammodelos", Azure.Storage.Sas.BlobContainerSasPermissions.Read);
- List<PushFail> failse = new List<PushFail>();
- foreach (var school 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-{school}") }))
- {
- yxtrain.Add(item);
- }
- List<TeacherTrain> trains = new List<TeacherTrain>();
- var members = yxtrain.SelectMany(x => x.members).ToList();
- //指定推送一部分的教师
- if (pushTeachers.IsNotEmpty())
- {
- members = members.FindAll(x => pushTeachers.Contains(x.id));
- }
- if (members.IsNotEmpty())
- {
- queryText = new StringBuilder($"SELECT distinct value(c) FROM c where 1=1 " +
- $"and c.id in ({string.Join(",", members.Select(x => $"'{x.id}'"))}) ");
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<TeacherTrain>(queryText: queryText.ToString(),
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"TeacherTrain-{school}") }))
- {
- trains.Add(item);
- }
- }
- int pages = (trains.Count + 49) / 50; //pages = (total + max -1) / max;
- var schoolsas = _azureStorage.GetBlobContainerSAS99Year($"{school}", Azure.Storage.Sas.BlobContainerSasPermissions.Read);
- HashSet<TeacherTrain> updatePush = new HashSet<TeacherTrain>();
- for (int i = 0; i < pages; i++)
- {
- List<TeacherTrain> lists = trains.Skip((i) * 50).Take(50).ToList();
- //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
- List<TeacherTrain> trains53112OK = new List<TeacherTrain>();
- ScsResult UpdateTeacherListSituation = null;
- Dictionary<string, object> parameterContent53112 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53112 = new List<Dictionary<string, object>>();
- parameterContent53112.Add("TrainComID", config.trainComID);
- parameterContent53112.Add("List", list53112);
- //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis 300条限制
- List<TeacherTrain> trains53113OK = new List<TeacherTrain>();
- ScsResult UpdateTeacherListDiagnosis = null;
- Dictionary<string, object> parameterContent53113 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53113 = new List<Dictionary<string, object>>();
- parameterContent53113.Add("TrainComID", config.trainComID);
- parameterContent53113.Add("List", list53113);
- //5.3.1.17学员课堂实录批量回写-UploadKTSLList 300条限制
- List<TeacherTrain> trains53117OK = new List<TeacherTrain>();
- ScsResult UploadKTSLList = null;
- Dictionary<string, object> parameterContent53117 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53117 = new List<Dictionary<string, object>>();
- parameterContent53117.Add("TrainComID", config.trainComID);
- parameterContent53117.Add("List", list53117);
- //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2 100条限制
- List<TeacherTrain> trains53122OK = new List<TeacherTrain>();
- ScsResult UploadSBTARPDFListV2 = null;
- Dictionary<string, object> parameterContent53122 = new Dictionary<string, object>();
- List<Dictionary<string, object>> list53122 = new List<Dictionary<string, object>>();
- parameterContent53122.Add("TrainComID", config.trainComID);
- parameterContent53122.Add("List", list53122);
- //装载数据
- List<Task> tasks = new List<Task>();
- lists.ForEach(x =>
- {
- tasks.Add(CheckTeacher(x, scTeachers, scTeacherDiagnoses, $"{school}", schoolsas, list53112, list53113, list53117, list53122, teammodelossas, pushDatas, failse, updatePush));
- });
- await Task.WhenAll(tasks);
- //推送数据
- if (list53112.IsNotEmpty())
- {
- //Thread.Sleep(10 * 1000);
- dicts.Add(parameterContent53112);
- UpdateTeacherListSituation = await ThirdApisService.Post(_httpClient,config.url, "UpdateTeacherListSituation", config.passKey, config.privateKey, parameterContent53112);
- UpdateTeacherListSituation.bizcode = "UpdateTeacherListSituation";
- UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写";
- results.Add(UpdateTeacherListSituation);
- }
- if (list53113.IsNotEmpty())
- {
- //Thread.Sleep(10 * 1000);
- dicts.Add(parameterContent53113);
- UpdateTeacherListDiagnosis = await ThirdApisService.Post(_httpClient,config.url, "UpdateTeacherListDiagnosis", config.passKey, config.privateKey, parameterContent53113);
- UpdateTeacherListDiagnosis.bizcode = "UpdateTeacherListDiagnosis";
- UpdateTeacherListDiagnosis.title = "5.3.1.13学员能力点测评结果批量回写";
- results.Add(UpdateTeacherListDiagnosis);
- }
- if (list53117.IsNotEmpty())
- {
- //Thread.Sleep(10 * 1000 );
- dicts.Add(parameterContent53117);
- UploadKTSLList = await ThirdApisService.Post(_httpClient,config.url, "UploadKTSLList", config.passKey, config.privateKey, parameterContent53117);
- UploadKTSLList.bizcode = "UploadKTSLList";
- UploadKTSLList.title = "5.3.1.17学员课堂实录批量回写";
- results.Add(UploadKTSLList);
- }
- if (list53122.IsNotEmpty())
- {
- //Thread.Sleep(10 * 1000 );
- dicts.Add(parameterContent53122);
- UploadSBTARPDFListV2 = await ThirdApisService.Post(_httpClient,config.url, "UploadSBTARPDFListV2", config.passKey, config.privateKey, parameterContent53122);
- UploadSBTARPDFListV2.bizcode = "UploadSBTARPDFListV2";
- UploadSBTARPDFListV2.title = "5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写";
- results.Add(UploadSBTARPDFListV2);
- }
- }
- List<Task<ItemResponse<TeacherTrain>>> tas = new List<Task<ItemResponse<TeacherTrain>>>();
- updatePush.ToList().ForEach(x =>
- {
- tas.Add(client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReplaceItemAsync(x, x.id, new PartitionKey(x.code)));
- });
- await Task.WhenAll(tas);
- pushDatas.Keys.ToList().ForEach(x => {
- if (pushDatas[x].Keys.Any())
- {
- Dictionary<string, dynamic> dict = new Dictionary<string, dynamic>();
- dict.Add($"tmdid", x);
- List<string> types = new List<string>();
- pushDatas[x].Keys.ToList().ForEach(y => {
- if (y.Contains("fail-"))
- {
- types.Add(y);
- }
- });
- dict.Add($"msg", pushDatas[x][pushDatas[x].Keys.First()]);
- dict.Add($"types", types);
- if (types.Any())
- {
- checkDatas[x] = dict;
- }
- }
- });
- }
- List<PushFail> fails = new List<PushFail>();
- failse.ForEach(x =>
- {
- var f = fails.FindAll(y => y.tmdid.Equals(x.tmdid));
- if (f.IsNotEmpty())
- {
- f.ForEach(ff => {
- ff.type = $"{ff.type},{x.type}";
- });
- }
- else
- {
- x.msgs.ForEach(msg =>
- {
- fails.Add(new PushFail { tmdid = x.tmdid, name = x.name, school = x.school, schoolname = x.schoolname, code = msg.code, msg = msg.value, type = x.type });
- });
- }
- });
- return (results, fails, dicts);
- }
-
- private async Task CheckTeacher(TeacherTrain x, List<ScTeacher> scTeachers, List<ScTeacherDiagnosis> scTeacherDiagnoses, string school,(string uri ,string sas) schoolsas,
- List<Dictionary<string, object>> list53112, List<Dictionary<string, object>> list53113, List<Dictionary<string, object>> list53117, List<Dictionary<string, object>> list53122,
- (string uri, string sas ) teammodelossas, Dictionary<string, Dictionary<string, object>> pushDatas, List<PushFail> failse, HashSet<TeacherTrain> updatePush
- )
- {
- List<CodeValue> msgs = new List<CodeValue>();
- List<ScTeacher> teacher = scTeachers.FindAll(t => !string.IsNullOrWhiteSpace(t.tmdid) && t.tmdid.Equals(x.id));
- foreach (var t in teacher)
- {
- List<PushFail> fails = new List<PushFail>();
- Dictionary<string, object> pushData = new Dictionary<string, object>();
- string jsonTech = scTeacherDiagnoses.ToJsonString();
- ScTeacherDiagnosis diagnosis = scTeacherDiagnoses.Find(x => x.RowKey.Equals($"{t.PXID}"));
- ///检查是否全部已经上传
- bool pushAll = true;
- int t53112OK = 1, t53113OK=1, t53117OK=1 , t53122OK=1 ;
- List<CodeValue> msgs53112 = null;
- List<CodeValue> msgs53113 = null;
- List<CodeValue> msgs53117 = null;
- List<CodeValue> msgs53122 = null;
- List<OfflineRecord> allRightOfflineRecords = new List<OfflineRecord>();
- List<AbilitySub> allRightAbility = new List<AbilitySub>();
- List<AbilitySub> abilitySubs = new List<AbilitySub>();
-
-
-
- if (!x.pushes.Contains("53112")) {
- pushAll = false;
- (t53112OK, msgs53112) = ThirdService.check53112(x, msgs);
- }
- if (!x.pushes.Contains("53113")) {
- pushAll = false;
- (t53113OK, msgs53113, abilitySubs, allRightAbility) = await ThirdService.check53113(_azureCosmos, x, diagnosis, msgs, $"{school}", schoolsas.uri, schoolsas.sas, _azureStorage);
- }
- if (!x.pushes.Contains("53117"))
- {
- pushAll = false;
- (t53117OK, msgs53117) = await ThirdService.check53117(x, msgs, $"{school}", schoolsas.uri, schoolsas.sas, _azureStorage);
- }
- if (!x.pushes.Contains("53122"))
- {
- pushAll = false;
- (t53122OK, msgs53122, allRightOfflineRecords) = await ThirdService.check53122(x, msgs, $"{school}", schoolsas.uri, schoolsas.sas, _azureStorage);
- }
- if (pushAll== false && t53112OK == 1 && t53113OK == 1 && t53117OK == 1 && t53122OK == 1)
- {
- //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
- if (t53112OK == 1)
- {
- Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
- parameterMapData.Add("PXID", $"{t.PXID}");
- parameterMapData.Add("TID", $"{t.TID}");
- parameterMapData.Add("TeacherName", $"{t.TeacherName}");
- parameterMapData.Add("CourseHour", $"{x.totalTime}");
- parameterMapData.Add("ResearchText", $"{x.summary}");
- /// <summary>
- ///省上标准 最终结果 0未认定,1合格,2优秀,3不合格,4其他
- ///系统标准 -2 其他 -1 未认定,0不合格,1合格,2优秀
- /// </summary>
- string ComPassed = "0";
- switch (x.finalScore)
- {
- case -2:
- ComPassed = "4";
- break;
- case -1:
- ComPassed = "0";
- break;
- case 0:
- ComPassed = "3";
- break;
- case 1:
- ComPassed = "1";
- break;
- case 2:
- ComPassed = "2";
- break;
- default:
- ComPassed = "4";
- break;
- }
- parameterMapData.Add("ComPassed", ComPassed);//0、未认定 1、合格 2、优秀 3、不合格 4、其他
- pushData.Add("success-UpdateTeacherListSituation", parameterMapData);
- x.pushes.Add("53112");
- updatePush.Add(x);
- list53112.Add(parameterMapData);
- }
- //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis
- if (t53113OK == 1)
- {
- List<Dictionary<string, object>> parameterMapDatas = new List<Dictionary<string, object>>();
- var uploadedAbility = abilitySubs.FindAll(ab => ab.uploads.Count > 0);
- x.currency.teacherAilities.ForEach(a =>
- {
- Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
- parameterMapData.Add("PXID", $"{t.PXID}");
- parameterMapData.Add("TID", $"{t.TID}");
- parameterMapData.Add("DiagnosisNum", $"{a.no}");
- List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
- parameterMapData.Add("pfiles", pfiles);
- AbilitySub allRight = allRightAbility.Find(sub => sub.id.Equals(a.id));
- if (allRight != null)
- {
- allRight.uploads.ForEach(upload =>
- {
- upload.urls.ForEach(url =>
- {
- Dictionary<string, object> pfileMap = new Dictionary<string, object>();
- string fileext = url.url.Substring(url.url.LastIndexOf(".") > 0 ? url.url.LastIndexOf(".") + 1 : 0);
- pfileMap.Add("url", $"{url.url}?{schoolsas.sas}");
- pfileMap.Add("fileName", url.name.Length > 95 ? $"{url.name.Substring(0, 95)}.{fileext}" : url.name);
- pfileMap.Add("fileSize", $"{url.size}");
- pfileMap.Add("md5", url.hash);
- pfileMap.Add("fileType", fileext);
- pfiles.Add(pfileMap);
- });
- });
- }
- //0"未认定", 1"合格", 2"优秀", 3"不合格"
- //系统 -1 未认定,0 不合格,1 合格,2 优秀
- string zpscore = "0";
- switch (a.zpscore)
- {
- case -1:
- zpscore = "0";
- break;
- case 0:
- zpscore = "3";
- break;
- case 1:
- zpscore = "1";
- break;
- case 2:
- zpscore = "2";
- break;
- default:
- zpscore = "4";
- break;
- }
- string hpscore = "0";
- switch (a.hpscore)
- {
- case -1:
- //如果互评未认定,则优先以校评为准。
- hpscore = "0";
- if (a.xzscore == 1)
- {
- hpscore = "1";
- }
- else if (a.xzscore == 2)
- {
- hpscore = "2";
- }
- //如果互评未认定,且没有校评,则以自评为准
- if (a.zpscore == 1)
- {
- hpscore = "1";
- break;
- }
- else if (a.zpscore == 2)
- {
- hpscore = "2";
- break;
- }
- //如果都没有,则未认定
- break;
- case 0:
- hpscore = "3";
- break;
- case 1:
- hpscore = "1";
- break;
- case 2:
- hpscore = "2";
- break;
- default:
- hpscore = "4";
- break;
- }
- string xzpresult = "0";
- switch (a.xzscore)
- {
- case -1:
- //如果校评未认定,则优先以互评为准。
- xzpresult = "0";
- if (a.hpscore == 1)
- {
- xzpresult = "1";
- break;
- }
- else if (a.hpscore == 2)
- {
- xzpresult = "2";
- break;
- }
- //如果校评未认定,且没有互评,则以自评为准
- if (a.zpscore == 1)
- {
- xzpresult = "1";
- break;
- }
- else if (a.zpscore == 2)
- {
- xzpresult = "2";
- break;
- }
- //如果都没有,则未认定
- break;
- case 0:
- xzpresult = "3";
- break;
- case 1:
- xzpresult = "1";
- break;
- case 2:
- xzpresult = "2";
- break;
- default:
- xzpresult = "4";
- break;
- }
- ///上传了三个,且当前没有上传的能力点,标记为为学习状态。
- if (uploadedAbility.Count >= 3)
- {
- if (pfiles.Count == 0)
- {
- zpscore = "4";
- hpscore = "4";
- xzpresult = "4";
- }
- }
- parameterMapData.Add("zpresult", zpscore);
- parameterMapData.Add("hpresult", hpscore);
- parameterMapData.Add("xzpresult", xzpresult);
- list53113.Add(parameterMapData);
- parameterMapDatas.Add(parameterMapData);
- });
- x.pushes.Add("53113");
- updatePush.Add(x);
- pushData.Add("success-UpdateTeacherListDiagnosis", parameterMapDatas);
- }
- //5.3.1.17学员课堂实录批量回写-UploadKTSLList
- if (t53117OK == 1)
- {
- List<Dictionary<string, object>> parameterMapDatas = new List<Dictionary<string, object>>();
- x.teacherClasses.ForEach(clss =>
- {
- Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
- string fileext = clss.url.Substring(clss.url.LastIndexOf(".") > 0 ? clss.url.LastIndexOf(".") + 1 : 0);
- parameterMapData.Add("PXID", $"{t.PXID}");
- parameterMapData.Add("TID", $"{t.TID}");
- parameterMapData.Add("url", $"{clss.url}?{schoolsas.sas}");//添加访问授权
- parameterMapData.Add("url2", $"{clss.url}?{schoolsas.sas}");
- parameterMapData.Add("fileName", clss.name.Length > 95 ? $"{clss.name.Substring(0, 95)}.{fileext}" : clss.name);
- parameterMapData.Add("fileSize", $"{clss.size}");
- parameterMapData.Add("md5", clss.hash);
- parameterMapData.Add("fileType", fileext);
- list53117.Add(parameterMapData);
- parameterMapDatas.Add(parameterMapData);
- });
- x.pushes.Add("53117");
- updatePush.Add(x);
- pushData.Add("success-UploadKTSLList", parameterMapDatas);
- }
- //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2
- if (t53122OK == 1)
- {
- Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
- parameterMapData.Add("PXID", $"{t.PXID}");
- parameterMapData.Add("TID", $"{t.TID}");
- List<Dictionary<string, object>> files = new List<Dictionary<string, object>>();
- allRightOfflineRecords.ForEach(record =>
- {
- if (!string.IsNullOrWhiteSpace(record.url))
- {
- Dictionary<string, object> fileMap = new Dictionary<string, object>();
- string fileext = record.url.Substring(record.url.LastIndexOf(".") > 0 ? record.url.LastIndexOf(".") + 1 : 0);
- fileMap.Add("url", $"{record.url}?{schoolsas.sas}");
- fileMap.Add("fileName", record.name.Length > 95 ? $"{record.name.Substring(0, 95)}.{fileext}" : record.name);
- fileMap.Add("fileSize", $"{record.size}");
- fileMap.Add("md5", record.hash);
- fileMap.Add("fileType", fileext);
- files.Add(fileMap);
- }
- });
- if (x.offlineReport != null)
- {
- Dictionary<string, object> fileMap = new Dictionary<string, object>();
- fileMap.Add("url", $"{x.offlineReport.blob}?{teammodelossas.sas}");
- fileMap.Add("fileName", x.offlineReport.name);
- fileMap.Add("fileSize", $"{x.offlineReport.size}");
- fileMap.Add("md5", x.offlineReport.hash);
- string fileext = x.offlineReport.extension;
- fileMap.Add("fileType", fileext);
- files.Add(fileMap);
- }
- parameterMapData.Add("files", files);
- list53122.Add(parameterMapData);
- x.pushes.Add("53122");
- updatePush.Add(x);
- pushData.Add("success-UploadSBTARPDFListV2", parameterMapData);
- }
- if (!pushAll)
- {
- if (pushData.Any()) {
- pushDatas.Add(t.tmdid, pushData);
- }
- }
- }
- else {
- if (t53112OK != 1) {
- pushData.Add("fail-UpdateTeacherListSituation", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53112, school = t.schoolCode, schoolname = t.SchoolName });
- fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53112 ,school= t.schoolCode,schoolname=t.SchoolName,type= "fail-UpdateTeacherListSituation" });
- }
- if (t53113OK != 1)
- {
- pushData.Add("fail-UpdateTeacherListDiagnosis", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53113, school = t.schoolCode, schoolname = t.SchoolName });
- fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53113, school = t.schoolCode, schoolname = t.SchoolName,type= "fail-UpdateTeacherListDiagnosis" });
- }
- if (t53117OK != 1) {
- pushData.Add("fail-UploadKTSLList", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53117, school = t.schoolCode, schoolname = t.SchoolName });
- fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53117, school = t.schoolCode, schoolname = t.SchoolName,type= "fail-UploadKTSLList" });
- }
- if (t53122OK != 1) {
- pushData.Add("fail-UploadSBTARPDFListV2", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53122, school = t.schoolCode, schoolname = t.SchoolName });
- fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53122, school = t.schoolCode, schoolname = t.SchoolName,type= "fail-UploadSBTARPDFListV2" });
- }
- if (pushData.Any())
- {
- pushDatas.Add(t.tmdid,pushData);
- failse.AddRange(fails);
- }
- }
- }
- }
- [ProducesDefaultResponseType]
- [HttpPost("fix-sc-teacher")]
- public async Task<IActionResult> FixScTeacher(JsonElement json) {
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- JsonElement areaIdJson = json.GetProperty("areaId");
- List<ScTeacher> scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaIdJson}" } });
- List<ScTeacherDiagnosis> scTeacherDiagnoses = await table.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" }, { "areaId", $"{areaIdJson}" } });
- var tmdids = scTeachers.Where(x=>!string.IsNullOrWhiteSpace(x.tmdid)).Select(x=>x.tmdid);
- string sql = $"select value c from c where c.id in ({string.Join(",", tmdids.Select(x=>$"'{x}'"))})";
- List<Teacher> teachers = new List<Teacher>();
-
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<Teacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
- teachers.Add(item);
- }
- HashSet<ScTeacher> update = new HashSet<ScTeacher>();
- HashSet<ScTeacherDiagnosis> update_scTeacherDiagnoses = new HashSet<ScTeacherDiagnosis>();
- scTeachers.ForEach(x =>
- {
- if (!string.IsNullOrWhiteSpace(x.tmdid)) {
- var tech= teachers.Find(t => t.id.Equals(x.tmdid));
- if (tech != null && tech.schools.Any()) {
- var a = tech.schools.First();
- if (!x.schoolCode.Equals(a.schoolId)) {
- x.schoolCode = a.schoolId;
- update.Add(x);
- var dis = scTeacherDiagnoses.Find(t => t.RowKey.Equals(x.RowKey));
- dis.schoolCode = a.schoolId;
- update_scTeacherDiagnoses.Add(dis);
- }
- if (!x.SchoolName.Equals(a.name))
- {
- x.SchoolName = a.name;
- update.Add(x);
- }
- }
- }
- });
- if (update.Any()) {
- await table.UpdateAll(update.ToList());
- }
- if (update_scTeacherDiagnoses.Any())
- {
- await table.UpdateAll(update_scTeacherDiagnoses.ToList());
- }
- return Ok();
- }
- private async Task<List<PushData> > GetYxData(ScAccessConfig config , ScTeacher sc) {
- List<PushData> datas = new List<PushData>();
- Dictionary<string, object> parameterContent53123 = new Dictionary<string, object>();
- parameterContent53123.Add("TrainComID", config.trainComID);
- parameterContent53123.Add("ProjectID", config.p.Where(x=>x.status==1).First().pd);
- parameterContent53123.Add("ProjectItemID", config.p.Where(x => x.status == 1).First().pid);
- parameterContent53123.Add("PXID", $"{sc.PXID}");
- parameterContent53123.Add("TID", $"{sc.TID}");
- ScsResult GetDiagnosisResultByPXIDCommand = await ThirdApisService.Post(_httpClient,config.url, "GetDiagnosisResultByPXIDCommand", config.passKey, config.privateKey, parameterContent53123);
- if (GetDiagnosisResultByPXIDCommand.result)
- {
- PushData pushData = GetDiagnosisResultByPXIDCommand.content.ToObject<PushData>();
- PushData newPushData = new PushData();
- newPushData.teacherInfo = new TeacherSc(sc);
- newPushData.teacherInfo.PXXK = pushData.teacherInfo.PXXK;
- newPushData.teacherInfo.PXXD = pushData.teacherInfo.PXXD;
- newPushData.teacherInfo.ComPassed = pushData.teacherInfo.ComPassed;
- newPushData.teacherInfo.ComPassedTime = pushData.teacherInfo.ComPassedTime;
- newPushData.diagnosisInfo = pushData.diagnosisInfo;
- newPushData.files = pushData.files;
- datas.Add(newPushData);
- }
- else {
- PushData newPushData = new PushData();
- newPushData.teacherInfo = new TeacherSc(sc);
- datas.Add(newPushData);
- }
- return datas;
- }
- /// <summary>
- /// 获取四川省已经上传的。
- /// </summary>
- /// <param name="json"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-sc-teacher-push")]
- public async Task<IActionResult> ScCheck(JsonElement json)
- {
- List<string> pushTeachers = json.GetProperty("pushTeachers").ToObject<List<string>>();
- string areaIdJson = $"{json.GetProperty("areaId")}";
- List<string> schools = json.GetProperty("schools").ToObject<List<string>>();
- var client = _azureCosmos.GetCosmosClient();
- (List<dynamic> ycd, List<dynamic> okd, List<TeacherSc> teachers,List<PushData> datas)= await CheckScPush(pushTeachers, areaIdJson, schools);
- return Ok(new { ycData = ycd, okData = okd , tmdid= teachers .Select(x=>x.tmdid), datas = datas });
- }
- private async Task<(List<dynamic> ycd ,List<dynamic> okd, List<TeacherSc> teachers, List<PushData> datas)> CheckScPush(List<string> pushTeachers,string areaIdJson,List<string> schools) {
- Dictionary<string, Dictionary<string, object>> pushDatas = new Dictionary<string, Dictionary<string, object>>();
- List<Dictionary<string, object>> dicts = new List<Dictionary<string, object>>();
- List<ScsResult> results = new List<ScsResult>();
- AreaSetting areaSetting = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<AreaSetting>($"{areaIdJson}", new PartitionKey("AreaSetting"));
- ScAccessConfig config = areaSetting.accessConfig.ToObject<ScAccessConfig>();
- Dictionary<string, dynamic> checkDatas = new Dictionary<string, dynamic>();
- var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt");
- List<ScTeacher> scTeachers = new List<ScTeacher>();
- if (pushTeachers.IsNotEmpty())
- {
- List<string> Codes = new List<string>();
- pushTeachers.ForEach(tch => {
- Codes.Add($" tmdid {QueryComparisons.Equal} '{tch}' ");
- });
- string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacher' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Codes)} ) ";
- var result = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacher>().Where(tbqurey), null);
- scTeachers = result.Results;
- }
- else
- {
- if (schools.IsNotEmpty())
- {
- List<string> Codes = new List<string>();
- schools.ForEach(school => {
- Codes.Add($" schoolCode {QueryComparisons.Equal} '{school}' ");
- });
- string tbqurey = $"PartitionKey {QueryComparisons.Equal} 'ScTeacher' and areaId {QueryComparisons.Equal} '{areaIdJson}' and ( {string.Join(" or ", Codes)} ) ";
- var result = await table.ExecuteQuerySegmentedAsync(new TableQuery<ScTeacher>().Where(tbqurey), null);
- scTeachers = result.Results;
- }
- else
- {
- scTeachers = await table.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "areaId", $"{areaIdJson}" } });
- }
- }
- List<PushData> ycData = new List<PushData>();
- List<PushData> datas = new List<PushData>();
- List<Task<List<PushData>>> tasks = new List<Task<List<PushData>>>();
- scTeachers.ForEach(sc =>
- {
- tasks.Add(GetYxData(config, sc));
- });
- List<TeacherSc> teachers = new List<TeacherSc>();
- var tsk = await tasks.TaskPage(100);
- foreach (var a in tsk)
- {
- datas.AddRange(a);
- }
- datas.ForEach(x => {
- bool has0result = false;
- if (x.diagnosisInfo != null)
- {
- x.diagnosisInfo.ForEach(t =>
- {
- if (t.hpresult.Equals("0") || t.zpresult.Equals("0") || t.xzpresult.Equals("0"))
- {
- has0result = true;
- }
- });
- }
- else
- {
- has0result = true;
- teachers.Add(x.teacherInfo);
- }
- if (has0result && x.teacherInfo.ComPassed != 3 && x.teacherInfo.ComPassed != 0)
- {
- teachers.Add(x.teacherInfo);
- }
- });
- List<KeyValuePair<string, string>> htmls = new List<KeyValuePair<string, string>>();
- var group = datas.GroupBy(x => x.teacherInfo.SchoolName);
- List<dynamic> okd = new List<dynamic>();
- foreach (var groupData in group)
- {
- int joinCount = groupData.ToList().Count();
- //0、未认定 1、合格 2、优秀 3、不合格 4、其他
- int yxCount = groupData.ToList().Where(x => x.teacherInfo.ComPassed == 2).Count();
- int hgCount = groupData.ToList().Where(x => x.teacherInfo.ComPassed == 1).Count();
- var yc = groupData.ToList().Where(x => x.teacherInfo.ComPassed != 2 && x.teacherInfo.ComPassed != 1);
- int ycCount = yc.Count();
- okd.Add(new { schoolName = groupData.Key, joinCount, yxCount, hgCount, ycCount });
- if (yc.Any())
- {
- foreach (var bu in yc)
- {
- string ComPassed = "";
- switch (bu.teacherInfo.ComPassed)
- {
- //0、未认定 1、合格 2、优秀 3、不合格 4、其他
- case 0:
- ComPassed = "未认定";
- break;
- case 1:
- ComPassed = "合格";
- break;
- case 2:
- ComPassed = "优秀";
- break;
- case 3:
- ComPassed = "不合格";
- break;
- case 4:
- ComPassed = "其他";
- break;
- default:
- ComPassed = "其他";
- break;
- }
- bu.teacherInfo.com = ComPassed;
- }
- ycData.AddRange(yc);
- }
- }
- List<dynamic> ycd = new List<dynamic>();
- ycData.ForEach(data => {
- ycd.Add(new
- {
- data.teacherInfo.TeacherName,
- data.teacherInfo.tmdid,
- data.teacherInfo.SchoolName,
- data.teacherInfo.schoolCode,
- data.teacherInfo.com,
- data.teacherInfo.ComPassed,
- data.teacherInfo.ComPassedTime,
- data.teacherInfo.PXID,
- data.teacherInfo.TID,
- });
- });
- if (datas.Any() && datas.Count == 1)
- {
- return (ycd, okd, teachers,datas);
- }
- else {
- return (ycd, okd, teachers, new List<PushData>());
- }
-
- }
- }
- public class DiagnosisInfoItem
- {
- /// <summary>
- /// 技术支持的学情分析
- /// </summary>
- public string diagnosisName { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string xzpresult { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string zpresult { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string hpresult { get; set; }
- /// <summary>
- ///
- /// </summary>
- public int diagnosisID { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string diagnosisNum { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string uptime { get; set; }
- }
- public class TeacherSc:ScTeacher
- {
- public TeacherSc() {
- }
- public TeacherSc(ScTeacher teacher)
- {
- PXID = teacher.PXID;
- TID = teacher.TID;
- TeacherName = teacher.TeacherName;
- SchoolID = teacher.SchoolID;
- SchoolName = teacher.SchoolName;
- ProjectID = teacher.ProjectID;
- ProjectItemID = teacher.ProjectItemID;
- ProjectTitle = teacher.ProjectTitle;
- ProjectItemTitle = teacher.ProjectItemTitle;
- CityID = teacher.CityID;
- DistrictID = teacher.DistrictID;
- CityName = teacher.CityName;
- DisName = teacher.DisName;
- Account = teacher.Account;
- TeacherXK = teacher.TeacherXK;
- TeacherXD = teacher.TeacherXD;
- Mobile = teacher.Mobile;
- Email = teacher.Email;
- this.tmdid = teacher.tmdid;
- this.areaId = teacher.areaId;
- this.schoolCode = teacher.schoolCode;
- this.status = teacher.status;
- }
- /// <summary>
- ///
- /// </summary>
- public string PXXK { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string PXXD { get; set; }
- /// <summary>
- ///
- /// </summary>
- public int ComPassed { get; set; }
- public string com { get;set; }
- /// <summary>
- ///
- /// </summary>
- public string ComPassedTime { get; set; }
- }
- public class FilesItem
- {
- /// <summary>
- /// 信息化教学案例展示
- /// </summary>
- public string fileName { get; set; }
- /// <summary>
- ///
- /// </summary>
- public int sourceType { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string diagnosisNum { get; set; }
- /// <summary>
- ///
- /// </summary>
- // public int filesize { get; set; }
- /// <summary>
- /// https://teammodelos.blob.core.chinacloudapi.cn/cdqzmd/train/8eae8733-c4cd-40bd-8ada-6fe5e2573e30/1640923152/心得.pdf?sv=2021-04-10&st=2022-06-23T09%3A43%3A07Z&se=2121-05-30T09%3A58%3A07Z&sr=c&sp=r&sig=iFHJSQAHbgOc1I4trUVab%2B2UCV%2BrY%2Blge%2Fjb30yvqjM%3D
- /// </summary>
- public string url { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string fileType { get; set; }
- /// <summary>
- ///
- /// </summary>
- public string md5 { get; set; }
- }
- public class PushData
- {
- /// <summary>
- ///
- /// </summary>
- public List<DiagnosisInfoItem> diagnosisInfo { get; set; }
- /// <summary>
- ///
- /// </summary>
- public TeacherSc teacherInfo { get; set; }
- /// <summary>
- ///
- /// </summary>
- public List<FilesItem> files { get; set; }
- }
- }
|