diff --git a/CoreCms.Net.Services/Pay/WeChatPayServices.cs b/CoreCms.Net.Services/Pay/WeChatPayServices.cs
index 507e6f1f..2d388c36 100644
--- a/CoreCms.Net.Services/Pay/WeChatPayServices.cs
+++ b/CoreCms.Net.Services/Pay/WeChatPayServices.cs
@@ -29,6 +29,7 @@ using Newtonsoft.Json.Linq;
using QRCoder;
using SKIT.FlurlHttpClient.Wechat.Api;
using SKIT.FlurlHttpClient.Wechat.Api.Models;
+using SqlSugar;
namespace CoreCms.Net.Services
{
@@ -80,7 +81,7 @@ namespace CoreCms.Net.Services
var payment = await billPaymentsServices.QueryByClauseAsync(p => p.paymentId == entity.paymentId);
var checkBeforeAddOrder = await checkBeforeAddOrderServices.QueryByClauseAsync(p => p.orderId == payment.sourceId);
- if (checkBeforeAddOrder != null && checkBeforeAddOrder.requireOrder == (int)GlobalEnumVars.RequireOrderType.需要)
+ if (checkBeforeAddOrder is { requireOrder: (int)GlobalEnumVars.RequireOrderType.需要 })
{
var order = await transactionComponentOrderServices.QueryByClauseAsync(p => p.outOrderId == payment.sourceId);
@@ -158,26 +159,38 @@ namespace CoreCms.Net.Services
var openId = string.Empty;
if (tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString() || tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI_OFFICIAL.ToString())
{
- var userAccount = await _userServices.QueryByIdAsync(_user.ID);
- if (userAccount == null)
- {
- jm.msg = "用户账户获取失败";
- return jm;
- }
+ //var userAccount = await _userServices.QueryByIdAsync(_user.ID);
+ //if (userAccount == null)
+ //{
+ // jm.msg = "用户账户获取失败";
+ // return jm;
+ //}
- if (userAccount.userWx <= 0)
- {
- jm.msg = "账户关联微信用户信息获取失败";
- return jm;
- }
+ //if (userAccount.userWx <= 0)
+ //{
+ // jm.msg = "账户关联微信用户信息获取失败";
+ // return jm;
+ //}
- var user = await _userWeChatInfoServices.QueryByClauseAsync(p => p.id == userAccount.userWx);
+ //var user = await _userWeChatInfoServices.QueryByClauseAsync(p => p.id == userAccount.userWx);
+ //if (user == null)
+ //{
+ // jm.msg = "微信用户信息获取失败";
+ // return jm;
+ //}
+
+ var type = tradeType == GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString()
+ ? (int)GlobalEnumVars.UserAccountTypes.微信小程序
+ : (int)GlobalEnumVars.UserAccountTypes.微信公众号;
+
+ var user = await _userWeChatInfoServices.QueryByClauseAsync(p => p.userId == _user.ID && p.type == type, p => p.createTime, OrderByType.Desc);
if (user == null)
{
jm.msg = "微信用户信息获取失败";
return jm;
}
+
openId = user.openid;
}
diff --git a/CoreCms.Net.Services/User/CoreCmsUserServices.cs b/CoreCms.Net.Services/User/CoreCmsUserServices.cs
index 2b1e1f67..0322bc29 100644
--- a/CoreCms.Net.Services/User/CoreCmsUserServices.cs
+++ b/CoreCms.Net.Services/User/CoreCmsUserServices.cs
@@ -34,826 +34,884 @@ using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
-namespace CoreCms.Net.Services
+namespace CoreCms.Net.Services;
+
+///
+/// 用户表 接口实现
+///
+public class CoreCmsUserServices : BaseServices, ICoreCmsUserServices
{
- ///
- /// 用户表 接口实现
- ///
- public class CoreCmsUserServices : BaseServices, 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 IServiceProvider _serviceProvider;
+
+ private readonly IUnitOfWork _unitOfWork;
+ private readonly PermissionRequirement _permissionRequirement;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
+
+
+ public CoreCmsUserServices(IUnitOfWork unitOfWork
+ , ICoreCmsUserRepository dal
+ , ICoreCmsUserBalanceServices userBalanceServices
+ , ICoreCmsSettingServices settingServices
+ , ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices,
+ ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices,
+ PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor,
+ ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider,
+ ICoreCmsBillPaymentsServices billPaymentsServices)
{
- 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 IServiceProvider _serviceProvider;
-
- private readonly IUnitOfWork _unitOfWork;
- private readonly PermissionRequirement _permissionRequirement;
- private readonly IHttpContextAccessor _httpContextAccessor;
- private readonly ICoreCmsBillPaymentsServices _billPaymentsServices;
+ _dal = dal;
+ BaseDal = dal;
+ _unitOfWork = unitOfWork;
+ _userBalanceServices = userBalanceServices;
+ _settingServices = settingServices;
+ _userPointLogServices = userPointLogServices;
+ _smsServices = smsServices;
+ _userWeChatInfoServices = userWeChatInfoServices;
+ _userGradeServices = userGradeServices;
+ _permissionRequirement = permissionRequirement;
+ _httpContextAccessor = httpContextAccessor;
+ _userLogServices = userLogServices;
+ _serviceProvider = serviceProvider;
+ _billPaymentsServices = billPaymentsServices;
+ }
- public CoreCmsUserServices(IUnitOfWork unitOfWork
- , ICoreCmsUserRepository dal
- , ICoreCmsUserBalanceServices userBalanceServices
- , ICoreCmsSettingServices settingServices
- , ICoreCmsUserPointLogServices userPointLogServices, ICoreCmsSmsServices smsServices, ICoreCmsUserWeChatInfoServices userWeChatInfoServices, ICoreCmsUserGradeServices userGradeServices, PermissionRequirement permissionRequirement, IHttpContextAccessor httpContextAccessor, ICoreCmsUserLogServices userLogServices, IServiceProvider serviceProvider, ICoreCmsBillPaymentsServices billPaymentsServices)
+ #region 更新余额
+
+ ///
+ /// 更新余额
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task UpdateBalance(int id, decimal money, string memo)
+ {
+ var jm = new AdminUiCallBack();
+
+ var model = await _dal.QueryByIdAsync(id);
+ if (model == null)
{
- 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;
- _serviceProvider = serviceProvider;
- _billPaymentsServices = billPaymentsServices;
- }
-
-
- #region 更新余额
-
- ///
- /// 更新余额
- ///
- ///
- ///
- ///
- ///
- public async Task UpdateBalance(int id, decimal money, string memo)
- {
- 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 = !string.IsNullOrEmpty(memo) ? 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;
-
+ jm.msg = "不存在此信息";
return jm;
}
- #endregion
-
- #region 更新积分
- ///
- /// 更新积分
- ///
- ///
- ///
- public async Task UpdatePiont(FMUpdateUserPoint entity)
+ var newMoney = model.balance + money;
+ var up = await _dal.UpdateAsync(p => new CoreCmsUser() { balance = newMoney }, p => p.id == id);
+ if (up)
{
- var jm = new AdminUiCallBack();
+ var balance = new CoreCmsUserBalance();
+ balance.type = (int)GlobalEnumVars.UserBalanceSourceTypes.Admin;
+ balance.userId = model.id;
+ balance.balance = newMoney;
+ balance.createTime = DateTime.Now;
+ balance.memo = !string.IsNullOrEmpty(memo) ? memo : UserHelper.GetMemo(balance.type, money);
+ balance.money = money;
+ balance.sourceId = GlobalEnumVars.UserBalanceSourceTypes.Admin.ToString();
- var model = await _dal.QueryByIdAsync(entity.id);
- if (model == null)
- {
- jm.msg = "不存在此信息";
- return jm;
- }
+ jm.code = await _userBalanceServices.InsertAsync(balance) > 0 ? 0 : 1;
+ }
- 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.msg = jm.code == 0 ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
- jm.code = await _userPointLogServices.InsertAsync(point) > 0 ? 0 : 1;
- }
+ return jm;
+ }
- jm.msg = jm.code == 0 ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure;
+ #endregion
+ #region 更新积分
+ ///
+ /// 更新积分
+ ///
+ ///
+ ///
+ public async Task UpdatePiont(FMUpdateUserPoint entity)
+ {
+ var jm = new AdminUiCallBack();
+
+ var model = await _dal.QueryByIdAsync(entity.id);
+ if (model == null)
+ {
+ jm.msg = "不存在此信息";
return jm;
}
- #endregion
- #region 获取用户的积分
-
- ///
- /// 获取用户的积分
- ///
- /// 用户序列
- /// 订单金额
- /// 货品序列
- /// 购物车类型
- ///
- public async Task GetUserPoint(int userId, decimal orderMoney, int[] ids, int cartType)
+ 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;
- GetUserPointResult dto = new GetUserPointResult();
- //1是2否
- var allConfigs = await _settingServices.GetConfigDictionaries();
+ return jm;
+ }
- 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;
+ #endregion
- var pointExchangeModel = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointExchangeModel).ObjectToInt(); //判断是全局模式还是单品模式
- if (pointExchangeModel == 1)
- {
- if (orderMoney != 0)
- {
- //计算可用积分//订单积分使用比例
- var ordersPointProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion).ObjectToDecimal(10);
- var proportion = Math.Round(ordersPointProportion / 100, 4);
- //最多可以抵扣的金额
- var maxPointDeductedMoney = Math.Round(orderMoney * proportion, 4);
+ #region 获取用户的积分
- //订单积分折现比例(多少积分可以折现1块钱)
- var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToDecimal(100);
- //计算需要多少积分
- var needsPoint = maxPointDeductedMoney * pointDiscountedProportion;
- //确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
- var availablePoint = needsPoint > user.point ? user.point : needsPoint;
- dto.availablePoint = Convert.ToInt32(availablePoint);
- dto.pointExchangeMoney = Math.Round(availablePoint / pointDiscountedProportion, 4);
- //dto.pointExchangeMoney = dto.availablePoint / pointDiscountedProportion;
- }
- }
- else if (pointExchangeModel == 2)
- {
- using var container = _serviceProvider.CreateScope();
+ ///
+ /// 获取用户的积分
+ ///
+ /// 用户序列
+ /// 订单金额
+ /// 货品序列
+ /// 购物车类型
+ ///
+ public async Task GetUserPoint(int userId, decimal orderMoney, int[] ids, int cartType)
+ {
+ var dto = new GetUserPointResult();
+ //1是2否
+ var allConfigs = await _settingServices.GetConfigDictionaries();
- var cartServices = container.ServiceProvider.GetService();
- var productsServices = container.ServiceProvider.GetService();
-
- //获取购物车数据
- var cartProducts = await cartServices.QueryListByClauseAsync(p => p.type == cartType && p.userId == userId && ids.Contains(p.id));
- if (cartProducts.Any())
- {
- //获取购物车货品序列
- var cartIds = cartProducts.Select(p => p.productId).ToList();
- //根据货品序列去找货品
- var products = await productsServices.QueryListByClauseAsync(p => cartIds.Contains(p.id));
- if (products.Any())
- {
- //可抵扣金额
- decimal money = 0;
- //迭代货品,获取到最高可优惠金额,进行累加
- foreach (var item in products)
- {
- var numObj = cartProducts.Find(p => p.productId == item.id);
- if (numObj != null)
- {
- money += numObj.nums * item.pointsDeduction;
- }
- }
- //计算抵扣这么多金额需要多少积分。
- //订单积分折现比例(多少积分可以折现1块钱)
- var pointDiscountedProportion = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion).ObjectToInt(100);
- //计算需要多少积分
- var needsPoint = money * pointDiscountedProportion;
-
- //确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
- var availablePoint = needsPoint > user.point ? 0 : needsPoint;
- dto.availablePoint = Convert.ToInt32(availablePoint);
-
- dto.pointExchangeMoney = user.point > needsPoint ? money : 0;
- }
- }
-
- }
- }
+ var pointSwitch = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.PointSwitch)
+ .ObjectToInt(); //是否开启积分功能
+ if (pointSwitch == 2)
+ {
+ dto.@switch = 2;
return dto;
}
- #endregion
- #region 修改用户密码,如果用户之前没有密码,那么就不校验原密码
- ///
- /// 修改用户密码,如果用户之前没有密码,那么就不校验原密码
- ///
- public async Task ChangePassword(int userId, string newPwd, string password = "")
+ var user = await _dal.QueryByClauseAsync(p => p.id == userId);
+ if (user != null)
{
- var jm = new WebApiCallBack();
+ dto.point = user.point;
- //修改密码验证原密码
-
- var user = await _dal.QueryByIdAsync(userId);
- if (user == null)
+ var pointExchangeModel = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.PointExchangeModel)
+ .ObjectToInt(); //判断是全局模式还是单品模式
+ if (pointExchangeModel == 1)
{
- jm.msg = GlobalErrorCodeVars.Code10000;
- return jm;
- }
-
- if (!string.IsNullOrEmpty(user.passWord))
- {
- if (string.IsNullOrEmpty(password))
+ if (orderMoney != 0)
{
- jm.msg = "请输入原密码!";
- return jm;
- }
+ //计算可用积分//订单积分使用比例
+ var ordersPointProportion = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.OrdersPointProportion)
+ .ObjectToDecimal(10);
+ var proportion = Math.Round(ordersPointProportion / 100, 4);
+ //最多可以抵扣的金额
+ var maxPointDeductedMoney = Math.Round(orderMoney * proportion, 4);
- if (user.passWord != CommonHelper.EnPassword(password, user.createTime))
- {
- jm.msg = "原密码不正确!";
- return jm;
+ //订单积分折现比例(多少积分可以折现1块钱)
+ var pointDiscountedProportion = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion)
+ .ObjectToDecimal(100);
+ //计算需要多少积分
+ var needsPoint = maxPointDeductedMoney * pointDiscountedProportion;
+ //确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
+ var availablePoint = needsPoint > user.point ? user.point : needsPoint;
+ dto.availablePoint = Convert.ToInt32(availablePoint);
+ dto.pointExchangeMoney = Math.Round(availablePoint / pointDiscountedProportion, 4);
+ //dto.pointExchangeMoney = dto.availablePoint / pointDiscountedProportion;
}
}
-
- if (string.IsNullOrEmpty(newPwd) || newPwd.Length < 6 || newPwd.Length > 16)
+ else if (pointExchangeModel == 2)
{
- jm.msg = GlobalErrorCodeVars.Code11009;
- return jm;
- }
+ using var container = _serviceProvider.CreateScope();
- var md5Pwd = CommonHelper.EnPassword(newPwd, user.createTime);
+ var cartServices = container.ServiceProvider.GetService();
+ var productsServices = container.ServiceProvider.GetService();
- 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 绑定上级
- ///
- /// 绑定上级
- ///
- ///
- ///
- ///
- public async Task 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);
-
- //增加上级积分
- if (bl)
- {
- var allConfigs = await _settingServices.GetConfigDictionaries();
- var inviterUserIntegral = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
- if (inviterUserIntegral > 0)
+ //获取购物车数据
+ var cartProducts = await cartServices.QueryListByClauseAsync(p =>
+ p.type == cartType && p.userId == userId && ids.Contains(p.id));
+ if (cartProducts.Any())
{
- await _userPointLogServices.SetPoint(superiorId, inviterUserIntegral, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
- }
- }
-
- jm.status = bl;
- jm.msg = bl ? "填写邀请码成功!" : "填写邀请码失败!";
- return jm;
- }
- #endregion
-
- #region 获取我的上级邀请人
- ///
- /// 获取我的上级邀请人
- ///
- ///
- ///
- public async Task 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;
- }
-
-
- ///
- /// 获取下级推广用户数量
- ///
- /// 父类序列
- /// 1获取1级,其他为2级
- /// 当月
- ///
- public async Task QueryChildCountAsync(int parentId, int type = 1, bool thisMonth = false)
- {
- return await _dal.QueryChildCountAsync(parentId, type, thisMonth);
- }
-
- ///
- /// 判断userId是否是pid的父节点或者祖父节点,如果是,就返回true,如果不是就返回false
- ///
- ///
- ///
- ///
- 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 忘记密码,找回密码
- ///
- /// 忘记密码,找回密码
- ///
- ///
- ///
- ///
- ///
- public async Task 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 修改密码
- ///
- /// 修改密码
- ///
- /// 用户序列
- /// 新密码
- /// 创建时间
- ///
- private async Task 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 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
-
- ///
- /// 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
- ///
- /// 实体数据
- /// 登录方式(1普通,2短信,3微信小程序拉取手机号)
- ///
- ///
- public async Task SmsLogin(FMWxAccountCreate entity, int loginType = (int)GlobalEnumVars.LoginType.WeChatPhoneNumber, int platform = (int)GlobalEnumVars.CoreShopSystemCategory.Api)
- {
- 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)
+ //获取购物车货品序列
+ var cartIds = cartProducts.Select(p => p.productId).ToList();
+ //根据货品序列去找货品
+ var products = await productsServices.QueryListByClauseAsync(p => cartIds.Contains(p.id));
+ if (products.Any())
{
- if (string.IsNullOrEmpty(entity.avatar))
+ //可抵扣金额
+ decimal money = 0;
+ //迭代货品,获取到最高可优惠金额,进行累加
+ foreach (var item in products)
{
- entity.avatar = wxUserInfo.avatar;
+ var numObj = cartProducts.Find(p => p.productId == item.id);
+ if (numObj != null) money += numObj.nums * item.pointsDeduction;
}
- if (string.IsNullOrEmpty(entity.nickname))
- {
- entity.nickname = wxUserInfo.nickName;
- }
- userInfo.sex = wxUserInfo?.gender ?? 3;
- userInfo.userWx = wxUserInfo?.id ?? 0;
+
+ //计算抵扣这么多金额需要多少积分。
+ //订单积分折现比例(多少积分可以折现1块钱)
+ var pointDiscountedProportion = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.PointDiscountedProportion)
+ .ObjectToInt(100);
+ //计算需要多少积分
+ var needsPoint = money * pointDiscountedProportion;
+
+ //确定是否有那么多积分去抵扣比例计算出的能抵扣的钱
+ var availablePoint = needsPoint > user.point ? 0 : needsPoint;
+ dto.availablePoint = Convert.ToInt32(availablePoint);
+
+ dto.pointExchangeMoney = user.point > needsPoint ? money : 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;
- }
-
- if (userId > 0 && entity.invitecode > 0 && userInfo.parentId > 0)
- {
- var allConfigs = await _settingServices.GetConfigDictionaries();
- var inviterUserIntegral = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
- if (inviterUserIntegral > 0)
- {
- await _userPointLogServices.SetPoint(userInfo.parentId, inviterUserIntegral, (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
- }
- }
- userInfo = await _dal.QueryByIdAsync(userId);
}
- else
+ }
+
+ return dto;
+ }
+
+ #endregion
+
+ #region 修改用户密码,如果用户之前没有密码,那么就不校验原密码
+
+ ///
+ /// 修改用户密码,如果用户之前没有密码,那么就不校验原密码
+ ///
+ public async Task 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))
{
- //如果有这个账号的话,判断一下是不是传密码了,如果传密码了,就是注册,这里就有问题,因为已经注册过
- if (!string.IsNullOrEmpty(entity.password))
- {
- jm.msg = GlobalErrorCodeVars.Code11019;
- return jm;
- }
+ 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 绑定上级
+
+ ///
+ /// 绑定上级
+ ///
+ ///
+ ///
+ ///
+ public async Task 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);
+
+ //增加上级积分
+ if (bl)
+ {
+ var allConfigs = await _settingServices.GetConfigDictionaries();
+ var inviterUserIntegral = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral).ObjectToInt(); //是否开启积分功能
+ if (inviterUserIntegral > 0)
+ await _userPointLogServices.SetPoint(superiorId, inviterUserIntegral,
+ (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
+ }
+
+ jm.status = bl;
+ jm.msg = bl ? "填写邀请码成功!" : "填写邀请码失败!";
+ return jm;
+ }
+
+ #endregion
+
+ #region 获取我的上级邀请人
+
+ ///
+ /// 获取我的上级邀请人
+ ///
+ ///
+ ///
+ public async Task 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;
+ }
+
+
+ ///
+ /// 获取下级推广用户数量
+ ///
+ /// 父类序列
+ /// 1获取1级,其他为2级
+ /// 当月
+ ///
+ public async Task QueryChildCountAsync(int parentId, int type = 1, bool thisMonth = false)
+ {
+ return await _dal.QueryChildCountAsync(parentId, type, thisMonth);
+ }
+
+ ///
+ /// 判断userId是否是pid的父节点或者祖父节点,如果是,就返回true,如果不是就返回false
+ ///
+ ///
+ ///
+ ///
+ 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 忘记密码,找回密码
+
+ ///
+ /// 忘记密码,找回密码
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task 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 修改密码
+
+ ///
+ /// 修改密码
+ ///
+ /// 用户序列
+ /// 新密码
+ /// 创建时间
+ ///
+ private async Task 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 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
+
+ ///
+ /// 手机短信验证码登陆,同时兼有手机短信注册的功能,还有第三方账户绑定的功能
+ ///
+ /// 实体数据
+ /// 登录方式(1普通,2短信,3微信小程序拉取手机号)
+ ///
+ ///
+ public async Task SmsLogin(FMWxAccountCreate entity,
+ int loginType = (int)GlobalEnumVars.LoginType.WeChatPhoneNumber,
+ int platform = (int)GlobalEnumVars.CoreShopSystemCategory.Api)
+ {
+ 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 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);
+ 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 (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 (userInfo.status == (int)GlobalEnumVars.UserStatus.正常)
+ //如果没有头像和昵称,那么就取系统头像和昵称吧
+ if (!string.IsNullOrEmpty(entity.avatar))
{
- jm.status = true;
- jm.msg = "成功";
- jm.otherData = userInfo;
-
- if (platform == (int)GlobalEnumVars.CoreShopSystemCategory.Api)
- {
- var claims = new List {
- 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.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
- }
- else
- {
- jm.data = userInfo;
- }
-
- //录入登录日志
- 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);
+ userInfo.avatarImage = entity.avatar;
}
else
{
- jm.msg = GlobalErrorCodeVars.Code11022;
- return jm;
- }
- return jm;
- }
-
- #endregion
-
- #region 根据条件查询分页数据
- ///
- /// 根据条件查询分页数据
- ///
- /// 判断集合
- /// 排序方式
- /// 当前页面索引
- /// 分布大小
- ///
- ///
- public async Task> QueryPageAsync(Expression> predicate,
- Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
- int pageSize = 20)
- {
- return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
- }
-
- #endregion
-
- #region 按天统计新会员
- ///
- /// 按天统计新会员
- ///
- ///
- public async Task> Statistics(int day)
- {
- return await _dal.Statistics(day);
- }
- #endregion
-
- #region 按天统计当天下单活跃会员
- ///
- /// 按天统计当天下单活跃会员
- ///
- ///
- public async Task> StatisticsOrder(int day)
- {
-
- return await _dal.StatisticsOrder(day);
- }
- #endregion
-
-
- #region 当关闭分销和代理的时候走个人邀请好友分佣
- ///
- /// 当关闭分销和代理的时候走个人邀请好友分佣
- ///
- ///
- ///
- public async Task InviteCommission(string orderId)
- {
- using var container = _serviceProvider.CreateScope();
- var _orderServices = container.ServiceProvider.GetService();
- var _billPaymentsServices = container.ServiceProvider.GetService();
-
-
- var jm = new WebApiCallBack();
- var allConfigs = await _settingServices.GetConfigDictionaries();
- //分佣类型(1百分比/2固定金额)
- var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType).ObjectToInt(0);
- //一级佣金
- var commissionFirst = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0);
- //二级佣金
- var commissionSecond = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond).ObjectToDecimal(0);
- //三级佣金
- var commissionThird = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst).ObjectToDecimal(0);
- //是否开启三级分销(1开启,2未开启)
- var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution).ObjectToInt(0);
- //是否开启代理模块(1开启,2未开启)
- var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent).ObjectToInt(0);
-
- //当分销模块和代理模块都关闭的情况下,才去计算邀请好友的操作。
- if (openDistribution != 2 || isOpenAgent != 2) return jm;
- var order = await _orderServices.QueryByClauseAsync(p => p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete);
- if (order == null)
- {
- jm.msg = "订单查询失败";
- return jm;
+ var allConfigs = await _settingServices.GetConfigDictionaries();
+ var defaultImage =
+ CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.ShopDefaultImage);
+ userInfo.avatarImage = defaultImage;
}
- var user = await _dal.QueryByClauseAsync(p => p.id == order.userId, true);
+ userInfo.nickName = !string.IsNullOrEmpty(entity.nickname)
+ ? entity.nickname
+ : UserHelper.FormatMobile(entity.mobile);
- // 获取付款单,我们只拿付款单的实际金额去计算,不用订单的金额。这样直接不用去计算优惠了,只看用户付了多少。从上面提佣金出来。
- var billPayments = await _billPaymentsServices.QueryByClauseAsync(p => p.sourceId == orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed);
- if (billPayments.money <= 0) return jm;
+ if (entity.invitecode > 0)
{
- //1级佣金
- var commissionLevel1 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
- ? commissionFirst
- : Math.Round(commissionFirst * billPayments.money / 100, 2);
- //2级佣金
- var commissionLevel2 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
- ? commissionSecond
- : Math.Round(commissionSecond * billPayments.money / 100, 2);
- //3级佣金
- var commissionLevel3 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
- ? commissionThird
- : Math.Round(commissionThird * billPayments.money / 100, 2);
-
-
- //下面存储就不做递归了,三层直接判断了
- if (user.parentId <= 0) return jm;
- var parentLevel1 = await _dal.QueryByClauseAsync(p => p.id == user.parentId, true);
- if (parentLevel1 == null) return jm;
+ var pid = UserHelper.GetUserIdByShareCode(entity.invitecode);
+ var pInfo = await _dal.QueryByClauseAsync(p => p.id == pid);
+ if (pInfo != null)
{
- //钱挪到会员余额里面
- await _userBalanceServices.Change(user.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel1, orderId);
- if (parentLevel1.parentId <= 0) return jm;
- var parentLevel2 = await _dal.QueryByClauseAsync(p => p.id == parentLevel1.parentId, true);
- //钱挪到会员余额里面
- await _userBalanceServices.Change(parentLevel1.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel2, orderId);
- if (parentLevel2.parentId <= 0) return jm;
- {
- var parentLevel3 = await _dal.QueryByClauseAsync(p => p.id == parentLevel2.parentId, true);
- if (parentLevel3 != null)
- {
- //钱挪到会员余额里面
- await _userBalanceServices.Change(parentLevel2.parentId, (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel3, orderId);
- }
- }
+ 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;
+ }
+
+ if (userId > 0 && entity.invitecode > 0 && userInfo.parentId > 0)
+ {
+ var allConfigs = await _settingServices.GetConfigDictionaries();
+ var inviterUserIntegral = CommonHelper
+ .GetConfigDictionary(allConfigs, SystemSettingConstVars.InviterUserIntegral)
+ .ObjectToInt(); //是否开启积分功能
+ if (inviterUserIntegral > 0)
+ await _userPointLogServices.SetPoint(userInfo.parentId, inviterUserIntegral,
+ (int)GlobalEnumVars.UserPointSourceTypes.PointTypeInviterUser, "发展用户:" + userId + "赠送积分");
+ }
+
+ 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)。
+ //会导致微信数据报错()
+
+ //2023-05-05 屏蔽此代码,是为了让公众号,小程序实现多openid指向同一个账号,但是也存在问题,就是多了之后的解绑问题,应该做个登录设备管理。
+
+ //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.正常)
+ {
+ jm.status = true;
+ jm.msg = "成功";
+ jm.otherData = userInfo;
+
+ if (platform == (int)GlobalEnumVars.CoreShopSystemCategory.Api)
+ {
+ var claims = new List
+ {
+ new(ClaimTypes.Name, userInfo.nickName),
+ new(JwtRegisteredClaimNames.Jti, userInfo.id.ToString()),
+ new(ClaimTypes.Expiration,
+ DateTime.Now.AddSeconds(_permissionRequirement.Expiration.TotalSeconds).ToString())
+ };
+ //用户标识
+ var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);
+ identity.AddClaims(claims);
+ jm.data = JwtToken.BuildJwtToken(claims.ToArray(), _permissionRequirement);
+ }
+ else
+ {
+ jm.data = userInfo;
+ }
+
+ //录入登录日志
+ 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;
}
- #endregion
+ return jm;
}
-}
+
+ #endregion
+
+ #region 根据条件查询分页数据
+
+ ///
+ /// 根据条件查询分页数据
+ ///
+ /// 判断集合
+ /// 排序方式
+ /// 当前页面索引
+ /// 分布大小
+ ///
+ ///
+ public async Task> QueryPageAsync(Expression> predicate,
+ Expression> orderByExpression, OrderByType orderByType, int pageIndex = 1,
+ int pageSize = 20)
+ {
+ return await _dal.QueryPageAsync(predicate, orderByExpression, orderByType, pageIndex, pageSize);
+ }
+
+ #endregion
+
+ #region 按天统计新会员
+
+ ///
+ /// 按天统计新会员
+ ///
+ ///
+ public async Task> Statistics(int day)
+ {
+ return await _dal.Statistics(day);
+ }
+
+ #endregion
+
+ #region 按天统计当天下单活跃会员
+
+ ///
+ /// 按天统计当天下单活跃会员
+ ///
+ ///
+ public async Task> StatisticsOrder(int day)
+ {
+ return await _dal.StatisticsOrder(day);
+ }
+
+ #endregion
+
+
+ #region 当关闭分销和代理的时候走个人邀请好友分佣
+
+ ///
+ /// 当关闭分销和代理的时候走个人邀请好友分佣
+ ///
+ ///
+ ///
+ public async Task InviteCommission(string orderId)
+ {
+ using var container = _serviceProvider.CreateScope();
+ var _orderServices = container.ServiceProvider.GetService();
+ var _billPaymentsServices = container.ServiceProvider.GetService();
+
+
+ var jm = new WebApiCallBack();
+ var allConfigs = await _settingServices.GetConfigDictionaries();
+ //分佣类型(1百分比/2固定金额)
+ var commissionType = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionType)
+ .ObjectToInt(0);
+ //一级佣金
+ var commissionFirst = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst)
+ .ObjectToDecimal(0);
+ //二级佣金
+ var commissionSecond = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionSecond)
+ .ObjectToDecimal(0);
+ //三级佣金
+ var commissionThird = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.CommissionFirst)
+ .ObjectToDecimal(0);
+ //是否开启三级分销(1开启,2未开启)
+ var openDistribution = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.OpenDistribution)
+ .ObjectToInt(0);
+ //是否开启代理模块(1开启,2未开启)
+ var isOpenAgent = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.IsOpenAgent)
+ .ObjectToInt(0);
+
+ //当分销模块和代理模块都关闭的情况下,才去计算邀请好友的操作。
+ if (openDistribution != 2 || isOpenAgent != 2) return jm;
+ var order = await _orderServices.QueryByClauseAsync(p =>
+ p.orderId == orderId && p.status == (int)GlobalEnumVars.OrderStatus.Complete);
+ if (order == null)
+ {
+ jm.msg = "订单查询失败";
+ return jm;
+ }
+
+ var user = await _dal.QueryByClauseAsync(p => p.id == order.userId, true);
+
+ // 获取付款单,我们只拿付款单的实际金额去计算,不用订单的金额。这样直接不用去计算优惠了,只看用户付了多少。从上面提佣金出来。
+ var billPayments = await _billPaymentsServices.QueryByClauseAsync(p =>
+ p.sourceId == orderId && p.status == (int)GlobalEnumVars.BillPaymentsStatus.Payed);
+ if (billPayments.money <= 0) return jm;
+ {
+ //1级佣金
+ var commissionLevel1 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
+ ? commissionFirst
+ : Math.Round(commissionFirst * billPayments.money / 100, 2);
+ //2级佣金
+ var commissionLevel2 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
+ ? commissionSecond
+ : Math.Round(commissionSecond * billPayments.money / 100, 2);
+ //3级佣金
+ var commissionLevel3 = commissionType == (int)GlobalEnumVars.InviteCommissionType.CommissionTypeFixed
+ ? commissionThird
+ : Math.Round(commissionThird * billPayments.money / 100, 2);
+
+
+ //下面存储就不做递归了,三层直接判断了
+ if (user.parentId <= 0) return jm;
+ var parentLevel1 = await _dal.QueryByClauseAsync(p => p.id == user.parentId, true);
+ if (parentLevel1 == null) return jm;
+ {
+ //钱挪到会员余额里面
+ await _userBalanceServices.Change(user.parentId,
+ (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel1, orderId);
+ if (parentLevel1.parentId <= 0) return jm;
+ var parentLevel2 = await _dal.QueryByClauseAsync(p => p.id == parentLevel1.parentId, true);
+ //钱挪到会员余额里面
+ await _userBalanceServices.Change(parentLevel1.parentId,
+ (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel2, orderId);
+ if (parentLevel2.parentId <= 0) return jm;
+ {
+ var parentLevel3 = await _dal.QueryByClauseAsync(p => p.id == parentLevel2.parentId, true);
+ if (parentLevel3 != null)
+ //钱挪到会员余额里面
+ await _userBalanceServices.Change(parentLevel2.parentId,
+ (int)GlobalEnumVars.UserBalanceSourceTypes.Distribution, commissionLevel3, orderId);
+ }
+ }
+ }
+ return jm;
+ }
+
+ #endregion
+}
\ No newline at end of file
diff --git a/CoreCms.Net.Web.Admin/Controllers/WeChat/CoreCmsUserWeChatInfoController.cs b/CoreCms.Net.Web.Admin/Controllers/WeChat/CoreCmsUserWeChatInfoController.cs
index f07e09fe..43b63a85 100644
--- a/CoreCms.Net.Web.Admin/Controllers/WeChat/CoreCmsUserWeChatInfoController.cs
+++ b/CoreCms.Net.Web.Admin/Controllers/WeChat/CoreCmsUserWeChatInfoController.cs
@@ -30,6 +30,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using NPOI.HSSF.UserModel;
using SqlSugar;
+using static CoreCms.Net.Configuration.GlobalEnumVars;
namespace CoreCms.Net.Web.Admin.Controllers
{
@@ -255,6 +256,13 @@ namespace CoreCms.Net.Web.Admin.Controllers
{
//返回数据
var jm = new AdminUiCallBack { code = 0 };
+
+ var userAccountTypes = EnumHelper.EnumToList();
+ jm.data = new
+ {
+ userAccountTypes
+ };
+
return jm;
}
#endregion
diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/user/wechatuserinfo/index.html b/CoreCms.Net.Web.Admin/wwwroot/views/user/wechatuserinfo/index.html
index eec165f9..ba157dc7 100644
--- a/CoreCms.Net.Web.Admin/wwwroot/views/user/wechatuserinfo/index.html
+++ b/CoreCms.Net.Web.Admin/wwwroot/views/user/wechatuserinfo/index.html
@@ -117,7 +117,19 @@
[
{ type: "checkbox", fixed: "left" },
{ field: 'id', title: '微信序列', width: 70, sort: false },
- //{ field: 'type', title: '第三方登录类型', sort: false,width: 105 },
+ //{ field: 'type', title: '第三方登录类型', sort: false, width: 105 },
+ {
+ field: 'type', title: '登录类型', align: "center",
+ templet: function (data) {
+ var str = '';
+ for (i = 0; i < d.data.userAccountTypes.length; i++) {
+ if (data.type === d.data.userAccountTypes[i].value) { str = d.data.userAccountTypes[i].title }
+ }
+ //return str;
+ return "
";
+
+ }, width: 90
+ },
{ field: 'userId', title: '用户序列', sort: false, width: 80 },
{ field: 'openid', title: 'openId', sort: false },
//{ field: 'sessionKey', title: '缓存key', sort: false,width: 105 },