irc-netcore-api/IRaCIS.Core.Application/Service/Financial/ExchangeRateService.cs

118 lines
4.1 KiB
C#
Raw Blame History

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 IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Application.Services
{
[ApiExplorerSettings(GroupName = "Financial")]
public class ExchangeRateService : BaseService, IExchangeRateService
{
private readonly IRepository<ExchangeRate> _exchangeRateRepository;
private readonly IRepository<Payment> _paymentRepository;
public ExchangeRateService(IRepository<ExchangeRate> exchangeRateRepository, IRepository<Payment> paymentRepository)
{
_exchangeRateRepository = exchangeRateRepository;
_paymentRepository = paymentRepository;
}
[NonDynamicMethod]
public async Task<IResponseOutput> AddOrUpdateExchangeRate(ExchangeRateCommand model)
{
if (model.Id == Guid.Empty || model.Id == null)
{
var existItem = await _exchangeRateRepository.FirstOrDefaultAsync(u => u.YearMonth == model.YearMonth);
if (existItem != null)
{
//---The exchange rate of the same month already existed.
return ResponseOutput.NotOk(_localizer["ExR_SameMthExist"]);
}
var rate = _mapper.Map<ExchangeRate>(model);
rate = await _exchangeRateRepository.AddAsync(rate);
if (await _exchangeRateRepository.SaveChangesAsync())
{
return ResponseOutput.Ok(rate.Id.ToString());
}
else
{
return ResponseOutput.NotOk();
}
}
else
{
var success = await _exchangeRateRepository.BatchUpdateNoTrackingAsync(t => t.Id == model.Id, u => new ExchangeRate()
{
//YearMonth = model.YearMonth,
Rate = model.Rate,
UpdateTime = DateTime.Now
});
return ResponseOutput.Result(success);
}
}
/// <summary>
/// 根据记录Id删除汇率记录
/// </summary>
/// <param name="id">汇率记录Id</param>
[HttpDelete("{id:guid}")]
public async Task<IResponseOutput> DeleteExchangeRate(Guid id)
{
var monthInfo = await _exchangeRateRepository.FirstOrDefaultAsync(t => t.Id == id);
if (await _paymentRepository.AnyAsync(t => t.YearMonth == monthInfo.YearMonth))
{
//---The exchange rate has been used in monthly payment
return ResponseOutput.NotOk(_localizer["ExR_MthPymtRate"]);
}
var success = await _exchangeRateRepository.BatchDeleteNoTrackingAsync(t => t.Id == id);
return ResponseOutput.Ok(success);
}
[NonDynamicMethod]
public async Task<decimal> GetExchangeRateByMonth(string month)
{
//var rate = _exchangeRateRepository.FindSingleOrDefault(u => u.YearMonth.Equals(month));
//if (rate == null)
//{
// return 0;
//}
//return rate.Rate;
var rate = await _exchangeRateRepository.FirstOrDefaultAsync(t => t.YearMonth == month);
if (rate == null)
{
return 0;
}
return rate.Rate;
}
[HttpPost]
public async Task<PageOutput<ExchangeRateCommand>> GetExchangeRateList(ExchangeRateQueryDTO inQuery)
{
var yearMonth = inQuery.SearchMonth?.ToString("yyyy-MM");
var exchangeRateQueryable = _exchangeRateRepository.AsQueryable()
.WhereIf(inQuery.SearchMonth != null, o => o.YearMonth == yearMonth)
.ProjectTo<ExchangeRateCommand>(_mapper.ConfigurationProvider);
return await exchangeRateQueryable.ToPagedListAsync(inQuery);
}
}
}