【新增】新增全局优惠展示接口,前端商品详情增加全局优惠显示入口。

This commit is contained in:
jianweie code
2023-11-10 02:16:40 +08:00
parent 685a9a39f1
commit 9f03934127
9 changed files with 576 additions and 5 deletions

View File

@@ -27,6 +27,7 @@ using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using NetTaste;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
@@ -733,5 +734,176 @@ namespace CoreCms.Net.Services
}
#endregion
#region
/// <summary>
/// 获取全局促销列表
/// </summary>
/// <returns></returns>
public async Task<List<GetPromotionResult>> GetPromotionList(int type = (int)GlobalEnumVars.PromotionType.Promotion)
{
var where = PredicateBuilder.True<CoreCmsPromotion>();
var dt = DateTime.Now;
where = where.And(p => p.startTime < dt); //判断优惠券失效时间 是否可领取
where = where.And(p => p.endTime > dt); //判断优惠券失效时间 是否可领取
where = where.And(p => p.isEnable); //启用状态
where = where.And(p => p.type == type); //促销类型
where = where.And(p => !p.isDel); //是否被删除
var data = await _dal.QueryPageAndChildsAsync(where, p => p.sort, OrderByType.Asc, true, 1, 1000);
if (data != null && data.Any())
{
var goodsServices = _serviceProvider.GetService<ICoreCmsGoodsServices>();
var goodsCategoryServices = _serviceProvider.GetService<ICoreCmsGoodsCategoryServices>();
var brandServices = _serviceProvider.GetService<ICoreCmsBrandServices>();
var userGradeServices = _serviceProvider.GetService<ICoreCmsUserGradeServices>();
foreach (var item in data)
{
foreach (var condition in item.promotionCondition)
{
var obj = (JObject)JsonConvert.DeserializeObject(condition.parameters);
var str = string.Empty;
if (condition.code == "GOODS_ALL")
{
str = "购买任意商品:只要购买任意产品即可;";
}
//购买指定商品
else if (condition.code == "GOODS_IDS")
{
var goodsId = obj["goodsId"].ObjectToString();
if (!string.IsNullOrEmpty(goodsId))
{
str = "购买指定商品:";
var ids = goodsId.Split(",").Select(p => p.ObjectToInt()).ToList();
var goods = await goodsServices.QueryListByClauseAsync(p => ids.Contains(p.id), p => p.id, OrderByType.Asc, true);
if (goods.Any())
{
var goodsName = goods.Select(p => p.name = "【" + p.name + "】").ToList();
str += string.Join(",", goodsName);
}
str += ";购买数量:" + obj["nums"].ObjectToString();
}
}
//购买指定商品分类
else if (condition.code == "GOODS_CATS")
{
var id = obj["catId"].ObjectToInt(0);
if (id > 0)
{
str = "购买指定分类商品:";
var goodCache = await goodsCategoryServices.GetCaChe();
var goodsCategory = goodCache.FirstOrDefault(p => p.id == id);
str += goodsCategory != null ? "【" + goodsCategory.name + "】" : "";
str += ";购买数量:" + obj["nums"].ObjectToString();
}
}
//购买指定品牌商品
else if (condition.code == "GOODS_BRANDS")
{
var id = obj["brandId"].ObjectToInt(0);
if (id > 0)
{
str = "购买指定品牌商品:";
var brandCache = await brandServices.QueryAsync(true, true);
var brand = brandCache.FirstOrDefault(p => p.id == id);
str += brand != null ? "【" + brand.name + "】" : "";
str += ";购买数量:" + obj["nums"].ObjectToString();
}
}
//用户符合指定等级
else if (condition.code == "USER_GRADE")
{
var gradesId = obj["grades"].ObjectToString();
if (!string.IsNullOrEmpty(gradesId))
{
str = "用户符合指定等级:";
var ids = gradesId.Split(",").Select(p => p.ObjectToInt()).ToList();
var userGradesCache = await userGradeServices.QueryAsync(true, true);
var userGrades = userGradesCache.Where(p => ids.Contains(p.id));
if (userGrades.Any())
{
var goodsName = userGrades.Select(p => p.title = "【" + p.title + "】").ToList();
str += string.Join(",", goodsName);
}
}
}
else if (condition.code == "ORDER_FULL")
{
str = obj != null ? "购买订单满" + obj["money"].ObjectToString() + "元 " : "";
}
if (!string.IsNullOrEmpty(str))
{
item.conditions.Add(str);
}
}
foreach (var result in item.promotionResult)
{
//var str = PromotionHelper.GetResultMsg(result.code, result.parameters);
var msg = string.Empty;
var obj = (JObject)JsonConvert.DeserializeObject(result.parameters);
switch (result.code)
{
case "GOODS_REDUCE":
msg = "指定商品减少固定金额:减" + obj["money"].ObjectToString() + "元 ";
break;
case "GOODS_DISCOUNT":
msg = "指定商品打折:打" + obj["discount"].ObjectToString() + "折 ";
break;
case "GOODS_ONE_PRICE":
msg = "指定商品一口价:" + obj["money"].ObjectToString() + "元 ";
break;
case "ORDER_REDUCE":
msg = "订单减" + obj["money"].ObjectToString() + "元 ";
break;
case "ORDER_DISCOUNT":
msg = "订单打" + obj["discount"].ObjectToString() + "折 ";
break;
case "GOODS_HALF_PRICE":
msg = "指定商品每第" + obj["num"].ObjectToString() + "件减少" + obj["money"].ObjectToString() + "元";
break;
}
item.results.Add(msg);
}
}
}
var list = new List<GetPromotionResult>();
if (data.Any())
{
foreach (var item in data)
{
var dto = new GetPromotionResult();
dto.id = item.id;
dto.name = item.name;
dto.type = item.type;
dto.sort = item.sort;
dto.maxNums = item.maxNums;
dto.maxGoodsNums = item.maxGoodsNums;
dto.maxRecevieNums = item.maxRecevieNums;
dto.startTime = item.startTime;
dto.endTime = item.endTime;
dto.isEnable = item.isEnable;
dto.isExclusive = item.isExclusive;
dto.isAutoReceive = item.isAutoReceive;
dto.effectiveDays = item.effectiveDays;
dto.effectiveHours = item.effectiveHours;
dto.conditions = item.conditions;
dto.results = item.results;
list.Add(dto);
}
}
return list;
}
#endregion
}
}