You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
3.3 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 海运出口Ocr相关接口
/// </summary>
public partial class SeaExportService
{
#region 调用大简云OCR接口
/// <summary>
/// 上传OCR附件
/// </summary>
/// <param name="file"></param>
/// <param name="req"></param>
/// <returns></returns>
public async Task<DataResult<string>> UploadOcrFile(IFormFile file, [FromForm] OpFileReq req)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
//未上传文件
if (file == null || file.Length == 0)
{
return await Task.FromResult(DataResult<string>.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<SysConfig>().Where(x => x.Code == "ocr_api_url" && x.Status == StatusEnum.Enable).FirstAsync();
if (config.IsNull())
{
return await Task.FromResult(DataResult<string>.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<string>.Success(newFile.FileName));
}
else
{
return await Task.FromResult(DataResult<string>.Failed(jobj.GetStringValue("message")));
}
}
else
{
return await Task.FromResult(DataResult<string>.Failed("请求大简云OCR接口错误请联系管理员!"));
}
}
#endregion
}
}