108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
using IRaCIS.Application.Contracts;
 | 
						||
using IRaCIS.Application.Interfaces;
 | 
						||
using Microsoft.AspNetCore.Mvc;
 | 
						||
using Panda.DynamicWebApi.Attributes;
 | 
						||
 | 
						||
namespace IRaCIS.Core.Application.Service
 | 
						||
{
 | 
						||
 | 
						||
    [ApiExplorerSettings(GroupName = "Financial")]
 | 
						||
    public class ExchangeRateService(IRepository<ExchangeRate> _exchangeRateRepository,
 | 
						||
        IRepository<Payment> _paymentRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IExchangeRateService
 | 
						||
    {
 | 
						||
 | 
						||
 | 
						||
        [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);
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |