【优化】优化分销商升级策略。

This commit is contained in:
jianweie code
2023-06-17 03:16:51 +08:00
parent fb086a16a0
commit 9151fbf43f
6 changed files with 158 additions and 35 deletions

View File

@@ -1751,15 +1751,15 @@ namespace CoreCms.Net.Configuration
/// </summary>
public enum WeiChatPayTradeType
{
[Description("JSAPI(小程序支付)")]
[Description("小程序支付")]
JSAPI = 1,
[Description("JSAPI_OFFICIAL(公众号支付)")]
[Description("公众号支付")]
JSAPI_OFFICIAL = 2,
[Description("NATIVE(扫码支付)")]
[Description("扫码支付")]
NATIVE = 3,
[Description("APP(APP支付)")]
[Description("APP支付")]
APP = 4,
[Description("MWEB(H5支付)")]
[Description("H5支付")]
MWEB = 5
}
@@ -2386,30 +2386,33 @@ namespace CoreCms.Net.Configuration
/// </summary>
public enum DistributionConditionsCode
{
/// <summary>
/// 个人消费总额
/// </summary>
[Description("个人消费总额(已完成的订单)")]
USER_ORDERS = 3,
/// <summary>
/// 个人订单数量
/// </summary>
[Description("个人订单数量(已完成的订单)")]
USER_ORDERSNUM = 4,
/// <summary>
/// 所有商品满足条件
/// </summary>
[Description("所有商品满足条件")]
GOODS_ALL = 1,
/// <summary>
/// 购买指定商品
/// </summary>
[Description("购买指定商品")]
GOODS_IDS = 2,
/// <summary>
/// 个人消费总额
/// </summary>
[Description("个人消费总额(已完成的订单)")]
USER_ORDERS = 3,
/// <summary>
/// 个人订单数量
/// </summary>
[Description("个人订单数量(已完成的订单)")]
USER_ORDERSNUM = 4,
//[Description("团队消费总额")]
//GROUP_ORDERS = 5,
//[Description("直推几个指定用户等级")]
//USER_GRADE = 6,
}
@@ -3375,31 +3378,31 @@ namespace CoreCms.Net.Configuration
/// <summary>
/// JSAPI(支付宝小程序支付)
/// </summary>
[Description("JSAPI(支付宝小程序支付)")]
[Description("支付宝小程序支付")]
JSAPI = 1,
/// <summary>
/// JSAPI_PC(电脑网站支付)
/// </summary>
[Description("JSAPI_PC(电脑网站支付)")]
[Description("电脑网站支付")]
JSAPI_PC = 2,
/// <summary>
/// NATIVE(扫码支付)
/// </summary>
[Description("NATIVE(扫码支付)")]
[Description("扫码支付")]
ScanQRCodes = 3,
/// <summary>
/// APP(APP支付)
/// </summary>
[Description("APP(APP支付)")]
[Description("APP支付")]
APP = 4,
/// <summary>
/// MWEB(H5支付)
/// </summary>
[Description("MWEB(H5支付)")]
[Description("H5支付")]
MWEB = 5
}

View File

@@ -58,6 +58,15 @@ namespace CoreCms.Net.IRepository
int GetOrderNum(int userId, int goodId);
/// <summary>
/// 根据用户id和商品id获取下了多少订单
/// </summary>
/// <param name="userId"></param>
/// <param name="goodId"></param>
/// <param name="orderStatus">状态</param>
/// <returns></returns>
int GetOrderNum(int userId, int goodId, int orderStatus);
/// <summary>
/// 重写根据条件列表数据
/// </summary>

View File

@@ -75,7 +75,7 @@ namespace CoreCms.Net.IServices
/// <summary>
/// 检查当前用户是否可以升级(暂存,有问题)
/// 检查当前用户是否可以升级
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>

View File

@@ -167,6 +167,27 @@ namespace CoreCms.Net.Repository
}
#endregion
#region id和商品id获取下了多少订单
/// <summary>
/// 根据用户id和商品id获取下了多少订单
/// </summary>
/// <param name="userId"></param>
/// <param name="goodId"></param>
/// <param name="orderStatus">状态</param>
/// <returns></returns>
public int GetOrderNum(int userId, int goodId,int orderStatus)
{
var num = DbClient.Queryable<CoreCmsOrder, CoreCmsOrderItem>((op, ot) => new object[]
{
JoinType.Inner, op.orderId == ot.orderId
}).Where((op, ot) => op.userId == userId && ot.goodsId == goodId && op.status == orderStatus).Count();
return num;
}
#endregion
#region
/// <summary>
/// 重写根据条件列表数据

View File

