774 lines
42 KiB
C#
774 lines
42 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Api.Framework.Cps;
|
|||
|
using Api.Framework.EntityTmp.KuaiShou;
|
|||
|
using Api.Framework.Enums;
|
|||
|
using Api.Framework.Events;
|
|||
|
using Api.Framework.Extents;
|
|||
|
using Api.Framework.Model;
|
|||
|
using Api.Framework.SDK;
|
|||
|
using Api.Framework.Tools;
|
|||
|
using Api.Framework.Utils;
|
|||
|
using CsharpHttpHelper;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using SqlSugar;
|
|||
|
|
|||
|
namespace Api.Framework.Timers
|
|||
|
{
|
|||
|
public class DownKuaiShouTimer : TimerTask
|
|||
|
{
|
|||
|
private DateTime update_time = DateTime.Now.AddMinutes(-60);
|
|||
|
public override void Run(object state, bool timedOut)
|
|||
|
{
|
|||
|
var endTime = DateTime.Now;
|
|||
|
UpdateOrder(CpsClient.Members.Where(f => f.cpstype == CpsType.快手联盟 && f.is_download == SwitchType.开启).ToArray(), update_time, endTime);
|
|||
|
update_time = DateTime.Now.AddMinutes(-20);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 手动同步订单
|
|||
|
/// </summary>
|
|||
|
/// <param name="member">快手cps对象集合</param>
|
|||
|
/// <param name="start_time">开始时间</param>
|
|||
|
/// <param name="end_time">结束时间</param>
|
|||
|
public void UpdateOrder(List<fl_cps_member> members, DateTime start_time, DateTime end_time)
|
|||
|
{
|
|||
|
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
|
|||
|
try
|
|||
|
{
|
|||
|
IsRunning = true;
|
|||
|
|
|||
|
UpdateOrder(members.ToArray(), start_time, end_time);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, $"更新快手订单异常:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
IsRunning = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 同步订单
|
|||
|
/// </summary>
|
|||
|
/// <param name="members">快手cps对象集合</param>
|
|||
|
/// <param name="start_time">开始时间</param>
|
|||
|
/// <param name="end_time">结束时间</param>
|
|||
|
private void UpdateOrder(fl_cps_member[] members, DateTime start_time, DateTime end_time)
|
|||
|
{
|
|||
|
if (members == null || members.Length == 0) return;
|
|||
|
|
|||
|
UnValidCpsMember(members);
|
|||
|
|
|||
|
int row_count = 50; //间隔
|
|||
|
var timespan = end_time - start_time;
|
|||
|
TaskTool task = new TaskTool();
|
|||
|
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
|
|||
|
var not_download_pids = ApiClient.Setting.SystemConfig.order_kuaishou_not_download_pid.Replace(",", ",")
|
|||
|
.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
|||
|
|
|||
|
members = members.Where(f => f.is_valid).ToArray();
|
|||
|
|
|||
|
foreach (var item in members)
|
|||
|
{
|
|||
|
var _item = item;
|
|||
|
var client = new KuaiShouApi(_item);
|
|||
|
task.AddTask(delegate
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var _star = timespan.TotalHours > 24 ? end_time : start_time; //倒叙24小时一个间断
|
|||
|
var _end = end_time;
|
|||
|
do
|
|||
|
{
|
|||
|
if (timespan.TotalHours > 24)
|
|||
|
{
|
|||
|
_end = _star;
|
|||
|
_star = _star.AddHours(-23.99);
|
|||
|
}
|
|||
|
client.DownOrder(_star, _end, OrderHandle, "");
|
|||
|
} while (_star > start_time);
|
|||
|
|
|||
|
#region 处理完成冻结订单
|
|||
|
var session = ApiClient.GetSession();
|
|||
|
var end_orders = session.Find<fl_order_kuaishou>("select * from fl_order_kuaishou where db_status=@db_status and db_endtime<@db_endtime", new { db_status = (int)SystemOrderStatus.订单冻结, db_endtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ToList();
|
|||
|
foreach (var db_order in end_orders)
|
|||
|
{
|
|||
|
UpdateOrder(db_order, session, notices);
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//throw ex;
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
task.Start(1, null);
|
|||
|
|
|||
|
//if (string.IsNullOrEmpty(order_id))
|
|||
|
//{
|
|||
|
// var session = ApiClient.GetSession();
|
|||
|
// var end_orders = session.Find<fl_order_kuaishou>("select * from fl_order_kuaishou where db_status=@db_status and db_endtime<@db_endtime", new { db_status = (int)SystemOrderStatus.订单冻结, db_endtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ToList();
|
|||
|
// foreach (var db_order in end_orders)
|
|||
|
// {
|
|||
|
// UpdateOrder(db_order, session, notices);
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
//if (notices.Count != 0)
|
|||
|
//{
|
|||
|
// var tasks = TimerTask.GetTimer<Update_NoticeQueue>() as Update_NoticeQueue;
|
|||
|
// foreach (var item in notices)
|
|||
|
// {
|
|||
|
// //if (item.Member == null) continue;
|
|||
|
// var order = item.Order as fl_order_kuaishou;
|
|||
|
// if (order.order_sn == order_id) continue;
|
|||
|
// tasks.Add(item);
|
|||
|
// }
|
|||
|
//}
|
|||
|
}
|
|||
|
|
|||
|
private void OrderHandle(KS_OrderInfo orderInfo, string username, string usernick)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (orderInfo?.orderList != null && orderInfo.orderList.Count != 0)
|
|||
|
{
|
|||
|
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
|
|||
|
var notDownloadPids = ApiClient.Setting.SystemConfig.order_kuaishou_not_download_pid.Replace(",", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
|||
|
|
|||
|
int count = 1;
|
|||
|
foreach (var item in orderInfo.orderList)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (item.cpsKwaimoneyOrderProductView == null || item.cpsKwaimoneyOrderProductView.Count == 0)
|
|||
|
continue;
|
|||
|
|
|||
|
var db = ApiClient.GetSession();
|
|||
|
|
|||
|
foreach (var orderItem in item.cpsKwaimoneyOrderProductView)
|
|||
|
{
|
|||
|
count++;
|
|||
|
|
|||
|
#region 不处理的PID
|
|||
|
if (ApiClient.Setting.SystemConfig.order_kuaishou_download_set_pids == SwitchType.关闭)
|
|||
|
{
|
|||
|
if (notDownloadPids.Count != 0)
|
|||
|
{
|
|||
|
var isExist = notDownloadPids.Contains(orderItem.cpsPid);//是否包含
|
|||
|
//continue;
|
|||
|
if (ApiClient.Setting.SystemConfig.order_kuaishou_down_type == DownAdzoneType.不下载推广位 && isExist)
|
|||
|
continue;
|
|||
|
else if (ApiClient.Setting.SystemConfig.order_kuaishou_down_type == DownAdzoneType.只下载推广位 && !isExist)
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
var adzoneList = new List<fl_adzone_info>();
|
|||
|
var adzones = db.FindAdzoneInfos();
|
|||
|
adzoneList.AddRange(adzones.Where(f => f.custom_type == "快手返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.Contains(orderItem.cpsPid)));
|
|||
|
adzoneList.AddRange(adzones.Where(f => f.custom_type == "用户私人pid" && f.extend == "快手私人pid" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.Contains(orderItem.cpsPid)));
|
|||
|
if (adzoneList.Count() == 0)
|
|||
|
continue;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && count % 10 == 0)
|
|||
|
Thread.Sleep(150);
|
|||
|
|
|||
|
var dbOrder = db.FindSingle<fl_order_kuaishou>("oid=@oid and oid2=@oid2", new { oid = item.oid, oid2 = orderItem.oid });
|
|||
|
if (dbOrder != null)
|
|||
|
{
|
|||
|
var updateTime = item.updateTime.ToDateTime();
|
|||
|
if (dbOrder.updateTime == updateTime)
|
|||
|
continue;
|
|||
|
|
|||
|
if (dbOrder.IsFinish())//是否已经完成
|
|||
|
continue;
|
|||
|
if (dbOrder.db_status == SystemOrderStatus.订单冻结 && dbOrder.db_endtime > DateTime.Now)//跳过冻结
|
|||
|
continue;
|
|||
|
|
|||
|
dbOrder.updateTime = updateTime;
|
|||
|
dbOrder.cpsOrderStatus = (CpsOrderStatus)item.cpsOrderStatus;
|
|||
|
dbOrder.settlementSuccessTime = item.settlementSuccessTime.ToDateTime();
|
|||
|
dbOrder.settlementAmount = item.settlementAmount.ExecDivision();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
dbOrder = ToDbKusishou(item, orderItem);
|
|||
|
|
|||
|
dbOrder.db_cpsname = username;
|
|||
|
dbOrder.db_cpsnick = usernick;
|
|||
|
}
|
|||
|
|
|||
|
UpdateOrder(dbOrder, db, notices);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//Console.WriteLine($"处理订单异常1:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//通知
|
|||
|
if (notices.Count != 0)
|
|||
|
{
|
|||
|
var tasks = TimerTask.GetTimer<Update_NoticeQueue>() as Update_NoticeQueue;
|
|||
|
foreach (var item in notices)
|
|||
|
{
|
|||
|
var order = item.Order as fl_order_kuaishou;
|
|||
|
tasks.Add(item);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
//Console.WriteLine($"处理订单异常2:{ex.Message} - {ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private fl_order_kuaishou ToDbKusishou(OrderList order, CpsOrderProductView orderItem)
|
|||
|
{
|
|||
|
var dbOrder = new fl_order_kuaishou();
|
|||
|
|
|||
|
dbOrder.oid = order.oid;
|
|||
|
dbOrder.cpsOrderStatus = (CpsOrderStatus)order.cpsOrderStatus;
|
|||
|
dbOrder.orderCreateTime = order.orderCreateTime.ToDateTime();
|
|||
|
dbOrder.payTime = order.payTime.ToDateTime();
|
|||
|
dbOrder.orderTradeAmount = order.orderTradeAmount.ExecDivision();
|
|||
|
dbOrder.createTime = order.createTime.ToDateTime();
|
|||
|
dbOrder.updateTime = order.updateTime.ToDateTime();
|
|||
|
dbOrder.settlementSuccessTime = order.settlementSuccessTime.ToDateTime();
|
|||
|
dbOrder.settlementAmount = order.settlementAmount.ExecDivision();
|
|||
|
dbOrder.kwaimoneyUserId = order.kwaimoneyUserId;
|
|||
|
|
|||
|
dbOrder.oid2 = orderItem.oid;
|
|||
|
dbOrder.itemId = orderItem.itemId;
|
|||
|
dbOrder.itemTitle = orderItem.itemTitle;
|
|||
|
dbOrder.itemPicUrl = orderItem.itemPicUrl;
|
|||
|
dbOrder.itemPrice = orderItem.itemPrice.ExecDivision();
|
|||
|
dbOrder.skuDesc = orderItem.skuDesc;
|
|||
|
dbOrder.estimatedIncome = orderItem.estimatedIncome.ExecDivision();
|
|||
|
dbOrder.commissionRate = orderItem.commissionRate.ExecDivision(1000, 3);
|
|||
|
dbOrder.cpsPid = orderItem.cpsPid;
|
|||
|
dbOrder.sellerId = orderItem.sellerId;
|
|||
|
dbOrder.sellerNickname = orderItem.sellerNickname;
|
|||
|
dbOrder.num = orderItem.num;
|
|||
|
dbOrder.cpsType = orderItem.cpsType;
|
|||
|
dbOrder.distributorId = orderItem.distributorId;
|
|||
|
dbOrder.distributorNickname = orderItem.distributorNickname;
|
|||
|
dbOrder.comments = orderItem.comments;
|
|||
|
dbOrder.pidName = orderItem.pidName;
|
|||
|
dbOrder.paymentFee = orderItem.paymentFee.ExecDivision();
|
|||
|
|
|||
|
return dbOrder;
|
|||
|
}
|
|||
|
|
|||
|
internal bool UpdateOrder(DateTime start_time, DateTime end_time)
|
|||
|
{
|
|||
|
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
|
|||
|
try
|
|||
|
{
|
|||
|
IsRunning = true;
|
|||
|
var members = CpsClient.Members.Where(f => f.cpstype == CpsType.快手联盟 && f.is_download == SwitchType.开启).ToArray();
|
|||
|
|
|||
|
UnValidCpsMember(members);
|
|||
|
|
|||
|
UpdateOrder(members, start_time, end_time);
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, "更新快手异常:" + ex.Message);
|
|||
|
return false;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
IsRunning = false;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 订单 修改状态/用户绑定等操作通知用户
|
|||
|
/// </summary>
|
|||
|
/// <param name="dbOrder">快手订单对象</param>
|
|||
|
/// <param name="db">数据库操作对象</param>
|
|||
|
/// <param name="notice">事件集合</param>
|
|||
|
/// <param name="isFrontData"></param>
|
|||
|
public void UpdateOrder(fl_order_kuaishou dbOrder, SqlSugarClient db, List<OrderNoticeEvent> notice, bool isFrontData = false)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var old_status = dbOrder.db_status;
|
|||
|
fl_member_info member = null; ;
|
|||
|
var isRewards = false;//是否获得推荐新人奖励
|
|||
|
var isFirstOrder = false;//是否获得用户首单奖励
|
|||
|
var islotUserQuery = false;//订单是否为多人查询
|
|||
|
|
|||
|
//历史佣金计算id
|
|||
|
fl_itempoint1_hist itemPointHist = null;
|
|||
|
|
|||
|
//订单自动绑定
|
|||
|
if (dbOrder.db_userid == 0 && ApiClient.Setting.SystemConfig.order_kuaishou_bind == SwitchType.开启)
|
|||
|
{
|
|||
|
var isbind = false;
|
|||
|
#region 快手返利进行自动绑定
|
|||
|
//私人推广位强制绑定绑定
|
|||
|
var privateAdzonePids = db.FindKuaishouPrivatePid(dbOrder.cpsPid);
|
|||
|
if (privateAdzonePids.Count == 1 && privateAdzonePids[0].is_auto_bind)//无条件设置开启中,直接自动绑定
|
|||
|
{
|
|||
|
var memberInfo = db.FindMemberInfoById(privateAdzonePids[0].member_id);
|
|||
|
if (memberInfo != null)
|
|||
|
{
|
|||
|
dbOrder.db_userid = memberInfo.id;
|
|||
|
dbOrder.db_robotname = memberInfo.robot_name;
|
|||
|
dbOrder.db_robottype = memberInfo.robot_type;
|
|||
|
isbind = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!isbind)
|
|||
|
{
|
|||
|
var bind_pids = db.FindKuaishouAutoBindPid();
|
|||
|
bool flag = bind_pids.FirstOrDefault(f => f == dbOrder.cpsPid) != null ? true : false;
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
#region 有定义参数
|
|||
|
if (!string.IsNullOrWhiteSpace(dbOrder.comments))
|
|||
|
{
|
|||
|
itemPointHist = db.Queryable<fl_itempoint1_hist>().First(f => f.guidkey == dbOrder.comments);
|
|||
|
if (itemPointHist != null)
|
|||
|
{
|
|||
|
member = db.FindMemberInfoById(itemPointHist.uid);
|
|||
|
if (member != null)
|
|||
|
{
|
|||
|
dbOrder.db_userid = member.id;
|
|||
|
if (string.IsNullOrEmpty(dbOrder.db_robotname))
|
|||
|
{
|
|||
|
dbOrder.db_robotname = itemPointHist.robotname;
|
|||
|
dbOrder.db_robottype = member.robot_type;
|
|||
|
|
|||
|
}
|
|||
|
dbOrder.msg_groupid = itemPointHist.gid;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
member = db.Find<fl_member_info>("id=@id", new { id = dbOrder.db_userid }).FirstOrDefault();
|
|||
|
}
|
|||
|
|
|||
|
#region 更新用户的最后付款时间
|
|||
|
if (dbOrder.cpsOrderStatus == CpsOrderStatus.已付款 && dbOrder.db_userid != 0)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var record = db.FindStatisticsRecord(dbOrder.db_userid);
|
|||
|
if (record == null)
|
|||
|
record = new fl_statistics_record() { uid = dbOrder.db_userid };
|
|||
|
record.ex5 = HttpExtend.GetTimeStamp(dbOrder.payTime);
|
|||
|
db.Saveable(record).ExecuteCommand();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
//计算积分
|
|||
|
if (string.IsNullOrEmpty(dbOrder.db_point))
|
|||
|
{
|
|||
|
if (member == null)
|
|||
|
member = db.Find<fl_member_info>("id=@id", new { id = dbOrder.db_userid }).FirstOrDefault();
|
|||
|
|
|||
|
ItemPoint itempoint = null;
|
|||
|
|
|||
|
Compute compute = null;
|
|||
|
|
|||
|
if (itemPointHist != null)
|
|||
|
compute = JsonConvert.DeserializeObject<Compute>(itemPointHist.text);
|
|||
|
|
|||
|
//计算的佣金
|
|||
|
if (compute != null)
|
|||
|
itempoint = db.FindItemPoint(CpsType.快手联盟, compute, dbOrder.estimatedIncome, dbOrder.num);
|
|||
|
else
|
|||
|
itempoint = db.FindItemPoint(member, dbOrder.estimatedIncome, dbOrder.num, CpsType.快手联盟);
|
|||
|
|
|||
|
if (itempoint != null)
|
|||
|
{
|
|||
|
dbOrder.db_point = HttpHelper.ObjectToJson(itempoint);
|
|||
|
dbOrder.db_userpoint = itempoint.UserPoint;
|
|||
|
}
|
|||
|
if (member != null)
|
|||
|
{
|
|||
|
member.bind_order++;
|
|||
|
member = db.UpdateMemberGroup(member);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (member != null && string.IsNullOrWhiteSpace(dbOrder.db_robotname))
|
|||
|
{
|
|||
|
dbOrder.db_robotname = member.robot_name;
|
|||
|
dbOrder.db_robottype = member.robot_type;
|
|||
|
}
|
|||
|
|
|||
|
switch (dbOrder.cpsOrderStatus)
|
|||
|
{
|
|||
|
case CpsOrderStatus.已结算:
|
|||
|
case CpsOrderStatus.已收货:
|
|||
|
{
|
|||
|
//未发放佣金
|
|||
|
if (dbOrder.db_endtime == DateTime.MinValue)
|
|||
|
{
|
|||
|
var sleep = db.FindSleep(CpsType.快手联盟, ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType.商品总佣金 ? dbOrder.estimatedIncome : dbOrder.db_userpoint);
|
|||
|
if (sleep != null)
|
|||
|
{
|
|||
|
if (!string.IsNullOrEmpty(sleep.white_groups))
|
|||
|
{
|
|||
|
if (member != null && sleep.white_groups.Split(',').Contains(member.group_id.ToString()))
|
|||
|
{
|
|||
|
dbOrder.db_endtime = DateTime.Now;//该会员组不受限制
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
dbOrder.db_endtime = DateTime.Now.AddHours(sleep.sleep);//延迟多少小时
|
|||
|
}
|
|||
|
}
|
|||
|
else dbOrder.db_endtime = DateTime.Now.AddHours(sleep.sleep);//延迟多少小时
|
|||
|
}
|
|||
|
else dbOrder.db_endtime = DateTime.Now;
|
|||
|
|
|||
|
#region 验证订单是否为24小时
|
|||
|
var config = Util.Read<Dictionary<string, object>>("插件-快手返利-配置");
|
|||
|
if (config != null)
|
|||
|
{
|
|||
|
if (config.ContainsKey("ReceivingTimeCheck_Switch"))
|
|||
|
{
|
|||
|
var ReceivingTimeCheck_Switch = bool.Parse(config["ReceivingTimeCheck_Switch"].ToString());
|
|||
|
if (ReceivingTimeCheck_Switch)
|
|||
|
{
|
|||
|
if (config.ContainsKey("ReceivingTimeCheck_Hour"))
|
|||
|
{
|
|||
|
var ReceivingTimeCheck_Hour = int.Parse(config["ReceivingTimeCheck_Hour"].ToString());
|
|||
|
if ((DateTime.Now - dbOrder.payTime).TotalHours <= ReceivingTimeCheck_Hour)//判断订单收货时间差
|
|||
|
{
|
|||
|
if (config.ContainsKey("ReceivingTimeCheck_OperateType"))
|
|||
|
{
|
|||
|
var ReceivingTimeCheck_OperateType = (OperateType)int.Parse(config["ReceivingTimeCheck_OperateType"].ToString());
|
|||
|
if (ReceivingTimeCheck_OperateType == OperateType.订单冻结)
|
|||
|
{
|
|||
|
if (config.ContainsKey("ReceivingTimeCheck_FreezeTime"))
|
|||
|
{
|
|||
|
var ReceivingTimeCheck_FreezeTime = int.Parse(config["ReceivingTimeCheck_FreezeTime"].ToString());
|
|||
|
dbOrder.db_endtime = dbOrder.db_endtime.AddHours(ReceivingTimeCheck_FreezeTime);//延迟多少小时
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
}
|
|||
|
if (dbOrder.db_endtime <= DateTime.Now)
|
|||
|
{
|
|||
|
dbOrder.db_status = SystemOrderStatus.订单结算;
|
|||
|
//session.ExcuteSQL("update fl_order_kuaishou set db_status=" + (int)db_order.db_status + " where id=" + db_order.id);
|
|||
|
if (member != null)
|
|||
|
{
|
|||
|
var point = HttpHelper.JsonToObject<ItemPoint>(dbOrder.db_point) as ItemPoint;
|
|||
|
if (point != null)
|
|||
|
{
|
|||
|
#region 获取是否已经结算给客户
|
|||
|
var pointHists = db.Find<fl_point_hist>("select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message", new { uid = member.id, pointType_name = PointType.消费补贴.ToString(), message = $"快手购买:{dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})" });
|
|||
|
if (pointHists != null && pointHists.Count != 0)
|
|||
|
{
|
|||
|
db.SaveOrUpdate(dbOrder);
|
|||
|
return;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
List<long> ids = new List<long>();
|
|||
|
ids.Add(member.id);
|
|||
|
//用户自身加积分
|
|||
|
member = db.ChangePoint(PointType.消费补贴, point.UserPoint, member.id, $"快手购买:{dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})");
|
|||
|
|
|||
|
#region 判断用户是否符合获得新人奖励
|
|||
|
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, dbOrder.db_status);
|
|||
|
#endregion
|
|||
|
|
|||
|
//notice.Add(new OrderNoticeEvent(CpsType.快手联盟, member, db_order));
|
|||
|
//多级提成计算
|
|||
|
|
|||
|
//一级的提成小于等于0时,并且判断一级是否符合获得推荐新人奖励(无奖励一级提成)
|
|||
|
if (point.AwardOne <= 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
|
|||
|
{
|
|||
|
if (notice != null)
|
|||
|
{
|
|||
|
var inviter = db.FindMemberInfoById(member.inviter_id);
|
|||
|
if (inviter != null)
|
|||
|
{
|
|||
|
#region 判断上级是否符合获得推荐新人奖励
|
|||
|
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, dbOrder.db_endtime, dbOrder.paymentFee);
|
|||
|
#endregion
|
|||
|
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, inviter, dbOrder, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });//下级首单完成
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else if (point.AwardOne > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
|
|||
|
{
|
|||
|
var flag = db.ChangePoint(PointType.提成奖励, point.AwardOne, member.inviter_id, $"{member.usernick},快手购物1级提成! - {dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})");
|
|||
|
if (flag != null)
|
|||
|
{
|
|||
|
ids.Add(flag.id);
|
|||
|
|
|||
|
#region 判断上级是否符合获得推荐新人奖励
|
|||
|
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, dbOrder.db_endtime, dbOrder.paymentFee);
|
|||
|
#endregion
|
|||
|
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, flag, dbOrder, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });
|
|||
|
|
|||
|
if (point.AwardTwo > 0 && flag.inviter_id != 0 && !ids.Contains(flag.inviter_id))
|
|||
|
{
|
|||
|
var flag2 = db.ChangePoint(PointType.提成奖励, point.AwardTwo, flag.inviter_id, $"{member.usernick},快手购物2级提成! - {dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})");
|
|||
|
if (flag2 != null)
|
|||
|
{
|
|||
|
ids.Add(flag2.id);
|
|||
|
if (flag2 != null)
|
|||
|
{
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, flag2, dbOrder, OrderNoticeType.二级提成) { Customer = member });
|
|||
|
|
|||
|
if (point.AwardThree > 0 && flag2.inviter_id != 0 && !ids.Contains(flag2.inviter_id))
|
|||
|
{
|
|||
|
var flag3 = db.ChangePoint(PointType.提成奖励, point.AwardThree, flag2.inviter_id, $"{member.usernick},快手购物3级提成! - {dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})");
|
|||
|
if (flag3 != null)
|
|||
|
{
|
|||
|
ids.Add(flag3.id);
|
|||
|
if (flag3 != null) notice.Add(new OrderNoticeEvent(CpsType.快手联盟, flag3, dbOrder, OrderNoticeType.三级提成) { Customer = member });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//创建人计算
|
|||
|
if (point.AwardCreate > 0 && !string.IsNullOrEmpty(dbOrder.msg_groupid) && !string.IsNullOrEmpty(dbOrder.db_robotname))
|
|||
|
{
|
|||
|
var robot = db.FindRobotInfo(dbOrder.db_robotname, dbOrder.db_robottype);
|
|||
|
if (robot != null)
|
|||
|
{
|
|||
|
var create = db.FindCreateInfo(dbOrder.msg_groupid, dbOrder.db_robottype);
|
|||
|
if (create != null && member.id != create.id)
|
|||
|
{
|
|||
|
var flag = db.ChangePoint(PointType.提成奖励, point.AwardCreate, create.mid, $"{member.usernick},快手维护提成! - {dbOrder.itemTitle}({dbOrder.oid}-{dbOrder.oid2})");
|
|||
|
if (flag != null) notice.Add(new OrderNoticeEvent(CpsType.快手联盟, flag, dbOrder, OrderNoticeType.群主分成) { Customer = member });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else dbOrder.db_status = SystemOrderStatus.订单冻结;
|
|||
|
break;
|
|||
|
}
|
|||
|
case CpsOrderStatus.已付款:
|
|||
|
dbOrder.db_status = SystemOrderStatus.订单付款;
|
|||
|
break;
|
|||
|
case CpsOrderStatus.已失效:
|
|||
|
dbOrder.db_status = SystemOrderStatus.订单失效;
|
|||
|
|
|||
|
if (member != null)//订单还没有绑定用户
|
|||
|
{
|
|||
|
if (dbOrder.db_endtime != DateTime.MinValue) //客户已经在冻结中
|
|||
|
{
|
|||
|
if (dbOrder.db_endtime <= DateTime.Now) //佣金已经解冻 - 已经把佣金给客户(需要扣除佣金)
|
|||
|
{
|
|||
|
ItemPoint itempointTmp = null;
|
|||
|
|
|||
|
var compute = db.FindQueryRatioHist(CpsType.快手联盟, dbOrder.id);
|
|||
|
|
|||
|
if (compute != null)
|
|||
|
itempointTmp = db.FindItemPoint(CpsType.快手联盟, compute, dbOrder.estimatedIncome, dbOrder.num);
|
|||
|
else
|
|||
|
//判断用户的订单是否已经结算,如果已经结算通过实际佣金进行退款,如果没有结算通过预计佣进行计算
|
|||
|
itempointTmp = db.FindItemPoint(member, dbOrder.estimatedIncome, dbOrder.num, CpsType.快手联盟);
|
|||
|
new OrderHelper().DeductKuaiShouOrderPoint(notice, dbOrder, itempointTmp);
|
|||
|
|
|||
|
dbOrder.db_status = SystemOrderStatus.全额退款;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//if (itempoint != null)
|
|||
|
//{
|
|||
|
// //用户自身加积分
|
|||
|
// //member = session.ChangePoint(PointType.维权扣除, itempoint.UserPoint, member.id, $"抖音购买:{db_order.skuName}({db_order.orderId}) - 售后中(扣除) - 订单还未结算(冻结中)");
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|
|||
|
dbOrder.db_endtime = DateTime.MinValue;
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
dbOrder.db_status = SystemOrderStatus.订单未知;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
#region 通知客户订单付款/失效 提示上级
|
|||
|
if (member != null && (dbOrder.db_status == SystemOrderStatus.订单付款 || dbOrder.db_status == SystemOrderStatus.订单失效))
|
|||
|
{
|
|||
|
var point = HttpHelper.JsonToObject<ItemPoint>(dbOrder.db_point) as ItemPoint;
|
|||
|
if (point != null)
|
|||
|
{
|
|||
|
List<long> ids = new List<long>();
|
|||
|
ids.Add(member.id);
|
|||
|
|
|||
|
if (point.AwardOne > 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
|
|||
|
{
|
|||
|
//一级用户对象
|
|||
|
var member_one = db.FindMemberInfoById(member.inviter_id);
|
|||
|
if (member_one != null)
|
|||
|
{
|
|||
|
ids.Add(member_one.id);
|
|||
|
if (notice != null)
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, member_one, dbOrder, OrderNoticeType.一级提成) { Customer = member });
|
|||
|
if (point.AwardTwo > 0 && member_one.inviter_id != 0 && !ids.Contains(member_one.inviter_id))
|
|||
|
{
|
|||
|
//二级用户对象
|
|||
|
var member_two = db.FindMemberInfoById(member_one.inviter_id);
|
|||
|
if (member_two != null)
|
|||
|
{
|
|||
|
ids.Add(member_two.id);
|
|||
|
if (notice != null && member_two != null)
|
|||
|
{
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, member_two, dbOrder, OrderNoticeType.二级提成) { Customer = member });
|
|||
|
|
|||
|
if (point.AwardThree > 0 && member_two.inviter_id != 0 && !ids.Contains(member_two.inviter_id))
|
|||
|
{
|
|||
|
//三级用户对象
|
|||
|
var member_three = db.FindMemberInfoById(member_two.inviter_id);
|
|||
|
if (member_three != null)
|
|||
|
{
|
|||
|
ids.Add(member_three.id);
|
|||
|
if (notice != null && member_three != null)
|
|||
|
notice.Add(new OrderNoticeEvent(CpsType.快手联盟, member_three, dbOrder, OrderNoticeType.三级提成) { Customer = member });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//创建人计算
|
|||
|
if (point.AwardCreate > 0 && !string.IsNullOrEmpty(dbOrder.msg_groupid) && !string.IsNullOrEmpty(dbOrder.db_robotname))
|
|||
|
{
|
|||
|
var create = db.FindCreateInfo(dbOrder.msg_groupid, dbOrder.db_robottype);
|
|||
|
if (create != null && member.id != create.id)
|
|||
|
{
|
|||
|
var member_create = db.FindMemberInfoById(create.mid);
|
|||
|
if (notice != null && member_create != null) notice.Add(new OrderNoticeEvent(CpsType.快手联盟, member_create, dbOrder, OrderNoticeType.群主分成) { Customer = member });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
if (old_status != dbOrder.db_status)
|
|||
|
dbOrder.db_status_time = HttpExtend.GetTimeStamp();
|
|||
|
|
|||
|
db.SaveOrUpdate(dbOrder);
|
|||
|
if (dbOrder.db_status == SystemOrderStatus.订单付款)
|
|||
|
{
|
|||
|
#region 判断用户是否符合获得新人奖励
|
|||
|
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, dbOrder.db_status);
|
|||
|
#endregion
|
|||
|
}
|
|||
|
|
|||
|
//if (notice != null && (isFrontData || old_status != db_order.db_status))
|
|||
|
if (notice != null && (isFrontData || old_status != dbOrder.db_status)
|
|||
|
&& ((islotUserQuery && member == null) || member != null))
|
|||
|
notice.Add(new Events.OrderNoticeEvent(CpsType.快手联盟, member, dbOrder, OrderNoticeType.客户订单) { IsRewards = isFirstOrder });
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, "更新快手订单错误:" + dbOrder.oid + "-" + dbOrder.oid2 + "," + ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static DateTime invalidnotice_time = DateTime.MinValue;//阿里妈妈账号无效通知时间
|
|||
|
private static DateTime invalidnotice_time2 = DateTime.MinValue;//阿里妈妈账号日志无效时间
|
|||
|
/// <summary>
|
|||
|
/// 无效的快手账号通知
|
|||
|
/// </summary>
|
|||
|
/// <param name="_members">快手cps对象集合</param>
|
|||
|
private void UnValidCpsMember(fl_cps_member[] _members)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var invalid_members = _members.Where(f => !f.is_valid).ToArray();
|
|||
|
if (invalid_members.Length != 0)
|
|||
|
{
|
|||
|
var strb = new StringBuilder();
|
|||
|
strb.AppendLine($"快手更新订单异常");
|
|||
|
strb.AppendLine();
|
|||
|
|
|||
|
for (int i = 0; i < invalid_members.Length; i++)
|
|||
|
{
|
|||
|
strb.AppendLine($"{invalid_members[i].usernick} ({invalid_members[i].username})");
|
|||
|
}
|
|||
|
strb.AppendLine();
|
|||
|
strb.AppendLine($"以上账号授权状态已过期");
|
|||
|
strb.AppendLine($"跳过以上账号下载操作");
|
|||
|
strb.AppendLine($"请重新登录快手账号");
|
|||
|
|
|||
|
var timelag2 = (DateTime.Now - invalidnotice_time2).TotalMinutes;
|
|||
|
|
|||
|
if (timelag2 > 5)
|
|||
|
{
|
|||
|
invalidnotice_time2 = DateTime.Now;
|
|||
|
EventClient.OnEvent(this, strb.ToString());
|
|||
|
}
|
|||
|
|
|||
|
var timelag = (DateTime.Now - invalidnotice_time).TotalMinutes;
|
|||
|
|
|||
|
if (timelag > 30)
|
|||
|
{
|
|||
|
strb.AppendLine($"系统时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
|
|||
|
invalidnotice_time = DateTime.Now;
|
|||
|
ApiClient.SendNoticeMessage(strb.ToString());
|
|||
|
ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "快手账号授权失效通知", strb.ToString(), true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, $"更新快手订单异常7:{ex.Message},{ex.StackTrace}");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|