2452 lines
148 KiB
C#
2452 lines
148 KiB
C#
//=============================================================
|
||
// 创建人:千年老妖
|
||
// 本页代码,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。
|
||
//==============================================================
|
||
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(90).AddHours(-2) >= 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(90).AddHours(-2) <= 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(90).AddHours(-2) >= 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.AddDays(90).AddHours(-2) > DateTime.Now);
|
||
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() == "3005578008913950205")
|
||
//{
|
||
|
||
//}
|
||
//else if (order["trade_parent_id"].ToString() == "3006644114425243017")
|
||
//{
|
||
|
||
//}
|
||
//else if (order["trade_parent_id"].ToString() == "3010261971527788109")
|
||
//{
|
||
|
||
//}
|
||
|
||
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 && (db_order.order_type != "饿了么" && db_order.order_type != "聚划算")) 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 != "饿了么" && 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(-90);//设置登录时间为过期,后面通知客户
|
||
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
|
||
{
|
||
var itemIdB = ApiClient.GetValidItemId(db_order.num_iid);
|
||
|
||
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 = itemIdB, 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 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_items = session.Find<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_items != null && query_items.Count == 1)
|
||
{
|
||
var query_item = query_items[0];
|
||
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 = 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)
|
||
{
|
||
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 = itemIdB, 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 = 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;
|
||
//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 = itemIdB, 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 = itemIdB });
|
||
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(90).AddHours(-2) >= 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}");
|
||
}
|
||
}
|
||
}
|
||
}
|