365 lines
20 KiB
C#
365 lines
20 KiB
C#
|
using Common.DbExtends.Extends;
|
|||
|
using Common.Models.SubTables;
|
|||
|
using Common.Models.UnqTables;
|
|||
|
using Common.Utils;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using SqlSugar;
|
|||
|
using Common.Models.Enums;
|
|||
|
using Common.Models.JsonModels;
|
|||
|
using Common.Models.SubCountTables;
|
|||
|
using Common.DbExtends.Others;
|
|||
|
using Common.Utils.Extends;
|
|||
|
|
|||
|
namespace Server.Timers
|
|||
|
{
|
|||
|
public class FinishOrderTimer : MyTimer
|
|||
|
{
|
|||
|
Client Client = Client.SingleClient;
|
|||
|
private SqlSugarClient Db { get { return Client.Db; } }
|
|||
|
|
|||
|
protected override void Run(object state, bool timedOut)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
///读取已经解冻的订单
|
|||
|
var Orders = Client.Db.Queryable<FinishOrder>().Where(f => f.ThawingTime <= DateTime.Now).OrderBy(f => f.CreateTime, OrderByType.Asc).Take(30).ToList();
|
|||
|
if (Orders.Count > 0)
|
|||
|
{
|
|||
|
foreach (var item in Orders)
|
|||
|
{
|
|||
|
|
|||
|
switch (item.LianmengType)
|
|||
|
{
|
|||
|
case LianmengType.淘宝联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<TbOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<TbOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
if (order.total_commission_fee != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = order.pub_share_pre_fee;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.item_id, LianmengType.淘宝联盟, order.LianmengId, $"{order.site_id}_{order.adzone_id}", order.pub_share_pre_fee);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.item_title, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.淘宝订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.京东联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<JdOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<JdOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
if (order.actualFee != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = order.actualFee;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.skuId, LianmengType.京东联盟, order.LianmengId, $"{order.positionId}", order.actualFee);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.skuName, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.京东订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.拼多多联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<PddOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<PddOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
var totalComm = (double)order.promotion_amount.Divided100();//分转元
|
|||
|
if (totalComm != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = totalComm;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.goods_id.ToString(), LianmengType.拼多多联盟, order.LianmengId, $"{order.p_id}", totalComm);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.goods_name, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.拼多多订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.唯品会联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<WphOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<WphOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
if (order.commission != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = order.commission;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.goodsId, LianmengType.唯品会联盟, order.LianmengId, $"{order.pid}", order.commission);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.goodsName, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.唯品会订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.苏宁联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<SnOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<SnOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
var totalComm = double.Parse(order.prePayCommission);
|
|||
|
if (totalComm != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = totalComm;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.goodsNum, LianmengType.苏宁联盟, order.LianmengId, $"", totalComm);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.productName, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.苏宁订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.抖音联盟:
|
|||
|
{
|
|||
|
var tabName = Db.GetTableNameById<DyOrder>(item.OrderId);
|
|||
|
var order = Db.Queryable<DyOrder>().Where(f => f.Id == item.OrderId).SplitTable(tab => tab.InTableNames(tabName)).First();
|
|||
|
|
|||
|
//如果佣金发生了变化
|
|||
|
var totalComm = (double)order.estimated_comission.Divided100();
|
|||
|
if (totalComm != order.QueryCache.TotalCommission)
|
|||
|
{
|
|||
|
//再不改变比例的情况下,重新计算
|
|||
|
order.QueryCache.TotalCommission = totalComm;
|
|||
|
order.QueryCache.CalculationUserCommission();
|
|||
|
order.QueryCache.CalculationInviteeCommission();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
var user = Db.GetUserData(order.UserId);
|
|||
|
|
|||
|
//没有查询记录,就自动创建一个
|
|||
|
var cache = order.QueryCache;
|
|||
|
if (cache == null)
|
|||
|
{
|
|||
|
var robotData = Db.GetRobot(user.RobotId);
|
|||
|
if (robotData != null)
|
|||
|
{
|
|||
|
var rConfig = Db.GetRebateConfigById(robotData.ConfigRebateId);
|
|||
|
var query = new QueryHist(user, order.product_id, LianmengType.抖音联盟, order.LianmengId, $"", totalComm);
|
|||
|
if (Db.CalculationData(query, rConfig))
|
|||
|
{
|
|||
|
order.QueryCache = query;
|
|||
|
var bConfig = Db.GetBaseConfigById(robotData.ConfigBaseId);
|
|||
|
if (bConfig != null)
|
|||
|
{
|
|||
|
Db.CalculationData(query, bConfig);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (cache != null)
|
|||
|
{
|
|||
|
Db.PayPoint(order, cache, order.Id, order.product_name, true);
|
|||
|
}
|
|||
|
Db.Updateable(order).SplitTable(tab => tab.InTableNames(tabName)).ExecuteCommand();
|
|||
|
Db.Deleteable(item).ExecuteCommand();
|
|||
|
|
|||
|
Client.SendClientMsg(cache.RobotId, DeviceMessageType.抖音订单更新, new { OrderId = order.Id, TableName = tabName });
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.美团联盟:
|
|||
|
{
|
|||
|
//TODO 美团是否有?
|
|||
|
}
|
|||
|
break;
|
|||
|
case LianmengType.无:
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Client.Db.OnLog("订单结算", ex);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 百分之probability的中奖概率
|
|||
|
/// </summary>
|
|||
|
/// <param name="probability"></param>
|
|||
|
/// <returns></returns>
|
|||
|
private bool IsGetHb(int probability)
|
|||
|
{
|
|||
|
int a = new Random(Guid.NewGuid().GetHashCode()).Next(1, 100); // [1,100]
|
|||
|
if (a <= probability)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|