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

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

@@ -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