/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 202403/02 * Description: 暂无 ***********************************************************************/ using System; 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.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Utility.Helper; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NLog; using SqlSugar; namespace CoreCms.Net.Services { /// /// 用户余额表 接口实现 /// public class CoreCmsUserBalanceServices : BaseServices, ICoreCmsUserBalanceServices { private readonly ICoreCmsUserBalanceRepository _dal; private readonly IUnitOfWork _unitOfWork; private readonly IServiceProvider _serviceProvider; public CoreCmsUserBalanceServices(IUnitOfWork unitOfWork, ICoreCmsUserBalanceRepository dal, IServiceProvider serviceProvider ) { this._dal = dal; base.BaseDal = dal; _unitOfWork = unitOfWork; _serviceProvider = serviceProvider; } /// /// 余额变动记录 /// /// 当前用户id,当是店铺的时候,取店铺创始人的userId /// 类型 /// 金额,永远是正的 /// 资源id /// 服务费金额 (提现) /// public async Task Change(int userId, int type, decimal money, string sourceId = "", decimal cateMoney = 0) { using var container = _serviceProvider.CreateScope(); var userServices = container.ServiceProvider.GetService(); var jm = new WebApiCallBack(); if (money != 0) { try { //取用户实际余额 //(会员陌小北提供) var userInfo = await userServices.QueryByClauseAsync(p => p.id == userId, p => p.id, OrderByType.Desc, true); if (userInfo == null) { jm.data = jm.code = 11004; jm.msg = GlobalErrorCodeVars.Code11004; return jm; } //取描述,并简单校验 var res = UserHelper.GetMemo(type, money, cateMoney); if (string.IsNullOrEmpty(res)) { return jm; } var memo = res; if (type != (int)GlobalEnumVars.UserBalanceSourceTypes.Admin) { //后台充值或调不改绝对值 } //如果是减余额的操作,还是加余额操作 if (type is (int)GlobalEnumVars.UserBalanceSourceTypes.Pay or (int)GlobalEnumVars.UserBalanceSourceTypes.Tocash) { money = -money - cateMoney; } if (type != (int)GlobalEnumVars.UserBalanceSourceTypes.Service) { //后台充值或调不改绝对值 } var balance = userInfo.balance + money; if (balance < 0) { jm.data = jm.code = 11007; jm.msg = GlobalErrorCodeVars.Code11007; return jm; } var balanceModel = new CoreCmsUserBalance(); balanceModel.userId = userId; balanceModel.type = type; balanceModel.money = money; balanceModel.balance = balance; balanceModel.sourceId = sourceId; balanceModel.memo = memo; balanceModel.createTime = DateTime.Now; _unitOfWork.BeginTran(); //增加记录 var balanceModelId = await _dal.InsertAsync(balanceModel); balanceModel.id = balanceModelId; //更新用户数据 await userServices.UpdateAsync(p => new CoreCmsUser() { balance = balance }, p => p.id == userId); jm.data = balanceModel; _unitOfWork.CommitTran(); } catch (Exception e) { _unitOfWork.RollbackTran(); NLogUtil.WriteAll(LogLevel.Error, LogType.Web, "余额变动记录", "余额变动记录失败", e); } } jm.status = true; return jm; } /// /// 获取用户的邀请佣金 /// /// /// public async Task GetInviteCommission(int userId) { var type = (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution; var money = await _dal.GetSumAsync(p => p.userId == userId && p.type == type, p => p.money); return money; } #region 重写根据条件查询分页数据 /// /// 重写根据条件查询分页数据 /// /// 判断集合 /// 排序方式 /// 当前页面索引 /// 分布大小 /// /// 是否使用WITH(NOLOCK) /// public 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 } }