//=============================================================
// 创建人:千年老妖
// 本页代码,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。
//==============================================================
using Api.Framework.Cps;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.Properties;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Api.Framework.Utils;
using CsharpHttpHelper;
using CsharpHttpHelper.Enum;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Web;
using System.Web.Caching;
using static Api.Framework.Cps.AlimamaApi;
namespace Api.Framework.Timers
{
///
/// 阿里订单下载定时器
///
public class DownAlimamaTimer : TimerTask
{
///
/// 是否在运行
///
private static bool isRun = false;
///
/// 记录三个月中最早付款的时间
///
private static DateTime recordTime = DateTime.MinValue;
private static object rights = null;//维权让只执行一次
private static readonly object objLock = new object();//锁
public DownAlimamaTimer()
{
if (rights == null)
{
lock (objLock)
{
if (rights == null)
{
rights = new object();
//维权订单下载
ThreadPool.QueueUserWorkItem(delegate
{
while (this.IsStart)
{
try
{
Thread.Sleep(1000 * 60 * 30);
if (!this.IsStart) return;
var list = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.online == true && f.is_download == SwitchType.开启).ToList();
TaskTool task = new TaskTool();
foreach (var item in list)
{
var api = new AlimamaApi(item);
task.AddTask(delegate
{
UpdateOrder(api, DateTime.Now.AddDays(-50));
});
}
task.Start(10, null);
}
catch (Exception)
{ }
}
});
//同步长时间没有同步的付款订单
ThreadPool.QueueUserWorkItem(delegate
{
do
{
if (isRun) return;
isRun = true;
try
{
Thread.Sleep(30000);
var session = ApiClient.GetSession();
var date = DateTime.Now;
var start_time = recordTime == DateTime.MinValue ? date.AddDays(-90).AddHours(2) : recordTime;
var members = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.is_download == SwitchType.开启 && f.logintime.AddDays(30).AddHours(-5) >= DateTime.Now).ToArray();
if (members != null && members.Length != 0)
{
var _recordTime = recordTime;
fl_order_alimama order = null;
for (int i = 0; i < 2; i++)
{
var cpsnames = "'" + string.Join("','", members.Select(f => f.username)) + "'";
//order = session.FindSingle("db_status = @db_status and db_endtime = @min and @start_time < create_time and create_time <= @end_time and db_cpsname in (" + cpsnames + ") order by create_time asc", new { db_status = (int)SystemOrderStatus.订单付款, min = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"), start_time = start_time.ToString("yyyy-MM-dd HH:mm:ss"), end_time = date.ToString("yyyy-MM-dd HH:mm:ss") });
order = session.FindSingle("db_status = @db_status and @start_time < create_time and create_time <= @end_time and db_cpsname in (" + cpsnames + ") order by create_time asc", new { db_status = (int)SystemOrderStatus.订单付款, start_time = start_time.ToString("yyyy-MM-dd HH:mm:ss"), end_time = date.ToString("yyyy-MM-dd HH:mm:ss") });
if (order != null)
{
if (order.create_time != DateTime.MinValue && order.create_time != recordTime)
{
recordTime = order.create_time;
break;
}
else
start_time = recordTime;
}
}
if (order != null)
{
if (recordTime == DateTime.MinValue) recordTime = order.create_time;
if (_recordTime == recordTime) return;
var staetTime = order.create_time;//最后
if (date > staetTime.AddDays(20))
{
//var notices = DownOrderByOrderStatus(members, staetTime, staetTime.AddDays(1), new AlimamaOrderStatus[] { /*AlimamaOrderStatus.订单付款,*/AlimamaOrderStatus.全部订单, /* AlimamaOrderStatus.订单结算,*/ AlimamaOrderStatus.订单失效 });
var notices = DownOrderByOrderStatus(members, staetTime, staetTime.AddDays(1));
if (notices != null && notices.Count != 0)
OrderNotices(notices);
}
}
}
}
catch (Exception)
{ }
finally
{
isRun = false;
}
Thread.Sleep(1700000);//半个小时执行一次
} while (true);
});
//离线通知
ThreadPool.QueueUserWorkItem(delegate
{
do
{
try
{
Thread.Sleep(60000);
var cpss = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.abnormal_tip == SwitchType.开启 && f.online).ToList();
if (cpss != null && cpss.Count != 0)
{
foreach (var cps in cpss)
{
try
{
HttpHelper http = new HttpHelper();
HttpItem item = new HttpItem()
{
URL = "https://media.alimama.com/violationu2/violation2_page.json?r=mx_162&toPage=1&pageSize=40&punishStatus=1&csrfID=8383fb1b95de",
Method = "GET",
Timeout = 100000,
ReadWriteTimeout = 30000,
IsToLower = false,
Cookie = cps.cookies,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
Accept = "text/html, application/xhtml+xml, */*",
ContentType = "text/html",
Referer = "",
Allowautoredirect = false,
AutoRedirectCookie = false,
Postdata = "",
ResultType = ResultType.String,
};
HttpResult result = http.GetHtml(item);
string html = result.Html;
if (string.IsNullOrWhiteSpace(html)) continue;
var temp = JObject.Parse(html);
if (temp == null) continue;
//{"data":{"result":[],"totalCount":0},"resultCode":1,"success":true}
var successTemp = temp["success"];
if (successTemp == null || !(bool)successTemp) continue;
var data = temp["data"];
if (data == null) continue;
var totalCountTemp = data["totalCount"];
if (totalCountTemp == null) continue;
int totalCount = (int)totalCountTemp;
if (totalCount == 0) continue;
StringBuilder strb = new StringBuilder();
strb.AppendLine("淘宝违规处罚通知");
strb.AppendLine("---------------------");
strb.AppendLine("淘宝昵称:" + cps.usernick);
strb.AppendLine("淘宝账号:" + cps.username);
strb.AppendLine("存在违规:" + totalCount + "条");
strb.AppendLine();
strb.AppendLine("尽快去后台进行违规申诉");
ApiClient.SendNoticeMessage(strb.ToString());
}
catch (Exception ex)
{ }
finally
{
Thread.Sleep(1000);
}
}
}
}
catch (Exception ex)
{ }
Thread.Sleep(12 * 60 * 60 * 1000);//8小时执行一次
} while (true);
});
}
}
}
}
///
/// ....
///
private Dictionary OrderDataIdDic = new Dictionary();
private DateTime update_time = DateTime.Now.AddMinutes(-60);
private int number;
public override void Run(object state, bool timedOut)
{
try
{
OrderDataIdDic = new Dictionary();
//return;
number++;
DateTime start = DateTime.Now;
if (number == 1)
{
start = DateTime.Now.AddHours(-5);
}
else
{
start = update_time;
if (number % 10 == 0) start = DateTime.Now.AddHours(-1);
if (number % 60 == 0) start = DateTime.Now.AddHours(-5);
else if (number % 120 == 0) start = DateTime.Now.AddHours(-24);
}
var end = DateTime.Now;
update_time = DateTime.Now.AddMinutes(-30);
#region 需要重新登录的联盟账号通知钉钉
var cps_expires = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.abnormal_tip == SwitchType.开启 && f.logintime.AddDays(29) <= DateTime.Now).ToList();
if (cps_expires != null && cps_expires.Count != 0)
{
foreach (var cps in cps_expires)
{
var key = $"alimama_cps_expire_{cps.username}";
var value = ApiClient.Cache.Get(key);
if (string.IsNullOrWhiteSpace(value))
{
var session = ApiClient.GetSession();
var robot = session.FindRobots().FirstOrDefault();
StringBuilder strb = new StringBuilder();
strb.AppendLine("淘宝状态异常");
strb.AppendLine("---------------------");
if (robot != null)
strb.AppendLine("所在机器人:" + $"({robot.nick}){robot.name}");
strb.AppendLine("昵称:" + cps.usernick);
strb.AppendLine("账号:" + cps.username);
strb.AppendLine();
strb.AppendLine("解决方法:重新登录");
ApiClient.SendNoticeMessage(strb.ToString());
ApiClient.Cache.Set(key, ".", 300);
Thread.Sleep(50);
}
}
}
#endregion
var _members = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.is_download == SwitchType.开启 && f.logintime.AddDays(30).AddHours(-5) >= DateTime.Now).ToArray();
UnValidCpsMember(_members);
UpdateOrder(_members, start, end);
#region 同步失效订单
if (number % 2000 == 0)
{
//var notices = DownOrderByOrderStatus(_members, DateTime.Now.AddDays(-5), end, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单失效 });
var notices = DownOrderByOrderStatus(_members, DateTime.Now.AddDays(-5), end);
OrderNotices(notices);
}
#endregion
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"Alimama - > Run:{ex.Message},{ex.StackTrace}");
}
finally
{
OrderDataIdDic = new Dictionary();
}
}
///
/// 通过cps获取AlimamaApi
///
/// cps对象
///
public AlimamaApi GetAlimamaApi(fl_cps_member cps)
{
try
{
return new AlimamaApi(cps);
}
catch (Exception)
{ }
return null;
}
#region 下载维权退款订单
private bool IsRun = false;
///
/// 爬虫更新阿里妈妈订单 - 下载维权退款订单
///
/// AlimamaApi对象
/// 开始时间
/// 最大的页数
public void UpdateOrder(AlimamaApi api, DateTime startTime, int maxPage = 999999)
{
#region
if (IsRun) return;
try
{
IsRun = true;
int toPage = 1;
List> result = null;
var pageSize = 1000;
List notices = new List();
do
{
result = api.SerchOrder(OrderType.维权退款明细, 0, "", pageSize, startTime, toPage);//获取淘宝联盟的订单
var session = ApiClient.GetSession();
foreach (Dictionary item in result)
{
var order = session.FindSingle("select * from fl_order_alimama where trade_id = @trade_id and trade_parent_id = @trade_parent_id", new { trade_id = item["tbTradeId"].ToString(), trade_parent_id = item["tbTradeParentId"].ToString() });
string _showRefundStatus = string.Empty;
if (order != null)
{
if (order.auction_category == "手动处理")
continue;
bool IsRefundOrderExist = false;//是否是新创建
var refund_order = session.FindSingle("select * from fl_order_refund_alimama where tbtradeparentid = @tbtradeparentid and tbtradeid = @tbtradeid", new { tbtradeparentid = item["tbTradeParentId"].ToString(), tbtradeid = item["tbTradeId"].ToString() });
if (refund_order == null)
{
_showRefundStatus = (item["showRefundStatus"] == null ? string.Empty : item["showRefundStatus"].ToString()).Replace(",", ",").Replace(",", "_"); //维权状态
if (_showRefundStatus.Contains("维权成功"))
_showRefundStatus = "维权成功";
else if (_showRefundStatus.Contains("维权失败"))
_showRefundStatus = "维权失败";
IsRefundOrderExist = true;
refund_order = new fl_order_refund_alimama()
{
earningtime = !item.ContainsKey("earningTime") || item["earningTime"] == null ? string.Empty : item["earningTime"].ToString(),
inviteraccountname = string.Empty, //item["inviterAccountName"] == null ? string.Empty : item["inviterAccountName"].ToString(),
inviterid = string.Empty, //item["inviterId"] == null ? string.Empty : item["inviterId"].ToString(),
refundcreatetime = !item.ContainsKey("refundCreateTime") || item["refundCreateTime"] == null ? string.Empty : item["refundCreateTime"].ToString(),
refundfee = !item.ContainsKey("refundFee") || item["refundFee"] == null ? 0d : double.Parse(item["refundFee"].ToString()),
refundservicefee = !item.ContainsKey("refundServiceFee") || item["refundServiceFee"] == null ? 0d : double.Parse(item["refundServiceFee"].ToString()),
relationapp = string.Empty, //item["relationApp"] == null ? string.Empty : item["relationApp"].ToString(),
relationappname = string.Empty, //item["relationAppName"] == null ? string.Empty : item["relationAppName"].ToString(),
relationid = string.Empty,// item["relationId"] == null ? string.Empty : item["relationId"].ToString(),
showrefundreason = string.Empty,// item["showRefundReason"] == null ? string.Empty : item["showRefundReason"].ToString(),
showrefundstatus = _showRefundStatus,
showreturnfee = !item.ContainsKey("showReturnFee") || item["showReturnFee"] == null ? 0d : double.Parse(item["showReturnFee"].ToString()),
tbauctionnum = string.Empty,//item["tbAuctionNum"] == null ? string.Empty : item["tbAuctionNum"].ToString(),
tbauctiontitle = item.ContainsKey("itemTitle") ? item["itemTitle"].ToString() : string.Empty,//item["tbAuctionTitle"] == null ? string.Empty : item["tbAuctionTitle"].ToString(),
tbsellershoptitle = !item.ContainsKey("sellerShopTitle") || item["sellerShopTitle"] == null ? string.Empty : item["sellerShopTitle"].ToString(),
tbtradefinishprice = string.Empty,//item["tbTradeFinishPrice"] == null ? string.Empty : item["tbTradeFinishPrice"].ToString(),
tbtradeid = !item.ContainsKey("tbTradeId") || item["tbTradeId"] == null ? string.Empty : item["tbTradeId"].ToString(),
tbtradeparentid = !item.ContainsKey("tbTradeParentId") || item["tbTradeParentId"] == null ? string.Empty : item["tbTradeParentId"].ToString(),
tkcommissionfee = !item.ContainsKey("finalPubShareFee") || item["finalPubShareFee"] == null ? 0d : double.Parse(item["finalPubShareFee"].ToString()),
tksubsidyfee = string.Empty, //item["tkSubsidyFee"] == null ? string.Empty : item["tkSubsidyFee"].ToString()
};
if (item.ContainsKey("refundFinishTime")) refund_order.refundfinishtime = item["refundFinishTime"] == null ? string.Empty : item["refundFinishTime"].ToString();
}
else
{
IsRefundOrderExist = false;
_showRefundStatus = (item["showRefundStatus"] == null ? string.Empty : item["showRefundStatus"].ToString()).Replace(",", ",").Replace(",", "_"); //维权状态
if (_showRefundStatus.Contains("维权成功"))
_showRefundStatus = "维权成功";
else if (_showRefundStatus.Contains("维权失败"))
_showRefundStatus = "维权失败";
if (refund_order.showrefundstatus != _showRefundStatus)
{
if (refund_order.showrefundstatus == "维权失败" && _showRefundStatus == "维权成功")
{
IsRefundOrderExist = true;
}
refund_order.showrefundstatus = _showRefundStatus;
refund_order.refundfee = item["refundFee"] == null ? 0d : double.Parse(item["refundFee"].ToString()); //维权金额
refund_order.refundcreatetime = item["refundCreateTime"] == null ? string.Empty : item["refundCreateTime"].ToString();
if (item.ContainsKey("refundFinishTime"))
refund_order.refundfinishtime = item["refundFinishTime"] == null ? string.Empty : item["refundFinishTime"].ToString(); //退款完成时间
if (item.ContainsKey("refundServiceFee"))
refund_order.refundservicefee = item["refundServiceFee"] == null ? 0d : double.Parse(item["refundServiceFee"].ToString()); //退还服务费用
if (item.ContainsKey("showReturnFee"))
refund_order.showreturnfee = item["showReturnFee"] == null ? 0d : double.Parse(item["showReturnFee"].ToString()); //退款金额
if (string.IsNullOrWhiteSpace(refund_order.tbauctiontitle) && item.ContainsKey("itemTitle"))
refund_order.tbauctiontitle = item["itemTitle"].ToString();
}
else
{
var flag = false;
if (_showRefundStatus == "维权失败" && (order.db_status == SystemOrderStatus.订单维权中 || !order.IsFinish()))
{
flag = true;
}
if (string.IsNullOrWhiteSpace(refund_order.tbauctiontitle) && item.ContainsKey("itemTitle"))
{
refund_order.tbauctiontitle = item["itemTitle"].ToString();
if (!flag)
session.SaveOrUpdate(refund_order);
}
if (!flag)
continue;
}
}
session.SaveOrUpdate(refund_order);
//非维权失败
if (!_showRefundStatus.Contains("维权失败"))
{
//如果订单结算、直接扣除
if (order.db_status == SystemOrderStatus.订单结算 || order.db_status == SystemOrderStatus.部分退款)
{
order.tk_status = (int)AlimamaOrderStatus.订单维权中; //后加
order.db_endtime = DateTime.MinValue; //后加
order.db_status = SystemOrderStatus.订单维权中;
if (order.db_userid > 0)
{
var pointHists = session.Find("select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message", new { uid = order.db_userid, pointType_name = PointType.维权扣除.ToString(), message = $"退款:{order.item_title}({order.trade_parent_id})({order.trade_id})" });
if (pointHists != null && pointHists.Count != 0)
{
continue;
}
}
//扣除用户订单,结算的积分
new OrderHelper().DeductAliOrderPoint(notices, order);
if (IsRefundOrderExist && _showRefundStatus.Contains("维权成功"))//如果上面的阿里妈妈维权订单有一段时间没有下载到(维权订单),新new的对象,以前没有记录
{
var order2 = session.FindSingle("trade_id=@trade_id and trade_parent_id=@trade_parent_id", new
{
trade_id = item["tbTradeId"].ToString(),
trade_parent_id = item["tbTradeParentId"].ToString()
});
session.SaveOrUpdate(order);
order2.db_status = SystemOrderStatus.订单结算;
order2.tk_status = (int)AlimamaOrderStatus.订单结算;
order2.db_endtime = DateTime.Now;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权A 数据1:{HttpHelper.ObjectToJson(order2)}");
//}
//catch (Exception)
//{ }
UpdateOrder(order2, notices, session, refund_order);
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order2)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
session.SaveOrUpdate(order2);
continue;
}
if (IsRefundOrderExist && _showRefundStatus.Contains("维权成功"))//如果上面的阿里妈妈维权订单有一段时间没有下载到(维权订单),新new的对象,以前没有记录
{
continue;
}
}
if (_showRefundStatus.Contains("维权成功"))
{
if (order.tk_status == (int)AlimamaOrderStatus.订单维权中)//这个是出里别的软件导过来,还会结算一次
{
order.db_status = SystemOrderStatus.订单结算;
order.tk_status = (int)AlimamaOrderStatus.订单结算;
order.db_endtime = DateTime.Now;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权B 数据1:{HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
UpdateOrder(order, notices, session, refund_order);
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
else
{
order.tk_status = (int)AlimamaOrderStatus.订单维权中; //后加
order.db_endtime = DateTime.MinValue; //后加
order.db_status = SystemOrderStatus.订单维权中;
session.SaveOrUpdate(order);
}
}
else
{
if (order.db_status == SystemOrderStatus.订单维权中 || !order.IsFinish())
{
if (IsRefundOrderExist && (order.db_status == SystemOrderStatus.订单冻结 || order.db_status == SystemOrderStatus.订单付款))
{
continue;
}
//维权失败 、 正常结算给客户
order.tk_status = (int)AlimamaOrderStatus.订单结算;
order.db_status = SystemOrderStatus.订单冻结;
order.db_endtime = DateTime.Now;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权B 数据2: {HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
UpdateOrder(order, notices, session, refund_order);
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
}
}
toPage++;
} while (result != null && result.Count == pageSize && toPage < maxPage);
OrderNotices(notices);
}
catch (Exception ex)
{
EventClient.OnEvent(this, "下载维权退款订单异常:" + ex.Message);
}
finally
{
IsRun = false;
}
#endregion
}
#endregion
///
/// 同步订单
///
/// 同步账号时间
/// 同步开始
/// 同步结束时间
private void UpdateOrder(fl_cps_member[] _members, DateTime start_time, DateTime end_time)
{
if (end_time.Hour == 3 && 0 <= end_time.Minute && end_time.Minute <= 7) return;
_members = _members.Where(f => f.is_download == SwitchType.开启).ToArray();
if (_members == null || _members.Length == 0)
return;
List notices = null;
try
{
UnValidCpsMember(_members);
if (!string.IsNullOrWhiteSpace(order_id))
//notices = DownOrderByOrderStatus(_members, start_time, end_time, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单付款 });
notices = DownOrderByOrderStatus(_members, start_time, end_time);
else
{
//notices = DownOrderByOrderStatus(_members, start_time, end_time, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单付款, AlimamaOrderStatus.全部订单, AlimamaOrderStatus.订单结算, AlimamaOrderStatus.订单失效 });
notices = DownOrderByOrderStatus(_members, start_time, end_time);
#region 检查冻结状态的订单是否可以结算
var session = ApiClient.GetSession();
var end_orders = session.Find("db_status = @db_status and db_endtime != @min and db_endtime < @now", new { db_status = (int)SystemOrderStatus.订单冻结, min = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"), now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") });
//var strb = new StringBuilder();
//strb.AppendLine("检查冻结订单是否可以结算...");
//int index = 1;
foreach (var db_order in end_orders)
{
//strb.Append($@"订单{index}:{HttpHelper.ObjectToJson(db_order)}");
UpdateOrder(db_order, notices, session);
//strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(db_order)}");
//index++;
//strb.AppendLine();
}
//try
//{
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
#endregion
}
}
catch (Exception ex)
{
var err = "";
if (ex.Message.Contains("未将对象引用设置到对象的实例"))
err = ",请重新登录淘宝";
EventClient.OnEvent(this, $"更新阿里妈妈订单异常:{ex.Message} - {ex.StackTrace} {err}");
}
OrderNotices(notices);
}
///
/// 手动同步指定阿里妈妈订单状态
///
/// 要同步的阿里妈妈
/// 同步的时间
/// 同步结束的时间
/// 订单的状态
public void UpdateOrder(fl_cps_member[] _members, DateTime start_time, DateTime end_time, AlimamaOrderStatus status)
{
if (_members == null || _members.Length == 0)
return;
//if (status == AlimamaOrderStatus.全部订单 || status == AlimamaOrderStatus.订单成功 || status == AlimamaOrderStatus.订单维权中)
//return;
List notices = null;
try
{
UnValidCpsMember(_members);
notices = DownOrderByOrderStatus(_members, start_time, end_time, new AlimamaOrderStatus[] { status });
//notices = DownOrderByOrderStatus(_members, start_time, end_time);
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"更新阿里妈妈订单({status.ToString()}):" + ex.Message);
}
OrderNotices(notices);
}
///
/// 创建阿里妈妈订单同步任务
/// 阿里妈妈联盟
/// 订单同步起始时间
/// 订单同步结束时间
public void UpdateOrder(List 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, "更新阿里妈妈订单异常4:" + ex.Message);
}
finally
{
IsRunning = false;
}
}
//private static readonly int row_count = 19;//阿里妈妈更新间隔间隔
#region 同步间隔时间缓存
///
/// 设置同步的时间间隔
///
///
internal static void SetIntervalCache(int interval)
{
try
{
var cacheName = DateTime.Now.ToString("yyyyMMdd");
Cache cache = HttpRuntime.Cache;
//时间间隔缓存,不存在则返回null
object item = cache[cacheName];
if (item == null)
{
var date = DateTime.Now.Date.AddDays(1).AddMilliseconds(-1);
cache.Insert(cacheName, interval, null, date, System.Web.Caching.Cache.NoSlidingExpiration);
}
}
catch (Exception ex)
{ }
}
///
/// 获取同步的时间间隔
///
///
internal static int GetIntervalCache()
{
try
{
var cacheName = DateTime.Now.ToString("yyyyMMdd");
Cache cache = HttpRuntime.Cache;
object item = cache[cacheName];
if (item != null)
return Convert.ToInt32(item);
}
catch (Exception)
{ }
return interval;
}
///
/// 判断缓存是否存在
///
///
internal static bool IsExitCache()
{
try
{
var cacheName = DateTime.Now.ToString("yyyyMMdd");
Cache cache = HttpRuntime.Cache;
return cache[cacheName] != null;
}
catch (Exception ex)
{ }
return false;
}
#endregion
#region 老道 通过阿里妈妈订单状态下载订单
private const int interval = 60;
private List DownOrderByOrderStatus(fl_cps_member[] _members, DateTime _start_time, DateTime _end_time, AlimamaOrderStatus[] _orderStatus = null)
{
var orderStatus = _orderStatus;
var members = _members;
DateTime start_time = _start_time;
DateTime end_time = _end_time;
//start_time = DateTime.Parse("2020-05-26 07:00:00");
//end_time = DateTime.Parse("2020-05-31 01:00:00");
List notices = new List();
//if (orderStatus == null || orderStatus.Length == 0) return notices;
members = members.Where(f => f.is_valid).ToArray();
if (members.Length != 0)
{
try
{
var isState = (orderStatus == null || orderStatus.Length == 0);
var row_count = 19;
if (!IsExitCache())//如果缓存时间不存在那么先请求一次下载订单
{
var _member = members.FirstOrDefault(f => f.logintime > DateTime.Now.AddDays(-29));
if (_member != null)
{
var api = CpsClient.CreateAlimamaRequest(_member);
var time = end_time.AddMinutes(-interval);
//UpdateOrder(AlimamaOrderType.淘客明细订单, time, api, notices, _member, orderStatus[0]);
if (isState)
api.DownOrder(time, 1, 100, AlimamaOrderType.淘客明细订单, 1);
else
api.DownOrder(time, 1, 100, orderStatus[0], AlimamaOrderType.淘客明细订单, 1);
}
}
if (IsExitCache())
{
row_count = GetIntervalCache();
}
var spa_time = end_time - start_time;//计算时间差
//int count = (int)spa_time.TotalMinutes / row_count;
//if (spa_time.TotalMinutes % row_count != 0) count++;
var count = Math.Ceiling(spa_time.TotalMinutes / row_count);
if (!isState)//带订单状态
{
for (int s = 0; s < orderStatus.Length; s++)//更新的订单状态
{
var status = orderStatus[s];
Task[] _task = new Task[members.Length];
for (int i = 0; i < members.Length; i++)
{
var _status = status;
var _member = members[i];
var _api = CpsClient.CreateAlimamaRequest(_member);
_task[i] = new Task(delegate
{
var api = _api;
var member = _member;
try
{
for (int j = 1; j <= count; j++)
{
//临时时间
var _time = end_time.AddMinutes(-(j * row_count));
UpdateOrder(AlimamaOrderType.淘客明细订单, _time, api, notices, member, _status);
UpdateOrder(AlimamaOrderType.第三方订单明细, _time, api, notices, member, _status);
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"阿里妈妈Api更新订单状态异常:{member.usernick} ~ {status} # {ex.Message} - {ex.StackTrace}");
}
});
_task[i].Start();
Thread.Sleep(100);
}
Task.WaitAll(_task);
Thread.Sleep(10);
}
}
else//没有订单状态
{
Task[] _task = new Task[members.Length];
for (int i = 0; i < members.Length; i++)
{
var _member = members[i];
var _api = CpsClient.CreateAlimamaRequest(_member);
_task[i] = new Task(delegate
{
var api = _api;
var member = _member;
try
{
for (int j = 1; j <= count; j++)
{
//临时时间
var _time = end_time.AddMinutes(-(j * row_count));
UpdateOrder(AlimamaOrderType.淘客明细订单, _time, api, notices, member);
UpdateOrder(AlimamaOrderType.第三方订单明细, _time, api, notices, member);
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"阿里妈妈Api更新订单状态异常:{member.usernick} ~ ## {ex.Message} - {ex.StackTrace}");
}
});
_task[i].Start();
Thread.Sleep(100);
}
Task.WaitAll(_task);
}
}
catch (Exception ex)
{
throw ex;
}
}
return notices;
}
#endregion
///
/// 事件通知
///
///
private void OrderNotices(List _notices)
{
var notices = _notices;
if (notices != null && notices.Count != 0)
{
var tasks = TimerTask.GetTimer() as Update_NoticeQueue;
foreach (var item in notices)
{
var order = item.Order as fl_order_alimama;
if (order.trade_parent_id == order_id) continue;
Thread.Sleep(5);
tasks.Add(item);
}
notices.Clear();
notices = null;
}
}
#region 下载订单
#region 下载阿里妈妈订单
///
/// 下载阿里订单
///
///
///
///
///
///
///
internal void UpdateOrder(AlimamaOrderType _order_type, DateTime _start_time, AlimamaApi _api, List notices, fl_cps_member _ItemMember, AlimamaOrderStatus _tk_status = AlimamaOrderStatus.全部订单)
{
var order_type = _order_type;
var start_time = _start_time;
var ItemMember = _ItemMember;
var tk_status = _tk_status;
var api = _api;
var downTypeList = new List() { 3, 1 };
//foreach (int order_scene in Enum.GetValues(typeof(TBDownType)))
foreach (var order_scene in downTypeList)
{
try
{
ArrayList list = null;
if (tk_status != AlimamaOrderStatus.全部订单)
list = api.DownOrder(start_time, 1, 100, tk_status, order_type, order_scene);
else
list = api.DownOrder(start_time, 1, 100, order_type, order_scene);
if (list == null || list.Count == 0)
{
Thread.Sleep(300);
continue;
}
//var _pids = ApiClient.Setting.SystemConfig.order_alimama_not_download_pid.Replace(",", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
int count = 0;
foreach (Dictionary order in list)
{
count++;
var session = ApiClient.GetSession();
try
{
if (!string.IsNullOrEmpty(order_id) && order["trade_parent_id"].ToString() != order_id) continue;
//订单号搜索
//if (order["trade_parent_id"].ToString() == "2104466653925439514" && order["trade_id"].ToString() == "2104466653926439514")
//{
//}
//if (order["trade_parent_id"].ToString() == "8536347047390809379")
//{
//}
if (order.ContainsKey("alipay_total_price") && double.Parse(order["alipay_total_price"].ToString()) == 0d)//不处理赠品商品,直接跳过
continue;
#region 处理的PID
if (ApiClient.Setting.SystemConfig.order_alimama_download_set_pids == SwitchType.关闭)
{
var _pids = ApiClient.Setting.SystemConfig.order_alimama_not_download_pid.Replace(",", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
if (_pids.Count != 0 && order.ContainsKey("adzone_id"))
{
var isExist = _pids.FirstOrDefault(f => f.EndsWith("_" + order["adzone_id"].ToString())) != null;//是否包含
if (ApiClient.Setting.SystemConfig.order_alimama_down_type == DownAdzoneType.不下载推广位 && isExist)
continue;
else if (ApiClient.Setting.SystemConfig.order_alimama_down_type == DownAdzoneType.只下载推广位 && !isExist)
continue;
}
}
else
{
if (order.ContainsKey("adzone_id"))
{
var adzoneList = new List();
var adzones = session.FindAdzoneInfos();
adzoneList.AddRange(adzones.Where(f => f.custom_type == "淘宝返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.EndsWith("_" + order["adzone_id"].ToString())));
adzoneList.AddRange(adzones.Where(f => f.custom_type == "用户私人pid" && f.extend == "淘宝私人pid" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.EndsWith("_" + order["adzone_id"].ToString())));
if (adzoneList == null || adzoneList.Count() == 0)
{
if (null == session.FindAdzoneGroups(CpsType.阿里妈妈).FirstOrDefault(f => Regex.IsMatch(f.adzones, "_" + order["adzone_id"].ToString())))
continue;
continue;
}
}
}
if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && count % 10 == 0)
Thread.Sleep(150);
#endregion
var status = int.Parse(order["tk_status"].ToString());
//var db_order = session.Queryable().Where(f => f.trade_id == order["trade_id"].ToString() && f.trade_parent_id == order["trade_parent_id"].ToString()).First();
var db_order = session.FindSingle("select * from fl_order_alimama where trade_id = @trade_id and trade_parent_id = @trade_parent_id", new { trade_id = order["trade_id"].ToString(), trade_parent_id = order["trade_parent_id"].ToString() });
if (db_order != null) //跳过相同状态
{
if (db_order.total_commission_rate == 0) continue;
if (db_order.IsFinish()) continue;//是否完成
#region 预付定金处理
if (order.ContainsKey("tb_deposit_time") && order["tb_deposit_time"].ToString() != "--")
{
if (order.ContainsKey("alipay_total_price") && double.Parse(order["alipay_total_price"].ToString()) != db_order.alipay_total_price)
{
var alipay_total_price = double.Parse(order["alipay_total_price"].ToString());
db_order.alipay_total_price = alipay_total_price;
if (order.ContainsKey("pub_share_pre_fee"))
db_order.pub_share_pre_fee = double.Parse(order["pub_share_pre_fee"].ToString());
fl_member_info member = null;
if (db_order.db_userid != 0)
{
//member = session.FindSingle("select * from fl_member_info where id = @id", new { id = db_order.db_userid });
member = session.FindMemberInfoById(db_order.db_userid);
}
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session.GetTbComparisonFeeRate(db_order);
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType.阿里妈妈, db_order.id);
ItemPoint itempoint = null;
if (compute != null)
itempoint = session.FindItemPoint(CpsType.阿里妈妈, compute, commission, db_order.item_num);
else
itempoint = session.FindItemPoint(member, commission, db_order.item_num, CpsType.阿里妈妈);
db_order.db_userpoint = itempoint.UserPoint;
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
session.SaveOrUpdate(db_order);
}
#region 以后直接删除
if (order.ContainsKey("deposit_price") && string.IsNullOrWhiteSpace(db_order.deposit_price))
{
db_order.deposit_price = order["deposit_price"].ToString();
db_order.tb_deposit_time = order["tb_deposit_time"].ToString();
session.SaveOrUpdate(db_order);
}
#endregion
}
#endregion
if (db_order.db_status == SystemOrderStatus.订单冻结 && db_order.db_endtime > DateTime.Now) continue;//跳过系统冻结
if ((int)db_order.tk_status == status) continue;//跳过相同状态?
#region 更新以下的值
#region 老接口 09-20
//if (order.ContainsKey("commission"))
// db_order.commission = double.Parse(order["commission"].ToString());
//if (order.ContainsKey("pay_price"))
// db_order.pay_price = double.Parse(order["pay_price"].ToString());
//if (order.ContainsKey("earning_time"))
// db_order.earning_time = DateTime.Parse(order["earning_time"].ToString());
#endregion
#region 新接口 09-20
//if (order.ContainsKey("commission"))
// db_order.commission = double.Parse(order["commission"].ToString());
if (order.ContainsKey("tk_paid_time"))
db_order.paid_time = DateTime.Parse(order["tk_paid_time"].ToString());
if (order.ContainsKey("pub_share_fee"))
db_order.commission = double.Parse(order["pub_share_fee"].ToString());
if (order.ContainsKey("pay_price"))
db_order.pay_price = double.Parse(order["pay_price"].ToString());
//if (order.ContainsKey("earning_time"))
// db_order.earning_time = DateTime.Parse(order["earning_time"].ToString());
if (order.ContainsKey("tk_earning_time"))
db_order.earning_time = DateTime.Parse(order["tk_earning_time"].ToString());
if (order.ContainsKey("total_commission_fee"))
db_order.total_commission_fee = double.Parse(order["total_commission_fee"].ToString());
#endregion
#endregion
}
//自动填充实例
if (db_order == null)
{
db_order = order.ConvertToObj();
if (db_order.total_commission_rate == 0 && db_order.order_type != "饿了么") continue;
if (order.ContainsKey("subsidy_type"))
{
AlimamaOrderSubsidyType subsidyType;
if (!Enum.TryParse(order["subsidy_type"].ToString(), out subsidyType))
subsidyType = AlimamaOrderSubsidyType.其他;
db_order.subsidy_type = (int)subsidyType;
}
if (order.ContainsKey("terminal_type"))
{
AlimamaOrderTerminalType terminalType;
if (!Enum.TryParse(order["terminal_type"].ToString(), out terminalType))
terminalType = AlimamaOrderTerminalType.其他;
db_order.terminal_type = (int)terminalType;
}
db_order.income_rate = (double)((decimal)db_order.income_rate / 100m);
db_order.total_commission_rate = (double)((decimal)db_order.total_commission_rate / 100m);
db_order.subsidy_rate = (double)((decimal)db_order.subsidy_rate / 100m);
#region 新接口
if (order.ContainsKey("tk_paid_time"))
db_order.paid_time = DateTime.Parse(order["tk_paid_time"].ToString());
if (order.ContainsKey("tk_earning_time"))
db_order.earning_time = DateTime.Parse(order["tk_earning_time"].ToString());
if (order.ContainsKey("pub_share_fee"))
db_order.commission = double.Parse(order["pub_share_fee"].ToString());
if (order.ContainsKey("item_category_name"))
db_order.auction_category = order["item_category_name"].ToString();
if (order.ContainsKey("tk_create_time"))
db_order.create_time = DateTime.Parse(order["tk_create_time"].ToString());
if (order.ContainsKey("item_id"))
db_order.num_iid = order["item_id"].ToString();
if (order.ContainsKey("item_price"))
db_order.price = double.Parse(order["item_price"].ToString());
#endregion
db_order.db_cpsname = ItemMember.username;
db_order.db_cpsnick = ItemMember.usernick;
#region 预付定金处理
if (order.ContainsKey("tb_deposit_time") && order["tb_deposit_time"].ToString() != "--")
{
if (order.ContainsKey("deposit_price") && double.Parse(order["deposit_price"].ToString()) != 0d)
{
var alipay_total_price = double.Parse(order["alipay_total_price"].ToString());
db_order.alipay_total_price = alipay_total_price;
if (order.ContainsKey("pub_share_pre_fee"))
db_order.pub_share_pre_fee = double.Parse(order["pub_share_pre_fee"].ToString());
fl_member_info member = null;
if (db_order.db_userid != 0)
member = session.FindMemberInfoById(db_order.db_userid);
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session.GetTbComparisonFeeRate(db_order);
//var itempoint = session.FindItemPoint(member, (db_order.commission == 0 ? db_order.pub_share_pre_fee : db_order.commission), db_order.item_num, CpsType.阿里妈妈);
if (db_order.id == 0)
session.Saveable(db_order);
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType.阿里妈妈, db_order.id);
ItemPoint itempoint = null;
if (compute != null)
itempoint = session.FindItemPoint(CpsType.阿里妈妈, compute, commission, db_order.item_num);
else
itempoint = session.FindItemPoint(member, commission, db_order.item_num, CpsType.阿里妈妈);
db_order.db_userpoint = itempoint.UserPoint;
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
session.SaveOrUpdate(db_order);
}
}
#endregion
}
db_order.tk_status = status;
if (string.IsNullOrWhiteSpace(db_order.seller_id))
{
if (order.ContainsKey("item_img"))
{
var reg = Regex.Match(order["item_img"].ToString(), @"i\d+?/(?<店铺Id>\d+?)/");
if (reg.Success)
db_order.seller_id = reg.Groups["店铺Id"].Value;
}
}
if (ItemMember != null)
{
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"数据:{HttpHelper.ObjectToJson(db_order)}
//原始:{HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
//System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
//watch.Start();//开始监视代码运行时间
if (db_order.tk_status == (int)AlimamaOrderStatus.订单成功)
{
if (order.ContainsKey("modified_time"))
{
if (!string.IsNullOrWhiteSpace(order["modified_time"]?.ToString()))
{
DateTime time;
if (DateTime.TryParse(order["modified_time"]?.ToString(), out time))
{
db_order.earning_time = time;
//session.SaveOrUpdate(db_order);
}
}
}
//db_order.tk_status = (int)AlimamaOrderStatus.订单结算;
}
UpdateOrder(db_order, notices, session);//..
//watch.Stop();//停止监视
//try
//{
//strb.AppendLine($@"
//耗时:{watch.Elapsed.TotalSeconds} 秒");
//LogHelper.GetSingleObj().Debug("淘宝订单: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"同步阿里妈妈订单出错:{ItemMember.username} - {ex.Message} - {ex.StackTrace}");
}
finally
{
//session.Close();
}
}
list.Clear();
list = null;
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"更新阿里妈妈订单异常3:{ItemMember.username} - {ex.Message} - {ex.StackTrace}");
if (ex.Message.Contains("已过期"))
{
ItemMember.logintime = DateTime.Now.AddDays(-30);//设置登录时间为过期,后面通知客户
throw ex;
}
}
}
}
#endregion
#endregion
private readonly object LockObj = new object();
///
/// 订单绑定逻辑
///
/// 阿里订单对象
/// 事件集合
/// 数据库操作对象
/// 阿里订单维权对象
///
public void UpdateOrder(fl_order_alimama db_order, List notice, SqlSugarClient session, fl_order_refund_alimama order_refund = null, bool isFrontData = false)
{
//维权中的订单,直接跳出
if (db_order.db_status == SystemOrderStatus.订单维权中)
return;
else
{
}
try
{
if (db_order.id != 0)
{
lock (LockObj)
{
if (!OrderDataIdDic.ContainsKey(db_order.id))
{
OrderDataIdDic[db_order.id] = db_order.id;
}
else
{
LogHelper.GetSingleObj().Error("订单重复进入", $"订单ID:{db_order.id}");
return;
}
}
}
fl_plugin_allrebatesactivity_orderlist allrebatesactivity_orderlist = null;
var old_status = db_order.db_status;
var status = Util.ConvertEnum(db_order.tk_status);
bool islotUserQuery = false;//订单是否为多人查询
// string old_md5 = Util.GetMd5_32byte(HttpHelper.ObjectToJson(db_order));
var isRewards = false;//是否获得推荐新人奖励
var isFirstOrder = false;//是否获得用户首单奖励
#region 私域绑定
if (db_order.db_userid == 0 && status == AlimamaOrderStatus.订单付款 && db_order.special_id != 0)
{
var tbAnalysis = new TBHelper.TbAnalysis();
var cps_member = CpsClient.Members.FirstOrDefault(f => f.username == db_order.db_cpsname && f.cpstype == CpsType.阿里妈妈);
if (cps_member != null)
{
//var api = CpsClient.CreateAlimamaRequest(cps_member);
//var external_id = tbAnalysis.FindTbPublisherInfoFirst(api, new { info_type = 2, relation_app = "common", special_id = db_order.special_id, external_type = 0 }, TBHelper.TbAnalysis.PublisherType.ExternalId);
//if (!string.IsNullOrWhiteSpace(external_id))
//{
// var memberInfo = session.FindMemberInfoByUsername(external_id);
// if (memberInfo != null)
// {
// db_order.db_robotname = memberInfo.robot_name;
// db_order.db_robottype = memberInfo.robot_type;
// db_order.db_userid = memberInfo.id;
// var relation = session.Queryable().First(f => f.cps_memberid == db_order.db_cpsname && f.special_id == db_order.special_id);
// if (relation == null)
// relation = new fl_tb_relation() { cps_memberid = db_order.db_cpsname, special_id = db_order.special_id };
// if (relation.username != external_id)
// {
// relation.username = external_id;
// session.Saveable(relation).ExecuteCommand();
// }
// }
//}
var relation = ApiClient.GetSession().FindTbRelations().FirstOrDefault(f => f.cps_memberid == db_order.db_cpsname && f.special_id == db_order.special_id);
if (relation != null && !string.IsNullOrWhiteSpace(relation.username))
{
var memberInfo = session.FindMemberInfoByUsername(relation.username);
if (memberInfo != null)
{
db_order.db_robotname = memberInfo.robot_name;
db_order.db_robottype = memberInfo.robot_type;
db_order.db_userid = memberInfo.id;
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id", new { userid = db_order.db_userid, itemid = db_order.num_iid, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
#region 绑定群号
if (string.IsNullOrWhiteSpace(db_order.msg_groupid))
db_order.msg_groupid = query_item.groupid;
#endregion
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
}
}
}
}
}
#endregion
#region 自动识别绑定
#region 缓存绑定
if (db_order.db_userid == 0 && status == AlimamaOrderStatus.订单付款)
{
var bind = session.FindBindCache(db_order.trade_parent_id);
if (bind != null)
{
var memberInfo = session.FindMemberInfoById(bind.db_userid);
if (memberInfo != null)
{
db_order.db_userid = memberInfo.id;
db_order.db_robotname = memberInfo.robot_name;
db_order.db_robottype = memberInfo.robot_type;
db_order.msg_groupid = bind.groupid;
session.SaveOrUpdate(memberInfo);
//session.SaveOrUpdate(db_order);
}
}
}
#endregion
if (db_order.db_userid == 0 && status == AlimamaOrderStatus.订单付款)
{
#region 淘宝返利推广位自动绑定
#region 私人推广位
var privateAdzonePids = session.FindAlimamaPrivatePid(db_order.adzone_id);//私人推广位对象
if (privateAdzonePids.Count == 1 && privateAdzonePids[0].is_auto_bind)//无条件设置开启中,直接自动绑定
{
var memberInfo = session.FindSingle("select * from fl_member_info where id = @id", new { id = privateAdzonePids[0].member_id });
if (memberInfo != null)
{
db_order.db_userid = memberInfo.id;
db_order.db_robotname = memberInfo.robot_name;
db_order.db_robottype = memberInfo.robot_type;
//session.SaveOrUpdate(db_order);
}
}
#endregion
else
{
var flag = false;
var ali_pid_list = session.FindAlimamaAutoBindPid();//淘宝返利设置的推广位集合
if (ali_pid_list != null)
{
flag = ali_pid_list.FirstOrDefault(f => f.adzone_pid.EndsWith("_" + db_order.adzone_id)) != null ? true : false;
if (!flag)
{
var groupList = session.FindAdzoneGroups(CpsType.阿里妈妈);
#region 淘宝推广位组
var groups = groupList.Where(f => string.IsNullOrWhiteSpace(f.remark));
ali_pid_list = ali_pid_list.Where(f => f.adzone_group != 0).ToList();
foreach (var item in ali_pid_list)
{
var group = groups.FirstOrDefault(f => f.id == item.adzone_group);
if (group != null)
{
List tuiguangweis = null;
try
{
tuiguangweis = HttpHelper.JsonToObject>(group.adzones) as List;
}
catch (Exception)
{
tuiguangweis = new List();
}
if (tuiguangweis != null)
flag = (null != tuiguangweis.FirstOrDefault(f => f.Pid.EndsWith("_" + db_order.adzone_id))) ? true : false;
if (flag) break;
}
}
#endregion
#region 强制推广位组
if (!flag)
{
groups = groupList.Where(f => f.remark == fl_alimama_activity_type.天猫精选.ToString());
ali_pid_list = ali_pid_list.Where(f => f.adzone_group != 0).ToList();
foreach (var item in ali_pid_list)
{
var group = groups.FirstOrDefault(f => f.id == item.adzone_group);
if (group != null)
{
List tuiguangweis = null;
try
{
tuiguangweis = HttpHelper.JsonToObject>(group.adzones) as List;
}
catch (Exception)
{
tuiguangweis = new List();
}
if (tuiguangweis != null)
flag = (null != tuiguangweis.FirstOrDefault(f => f.Pid.EndsWith("_" + db_order.adzone_id))) ? true : false;
if (flag) break;
}
}
}
#endregion
#region 全额返利推广位
var all_rebates_adzone = session.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.custom_type == Resources.TbAllRebatesSoftwareType && f.adzone_pid.EndsWith("_" + db_order.adzone_id));
if (all_rebates_adzone != null)
{
flag = (null != all_rebates_adzone.adzone_pid.EndsWith("_" + db_order.adzone_id)) ? true : false;
}
#endregion
}
}
if (!flag)
flag = privateAdzonePids.Select(f => f.adzone_pid).ToList().FirstOrDefault(f => f.EndsWith("_" + db_order.adzone_id)) != null ? true : false;//私人推广位
if (!flag)
flag = session.CheckIsTljOrder(db_order.adzone_id);//淘礼金推广位
#endregion
if (flag)
{
#region 新字符串绑定
if (ApiClient.Setting.SystemConfig.order_alimama_bind == SwitchType.开启)
{
if (db_order.num_iid.Contains("-"))
{
var split = db_order.num_iid.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
var itemIdB = split[1];
var query = session.FindTable("select userid,count(*) as count from fl_query_hist where userid != 0 and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time group by userid ", new { itemid = itemIdB, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query != null && query.Rows.Count > 0)
{
if (query.Rows.Count == 1)
{
var query_item = session.FindSingle("select * from fl_query_hist where itemid = @itemid and crt_time > @time order by id desc", new { itemid = itemIdB, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.db_robotname = query_item.robot_name;
db_order.db_robottype = query_item.robot_type;
db_order.msg_groupid = query_item.groupid;
db_order.db_userid = query_item.userid;
//session.SaveOrUpdate(db_order);
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
}
}
}
}
}
#endregion
//订单尾号自动绑定用户
if (db_order.db_userid == 0)
{
if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_bind == SwitchType.开启)
{
var lasts = session.FindAlimamaOrderLastnums().Where(f => db_order.trade_parent_id.EndsWith(f.lastnumber)).ToList();//通过订单尾号查询对应的用户
if (lasts != null && lasts.Count == 1)//订单尾号只对应一个用户,多个不处理
{
var memberInfo = session.FindMemberInfoById(lasts[0].userid);
if (memberInfo != null)
{
db_order.db_userid = memberInfo.id;
db_order.db_robotname = memberInfo.robot_name;
db_order.db_robottype = memberInfo.robot_type;
//session.SaveOrUpdate(db_order);
}
}
}
}
//订单没有绑定用户 查询订单记录
if (db_order.db_userid == 0)
{
var query = session.FindTable("select userid,count(*) as count from fl_query_hist where userid != 0 and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time group by userid ", new { itemid = db_order.num_iid, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query != null && query.Rows.Count > 0)
{
if (query.Rows.Count == 1)
{
if (ApiClient.Setting.SystemConfig.order_alimama_bind == SwitchType.开启)
{
var userid = int.Parse(query.Rows[0]["userid"].ToString());//要是查询记录已经标记为通知过的记录(userid 为 负数),将不通过查询记录进行绑定
if (userid > 0)
{
db_order.db_userid = userid;//根据查询记录认领
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = db_order.num_iid, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.msg_groupid = query_item.groupid;
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
#region 淘宝订单尾号自动采集
if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_capture == SwitchType.开启)
{
//订单尾号和用户进行绑定
if (session.FindAlimamaOrderLastnums().FirstOrDefault(f => f.userid == db_order.db_userid) == null)
{
session.Insertable(new fl_alimama_order_lastnum() { userid = db_order.db_userid, lastnumber = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6, 6) }).ExecuteCommand();
session.FindAlimamaOrderLastnums(true);
}
}
#endregion
}
}
}
}
else
{
if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_bind == SwitchType.开启)
{
var end_number = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6);
var lasts = session.FindAlimamaOrderLastnums().Where(f => end_number == f.lastnumber).ToList();
if (lasts.Count > 0)
{
//是否存在、尾号相同,并且查询过宝贝(优先识别)
Dictionary last_num = new Dictionary();
for (int i = 0; i < query.Rows.Count; i++)
{
var info = lasts.FirstOrDefault(f => f.userid == long.Parse(query.Rows[i]["userid"].ToString()));
if (info != null) last_num[info.userid] = info;
}
if (last_num.Count == 1)
{
var last_item = last_num.FirstOrDefault().Value;
db_order.db_userid = last_item.userid;
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and itemid = @itemid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = db_order.num_iid, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.db_robotname = query_item.robot_name;
db_order.db_robottype = query_item.robot_type;
db_order.msg_groupid = query_item.groupid;
//session.SaveOrUpdate(db_order);
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
}
}
else
{
//尾号相同、并且均查询过该宝贝
}
}
else
{
//未找到尾号相同订单
}
}
//订单多人查询,并且订单还未绑定
if (db_order.db_userid == 0)
islotUserQuery = true;
}
}
}
}
}
#region 绑定群号
if (string.IsNullOrWhiteSpace(db_order.msg_groupid))
{
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = db_order.num_iid, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.msg_groupid = query_item.groupid;
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
}
}
#endregion
}
#region 店铺绑定,最后的绑定判断(如果上面的绑定都没有成功,使用店铺绑定的方式进行绑定,如果多人在该店查询过其他商品将不进行绑定.只针对一个用户在该店铺查询过,将该商品的订单给绑定给用户)
if (db_order.db_userid == 0 && status == AlimamaOrderStatus.订单付款 && ApiClient.Setting.SystemConfig.order_alimama_same_shop_bind == SwitchType.开启 && !string.IsNullOrWhiteSpace(db_order.seller_id))
{
var query = session.FindTable("select userid,count(*) as count from fl_query_hist where userid != 0 and mallid = @mallid and adzoneid = @adzoneid and crt_time > @time group by userid ", new { mallid = db_order.seller_id, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query != null && query.Rows.Count > 0)
{
if (query.Rows.Count == 1)
{
if (ApiClient.Setting.SystemConfig.order_alimama_bind == SwitchType.开启)
{
var userid = int.Parse(query.Rows[0]["userid"].ToString());//要是查询记录已经标记为通知过的记录(userid 为 负数),将不通过查询记录进行绑定
if (userid > 0)
{
db_order.db_userid = userid;//根据查询记录认领
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and mallid = @mallid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, mallid = db_order.seller_id, adzoneid = db_order.adzone_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.msg_groupid = query_item.groupid;
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
//#region 淘宝订单尾号自动采集
//if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_capture == SwitchType.开启)
//{
// //订单尾号和用户进行绑定
// if (session.FindAlimamaOrderLastnums().FirstOrDefault(f => f.userid == db_order.db_userid) == null)
// {
// session.Insertable(new fl_alimama_order_lastnum() { userid = db_order.db_userid, lastnumber = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6, 6) }).ExecuteCommand();
// session.FindAlimamaOrderLastnums(true);
// }
//}
//#endregion
}
}
}
}
}
else
{
query = session.FindTable("select userid,count(*) as count from fl_query_hist where userid != 0 and mallid = @mallid and crt_time > @time group by userid ", new { mallid = db_order.seller_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query != null && query.Rows.Count > 0)
{
if (query.Rows.Count == 1)
{
if (ApiClient.Setting.SystemConfig.order_alimama_bind == SwitchType.开启)
{
var userid = int.Parse(query.Rows[0]["userid"].ToString());//要是查询记录已经标记为通知过的记录(userid 为 负数),将不通过查询记录进行绑定
if (userid > 0)
{
db_order.db_userid = userid;//根据查询记录认领
var query_item = session.FindSingle("select * from fl_query_hist where userid = @userid and mallid = @mallid and crt_time > @time order by id desc", new { userid = db_order.db_userid, mallid = db_order.seller_id, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
db_order.msg_groupid = query_item.groupid;
#region 获取查询时的比例
if (!string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
if (db_order.id == 0)
session.SaveOrUpdate(db_order);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = db_order.id,
createtime = DateTime.Now,
cpstype = CpsType.阿里妈妈
};
session.SaveOrUpdate(queryRatioHist);
}
#endregion
//#region 淘宝订单尾号自动采集
//if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_capture == SwitchType.开启)
//{
// //订单尾号和用户进行绑定
// if (session.FindAlimamaOrderLastnums().FirstOrDefault(f => f.userid == db_order.db_userid) == null)
// {
// session.Insertable(new fl_alimama_order_lastnum() { userid = db_order.db_userid, lastnumber = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6, 6) }).ExecuteCommand();
// session.FindAlimamaOrderLastnums(true);
// }
//}
//#endregion
}
}
}
}
}
}
}
#endregion
#endregion
if (db_order.tk_status == 12 && db_order.db_userid != 0)
{
try
{
var record = session.FindStatisticsRecord(db_order.db_userid);
if (record == null)
record = new fl_statistics_record() { uid = db_order.db_userid };
record.ex5 = HttpExtend.GetTimeStamp(db_order.paid_time);
session.Saveable(record).ExecuteCommand();
}
catch (Exception)
{ }
}
//查询积分比例
var member = db_order.db_userid != 0 ? session.FindMemberInfoById(db_order.db_userid) : null;
if (string.IsNullOrEmpty(db_order.db_robotname) && member != null)
{
db_order.db_robotname = member.robot_name;
db_order.db_robottype = member.robot_type;
}
#region 全额返利绑定 并且 将返利积分进行固定
var adzone = session.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType.阿里妈妈 && f.custom_type == Resources.TbAllRebatesSoftwareType && f.adzone_pid.EndsWith("_" + db_order.adzone_id));
if (adzone != null)
{
var allrebatesactivity_infos = session.Find("select * from fl_plugin_allrebatesactivity_info where goods_id = @goods_id", new { goods_id = db_order.num_iid });
if (allrebatesactivity_infos != null && allrebatesactivity_infos.Count != 0)
{
if (member != null)
{
var allrebatesactivity_info = allrebatesactivity_infos.FirstOrDefault(f => f.time_begin <= db_order.create_time && db_order.create_time <= f.time_end && f.groups.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(z => Convert.ToInt64(z.Trim())).ToList().Contains(member.group_id) && f.robots.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(z => z.Trim()).ToList().Contains(db_order.db_robotname));
if (allrebatesactivity_info != null)
{
//TODO这里还要判断已经成交的列表中是否存在订单数量
var allrebatesactivity_orderlists = session.Find("select * from fl_plugin_allrebatesactivity_orderlist where activity_id = @activity_id and mid = @mid", new { activity_id = allrebatesactivity_info.id, mid = member.id });
int purchased_quantity = 0;//已经购买的数量
if (allrebatesactivity_orderlists != null && allrebatesactivity_orderlists.Count != 0)
{
foreach (var item in allrebatesactivity_orderlists)
{
var order_alimama = session.FindSingle("select * from fl_order_alimama where id = @id", new { id = item.oid });
if (order_alimama != null)
{
if (order_alimama.db_status == SystemOrderStatus.订单结算 || order_alimama.db_status == SystemOrderStatus.全额退款 || order_alimama.db_status == SystemOrderStatus.部分退款 || order_alimama.db_status == SystemOrderStatus.订单付款 || order_alimama.db_status == SystemOrderStatus.订单冻结 || order_alimama.db_status == SystemOrderStatus.订单退款 || order_alimama.db_status == SystemOrderStatus.订单维权中)
{
purchased_quantity += order_alimama.item_num;
}
}
}
}
if (allrebatesactivity_info.limit_quantity_number >= (db_order.item_num + purchased_quantity))
{
if (string.IsNullOrEmpty(db_order.db_point))
{
var return_money = (double)((decimal)allrebatesactivity_info.return_money * (decimal)db_order.item_num);
var point = @"{""Type"":0,""Commission"":0,""SumPoint"":" + db_order.pub_share_pre_fee + @",""UserPoint"":" + return_money + @",""AwardOne"":0,""AwardTwo"":0,""AwardThree"":0,""AwardCreate"":0}";
db_order.db_point = point;
db_order.db_userpoint = return_money;
}
var robot = session.FindRobots().FirstOrDefault(f => db_order.db_robottype == f.type && f.name == db_order.db_robotname);
if (robot != null)
{
allrebatesactivity_orderlist = new fl_plugin_allrebatesactivity_orderlist()
{
activity_id = allrebatesactivity_info.id,
mid = member.id,
rid = robot.id,
oid = db_order.id
};
}
}
}
}
}
}
#endregion
if (string.IsNullOrEmpty(db_order.db_point))
{
#region 判断是否为淘礼金订单,如果是淘礼金订单将不给这个订单返利
var isTljOrder = session.CheckIsTljOrder(db_order.adzone_id);
#endregion
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session.GetTbComparisonFeeRate(db_order);
if (db_order.id == 0)
session.Saveable(db_order);
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType.阿里妈妈, db_order.id);
ItemPoint itempoint = null;
if (compute != null)
itempoint = session.FindItemPoint(CpsType.阿里妈妈, compute, isTljOrder ? 0 : commission, db_order.item_num);
else
itempoint = session.FindItemPoint(member, isTljOrder ? 0 : commission, db_order.item_num, CpsType.阿里妈妈);
if (itempoint != null)
{
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
db_order.db_userpoint = itempoint.UserPoint;
}
if (member != null)
{
member.bind_order++;
member = session.UpdateMemberGroup(member);
}
}
switch (status)
{
case AlimamaOrderStatus.订单成功:
case AlimamaOrderStatus.订单结算:
{
if (status == AlimamaOrderStatus.订单成功)
db_order.tk_status = (int)AlimamaOrderStatus.订单结算;
//进入冻结逻辑
if (db_order.db_endtime == DateTime.MinValue)
{
db_order.db_status = SystemOrderStatus.订单冻结;
if (db_order.alipay_total_price != db_order.pay_price)
{
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session.GetTbComparisonFeeRate(db_order);
if (db_order.id == 0)
session.Saveable(db_order);
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType.阿里妈妈, db_order.id);
ItemPoint itempointTemp = null;
if (compute != null)
itempointTemp = session.FindItemPoint(CpsType.阿里妈妈, compute, commission, db_order.item_num);
else
itempointTemp = session.FindItemPoint(member, commission, db_order.item_num, CpsType.阿里妈妈);
db_order.db_point = HttpHelper.ObjectToJson(itempointTemp);
db_order.db_userpoint = itempointTemp.UserPoint;
}
var sleep = session.FindSleep(CpsType.阿里妈妈, ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType.商品总佣金 ? (db_order.commission == 0 ? db_order.pub_share_pre_fee : db_order.commission) : db_order.db_userpoint);//通过返佣获取订单冻结规则
if (sleep != null)
{
if (!string.IsNullOrEmpty(sleep.white_groups))
{
if (member != null && sleep.white_groups.Split(',').Contains(member.group_id.ToString()))
db_order.db_endtime = DateTime.Now;//该会员组不受限制
else
db_order.db_endtime = DateTime.Now.AddHours(sleep.sleep);//延迟多少小时
}
else db_order.db_endtime = DateTime.Now.AddHours(sleep.sleep);//延迟多少小时
}
else db_order.db_endtime = DateTime.Now;
#region 验证订单是否为24小时
if (db_order.earning_time != DateTime.MinValue)
{
var config = Util.Read>("插件-淘宝返利-配置");
if (config != null)
{
if (config.ContainsKey("ReceivingTimeCheck_Switch"))
{
var ReceivingTimeCheck_Switch = (bool)config["ReceivingTimeCheck_Switch"];
if (ReceivingTimeCheck_Switch)
{
if (config.ContainsKey("ReceivingTimeCheck_Hour"))
{
//var ss = config["ReceivingTimeCheck_Hour"];
var ReceivingTimeCheck_Hour = int.Parse(config["ReceivingTimeCheck_Hour"].ToString());
if ((db_order.earning_time - db_order.create_time).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());
db_order.db_endtime = db_order.db_endtime.AddHours(ReceivingTimeCheck_FreezeTime);//延迟多少小时
}
}
}
}
}
}
}
}
}
#endregion
}
//已经传递了参数~ 这里就不要强制读数据库
if (db_order.db_endtime <= DateTime.Now)
{
db_order.db_status = SystemOrderStatus.订单结算;
if (db_order.auction_category != "手动处理")
{
if (order_refund == null)
order_refund = session.FindSingle("select * from fl_order_refund_alimama where tbtradeparentid = @tbtradeparentid and tbtradeid = @tbtradeid", new { tbtradeparentid = db_order.trade_parent_id, tbtradeid = db_order.trade_id });
if (order_refund != null)
{
var showRefundStatus = (OrderRefundStatus)Enum.Parse(typeof(OrderRefundStatus), order_refund.showrefundstatus); //将阿里返回的订单状态转成枚举
switch (showRefundStatus)
{
case OrderRefundStatus.维权成功_佣金补扣成功:
case OrderRefundStatus.维权成功_等待补扣佣金:
case OrderRefundStatus.维权成功:
{
//维权成功,更新退款金额
if (order_refund.refundfee == db_order.alipay_total_price)
{
db_order.db_status = SystemOrderStatus.全额退款;
db_order.db_endtime = DateTime.Now;
}
else
{
//var commission = db_order.commission;//临时的佣金额度
//if (db_order.commission == 0)
// commission = db_order.pub_share_pre_fee;
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session.GetTbComparisonFeeRate(db_order);
db_order.commission = (double)((decimal)commission - (decimal)order_refund.showreturnfee);//付款金额与退款金额一致 说明退了全额;不一致那么只退了一部分,佣金需要重新计算
//上面重新计算了一下佣金
commission = session.GetTbComparisonFeeRate(db_order);
if (db_order.id == 0)
session.Saveable(db_order);
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType.阿里妈妈, db_order.id);
ItemPoint itempoint = null;
if (compute != null)
itempoint = session.FindItemPoint(CpsType.阿里妈妈, compute, commission, db_order.item_num);
else
itempoint = session.FindItemPoint(member, db_order.commission, db_order.item_num, CpsType.阿里妈妈);
if (itempoint != null)
{
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
db_order.db_userpoint = itempoint.UserPoint;
}
db_order.db_status = SystemOrderStatus.部分退款;
db_order.db_endtime = DateTime.Now;
}
}
break;
case OrderRefundStatus.维权失败_卖家佣金返还成功:
case OrderRefundStatus.维权失败_等待卖家返还佣金:
case OrderRefundStatus.维权失败:
//维权失败,继续结算
break;
case OrderRefundStatus.等待处理:
break;
default:
return;//维权未结束不予结算
}
}
}
if (member != null && db_order.db_status != SystemOrderStatus.全额退款)
{
var point = HttpHelper.JsonToObject(db_order.db_point) as ItemPoint;
if (point != null)
{
if (point.UserPoint == 0)
{
point.UserPoint = 0.01;
db_order.db_point = HttpHelper.ObjectToJson(point);
db_order.db_userpoint = point.UserPoint;
}
#region 获取是否已经结算给客户
var pointHists = session.Find("select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message", new { uid = member.id, pointType_name = PointType.消费补贴.ToString(), message = $"淘宝购买:{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})" });
if (pointHists != null && pointHists.Count != 0)
{
pointHists = session.Find("select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message", new { uid = member.id, pointType_name = PointType.维权扣除.ToString(), message = $"退款:{db_order.item_title}({db_order.trade_parent_id})({db_order.trade_id})" });
if (pointHists != null && pointHists.Count != 0)
{
LogHelper.GetSingleObj().Debug("维权扣除过的订单", $@"{JsonConvert.SerializeObject(db_order)}
维权?:{(order_refund != null ? JsonConvert.SerializeObject(order_refund) : string.Empty)}
维权扣除积分的次数:{pointHists.Count}");
}
else
{
session.SaveOrUpdate(db_order);
return;
}
}
#endregion
///fl_order_alimama db_order, List notice, SqlSugarClient session, fl_order_refund_alimama order_refund = null, bool isFrontData = false
//LogHelper.GetSingleObj().Debug("订单AAAAAAA结算", $"阿里订单 ___ {JsonConvert.SerializeObject(db_order)} , notice = {notice.Count} , order_refund = null ? {order_refund = null} , isFrontData = {isFrontData}");
//用户自身加积分
member = session.ChangePoint(PointType.消费补贴, point.UserPoint, member.id, $"淘宝购买:{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})");
#region 判断用户是否符合获得新人奖励
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status);
#endregion
List ids = new List();
ids.Add(member.id);
//多级提成计算..用户自己的上级不能为自己
//一级的提成小于等于0时,并且判断一级是否符合获得推荐新人奖励(无奖励一级提成)
if (point.AwardOne <= 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
if (notice != null)
{
var inviter = session.FindMemberInfoById(member.inviter_id);
if (inviter != null)
{
#region 判断上级是否符合获得推荐新人奖励
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.alipay_total_price);
#endregion
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, inviter, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });//下级首单完成
}
}
}
else if (point.AwardOne > 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
var flag = session.ChangePoint(PointType.提成奖励, point.AwardOne, member.inviter_id, $"{member.usernick},淘宝购物1级提成!{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})");
if (flag != null)
{
ids.Add(flag.id);
if (notice != null)
{
#region 判断上级是否符合获得推荐新人奖励
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.alipay_total_price);
#endregion
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, flag, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });//下级首单完成
}
if (point.AwardTwo > 0 && flag.inviter_id != 0 && !ids.Contains(flag.inviter_id))
{
var flag2 = session.ChangePoint(PointType.提成奖励, point.AwardTwo, flag.inviter_id, $"{member.usernick},淘宝购物2级提成!{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})");
if (flag2 != null)
{
ids.Add(flag2.id);
if (notice != null && flag2 != null)
{
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, flag2, db_order, OrderNoticeType.二级提成) { Customer = member });
if (point.AwardThree > 0 && flag2.inviter_id != 0 && !ids.Contains(flag2.inviter_id))
{
var flag3 = session.ChangePoint(PointType.提成奖励, point.AwardThree, flag2.inviter_id, $"{member.usernick},淘宝购物3级提成!{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})");
if (flag3 != null)
{
ids.Add(flag3.id);
if (notice != null && flag3 != null) notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, flag3, db_order, OrderNoticeType.三级提成) { Customer = member });
}
}
}
}
}
}
}
//创建人计算
if (point.AwardCreate > 0 && !string.IsNullOrEmpty(db_order.msg_groupid) && !string.IsNullOrEmpty(db_order.db_robotname))
{
var create = session.FindCreateInfo(db_order.msg_groupid, db_order.db_robottype);
if (create != null && member.id != create.id)
{
var flag = session.ChangePoint(PointType.提成奖励, point.AwardCreate, create.mid, $"{member.usernick},淘宝维护提成!{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})");
if (notice != null && flag != null) notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, flag, db_order, OrderNoticeType.群主分成) { Customer = member });
}
}
}
Thread.Sleep(40);
}
else
{
//提示查询该宝贝的人所有人
if (islotUserQuery)
{
notice.Add(new Events.OrderNoticeEvent(CpsType.阿里妈妈, null, db_order));
}
}
}
else
{
db_order.db_status = SystemOrderStatus.订单冻结;
}
}
break;
case AlimamaOrderStatus.订单维权中:
db_order.db_status = SystemOrderStatus.订单维权中;
break;
case AlimamaOrderStatus.订单付款:
{
db_order.db_status = SystemOrderStatus.订单付款;
}
break;
case AlimamaOrderStatus.订单失效:
db_order.db_status = SystemOrderStatus.订单失效;
break;
default:
break;
}
#region 通知客户订单付款/失效 提示上级
if (member != null && (db_order.db_status == SystemOrderStatus.订单付款 || db_order.db_status == SystemOrderStatus.订单失效))
{
var point = HttpHelper.JsonToObject(db_order.db_point) as ItemPoint;
if (point != null)
{
List ids = new List();
ids.Add(member.id);
if (point.UserPoint == 0 && ApiClient.Setting.SystemConfig.SubsidyTb == SwitchType.开启)
{
point.UserPoint = 0.01;
db_order.db_point = HttpHelper.ObjectToJson(point);
db_order.db_userpoint = point.UserPoint;
}
if (point.AwardOne > 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
//一级用户对象
var member_one = session.FindMemberInfoById(member.inviter_id);
if (member_one != null)
{
ids.Add(member_one.id);
if (notice != null)
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, member_one, db_order, OrderNoticeType.一级提成) { Customer = member });
if (point.AwardTwo > 0 && member_one.inviter_id != 0 && !ids.Contains(member_one.inviter_id))
{
//二级用户对象
var member_two = session.FindMemberInfoById(member_one.inviter_id);
if (member_two != null)
{
ids.Add(member_two.id);
if (member_two != null)
{
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, member_two, db_order, OrderNoticeType.二级提成) { Customer = member });
if (point.AwardThree > 0 && member_two.inviter_id != 0 && !ids.Contains(member_two.inviter_id))
{
//三级用户对象
var member_three = session.FindMemberInfoById(member_two.inviter_id);
if (member_three != null)
{
ids.Add(member_three.id);
if (member_three != null)
notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, member_three, db_order, OrderNoticeType.三级提成) { Customer = member });
}
}
}
}
}
}
}
//创建人计算
if (point.AwardCreate > 0 && !string.IsNullOrEmpty(db_order.msg_groupid) && !string.IsNullOrEmpty(db_order.db_robotname))
{
var create = session.FindCreateInfo(db_order.msg_groupid, db_order.db_robottype);
if (create != null && member.id != create.id)
{
var member_create = session.FindMemberInfoById(create.mid);
if (notice != null && member_create != null) notice.Add(new OrderNoticeEvent(CpsType.阿里妈妈, member_create, db_order, OrderNoticeType.群主分成) { Customer = member });
}
}
}
}
#endregion
//string new_md5 = Util.GetMd5_32byte(HttpHelper.ObjectToJson(db_order));
if (old_status != db_order.db_status)
db_order.db_status_time = HttpExtend.GetTimeStamp();
session.SaveOrUpdate(db_order);
if (db_order.db_status == SystemOrderStatus.订单付款)
{
#region 判断用户是否符合获得新人奖励
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status);
#endregion
}
if (allrebatesactivity_orderlist != null)
{
allrebatesactivity_orderlist.oid = db_order.id;
session.Saveable(allrebatesactivity_orderlist).ExecuteCommand();
}
//if ((notice != null && old_status != db_order.db_status && order_id != db_order.trade_parent_id && member != null) || (notice != null && old_status != db_order.db_status && order_id != db_order.trade_parent_id && islotUserQuery && member == null))
if (notice != null && (isFrontData || old_status != db_order.db_status) && order_id != db_order.trade_parent_id && ((islotUserQuery && member == null) || member != null))
{
notice.Add(new Events.OrderNoticeEvent(CpsType.阿里妈妈, member, db_order) { IsRewards = isFirstOrder });
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新阿里妈妈订单异常1:" + db_order.db_cpsname + " - " + db_order.trade_parent_id + "," + ex.Message + "," + ex.StackTrace);
}
}
#region 手动发送订单号,只更新短时间的付款订单
///
/// 如果该订单后为空时,只同步付款订单
///
private string order_id = string.Empty;
///
/// 通过订单号更新订单状态
///
/// 开始时间
/// 结束时间
/// 订单号
///
internal bool UpdateOrder(DateTime start_time, DateTime end_time, string order_id = "")
{
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
this.order_id = order_id;
var members = CpsClient.Members.Where(f => f.cpstype == CpsType.阿里妈妈 && f.is_download == SwitchType.开启 && f.logintime.AddDays(30).AddHours(-5) >= DateTime.Now).ToArray();
UpdateOrder(members, start_time, end_time);
return true;
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新阿里妈妈订单异常5:" + ex.Message);
return false;
}
finally
{
this.order_id = string.Empty;
IsRunning = false;
}
}
#endregion
///
/// 通过订单ID查询该订单是否维权
///
/// 数据库操作对象
/// 父订单号
/// 子订单号
///
private int FindRefundAlimamaCount(SqlSugarClient session, string tbtradeparentid, string tbtradeid)
{
try
{
var value = session.FindRow(@"select count(*) as num from fl_order_alimama ali inner join fl_order_refund_alimama rali on ali.trade_id = rali.tbtradeid and ali.trade_parent_id = rali.tbtradeparentid where rali.tbtradeid = @tbtradeid and rali.tbtradeparentid = @tbtradeparentid", new { tbtradeid = tbtradeid, tbtradeparentid = tbtradeparentid });
return int.Parse(value["num"].ToString());
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新阿里妈妈订单异常6:" + ex.Message);
}
return 0;
}
private static DateTime invalidnotice_time = DateTime.MinValue;//阿里妈妈账号无效通知时间
private static DateTime invalidnotice_time2 = DateTime.MinValue;//阿里妈妈账号日志无效时间
///
/// 无效的阿里妈妈账号通知
///
/// 阿里妈妈集合(为筛选的集合)
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}");
}
}
}
}