using DS.Module.Core; using DS.Module.Core.Extensions; using DS.Module.Core.Helpers; using DS.WMS.Core.Code.Entity; using DS.WMS.Core.Map.Entity; using DS.WMS.Core.Op.Dtos; using DS.WMS.Core.Op.Entity; using DS.WMS.Core.Sys.Entity; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using NPOI.Util; using SqlSugar; namespace DS.WMS.Core.Op.Method { /// /// 海运出口Ocr相关接口 /// public partial class SeaExportService { #region 调用大简云OCR接口 /// /// 上传OCR附件 /// /// /// /// public async Task> UploadOcrFile(IFormFile file, [FromForm] OpFileReq req) { var tenantDb = saasService.GetBizDbScopeById(user.TenantId); //未上传文件 if (file == null || file.Length == 0) { return await Task.FromResult(DataResult.Failed("附件不存在!")); } // 先存库获取Id var newFile = new OpFile { TypeCode = req.TypeCode, TypeName = req.TypeName, LinkId = req.LinkId, }; var originalFilename = file.FileName; // 文件原始名称 var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // 文件后缀 var config = await db.Queryable().Where(x => x.Code == "ocr_api_url" && x.Status == StatusEnum.Enable).FirstAsync(); if (config.IsNull()) { return await Task.FromResult(DataResult.Failed("OCR接口地址未配置!")); } var url = config.Value; if (!url.EndsWith("/")) { url += "/"; } var ms = new MemoryStream(); await file.CopyToAsync(ms); _logger.Info($"调用ocr处理文件{originalFilename}"); //使用HttpClient方式上传文件 ms.Position = 0; var formData = new MultipartFormDataContent(); formData.Add(new StreamContent(ms, (int)ms.Length), "file", originalFilename); var _httpclient = new HttpClient(); var response = await _httpclient.PostAsync($"{url}pdf/upload", formData); if (response.IsSuccessStatusCode) { var strRtn = response.Content.ReadAsStringAsync().Result; var jobj = strRtn.ToJObject(); if (jobj.GetIntValue("code") == 0) { newFile.FileName = jobj.GetStringValue("data"); await tenantDb.Insertable(newFile).ExecuteCommandAsync(); return await Task.FromResult(DataResult.Success(newFile.FileName)); } else { return await Task.FromResult(DataResult.Failed(jobj.GetStringValue("message"))); } } else { return await Task.FromResult(DataResult.Failed("请求大简云OCR接口错误,请联系管理员!")); } } #endregion } }