You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BookingHeChuan/Myshipping.Application/Service/Fee/FeeCurrencyService.cs

177 lines
5.9 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 费用币别
/// </summary>
[ApiDescriptionSettings("Application", Name = "FeeCurrency", Order = 1)]
public class FeeCurrencyService : IDynamicApiController, IFeeCurrencyService, ITransient
{
private readonly SqlSugarRepository<FeeCurrency> _repCode;
private readonly ILogger<FeeCurrencyService> _logger;
private readonly ISysCacheService _cache;
private readonly IEventPublisher _publisher;
public FeeCurrencyService(SqlSugarRepository<FeeCurrency> repCode,
ILogger<FeeCurrencyService> logger,
ISysCacheService cache,
IEventPublisher publisher)
{
_repCode = repCode;
_logger = logger;
_cache = cache;
_publisher = publisher;
}
/// <summary>
/// 币别分页查询
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/FeeCurrency/Page")]
public async Task<dynamic> 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<SqlSugarPagedList<FeeCurrencyPageOutput>>();
return result.XnPagedResult();
}
/// <summary>
/// 保存
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("/FeeCurrency/Save")]
public async Task<FeeCurrencySaveDto> Save(FeeCurrencySaveDto input)
{
if (input == null)
{
throw Oops.Bah("请传入正常数据!");
}
FeeCurrency entity = null;
if (input.Id == 0)
{
entity = input.Adapt<FeeCurrency>();
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<FeeCurrencySaveDto>();
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("/FeeCurrency/Detail")]
public async Task<FeeCurrencySaveDto> Detail(long id)
{
var entity = await _repCode.AsQueryable().Filter(null, true).FirstAsync(x => x.Id == id);
return entity.Adapt<FeeCurrencySaveDto>();
}
/// <summary>
/// 删除
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpPost("/FeeCurrency/Delete")]
public async Task Delete(List<long> 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();
}
/// <summary>
/// 获取币别列表
/// </summary>
[HttpGet("/FeeCurrency/List")]
public async Task<List<FeeCurrencyDto>> List()
{
List<FeeCurrencyDto> result = await _cache.GetAsync<List<FeeCurrencyDto>>(CommonConst.CACHE_KEY_FEE_CURRENCY);
if (result?.Any() != true)
{
result = await CacheFeeCurrency();
}
return result;
}
/// <summary>
/// 缓存币别列表
/// </summary>
[NonAction]
public async Task<List<FeeCurrencyDto>> 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<List<FeeCurrencyDto>>();
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<List<FeeCurrencyDto>>();
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<List<FeeCurrencyDto>>();
return result;
}
}
}
}