mirror of
http://git.coreshop.cn/jianweie/coreshoppro.git
synced 2026-03-24 20:37:20 +08:00
添加项目文件。
This commit is contained in:
162
CoreCms.Net.Services/User/CoreCmsUserBalanceServices.cs
Normal file
162
CoreCms.Net.Services/User/CoreCmsUserBalanceServices.cs
Normal file
@@ -0,0 +1,162 @@
|
||||
/***********************************************************************
|
||||
* 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.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 SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户余额表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserBalanceServices : BaseServices<CoreCmsUserBalance>, 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 余额变动记录
|
||||
/// </summary>
|
||||
/// <param name="userId">当前用户id,当是店铺的时候,取店铺创始人的userId</param>
|
||||
/// <param name="type">类型</param>
|
||||
/// <param name="money">金额,永远是正的</param>
|
||||
/// <param name="sourceId">资源id</param>
|
||||
/// <param name="cateMoney">服务费金额 (提现)</param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> Change(int userId, int type, decimal money, string sourceId = "", decimal cateMoney = 0)
|
||||
{
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
var userServices = container.ServiceProvider.GetService<ICoreCmsUserServices>();
|
||||
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
if (money != 0)
|
||||
{
|
||||
//取用户实际余额
|
||||
var userInfo = await userServices.QueryByIdAsync(userId);
|
||||
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 == (int)GlobalEnumVars.UserBalanceSourceTypes.Pay || type == (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;
|
||||
//增加记录
|
||||
var balanceModelId = await _dal.InsertAsync(balanceModel);
|
||||
balanceModel.id = balanceModelId;
|
||||
//更新用户数据
|
||||
await userServices.UpdateAsync(p => new CoreCmsUser() { balance = balance }, p => p.id == userId);
|
||||
|
||||
jm.data = balanceModel;
|
||||
|
||||
}
|
||||
jm.status = true;
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户的邀请佣金
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<decimal> 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 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsUserBalance>> QueryPageAsync(Expression<Func<CoreCmsUserBalance, bool>> predicate,
|
||||
Expression<Func<CoreCmsUserBalance, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
367
CoreCms.Net.Services/User/CoreCmsUserBankCardServices.cs
Normal file
367
CoreCms.Net.Services/User/CoreCmsUserBankCardServices.cs
Normal file
@@ -0,0 +1,367 @@
|
||||
/***********************************************************************
|
||||
* 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.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.UI;
|
||||
using CoreCms.Net.Utility.Extensions;
|
||||
using CoreCms.Net.Utility.Helper;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 银行卡信息 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserBankCardServices : BaseServices<CoreCmsUserBankCard>, ICoreCmsUserBankCardServices
|
||||
{
|
||||
private readonly ICoreCmsUserBankCardRepository _dal;
|
||||
private readonly ICoreCmsAreaServices _areaServices;
|
||||
private readonly ICoreCmsSettingServices _settingServices;
|
||||
|
||||
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
public CoreCmsUserBankCardServices(IUnitOfWork unitOfWork, ICoreCmsUserBankCardRepository dal, ICoreCmsAreaServices areaServices, ICoreCmsSettingServices settingServices)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
_areaServices = areaServices;
|
||||
_settingServices = settingServices;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 我的银行卡列表
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> AddBankCards(CoreCmsUserBankCard entity)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
jm.otherData = entity;
|
||||
if (string.IsNullOrEmpty(entity.cardNumber))
|
||||
{
|
||||
jm.msg = "请输入银行卡号"; return jm;
|
||||
}
|
||||
if (entity.cardNumber.Length < 16 || entity.cardNumber.Length > 19)
|
||||
{
|
||||
jm.msg = "请输入16-19位银行卡号"; return jm;
|
||||
}
|
||||
if (string.IsNullOrEmpty(entity.accountName))
|
||||
{
|
||||
jm.msg = "请输入开户账户名"; return jm;
|
||||
}
|
||||
if (string.IsNullOrEmpty(entity.bankName))
|
||||
{
|
||||
jm.msg = "请输入银行名称"; return jm;
|
||||
}
|
||||
if (string.IsNullOrEmpty(entity.accountBank))
|
||||
{
|
||||
jm.msg = "请输入开户行名称"; return jm;
|
||||
}
|
||||
var card = await _dal.QueryByClauseAsync(p => p.userId == entity.userId && p.cardNumber == entity.cardNumber);
|
||||
if (card != null)
|
||||
{
|
||||
jm.msg = "该卡片已经添加"; return jm;
|
||||
}
|
||||
|
||||
var model = new CoreCmsUserBankCard();
|
||||
model.userId = entity.userId;
|
||||
model.bankName = entity.bankName;
|
||||
model.bankCode = entity.bankCode;
|
||||
model.bankAreaId = entity.bankAreaId;
|
||||
model.accountBank = entity.accountBank;
|
||||
model.accountName = entity.accountName;
|
||||
model.cardNumber = entity.cardNumber;
|
||||
model.cardType = entity.cardType;
|
||||
model.isdefault = entity.isdefault;
|
||||
model.createTime = DateTime.Now;
|
||||
|
||||
if (model.isdefault == true)
|
||||
{
|
||||
// 如果要添加默认 先判断是否有默认卡
|
||||
var def = await _dal.ExistsAsync(p => p.userId == entity.userId && p.isdefault == true);
|
||||
if (def)
|
||||
{
|
||||
|
||||
await _dal.UpdateAsync(p => new CoreCmsUserBankCard() { isdefault = false }, p => p.isdefault == true && p.userId == entity.userId);
|
||||
await _dal.InsertAsync(model);
|
||||
jm.status = true;
|
||||
jm.msg = "保存成功";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
await _dal.InsertAsync(model);
|
||||
jm.status = true;
|
||||
jm.msg = "保存成功";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await _dal.InsertAsync(model);
|
||||
jm.status = true;
|
||||
jm.msg = "保存成功";
|
||||
}
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 我的银行卡列表
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetMyBankcardsList(int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
jm.status = true;
|
||||
var res = await _dal.QueryListByClauseAsync(p => p.userId == userId);
|
||||
if (res != null && res.Any())
|
||||
{
|
||||
foreach (var item in res)
|
||||
{
|
||||
var areas =await _areaServices.GetAreaFullName(item.bankAreaId); ;
|
||||
item.bankAreaName = areas.status ? areas.data.ToString() : "";
|
||||
item.cardNumber = UserHelper.BankCardNoFormat(item.cardNumber, 4, 4, '*');
|
||||
item.cardTypeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>(item.cardType);
|
||||
item.bankLogo = BankConst.BankLogoUrl + item.bankCode;
|
||||
}
|
||||
}
|
||||
jm.data = res;
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除银行卡
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> Removebankcard(int id, int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
// 先判断该银行卡是否存在
|
||||
var data = await _dal.QueryByClauseAsync(p => p.id == id && p.userId == userId);
|
||||
if (data != null)
|
||||
{
|
||||
// 如果要删除的是默认的卡
|
||||
if (data.isdefault)
|
||||
{
|
||||
// 查询是否有其他银行卡
|
||||
var otherData = await _dal.QueryByClauseAsync(p => p.id != id && p.userId == userId);
|
||||
if (otherData != null)
|
||||
{
|
||||
otherData.isdefault = true;
|
||||
await _dal.UpdateAsync(otherData);
|
||||
await _dal.DeleteAsync(data);
|
||||
jm.status = true;
|
||||
jm.msg = "删除成功";
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.status = await _dal.DeleteAsync(data);
|
||||
jm.msg = jm.status ? "删除成功" : "删除失败";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.status = await _dal.DeleteByIdAsync(id);
|
||||
jm.msg = jm.status ? "删除成功" : "删除失败";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "该卡片不存在";
|
||||
}
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户默认银行卡信息
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetDefaultBankCard(int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var defCard = await _dal.QueryByClauseAsync(p => p.userId == userId && p.isdefault == true);
|
||||
if (defCard != null)
|
||||
{
|
||||
var areas = await _areaServices.GetAreaFullName(defCard.bankAreaId); ;
|
||||
defCard.bankAreaName = areas.status ? areas.data.ToString() : "";
|
||||
defCard.cardNumber = UserHelper.BankCardNoFormat(defCard.cardNumber, 4, 4, '*');
|
||||
defCard.cardTypeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>(defCard.cardType);
|
||||
defCard.bankLogo = BankConst.BankLogoUrl + defCard.bankCode;
|
||||
jm.data = defCard;
|
||||
}
|
||||
else
|
||||
{
|
||||
var card = await _dal.QueryByClauseAsync(p => p.userId == userId, p => p.createTime, OrderByType.Asc);
|
||||
if (card != null)
|
||||
{
|
||||
var areas = await _areaServices.GetAreaFullName(card.bankAreaId); ;
|
||||
card.bankAreaName = areas.status ? areas.data.ToString() : "";
|
||||
card.cardNumber = UserHelper.BankCardNoFormat(card.cardNumber, 4, 4, '*');
|
||||
card.cardTypeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>(card.cardType);
|
||||
card.bankLogo = BankConst.BankLogoUrl + card.bankCode;
|
||||
jm.data = card;
|
||||
}
|
||||
}
|
||||
|
||||
jm.status = jm.data != null;
|
||||
jm.msg = jm.data != null ? "获取成功" : "无数据获取";
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取银行卡组织信息
|
||||
/// </summary>
|
||||
/// <param name="cardCode"></param>
|
||||
/// <returns></returns>
|
||||
public WebApiCallBack BankCardsOrganization(string cardCode)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=" + cardCode + "&cardBinCheck=true";
|
||||
var res = HttpHelper.PostSend(url, "");
|
||||
var resObj = JObject.Parse(res);
|
||||
if (!resObj.ContainsKey("validated"))
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11021;
|
||||
jm.code = 11021;
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (!resObj["validated"].ObjectToBool())
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11021;
|
||||
jm.code = 11021;
|
||||
return jm;
|
||||
}
|
||||
else
|
||||
{
|
||||
var name = EnumHelper.GetEnumDescriptionByKey<GlobalEnumVars.BankList>(resObj["bank"].ObjectToString());
|
||||
var type = (int)GlobalEnumVars.BankType.BankTypeDc;
|
||||
var typeName = string.Empty;
|
||||
switch (resObj["cardType"].ObjectToString())
|
||||
{
|
||||
case "DC":
|
||||
type = (int)GlobalEnumVars.BankType.BankTypeDc;
|
||||
typeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>((int)GlobalEnumVars.BankType.BankTypeDc);
|
||||
break;
|
||||
|
||||
case "CC":
|
||||
type = (int)GlobalEnumVars.BankType.BankTypeCc;
|
||||
typeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>((int)GlobalEnumVars.BankType.BankTypeCc);
|
||||
break;
|
||||
}
|
||||
var bankCode = resObj["bank"].ObjectToString();
|
||||
jm.status = true;
|
||||
jm.data = new
|
||||
{
|
||||
name,
|
||||
type,
|
||||
typeName,
|
||||
bankCode
|
||||
};
|
||||
}
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设置默认的银行卡
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> SetDefault(int userId, int id)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var card = await _dal.QueryByClauseAsync(p => p.userId == userId && p.id == id);
|
||||
if (card != null)
|
||||
{
|
||||
// 是否有默认
|
||||
var defCard = await _dal.QueryByClauseAsync(p => p.userId == userId && p.isdefault == true);
|
||||
if (defCard != null)
|
||||
{
|
||||
await _dal.UpdateAsync(it => new CoreCmsUserBankCard() { isdefault = false },
|
||||
p => p.id == defCard.id);
|
||||
await _dal.UpdateAsync(it => new CoreCmsUserBankCard() { isdefault = true },
|
||||
p => p.id == card.id);
|
||||
jm.status = true;
|
||||
jm.msg = "保存成功";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = "该银行卡不存在";
|
||||
}
|
||||
jm.status = true;
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取银行卡信息
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetBankcardInfo(int userId, int id)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var card = await _dal.QueryByClauseAsync(p => p.userId == userId && p.id == id);
|
||||
if (card != null)
|
||||
{
|
||||
card.bankLogo = BankConst.BankLogoUrl + card.bankCode;
|
||||
card.cardNumber = UserHelper.BankCardNoFormat(card.cardNumber, 4, 4, '*');
|
||||
card.cardTypeName = EnumHelper.GetEnumDescriptionByValue<GlobalEnumVars.BankType>(card.cardType);
|
||||
|
||||
jm.status = true;
|
||||
jm.msg = "获取成功";
|
||||
jm.data = card;
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "该银行卡不存在";
|
||||
}
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
40
CoreCms.Net.Services/User/CoreCmsUserGradeServices.cs
Normal file
40
CoreCms.Net.Services/User/CoreCmsUserGradeServices.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
/***********************************************************************
|
||||
* 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.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户等级表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserGradeServices : BaseServices<CoreCmsUserGrade>, ICoreCmsUserGradeServices
|
||||
{
|
||||
private readonly ICoreCmsUserGradeRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
public CoreCmsUserGradeServices(IUnitOfWork unitOfWork, ICoreCmsUserGradeRepository dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
39
CoreCms.Net.Services/User/CoreCmsUserLogServices.cs
Normal file
39
CoreCms.Net.Services/User/CoreCmsUserLogServices.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
/***********************************************************************
|
||||
* 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.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户日志 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserLogServices : BaseServices<CoreCmsUserLog>, ICoreCmsUserLogServices
|
||||
{
|
||||
private readonly ICoreCmsUserLogRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
public CoreCmsUserLogServices(IUnitOfWork unitOfWork, ICoreCmsUserLogRepository dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
253
CoreCms.Net.Services/User/CoreCmsUserPointLogServices.cs
Normal file
253
CoreCms.Net.Services/User/CoreCmsUserPointLogServices.cs
Normal file
@@ -0,0 +1,253 @@
|
||||
/***********************************************************************
|
||||
* 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.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.Entities.Expression;
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户积分记录表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserPointLogServices : BaseServices<CoreCmsUserPointLog>, ICoreCmsUserPointLogServices
|
||||
{
|
||||
private readonly ICoreCmsUserPointLogRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
|
||||
public CoreCmsUserPointLogServices(IUnitOfWork unitOfWork, ICoreCmsUserPointLogRepository dal,
|
||||
IServiceProvider serviceProvider
|
||||
)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 积分消费日志设置
|
||||
/// </summary>
|
||||
/// <param name="userId">用户</param>
|
||||
/// <param name="num"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="remarks"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> SetPoint(int userId, int num, int type, string remarks)
|
||||
{
|
||||
using (var container = _serviceProvider.CreateScope())
|
||||
{
|
||||
var userServices = container.ServiceProvider.GetService<ICoreCmsUserServices>();
|
||||
|
||||
var res = new WebApiCallBack() { methodDescription = "积分消费日志设置" };
|
||||
//获取积分账号信息
|
||||
var userModel = await userServices.QueryByIdAsync(userId);
|
||||
if (userModel == null)
|
||||
{
|
||||
res.msg = "更新消费积分日志获取用户信息失败";
|
||||
return res;
|
||||
}
|
||||
|
||||
var newPoint = num + userModel.point;
|
||||
//积分余额判断
|
||||
if (newPoint < 0)
|
||||
{
|
||||
res.msg = "积分余额不足";
|
||||
return res;
|
||||
}
|
||||
//插入记录
|
||||
var log = new CoreCmsUserPointLog();
|
||||
log.userId = userId;
|
||||
log.type = type;
|
||||
log.num = num;
|
||||
log.balance = newPoint;
|
||||
log.remarks = remarks;
|
||||
log.createTime = DateTime.Now;
|
||||
|
||||
await _dal.InsertAsync(log);
|
||||
await userServices.UpdateAsync(p => new CoreCmsUser() { point = p.point + num }, p => p.id == userModel.id);
|
||||
|
||||
|
||||
res.status = true;
|
||||
res.msg = "积分更改成功";
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 订单完成送积分操作
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="money"></param>
|
||||
/// <param name="orderId"></param>
|
||||
public async Task OrderComplete(int userId, decimal money, string orderId)
|
||||
{
|
||||
using (var container = _serviceProvider.CreateScope())
|
||||
{
|
||||
var _settingServices = container.ServiceProvider.GetService<ICoreCmsSettingServices>();
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
|
||||
var ordersRewardProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersRewardProportion).ObjectToInt();
|
||||
if (ordersRewardProportion > 0)
|
||||
{
|
||||
var point = Convert.ToInt32(money / ordersRewardProportion);
|
||||
await SetPoint(userId, point, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeRebate,
|
||||
"订单:" + orderId + " 积分奖励");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断今天是否签到
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
public async Task<WebApiCallBack> IsSign(int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
jm.msg = "今天还没有签到";
|
||||
|
||||
var where = PredicateBuilder.True<CoreCmsUserPointLog>();
|
||||
where = where.And(p => p.userId == userId && p.type == (int)GlobalEnumVars.UserPointSourceTypes.PointTypeSign);
|
||||
|
||||
var dt = DateTime.Now;
|
||||
var startTime = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0);
|
||||
var endTime = new DateTime(dt.Year, dt.Month, dt.Day, 23, 59, 59);
|
||||
|
||||
where = where.And(p => p.createTime > startTime && p.createTime < endTime);
|
||||
|
||||
var bl = await _dal.ExistsAsync(where);
|
||||
jm.status = bl;
|
||||
jm.msg = bl ? "今天已经签到了" : "今天还没有签到";
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 用户签到
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
public async Task<WebApiCallBack> Sign(int userId)
|
||||
{
|
||||
using (var container = _serviceProvider.CreateScope())
|
||||
{
|
||||
var _settingServices = container.ServiceProvider.GetService<ICoreCmsSettingServices>();
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var res = await IsSign(userId);
|
||||
if (res.status)
|
||||
{
|
||||
jm.msg = "今天已经签到,无需重复签到";
|
||||
}
|
||||
//获取店铺签到积分设置
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
|
||||
var signPointType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SignPointType).ObjectToInt();
|
||||
|
||||
//判断是固定积分计算还是随机积分计算
|
||||
var point = 0;
|
||||
if (signPointType == (int)GlobalEnumVars.UserPointSignTypes.RandomPoint)
|
||||
{
|
||||
//随机计算
|
||||
//获取最小随机值
|
||||
var signRandomMin = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SignRandomMin).ObjectToInt(1);
|
||||
//获取最大随机值
|
||||
var signRandomMax = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SignRandomMax).ObjectToInt(10);
|
||||
Random ran = new Random();
|
||||
point = ran.Next(signRandomMin, signRandomMax);
|
||||
}
|
||||
else
|
||||
{
|
||||
//固定计算
|
||||
//首次签到积分
|
||||
var firstSignPoint = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.FirstSignPoint).ObjectToInt(1);
|
||||
//连续签到追加
|
||||
var continuitySignAdditional = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ContinuitySignAdditional).ObjectToInt(1);
|
||||
//签到最多积分
|
||||
var signMostPoint = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SignMostPoint).ObjectToInt(1);
|
||||
|
||||
//最大连续签到天数
|
||||
var maxContinuityDay = 0;
|
||||
|
||||
//获取连续签到天数
|
||||
if (continuitySignAdditional > 0)
|
||||
{
|
||||
maxContinuityDay = (signMostPoint - firstSignPoint) / continuitySignAdditional;
|
||||
}
|
||||
else
|
||||
{
|
||||
//连续追加0的话说明每天签到积分都一样多,那么最大连续签到天数就是1天
|
||||
maxContinuityDay = 1;
|
||||
}
|
||||
|
||||
var day = DateTime.Now.AddDays(-maxContinuityDay);
|
||||
|
||||
|
||||
var logs = await _dal.QueryListByClauseAsync(p =>
|
||||
p.userId == userId && p.type == (int)(int)GlobalEnumVars.UserPointSourceTypes.PointTypeSign &&
|
||||
p.createTime > day);
|
||||
|
||||
var newRes = new List<string>();
|
||||
if (logs != null && logs.Any())
|
||||
{
|
||||
foreach (var item in logs)
|
||||
{
|
||||
var dtStr = item.createTime.ToString("yyyy-MM-dd");
|
||||
if (!newRes.Contains(dtStr))
|
||||
{
|
||||
newRes.Add(dtStr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var intDay = 0; //连续签到天数
|
||||
for (int i = 1; i <= maxContinuityDay; i++)
|
||||
{
|
||||
var now = DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd"); ;
|
||||
if (newRes.Contains(now))
|
||||
{
|
||||
intDay++;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
//积分
|
||||
point = firstSignPoint + continuitySignAdditional * intDay;
|
||||
point = point > signMostPoint ? signMostPoint : point;
|
||||
}
|
||||
jm.data = point;
|
||||
//插入数据库
|
||||
var result = await SetPoint(userId, point, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeSign, "积分签到,获得" + point + "积分");
|
||||
jm.msg = result.msg;
|
||||
jm.status = result.status;
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
678
CoreCms.Net.Services/User/CoreCmsUserServices.cs
Normal file
678
CoreCms.Net.Services/User/CoreCmsUserServices.cs
Normal file
@@ -0,0 +1,678 @@
|
||||
/***********************************************************************
|
||||
* 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.Collections.Generic;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Linq.Expressions;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using CoreCms.Net.Auth.Policys;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.FromBody;
|
||||
using CoreCms.Net.Model.ViewModels.Basics;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
using CoreCms.Net.Model.ViewModels.DTO;
|
||||
using CoreCms.Net.Utility.Extensions;
|
||||
using CoreCms.Net.Utility.Helper;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserServices : BaseServices<CoreCmsUser>, ICoreCmsUserServices
|
||||
{
|
||||
private readonly ICoreCmsUserRepository _dal;
|
||||
private readonly ICoreCmsUserBalanceServices _userBalanceServices;
|
||||
private readonly ICoreCmsSettingServices _settingServices;
|
||||
private readonly ICoreCmsUserPointLogServices _userPointLogServices;
|
||||
private readonly ICoreCmsSmsServices _smsServices;
|
||||
private readonly ICoreCmsUserWeChatInfoServices _userWeChatInfoServices;
|
||||
private readonly ICoreCmsUserGradeServices _userGradeServices;
|
||||
private readonly ICoreCmsUserLogServices _userLogServices;
|
||||
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
private readonly PermissionRequirement _permissionRequirement;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
|
||||
public CoreCmsUserServices(IUnitOfWork unitOfWork
|
||||
, ICoreCmsUserRepository dal
|
||||
, ICoreCmsUserBalanceServices userBalanceServices
|
||||
, ICoreCmsSettingServices settingServices
|
||||
, ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
_userBalanceServices = userBalanceServices;
|
||||
_settingServices = settingServices;
|
||||
_userPointLogServices = userPointLogServices;
|
||||
_smsServices = smsServices;
|
||||
_userWeChatInfoServices = userWeChatInfoServices;
|
||||
_userGradeServices = userGradeServices;
|
||||
_permissionRequirement = permissionRequirement;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
_userLogServices = userLogServices;
|
||||
}
|
||||
|
||||
|
||||
#region 更新余额
|
||||
|
||||
/// <summary>
|
||||
/// 更新余额
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="money"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<AdminUiCallBack> UpdateBalance(int id, decimal money)
|
||||
{
|
||||
var jm = new AdminUiCallBack();
|
||||
|
||||
var model = await _dal.QueryByIdAsync(id);
|
||||
if (model == null)
|
||||
{
|
||||
jm.msg = "不存在此信息";
|
||||
return jm;
|
||||
}
|
||||
var newMoney = model.balance + money;
|
||||
var up = await _dal.UpdateAsync(p => new CoreCmsUser() { balance = newMoney }, p => p.id == id);
|
||||
if (up)
|
||||
{
|
||||
var balance = new CoreCmsUserBalance();
|
||||
balance.type = (int)GlobalEnumVars.UserBalanceSourceTypes.Admin;
|
||||
balance.userId = model.id;
|
||||
balance.balance = newMoney;
|
||||
balance.createTime = DateTime.Now;
|
||||
balance.memo = UserHelper.GetMemo(balance.type, money);
|
||||
balance.money = money;
|
||||
balance.sourceId = GlobalEnumVars.UserBalanceSourceTypes.Admin.ToString();
|
||||
|
||||
jm.code = await _userBalanceServices.InsertAsync(balance) > 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
jm.msg = jm.code == 0 ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
|
||||
|
||||
return jm;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 更新积分
|
||||
/// <summary>
|
||||
/// 更新积分
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<AdminUiCallBack> UpdatePiont(FMUpdateUserPoint entity)
|
||||
{
|
||||
var jm = new AdminUiCallBack();
|
||||
|
||||
var model = await _dal.QueryByIdAsync(entity.id);
|
||||
if (model == null)
|
||||
{
|
||||
jm.msg = "不存在此信息";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var newPoint = model.point + entity.point;
|
||||
var up = await _dal.UpdateAsync(p => new CoreCmsUser() { point = newPoint }, p => p.id == entity.id);
|
||||
if (up)
|
||||
{
|
||||
var point = new CoreCmsUserPointLog();
|
||||
point.userId = model.id;
|
||||
point.type = (int)GlobalEnumVars.UserPointSourceTypes.PointTypeAdminEdit;
|
||||
point.num = entity.point;
|
||||
point.balance = newPoint;
|
||||
point.remarks = entity.memo;
|
||||
point.createTime = DateTime.Now;
|
||||
|
||||
jm.code = await _userPointLogServices.InsertAsync(point) > 0 ? 0 : 1;
|
||||
}
|
||||
|
||||
jm.msg = jm.code == 0 ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
|
||||
|
||||
|
||||
return jm;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 获取用户的积分
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户的积分
|
||||
/// </summary>
|
||||
/// <param name="userId">用户序列</param>
|
||||
/// <param name="orderMoney">订单金额</param>
|
||||
/// <returns></returns>
|
||||
public async Task<GetUserPointResult> GetUserPoint(int userId, decimal orderMoney)
|
||||
{
|
||||
GetUserPointResult dto = new GetUserPointResult();
|
||||
//1是2否
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
|
||||
var pointSwitch = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointSwitch).ObjectToInt(); //是否开启积分功能
|
||||
if (pointSwitch == 2)
|
||||
{
|
||||
dto.@switch = 2;
|
||||
return dto;
|
||||
}
|
||||
var user = await _dal.QueryByClauseAsync(p => p.id == userId);
|
||||
if (user != null)
|
||||
{
|
||||
dto.point = user.point;
|
||||
if (orderMoney != 0)
|
||||
{
|
||||
//计算可用积分
|
||||
var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToInt(10);//订单积分使用比例
|
||||
//最多可以抵扣的金额
|
||||
var maxPointDeductedMoney = Math.Round((orderMoney * ordersPointProportion) / 100, 2);
|
||||
//订单积分折现比例(多少积分可以折现1块钱)
|
||||
var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
|
||||
//计算需要多少积分
|
||||
var needsPoint = maxPointDeductedMoney * pointDiscountedProportion;
|
||||
//确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
|
||||
dto.availablePoint = Convert.ToInt32(needsPoint > user.point ? user.point : needsPoint);
|
||||
dto.pointExchangeMoney = dto.availablePoint / pointDiscountedProportion;
|
||||
}
|
||||
}
|
||||
return dto;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 修改用户密码,如果用户之前没有密码,那么就不校验原密码
|
||||
/// <summary>
|
||||
/// 修改用户密码,如果用户之前没有密码,那么就不校验原密码
|
||||
/// </summary>
|
||||
public async Task<WebApiCallBack> ChangePassword(int userId, string newPwd, string password = "")
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
//修改密码验证原密码
|
||||
|
||||
var user = await _dal.QueryByIdAsync(userId);
|
||||
if (user == null)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(user.passWord))
|
||||
{
|
||||
if (string.IsNullOrEmpty(password))
|
||||
{
|
||||
jm.msg = "请输入原密码!";
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (user.passWord != CommonHelper.EnPassword(password, user.createTime))
|
||||
{
|
||||
jm.msg = "原密码不正确!";
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(newPwd) || newPwd.Length < 6 || newPwd.Length > 16)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11009;
|
||||
return jm;
|
||||
}
|
||||
|
||||
var md5Pwd = CommonHelper.EnPassword(newPwd, user.createTime);
|
||||
|
||||
if (!string.IsNullOrEmpty(user.passWord) && user.passWord == md5Pwd)
|
||||
{
|
||||
jm.msg = "原密码和新密码一样!";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var bl = await _dal.UpdateAsync(p => new CoreCmsUser() { passWord = md5Pwd, updataTime = DateTime.Now }, p => p.id == userId);
|
||||
jm.status = bl;
|
||||
jm.msg = bl ? "密码修改成功!" : "密码修改失败!";
|
||||
return jm;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 绑定上级
|
||||
/// <summary>
|
||||
/// 绑定上级
|
||||
/// </summary>
|
||||
/// <param name="superiorId"></param>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> SetMyInvite(int superiorId, int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack() { msg = "填写邀请码失败" };
|
||||
|
||||
jm.otherData = superiorId;
|
||||
|
||||
//自己不能邀请自己
|
||||
if (userId == superiorId)
|
||||
{
|
||||
jm.msg = "自己不能邀请自己";
|
||||
return jm;
|
||||
}
|
||||
var user = await _dal.QueryByIdAsync(userId);
|
||||
if (user == null)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
}
|
||||
if (user.parentId != 0)
|
||||
{
|
||||
jm.msg = "已有上级邀请,不能绑定其他的邀请";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var superior = await _dal.QueryByIdAsync(superiorId);
|
||||
if (superior == null)
|
||||
{
|
||||
jm.msg = "不存在这个邀请码";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var flag = IsInvited(userId, superiorId);
|
||||
if (flag)
|
||||
{
|
||||
jm.msg = "不允许填写下级的邀请码";
|
||||
return jm;
|
||||
}
|
||||
|
||||
var bl = await _dal.UpdateAsync(p => new CoreCmsUser() { parentId = superiorId }, p => p.id == userId);
|
||||
jm.status = bl;
|
||||
jm.msg = bl ? "填写邀请码成功!" : "填写邀请码失败!";
|
||||
return jm;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 获取我的上级邀请人
|
||||
/// <summary>
|
||||
/// 获取我的上级邀请人
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> GetMyInvite(int userId)
|
||||
{
|
||||
var jm = new WebApiCallBack() { status = true };
|
||||
|
||||
var user = await _dal.QueryByIdAsync(userId);
|
||||
if (user == null)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
}
|
||||
if (user.parentId == 0)
|
||||
{
|
||||
jm.msg = "无上级邀请人";
|
||||
return jm;
|
||||
}
|
||||
var parentUser = await _dal.QueryByClauseAsync(p => p.id == user.parentId);
|
||||
if (parentUser != null)
|
||||
{
|
||||
jm.data = new
|
||||
{
|
||||
nickname = parentUser.nickName,
|
||||
avatar = parentUser.avatarImage,
|
||||
mobile = UserHelper.FormatMobile(parentUser.mobile),
|
||||
ctime = parentUser.createTime
|
||||
};
|
||||
}
|
||||
return jm;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取下级推广用户数量
|
||||
/// </summary>
|
||||
/// <param name="parentId">父类序列</param>
|
||||
/// <param name="type">1获取1级,其他为2级</param>
|
||||
/// <param name="thisMonth">当月</param>
|
||||
/// <returns></returns>
|
||||
public async Task<int> QueryChildCountAsync(int parentId, int type = 1, bool thisMonth = false)
|
||||
{
|
||||
return await _dal.QueryChildCountAsync(parentId, type, thisMonth);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断userId是否是pid的父节点或者祖父节点,如果是,就返回true,如果不是就返回false
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="pid"></param>
|
||||
/// <returns></returns>
|
||||
private bool IsInvited(int userId, int pid)
|
||||
{
|
||||
var info = _dal.QueryById(pid);
|
||||
if (info == null || info.parentId == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (info.parentId == userId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return IsInvited(userId, info.parentId);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 忘记密码,找回密码
|
||||
/// <summary>
|
||||
/// 忘记密码,找回密码
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="newPwd"></param>
|
||||
/// <param name="cTime"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> ForgetPassword(string mobile, string code, string newPwd)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
if (string.IsNullOrEmpty(code))
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10013;
|
||||
return jm;
|
||||
}
|
||||
var smsBool = await _smsServices.Check(mobile, code, "veri");
|
||||
if (!smsBool)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10012;
|
||||
return jm;
|
||||
}
|
||||
var userInfo = await _dal.QueryByClauseAsync(p => p.mobile == mobile);
|
||||
if (userInfo == null)
|
||||
{
|
||||
jm.msg = "没有此手机号码";
|
||||
return jm;
|
||||
}
|
||||
return await EditPwd(userInfo.id, newPwd, userInfo.createTime);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 修改密码
|
||||
/// <summary>
|
||||
/// 修改密码
|
||||
/// </summary>
|
||||
/// <param name="userId">用户序列</param>
|
||||
/// <param name="newPwd">新密码</param>
|
||||
/// <param name="createTime">创建时间</param>
|
||||
/// <returns></returns>
|
||||
private async Task<WebApiCallBack> EditPwd(int userId, string newPwd, DateTime createTime)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
if (string.IsNullOrEmpty(newPwd) || newPwd.Length < 6 || newPwd.Length > 16)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11009;
|
||||
return jm;
|
||||
}
|
||||
var md5Pwd = CommonHelper.EnPassword(newPwd, createTime);
|
||||
var up = await _dal.UpdateAsync(p => new CoreCmsUser() { passWord = md5Pwd }, p => p.id == userId);
|
||||
if (!up)
|
||||
{
|
||||
jm.status = false;
|
||||
jm.msg = "密码修改失败";
|
||||
return jm;
|
||||
}
|
||||
jm.status = true;
|
||||
jm.msg = "密码修改成功";
|
||||
return jm;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
|
||||
|
||||
/// <summary>
|
||||
/// 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
|
||||
/// </summary>
|
||||
/// <param name="entity">实体数据</param>
|
||||
/// <param name="loginType">登录方式(1普通,2短信,3微信小程序拉取手机号)</param>
|
||||
/// <param name="platform"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> SmsLogin(FMWxAccountCreate entity, int loginType = (int)GlobalEnumVars.LoginType.WeChatPhoneNumber, int platform = 1)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
if (string.IsNullOrEmpty(entity.mobile))
|
||||
{
|
||||
jm.msg = "请输入手机号码";
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (!CommonHelper.IsMobile(entity.mobile))
|
||||
{
|
||||
jm.msg = "请输入合法的手机号码";
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (loginType == (int)GlobalEnumVars.LoginType.Sms)
|
||||
{
|
||||
if (string.IsNullOrEmpty(entity.code))
|
||||
{
|
||||
jm.msg = "请输入验证码";
|
||||
return jm;
|
||||
}
|
||||
|
||||
if (!await _smsServices.Check(entity.mobile, entity.code, "login"))
|
||||
{
|
||||
jm.msg = "短信验证码错误";
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
|
||||
var isReg = false;
|
||||
var userInfo = await _dal.QueryByClauseAsync(p => p.mobile == entity.mobile);
|
||||
if (userInfo == null)
|
||||
{
|
||||
isReg = true;
|
||||
userInfo = new CoreCmsUser();
|
||||
userInfo.userName = entity.mobile;
|
||||
userInfo.mobile = entity.mobile;
|
||||
userInfo.sex = 3;
|
||||
userInfo.isDelete = false;
|
||||
userInfo.balance = 0;
|
||||
userInfo.point = 0;
|
||||
userInfo.userWx = 0;
|
||||
userInfo.status = (int)GlobalEnumVars.UserStatus.正常;
|
||||
userInfo.createTime = DateTime.Now;
|
||||
|
||||
//没有此用户,创建此用户
|
||||
if (!string.IsNullOrEmpty(entity.sessionAuthId))
|
||||
{
|
||||
var wxUserInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == entity.sessionAuthId);
|
||||
if (wxUserInfo != null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(entity.avatar))
|
||||
{
|
||||
entity.avatar = wxUserInfo.avatar;
|
||||
}
|
||||
if (string.IsNullOrEmpty(entity.nickname))
|
||||
{
|
||||
entity.nickname = wxUserInfo.nickName;
|
||||
}
|
||||
userInfo.sex = wxUserInfo?.gender ?? 3;
|
||||
userInfo.userWx = wxUserInfo?.id ?? 0;
|
||||
}
|
||||
}
|
||||
//如果没有头像和昵称,那么就取系统头像和昵称吧
|
||||
if (!string.IsNullOrEmpty(entity.avatar))
|
||||
{
|
||||
userInfo.avatarImage = entity.avatar;
|
||||
}
|
||||
else
|
||||
{
|
||||
var allConfigs = await _settingServices.GetConfigDictionaries();
|
||||
var defaultImage = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage);
|
||||
userInfo.avatarImage = defaultImage;
|
||||
}
|
||||
|
||||
userInfo.nickName = !string.IsNullOrEmpty(entity.nickname) ? entity.nickname : UserHelper.FormatMobile(entity.mobile);
|
||||
|
||||
if (entity.invitecode > 0)
|
||||
{
|
||||
var pid = UserHelper.GetUserIdByShareCode(entity.invitecode);
|
||||
var pInfo = await _dal.QueryByClauseAsync(p => p.id == pid);
|
||||
if (pInfo != null)
|
||||
{
|
||||
userInfo.parentId = pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10014;
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(entity.password))
|
||||
{
|
||||
//判断密码是否符合要求
|
||||
if (entity.password.Length < 5 || entity.password.Length > 16)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11009;
|
||||
return jm;
|
||||
}
|
||||
userInfo.passWord = CommonHelper.EnPassword(entity.password, userInfo.createTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
userInfo.passWord = "";
|
||||
}
|
||||
|
||||
//取默认的用户等级
|
||||
var userGradeInfo = await _userGradeServices.QueryByClauseAsync(p => p.isDefault == true);
|
||||
userInfo.grade = userGradeInfo?.id ?? 0;
|
||||
|
||||
var userId = await _dal.InsertAsync(userInfo);
|
||||
if (userId == 0)
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code10000;
|
||||
return jm;
|
||||
}
|
||||
userInfo = await _dal.QueryByIdAsync(userId);
|
||||
}
|
||||
else
|
||||
{
|
||||
//如果有这个账号的话,判断一下是不是传密码了,如果传密码了,就是注册,这里就有问题,因为已经注册过
|
||||
if (!string.IsNullOrEmpty(entity.password))
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11019;
|
||||
return jm;
|
||||
}
|
||||
}
|
||||
//判断是否是小程序里的微信登陆,如果是,就给他绑定微信账号
|
||||
if (!string.IsNullOrEmpty(entity.sessionAuthId))
|
||||
{
|
||||
var updateAsync = await _userWeChatInfoServices.UpdateAsync(p => new CoreCmsUserWeChatInfo() { userId = userInfo.id }, p => p.openid == entity.sessionAuthId);
|
||||
if (updateAsync)
|
||||
{
|
||||
//多个微信可能同时授权一个号码登录。
|
||||
//如果已经存在微信用户(A)数据绑定了手机号码。
|
||||
//使用新微信(B)登录,同时又授权此手机号码绑定。
|
||||
//小程序内微信支付时候,因为登录的微信(B)与拉取手机号码绑定后获取到数据是(A)。
|
||||
//会导致微信数据报错()
|
||||
await _userWeChatInfoServices.UpdateAsync(p => new CoreCmsUserWeChatInfo() { userId = 0 }, p => p.openid != entity.sessionAuthId && p.userId == userInfo.id);
|
||||
}
|
||||
//如果是别的未绑定微信用户进来,则反向直接关联。
|
||||
var wxUserInfo = await _userWeChatInfoServices.QueryByClauseAsync(p => p.openid == entity.sessionAuthId);
|
||||
if (wxUserInfo != null)
|
||||
{
|
||||
await _dal.UpdateAsync(p => new CoreCmsUser() { userWx = wxUserInfo.id }, p => p.id == userInfo.id);
|
||||
}
|
||||
}
|
||||
|
||||
if (userInfo.status == (int)GlobalEnumVars.UserStatus.正常)
|
||||
{
|
||||
var claims = new List<Claim> {
|
||||
new Claim(ClaimTypes.Name, userInfo.nickName),
|
||||
new Claim(JwtRegisteredClaimNames.Jti, userInfo.id.ToString()),
|
||||
new Claim(ClaimTypes.Expiration, DateTime.Now.AddSeconds(_permissionRequirement.Expiration.TotalSeconds).ToString()) };
|
||||
//用户标识
|
||||
var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
|
||||
identity.AddClaims(claims);
|
||||
jm.status = true;
|
||||
jm.msg = "注册成功";
|
||||
jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
|
||||
//录入登录日志
|
||||
var log = new CoreCmsUserLog();
|
||||
log.userId = userInfo.id;
|
||||
log.state = isReg ? (int)GlobalEnumVars.UserLogTypes.注册 : (int)GlobalEnumVars.UserLogTypes.登录;
|
||||
log.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ?
|
||||
_httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
|
||||
log.createTime = DateTime.Now;
|
||||
log.parameters = isReg ? GlobalEnumVars.UserLogTypes.注册.ToString() : GlobalEnumVars.UserLogTypes.登录.ToString();
|
||||
await _userLogServices.InsertAsync(log);
|
||||
}
|
||||
else
|
||||
{
|
||||
jm.msg = GlobalErrorCodeVars.Code11022;
|
||||
return jm;
|
||||
}
|
||||
return jm;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<IPageList<CoreCmsUser>> QueryPageAsync(Expression<Func<CoreCmsUser, bool>> predicate,
|
||||
Expression<Func<CoreCmsUser, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 按天统计新会员
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<StatisticsOut>> Statistics(int day)
|
||||
{
|
||||
return await _dal.Statistics(day);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按天统计当天下单活跃会员
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<StatisticsOut>> StatisticsOrder(int day)
|
||||
{
|
||||
|
||||
return await _dal.StatisticsOrder(day);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
59
CoreCms.Net.Services/User/CoreCmsUserShipServices.cs
Normal file
59
CoreCms.Net.Services/User/CoreCmsUserShipServices.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
/***********************************************************************
|
||||
* 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.Threading.Tasks;
|
||||
using CoreCms.Net.Configuration;
|
||||
using CoreCms.Net.IRepository;
|
||||
using CoreCms.Net.IRepository.UnitOfWork;
|
||||
using CoreCms.Net.IServices;
|
||||
using CoreCms.Net.Model.Entities;
|
||||
using CoreCms.Net.Model.ViewModels.UI;
|
||||
|
||||
|
||||
namespace CoreCms.Net.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户地址表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserShipServices : BaseServices<CoreCmsUserShip>, ICoreCmsUserShipServices
|
||||
{
|
||||
private readonly ICoreCmsUserShipRepository _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
public CoreCmsUserShipServices(IUnitOfWork unitOfWork, ICoreCmsUserShipRepository dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步插入方法
|
||||
/// </summary>
|
||||
/// <param name="entity">实体数据</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<WebApiCallBack> InsertAsync(CoreCmsUserShip entity)
|
||||
{
|
||||
return await _dal.InsertAsync(entity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 重写异步更新方法方法
|
||||
/// </summary>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public new async Task<AdminUiCallBack> UpdateAsync(CoreCmsUserShip entity)
|
||||
{
|
||||
return await _dal.UpdateAsync(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
288
CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs
Normal file
288
CoreCms.Net.Services/User/CoreCmsUserTocashServices.cs
Normal file
@@ -0,0 +1,288 @@
|
||||
/***********************************************************************
|
||||
* 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
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户提现记录表 接口实现
|
||||
/// </summary>
|
||||
public class CoreCmsUserTocashServices : BaseServices<CoreCmsUserTocash>, 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 提现申请
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> Tocash(int userId, decimal money, int bankCardsId)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
using var container = _serviceProvider.CreateScope();
|
||||
|
||||
var settingServices = container.ServiceProvider.GetService<ICoreCmsSettingServices>();
|
||||
var userServices = container.ServiceProvider.GetService<ICoreCmsUserServices>();
|
||||
var userBankCardServices = container.ServiceProvider.GetService<ICoreCmsUserBankCardServices>();
|
||||
var balanceServices = container.ServiceProvider.GetService<ICoreCmsUserBalanceServices>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取用户提现列表记录
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="page"></param>
|
||||
/// <param name="limit"></param>
|
||||
/// <param name="status"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> UserToCashList(int userId = 0, int page = 1, int limit = 10, int status = 0)
|
||||
{
|
||||
var jm = new WebApiCallBack();
|
||||
|
||||
var where = PredicateBuilder.True<CoreCmsUserTocash>();
|
||||
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<GlobalEnumVars.UserTocashTypes>(item.status);
|
||||
item.cardNumber = UserHelper.BankCardNoFormat(item.cardNumber);
|
||||
}
|
||||
}
|
||||
|
||||
jm.status = true;
|
||||
jm.data = list;
|
||||
jm.otherData = new
|
||||
{
|
||||
list.TotalPages
|
||||
};
|
||||
|
||||
return jm;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 提现审核
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="status"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<WebApiCallBack> 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 重写根据条件查询分页数据
|
||||
/// <summary>
|
||||
/// 重写根据条件查询分页数据
|
||||
/// </summary>
|
||||
/// <param name="predicate">判断集合</param>
|
||||
/// <param name="orderByType">排序方式</param>
|
||||
/// <param name="pageIndex">当前页面索引</param>
|
||||
/// <param name="pageSize">分布大小</param>
|
||||
/// <param name="orderByExpression"></param>
|
||||
/// <param name="blUseNoLock">是否使用WITH(NOLOCK)</param>
|
||||
/// <returns></returns>
|
||||
public new async Task<IPageList<CoreCmsUserTocash>> QueryPageAsync(Expression<Func<CoreCmsUserTocash, bool>> predicate,
|
||||
Expression<Func<CoreCmsUserTocash, object>> orderByExpression, OrderByType orderByType, int pageIndex = 1,
|
||||
int pageSize = 20, bool blUseNoLock = false)
|
||||
{
|
||||
return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize, blUseNoLock);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user