@@ -24,7 +24,9 @@ using CoreCms.Net.Model.ViewModels.DTO.Distribution;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NPOI.SS.Formula.Functions;
using SqlSugar;
@@ -461,10 +463,10 @@ namespace CoreCms.Net.Services
}
#endregion
#region ()
#region
/// <summary>
/// 检查当前用户是否可以升级(暂存,有问题)
/// 检查当前用户是否可以升级
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
@@ -475,23 +477,111 @@ namespace CoreCms.Net.Services
var info = await _dal.QueryByClauseAsync(p => p.userId == userId);
if (info is { gradeId: > 0 })
{
//找下有没有可以升级的分销商等级
var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.id > info.gradeId && p.isAutoUpGrade == true);
if (grade != null)
//找下有没有可以升级的分销商等级(一次只升一级)
var grade = await _distributionGradeRepository.QueryByClauseAsync(p => p.sortId > info.gradeId && p.isAutoUpGrade == true, p => p.sortId, OrderByType.Asc, true);
if (grade == null) return jm;
{
var conditionList = await _coreCmsDistributionConditionServices.QueryListByClauseAsync(p => p.gradeId == grade.id);
//循环所有条件,判断是否可以升级
var condition = true;//默认满足升级
var conditionList = await _coreCmsDistributionConditionServices.QueryListByClauseAsync(p => p.gradeId == grade.id);
if (!conditionList.Any())
{
jm.msg = "未设置条件,无法升级";
return jm;
}
//循环所有条件,判断是否可以升级
foreach (var item in conditionList)
{
var method = "condition_" + item.code;
//暂存,有问题
var parameters = (JObject)JsonConvert.DeserializeObject(item.parameters);
if (parameters == null)
{
condition = false;
break;
}
//只要购买了商品并且订单完结。
if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_ALL.ToString(), StringComparison.CurrentCultureIgnoreCase))
{
if (!parameters.ContainsKey("num"))
{
condition = false;
break;
}
var num = parameters["num"].ObjectToInt(0);
var getCount = await _orderRepository.GetCountAsync(p =>
p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED);
condition = getCount > num;
if (condition == false)
{
break;
}
}
//购买了指定的商品
if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.GOODS_IDS.ToString(), StringComparison.CurrentCultureIgnoreCase))
{
//goodsId
if (!parameters.ContainsKey("goodsId"))
{
condition = false;
break;
}
var goodsId = parameters["goodsId"].ObjectToInt(0);
var getCount = _orderRepository.GetOrderNum(userId, goodsId, (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED);
condition = getCount > 0;
if (condition == false)
{
break;
}
}
//个人消费总额(已完成的订单)
if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERS.ToString(), StringComparison.CurrentCultureIgnoreCase))
{
if (!parameters.ContainsKey("money") || !parameters.ContainsKey("limit_day"))
{
condition = false;
break;
}
var money = parameters["money"].ObjectToInt(0);
var limitDay = parameters["limit_day"].ObjectToInt(0);
var startTime = DateTime.Now.AddDays(-limitDay);
var endTime = DateTime.Now;
var getAmount = await _orderRepository.GetSumAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime, p => p.orderAmount);
condition = getAmount > money;
if (condition == false)
{
break;
}
}
//个人订单数量(已完成的订单)
if (string.Equals(item.code, GlobalEnumVars.DistributionConditionsCode.USER_ORDERSNUM.ToString(), StringComparison.CurrentCultureIgnoreCase))
{
if (!parameters.ContainsKey("num") || !parameters.ContainsKey("limit_day"))
{
condition = false;
break;
}
var num = parameters["num"].ObjectToInt(0);
var limitDay = parameters["limit_day"].ObjectToInt(0);
var startTime = DateTime.Now.AddDays(-limitDay);
var endTime = DateTime.Now;
var getCount = await _orderRepository.GetCountAsync(p => p.userId == userId && p.status == (int)GlobalEnumVars.OrderAllStatusType.ALL_COMPLETED && p.paymentTime > startTime && p.paymentTime < endTime);
condition = getCount > num;
if (condition == false)
{
break;
}
}
}
if (condition)
{
await _dal.UpdateAsync(p => new CoreCmsDistribution() { gradeId = grade.id },
p => p.userId == userId);
await _dal.UpdateAsync(p => new CoreCmsDistribution() { gradeId = grade.id }, p => p.userId == userId);
jm.msg = "升级成功";
}
else

View File

@@ -376,7 +376,7 @@ namespace CoreCms.Net.Web.Admin.Controllers
var list = await _coreCmsDistributionConditionServices.QueryPageAsync(where, p => p.id, OrderByType.Asc, pageCurrent, pageSize);
if (list.Any())
{
var distributionConditions = EnumHelper.EnumToList<GlobalEnumVars.DistributionConditions>();
var distributionConditions = EnumHelper.EnumToList<GlobalEnumVars.DistributionConditionsCode>();
foreach (var condition in list)
{
var cd = distributionConditions.Find(p => p.title == condition.code);