|
@@ -1,4 +1,5 @@
|
|
|
-using HTEXLib.COMM.Helpers;
|
|
|
+using Azure.Cosmos;
|
|
|
+using HTEXLib.COMM.Helpers;
|
|
|
using Microsoft.Azure.Functions.Worker;
|
|
|
using Microsoft.Azure.Functions.Worker.Http;
|
|
|
using System;
|
|
@@ -34,7 +35,307 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
|
|
|
_azureRedis = azureRedis;
|
|
|
_thirdApisService = thirdApisService;
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 数据推送接口
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="req"></param>
|
|
|
+ /// <param name="log"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Function("SchoolDataPush")]
|
|
|
+ public async Task<HttpResponseData> 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 accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
|
|
|
+ ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
|
|
|
+ JsonElement school = data.ToObject<JsonElement>().GetProperty("school");
|
|
|
+ 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 (members.IsNotEmpty())
|
|
|
+ {
|
|
|
+ queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain' " +
|
|
|
+ $"and c.id in ({string.Join(",", members.Select(x => $"'{x.id}'"))}) ");
|
|
|
+ await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<TeacherTrain>(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<Teacher> teachers = new List<Teacher>();
|
|
|
+ await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
|
|
|
+ {
|
|
|
+ teachers.Add(item);
|
|
|
+ }
|
|
|
+ //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
|
|
|
+ List<TeacherTrain> trains53112OK = new List<TeacherTrain>();
|
|
|
+
|
|
|
+ //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis
|
|
|
+ List<TeacherTrain> trains53113OK = new List<TeacherTrain>();
|
|
|
+
|
|
|
+ //5.3.1.17学员课堂实录批量回写-UploadKTSLList
|
|
|
+ List<TeacherTrain> trains53117OK = new List<TeacherTrain>();
|
|
|
+
|
|
|
+ //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2
|
|
|
+ List<TeacherTrain> trains53122OK = new List<TeacherTrain>();
|
|
|
+
|
|
|
+ List<KeyValuePair<TeacherTrain, string>> trainsNO = new List<KeyValuePair<TeacherTrain, string>>();
|
|
|
+ List<PushFail> fails = new List<PushFail>();
|
|
|
+ trains.ForEach(x => {
|
|
|
+ var teacher = teachers.Find(t => t.id.Equals(x.id));
|
|
|
+ if (teacher == null)
|
|
|
+ {
|
|
|
+ fails.Add(new PushFail { tmdid = x.id, msgs = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("tmdid-unexistent", "账号不存在!") } });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ List<KeyValuePair<string, string>> msgs = new List<KeyValuePair<string, string>>();
|
|
|
+ var binddata = teachers.Where(t => t.id.Equals(x.id)).SelectMany(z => z.binds)
|
|
|
+ .Where(d => d.data.IsNotEmpty()).SelectMany(d => d.data)
|
|
|
+ .Where(d => string.IsNullOrEmpty(d) && d.Contains(config.config) && d.Contains(config.path));
|
|
|
+ if (binddata != null && binddata.Count() > 0)
|
|
|
+ {
|
|
|
+ var bindData = binddata.First().ToObject<ScBindData>();
|
|
|
+ if (binddata != null)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //如果没有找到绑定信息,则去blob查找。
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //如果没有找到绑定信息,则去blob查找。
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ await response.WriteAsJsonAsync(new { });
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 5.3.1.1获取项目列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="req"></param>
|
|
|
+ /// <param name="log"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Function("GetProjectInfoByTrainComID")]
|
|
|
+ public async Task<HttpResponseData> GetProjectInfoByTrainComID([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
|
|
|
+ {
|
|
|
+ var response = req.CreateResponse(HttpStatusCode.OK);
|
|
|
+ List<ScProject> projects = new List<ScProject>();
|
|
|
+ string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
|
+ JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
|
|
|
+ ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
|
|
|
+ Code = "GetProjectInfoByTrainComID";
|
|
|
+ parameterMap = new Dictionary<string, object>();
|
|
|
+ parameterMap.Add("TrainComID", config.trainComID);
|
|
|
+ ScsResult result = new ScsResult { code = Code, title = "5.3.1.1获取项目列表" };
|
|
|
+ try
|
|
|
+ {
|
|
|
+ result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
|
|
|
+ if (result.result)
|
|
|
+ {
|
|
|
+ projects = result.content.ToObject<List<ScProject>>();
|
|
|
+ }
|
|
|
+ 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}{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
|
|
|
+ await response.WriteAsJsonAsync(new { data = projects.ToJsonString() });
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="req"></param>
|
|
|
+ /// <param name="log"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Function("GetSchoolList")]
|
|
|
+ public async Task<HttpResponseData> GetSchoolList([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
|
|
|
+ {
|
|
|
+ var response = req.CreateResponse(HttpStatusCode.OK);
|
|
|
+ List<ScSchool> scSchools = new List<ScSchool>();
|
|
|
+ string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
|
+ JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
|
|
|
+ ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
|
|
|
+ Code = "GetSchoolList";
|
|
|
+ parameterMap = new Dictionary<string, object>();
|
|
|
+ parameterMap.Add("TrainComID", config.trainComID);
|
|
|
+ List<ScsResult> results = new List<ScsResult>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (config.p.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var ps in config.p)
|
|
|
+ {
|
|
|
+ parameterMap["ProjectID"] = ps.pd;
|
|
|
+ parameterMap["ProjectItemID"] = ps.pid;
|
|
|
+ ScsResult result = new ScsResult { code = Code, title = " 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表" };
|
|
|
+ result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
|
|
|
+ if (result.result)
|
|
|
+ {
|
|
|
+ List<ScSchool> schools = result.content.ToObject<List<ScSchool>>();
|
|
|
+ if (schools.IsNotEmpty())
|
|
|
+ {
|
|
|
+ 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}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
|
|
|
+ await response.WriteAsJsonAsync(new { data = scSchools.ToJsonString() });
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 5.3.1.2获取学员名单
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="req"></param>
|
|
|
+ /// <param name="log"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Function("GetTeachersListByProject")]
|
|
|
+ public async Task<HttpResponseData> GetTeachersListByProject([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
|
|
|
+ {
|
|
|
+ var response = req.CreateResponse(HttpStatusCode.OK);
|
|
|
+ List<ScTeacher> scTeachers = new List<ScTeacher>();
|
|
|
+ string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
|
+ JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
|
|
|
+ ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
|
|
|
+ Code = "GetTeachersListByProject";
|
|
|
+ parameterMap = new Dictionary<string, object>();
|
|
|
+ parameterMap.Add("TrainComID", config.trainComID);
|
|
|
+ List<ScsResult> results = new List<ScsResult>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (config.p.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var ps in config.p)
|
|
|
+ {
|
|
|
+ parameterMap["ProjectID"] = ps.pd;
|
|
|
+ parameterMap["ProjectItemID"] = ps.pid;
|
|
|
+ ScsResult result = new ScsResult { code = Code, title = "5.3.1.2获取学员名单" };
|
|
|
+ result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
|
|
|
+ if (result.result)
|
|
|
+ {
|
|
|
+ List<ScTeacher> teachers = result.content.ToObject<List<ScTeacher>>();
|
|
|
+ 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}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
|
|
|
+ await response.WriteAsJsonAsync(new { data = scTeachers.ToJsonString() });
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 5.3.1.20获取学校设置的可选能力点
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="req"></param>
|
|
|
+ /// <param name="log"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Function("GetSchoolDiagnosis")]
|
|
|
+ public async Task<HttpResponseData> GetSchoolDiagnosis([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
|
|
|
+ {
|
|
|
+ var response = req.CreateResponse(HttpStatusCode.OK);
|
|
|
+ List<ScsProjectDiagnosis> projects = new List<ScsProjectDiagnosis>();
|
|
|
+ string data = await new StreamReader(req.Body).ReadToEndAsync();
|
|
|
+ JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
|
|
|
+ JsonElement schoolCode = data.ToObject<JsonElement>().GetProperty("schoolCode");
|
|
|
+ ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
|
|
|
+ Code = "GetSchoolDiagnosis";
|
|
|
+ parameterMap = new Dictionary<string, object>();
|
|
|
+ parameterMap.Add("TrainComID", config.trainComID);
|
|
|
+ List<ScsResult> results = new List<ScsResult>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (config.p.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var ps in config.p)
|
|
|
+ {
|
|
|
+ parameterMap["ProjectID"] = ps.pd;
|
|
|
+ parameterMap["ProjectItemID"] = ps.pid;
|
|
|
+ parameterMap["SchoolID"] = $"{schoolCode}";
|
|
|
+ parameterMap["School"] = $"{schoolCode}";
|
|
|
+ ScsResult result = new ScsResult { code = Code, title = " 5.3.1.20获取学校设置的可选能力点" };
|
|
|
+ result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
|
|
|
+ if (result.result)
|
|
|
+ {
|
|
|
+ List<ScPDiagnosis> diagnoses = result.content.ToObject<List<ScPDiagnosis>>();
|
|
|
+ if (diagnoses.IsNotEmpty())
|
|
|
+ {
|
|
|
+ projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses });
|
|
|
+ await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { RowKey = $"{ps.pid}-{schoolCode}", PartitionKey = "ScSchoolDiagnosis", abilityNos = diagnoses.ToJsonString() });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } });
|
|
|
+ if (teacherDiagnoses.IsNotEmpty())
|
|
|
+ {
|
|
|
+ projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
|
|
|
+
|
|
|
+ if (config.p.IsNotEmpty())
|
|
|
+ {
|
|
|
+ foreach (var ps in config.p)
|
|
|
+ {
|
|
|
+ List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } });
|
|
|
+ if (teacherDiagnoses.IsNotEmpty())
|
|
|
+ {
|
|
|
+ projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await response.WriteAsJsonAsync(new { data = projects.ToJsonString() });
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
/// 5.3.1.19获取项目设置的可选能力点
|
|
|
/// </summary>
|