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#

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
}
}