ImportExerciseController.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. using TEAMModelOS.SDK.Context.Constant.Common;
  8. using TEAMModelOS.SDK.Context.Exception;
  9. using TEAMModelOS.SDK;
  10. using TEAMModelOS.Service.Model.PowerPoint;
  11. using TEAMModelOS.Service.Services.Exam.Implements;
  12. using TEAMModelOS.SDK.DI;
  13. using TEAMModelOS.Service;
  14. using TEAMModelOS.Service.Services.PowerPoint.Implement;
  15. using Microsoft.AspNetCore.Hosting;
  16. using TEAMModelOS.Dto;
  17. using System.IO;
  18. using System.Text;
  19. using TEAMModelOS.SDK.Helper.Common.JsonHelper;
  20. namespace TEAMModelOS.Controllers
  21. {
  22. [Route("api/[controller]")]
  23. [ApiController]
  24. public class ImportExerciseController : BaseController
  25. {
  26. // private readonly IHtexService htexService;
  27. private AzureStorageFactory azureBlobDBRepository { get; set; }
  28. private IWebHostEnvironment webHostEnvironment { get; set; }
  29. private List<LangConfig> langConfigs { get; set; }
  30. public ImportExerciseController( AzureStorageFactory _azureBlobDBRepository, IWebHostEnvironment _webHostEnvironment)
  31. {
  32. webHostEnvironment = _webHostEnvironment;
  33. azureBlobDBRepository = _azureBlobDBRepository;
  34. string path = webHostEnvironment.ContentRootPath + "/JsonFile/Core/LangConfig.json";
  35. FileStream fs = new FileStream(path, System.IO.FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  36. StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8);
  37. String line;
  38. StringBuilder builder = new StringBuilder();
  39. while ((line = sr.ReadLine()) != null)
  40. {
  41. builder.Append(line.ToString());
  42. }
  43. sr.Close();
  44. string text = builder.ToString();
  45. langConfigs = text.FromApiJson<List<LangConfig>>();
  46. }
  47. /// <summary>
  48. /// </summary>
  49. /// <param name="request"></param>
  50. /// <returns></returns>
  51. [HttpPost("LoadDoc")]
  52. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  53. public async Task<BaseResponse> LoadDoc([FromForm] IFormFile file)
  54. {
  55. ResponseBuilder responseBuilder = new ResponseBuilder();
  56. Dictionary<string, object> model = await HtexService.LoadDoc(azureBlobDBRepository, file);
  57. return responseBuilder.Data(model).build();
  58. }
  59. /// <summary>
  60. /// docUrl
  61. /// folder
  62. /// shaCode
  63. /// </summary>
  64. /// <param name="request"></param>
  65. /// <returns></returns>
  66. [HttpPost("UploadWord")]
  67. [RequestSizeLimit(102_400_000_00)] //最大10000m左右
  68. public async Task<BaseResponse> UploadWord([FromForm] IFormFile file)
  69. {
  70. ResponseBuilder responseBuilder = new ResponseBuilder();
  71. if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
  72. {
  73. return responseBuilder.Error(ResponseCode.FAILED, "type is not docx!").build();
  74. }
  75. Dictionary<string, object> model = await ImportExerciseService.UploadWord(azureBlobDBRepository, file);
  76. return responseBuilder.Data(model).build();
  77. }
  78. /// <summary>
  79. /// htmlString
  80. /// </summary>
  81. /// <param name="request"></param>
  82. /// <returns></returns>
  83. [HttpPost("AnalyzeHtml")]
  84. public BaseResponse AnalyzeHtml(JosnRequest<Dictionary<string, object>> request)
  85. {
  86. ResponseBuilder builder = ResponseBuilder.custom();
  87. bool flag = request.@params.TryGetValue("htmlString", out object htmlString);
  88. bool flagLang = request.@params.TryGetValue("lang", out object lang);
  89. if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
  90. {
  91. LangConfig langConfig= langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
  92. HtmlAnalyzeService htmlAnalyzeService = new HtmlAnalyzeService(langConfig);
  93. List<Service.Models.ItemInfo> exercises = htmlAnalyzeService.AnalyzeWordAsync(htmlString.ToString());
  94. return builder.Data(exercises).build();
  95. }
  96. else
  97. {
  98. return builder.Data(null).build();
  99. }
  100. }
  101. /// <summary>
  102. /// htmlString
  103. /// </summary>
  104. /// <param name="request"></param>
  105. /// <returns></returns>
  106. [HttpPost("HtmlToHtex")]
  107. public async Task<BaseResponse> HtmlToHtex(JosnRequest<Dictionary<string, object>> request)
  108. {
  109. ResponseBuilder builder = ResponseBuilder.custom();
  110. bool flag = request.@params.TryGetValue("htmlString", out object htmlString);
  111. bool flagLang = request.@params.TryGetValue("lang", out object lang);
  112. if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
  113. {
  114. LangConfig langConfig = langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
  115. HtmlAnalyzeService htmlAnalyzeService = new HtmlAnalyzeService(langConfig);
  116. Htex exercises = await HtexService.AnalyzeHtmlToHtex(azureBlobDBRepository, htmlString.ToString(), request.lang, htmlAnalyzeService);
  117. return builder.Data(exercises).build();
  118. }
  119. else
  120. {
  121. return builder.Data(null).build();
  122. }
  123. }
  124. }
  125. }