using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.EventBus; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Myshipping.Application.Entity; using Myshipping.Application.Service.Fee; using Myshipping.Application.Service.Fee.Dto; using Myshipping.Core; using Myshipping.Core.Service; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Yitter.IdGenerator; namespace Myshipping.Application { /// /// 费用币别 /// [ApiDescriptionSettings("Application", Name = "FeeCurrency", Order = 1)] public class FeeCurrencyService : IDynamicApiController, IFeeCurrencyService, ITransient { private readonly SqlSugarRepository _repCode; private readonly ILogger _logger; private readonly ISysCacheService _cache; private readonly IEventPublisher _publisher; public FeeCurrencyService(SqlSugarRepository repCode, ILogger logger, ISysCacheService cache, IEventPublisher publisher) { _repCode = repCode; _logger = logger; _cache = cache; _publisher = publisher; } /// /// 币别分页查询 /// /// /// [HttpPost("/FeeCurrency/Page")] public async Task Page(FeeCurrencyPageInput input) { var entities = await _repCode.AsQueryable() .WhereIF(!string.IsNullOrEmpty(input.CodeName), u => u.CodeName.Contains(input.CodeName)) .WhereIF(!string.IsNullOrEmpty(input.Name), u => u.Name.Contains(input.Name)) .ToPagedListAsync(input.PageNo, input.PageSize); var result = entities.Adapt>(); return result.XnPagedResult(); } /// /// 保存 /// /// /// [HttpPost("/FeeCurrency/Save")] public async Task Save(FeeCurrencySaveDto input) { if (input == null) { throw Oops.Bah("请传入正常数据!"); } FeeCurrency entity = null; if (input.Id == 0) { entity = input.Adapt(); entity.Id = YitIdHelper.NextId(); await _repCode.InsertAsync(entity); } else { entity = await _repCode.AsQueryable().Filter(null, true).FirstAsync(x => x.Id == input.Id); entity = input.Adapt(entity); await _repCode.UpdateAsync(entity); } await CacheFeeCurrency(); return entity.Adapt(); } /// /// 获取详情 /// /// /// [HttpGet("/FeeCurrency/Detail")] public async Task Detail(long id) { var entity = await _repCode.AsQueryable().Filter(null, true).FirstAsync(x => x.Id == id); return entity.Adapt(); } /// /// 删除 /// /// /// [HttpPost("/FeeCurrency/Delete")] public async Task Delete(List ids) { var list = await _repCode.AsQueryable().Filter(null, true).Where(x => ids.Contains(x.Id)).ToListAsync(); list.ForEach(x => x.IsDeleted = true); await _repCode.AsUpdateable(list).ExecuteCommandAsync(); await CacheFeeCurrency(); } /// /// 获取币别列表 /// [HttpGet("/FeeCurrency/List")] public async Task> List() { List result = await _cache.GetAsync>(CommonConst.CACHE_KEY_FEE_CURRENCY); if (result?.Any() != true) { result = await CacheFeeCurrency(); } return result; } /// /// 缓存币别列表 /// [NonAction] public async Task> CacheFeeCurrency() { if (UserManager.IsSuperAdmin) { // 如果登陆人是SuperAdmin,则分别缓存所有租户的费用币别 var allFeeCurrency = await _repCode.AsQueryable().Filter(null, true).Where(x => !x.IsDeleted).ToListAsync(); var groupFeeCurrency = allFeeCurrency.GroupBy(x => x.TenantId); foreach (var item in groupFeeCurrency) { var item2 = item.Adapt>(); await _cache.SetTimeoutAsync(CommonConst.CACHE_KEY_FEE_CURRENCY + "_" + item.Key, item2, new TimeSpan(6, 0, 0)); } var result = groupFeeCurrency.FirstOrDefault(x => x.Key == UserManager.TENANT_ID)?.Adapt>(); return result; } else { // 否则只缓存当前租户的费用币别 var tenantFeeCurrency = await _repCode.AsQueryable().Filter(null, true).Where(x => !x.IsDeleted && x.TenantId == UserManager.TENANT_ID).ToListAsync(); await _cache.SetTimeoutAsync(CommonConst.CACHE_KEY_FEE_CURRENCY + "_" + UserManager.TENANT_ID, tenantFeeCurrency, new TimeSpan(6, 0, 0)); var result = tenantFeeCurrency.Adapt>(); return result; } } } }