using Furion; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.EventBus; using Furion.FriendlyException; using Furion.LinqBuilder; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Myshipping.Application.ConfigOption; using Myshipping.Application.Entity; using Myshipping.Application.Event; using Myshipping.Application.Service.BookingOrder.Dto; using Myshipping.Application.Service.BookingSlot.Dto; using Myshipping.Application.Service.Fee.Dto; using Myshipping.Core; using Myshipping.Core.Service; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Yitter.IdGenerator; namespace Myshipping.Application { /// /// 费用代码 /// [ApiDescriptionSettings("Application", Name = "FeeCode", Order = 1)] public class FeeCodeService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _repCode; private readonly ILogger _logger; private readonly ISysCacheService _cache; private readonly IEventPublisher _publisher; public FeeCodeService(SqlSugarRepository repCode, ILogger logger, ISysCacheService cache, IEventPublisher publisher) { _repCode = repCode; _logger = logger; _cache = cache; _publisher = publisher; } /// /// 费用代码查询 /// /// /// [HttpPost("/FeeCode/Page")] public async Task Page(FeeCodePageInput input) { var entities = await _repCode.AsQueryable() .WhereIF(!string.IsNullOrEmpty(input.Code), u => u.Code.Contains(input.Code)) .WhereIF(!string.IsNullOrEmpty(input.Name), u => u.Name.Contains(input.Name)) .ToPagedListAsync(input.PageNo, input.PageSize); var result = entities.Adapt>(); return result.XnPagedResult(); } /// /// 保存 /// /// /// [HttpPost("/FeeCode/Save")] public async Task Save(FeeCodeSaveDto input) { if (input == null) { throw Oops.Bah("请传入正常数据!"); } FeeCode 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 CacheFeeCode(); return entity.Adapt(); } /// /// 获取详情 /// /// /// [HttpGet("/FeeCode/Detail")] public async Task Detail(long id) { var entity = await _repCode.AsQueryable().Filter(null, true).FirstAsync(x => x.Id == id); return entity.Adapt(); } /// /// 删除 /// /// /// [HttpPost("/FeeCode/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 CacheFeeCode(); } /// /// 获取费用代码列表 /// /// [HttpGet("/FeeCode/List")] public async Task> List() { var cacheList = await _cache.GetAsync>(CommonConst.CACHE_KEY_FEE_CODE); if (cacheList?.Any() == true) { List result = cacheList.Where(f => f.TenantId == UserManager.TENANT_ID).ToList(); return result; } else { var cacheFeeCode = await CacheFeeCode(); List result = cacheFeeCode.Where(f => f.TenantId == UserManager.TENANT_ID).ToList(); return result; } } /// /// 缓存费用代码列表 /// [NonAction] public async Task> CacheFeeCode() { var allFeeCode = await _repCode.AsQueryable().Filter(null, true).ToListAsync(); var cacheFeeCode = allFeeCode.Adapt>(); await _cache.SetAsync(CommonConst.CACHE_KEY_FEE_CODE, cacheFeeCode); return cacheFeeCode; } } }