ScController.cs 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Models;
  7. using TEAMModelOS.SDK.DI;
  8. using System.Text.Json;
  9. using TEAMModelOS.SDK.Models;
  10. using Microsoft.AspNetCore.Http;
  11. using TEAMModelOS.SDK.Extension;
  12. using Azure.Cosmos;
  13. using System.Text;
  14. using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
  15. using Microsoft.Extensions.Options;
  16. using Azure.Messaging.ServiceBus;
  17. using Microsoft.Extensions.Configuration;
  18. using TEAMModelOS.Services.Common;
  19. using HTEXLib.COMM.Helpers;
  20. using TEAMModelOS.SDK;
  21. using System.IdentityModel.Tokens.Jwt;
  22. using TEAMModelOS.Services;
  23. using TEAMModelOS.SDK.Models.Service;
  24. using System.IO;
  25. using System.Dynamic;
  26. using Microsoft.AspNetCore.Authorization;
  27. using Azure.Storage.Blobs.Models;
  28. namespace TEAMModelOS.Controllers.Third
  29. {
  30. /// <summary>
  31. ///
  32. /// </summary>
  33. ///
  34. [ProducesResponseType(StatusCodes.Status200OK)]
  35. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  36. //[Authorize(Roles = "IES5")]
  37. [Route("sc")]
  38. //[Route("api/[controller]")]
  39. [ApiController]
  40. public class ScController : ControllerBase
  41. {
  42. private readonly SnowflakeId _snowflakeId;
  43. private readonly AzureCosmosFactory _azureCosmos;
  44. private readonly DingDing _dingDing;
  45. private readonly Option _option;
  46. private readonly AzureStorageFactory _azureStorage;
  47. private readonly AzureServiceBusFactory _serviceBus;
  48. private readonly AzureRedisFactory _azureRedis;
  49. private readonly CoreAPIHttpService _accountHttpService;
  50. private readonly ScsApisService _scsApisService;
  51. public readonly string type = "scsyxpt";
  52. /// <summary>
  53. /// 机构安全码
  54. /// </summary>
  55. public string _sc_passKey;
  56. /// <summary>
  57. /// 机构ID
  58. /// </summary>
  59. public string _sc_trainComID;
  60. /// <summary>
  61. /// 机构 AES 密钥
  62. /// </summary>
  63. public string _sc_privateKey;
  64. /// <summary>
  65. /// 访问地址
  66. /// </summary>
  67. public string _sc_url;
  68. public IConfiguration _configuration { get; set; }
  69. public ScController(AzureCosmosFactory azureCosmos, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option, AzureStorageFactory azureStorage,
  70. AzureRedisFactory azureRedis, AzureServiceBusFactory serviceBus, IConfiguration configuration, CoreAPIHttpService accountHttpService, ScsApisService scsApisService)
  71. {
  72. _azureCosmos = azureCosmos;
  73. _snowflakeId = snowflakeId;
  74. _dingDing = dingDing;
  75. _option = option?.Value;
  76. _azureStorage = azureStorage;
  77. _serviceBus = serviceBus;
  78. _configuration = configuration;
  79. _azureRedis = azureRedis;
  80. _accountHttpService = accountHttpService;
  81. _scsApisService = scsApisService;
  82. _sc_passKey = _configuration.GetValue<string>("Third:scsyxpt:passKey");
  83. _sc_trainComID = _configuration.GetValue<string>("Third:scsyxpt:trainComID");
  84. _sc_privateKey = _configuration.GetValue<string>("Third:scsyxpt:privateKey");
  85. _sc_url = _configuration.GetValue<string>("Third:scsyxpt:url");
  86. }
  87. /// <summary>
  88. ///
  89. /// </summary>
  90. /// <param name="json"></param>
  91. /// <returns></returns>
  92. [ProducesDefaultResponseType]
  93. [HttpPost("get-list")]
  94. [AllowAnonymous]
  95. public async Task<IActionResult> GetProjectList(JsonElement json) {
  96. // 5.3.1.1获取项目列表
  97. string trainComID = _sc_trainComID;
  98. string Code = "GetProjectInfoByTrainComID";
  99. Dictionary<string, object> parameterMap = new Dictionary<string, object>();
  100. parameterMap.Add("TrainComID", _sc_trainComID);
  101. ScsResult GetProjectInfoByTrainComID = await _scsApisService.Post(_sc_url, Code, _sc_passKey,_sc_privateKey, parameterMap);
  102. GetProjectInfoByTrainComID.code = Code;
  103. GetProjectInfoByTrainComID.title = "5.3.1.1获取项目列表";
  104. // 5.3.1.2获取学员名单
  105. Code = "GetTeachersListByProject";
  106. parameterMap = new Dictionary<string, object>();
  107. parameterMap.Add("TrainComID", trainComID);
  108. parameterMap.Add("ProjectID", "22");
  109. parameterMap.Add("ProjectItemID", "23");
  110. ScsResult GetTeachersListByProject = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  111. GetTeachersListByProject.code = Code;
  112. GetTeachersListByProject.title = "5.3.1.2获取学员名单";
  113. // 5.3.1.3通过项目编号获取学员测评能力项
  114. Code = "GetDiagnosisListByProject";
  115. parameterMap = new Dictionary<string, object>();
  116. parameterMap.Add("TrainComID", trainComID);
  117. parameterMap.Add("ProjectID", "22");
  118. parameterMap.Add("ProjectItemID", "22");
  119. parameterMap.Add("PXID", "28496");
  120. ScsResult GetDiagnosisListByProject = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  121. GetDiagnosisListByProject.code = Code;
  122. GetDiagnosisListByProject.title = "5.3.1.3通过项目编号获取学员测评能力项";
  123. // 补充
  124. // 5.3.1.3通过项目编号获取学员测评能力项
  125. Code = "GetDiagnosisListByProject_V2";
  126. parameterMap = new Dictionary<string, object>();
  127. parameterMap.Add("TrainComID", trainComID);
  128. //parameterMap.Add("ProjectID", "22");
  129. //parameterMap.Add("ProjectItemID", "22");
  130. parameterMap.Add("PXID", "28496");
  131. ScsResult GetDiagnosisListByProject_V2 = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  132. GetDiagnosisListByProject_V2.code = Code;
  133. GetDiagnosisListByProject_V2.title = "5.3.1.3通过项目编号获取学员测评能力项V2";
  134. ScsResult UpdateTeacherSituation = null;
  135. // 5.3.1.4学员培训基本情况回写
  136. try {
  137. Code = "UpdateTeacherSituation";
  138. parameterMap = new Dictionary<string, object>();
  139. parameterMap.Add("TrainComID", trainComID);
  140. parameterMap.Add("PXID", "23");
  141. parameterMap.Add("TID", "145504");
  142. parameterMap.Add("TeacherName", "柏成伟");
  143. parameterMap.Add("CourseHour", "50");
  144. parameterMap.Add("ResearchText", "学习成果描述,字符长度<=300");
  145. parameterMap.Add("ComPassed", "2");//0、未认定 1、合格 2、优秀 3、不合格 4、其他
  146. UpdateTeacherSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  147. UpdateTeacherSituation.code = Code;
  148. UpdateTeacherSituation.title = "5.3.1.4学员培训基本情况回写";
  149. } catch (Exception ex) { }
  150. ScsResult UpdateTeacherDiagnosis = null;
  151. try
  152. {
  153. // 5.3.1.5学员能力点测评结果回写
  154. Code = "UpdateTeacherDiagnosis";
  155. parameterMap = new Dictionary<string, object>();
  156. parameterMap.Add("TrainComID", trainComID);
  157. parameterMap.Add("PXID", "65314");
  158. parameterMap.Add("TID", "17542");
  159. parameterMap.Add("DiagnosisNum", "A3");
  160. //0"未认定", 1"合格", 2"优秀", 3"不合格"
  161. parameterMap.Add("zpresult", "1");
  162. parameterMap.Add("hpresult", "1");
  163. parameterMap.Add("xzpresult", "1");
  164. List<Dictionary<string, string>> pfilesA = new List<Dictionary<string, string>>();
  165. parameterMap.Add("pfiles", pfilesA);
  166. Dictionary<string, string> pfileMapA = new Dictionary<string, string>();
  167. pfileMapA.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
  168. pfileMapA.Add("fileName", "XXX.pdf");
  169. pfileMapA.Add("fileSize", "247767");
  170. pfileMapA.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  171. pfileMapA.Add("fileType", "pdf");
  172. pfilesA.Add(pfileMapA);
  173. UpdateTeacherDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  174. UpdateTeacherDiagnosis.code = Code;
  175. UpdateTeacherDiagnosis.title = "5.3.1.5学员能力点测评结果回写";
  176. }
  177. catch (Exception ex) {
  178. }
  179. // 5.3.1.6获取能力测评体系字典值数据
  180. Code = "GetDiagnosisDic";
  181. parameterMap = new Dictionary<string, object>();
  182. parameterMap.Add("TrainComID", trainComID);
  183. ScsResult GetDiagnosisDic = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  184. GetDiagnosisDic.code = Code;
  185. GetDiagnosisDic.title = "5.3.1.6获取能力测评体系字典值数据";
  186. // 5.3.1.7获取能力测评评价类型字典值数据
  187. Code = "GetDiagnosisItemDic";
  188. parameterMap = new Dictionary<string, object>();
  189. parameterMap.Add("TrainComID", trainComID);
  190. parameterMap.Add("DiagnosisDicID", "3");
  191. ScsResult GetDiagnosisItemDic = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  192. GetDiagnosisItemDic.code = Code;
  193. GetDiagnosisItemDic.title = "5.3.1.7获取能力测评评价类型字典值数据";
  194. // 5.3.1.8获取能力测评评价类型细则字典值数据
  195. Code = "GetchoiceDic";
  196. parameterMap = new Dictionary<string, object>();
  197. parameterMap.Add("TrainComID", trainComID);
  198. parameterMap.Add("DiagnosisItemID", "4");
  199. ScsResult GetchoiceDic = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  200. GetchoiceDic.code = Code;
  201. GetchoiceDic.title = "5.3.1.8获取能力测评评价类型细则字典值数据";
  202. // 5.3.1.9根据培训ID与机构ID获取老师信息
  203. Code = "GetTeacherInfoByPXID";
  204. parameterMap = new Dictionary<string, object>();
  205. parameterMap.Add("TrainComID", trainComID);
  206. parameterMap.Add("PXID", "55024");
  207. ScsResult GetTeacherInfoByPXID = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  208. GetTeacherInfoByPXID.code = Code;
  209. GetTeacherInfoByPXID.title = "5.3.1.9根据培训ID与机构ID获取老师信息";
  210. // 5.3.1.10根据培训项目ID与学校ID获取学校方案
  211. Code = "GetSchoolPlanBySchoolID";
  212. parameterMap = new Dictionary<string, object>();
  213. parameterMap.Add("TrainComID", trainComID);
  214. parameterMap.Add("ProjectItemID", "3");
  215. parameterMap.Add("SchoolID", "220913");
  216. parameterMap.Add("Type", "0");
  217. ScsResult GetSchoolPlanBySchoolID = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  218. GetSchoolPlanBySchoolID.code = Code;
  219. GetSchoolPlanBySchoolID.title = "5.3.1.10根据培训项目ID与学校ID获取学校方案";
  220. // 5.3.1.11获取跳转学员信息
  221. Code = "GetSingleTeacherByProject";
  222. parameterMap = new Dictionary<string, object>();
  223. parameterMap.Add("TrainComID", trainComID);
  224. parameterMap.Add("Pxid", "55024");
  225. parameterMap.Add("Tid", "38616");
  226. ScsResult GetSingleTeacherByProject = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  227. GetSingleTeacherByProject.code = Code;
  228. GetSingleTeacherByProject.title = "5.3.1.11获取跳转学员信息";
  229. ScsResult UpdateTeacherListSituation = null;
  230. Dictionary<string, object> parameterContent = new Dictionary<string, object>();
  231. List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
  232. try
  233. { // 5.3.1.12学员培训基本情况批量回写
  234. Code = "UpdateTeacherListSituation";
  235. parameterContent.Add("TrainComID", trainComID);
  236. parameterContent.Add("List", list);
  237. // {"TrainComID":"39","List":[{"ResearchText":"","ComPassed":1,"PXID":"35455","CourseHour":"50.0","TID":"411105","TeacherName":"付绍令"}]}
  238. {
  239. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  240. parameterMapData.Add("PXID", "23");
  241. parameterMapData.Add("TID", "145504");
  242. parameterMapData.Add("TeacherName", "柏成伟");
  243. parameterMapData.Add("CourseHour", "50");
  244. parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
  245. parameterMapData.Add("ComPassed", "2");//0、未认定 1、合格 2、优秀 3、不合格 4、其他
  246. list.Add(parameterMapData);
  247. parameterMapData = new Dictionary<string, object>();
  248. parameterMapData.Add("PXID", "23");
  249. parameterMapData.Add("TID", "145504");
  250. parameterMapData.Add("TeacherName", "柏成伟");
  251. parameterMapData.Add("CourseHour", "50");
  252. parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
  253. parameterMapData.Add("ComPassed", "2");//0、未认定 1、合格 2、优秀 3、不合格 4、其他
  254. list.Add(parameterMapData);
  255. parameterMapData = new Dictionary<string, object>();
  256. parameterMapData.Add("PXID", "22");
  257. parameterMapData.Add("TID", "21348");
  258. parameterMapData.Add("TeacherName", "邓泽燕");
  259. parameterMapData.Add("CourseHour", "50");
  260. parameterMapData.Add("ResearchText", "学习成果描述,字符长度<=300");
  261. parameterMapData.Add("ComPassed", "2");//0、未认定 1、合格 2、优秀 3、不合格 4、其他
  262. list.Add(parameterMapData);
  263. parameterMapData = new Dictionary<string, object>();
  264. parameterMapData.Add("PXID", "35546");
  265. parameterMapData.Add("TID", "411182");
  266. parameterMapData.Add("TeacherName", "刘晓莉");
  267. parameterMapData.Add("CourseHour", "50");
  268. parameterMapData.Add("ResearchText", "");
  269. parameterMapData.Add("ComPassed", "1");//0、未认定 1、合格 2、优秀 3、不合格 4、其他
  270. list.Add(parameterMapData);
  271. }
  272. UpdateTeacherListSituation = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
  273. UpdateTeacherListSituation.code = Code;
  274. UpdateTeacherListSituation.title = "5.3.1.12学员培训基本情况批量回写";
  275. }
  276. catch (Exception ex) { }
  277. ScsResult UpdateTeacherListDiagnosis = null;
  278. try
  279. { // 5.3.1.13学员能力点测评结果批量回写
  280. Code = "UpdateTeacherListDiagnosis";
  281. parameterContent = new Dictionary<string, object>();
  282. list = new List<Dictionary<string, object>>();
  283. parameterContent.Add("TrainComID", trainComID);
  284. parameterContent.Add("List", list);
  285. {
  286. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  287. parameterMapData.Add("PXID", "3079");
  288. parameterMapData.Add("TID", "14597");
  289. parameterMapData.Add("DiagnosisNum", "A6");
  290. //0"未认定", 1"合格", 2"优秀", 3"不合格"
  291. parameterMapData.Add("zpresult", "1");
  292. parameterMapData.Add("hpresult", "2");
  293. parameterMapData.Add("xzpresult", "2");
  294. List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
  295. parameterMapData.Add("pfiles", pfiles);
  296. Dictionary<string, object> pfileMap = new Dictionary<string, object>();
  297. pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055398463iE97VWe36i001.mp4");
  298. pfileMap.Add("fileName", "697a58c2375f7a031456c893e1e1860c.mp4");
  299. pfileMap.Add("fileSize", "17036168");
  300. pfileMap.Add("md5", "");
  301. pfileMap.Add("fileType", "video");
  302. pfiles.Add(pfileMap);
  303. list.Add(parameterMapData);
  304. pfileMap = new Dictionary<string, object>();
  305. pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619055446704gbKuNF8eas001.pdf");
  306. pfileMap.Add("fileName", "A6技术支持的课堂反思.pdf");
  307. pfileMap.Add("fileSize", "32192");
  308. pfileMap.Add("md5", "");
  309. pfileMap.Add("fileType", "pdf");
  310. pfiles.Add(pfileMap);
  311. list.Add(parameterMapData);
  312. }
  313. {
  314. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  315. parameterMapData.Add("PXID", "3062");
  316. parameterMapData.Add("TID", "401268");
  317. parameterMapData.Add("DiagnosisNum", "A1");
  318. //0"未认定", 1"合格", 2"优秀", 3"不合格"
  319. parameterMapData.Add("zpresult", "1");
  320. parameterMapData.Add("hpresult", "2");
  321. parameterMapData.Add("xzpresult", "2");
  322. List<Dictionary<string, object>> pfiles = new List<Dictionary<string, object>>();
  323. parameterMapData.Add("pfiles", pfiles);
  324. Dictionary<string, object> pfileMap = new Dictionary<string, object>();
  325. pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058650000bphKFbDVSa001.pdf");
  326. pfileMap.Add("fileName", "学情分析.pdf");
  327. pfileMap.Add("fileSize", "94926");
  328. pfileMap.Add("md5", "");
  329. pfileMap.Add("fileType", "pdf");
  330. pfiles.Add(pfileMap);
  331. list.Add(parameterMapData);
  332. pfileMap = new Dictionary<string, object>();
  333. pfileMap.Add("url", "https://srt-read-online.3ren.cn/basebusiness/material/20210422/1619058698452gF19jmiuML001.mp4");
  334. pfileMap.Add("fileName", "种子萌发学情分析.mp4");
  335. pfileMap.Add("fileSize", "12692368");
  336. pfileMap.Add("md5", "");
  337. pfileMap.Add("fileType", "video");
  338. pfiles.Add(pfileMap);
  339. list.Add(parameterMapData);
  340. }
  341. UpdateTeacherListDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
  342. UpdateTeacherListDiagnosis.code = Code;
  343. UpdateTeacherListDiagnosis.title = "5.3.1.13学员能力点测评结果批量回写";
  344. }
  345. catch (Exception ex) {
  346. }
  347. ScsResult UploadSBTARPDF = null;
  348. try
  349. { // 5.3.1.14学员校本研修PDF回写
  350. Code = "UploadSBTARPDF";
  351. parameterMap = new Dictionary<string, object>();
  352. parameterMap.Add("TrainComID", trainComID);
  353. parameterMap.Add("PXID", "16");
  354. parameterMap.Add("TID", "16");
  355. parameterMap.Add("url", "http://image1.cersp.com.cn/scpx/images/article/file/20190318/upload__51f98fc8_1697695ae73__7ffe_00001297.pdf");
  356. parameterMap.Add("fileName", "XXX.pdf");
  357. parameterMap.Add("fileSize", "247767");
  358. parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  359. parameterMap.Add("fileType", "pdf");
  360. UploadSBTARPDF = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  361. UploadSBTARPDF.code = Code;
  362. UploadSBTARPDF.title = "5.3.1.14学员校本研修PDF回写";
  363. }
  364. catch (Exception ex) {
  365. }
  366. ScsResult UploadSBTARPDFList = null;
  367. try
  368. { // 5.3.1.15学员校本教研PDF批量回写
  369. Code = "UploadSBTARPDFList";
  370. parameterContent = new Dictionary<string, object>();
  371. list = new List<Dictionary<string, object>>();
  372. parameterContent.Add("TrainComID", trainComID);
  373. parameterContent.Add("List", list);
  374. {
  375. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  376. parameterMapData.Add("PXID", "65309");
  377. parameterMapData.Add("TID", "253940");
  378. parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
  379. parameterMapData.Add("fileName", "XXX.pdf");
  380. parameterMapData.Add("fileSize", "247767");
  381. parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  382. parameterMapData.Add("fileType", "pdf");
  383. list.Add(parameterMapData);
  384. }
  385. {
  386. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  387. parameterMapData.Add("PXID", "65306");
  388. parameterMapData.Add("TID", "32393");
  389. parameterMapData.Add("url", "https://scnltsfiles.scedu.com.cn/upload/infofj/202104011628463774.pdf");
  390. parameterMapData.Add("fileName", "XXX.pdf");
  391. parameterMapData.Add("fileSize", "247767");
  392. parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  393. parameterMapData.Add("fileType", "pdf");
  394. list.Add(parameterMapData);
  395. }
  396. UploadSBTARPDFList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
  397. UploadSBTARPDFList.code = Code;
  398. UploadSBTARPDFList.title = "5.3.1.15学员校本教研PDF批量回写";
  399. }
  400. catch (Exception ex) { }
  401. ScsResult UploadKTSL = null;
  402. try
  403. {
  404. // 5.3.1.16学员课堂实录回写
  405. Code = "UploadKTSL";
  406. parameterMap = new Dictionary<string, object>();
  407. parameterMap.Add("TrainComID", trainComID);
  408. parameterMap.Add("PXID", "16");
  409. parameterMap.Add("TID", "16");
  410. parameterMap.Add("url", "https://xxx.mp4");
  411. parameterMap.Add("url2", "https://xxx.mp4");
  412. parameterMap.Add("fileName", "XXX.mp4");
  413. parameterMap.Add("fileSize", "247767");
  414. parameterMap.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  415. parameterMap.Add("fileType", "mp4");
  416. UploadKTSL = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  417. UploadKTSL.code = Code;
  418. UploadKTSL.title = "5.3.1.16学员课堂实录回写";
  419. } catch (Exception ex) { }
  420. ScsResult UploadKTSLList = null;
  421. try
  422. {
  423. // 5.3.1.17学员课堂实录批量回写
  424. Code = "UploadKTSLList";
  425. parameterContent = new Dictionary<string, object>();
  426. list = new List<Dictionary<string, object>>();
  427. parameterContent.Add("TrainComID", trainComID);
  428. parameterContent.Add("List", list);
  429. {
  430. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  431. parameterMapData.Add("PXID", "16");
  432. parameterMapData.Add("TID", "16");
  433. parameterMapData.Add("url", "https://xxx.mp4");
  434. parameterMapData.Add("url2", "https://xxx.mp4");
  435. parameterMapData.Add("fileName", "XXX.mp4");
  436. parameterMapData.Add("fileSize", "247767");
  437. parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  438. parameterMapData.Add("fileType", "mp4");
  439. list.Add(parameterMapData);
  440. }
  441. {
  442. Dictionary<string, object> parameterMapData = new Dictionary<string, object>();
  443. parameterMapData.Add("PXID", "16");
  444. parameterMapData.Add("TID", "16");
  445. parameterMapData.Add("url", "https://xxx.mp4");
  446. parameterMapData.Add("url2", "https://xxx.mp4");
  447. parameterMapData.Add("fileName", "XXX.mp4");
  448. parameterMapData.Add("fileSize", "247767");
  449. parameterMapData.Add("md5", "9c3da8c5c07c2c660cd73c01f56d7fca");
  450. parameterMapData.Add("fileType", "mp4");
  451. list.Add(parameterMapData);
  452. }
  453. UploadKTSLList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterContent);
  454. UploadKTSLList.code = Code;
  455. UploadKTSLList.title = "5.3.1.17学员课堂实录批量回写";
  456. }
  457. catch (Exception ex) { }
  458. // 5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表
  459. Code = "GetSchoolList";
  460. parameterMap = new Dictionary<string, object>();
  461. parameterMap.Add("TrainComID", trainComID);
  462. parameterMap.Add("ProjectID", "22");
  463. parameterMap.Add("ProjectItemID", "21");
  464. ScsResult GetSchoolList = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  465. GetSchoolList.code = Code;
  466. GetSchoolList.title = "5.3.1.18根据机构ID、项目ID、子项目ID返回学校列表";
  467. // 5.3.1.19获取项目设置的可选能力点
  468. Code = "GetProjectDiagnosis";
  469. parameterMap = new Dictionary<string, object>();
  470. parameterMap.Add("TrainComID", trainComID);
  471. parameterMap.Add("ProjectID", "22");
  472. parameterMap.Add("ProjectItemID", "21");
  473. ScsResult GetProjectDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  474. GetProjectDiagnosis.code = Code;
  475. GetProjectDiagnosis.title = "5.3.1.19获取项目设置的可选能力点";
  476. // 5.3.1.20获取学校设置的可选能力点
  477. Code = "GetSchoolDiagnosis";
  478. parameterMap = new Dictionary<string, object>();
  479. parameterMap.Add("TrainComID", trainComID);
  480. parameterMap.Add("ProjectID", "22");
  481. parameterMap.Add("ProjectItemID", "22");
  482. parameterMap.Add("SchoolID", "200001");
  483. ScsResult GetSchoolDiagnosis = await _scsApisService.Post(_sc_url, Code, _sc_passKey, _sc_privateKey, parameterMap);
  484. GetSchoolDiagnosis.code = Code;
  485. GetSchoolDiagnosis.title = "5.3.1.20获取学校设置的可选能力点";
  486. return Ok(new
  487. {
  488. GetProjectInfoByTrainComID,
  489. GetTeachersListByProject,
  490. GetDiagnosisListByProject,
  491. GetDiagnosisListByProject_V2,
  492. UpdateTeacherSituation,
  493. UpdateTeacherDiagnosis,
  494. GetDiagnosisDic,
  495. GetDiagnosisItemDic,
  496. GetchoiceDic,
  497. GetTeacherInfoByPXID,
  498. GetSchoolPlanBySchoolID,
  499. GetSingleTeacherByProject,
  500. UpdateTeacherListSituation,
  501. UpdateTeacherListDiagnosis,
  502. UploadSBTARPDF,
  503. UploadSBTARPDFList,
  504. UploadKTSL,
  505. UploadKTSLList,
  506. GetSchoolList,
  507. GetProjectDiagnosis,
  508. GetSchoolDiagnosis
  509. });
  510. //return Ok(GetProjectInfoByTrainComID);
  511. }
  512. public class ScsResult {
  513. public bool result { get; set; }
  514. public string reason { get; set; }
  515. public string content { get; set; }
  516. public string code { get; set; }
  517. public string title { get; set; }
  518. }
  519. /// <summary>
  520. ///
  521. /// </summary>
  522. /// <param name="request"></param>
  523. /// <returns></returns>
  524. [ProducesDefaultResponseType]
  525. [HttpPost("bind")]
  526. [AllowAnonymous]
  527. public async Task<IActionResult> Bind(SSO sso) {
  528. try
  529. {
  530. Teacher teacher = null;
  531. if (string.IsNullOrEmpty(sso.id_token)) {
  532. return Ok(new
  533. {
  534. location = _option.Location,
  535. status = 2,
  536. });
  537. }
  538. var jwt = new JwtSecurityToken(sso.id_token);
  539. if (!jwt.Payload.Iss.Equals("account.teammodel", StringComparison.OrdinalIgnoreCase)) return BadRequest();
  540. var id = jwt.Payload.Sub;
  541. jwt.Payload.TryGetValue("name", out object name);
  542. jwt.Payload.TryGetValue("picture", out object picture);
  543. var client = _azureCosmos.GetCosmosClient();
  544. teacher = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>(id, new PartitionKey("Base"));
  545. //先检查绑定的平台是否已经被绑定
  546. //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
  547. ScSSO scsso= sso.param.ToObject<ScSSO>();
  548. string sql = $"SELECT distinct value(c) FROM c join A1 in c.binds where A1.webid='{scsso.Webid}' and A1.tid='{scsso.tid}'";
  549. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
  550. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
  551. {
  552. teacher = item;
  553. break;
  554. }
  555. if (teacher != null)
  556. {
  557. if (teacher.id.Equals(id))
  558. {
  559. var bind = teacher.binds.Find(x => x.source.Equals($"{scsso.Webid}") && x.userid.Equals($"{scsso.tid}"));
  560. if (bind == null)
  561. {
  562. teacher.binds=new List<Teacher.ThirdBind> { new Teacher.ThirdBind { pxid = new HashSet<string> { $"{scsso.Pxid}" }, userid = $"{scsso.tid}", source = $"{scsso.Webid}", type = type } };
  563. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
  564. }
  565. else
  566. {
  567. if (bind.pxid != null)
  568. {
  569. if (bind.pxid.Add(scsso.Pxid))
  570. {
  571. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
  572. }
  573. }
  574. else {
  575. bind.pxid = new HashSet<string> { scsso.Pxid };
  576. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
  577. }
  578. }
  579. }
  580. else {
  581. return Ok(new
  582. {
  583. location = _option.Location,
  584. //账号已被别的醍摩豆id绑定
  585. status = 3,
  586. tmdid = teacher.id,
  587. name=teacher.name,
  588. tid = scsso.tid
  589. }) ;
  590. }
  591. }
  592. else {
  593. teacher = new Teacher
  594. {
  595. id = id,
  596. pk = "Base",
  597. code = "Base",
  598. name = name?.ToString(),
  599. picture = picture?.ToString(),
  600. //创建账号并第一次登录IES5则默认赠送1G
  601. size = 1,
  602. defaultSchool = null,
  603. schools = new List<Teacher.TeacherSchool>(),
  604. binds= new List<Teacher.ThirdBind> { new Teacher.ThirdBind { pxid = new HashSet<string> { $"{scsso.Pxid}" }, userid = $"{scsso.tid}", source = $"{scsso.Webid}", type = type } }
  605. };
  606. var container = _azureStorage.GetBlobContainerClient(id);
  607. await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
  608. teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
  609. }
  610. return Ok(new
  611. {
  612. location = _option.Location,
  613. status = 200,
  614. });
  615. } catch (Exception ) {
  616. return Ok(new
  617. {
  618. location = _option.Location,
  619. status = 2,
  620. });
  621. }
  622. }
  623. /// <summary>
  624. ///
  625. /// </summary>
  626. /// <param name="request"></param>
  627. /// <returns></returns>
  628. [HttpGet("sso")]
  629. [AllowAnonymous]
  630. public async Task<IActionResult> Sso([FromQuery] ScSSO sso)
  631. {
  632. var rurl = new StringBuilder($"https://{_option.HostName}/sso");
  633. string parmas = $"Pxid={sso.Pxid}&Webid={sso.Webid}&tid={sso.tid}&time={sso.time}";
  634. if (Md5Hash.GetMd5String(parmas).Equals($"{sso.Encrypt}"))
  635. {
  636. //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
  637. long ssotime = long.Parse($"{sso.time}");
  638. long nowtime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
  639. if (nowtime - ssotime > 60 * 10)//10分钟有效期
  640. {
  641. // return Ok(new { status = 2, msg = "登录超时!" });
  642. }
  643. }
  644. else
  645. {
  646. return Redirect(rurl.Append($"?status=1").ToString());
  647. }
  648. Teacher teacher = null;
  649. //四川研训平台跳转隐式登录/或者绑定IES平台接入规范
  650. //string sql = $"SELECT distinct value(c) FROM c join A1 in c.binds where A1.pxid='{sso.Pxid}' and A1.webid='{sso.Webid}' and A1.tid='{sso.tid}'";
  651. string sql = $"SELECT distinct value(c) FROM c join A1 in c.binds where A1.source='{sso.Webid}' and A1.userid='{sso.tid}'";
  652. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Teacher>(queryText: sql,
  653. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
  654. {
  655. teacher = item;
  656. break;
  657. }
  658. if (teacher == null)
  659. {
  660. return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
  661. }
  662. else
  663. {
  664. var url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
  665. var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
  666. var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
  667. var location = _option.Location;
  668. (int code, string content) = await _accountHttpService.Implicit(clientID, clientSecret, location, $"{url}/oauth2/implicit",
  669. new Dictionary<string, string>()
  670. {
  671. { "grant_type", "implicit" },
  672. { "client_id",clientID },
  673. { "account",teacher.id },
  674. { "nonce",Guid.NewGuid().ToString()}
  675. });
  676. TmdidImplicit implicit_token = new TmdidImplicit();
  677. if (!string.IsNullOrEmpty(content) && code==200)
  678. {
  679. implicit_token = content.ToObject<TmdidImplicit>();
  680. var bind = teacher.binds.Find(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
  681. if (bind != null) {
  682. if (bind.pxid != null)
  683. {
  684. if (bind.pxid.Add(sso.Pxid))
  685. {
  686. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
  687. }
  688. }
  689. else {
  690. bind.pxid = new HashSet<string> { sso.Pxid };
  691. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
  692. }
  693. }
  694. return Redirect(rurl.Append($"?status=200&id_token={implicit_token.id_token}&access_token={implicit_token.access_token}&expires_in={implicit_token.expires_in}&token_type={implicit_token.token_type}").ToString());
  695. }
  696. else {
  697. //绑定失效
  698. if (teacher.binds.IsNotEmpty()) {
  699. teacher.binds.RemoveAll(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
  700. await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher,teacher.id,new PartitionKey(teacher.code));
  701. }
  702. return Redirect(rurl.Append($"?status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
  703. }
  704. }
  705. }
  706. public record ScSSO{
  707. public string Webid { get; set; }
  708. public string Pxid { get; set; }
  709. public string tid { get; set; }
  710. public string time { get; set; }
  711. public string Encrypt { get; set; }
  712. }
  713. public record SSO
  714. {
  715. public string type { get; set; }
  716. public string param { get; set; }
  717. public string id_token { get; set; }
  718. }
  719. public record TmdidImplicit {
  720. public string id_token { get; set; }
  721. public string access_token { get; set; }
  722. public string expires_in { get; set; }
  723. public string token_type { get; set; }
  724. }
  725. }
  726. }