227 lines
7.2 KiB
C#
227 lines
7.2 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// 图片表 服务 TImageConfigService
|
|
/// </summary>
|
|
public class TImageConfigService : ApplicationService<IRepository<T_Image_Config>>
|
|
{
|
|
private ICodeCosService codeCosService;
|
|
public TImageConfigService(IRepository<T_Image_Config> defaultRepository,
|
|
ICodeCosService codeCosService)
|
|
: base(defaultRepository)
|
|
{
|
|
this.codeCosService = codeCosService;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取列表数据
|
|
/// </summary>
|
|
/// <param name="pagingSearchInput"></param>
|
|
/// <returns></returns>
|
|
public async Task<PagingView> FindListAsync(PagingSearchInput<T_Image_Config> pagingSearchInput)
|
|
{
|
|
if (pagingSearchInput == null)
|
|
{
|
|
pagingSearchInput = new PagingSearchInput<T_Image_Config>();
|
|
}
|
|
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<SysUser>(w => w.name!);
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 根据id数组删除
|
|
/// </summary>
|
|
/// <param name="ids">ids</param>
|
|
/// <returns></returns>
|
|
public async Task DeleteListAsync(List<int> ids)
|
|
{
|
|
await this._defaultRepository.DeleteByIdsAsync(ids);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询表单数据
|
|
/// </summary>
|
|
/// <param name="id">id</param>
|
|
/// <returns></returns>
|
|
public async Task<Dictionary<string, object>> FindFormAsync(int id)
|
|
{
|
|
var res = new Dictionary<string, object>();
|
|
var form = await this._defaultRepository.FindByIdAsync(id);
|
|
form = form.NullSafe();
|
|
|
|
res[nameof(id)] = id;
|
|
res[nameof(form)] = form;
|
|
return res;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存数据
|
|
/// </summary>
|
|
/// <param name="form">form</param>
|
|
/// <returns></returns>
|
|
public async Task<T_Image_Config> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 导出Excel
|
|
/// </summary>
|
|
/// <param name="pagingSearchInput"></param>
|
|
/// <returns></returns>
|
|
public async Task<byte[]> ExportExcelAsync(PagingSearchInput<T_Image_Config> pagingSearchInput)
|
|
{
|
|
pagingSearchInput.Page = -1;
|
|
var tableViewModel = await this.FindListAsync(pagingSearchInput);
|
|
return ExcelUtil.ExportExcelByPagingView(tableViewModel, null, "Id");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取签名
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetCosSign()
|
|
{
|
|
var (sign, ex) = codeCosService.GenerateSignURL(new MiaoYu.Core.Cos.Models.CosGenerateSign());
|
|
return sign;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取临时签名
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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<CodeCosGenerateTemporaryKeyEntity, GenerateTemporaryModel>() ?? 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;
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取图片url
|
|
/// </summary>
|
|
/// <param name="imageId"></param>
|
|
/// <returns></returns>
|
|
public async Task<string> GetImageUrl(int imageId)
|
|
{
|
|
var form = await this._defaultRepository.GetAsync(it => it.ImageId == imageId);
|
|
return form?.Url ?? "";
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取图片列表
|
|
/// </summary>
|
|
/// <param name="name"></param>
|
|
/// <returns></returns>
|
|
public async Task<dynamic> 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;
|
|
}
|
|
|
|
|
|
} |