using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Wood.Entity.SystemManage; using Wood.Entity; using Wood.Data.Repository; using Wood.Service.SystemManage.Dto; using Mapster; using Wood.Util; using NetTaste; namespace Wood.Service.SystemManage.Manager { public class FileManager : ApiManager, ITransient { public FileManager(SqlSugarRepository repository) : base(repository) { } /// /// 把指定的批次code的附件进行更新 /// 针对一对多附件时使用 /// /// code,为空会生成新的code /// 新附件id列表,空时为清空批次文件 /// public async Task UpdateFile(string? code, List? newFiles) { if (string.IsNullOrEmpty(code)) return await AddFile(newFiles); else { //更新附件 置为不可用 //把批次 code 不在 newFiles 中的附件标记为删除 await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { IsDelete = true }) .Where(it => it.PackageCode == code) .WhereIF(newFiles != null && newFiles.Any(), it => !newFiles!.Contains(it.Id)) .ExecuteCommandAsync(); if (newFiles != null && newFiles.Count > 0) //更新附件 置为可用 //把批次在 newFiles 中的附件标记为可用 并把 批次更新为 code await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { PackageCode = code, IsDelete = false }) .Where(it => newFiles.Contains(it.Id)).ExecuteCommandAsync(); return code; } } /// /// 把指定的批次code的附件进行更新 /// 针对一对一附件时使用 /// /// code,为空会生成新的code /// 新文件,0时为清空批次文件 /// public async Task UpdateFile(string? code, long? newFile) { if (string.IsNullOrEmpty(code)) return await AddFile(newFile); else { //更新附件 置为不可用 //把批次 code 不在 newFiles 中的附件标记为删除 await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { IsDelete = true }) .Where(it => it.PackageCode == code) .ExecuteCommandAsync(); if (newFile > 0) //更新附件 置为可用 //把批次在 newFiles 中的附件标记为可用 并把 批次更新为 code await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { PackageCode = code, IsDelete = false }) .Where(it => it.Id == newFile).ExecuteCommandAsync(); return code; } } /// /// 把附件加到指定的批次code中 /// 针对一对多附件时使用 /// /// 要添加的附件id列表 /// 返回一个批次编码 public async Task AddFile(List? files) { if (files != null && files.Count > 0) { string code = IdGeneratorHelper.Instance.GetGuid("N"); //更新附件 await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { PackageCode = code, IsDelete = false }) .Where(it => files.Contains(it.Id)).ExecuteCommandAsync(); return code; } else return string.Empty; } /// /// 把附件加到指定的批次code中 /// 针对一对一附件时使用 /// /// 要添加的附件 /// 返回一个批次编码 public async Task AddFile(long? file) { if (file != null && file > 0) { string code = IdGeneratorHelper.Instance.GetGuid("N"); //更新附件 await AsRepository().AsUpdateable() .SetColumns(it => new FileEntity() { PackageCode = code, IsDelete = false }) .Where(it => it.Id == file).ExecuteCommandAsync(); return code; } else return string.Empty; } /// /// 根据批次code获取文件 /// /// /// public async Task> GetByCode(string? code) { if (string.IsNullOrEmpty(code)) return new List(); var files = await AsRepository().GetListAsync(it => it.PackageCode == code); var dtos = files.Adapt>(); return dtos; } /// /// 根据批次code获取文件 /// /// /// public async Task> GetByCode(List? codes) { if (codes == null || !codes.Any()) return new List(); var files = await AsRepository().GetListAsync(it => codes.Contains(it.PackageCode!)); var dtos = files.Adapt>(); return dtos; } /// /// 返回批次code文件的所有路径 /// /// /// public async Task> GetFilePathsByCode(string? code) { if (string.IsNullOrEmpty(code)) return new List(); List result = new List(); var files = await GetByCode(code); foreach (var item in files) { if (item.BucketName == "local") result.Add("/" + item.FilePath!.Trim('/')); else result.Add("/fromBucket/" + item.BucketName + "/" + item.FilePath!.Trim('/')); } return result; } } }