/*********************************************************************** * Project: CoreCms * ProjectName: 核心内容管理系统 * Web: https://www.corecms.net * Author: 大灰灰 * Email: jianweie@163.com * CreateTime: 2021/1/31 21:45:10 * Description: 暂无 ***********************************************************************/ using System; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; using CoreCms.Net.Loging; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Extensions; using CoreCms.Net.Utility.Helper; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SqlSugar; namespace CoreCms.Net.Services { /// /// 用户提现记录表 接口实现 /// public class CoreCmsUserTocashServices : BaseServices, ICoreCmsUserTocashServices { private readonly ICoreCmsUserTocashRepository _dal; private readonly IUnitOfWork _unitOfWork; private readonly IServiceProvider _serviceProvider; private readonly ICoreCmsSettingServices _settingServices; private readonly ICoreCmsUserServices _userServices; private readonly ICoreCmsUserBalanceServices _userBalanceServices; public CoreCmsUserTocashServices(IUnitOfWork unitOfWork, ICoreCmsUserTocashRepository dal, IServiceProvider serviceProvider, ICoreCmsSettingServices settingServices, ICoreCmsUserServices userServices, ICoreCmsUserBalanceServices userBalanceServices) { this._dal = dal; base.BaseDal = dal; _unitOfWork = unitOfWork; _serviceProvider = serviceProvider; _settingServices = settingServices; _userServices = userServices; _userBalanceServices = userBalanceServices; } /// /// 提现申请 /// /// public async Task Tocash(int userId, decimal money, int bankCardsId) { var jm = new WebApiCallBack(); using var container = _serviceProvider.CreateScope(); var settingServices = container.ServiceProvider.GetService(); var userServices = container.ServiceProvider.GetService(); var userBankCardServices = container.ServiceProvider.GetService(); var balanceServices = container.ServiceProvider.GetService(); var allConfigs = await settingServices.GetConfigDictionaries(); //最小提现金额 var tocashMoneyLow = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.TocashMoneyLow).ObjectToDecimal((decimal)0.01); //每日提现上线 var tocashMoneyLimit = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.TocashMoneyLimit).ObjectToDecimal(0); //提现手续费 var tocashMoneyRate = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.TocashMoneyRate).ObjectToDecimal(0); //最低提现金额 if (money < tocashMoneyLow) { jm.msg = "提现最低不能少于" + tocashMoneyLow + "元"; return jm; } //每日提现上限,默认0不限制 if (tocashMoneyLimit > 0) { var dt = DateTime.Now; var starTime = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0); var endTime = new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59); //判断历史提现金额 var todayMoney = await _dal.GetSumAsync(p => p.createTime >= starTime && p.createTime <= endTime && p.userId == userId, p => p.money); todayMoney = todayMoney + money; //历史今天提现加上本次提现; if (todayMoney > tocashMoneyLimit) { jm.msg = "每日提现不能超过" + tocashMoneyLimit + "元"; return jm; } } var userInfo = await userServices.QueryByIdAsync(userId); if (userInfo == null) { jm.msg = GlobalErrorCodeVars.Code11004; return jm; } if (money > userInfo.balance) { jm.msg = GlobalErrorCodeVars.Code11015; return jm; } // 计算提现服务费(金额) var cateMoney = money * (tocashMoneyRate / 100); if (cateMoney + money > userInfo.balance) { jm.msg = GlobalErrorCodeVars.Code11015; return jm; } //获取银行卡信息 var bankcardsInfo = await userBankCardServices.QueryByClauseAsync(p => p.userId == userId && p.id == bankCardsId); if (bankcardsInfo == null) { jm.msg = GlobalErrorCodeVars.Code11016; return jm; } var cashModel = new CoreCmsUserTocash(); cashModel.userId = userId; cashModel.money = money; cashModel.bankName = bankcardsInfo.bankName; cashModel.bankCode = bankcardsInfo.bankCode; cashModel.bankAreaId = bankcardsInfo.bankAreaId; cashModel.accountBank = bankcardsInfo.accountBank; cashModel.accountName = bankcardsInfo.accountName; cashModel.cardNumber = bankcardsInfo.cardNumber; cashModel.status = (int)GlobalEnumVars.UserTocashTypes.待审核; cashModel.withdrawals = cateMoney; cashModel.createTime = DateTime.Now; var res = await _dal.InsertAsync(cashModel); if (res > 0) { var change = await balanceServices.Change(userId, (int)GlobalEnumVars.UserBalanceSourceTypes.Tocash, money, res.ToString(), cateMoney); jm.status = change.status; jm.msg = jm.status ? "提现申请成功" : "提现申请失败"; jm.data = change.data; jm.otherData = change.otherData; } else { jm.msg = "提现申请失败"; } return jm; } /// /// 获取用户提现列表记录 /// /// /// /// /// /// public async Task UserToCashList(int userId = 0, int page = 1, int limit = 10, int status = 0) { var jm = new WebApiCallBack(); var where = PredicateBuilder.True(); if (status > 0) { where = where.And(p => p.status == status); } if (userId > 0) { where = where.And(p => p.userId == userId); } var list = await _dal.QueryPageAsync(where, p => p.createTime, OrderByType.Desc, page, limit); if (list.Any()) { foreach (var item in list) { item.statusName = EnumHelper.GetEnumDescriptionByValue(item.status); item.cardNumber = UserHelper.BankCardNoFormat(item.cardNumber); } } jm.status = true; jm.data = list; jm.otherData = new { list.TotalPages }; return jm; } /// /// 提现审核 /// /// /// /// public async Task Examine(int id = 0, int status = 0) { var jm = new WebApiCallBack(); var info = await _dal.QueryByClauseAsync(p => p.id == id && p.status == (int)GlobalEnumVars.UserTocashTypes.待审核); if (info == null) { jm.msg = "没有此记录或不是待审核状态"; return jm; } if (status > 0) { var bl = await _dal.UpdateAsync(p => new CoreCmsUserTocash() { status = status, updateTime = DateTime.Now }, p => p.id == id && p.status == (int)GlobalEnumVars.UserTocashTypes.待审核); jm.status = bl; jm.data = status; if (bl) { //失败给用户退钱到余额 if (status == (int)GlobalEnumVars.UserTocashTypes.提现失败) { var toCashInfo = await _dal.QueryByIdAsync(id); // 提现金额 加 服务费返还 var newMoney = toCashInfo.money + toCashInfo.withdrawals; var up = await _userServices.UpdateAsync(p => new CoreCmsUser() { balance = p.balance + newMoney }, p => p.id == toCashInfo.userId); if (up) { //添加记录 var user = await _userServices.QueryByIdAsync(toCashInfo.userId); var balance = new CoreCmsUserBalance(); balance.type = (int)GlobalEnumVars.UserBalanceSourceTypes.Tocash; balance.userId = toCashInfo.userId; balance.balance = user.balance; balance.createTime = DateTime.Now; balance.memo = UserHelper.GetMemo(balance.type, toCashInfo.money); balance.money = newMoney; balance.sourceId = id.ToString(); await _userBalanceServices.InsertAsync(balance); } } } } else { jm.msg = GlobalErrorCodeVars.Code10000; jm.status = false; } return jm; } #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public new async Task> QueryPageAsync(Expression> predicate, Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1, int pageSize = 20, bool blUseNoLock = false) { return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock); } #endregion } }