using DS.Module.Core;
using DS.Module.SqlSugar;
using DS.Module.UserModule;
using DS.WMS.Core.Op.Dtos;
using DS.WMS.Core.Op.Entity;
using DS.WMS.Core.Op.Interface;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DS.WMS.Core.Op.Method
{
public class OpFileService : IOpFileService
{
private readonly IServiceProvider _serviceProvider;
private readonly ISqlSugarClient db;
private readonly IUser user;
private readonly ISaasDbService saasService;
private readonly IWebHostEnvironment _environment;
///
///
///
///
public OpFileService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
db = _serviceProvider.GetRequiredService();
user = _serviceProvider.GetRequiredService();
saasService = _serviceProvider.GetRequiredService();
_environment = _serviceProvider.GetRequiredService();
}
///
/// 添加附件
///
///
///
///
public async Task> AddFile(IFormFile file, [FromForm] OpFileReq req)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
//未上传文件
if (file == null || file.Length == 0)
{
return await Task.FromResult(DataResult.Failed("附件不存在!"));
}
var limitFiles = AppSetting.app(new string[] { "FileSettings", "FileType" });
var originalFilename = file.FileName; // 文件原始名称
var fileSuffix = Path.GetExtension(file.FileName).ToLower(); // 文件后缀
if (!limitFiles.Contains(fileSuffix))
{
return await Task.FromResult(DataResult.Failed("不允许的文件类型!"));
}
var basePath = AppSetting.app(new string[] { "FileSettings", "BasePath" });
var relativePath = AppSetting.app(new string[] { "FileSettings", "RelativePath" });
var dirAbs = string.Empty;
var fileRelaPath = string.Empty;
var fileAbsPath = string.Empty;
if (string.IsNullOrEmpty(basePath))
{
dirAbs = Path.Combine(_environment.WebRootPath, relativePath);
}
else
{
dirAbs = Path.Combine(basePath, relativePath);
}
if (!Directory.Exists(dirAbs))
Directory.CreateDirectory(dirAbs);
// 先存库获取Id
var id = SnowFlakeSingle.Instance.NextId();
var fileSaveName = $"{id}{fileSuffix}".ToLower();
fileRelaPath = Path.Combine(relativePath, fileSaveName).ToLower();
fileAbsPath = Path.Combine(dirAbs, fileSaveName).ToLower();
var newFile = new OpFile
{
Id = id,
FileName = originalFilename,
FilePath = fileRelaPath,
TypeCode = req.TypeCode,
TypeName = req.TypeName,
LinkId = req.LinkId,
};
await tenantDb.Insertable(newFile).ExecuteCommandAsync();
using (var stream = File.Create(fileAbsPath))
{
await file.CopyToAsync(stream);
}
return await Task.FromResult(DataResult.Success(fileRelaPath));
}
///
/// 获取业务附件
///
/// 业务id
///
public DataResult> GetOpFileList(string id)
{
var tenantDb = saasService.GetBizDbScopeById(user.TenantId);
var data = tenantDb.Queryable()
.Where(a => a.LinkId == long.Parse(id))
.Select()
.ToList();
return DataResult>.Success(data, MultiLanguageConst.DataQuerySuccess);
}
}
}