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