Jelajahi Sumber

导入异常处理

CrazyIter_Bin 3 tahun lalu
induk
melakukan
b49a6ef130

+ 1 - 1
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -11,7 +11,7 @@
 
 
   <ItemGroup>
-    <PackageReference Include="HTEXLib" Version="5.2108.31" />
+    <PackageReference Include="HTEXLib" Version="5.2108.19" />
     <PackageReference Include="AspectCore.Extensions.Reflection" Version="2.2.0" />
     <PackageReference Include="Azure.Cosmos" Version="4.0.0-preview3" />
     <PackageReference Include="Azure.Identity" Version="1.4.0" />

+ 47 - 19
TEAMModelOS/Controllers/Core/ImportController.cs

@@ -29,6 +29,9 @@ using HTEXLib.DOCX.Models;
 using System.Collections.Concurrent;
 using TEAMModelOS.Filter;
 using Ionic.Zip;
+using HTEXLib.COMM;
+using Microsoft.Extensions.Options;
+using TEAMModelOS.Models;
 
 namespace TEAMModelOS.Controllers
 {
@@ -40,13 +43,14 @@ namespace TEAMModelOS.Controllers
 
         public PPTX2HTEXTranslator _PPTX2HTEXTranslator { get; set; }
         public DOXC2HTMLTranslator _DOXC2HTMLTranslator { get; set; }
-
+        private readonly Option _option;
         public AzureStorageFactory _azureStorage { get; set; }
         private readonly IHttpClientFactory _clientFactory;
         public HTML2ITEMV3Translator _HTML2ITEMV3Translator { get; set; }
         public ImportController(
             PPTX2HTEXTranslator PPTX2HTEXTranslator, IHttpClientFactory clientFactory,
-            DOXC2HTMLTranslator DOXC2HTMLTranslator, HTML2ITEMV3Translator HTML2ITEMV3Translator, AzureStorageFactory azureStorage, DingDing ding)
+            DOXC2HTMLTranslator DOXC2HTMLTranslator, HTML2ITEMV3Translator HTML2ITEMV3Translator, AzureStorageFactory azureStorage, DingDing ding,
+            IOptionsSnapshot<Option> option, AzureCosmosFactory azureCosmos)
         {
             _HTML2ITEMV3Translator = HTML2ITEMV3Translator;
             _DOXC2HTMLTranslator = DOXC2HTMLTranslator;
@@ -54,6 +58,7 @@ namespace TEAMModelOS.Controllers
             _azureStorage = azureStorage;
             this._PPTX2HTEXTranslator = PPTX2HTEXTranslator;
             _dingDing = ding;
+            _option = option?.Value;
 
         }
         private static string ReplaceLast(string input, string oldValue, string newValue)
@@ -119,7 +124,7 @@ namespace TEAMModelOS.Controllers
                 if (ext.ToLower() == "pptx" || ext.ToLower() == "xml")
                 {
                     string index = await PPTXTranslator(containerid, FileName, stream);
-                   // await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
+                    // await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
                     return Ok(new { index = index });
                 }
                 else if (ext.ToLower() == "docx" || ext.ToLower() == "doc")
@@ -130,7 +135,7 @@ namespace TEAMModelOS.Controllers
                 else if (ext.ToLower() == "htex")
                 {
                     var index = await HTEXTranslator(containerid, FileName, stream);
-                   //await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
+                    //await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, containerid, new List<string>() { $"{FileName}.{ext}" });
                     return Ok(new { index = index });
                 }
                 else
@@ -241,17 +246,25 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [HttpPost("upload-word")]
         [RequestSizeLimit(102_400_000_00)] //最大10000m左右
-        public IActionResult UploadWord([FromForm] IFormFile file)
+        public async Task<IActionResult> UploadWord([FromForm] IFormFile file)
         {
             //  ResponseBuilder responseBuilder = new ResponseBuilder();
             if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
             {
                 return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
             }
-
-            var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
-            // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
-            return Ok(new { htmlString = doc });
+            try
+            {
+                var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
+                // Dictionary<string, object> model = await ImportExerciseService.UploadWord(_azureStorage, file);
+                return Ok(new { htmlString = doc });
+            }
+            catch (TransException ex)
+            {
+                var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},upload-word()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(new { data });
+            }
         }
 
         /// <summary>
@@ -260,17 +273,24 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("parse-word")]
-        public IActionResult ParseWord([FromForm] IFormFile file)
+        public async Task<IActionResult> ParseWord([FromForm] IFormFile file)
         {
             if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
             {
                 return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
             }
-            var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
-
-            (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
-
-            return Ok(new { tests, emferror = error });
+            try
+            {
+                var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
+                (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
+                return Ok(new { tests, emferror = error });
+            }
+            catch (TransException ex)
+            {
+                var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},parse-word()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(new { data });
+            }
         }
 
 
@@ -280,15 +300,23 @@ namespace TEAMModelOS.Controllers
         /// <param name="request"></param>
         /// <returns></returns>
         [HttpPost("parse-docx")]
-        public IActionResult ParseDocx([FromForm] IFormFile file)
+        public async Task<IActionResult> ParseDocx([FromForm] IFormFile file)
         {
             if (!FileType.GetExtention(file.FileName).ToLower().Equals("docx"))
             {
                 return BadRequest(new Dictionary<string, object> { { "msg", "type is not docx!" }, { "code", ResponseCode.FAILED } });
             }
-            var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
-            // (List<HTEXLib.DOCX.Models.ItemInfo> tests, List<string> error) = _HTML2ITEMV3Translator.Translate(doc);
-            return Ok(new { html = doc });
+            try
+            {
+                var doc = _DOXC2HTMLTranslator.Translate(file.OpenReadStream());
+                return Ok(new { html = doc });
+            }
+            catch (TransException ex)
+            {
+                var data = await _azureStorage.UploadFileByContainer("teammodelos", file.OpenReadStream(), "transfailed", Guid.NewGuid() + file.FileName);
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},parse-docx()\n{ex.Message}{ex.StackTrace}转换失败的文件:{data}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(new { data });
+            }
         }
         /// <summary>
         /// html转题目