using HZY.Framework.Repository.EntityFramework.Extensions; using IdGen; using MiaoYu.Api.Admin.Models.Dtos.Apps.Cos; using MiaoYu.Core.Cos.Models; using MiaoYu.Core.Cos.Services; using MiaoYu.Repository.ChatAI.Admin.Entities; using NPOI.SS.Formula.Functions; using NPOI.Util; namespace MiaoYu.Api.Admin.ApplicationServices.Apps; /// /// 图片表 服务 TImageConfigService /// public class TImageConfigService : ApplicationService> { private ICodeCosService codeCosService; public TImageConfigService(IRepository defaultRepository, ICodeCosService codeCosService) : base(defaultRepository) { this.codeCosService = codeCosService; } /// /// 获取列表数据 /// /// /// public async Task FindListAsync(PagingSearchInput pagingSearchInput) { if (pagingSearchInput == null) { pagingSearchInput = new PagingSearchInput(); } var query = this._defaultRepository.Select .WhereIf(pagingSearchInput != null && !string.IsNullOrWhiteSpace(pagingSearchInput.Search?.Name), w => w.Name.Contains(pagingSearchInput.Search.Name ?? "")) .WhereIf(pagingSearchInput.Search?.TenantId != null, w => w.TenantId == pagingSearchInput.Search.TenantId) .WhereIf(pagingSearchInput != null && pagingSearchInput.Search?.ImageType > -1, w => w.ImageType == pagingSearchInput.Search.ImageType) .OrderByDescending(w => w.Id) .Select(w => new { w.Id, w.ImageId, w.Name, w.Url, w.OssPath, w.Bucket, w.Region, w.UpdateAt, w.TenantId, w.ImageType //w.LastModificationTime, //w.CreationTime }) ; var result = await _defaultRepository.AsPagingViewAsync(query, pagingSearchInput); // 覆盖值 //result // .FormatValue(query, w => w.CreationTime, (oldValue) => oldValue.ToString("yyyy-MM-dd")) // .FormatValue(query, w => w.LastModificationTime, (oldValue) => oldValue?.ToString("yyyy-MM-dd")) // ; // 设置列 result.GetColumn(query, w => w.Url).SetColumn(width: ""); //result.GetColumn(query, w => w.OperatorName!).SetColumn(w => w.name!); return result; } /// /// 根据id数组删除 /// /// ids /// public async Task DeleteListAsync(List ids) { await this._defaultRepository.DeleteByIdsAsync(ids); } /// /// 查询表单数据 /// /// id /// public async Task> FindFormAsync(int id) { var res = new Dictionary(); var form = await this._defaultRepository.FindByIdAsync(id); form = form.NullSafe(); res[nameof(id)] = id; res[nameof(form)] = form; return res; } /// /// 保存数据 /// /// form /// public async Task SaveFormAsync(T_Image_Config form, bool isUpdate) { form.UpdateAt = DateTime.Now; if (form.CreateAt == DateTime.MinValue) { form.CreateAt = DateTime.Now; } //var isUpdate = false; //if (form.Id != 0) //{ // var _tempform = this._defaultRepository.FindById(form.Id); // if (_tempform != null) // { // form.CreateAt = _tempform.CreateAt; // isUpdate = true; // } //} var x = await this._defaultRepository.InsertOrUpdateAsync(form); if (x.ImageId == 0 && !isUpdate) { x.ImageId = x.Id; } await this._defaultRepository.InsertOrUpdateAsync(x); return x; } /// /// 导出Excel /// /// /// public async Task ExportExcelAsync(PagingSearchInput pagingSearchInput) { pagingSearchInput.Page = -1; var tableViewModel = await this.FindListAsync(pagingSearchInput); return ExcelUtil.ExportExcelByPagingView(tableViewModel, null, "Id"); } /// /// 获取签名 /// /// public string GetCosSign() { var (sign, ex) = codeCosService.GenerateSignURL(new MiaoYu.Core.Cos.Models.CosGenerateSign()); return sign; } /// /// 获取临时签名 /// /// public GenerateTemporaryModel GetGenerateTemporaryKey(string fileName = "", string modelName = "") { var t = new CosGenerateSign() { Prefixes = "miaoyu" }; if (string.IsNullOrEmpty(modelName)) { modelName = $"images"; } var tempFile = fileName; if (!string.IsNullOrEmpty(tempFile)) { var ext = Path.GetExtension(tempFile); if (!string.IsNullOrEmpty(ext)) { Random random = new Random(); tempFile = $"{DateTime.Now.ToUnixTimeSeconds()}{ext}"; } } var model = codeCosService.GenerateTemporaryKey(t); // GenerateTemporaryModel generateTemporaryModel = model.CopyObject() ?? new GenerateTemporaryModel(); generateTemporaryModel.Bucket = t.Bucket + "-" + t.AppId; generateTemporaryModel.Region = t.Region; generateTemporaryModel.Prefixes = t.Prefixes; generateTemporaryModel.FilePath = $"{t.Prefixes}/{modelName}/{DateTime.Now.ToString("yyyMMdd")}/{tempFile}"; generateTemporaryModel.DomainName = "https://cos.shhuanmeng.com/"; return generateTemporaryModel; } /// /// 获取图片url /// /// /// public async Task GetImageUrl(int imageId) { var form = await this._defaultRepository.GetAsync(it => it.ImageId == imageId); return form?.Url ?? ""; } /// /// 获取图片列表 /// /// /// public async Task GetImageList(string name) { var list = await this._defaultRepository.Select .WhereIf(name!=null&&!string.IsNullOrEmpty(name.Trim()), w => w.Name.Contains(name)) .OrderByDescending(w => w.Id).Take(20) .Select(w => new { w.ImageId, w.Name, w.Url, }).ToListAsync() ; return list; } }