Commit 2c14ff84 authored by liudong1993's avatar liudong1993

1、商城活动定时器

parent af7f1f37
......@@ -178,13 +178,13 @@ namespace Mall.Module.Product
//查询中奖活动
var myPrizeList = goods_Activity_GetRepository.GetList(new RB_Goods_Activity_Get_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, ActivityIds = string.Join(",", list.Select(x => x.Id)), UserId = UserId });
int AfterTime = 0;
if (demodel.QActivityState == 1) {
var mallModel = mallBaseRepository.GetEntity(demodel.MallBaseId);
if (mallModel != null && mallModel.AfterTime > 0)
{
AfterTime = mallModel.AfterTime;
}
//if (demodel.QActivityState == 1) {
var mallModel = mallBaseRepository.GetEntity(demodel.MallBaseId);
if (mallModel != null && mallModel.AfterTime > 0)
{
AfterTime = mallModel.AfterTime;
}
//}
foreach (var item in list)
{
if (item.RangeType == 1)
......@@ -213,55 +213,55 @@ namespace Mall.Module.Product
else
{
item.IsFinish = 2;
if (demodel.QActivityState == 1)
//if (demodel.QActivityState == 1)
//{
//查询分类/商品下
var clist = goods_OrderRepository.GetGoodsNumForCategoryOrGoods_V2(item, UserId, AfterTime);//查询所有活动日期内的已付款订单
if (item.Tier == 1 || item.Tier == 2 || item.Tier == 3)
{
//查询分类/商品下
var clist = goods_OrderRepository.GetGoodsNumForCategoryOrGoods(item, UserId, AfterTime);
if (item.Tier == 1 || item.Tier == 2 || item.Tier == 3)
//如果属于有限定层级 需要先遍历 查询出对应的层级人员
foreach (var qitem in clist)
{
//如果属于有限定层级 需要先遍历 查询出对应的层级人员
foreach (var qitem in clist)
{
List<int> UserIdList = JsonConvert.DeserializeObject<List<int>>("[" + qitem.UserTree + "]");
qitem.OneUserId = UserIdList[0];
if (UserIdList.Count() > 1)
{
qitem.TwoUserId = UserIdList[1];
}
if (UserIdList.Count() > 2)
{
qitem.TwoUserId = UserIdList[2];
}
}
if (item.Tier == 1)
{
clist = clist.Where(x => x.OneUserId == UserId).ToList();
}
else if (item.Tier == 2)
List<int> UserIdList = JsonConvert.DeserializeObject<List<int>>("[" + qitem.UserTree + "]");
qitem.OneUserId = UserIdList[0];
if (UserIdList.Count() > 1)
{
clist = clist.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId).ToList();
qitem.TwoUserId = UserIdList[1];
}
else
if (UserIdList.Count() > 2)
{
clist = clist.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId || x.ThreeUserId == UserId).ToList();
qitem.TwoUserId = UserIdList[2];
}
}
if (item.Type == 1)
if (item.Tier == 1)
{
//订单数量
item.OrderTNum = clist.Select(x => x.OrderId).Distinct().Count();
clist = clist.Where(x => x.OneUserId == UserId).ToList();
}
else if (item.Type == 2)
else if (item.Tier == 2)
{
//订单金额
item.Final_Price = clist.Sum(x => x.Final_Price);
clist = clist.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId).ToList();
}
else
{
//商品数量
item.Number = clist.Sum(x => x.Number);
clist = clist.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId || x.ThreeUserId == UserId).ToList();
}
}
if (item.Type == 1)
{
//订单数量
item.OrderTNum = clist.Select(x => x.OrderId).Distinct().Count();
}
else if (item.Type == 2)
{
//订单金额
item.Final_Price = clist.Sum(x => x.Final_Price);
}
else
{
//商品数量
item.Number = clist.Sum(x => x.Number);
}
//}
}
}
}
......
......@@ -2304,6 +2304,47 @@ GROUP BY od.Id ";
}
}
/// <summary>
/// 获取分销商品数量 用户小程序端查询 只查询正常订单
/// </summary>
/// <param name="dmodel"></param>
/// <param name="UserId"></param>
/// <param name="AfterTime"></param>
/// <returns></returns>
public List<RB_Goods_Activity_Extend> GetGoodsNumForCategoryOrGoods_V2(RB_Goods_Activity_Extend dmodel, int UserId, int AfterTime)
{
string where = @$"AND o.`Status` =0 AND o.Recycled=2 AND o.OrderStatus in(2,3,4,5,6) and oa.ReOrderId is null
AND o.CreateDate >='{dmodel.StartTime.ToString("yyyy-MM-dd")}' AND o.CreateDate <='{dmodel.EndTime.ToString("yyyy-MM-dd HH:mm:ss")}'
AND IFNULL(o.{(dmodel.ActiveObject == 1 ? "DistributorTree" : "UserTree")},'') <> '' ";
if (UserId > 0)
{
where += $" AND FIND_IN_SET({UserId},o.{(dmodel.ActiveObject == 1 ? "DistributorTree" : "UserTree")})";
}
if (dmodel.RangeType == 1)
{
string sql = $@"
SELECT od.Id,od.Number,od.Final_Price,o.OrderId,o.{(dmodel.ActiveObject == 1 ? "DistributorTree" : "UserTree")} as UserTree FROM rb_goods_orderdetail od
LEFT JOIN rb_goods_order o ON o.OrderId = od.OrderId
LEFT JOIN rb_goods_category gc ON od.GoodsId = gc.GoodsId
left join rb_goods_orderaftersale oa on od.Id= oa.OrderDetialId and oa.Type=1 and oa.Status=0 and oa.ReOrderStatus in (1,2,3,4,5)
WHERE gc.CategoryId in ({dmodel.RangeIds})
{where}
GROUP BY od.Id ";
return Get<RB_Goods_Activity_Extend>(sql).ToList();
}
else
{
string sql = $@"
SELECT od.Id,od.Number,od.Final_Price,o.OrderId,o.{(dmodel.ActiveObject == 1 ? "DistributorTree" : "UserTree")} as UserTree FROM rb_goods_orderdetail od
LEFT JOIN rb_goods_order o ON o.OrderId = od.OrderId
left join rb_goods_orderaftersale oa on od.Id= oa.OrderDetialId and oa.Type=1 and oa.Status=0 and oa.ReOrderStatus in (1,2,3,4,5)
WHERE od.GoodsId in({dmodel.RangeIds})
{where}
GROUP BY od.Id ";
return Get<RB_Goods_Activity_Extend>(sql).ToList();
}
}
#endregion
}
}
......@@ -22,6 +22,7 @@ using Mall.Repository.User;
using Mall.WindowsService.Helper;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
......@@ -149,6 +150,14 @@ namespace Mall.WindowsService.Module
/// 课程卡使用
/// </summary>
private static readonly RB_Education_MemberUseCouponRepository education_MemberUseCouponRepository = new RB_Education_MemberUseCouponRepository();
/// <summary>
/// 活动
/// </summary>
private static readonly RB_Goods_ActivityRepository goods_ActivityRepository = new RB_Goods_ActivityRepository();
/// <summary>
/// 活动完成名单
/// </summary>
private static readonly RB_Goods_Activity_GetRepository goods_Activity_GetRepository = new RB_Goods_Activity_GetRepository();
......@@ -2208,6 +2217,148 @@ and DATE_FORMAT(b.PaymentTime,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') A
}
}
}
//发放活动中奖名单
try
{
var alist = goods_ActivityRepository.GetCanReceiveList(new RB_Goods_Activity_Extend() { TenantId = item.TenantId, MallBaseId = item.MallBaseId });
foreach (var qitem in alist) {
//查询活动下所有满足的订单
var orderList = goods_OrderRepository.GetGoodsNumForCategoryOrGoods(qitem, 0, item.AfterTime);
if (orderList.Any())
{
List<int> AllUserIdList = new List<int>();
if (qitem.Tier == 1 || qitem.Tier == 2 || qitem.Tier == 3)
{
//如果属于有限定层级 需要先遍历 查询出对应的层级人员
foreach (var q2item in orderList)
{
List<int> UserIdList = JsonConvert.DeserializeObject<List<int>>("[" + q2item.UserTree + "]");
q2item.OneUserId = UserIdList[0];
if (UserIdList.Count() > 1)
{
q2item.TwoUserId = UserIdList[1];
}
if (UserIdList.Count() > 2)
{
q2item.TwoUserId = UserIdList[2];
}
}
if (qitem.Tier == 1)
{
AllUserIdList.AddRange(orderList.Select(x => x.OneUserId).Distinct().ToList());
}
else if (qitem.Tier == 2)
{
AllUserIdList.AddRange(orderList.Select(x => x.OneUserId).Distinct().ToList());
AllUserIdList.AddRange(orderList.Select(x => x.TwoUserId).Distinct().ToList());
}
else if (qitem.Tier == 3)
{
AllUserIdList.AddRange(orderList.Select(x => x.OneUserId).Distinct().ToList());
AllUserIdList.AddRange(orderList.Select(x => x.TwoUserId).Distinct().ToList());
AllUserIdList.AddRange(orderList.Select(x => x.ThreeUserId).Distinct().ToList());
}
}
else
{
string UserTree = string.Join(",", orderList.Select(x => x.UserTree));
AllUserIdList = JsonConvert.DeserializeObject<List<int>>("[" + UserTree + "]");
}
AllUserIdList = AllUserIdList.Where(x => x > 0).Distinct().ToList();//去除重复数据 表示这么多用户在参加活动
//查询已拿到活动名单的用户
var myPrizeList = goods_Activity_GetRepository.GetList(new RB_Goods_Activity_Get_Extend() { TenantId = item.TenantId, MallBaseId = item.MallBaseId, ActivityId = qitem.Id, UserIds = string.Join(",", AllUserIdList) });
foreach (var UserId in AllUserIdList)
{
var prizeModel = myPrizeList.Where(x => x.UserId == UserId && x.ActivityId == qitem.Id).FirstOrDefault();
if (prizeModel == null)
{
List<RB_Goods_Activity_Extend> MyOrderList = new List<RB_Goods_Activity_Extend>();
if (qitem.Tier == 1)
{
MyOrderList = orderList.Where(x => x.OneUserId == UserId).ToList();
}
else if (qitem.Tier == 2)
{
MyOrderList = orderList.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId).ToList();
}
else if (qitem.Tier == 3)
{
MyOrderList = orderList.Where(x => x.OneUserId == UserId || x.TwoUserId == UserId || x.ThreeUserId == UserId).ToList();
}
else
{
MyOrderList = orderList.Where(x => ("," + x.UserTree + ",").Contains("," + UserId + ",")).ToList();
}
//验证是否已满足活动
bool ActivityOk = false;
if (qitem.Type == 1)
{
//订单数量
var OrderNum = MyOrderList.Select(x => x.OrderId).Distinct().Count();
if (OrderNum >= qitem.OrderNum)
{
ActivityOk = true;
}
}
else if (qitem.Type == 2)
{
//订单金额
var OrderMoney = MyOrderList.Sum(x => x.Final_Price);
if (OrderMoney >= qitem.OrderMoney)
{
ActivityOk = true;
}
}
else
{
//商品数量
var GoodsNum = MyOrderList.Sum(x => x.Number);
if (GoodsNum >= qitem.GoodsNum)
{
ActivityOk = true;
}
}
if (ActivityOk)
{
string code = GetActivityCode(qitem);
//验证code是否重复
while (true)
{
var vlist = goods_Activity_GetRepository.GetList(new RB_Goods_Activity_Get_Extend() { TenantId = item.TenantId, MallBaseId = item.MallBaseId, Code = code });
if (vlist.Any())
{
code = GetActivityCode(qitem);
}
else
{
break;
}
}
//新增中奖名单
goods_Activity_GetRepository.Insert(new RB_Goods_Activity_Get()
{
ActivityId = qitem.Id,
Id = 0,
Code = code,
State = 1,
UserId = UserId,
OrderIds = string.Join(",", MyOrderList.Select(x => x.OrderId).Distinct()),
TenantId = item.TenantId,
MallBaseId = item.MallBaseId,
CreateDate = DateTime.Now,
UpdateDate = DateTime.Now
});
}
}
}
}
}
}
catch (Exception ex)
{
Helper.LogHelper.Write("发放活动中奖名单失败:" + ex.Message);
}
}
return true;
}
......@@ -2218,6 +2369,20 @@ and DATE_FORMAT(b.PaymentTime,'%y-%m-%d')<DATE_FORMAT('{endDate}','%y-%m-%d') A
}
}
/// <summary>
/// 获取活动验证码
/// </summary>
/// <param name="qitem"></param>
/// <returns></returns>
private static string GetActivityCode(RB_Goods_Activity_Extend qitem)
{
int min = Convert.ToInt32("1111111111".Substring(0, qitem.CodeLength));
int max = Convert.ToInt32("9999999999".Substring(0, qitem.CodeLength));
Random rd = new Random();
string code = rd.Next(min, max).ToString();
return code;
}
#endregion
#region 退款批量制单
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment