using Azure.Cosmos; using HTEXLib.COMM.Helpers; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.SDK; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; namespace TEAMModelOS.FunctionV4 { public class ScsYxptApis { private readonly AzureCosmosFactory _azureCosmos; private readonly DingDing _dingDing; private readonly AzureStorageFactory _azureStorage; private readonly AzureRedisFactory _azureRedis; private readonly IHttpClientFactory _httpClient; public static string Code { get; set; } public static Dictionary parameterMap = null; public ScsYxptApis(IHttpClientFactory httpClient,AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage , AzureRedisFactory azureRedis) { _azureCosmos = azureCosmos; _dingDing = dingDing; _azureStorage = azureStorage; _azureRedis = azureRedis; _httpClient= httpClient; } /// /// 5.3.1.1获取项目列表 /// /// /// /// // [Function("GetProjectInfoByTrainComIDV2")] public async Task GetProjectInfoByTrainComIDV2([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List projects = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); ScAccessConfig config = $"{accessConfig}".ToObject(); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } Code = "GetProjectInfoByTrainComID"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.1获取项目列表" }; try { result = await ThirdApisService.Post(_httpClient.CreateClient(), config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { projects = result.content.ToObject>(); } else { } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectInfoByTrainComID\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } } /// /// 5.3.1.1获取项目列表 /// /// /// /// //[Function("GetProjectInfoByTrainComID")] public async Task GetProjectInfoByTrainComID([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List projects = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); ScAccessConfig config = $"{accessConfig}".ToObject(); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } Code = "GetProjectInfoByTrainComID"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.1获取项目列表" }; try { result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { projects = result.content.ToObject>(); } else { } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectInfoByTrainComID\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } } /// /// 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表 /// /// /// /// //[Function("GetSchoolList")] public async Task GetSchoolList([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List scSchools = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } ScAccessConfig config = $"{accessConfig}".ToObject(); Code = "GetSchoolList"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new List(); try { if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { if (ps.status == 1) { parameterMap["ProjectID"] = ps.pd; parameterMap["ProjectItemID"] = ps.pid; ScsResult result = new ScsResult { bizcode = Code, title = " 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表" }; result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { List schools = result.content.ToObject>(); if (schools.IsNotEmpty()) { //schools.ForEach(x => { x.ProjectID = int.Parse(ps.pd); x.ProjectItemID = int.Parse(ps.pid); }); scSchools.AddRange(schools); } } results.Add(result); } } } await response.WriteAsJsonAsync(new { data = scSchools.ToJsonString() }); return response; } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolList\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); await response.WriteAsJsonAsync(new { data = scSchools.ToJsonString() }); return response; } } /// /// 5.3.1.2获取学员名单 /// /// /// /// //[Function("GetTeachersListByProject")] public async Task GetTeachersListByProject([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List scTeachers = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); ScAccessConfig config = $"{accessConfig}".ToObject(); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } Code = "GetTeachersListByProject"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new List(); try { if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { if (ps.status == 1) { parameterMap["ProjectID"] = ps.pd; parameterMap["ProjectItemID"] = ps.pid; ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.2获取学员名单" }; result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { List teachers = result.content.ToObject>(); if (teachers.IsNotEmpty()) { scTeachers.AddRange(teachers); } } results.Add(result); } } } await response.WriteAsJsonAsync(new { data = scTeachers.ToJsonString() }); return response; } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetTeachersListByProject\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); await response.WriteAsJsonAsync(new { data = scTeachers.ToJsonString() }); return response; } } /// /// 5.3.1.20获取学校设置的可选能力点 /// /// /// /// //[Function("GetSchoolDiagnosis")] public async Task GetSchoolDiagnosis([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List projects = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); JsonElement schoolCode = data.ToObject().GetProperty("schoolCode"); string areaId = null; if(data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } ScAccessConfig config = $"{accessConfig}".ToObject(); Code = "GetSchoolDiagnosis"; var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new List(); try { if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { if (ps.status == 1) { parameterMap["ProjectID"] = ps.pd; parameterMap["ProjectItemID"] = ps.pid; parameterMap["SchoolID"] = $"{schoolCode}"; parameterMap["School"] = $"{schoolCode}"; ScsResult result = new ScsResult { bizcode = Code, title = " 5.3.1.20获取学校设置的可选能力点" }; result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { List diagnoses = result.content.ToObject>(); if (diagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses, }); await table.SaveOrUpdate(new ScProjectDiagnosis { schoolCode = $"{schoolCode}", areaId = areaId, ProjectID = int.Parse(ps.pd), ProjectItemID = int.Parse(ps.pid), RowKey = $"{ps.pid}-{schoolCode}", PartitionKey = "ScSchoolDiagnosis", abilityNos = diagnoses.ToJsonString() }); } } else { List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } }); if (teacherDiagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject>() }); } } results.Add(result); } } } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } catch (Exception ex) { //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolDiagnosis\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } }); if (teacherDiagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject>() }); } } } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } } /// /// 5.3.1.19获取项目设置的可选能力点 /// /// /// /// //[Function("GetProjectDiagnosis")] public async Task GetProjectDiagnosis([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List projects = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } ScAccessConfig config = $"{accessConfig}".ToObject(); Code = "GetProjectDiagnosis"; var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new List(); try { if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { if (ps.status==1) { parameterMap["ProjectID"] = ps.pd; parameterMap["ProjectItemID"] = ps.pid; ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.19获取项目设置的可选能力点" }; result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { List diagnoses = result.content.ToObject>(); if (diagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses }); await table.SaveOrUpdate(new ScProjectDiagnosis { areaId = areaId, RowKey = $"{ps.pid}", PartitionKey = "ScProjectDiagnosis", abilityNos = diagnoses.ToJsonString() }); } } else { List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScProjectDiagnosis" }, { "RowKey", $"{ps.pid}" } }); if (teacherDiagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject>() }); } } results.Add(result); } } } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } catch (Exception ex) { if (config.p.IsNotEmpty()) { foreach (var ps in config.p) { //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectDiagnosis\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScProjectDiagnosis" }, { "RowKey", $"{ps.pid}" } }); if (teacherDiagnoses.IsNotEmpty()) { projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject>() }); } } } await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return response; } } /// /// 5.3.1.3通过项目编号获取学员测评能力项V2 /// /// /// /// //[Function("GetDiagnosisListByProject_V2")] public async Task GetDiagnosisListByProject_V2([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); List abilityNos = new List(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); JsonElement pxid = data.ToObject().GetProperty("pxid"); JsonElement schoolCode = data.ToObject().GetProperty("schoolCode"); ScAccessConfig config = $"{accessConfig}".ToObject(); Code = "GetDiagnosisListByProject_V2"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); parameterMap.Add("PXID", pxid); ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.3通过项目编号获取学员测评能力项V2" }; try { result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { List diagnoses = result.content.ToObject>(); if (diagnoses != null) { abilityNos = diagnoses.Select(x => x.DiagnosisDicNum).ToList(); } if (abilityNos.IsNotEmpty()) { await table.SaveOrUpdate(new ScTeacherDiagnosis {areaId = areaId,schoolCode=$"{schoolCode}", RowKey = $"{pxid}", PartitionKey = "ScTeacherDiagnosis", abilityNos = abilityNos.ToJsonString() }); } } else { List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacherDiagnosis" }, { "RowKey", $"{pxid}" } }); if (teacherDiagnoses.IsNotEmpty()) { abilityNos = teacherDiagnoses[0].abilityNos.ToObject>(); } } await response.WriteAsJsonAsync(new { data = abilityNos.ToJsonString() }); return response; } catch (Exception ex) { //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:getDiagnosisListByProject_V2\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacherDiagnosis" }, { "RowKey", $"{pxid}" } }); if (teacherDiagnoses.IsNotEmpty()) { abilityNos = teacherDiagnoses[0].abilityNos.ToObject>(); } await response.WriteAsJsonAsync(new { data = abilityNos.ToJsonString() }); return response; } } /// /// 5.3.1.11获取跳转学员信息,用于sso单点,后端验证。 /// /// /// /// //[Function("GetSingleTeacherByProject")] public async Task GetSingleTeacherByProject([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); string teacher = null; string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement accessConfig = data.ToObject().GetProperty("accessConfig"); JsonElement pxid = data.ToObject().GetProperty("pxid"); JsonElement tid = data.ToObject().GetProperty("tid"); ScAccessConfig config = $"{accessConfig}".ToObject(); string areaId = null; if (data.ToObject().TryGetProperty("areaId", out JsonElement _areaId)) { areaId = $"{_areaId}"; } Code = "GetSingleTeacherByProject"; parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); parameterMap.Add("Pxid", $"{pxid}"); parameterMap.Add("Tid", $"{tid}"); ScsResult result = new ScsResult { bizcode = Code, title = "5.3.1.11获取跳转学员信息,用于sso单点,后端验证。" }; try { ///{“result”:true,”reason”:null,”content”:”{“PXID”:””,”TID”:””,”TeacherName”:””,”ProjectTitle”:””,”ProjectItemTitle”:””,”CityName”:””, ///”DisName”:””,”SchoolName”:””,”Sex”:””,”PXXK”:””,”PXXD”:””,”TeacherXK”:””,”TeacherXD”:””,”Email”:””}”,”pagecount”:1} result = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { teacher = result.content; } await response.WriteAsJsonAsync(new { data = teacher }); return response; } catch (Exception ex) { //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSingleTeacherByProject\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.醍摩豆服務運維群組); await response.WriteAsJsonAsync(new { data = teacher }); return response; } } /// /// 数据推送接口 /// /// /// /// //[Function("SchoolDataPush")] public async Task SchoolDataPush([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); var client = _azureCosmos.GetCosmosClient(); string data = await new StreamReader(req.Body).ReadToEndAsync(); JsonElement areaIdJson = data.ToObject().GetProperty("areaId"); AreaSetting areaSetting= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync($"{areaIdJson}", new PartitionKey("AreaSetting")); ScAccessConfig config = areaSetting.accessConfig.ToObject(); JsonElement school = data.ToObject().GetProperty("school"); List pushTeachers = data.ToObject().GetProperty("pushTeachers").ToObject>(); StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'"); List yxtrain = new List(); await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator(queryText: queryText.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school}") })) { yxtrain.Add(item); } List trains = new List(); 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(queryText: queryText.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"TeacherTrain-{school}") })) { trains.Add(item); } } //string sql = $" SELECT value(c) FROM c join a in c.binds where ARRAY_LENGTH(c.binds)>0 and a.type='{config.config}' "; //List teachers = new List(); //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator(queryText: sql, // requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") })) //{ // teachers.Add(item); //} var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); List scTeachers= await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacher" },{ "schoolCode",$"{school}" } }); List scTeacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacherDiagnosis" }, { "schoolCode", $"{school}" } }); List> trainsNO = new List>(); List results = new List(); Dictionary> pushDatas = new Dictionary>(); int pages = (trains.Count + 19) / 20; //pages = (total + max -1) / max; for (int i = 0; i < pages; i++) { List lists = trains.Skip((i) * 20).Take(20).ToList(); //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation List trains53112OK = new List(); ScsResult UpdateTeacherListSituation = null; Dictionary parameterContent53112 = new Dictionary(); List> list53112 = new List>(); parameterContent53112.Add("TrainComID", config.trainComID); parameterContent53112.Add("List", list53112); //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis 300条限制 List trains53113OK = new List(); ScsResult UpdateTeacherListDiagnosis = null; Dictionary parameterContent53113 = new Dictionary(); List> list53113 = new List>(); parameterContent53113.Add("TrainComID", config.trainComID); parameterContent53113.Add("List", list53113); //5.3.1.17学员课堂实录批量回写-UploadKTSLList 300条限制 List trains53117OK = new List(); ScsResult UploadKTSLList = null; Dictionary parameterContent53117 = new Dictionary(); List> list53117 = new List>(); parameterContent53117.Add("TrainComID", config.trainComID); parameterContent53117.Add("List", list53117); //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2 100条限制 List trains53122OK = new List(); ScsResult UploadSBTARPDFListV2 = null; Dictionary parameterContent53122 = new Dictionary(); List> list53122 = new List>(); parameterContent53122.Add("TrainComID", config.trainComID); parameterContent53122.Add("List", list53122); //装载数据 foreach (var x in lists) { List msgs = new List(); List teacher = scTeachers.FindAll(t => !string.IsNullOrWhiteSpace(t.tmdid) && t.tmdid.Equals(x.id)); foreach (var t in teacher) { List fails = new List(); Dictionary pushData = new Dictionary(); string json = scTeacherDiagnoses.ToJsonString(); ScTeacherDiagnosis diagnosis = scTeacherDiagnoses.Find(x => x.RowKey.Equals($"{t.PXID}")); (int t53112OK, List msgs53112) = check53112(x, msgs); (int t53113OK, List msgs53113, List abilitySubs) = await check53113(x, diagnosis, msgs); (int t53117OK, List msgs53117) = check53117(x, msgs); (int t53122OK, List msgs53122) = check53122(x, msgs); //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation if (t53112OK == 1) { Dictionary parameterMapData = new Dictionary(); 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}"); /// ///省上标准 最终结果 0未认定,1合格,2优秀,3不合格,4其他 ///系统标准 -2 其他 -1 未认定,0不合格,1合格,2优秀 /// 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); list53112.Add(parameterMapData); } else { pushData.Add("fail-UpdateTeacherListSituation", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53112 }); fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53112 }); } //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis if (t53113OK == 1) { List> parameterMapDatas = new List>(); x.currency.teacherAilities.ForEach(a => { Dictionary parameterMapData = new Dictionary(); parameterMapData.Add("PXID", $"{t.PXID}"); parameterMapData.Add("TID", $"{t.TID}"); parameterMapData.Add("DiagnosisNum", $"{a.no}"); //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 = "0"; break; } string hpscore = "0"; switch (a.hpscore) { case -1: hpscore = "0"; break; case 0: hpscore = "3"; break; case 1: hpscore = "1"; break; case 2: hpscore = "2"; break; default: hpscore = "0"; break; } string xzpresult = "0"; switch (a.xzscore) { case -1: xzpresult = "0"; break; case 0: xzpresult = "3"; break; case 1: xzpresult = "1"; break; case 2: xzpresult = "2"; break; default: xzpresult = "0"; break; } parameterMapData.Add("zpresult", zpscore); parameterMapData.Add("hpresult", hpscore); parameterMapData.Add("xzpresult", xzpresult); List> pfiles = new List>(); parameterMapData.Add("pfiles", pfiles); AbilitySub abilitySub = abilitySubs.Find(sub => sub.id.Equals(a.id)); if (abilitySub != null) { abilitySub.uploads.ForEach(upload => { upload.urls.ForEach(url => { Dictionary pfileMap = new Dictionary(); pfileMap.Add("url", url.url); pfileMap.Add("fileName", url.name); pfileMap.Add("fileSize", url.size); pfileMap.Add("md5", url.hash); string fileext = url.url.Substring(url.url.LastIndexOf(".") > 0 ? url.url.LastIndexOf(".") + 1 : 0); pfileMap.Add("fileType", fileext); pfiles.Add(pfileMap); }); }); } list53113.Add(parameterMapData); parameterMapDatas.Add(parameterMapData); }); pushData.Add("success-UpdateTeacherListDiagnosis", parameterMapDatas); } else { pushData.Add("fail-UpdateTeacherListDiagnosis", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53113 }); fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53113 }); } //5.3.1.17学员课堂实录批量回写-UploadKTSLList if (t53117OK == 1) { List> parameterMapDatas = new List>(); x.teacherClasses.ForEach(clss => { Dictionary parameterMapData = new Dictionary(); parameterMapData.Add("PXID", $"{t.PXID}"); parameterMapData.Add("TID", $"{t.TID}"); parameterMapData.Add("url", clss.url);//添加访问授权 parameterMapData.Add("url2", clss.url); parameterMapData.Add("fileName", clss.name); parameterMapData.Add("fileSize", clss.size); parameterMapData.Add("md5", clss.hash); string fileext = clss.url.Substring(clss.url.LastIndexOf(".") > 0 ? clss.url.LastIndexOf(".") + 1 : 0); parameterMapData.Add("fileType", fileext); list53117.Add(parameterMapData); parameterMapDatas.Add(parameterMapData); }); pushData.Add("success-UploadKTSLList", parameterMapDatas); } else { pushData.Add("fail-UploadKTSLList", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53117 }); fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53117 }); } //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2 if (t53122OK == 1) { Dictionary parameterMapData = new Dictionary(); parameterMapData.Add("PXID", $"{t.PXID}"); parameterMapData.Add("TID", $"{t.TID}"); List> files = new List>(); x.offlineRecords.ForEach(record => { if (!string.IsNullOrWhiteSpace(record.url)) { Dictionary fileMap = new Dictionary(); fileMap.Add("url", record.url); fileMap.Add("fileName", record.name); fileMap.Add("fileSize", record.size); fileMap.Add("md5", record.hash); string fileext = record.url.Substring(record.url.LastIndexOf(".") > 0 ? record.url.LastIndexOf(".") + 1 : 0); fileMap.Add("fileType", fileext); files.Add(fileMap); } }); parameterMapData.Add("files", files); list53122.Add(parameterMapData); pushData.Add("success-UploadSBTARPDFListV2", parameterMapData); } else { pushData.Add("fail-UploadSBTARPDFListV2", new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53122 }); fails.Add(new PushFail { tmdid = t.tmdid, name = t.TeacherName, msgs = msgs53122 }); } pushDatas.Add(t.tmdid,pushData); } } //推送数据 UpdateTeacherListSituation = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, "UpdateTeacherListSituation", config.passKey, config.privateKey, parameterContent53112); UpdateTeacherListSituation.bizcode = "UpdateTeacherListSituation"; UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写"; UpdateTeacherListDiagnosis = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, "UpdateTeacherListDiagnosis", config.passKey, config.privateKey, parameterContent53113); UpdateTeacherListDiagnosis.bizcode = "UpdateTeacherListDiagnosis"; UpdateTeacherListDiagnosis.title = "5.3.1.13学员能力点测评结果批量回写"; UploadKTSLList = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, "UploadKTSLList", config.passKey, config.privateKey, parameterContent53117); UploadKTSLList.bizcode = "UploadKTSLList"; UploadKTSLList.title = "5.3.1.17学员课堂实录批量回写"; UploadSBTARPDFListV2 = await ThirdApisService.Post(_httpClient.CreateClient(),config.url, "UploadSBTARPDFListV2", config.passKey, config.privateKey, parameterContent53122); UploadSBTARPDFListV2.bizcode = "UploadSBTARPDFListV2"; UploadSBTARPDFListV2.title = "5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写"; results.Add(UpdateTeacherListSituation); results.Add(UpdateTeacherListDiagnosis); results.Add(UploadKTSLList); results.Add(UploadSBTARPDFListV2); } await response.WriteAsJsonAsync(new { data= new { results, pushDatas } }); return response; } //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2 public (int t53122OK, List msgs) check53122(TeacherTrain teacherTrain, List msgs) { int t53122OK = 1; if (teacherTrain.offlineRecords.Count<= 0) { msgs.Add(new CodeValue("offlineRecord-count", $"文件个数为0")); } var hasUrl= teacherTrain.offlineRecords.Where(x => !string.IsNullOrWhiteSpace(x.url) && x.size > 0); if (!hasUrl.Any()) { msgs.Add(new CodeValue("offlineRecord-url", $"需要上传的校本研修作业至少有一个。")); } //不需要检查每一个校本研修的文件记录。 //teacherTrain.offlineRecords.ForEach(x => { // if (string.IsNullOrEmpty(x.url)) { // msgs.Add(new CodeValue("offlineRecord-url", $"链接为空")); // } // if (x.size<=0) // { // msgs.Add(new CodeValue("offlineRecord-size", $"文件大小")); // } //}); return (t53122OK, msgs); } //5.3.1.17学员课堂实录批量回写-UploadKTSLList public (int t53117OK, List msgs) check53117(TeacherTrain teacherTrain, List msgs) { //校验 基本情况是否满足 int t53117OK = 1; if (teacherTrain.classTime <= 0) { msgs.Add(new CodeValue("classTime", $"未获得学时:{teacherTrain.classTime}")); t53117OK = 0; } if (teacherTrain.teacherClasses.Count() <= 0) { msgs.Add(new CodeValue("teacherClasses", $"未上传课堂实录:{teacherTrain.teacherClasses.Count()}个视频")); t53117OK = 0; } teacherTrain.teacherClasses.ForEach(x =>{ if (string.IsNullOrWhiteSpace(x.url)) { t53117OK = 0; msgs.Add(new CodeValue("teacherClasses", $"课堂实录链接无效")); } }); return (t53117OK, msgs); } //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation public (int t53112OK, List msgs) check53112(TeacherTrain teacherTrain, List msgs) { //校验 基本情况是否满足 int t53112OK = 1; if (teacherTrain.finalScore < 0) { //总体认定结果0、未认定 1、合格 2、优秀 3、不合格 4、其他 msgs.Add(new CodeValue("finalScore", $"最终评定结果参数:{teacherTrain.finalScore}")); t53112OK = 0; } //if (string.IsNullOrEmpty(teacherTrain.summary) || teacherTrain.summary.Length > 300) //{ // string msg = string.IsNullOrEmpty(teacherTrain.summary) ? "未填写" : teacherTrain.summary.Length > 300 ? "字数超过300." : ""; // msgs.Add(new CodeValue("summary", $"教师培训总结:{msg}")); // t53112OK = 0; //} if (!string.IsNullOrEmpty(teacherTrain.summary) && teacherTrain.summary.Length > 300) { //string msg = string.IsNullOrEmpty(teacherTrain.summary) ? "未填写" : teacherTrain.summary.Length > 300 ? "字数超过300." : ""; msgs.Add(new CodeValue("summary", $"教师培训总结:字数超过300.")); t53112OK = 0; } if (teacherTrain.totalTime <= 0) { msgs.Add(new CodeValue("totalTime", $"未获得学时:{teacherTrain.totalTime}")); t53112OK = 0; } return (t53112OK, msgs); } //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis public async Task<(int t53113OK, List msgs, List abilitySubs)> check53113(TeacherTrain teacherTrain, ScTeacherDiagnosis diagnosis, List msgs) { //校验 基本情况是否满足 int t53113OK = 1; List abilitySubs = new List(); if (teacherTrain.currency.videoTime < 0) { msgs.Add(new CodeValue("videoTime", $"视频学习时长:{teacherTrain.currency.videoTime}")); t53113OK = 0; } if (teacherTrain.currency.submitTime < 0) { msgs.Add(new CodeValue("submitTime", $"认证材料学习:{teacherTrain.currency.submitTime}")); t53113OK = 0; } if (teacherTrain.currency.teacherAilities.Count <= 0 ) { msgs.Add(new CodeValue("teacherAilities", $"已学习能力点:0")); t53113OK = 0; } if (diagnosis != null) { if (!string.IsNullOrWhiteSpace(diagnosis.abilityNos)) { List nos = diagnosis.abilityNos.ToObject>(); if (nos.Count > 0 && teacherTrain.currency.teacherAilities.Count > 0) { var notin = nos.Except(teacherTrain.currency.teacherAilities.Select(x => x.no).Where(z=>!string.IsNullOrWhiteSpace(z))); if (notin.Any()) { msgs.Add(new CodeValue("diagnosisNos", $"省平台勾选的能力点编号为学习完成:省平台:{string.Join(",", nos.OrderBy(x => x))}" + $" ,已学习:{string.Join(",", teacherTrain.currency.teacherAilities.Select(x => x.no).OrderBy(x=>x))} ")); t53113OK = 0; } else { string insql = ""; if (teacherTrain.currency.teacherAilities.IsNotEmpty()) { var abilites= teacherTrain.currency.teacherAilities.Where(c => !string.IsNullOrWhiteSpace(c.no) && nos.Contains(c.no)); insql = $" where c.id in ({string.Join(",", abilites.Select(o => $"'{o.id}'"))})"; } //认证材料 await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher") .GetItemQueryIterator(queryText: $"select value(c) from c {insql}", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"AbilitySub-{teacherTrain.school}-{teacherTrain.id}") })) { abilitySubs.Add(item); } teacherTrain.currency.teacherAilities.ForEach(x => { var abilitySub = abilitySubs.Find(z => z.id.Equals(x.id)); if (abilitySub == null || !abilitySub.uploads.Any()) { t53113OK = 0; msgs.Add(new CodeValue("uploads", $"未上传认证材料:{x.no},{x.name}")); } if (x.zpscore <= 0) { t53113OK = 0; msgs.Add(new CodeValue("zpscore", $"认证材料,没有完成自评:{x.no},{x.name},{x.zpscore}")); } if (x.hpscore <= 0) { t53113OK = 0; msgs.Add(new CodeValue("hpscore", $"认证材料,没有完成互评:{x.no},{x.name},{x.hpscore}")); } if (x.xzscore <= 0) { t53113OK = 0; msgs.Add(new CodeValue("xzscore", $"认证材料,没有完成小组评:{x.no},{x.name},{x.xzscore}")); } }); if (t53113OK != 1) { msgs.Add(new CodeValue("diagnosisNos", $"省平台勾选的能力点编号为学习完成:省平台:{string.Join(",", nos.OrderBy(x=>x))}" + $" ,已学习:{string.Join(",", teacherTrain.currency.teacherAilities.Select(x => x.no).OrderBy(x => x))} ")); } } } else { msgs.Add(new CodeValue("teacherAilities", $"未同步省平台挑选的能力点")); t53113OK = 0; } } else { msgs.Add(new CodeValue("teacherAilities", $"未同步省平台挑选的能力点")); t53113OK = 0; } } else { msgs.Add(new CodeValue("teacherAilities", $"未同步省平台挑选的能力点")); t53113OK = 0; } return (t53113OK, msgs, abilitySubs); } } }