using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; using Abp.Application.Services.Dto; using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Extensions; using Abp.Runtime.Caching; using IwbZero.Auditing; using IwbZero.AppServiceBase; using IwbZero.IdentityFramework; using IwbZero.Setting; using ShwasherSys.Authorization.Permissions; using ShwasherSys.Lambda; using ShwasherSys.BasicInfo.Dto; using Abp.Domain.Entities; using Abp.Timing; namespace ShwasherSys.BasicInfo { [AbpAuthorize] public class CurrencyAppService : ShwasherAsyncCrudAppService, ICurrencyAppService { public CurrencyAppService( IIwbSettingManager settingManager, ICacheManager cacheManager, IRepository repository, IRepository currencyExchangeRateRepository) : base(repository, "CurrencyName") { CurrencyExchangeRateRepository = currencyExchangeRateRepository; SettingManager = settingManager; CacheManager = cacheManager; } protected IRepository CurrencyExchangeRateRepository { get; } protected override bool KeyIsAuto { get; set; } = false; #region GetSelect [DisableAuditing] public async Task> GetSelectList() { var list = await Repository.GetAllListAsync(); var slist = new List {new SelectListItem {Text = @"请选择...", Value = "", Selected = true}}; foreach (var l in list) { //slist.Add(new SelectListItem { Text = l., Value = l. }); } return slist; } [DisableAuditing] public async Task GetSelectStr() { var list = await Repository.GetAllListAsync(); string str = ""; foreach (var l in list) { //str += $""; } return str; } #endregion #region CURD [AbpAuthorize(PermissionNames.PagesBasicInfoCurrencyCreate)] public override async Task Create(CurrencyCreateDto input) { Currency entity = MapToEntity(input); entity.TimeLastMod = Clock.Now; entity.TimeCreated = Clock.Now; entity.UserIDLastMod = AbpSession.UserName; await Repository.InsertAsync(entity); var rates = input.CurrencyExchangeRates; if (rates != null && rates.Any()) { rates.Reverse(); var rs = rates.DistinctBy(i => i.ToCurrencyId).ToList(); foreach (var r in rs) { CurrencyExchangeRate rate = new CurrencyExchangeRate() { ExchangeRate =r.ExchangeRate, FromCurrencyId = input.Id, ToCurrencyId = r.ToCurrencyId, TimeLastMod = Clock.Now, TimeCreated = Clock.Now, UserIDLastMod = AbpSession.UserName }; await CurrencyExchangeRateRepository.InsertAsync(rate); } } return MapToEntityDto(entity); } [AbpAuthorize(PermissionNames.PagesBasicInfoCurrencyUpdate)] public override async Task Update(CurrencyUpdateDto input) { Currency entity = Repository.FirstOrDefault(input.Id); if (entity == null) { CheckErrors(IwbIdentityResult.Failed("未找到货币!")); } entity.CurrencyName = input.CurrencyName; entity.TimeLastMod = Clock.Now; entity.UserIDLastMod = AbpSession.UserName; var rates = input.CurrencyExchangeRates; await CurrencyExchangeRateRepository.DeleteAsync(i => i.FromCurrencyId == input.Id); if (rates != null && rates.Any()) { rates.Reverse(); var rs = rates.DistinctBy(i => i.ToCurrencyId).ToList(); foreach (var r in rs) { CurrencyExchangeRate rate = new CurrencyExchangeRate() { ExchangeRate = r.ExchangeRate, FromCurrencyId = input.Id, ToCurrencyId = r.ToCurrencyId, TimeLastMod = Clock.Now, TimeCreated = Clock.Now, UserIDLastMod = AbpSession.UserName }; await CurrencyExchangeRateRepository.InsertAsync(rate); } } return MapToEntityDto(entity); } [AbpAuthorize(PermissionNames.PagesBasicInfoCurrencyDelete)] public override Task Delete(EntityDto input) { return Repository.DeleteAsync(input.Id); } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesBasicInfoCurrency)] public override async Task> GetAll(PagedRequestDto input) { var query = CreateFilteredQuery(input); query = ApplyFilter(query, input); var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = ApplySorting(query, input); query = ApplyPaging(query, input); var entities = await AsyncQueryableExecuter.ToListAsync(query); var dtoList = new PagedResultDto(totalCount, entities.Select(MapToEntityDto).ToList()); return dtoList; } #region Get [DisableAuditing] [AbpAuthorize(PermissionNames.PagesBasicInfoCurrency)] public Task GetEntityById(string id) { return Repository.FirstOrDefaultAsync(id); } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesBasicInfoCurrency)] public Task GetEntityByNo(string no) { if (KeyFiledName.IsNullOrEmpty()) { CheckErrors(IwbIdentityResult.Failed("编码/编号字段不明确,请检查后再操作!")); } LambdaObject obj = new LambdaObject() { FieldType = LambdaFieldType.S, FieldName = KeyFiledName, FieldValue = no, ExpType = LambdaExpType.Equal }; var exp = obj.GetExp(); return Repository.FirstOrDefaultAsync(exp); } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesBasicInfoCurrency)] public async Task GetDtoById(string id) { var entity = await GetEntityById(id); CurrencyDto enDto = MapToEntityDto(entity); var rates =await CurrencyExchangeRateRepository.GetAllListAsync(i => i.FromCurrencyId == id); enDto.CurrencyExchangeRates = rates; return enDto; } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesBasicInfoCurrency)] public async Task GetDtoByNo(string no) { var entity = await GetEntityByNo(no); return MapToEntityDto(entity); } #endregion #region Hide //protected override IQueryable ApplyFilter(IQueryable query, TGetAllInput input) //{ // if (!input.KeyWords.IsNullOrEmpty()) // { // object keyWords = input.KeyWords; // LambdaObject obj = new LambdaObject() // { // FieldType = (LambdaFieldType)input.FieldType, // FieldName = input.KeyField, // FieldValue = keyWords, // ExpType = (LambdaExpType)input.ExpType // }; // var exp = obj.GetExp(); // query = query.Where(exp); // } // if (input.SearchList != null && input.SearchList.Count > 0) // { // List objList = new List(); // foreach (var o in input.SearchList) // { // if (o.KeyWords.IsNullOrEmpty()) // continue; // object keyWords = o.KeyWords; // objList.Add(new LambdaObject // { // FieldType = (LambdaFieldType)o.FieldType, // FieldName = o.KeyField, // FieldValue = keyWords, // ExpType = (LambdaExpType)o.ExpType // }); // } // var exp = objList.GetExp(); // query = query.Where(exp); // } // return query; //} //protected override IQueryable ApplySorting(IQueryable query, PagedRequestDto input) //{ // return query.OrderBy(a => a.No); //} //protected override IQueryable ApplyPaging(IQueryable query, PagedRequestDto input) //{ // if (input is IPagedResultRequest pagedInput) // { // return query.Skip(pagedInput.SkipCount).Take(pagedInput.MaxResultCount); // } // return query; //} #endregion #endregion } }