ScsApisHttpTrigger.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. using System;
  2. using System.IO;
  3. using System.Threading.Tasks;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.Azure.WebJobs;
  6. using Microsoft.Azure.WebJobs.Extensions.Http;
  7. using Microsoft.AspNetCore.Http;
  8. using Microsoft.Extensions.Logging;
  9. using TEAMModelOS.SDK.DI;
  10. using Azure.Cosmos;
  11. using System.Text.Json;
  12. using System.Collections.Generic;
  13. using TEAMModelOS.SDK.Models;
  14. using TEAMModelOS.SDK.Extension;
  15. using TEAMModelOS.SDK;
  16. using TEAMModelOS.SDK.Models.Cosmos;
  17. using TEAMModelOS.SDK.Models.Cosmos.Common;
  18. using System.Linq;
  19. using TEAMModelOS.Services.Common;
  20. using TEAMModelOS.SDK.Models.Service;
  21. using HTEXLib.COMM.Helpers;
  22. using System.Text;
  23. using static TEAMModelOS.SDK.Models.Teacher;
  24. using TEAMModelOS.SDK.Models.Cosmos.Common.Inner;
  25. using Azure.Storage.Blobs.Models;
  26. namespace TEAMModelFunction
  27. {
  28. public class ScsApisHttpTrigger
  29. {
  30. private readonly AzureCosmosFactory _azureCosmos;
  31. private readonly DingDing _dingDing;
  32. private readonly AzureStorageFactory _azureStorage;
  33. private readonly AzureRedisFactory _azureRedis;
  34. private readonly ThirdApisService _thirdApisService;
  35. public static string Code { get; set; }
  36. public static Dictionary<string, object> parameterMap = null;
  37. public ScsApisHttpTrigger(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, ThirdApisService thirdApisService
  38. , AzureRedisFactory azureRedis)
  39. {
  40. _azureCosmos = azureCosmos;
  41. _dingDing = dingDing;
  42. _azureStorage = azureStorage;
  43. _azureRedis = azureRedis;
  44. _thirdApisService = thirdApisService;
  45. }
  46. /// <summary>
  47. /// 数据推送接口
  48. /// </summary>
  49. /// <param name="req"></param>
  50. /// <param name="log"></param>
  51. /// <returns></returns>
  52. [FunctionName("knowledge-change")]
  53. public async Task<IActionResult> KnowledgeChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log) {
  54. string data = await new StreamReader(req.Body).ReadToEndAsync();
  55. var json = JsonDocument.Parse(data).RootElement;
  56. List<OldNew> old_new = null;
  57. string school = null;
  58. if (json.TryGetProperty("school", out JsonElement _school))
  59. {
  60. school = _school.GetString();
  61. }
  62. if (json.TryGetProperty("old_new", out JsonElement _old_new))
  63. {
  64. old_new = _old_new.ToObject<List<OldNew>>();
  65. }
  66. if (old_new.IsNotEmpty() && !string.IsNullOrWhiteSpace(school))
  67. {
  68. foreach (var on in old_new)
  69. {
  70. List<ItemInfo> items = new List<ItemInfo>();
  71. string sql = $"select value(c) from c where array_contains(c.knowledge,'{on._old}') ";
  72. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ItemInfo>
  73. (queryText: sql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Item-{_school}") }))
  74. {
  75. items.Add(item);
  76. }
  77. items.ForEach(item => {
  78. //修改知识点
  79. if (!string.IsNullOrEmpty(on._new))
  80. {
  81. for (int i = 0; i < item.knowledge.Count; i++)
  82. {
  83. if (item.knowledge[i].Equals(on._old))
  84. {
  85. item.knowledge[i] = on._new;
  86. }
  87. }
  88. }
  89. else
  90. {
  91. //表示删除知识点
  92. item.knowledge.RemoveAll(x => x.Equals(on._old));
  93. }
  94. });
  95. foreach (var item in items)
  96. {
  97. ItemBlob itemBlob = null;
  98. try
  99. {
  100. BlobDownloadInfo blobDownloadResult = await _azureStorage.GetBlobContainerClient($"hbcn").GetBlobClient($"/item/{item.id}/{item.id}.json").DownloadAsync();
  101. if (blobDownloadResult != null)
  102. {
  103. var blob = JsonDocument.Parse(blobDownloadResult.Content);
  104. itemBlob = blob.RootElement.ToObject<ItemBlob>();
  105. itemBlob.exercise.knowledge = item.knowledge;
  106. await _azureStorage.UploadFileByContainer("hbcn", itemBlob.ToJsonString(), "item", $"{item.id}/{item.id}.json", true);
  107. }
  108. }
  109. catch (Exception ex)
  110. {
  111. itemBlob = null;
  112. }
  113. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(item, item.id, new PartitionKey(item.code));
  114. }
  115. }
  116. }
  117. return new OkResult();
  118. }
  119. /// <summary>
  120. /// 数据推送接口
  121. /// </summary>
  122. /// <param name="req"></param>
  123. /// <param name="log"></param>
  124. /// <returns></returns>
  125. [FunctionName("SchoolDataPush")]
  126. public async Task<IActionResult> SchoolDataPush([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log) {
  127. var client = _azureCosmos.GetCosmosClient();
  128. string data = await new StreamReader(req.Body).ReadToEndAsync();
  129. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  130. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  131. JsonElement school = data.ToObject<JsonElement>().GetProperty("school");
  132. StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
  133. List<GroupList> yxtrain = new List<GroupList>();
  134. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
  135. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school}") }))
  136. {
  137. yxtrain.Add(item);
  138. }
  139. List<TeacherTrain> trains = new List<TeacherTrain>();
  140. var members = yxtrain.SelectMany(x => x.members).ToList();
  141. if (members.IsNotEmpty()) {
  142. queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain' " +
  143. $"and c.id in ({string.Join(",", members.Select(x => $"'{x.id}'"))}) ");
  144. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<TeacherTrain>(queryText: queryText.ToString(),
  145. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"TeacherTrain-{school}") }))
  146. {
  147. trains.Add(item);
  148. }
  149. }
  150. string sql = $" SELECT value(c) FROM c join a in c.binds where ARRAY_LENGTH(c.binds)>0 and a.type='{config.config}' ";
  151. List<Teacher> teachers = new List<Teacher>();
  152. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
  153. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
  154. {
  155. teachers.Add(item);
  156. }
  157. //5.3.1.12学员培训基本情况批量回写-UpdateTeacherListSituation
  158. List<TeacherTrain> trains53112OK = new List<TeacherTrain>();
  159. //5.3.1.13学员能力点测评结果批量回写-UpdateTeacherListDiagnosis
  160. List<TeacherTrain> trains53113OK = new List<TeacherTrain>();
  161. //5.3.1.17学员课堂实录批量回写-UploadKTSLList
  162. List<TeacherTrain> trains53117OK = new List<TeacherTrain>();
  163. //5.3.1.22学员校本教研PDF(每人可以返回多条)批量回写-UploadSBTARPDFListV2
  164. List<TeacherTrain> trains53122OK = new List<TeacherTrain>();
  165. List<KeyValuePair<TeacherTrain,string>> trainsNO = new List<KeyValuePair<TeacherTrain, string>>();
  166. List<PushFail> fails= new List<PushFail>();
  167. trains.ForEach(x => {
  168. var teacher = teachers.Find(t => t.id.Equals(x.id));
  169. if (teacher == null)
  170. {
  171. fails.Add(new PushFail { tmdid = x.id, msgs = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("tmdid-unexistent", "账号不存在!") } });
  172. }
  173. else {
  174. List<KeyValuePair<string, string>> msgs = new List<KeyValuePair<string, string>>();
  175. var binddata = teachers.Where(t => t.id.Equals(x.id)).SelectMany(z => z.binds)
  176. .Where(d => d.data.IsNotEmpty()).SelectMany(d => d.data)
  177. .Where(d => string.IsNullOrEmpty(d) && d.Contains(config.config) && d.Contains(config.path));
  178. if (binddata != null && binddata.Count() > 0)
  179. {
  180. var bindData = binddata.First().ToObject<ScBindData>();
  181. if (binddata != null)
  182. {
  183. }
  184. else
  185. {
  186. //如果没有找到绑定信息,则去blob查找。
  187. }
  188. }
  189. else
  190. {
  191. //如果没有找到绑定信息,则去blob查找。
  192. }
  193. }
  194. });
  195. return new OkObjectResult(new { });
  196. }
  197. /// <summary>
  198. /// 5.3.1.1获取项目列表
  199. /// </summary>
  200. /// <param name="req"></param>
  201. /// <param name="log"></param>
  202. /// <returns></returns>
  203. [FunctionName("GetProjectInfoByTrainComID")]
  204. public async Task<IActionResult> GetProjectInfoByTrainComID([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
  205. {
  206. List<ScProject> projects = new List<ScProject>() ;
  207. string data = await new StreamReader(req.Body).ReadToEndAsync();
  208. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  209. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  210. Code = "GetProjectInfoByTrainComID";
  211. parameterMap = new Dictionary<string, object>();
  212. parameterMap.Add("TrainComID", config.trainComID);
  213. ScsResult result = new ScsResult { code = Code, title = "5.3.1.1获取项目列表" };
  214. try
  215. {
  216. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  217. if (result.result)
  218. {
  219. projects = result.content.ToObject<List<ScProject>>();
  220. }
  221. else {
  222. }
  223. return new OkObjectResult(new { data = projects.ToJsonString() });
  224. }
  225. catch (Exception ex)
  226. {
  227. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectInfoByTrainComID\n{ex.Message}{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  228. return new OkObjectResult(new { data = projects.ToJsonString() });
  229. }
  230. }
  231. /// <summary>
  232. /// 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表
  233. /// </summary>
  234. /// <param name="req"></param>
  235. /// <param name="log"></param>
  236. /// <returns></returns>
  237. [FunctionName("GetSchoolList")]
  238. public async Task<IActionResult> GetSchoolList([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
  239. {
  240. List<ScSchool> scSchools = new List<ScSchool>();
  241. string data = await new StreamReader(req.Body).ReadToEndAsync();
  242. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  243. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  244. Code = "GetSchoolList";
  245. parameterMap = new Dictionary<string, object>();
  246. parameterMap.Add("TrainComID", config.trainComID);
  247. List<ScsResult> results = new List<ScsResult>();
  248. try
  249. {
  250. if (config.p.IsNotEmpty())
  251. {
  252. foreach (var ps in config.p)
  253. {
  254. parameterMap["ProjectID"] = ps.pd;
  255. parameterMap["ProjectItemID"] = ps.pid;
  256. ScsResult result = new ScsResult { code = Code, title = " 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表" };
  257. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  258. if (result.result)
  259. {
  260. List<ScSchool> schools = result.content.ToObject<List<ScSchool>>();
  261. if (schools.IsNotEmpty())
  262. {
  263. scSchools.AddRange(schools);
  264. }
  265. }
  266. results.Add(result);
  267. }
  268. }
  269. return new OkObjectResult(new { data = scSchools.ToJsonString() });
  270. }
  271. catch (Exception ex)
  272. {
  273. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolList\n{ex.Message}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  274. return new OkObjectResult(new { data = scSchools.ToJsonString() });
  275. }
  276. }
  277. /// <summary>
  278. /// 5.3.1.2获取学员名单
  279. /// </summary>
  280. /// <param name="req"></param>
  281. /// <param name="log"></param>
  282. /// <returns></returns>
  283. [FunctionName("GetTeachersListByProject")]
  284. public async Task<IActionResult> GetTeachersListByProject([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
  285. {
  286. List<ScTeacher> scTeachers = new List<ScTeacher>();
  287. string data = await new StreamReader(req.Body).ReadToEndAsync();
  288. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  289. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  290. Code = "GetTeachersListByProject";
  291. parameterMap = new Dictionary<string, object>();
  292. parameterMap.Add("TrainComID", config.trainComID);
  293. List<ScsResult> results = new List<ScsResult>();
  294. try
  295. {
  296. if (config.p.IsNotEmpty())
  297. {
  298. foreach (var ps in config.p)
  299. {
  300. parameterMap["ProjectID"] = ps.pd;
  301. parameterMap["ProjectItemID"] = ps.pid;
  302. ScsResult result = new ScsResult { code = Code, title = "5.3.1.2获取学员名单" };
  303. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  304. if (result.result)
  305. {
  306. List<ScTeacher> teachers = result.content.ToObject<List<ScTeacher>>();
  307. if (teachers.IsNotEmpty())
  308. {
  309. scTeachers.AddRange(teachers);
  310. }
  311. }
  312. results.Add(result);
  313. }
  314. }
  315. return new OkObjectResult(new { data = scTeachers.ToJsonString() });
  316. }
  317. catch (Exception ex)
  318. {
  319. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetTeachersListByProject\n{ex.Message}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  320. return new OkObjectResult(new { data = scTeachers.ToJsonString() });
  321. }
  322. }
  323. /// <summary>
  324. /// 5.3.1.20获取学校设置的可选能力点
  325. /// </summary>
  326. /// <param name="req"></param>
  327. /// <param name="log"></param>
  328. /// <returns></returns>
  329. [FunctionName("GetSchoolDiagnosis")]
  330. public async Task<IActionResult> GetSchoolDiagnosis([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log) {
  331. List<ScsProjectDiagnosis> projects = new List<ScsProjectDiagnosis>();
  332. string data = await new StreamReader(req.Body).ReadToEndAsync();
  333. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  334. JsonElement schoolCode = data.ToObject<JsonElement>().GetProperty("schoolCode");
  335. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  336. Code = "GetSchoolDiagnosis";
  337. parameterMap = new Dictionary<string, object>();
  338. parameterMap.Add("TrainComID", config.trainComID);
  339. List<ScsResult> results = new List<ScsResult>();
  340. try
  341. {
  342. if (config.p.IsNotEmpty())
  343. {
  344. foreach (var ps in config.p)
  345. {
  346. parameterMap["ProjectID"] = ps.pd;
  347. parameterMap["ProjectItemID"] = ps.pid;
  348. parameterMap["SchoolID"] = $"{schoolCode}";
  349. parameterMap["School"] = $"{schoolCode}";
  350. ScsResult result = new ScsResult { code = Code, title = " 5.3.1.20获取学校设置的可选能力点" };
  351. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  352. if (result.result)
  353. {
  354. List<ScPDiagnosis> diagnoses = result.content.ToObject<List<ScPDiagnosis>>();
  355. if (diagnoses.IsNotEmpty())
  356. {
  357. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses });
  358. await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { RowKey = $"{ps.pid}-{schoolCode}", PartitionKey = "ScSchoolDiagnosis", abilityNos = diagnoses.ToJsonString() });
  359. }
  360. }
  361. else
  362. {
  363. List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } });
  364. if (teacherDiagnoses.IsNotEmpty())
  365. {
  366. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
  367. }
  368. }
  369. results.Add(result);
  370. }
  371. }
  372. return new OkObjectResult(new { data = projects.ToJsonString() });
  373. }
  374. catch (Exception ex)
  375. {
  376. //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSchoolDiagnosis\n{ex.Message}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  377. if (config.p.IsNotEmpty()) {
  378. foreach (var ps in config.p)
  379. {
  380. List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScSchoolDiagnosis" }, { "RowKey", $"{ps.pid}-{schoolCode}" } });
  381. if (teacherDiagnoses.IsNotEmpty())
  382. {
  383. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
  384. }
  385. }
  386. }
  387. return new OkObjectResult(new { data = projects.ToJsonString() });
  388. }
  389. }
  390. /// <summary>
  391. /// 5.3.1.19获取项目设置的可选能力点
  392. /// </summary>
  393. /// <param name="req"></param>
  394. /// <param name="log"></param>
  395. /// <returns></returns>
  396. [FunctionName("GetProjectDiagnosis")]
  397. public async Task<IActionResult> GetProjectDiagnosis([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
  398. {
  399. List<ScsProjectDiagnosis> projects = new List<ScsProjectDiagnosis> () ;
  400. string data = await new StreamReader(req.Body).ReadToEndAsync();
  401. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  402. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  403. Code = "GetProjectDiagnosis";
  404. parameterMap = new Dictionary<string, object>();
  405. parameterMap.Add("TrainComID", config.trainComID);
  406. List<ScsResult> results = new List<ScsResult>();
  407. try
  408. {
  409. if (config.p.IsNotEmpty())
  410. {
  411. foreach (var ps in config.p)
  412. {
  413. parameterMap["ProjectID"] = ps.pd;
  414. parameterMap["ProjectItemID"] = ps.pid;
  415. ScsResult result = new ScsResult { code = Code, title = "5.3.1.19获取项目设置的可选能力点" };
  416. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  417. if (result.result)
  418. {
  419. List<ScPDiagnosis> diagnoses = result.content.ToObject<List<ScPDiagnosis>>();
  420. if (diagnoses.IsNotEmpty())
  421. {
  422. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses });
  423. await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { RowKey = $"{ps.pid}", PartitionKey = "ScProjectDiagnosis", abilityNos = diagnoses.ToJsonString() });
  424. }
  425. }
  426. else
  427. {
  428. List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScProjectDiagnosis" }, { "RowKey", $"{ps.pid}" } });
  429. if (teacherDiagnoses.IsNotEmpty())
  430. {
  431. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
  432. }
  433. }
  434. results.Add(result);
  435. }
  436. }
  437. return new OkObjectResult(new { data = projects.ToJsonString() });
  438. }
  439. catch (Exception ex)
  440. {
  441. if (config.p.IsNotEmpty()) {
  442. foreach (var ps in config.p)
  443. {
  444. //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetProjectDiagnosis\n{ex.Message}{ex.StackTrace}\n{results.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  445. List<ScProjectDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScProjectDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScProjectDiagnosis" }, { "RowKey", $"{ps.pid}" } });
  446. if (teacherDiagnoses.IsNotEmpty())
  447. {
  448. projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = teacherDiagnoses[0].abilityNos.ToObject<List<ScPDiagnosis>>() });
  449. }
  450. }
  451. }
  452. return new OkObjectResult(new { data = projects.ToJsonString() });
  453. }
  454. }
  455. /// <summary>
  456. /// 5.3.1.3通过项目编号获取学员测评能力项V2
  457. /// </summary>
  458. /// <param name="req"></param>
  459. /// <param name="log"></param>
  460. /// <returns></returns>
  461. [FunctionName("GetDiagnosisListByProject_V2")]
  462. public async Task<IActionResult> GetDiagnosisListByProject_V2([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log) {
  463. List<string> abilityNos = new List<string>();
  464. string data = await new StreamReader(req.Body).ReadToEndAsync();
  465. JsonElement accessConfig= data.ToObject<JsonElement>().GetProperty("accessConfig");
  466. JsonElement pxid = data.ToObject<JsonElement>().GetProperty("pxid");
  467. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  468. Code = "GetDiagnosisListByProject_V2";
  469. parameterMap = new Dictionary<string, object>();
  470. parameterMap.Add("TrainComID", config.trainComID);
  471. parameterMap.Add("PXID", pxid);
  472. ScsResult result = new ScsResult { code = Code, title = "5.3.1.3通过项目编号获取学员测评能力项V2" };
  473. try
  474. {
  475. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  476. if (result.result)
  477. {
  478. List<ScDiagnosis> diagnoses = result.content.ToObject<List<ScDiagnosis>>();
  479. if (diagnoses != null)
  480. {
  481. abilityNos = diagnoses.Select(x => x.DiagnosisDicNum).ToList();
  482. }
  483. if (abilityNos .IsNotEmpty()) {
  484. await _azureStorage.SaveOrUpdate<ScTeacherDiagnosis>(new ScTeacherDiagnosis { RowKey = $"{pxid}", PartitionKey = "ScTeacherDiagnosis",abilityNos=abilityNos.ToJsonString() });
  485. }
  486. }
  487. else {
  488. List<ScTeacherDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" }, { "RowKey", $"{pxid}" } });
  489. if (teacherDiagnoses.IsNotEmpty()) {
  490. abilityNos = teacherDiagnoses[0].abilityNos.ToObject<List<string>>();
  491. }
  492. }
  493. return new OkObjectResult(new { data= abilityNos .ToJsonString()});
  494. }
  495. catch (Exception ex)
  496. {
  497. //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:getDiagnosisListByProject_V2\n{ex.Message}{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  498. List<ScTeacherDiagnosis> teacherDiagnoses = await _azureStorage.FindListByDict<ScTeacherDiagnosis>(new Dictionary<string, object> { { "PartitionKey", "ScTeacherDiagnosis" }, { "RowKey", $"{pxid}" } });
  499. if (teacherDiagnoses.IsNotEmpty())
  500. {
  501. abilityNos = teacherDiagnoses[0].abilityNos.ToObject<List<string>>();
  502. }
  503. return new OkObjectResult(new { data = abilityNos.ToJsonString() });
  504. }
  505. }
  506. /// <summary>
  507. /// 5.3.1.11获取跳转学员信息,用于sso单点,后端验证。
  508. /// </summary>
  509. /// <param name="req"></param>
  510. /// <param name="log"></param>
  511. /// <returns></returns>
  512. [FunctionName("GetSingleTeacherByProject")]
  513. public async Task<IActionResult> GetSingleTeacherByProject([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
  514. {
  515. string teacher=null;
  516. string data = await new StreamReader(req.Body).ReadToEndAsync();
  517. JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
  518. JsonElement pxid = data.ToObject<JsonElement>().GetProperty("pxid");
  519. JsonElement tid = data.ToObject<JsonElement>().GetProperty("tid");
  520. ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
  521. Code = "GetSingleTeacherByProject";
  522. parameterMap = new Dictionary<string, object>();
  523. parameterMap.Add("TrainComID", config.trainComID);
  524. parameterMap.Add("Pxid", $"{pxid}");
  525. parameterMap.Add("Tid", $"{tid}");
  526. ScsResult result = new ScsResult { code = Code, title = "5.3.1.11获取跳转学员信息,用于sso单点,后端验证。" };
  527. try
  528. {
  529. ///{“result”:true,”reason”:null,”content”:”{“PXID”:””,”TID”:””,”TeacherName”:””,”ProjectTitle”:””,”ProjectItemTitle”:””,”CityName”:””,
  530. ///”DisName”:””,”SchoolName”:””,”Sex”:””,”PXXK”:””,”PXXD”:””,”TeacherXK”:””,”TeacherXD”:””,”Email”:””}”,”pagecount”:1}
  531. result = await _thirdApisService.Post(config.url, Code, config.passKey, config.privateKey, parameterMap);
  532. if (result.result)
  533. {
  534. teacher = result.content;
  535. }
  536. return new OkObjectResult(new {data= teacher });
  537. }
  538. catch (Exception ex)
  539. {
  540. //await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")},IES5.ScApisService:GetSingleTeacherByProject\n{ex.Message}{ex.StackTrace}\n{result.ToJsonString()}\n{data}", GroupNames.成都开发測試群組);
  541. return new OkObjectResult(new { data = teacher });
  542. }
  543. }
  544. public (int t53112OK, List<KeyValuePair<string, string>> msgs) check53112(TeacherTrain teacherTrain, List<KeyValuePair<string, string>> msgs)
  545. {
  546. //校验 基本情况是否满足
  547. int t53112OK = 1;
  548. if (teacherTrain.finalScore < 0)
  549. {
  550. msgs.Add(new KeyValuePair<string, string>("finalScore", $"最终评定结果参数:{teacherTrain.finalScore}"));
  551. t53112OK = 0;
  552. }
  553. if (string.IsNullOrEmpty(teacherTrain.summary) || teacherTrain.summary.Length > 300)
  554. {
  555. string msg = string.IsNullOrEmpty(teacherTrain.summary) ? "未填写" : teacherTrain.summary.Length > 300 ? "字数超过300." : "";
  556. msgs.Add(new KeyValuePair<string, string>("summary", $"教师培训总结:{msg}"));
  557. t53112OK = 0;
  558. }
  559. if (teacherTrain.totalTime <= 0)
  560. {
  561. msgs.Add(new KeyValuePair<string, string>("totalTime", $"未获得学时:{teacherTrain.totalTime}"));
  562. t53112OK = 0;
  563. }
  564. return (t53112OK, msgs);
  565. }
  566. public (int t53112OK, List<KeyValuePair<string, string>> msgs) check53113(TeacherTrain teacherTrain, List<KeyValuePair<string, string>> msgs)
  567. {
  568. //校验 基本情况是否满足
  569. int t53112OK = 1;
  570. if (teacherTrain.finalScore < 0)
  571. {
  572. msgs.Add(new KeyValuePair<string, string>("finalScore", $"最终评定结果参数:{teacherTrain.finalScore}"));
  573. t53112OK = 0;
  574. }
  575. if (string.IsNullOrEmpty(teacherTrain.summary) || teacherTrain.summary.Length > 300)
  576. {
  577. string msg = string.IsNullOrEmpty(teacherTrain.summary) ? "未填写" : teacherTrain.summary.Length > 300 ? "字数超过300." : "";
  578. msgs.Add(new KeyValuePair<string, string>("summary", $"教师培训总结:{msg}"));
  579. t53112OK = 0;
  580. }
  581. if (teacherTrain.totalTime <= 0)
  582. {
  583. msgs.Add(new KeyValuePair<string, string>("totalTime", $"未获得学时:{teacherTrain.totalTime}"));
  584. t53112OK = 0;
  585. }
  586. return (t53112OK, msgs);
  587. }
  588. }
  589. }