using Azure.Cosmos; using HTEXLib.COMM.Helpers; using HTEXLib.Helpers.ShapeHelpers; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; 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.Extension; using TEAMModelOS.SDK.Models; using TEAMModelOS.SDK.Models.Dtos; namespace TEAMModelOS.SDK.DI { public static class ScsStudyApisService { public static string Code { get; set; } // public static Dictionary parameterMap = null; //private readonly IWebHostEnvironment _environment; //public bool check = true; //private readonly IConfiguration _configuration; // private readonly DI.DingDing _dingDing; //public readonly Option _option; //public ScsStudyApisService( DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, HttpClient httpClient, SnowflakeId snowflakeId) //{ // _dingDing = dingDing; // _azureStorage = azureStorage; // _azureRedis = azureRedis; // _httpClient = httpClient; // //_environment = environment; // _snowflakeId = snowflakeId; // //_option = option?.Value; // //_configuration = configuration; // //_dingDing = dingDing; //} /// /// 5.3.1.1获取项目列表 /// /// /// /// public static async Task<(int state,string json)> GetProjectInfoByTrainComIDV2(HttpClient _httpClient, DingDing _dingDing ,AzureStorageFactory _azureStorage ,string areaId, string accessConfig) { List projects = new(); //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}"; //} ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetProjectInfoByTrainComID"; Dictionary parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); ScsResult result = new() { bizcode = Code, title = "5.3.1.1获取项目列表" }; try { result = await ThirdApisService.Post(_httpClient,config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { projects = result.content.ToObject>(); } //await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return (200, projects.ToJsonString()); } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectInfoByTrainComID\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{areaId}\n{accessConfig} \n", GroupNames.醍摩豆服務運維群組); //await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return (500, projects.ToJsonString()); } } /// /// 5.3.1.1获取项目列表 /// /// /// /// public static async Task<(int state, string json)> GetProjectInfoByTrainComID(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string areaId, string accessConfig) { List projects = new(); ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetProjectInfoByTrainComID"; Dictionary parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); ScsResult result = new() { bizcode = Code, title = "5.3.1.1获取项目列表" }; try { result = await ThirdApisService.Post(_httpClient,config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { projects = result.content.ToObject>(); } else { } //await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return (200, projects.ToJsonString()); } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectInfoByTrainComID\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n{areaId}\n{accessConfig}\n", GroupNames.醍摩豆服務運維群組); //await response.WriteAsJsonAsync(new { data = projects.ToJsonString() }); return (500, projects.ToJsonString()); } } /// /// 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表 /// /// /// /// public static async Task<(int state, string json)> GetSchoolList(HttpClient _httpClient, DingDing _dingDing,AzureStorageFactory _azureStorage, string areaId, string accessConfig) { List scSchools = new(); ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetSchoolList"; Dictionary parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new(); 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,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 (200, scSchools.ToJsonString()); } catch (Exception ex) { ScsProject project = null; var ps = config.p.FindAll(z => z.status == 1); if (ps.IsNotEmpty()) { project = ps[0]; } if (project != null) { var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); scSchools = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScSchool" }, { "ProjectID", int.Parse(project.pd) }, { "ProjectItemID", int.Parse(project.pid) } }); if (scSchools.IsNotEmpty()) { return (200, scSchools.ToJsonString()); } else { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolList\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{areaId}\n{accessConfig}\n", GroupNames.醍摩豆服務運維群組); return (500, scSchools.ToJsonString()); } } else { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolList\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n{areaId}\n{accessConfig}\n", GroupNames.醍摩豆服務運維群組); return (500, scSchools.ToJsonString()); } } } /// /// 5.3.1.2获取学员名单 /// /// /// /// public static async Task<(int state, string json)> GetTeachersListByProject(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string areaId, string accessConfig) { List scTeachers = new(); ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetTeachersListByProject"; var 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,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); } } } return (200, scTeachers.ToJsonString()); } catch (Exception ex) { ScsProject project = null; var ps = config.p.FindAll(z => z.status == 1); if (ps .IsNotEmpty()) { project = ps[0]; } if (project != null) { var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); scTeachers = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacher" }, { "ProjectID", int.Parse(project.pd) }, { "ProjectItemID", int.Parse(project.pid) } }); if (scTeachers.IsNotEmpty()) { return (200, scTeachers.ToJsonString()); } else { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetTeachersListByProject\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n", GroupNames.醍摩豆服務運維群組); return (500, scTeachers.ToJsonString()); } } else { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetTeachersListByProject\n{ex.Message}\n{ex.StackTrace}\n{results.ToJsonString()}\n", GroupNames.醍摩豆服務運維群組); return (500, scTeachers.ToJsonString()); } } } /// /// 5.3.1.20获取学校设置的可选能力点 /// /// /// /// /// public static async Task<(int state, string json)> GetSchoolDiagnosis(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string areaId, string accessConfig, string schoolCode) { List projects = new(); ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetSchoolDiagnosis"; var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); Dictionary 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,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 (200,projects.ToJsonString()); } 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 (200,projects.ToJsonString()); } } /// /// 5.3.1.19获取项目设置的可选能力点 /// /// /// /// public static async Task<(int state, string json)> GetProjectDiagnosis(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string areaId, string accessConfig) { List projects = new(); ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetProjectDiagnosis"; var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); Dictionary parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); List results = new(); 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,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 (200, projects.ToJsonString()); } 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 (200, projects.ToJsonString()); } } /// /// 5.3.1.3通过项目编号获取学员测评能力项V2 /// /// /// /// /// /// public static async Task<(int state, string json)> GetDiagnosisListByProject_V2(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string areaId, string accessConfig, string pxid, string schoolCode) { List abilityNos = new(); var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); try { List teacherDiagnoses = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacherDiagnosis" }, { "RowKey", $"{pxid}" } }); if (teacherDiagnoses.IsNotEmpty()) { abilityNos = teacherDiagnoses[0].abilityNos.ToObject>(); } else { ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetDiagnosisListByProject_V2"; Dictionary parameterMap = new Dictionary(); parameterMap.Add("TrainComID", config.trainComID); parameterMap.Add("PXID", pxid); ScsResult result = new() { bizcode = Code, title = "5.3.1.3通过项目编号获取学员测评能力项V2" }; result = await ThirdApisService.Post(_httpClient, 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() }); } } } return (200, abilityNos.ToJsonString()); } 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 (200, abilityNos.ToJsonString()); } } /// /// 5.3.1.11获取跳转学员信息,用于sso单点,后端验证。 /// /// /// /// /// /// public static async Task<(int state, string json)> GetSingleTeacherByProject(HttpClient _httpClient, DingDing _dingDing, AzureStorageFactory _azureStorage, string accessConfig, string pxid, string tid ) { string teacher = null; ScAccessConfig config = accessConfig.ToObject().ToObject(); Code = "GetSingleTeacherByProject"; Dictionary 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 { var table = _azureStorage.GetCloudTableClient().GetTableReference("ScYxpt"); List teachers = await table.FindListByDict(new Dictionary { { "PartitionKey", "ScTeacher" }, { "RowKey", $"{pxid}" } }); if (teachers.IsNotEmpty()) { teacher = teachers[0].ToJsonString(); return (200, teacher); } else { result = await ThirdApisService.Post(_httpClient, config.url, Code, config.passKey, config.privateKey, parameterMap); if (result.result) { teacher = result.content; } return (200, teacher); } } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSingleTeacherByProject\n{ex.Message}\n{ex.StackTrace}\n{result.ToJsonString()}\n", GroupNames.醍摩豆服務運維群組); return (500, teacher); } } } }