ScsYxptApis.cs 33 KB

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