old_flsystem/类库/Api.Framework/Timers/DownAlimamaTimer.cs

2443 lines
147 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================
// 创建人:千年老妖
// 本页代码,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。
//==============================================================
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
{
/// <summary>
/// 阿里订单下载定时器
/// </summary>
public class DownAlimamaTimer : TimerTask
{
/// <summary>
/// 是否在运行
/// </summary>
private static bool isRun = false;
/// <summary>
/// 记录三个月中最早付款的时间
/// </summary>
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<fl_order_alimama>("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<fl_order_alimama>("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);
});
}
}
}
}
/// <summary>
/// ....
/// </summary>
private Dictionary<long, long> OrderDataIdDic = new Dictionary<long, long>();
private DateTime update_time = DateTime.Now.AddMinutes(-60);
private int number;
public override void Run(object state, bool timedOut)
{
try
{
OrderDataIdDic = new Dictionary<long, long>();
//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<string>(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<long, long>();
}
}
/// <summary>
/// 通过cps获取AlimamaApi
/// </summary>
/// <param name="cps">cps对象</param>
/// <returns></returns>
public AlimamaApi GetAlimamaApi(fl_cps_member cps)
{
try
{
return new AlimamaApi(cps);
}
catch (Exception)
{ }
return null;
}
#region 退
private bool IsRun = false;
/// <summary>
/// 爬虫更新阿里妈妈订单 - 下载维权退款订单
/// </summary>
/// <param name="api">AlimamaApi对象</param>
/// <param name="startTime">开始时间</param>
/// <param name="maxPage">最大的页数</param>
public void UpdateOrder(AlimamaApi api, DateTime startTime, int maxPage = 999999)
{
#region
if (IsRun) return;
try
{
IsRun = true;
int toPage = 1;
List<Dictionary<string, object>> result = null;
var pageSize = 1000;
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
do
{
result = api.SerchOrder(OrderType.退, 0, "", pageSize, startTime, toPage);//获取淘宝联盟的订单
var session = ApiClient.GetSession();
foreach (Dictionary<string, object> item in result)
{
var order = session.FindSingle<fl_order_alimama>("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<fl_order_refund_alimama>("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<fl_point_hist>("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<fl_order_alimama>("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
/// <summary>
/// 同步订单
/// </summary>
/// <param name="_members">同步账号时间</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 (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<OrderNoticeEvent> 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<fl_order_alimama>("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);
}
/// <summary>
/// 手动同步指定阿里妈妈订单状态
/// </summary>
/// <param name="members">要同步的阿里妈妈</param>
/// <param name="start_time">同步的时间</param>
/// <param name="end_time">同步结束的时间</param>
/// <param name="status">订单的状态</param>
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<OrderNoticeEvent> 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);
}
/// <summary>
/// 创建阿里妈妈订单同步任务
/// </summary>阿里妈妈联盟</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, "更新阿里妈妈订单异常4:" + ex.Message);
}
finally
{
IsRunning = false;
}
}
//private static readonly int row_count = 19;//阿里妈妈更新间隔间隔
#region
/// <summary>
/// 设置同步的时间间隔
/// </summary>
/// <param name="interval"></param>
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)
{ }
}
/// <summary>
/// 获取同步的时间间隔
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 判断缓存是否存在
/// </summary>
/// <returns></returns>
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<OrderNoticeEvent> 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<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
//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
/// <summary>
/// 事件通知
/// </summary>
/// <param name="_notices"></param>
private void OrderNotices(List<OrderNoticeEvent> _notices)
{
var notices = _notices;
if (notices != null && notices.Count != 0)
{
var tasks = TimerTask.GetTimer<Update_NoticeQueue>() 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
/// <summary>
/// 下载阿里订单
/// </summary>
/// <param name="_order_type"></param>
/// <param name="_start_time"></param>
/// <param name="_api"></param>
/// <param name="notices"></param>
/// <param name="_ItemMember"></param>
/// <param name="_tk_status"></param>
internal void UpdateOrder(AlimamaOrderType _order_type, DateTime _start_time, AlimamaApi _api, List<OrderNoticeEvent> 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<int>() { 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<string, object> 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<fl_adzone_info>();
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<fl_order_alimama>().Where(f => f.trade_id == order["trade_id"].ToString() && f.trade_parent_id == order["trade_parent_id"].ToString()).First();
var db_order = session.FindSingle<fl_order_alimama>("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<fl_member_info>("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<fl_order_alimama>();
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();
/// <summary>
/// 订单绑定逻辑
/// </summary>
/// <param name="db_order">阿里订单对象</param>
/// <param name="notice">事件集合</param>
/// <param name="session">数据库操作对象</param>
/// <param name="order_refund">阿里订单维权对象</param>
/// <param name="isFrontData"></param>
public void UpdateOrder(fl_order_alimama db_order, List<OrderNoticeEvent> 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<AlimamaOrderStatus>(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<fl_tb_relation>().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<fl_query_hist>("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<fl_member_info>("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<Tuiguangwei> tuiguangweis = null;
try
{
tuiguangweis = HttpHelper.JsonToObject<List<Tuiguangwei>>(group.adzones) as List<Tuiguangwei>;
}
catch (Exception)
{
tuiguangweis = new List<Tuiguangwei>();
}
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<TuiguangweiActivity> tuiguangweis = null;
try
{
tuiguangweis = HttpHelper.JsonToObject<List<TuiguangweiActivity>>(group.adzones) as List<TuiguangweiActivity>;
}
catch (Exception)
{
tuiguangweis = new List<TuiguangweiActivity>();
}
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<fl_query_hist>("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<fl_query_hist>("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<long, fl_alimama_order_lastnum> last_num = new Dictionary<long, fl_alimama_order_lastnum>();
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<fl_query_hist>("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<fl_query_hist>("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<fl_query_hist>("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<fl_query_hist>("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<fl_plugin_allrebatesactivity_info>("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<fl_plugin_allrebatesactivity_orderlist>("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<fl_order_alimama>("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<Dictionary<string, object>>("插件-淘宝返利-配置");
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<fl_order_refund_alimama>("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<ItemPoint>(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<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 = $"淘宝购买:{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})" });
if (pointHists != null && pointHists.Count != 0)
{
pointHists = session.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 = $"退款:{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<OrderNoticeEvent> 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<long> ids = new List<long>();
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<ItemPoint>(db_order.db_point) as ItemPoint;
if (point != null)
{
List<long> ids = new List<long>();
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 ,
/// <summary>
/// 如果该订单后为空时,只同步付款订单
/// </summary>
private string order_id = string.Empty;
/// <summary>
/// 通过订单号更新订单状态
/// </summary>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
/// <param name="order_id">订单号</param>
/// <returns></returns>
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
/// <summary>
/// 通过订单ID查询该订单是否维权
/// </summary>
/// <param name="session">数据库操作对象</param>
/// <param name="tbtradeparentid">父订单号</param>
/// <param name="tbtradeid">子订单号</param>
/// <returns></returns>
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;//阿里妈妈账号日志无效时间
/// <summary>
/// 无效的阿里妈妈账号通知
/// </summary>
/// <param name="_members">阿里妈妈集合(为筛选的集合)</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}");
}
}
}
}