public MessageModel <RemitAvailableAmount> GetAvailableAmount() { var userId = long.Parse(User.FindFirstValue("id")); RemitAvailableAmountSumVo amountSumVo = remitRecordQueryRepositories.QueryRemitAvailableAmount(userId, COUNTRY); return(new MessageModel <RemitAvailableAmount> { Data = new RemitAvailableAmount { MonthlyAvailableRemitAmount = (int)amountSumVo.MonthlyAvailableRemitAmount, YearlyAvailableRemitAmount = (int)amountSumVo.YearlyAvailableRemitAmount } }); }
public RemitAvailableAmountSumVo QueryRemitAvailableAmount(long userId, string country) { BussinessUnitRemitSetting setting = _context.BussinessUnitRemitSetting.Where(setting => setting.Country.Equals(country.ToUpper())).FirstOrDefault(); var nowMonth = DateTime.UtcNow.Month; var nowYear = DateTime.UtcNow.Year; var monthlyAvailableAmountList = from u in _context.UserArc.Where(userArc => userArc.UserId == userId) join r in _context.RemitRecord.Where(record => record.UserId == userId) on u.UserId equals r.UserId where (r.TransactionStatus > 0 && ((DateTime)r.FormalApplyTime).Month == nowMonth) || (r.TransactionStatus >= (short)RemitTransactionStatusEnum.Paid && ((DateTime)r.PaymentTime).Month == nowMonth) || (r.TransactionStatus > 0 && r.TransactionStatus < (short) RemitTransactionStatusEnum.Paid && ((DateTime) r.FormalApplyTime).Month == nowMonth - 1) group r by(r.UserId) into g select new { UserId = g.Key, MonthlyAvailableRemitAmount = (int)(setting.MonthlyMax - g.Sum(ele => ele.FromAmount)) }; var yearlyAvailableAmountList = from u in _context.UserArc.Where(userArc => userArc.UserId == userId) join r in _context.RemitRecord.Where(record => record.UserId == userId) on u.UserId equals r.UserId where (r.TransactionStatus > 0 && ((DateTime)r.FormalApplyTime).Year == nowYear) || (r.TransactionStatus >= (short)RemitTransactionStatusEnum.Paid && ((DateTime)r.PaymentTime).Year == nowYear) || (r.TransactionStatus > 0 && r.TransactionStatus < (short) RemitTransactionStatusEnum.Paid && ((DateTime) r.FormalApplyTime).Year == nowYear - 1) group r by(r.UserId) into g select new { UserId = g.Key, YearlyAvailableRemitAmount = (int)(setting.YearlyMax - g.Sum(ele => ele.FromAmount)) }; var monthlyAvailableAmount = monthlyAvailableAmountList.FirstOrDefault(); var yearlyAvailableRemitAmount = yearlyAvailableAmountList.FirstOrDefault(); var result = new RemitAvailableAmountSumVo { UserId = userId, MonthlyAvailableRemitAmount = monthlyAvailableAmount == null ? setting.MonthlyMax : monthlyAvailableAmount.MonthlyAvailableRemitAmount, YearlyAvailableRemitAmount = yearlyAvailableRemitAmount == null ? setting.YearlyMax : yearlyAvailableRemitAmount.YearlyAvailableRemitAmount }; return(result); }
private string CheckIfAmountOutOfRange(long userId, int amount, string country) { BussinessUnitRemitSetting remitSetting = remitSettingService.GetRemitSettingByCountry(country); if (remitSetting == null) { return("no remit setting for {country}"); } if (amount < remitSetting.RemitMin || amount > remitSetting.RemitMax) { return(OUT_OF_RANGE); } RemitAvailableAmountSumVo amountSumVo = remitRecordQueryRepositories.QueryRemitAvailableAmount(userId, country); if (amountSumVo.MonthlyAvailableRemitAmount != null && amount > amountSumVo.MonthlyAvailableRemitAmount) { return(OUT_OF_MONTHLY_MAX); } if (amountSumVo.YearlyAvailableRemitAmount != null && amount > amountSumVo.YearlyAvailableRemitAmount) { return(OUT_OF_YEARLY_MAX); } return(null); }