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

920 lines
54 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.EntityTmp.SuNing3;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Tools;
using Api.Framework.Utils;
using CsharpHttpHelper;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace Api.Framework.Timers
{
/// <summary>
/// 苏宁订单同步
/// </summary>
public class DownSuningTimer : TimerTask
{
private DateTime update_time = DateTime.Now.AddMinutes(-120);
public override void Run(object state, bool timedOut)
{
var end_time = DateTime.Now;
UpdateOrder(CpsClient.Members.Where(f => f.cpstype == CpsType. && f.is_download == SwitchType.).ToArray(), update_time, end_time);
update_time = DateTime.Now.AddMinutes(-70);
}
/// <summary>
/// 订单id
/// </summary>
private string order_id = string.Empty;
private object lock_obj = new object();
/// <summary>
/// 手动同步订单
/// </summary>
/// <param name="member">苏宁cps对象集合</param>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
public void UpdateOrder(List<fl_cps_member> members, DateTime start_time, DateTime end_time)
{
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
UpdateOrder(members.ToArray(), start_time, end_time);
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新苏宁订单异常:" + ex.Message);
}
finally
{
IsRunning = false;
}
}
/// <summary>
/// 更新订单
/// </summary>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
/// <param name="order_id">订单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.).ToArray();
UnValidCpsMember(members);
UpdateOrder(members, start_time, end_time);
return true;
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新苏宁异常:" + ex.Message);
return false;
}
finally
{
this.order_id = string.Empty;
IsRunning = false;
}
}
//private static string custom_parameters_regex = @"^robot=(?<机器人名>.*?)\stype=(?<类型>\d+)\suser=(?<会员名>.+?)(?:\smallid=(?<店铺ID>\d+)?)?$";
private static string custom_parameters_regex = @"^pid=(?<pid>.+?)\sr=(?<机器人名>.*?)\st=(?<类型>\d*)\su=(?<会员名>[^\s]*)\smid=(?<店铺ID>[^\s]*)\sgid=(?<商品ID>[^\s]*)\sg=(?<群ID>.*)$";
/// <summary>
/// 订单 修改状态/用户绑定等操作通知用户
/// </summary>
/// <param name="db_order">苏宁订单对象</param>
/// <param name="session">数据库操作对象</param>
/// <param name="notice">事件集合</param>
/// <param name="isFrontData"></param>
public void UpdateOrder(fl_order_suning db_order, SqlSugarClient session, List<OrderNoticeEvent> notice, bool isFrontData = false)
{
try
{
var old_status = db_order.db_status;
fl_member_info member = null;
var isRewards = false;//是否获得推荐新人奖励
var isFirstOrder = false;//是否获得用户首单奖励
var islotUserQuery = false;//订单是否为多人查询
//订单自动绑定
if (db_order.db_userid == 0 && ApiClient.Setting.SystemConfig.order_suning_bind == SwitchType.)
{
var isbind = false;
#region
if (!string.IsNullOrWhiteSpace(db_order.childAccountId))
{
var custom = Util.DecryptDES(db_order.childAccountId);
var reg = Regex.Match(custom, custom_parameters_regex);
if (reg.Success)
{
var pid = reg.Groups["pid"].Value;//推广位pid
var rwxid = reg.Groups["机器人名"].Value;//机器人xiid
var rtype = reg.Groups["类型"].Value;//机器人类型
var uwxid = reg.Groups["会员名"].Value;//用户wxid
var mallid = reg.Groups["店铺ID"].Value;//店铺id
var gid = reg.Groups["商品ID"].Value;//商品id
var groupid = reg.Groups["群ID"].Value;//商品id
db_order.mallId = mallid;
db_order.pid = pid;
//私人推广位强制绑定绑定
var privateAdzonePids = session.FindSuningPrivatePid(pid);
if (privateAdzonePids.Count == 1 && privateAdzonePids[0].is_auto_bind)//无条件设置开启中,直接自动绑定
{
var memberInfo = session.FindMemberInfoById(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;
isbind = true;
#region
var query_item = session.FindSingle<fl_query_hist>("userid=@userid and itemid=@itemid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = gid, adzoneid = pid, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null && !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
}
}
if (!isbind)
{
var bind_pids = session.FindSuningAutoBindPid();
bool flag = bind_pids.FirstOrDefault(f => f == pid) != null ? true : false;
#endregion
if (flag)
{
#region custom_parameters参数
member = session.FindSingle<fl_member_info>("username=@username and robot_type=@robot_type", new { username = uwxid, robot_type = rtype });
if (member == null)
{
member = new fl_member_info() { robot_type = Util.ConvertEnum<ChatType>(int.Parse(rtype)), username = uwxid, robot_name = rwxid, alipay_name = string.Empty, alipay_num = string.Empty, remark = string.Empty };
var groups = session.FindGroups();
if (groups.Count != 0)
member.group_id = groups[0].id;
session.SaveOrUpdate(member);
}
db_order.db_userid = member.id;
if (string.IsNullOrEmpty(db_order.db_robotname))
{
db_order.db_robotname = rwxid;
db_order.db_robottype = Util.ConvertEnum<ChatType>(int.Parse(rtype));
}
//绑定群号
db_order.msg_groupid = groupid;
#endregion
#region custom_parameters参数,
//else
{
//订单没有绑定用户 查询订单记录
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 = gid, adzoneid = pid, 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 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 = gid, adzoneid = pid, 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
}
}
}
else
{
//订单多人查询,并且订单还未绑定
if (db_order.db_userid == 0)
islotUserQuery = true;
}
}
}
}
#endregion
}
}
}
}
}
else
{
member = session.Find<fl_member_info>("id=@id", new { id = db_order.db_userid }).FirstOrDefault();
}
if ((db_order.orderLineStatusDesc == SuNingSubOrderStatus..ToString()) && 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.payTime);
session.Saveable(record).ExecuteCommand();
}
catch (Exception)
{ }
}
//计算积分
if (string.IsNullOrEmpty(db_order.db_point))
{
if (member == null) member = session.Find<fl_member_info>("id=@id", new { id = db_order.db_userid }).FirstOrDefault();
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType., db_order.id);
ItemPoint itempoint = null;
if (compute != null)
itempoint = session.FindItemPoint(CpsType., compute, double.Parse(db_order.prePayCommission), int.Parse(db_order.saleNum));
else
itempoint = session.FindItemPoint(member, double.Parse(db_order.prePayCommission), int.Parse(db_order.saleNum), CpsType.);
if (itempoint != null)
{
if (itempoint.UserPoint == 0 && ApiClient.Setting.SystemConfig.SubsidyPdd == SwitchType.)
itempoint.UserPoint = 0.01;
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
db_order.db_userpoint = itempoint.UserPoint;
}
if (member != null)
{
member.bind_order++;
member = session.UpdateMemberGroup(member);
}
}
if (member != null && string.IsNullOrWhiteSpace(db_order.db_robotname))
{
db_order.db_robotname = member.robot_name;
db_order.db_robottype = member.robot_type;
}
var status = Util.ConvertEnum<SuNingSubOrderStatus>(db_order.orderLineStatusDesc);
switch (status)
{
case SuNingSubOrderStatus.:
{
//未发放佣金
if (db_order.db_endtime == DateTime.MinValue)
{
var sleep = session.FindSleep(CpsType., ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType. ? double.Parse(db_order.prePayCommission) : 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
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 ReceivingTimeCheck_Hour = int.Parse(config["ReceivingTimeCheck_Hour"].ToString());
if ((DateTime.Now - db_order.payTime).TotalHours <= ReceivingTimeCheck_Hour)//判断订单收货时间差
{
if (config.ContainsKey("ReceivingTimeCheck_OperateType"))
{
var ReceivingTimeCheck_OperateType = (OperateType)int.Parse(config["ReceivingTimeCheck_OperateType"].ToString());
if (ReceivingTimeCheck_OperateType == OperateType.)
{
if (config.ContainsKey("ReceivingTimeCheck_FreezeTime"))
{
var ReceivingTimeCheck_FreezeTime = int.Parse(config["ReceivingTimeCheck_FreezeTime"].ToString());
db_order.db_endtime = db_order.db_endtime.AddHours(ReceivingTimeCheck_FreezeTime);//延迟多少小时
}
}
}
}
}
}
}
}
#endregion
}
if (db_order.db_endtime <= DateTime.Now)
{
db_order.db_status = SystemOrderStatus.;
//session.ExcuteSQL("update fl_order_suning set db_status=" + (int)db_order.db_status + " where id=" + db_order.id);
if (member != null)
{
var point = HttpHelper.JsonToObject<ItemPoint>(db_order.db_point) as ItemPoint;
if (point != null)
{
List<long> ids = new List<long>();
ids.Add(member.id);
//用户自身加积分
member = session.ChangePoint(PointType., point.UserPoint, member.id, $"苏宁购买:{db_order.productName}({db_order.orderCode}-{db_order.orderLineNumber})");
#region
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status);
#endregion
//notice.Add(new OrderNoticeEvent(CpsType.苏宁易购, member, db_order));
//多级提成计算
//一级的提成小于等于0时,并且判断一级是否符合获得推荐新人奖励(无奖励一级提成)
if (point.AwardOne <= 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
if (notice != null)
{
var inviter = session.FindMemberInfoById(member.inviter_id);
if (inviter != null)
{
#region
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, double.Parse(db_order.payAmount));
#endregion
notice.Add(new OrderNoticeEvent(CpsType., inviter, db_order, OrderNoticeType.) { Customer = member, IsRewards = isRewards });//下级首单完成
}
}
}
else if (point.AwardOne > 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.productName}({db_order.orderCode}-{db_order.orderLineNumber})");
if (flag != null)
{
ids.Add(flag.id);
#region
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, double.Parse(db_order.payAmount));
#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.productName}({db_order.orderCode}-{db_order.orderLineNumber})");
if (flag2 != null)
{
ids.Add(flag2.id);
if (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.productName}({db_order.orderCode}-{db_order.orderLineNumber})");
if (flag3 != null)
{
ids.Add(flag3.id);
if (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 robot = session.FindRobotInfo(db_order.db_robotname, db_order.db_robottype);
if (robot != null)
{
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.productName}({db_order.orderCode}-{db_order.orderLineNumber})");
if (flag != null) notice.Add(new OrderNoticeEvent(CpsType., flag, db_order, OrderNoticeType.) { Customer = member });
}
}
}
}
}
}
else db_order.db_status = SystemOrderStatus.;
break;
}
case SuNingSubOrderStatus.:
{
db_order.db_status = SystemOrderStatus.;
}
break;
//case SuNingSubOrderStatus.审核失败:
// #region 全额维权
// if (db_order.db_endtime != DateTime.MinValue && db_order.db_endtime <= DateTime.Now)
// {
// db_order.db_status = SystemOrderStatus.全额退款;
// new OrderHelper().DeductSuningOrderPoint(notice, db_order);
// }
// else
// {
// db_order.db_status = SystemOrderStatus.订单失效;
// }
// #endregion
// break;
case SuNingSubOrderStatus.:
case SuNingSubOrderStatus.退:
//db_order.db_status = SystemOrderStatus.订单失效;
if (db_order.db_endtime != DateTime.MinValue && db_order.db_endtime <= DateTime.Now)
{
db_order.db_status = SystemOrderStatus.退;
new OrderHelper().DeductSuningOrderPoint(notice, db_order);
}
else
{
db_order.db_status = SystemOrderStatus.;
}
break;
case SuNingSubOrderStatus.:
db_order.db_status = SystemOrderStatus.;
break;
default:
db_order.db_status = SystemOrderStatus.;
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.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 (notice != null && 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 (notice != null && 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
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 (notice != null && (isFrontData || old_status != db_order.db_status))
if (notice != null && (isFrontData || old_status != db_order.db_status)
&& ((islotUserQuery && member == null) || member != null))
notice.Add(new Events.OrderNoticeEvent(CpsType., member, db_order, OrderNoticeType.) { IsRewards = isFirstOrder });
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新苏宁订单错误:" + db_order.orderCode + "," + ex.Message);
}
}
/// <summary>
/// 同步订单
/// </summary>
/// <param name="members">苏宁cps对象集合</param>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
private void UpdateOrder(fl_cps_member[] members, DateTime start_time, DateTime end_time)
{
if (members == null || members.Length == 0) return;
UnValidCpsMember(members);
int row_count = 50;//间隔
//var timespan = end_time - start_time;
//var forcount = 1;
//if (timespan.TotalHours > 24.00)
//{
// forcount = (int)(timespan.TotalHours / 24);
// if (timespan.TotalHours % 24 > 0) forcount++;
//};
var timespan = end_time - start_time;
TaskTool task = new TaskTool();
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
var not_download_pids = ApiClient.Setting.SystemConfig.order_suning_not_download_pid.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
members = members.Where(f => f.is_valid).ToArray();
foreach (var item in members)
{
var _item = item;
var client = new SuNingApi(_item);
task.AddTask(delegate
{
try
{
var _star = timespan.TotalHours > 24 ? end_time : start_time;//倒叙24小时一个间断
var _end = end_time;
do
{
if (timespan.TotalHours > 24)
{
_end = _star;
_star = _star.AddHours(-23.99);
}
var rst = client.DownOrder(_star, _end, 1, row_count);
if (rst != null && rst.sn_responseContent.sn_head != null)
{
int total_count = rst.sn_responseContent.sn_head.totalSize;
if (total_count == 0) continue;
if (rst.sn_responseContent.sn_body == null) continue;
var order_list = rst.sn_responseContent.sn_body.queryOrder;
Exception _exception = null;
int count = total_count / row_count;
if (total_count % row_count != 0) count++;
for (int i = 1; i <= count; i++)
{
var page = i;
if (_exception != null) return;
try
{
rst = null;
//下载
if (page != 1)
{
rst = client.DownOrder(_star, _end, page, row_count);
if (rst == null || rst.sn_responseContent == null || rst.sn_responseContent.sn_body == null)
continue;
order_list = rst.sn_responseContent.sn_body.queryOrder;
}
if (order_list != null && order_list.Count > 0)
{
int _count = 1;
foreach (EntityTmp.SuNing3.QueryOrder _order in order_list)
{
_count++;
var session = ApiClient.GetSession();
try
{
//if (_order.orderCode == "40196344057")
//{
//}
foreach (var order in _order.orderDetail)
{
try
{
var custom = Util.DecryptDES(order.childAccountId);
#region PID
if (ApiClient.Setting.SystemConfig.order_suning_download_set_pids == SwitchType.)
{
if (not_download_pids.Count != 0)
{
var isExist = not_download_pids.FirstOrDefault(f => custom.StartsWith(f)) != null;//是否包含
if (ApiClient.Setting.SystemConfig.order_suning_down_type == DownAdzoneType.广 && isExist)
continue;
else if (ApiClient.Setting.SystemConfig.order_suning_down_type == DownAdzoneType.广 && !isExist)
continue;
}
}
else
{
//var adzone = session.FindAdzoneInfos().Where(f => f.custom_type == "苏宁返利" && !string.IsNullOrEmpty(f.adzone_pid) && custom.StartsWith(f.adzone_pid));
var adzoneList = new List<fl_adzone_info>();
var adzones = session.FindAdzoneInfos();
adzoneList.AddRange(adzones.Where(f => f.custom_type == "苏宁返利" && !string.IsNullOrEmpty(f.adzone_pid) && custom.StartsWith($"pid={f.adzone_pid}")));
adzoneList.AddRange(adzones.Where(f => f.custom_type == "用户私人pid" && f.extend == "苏宁私人pid" && !string.IsNullOrEmpty(f.adzone_pid) && custom.StartsWith($"pid={f.adzone_pid}")));
if (adzoneList == null || adzoneList.Count() == 0)
{
continue;
}
}
#endregion
if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && _count % 10 == 0)
Thread.Sleep(150);
//计算订单信息
var status = Util.ConvertEnum<SuNingSubOrderStatus>(order.orderLineStatusDesc);
var db_order = session.FindSingle<fl_order_suning>("orderCode=@orderCode and orderLineNumber = @orderLineNumber", new { orderCode = _order.orderCode, orderLineNumber = order.orderLineNumber });
if (db_order != null)
{
var statusTemp = Util.ConvertEnum<SuNingSubOrderStatus>(db_order.orderLineStatusDesc);
if (status == statusTemp || (status == SuNingSubOrderStatus.) && (statusTemp == SuNingSubOrderStatus. || status == SuNingSubOrderStatus.))
{
if (db_order.IsFinish()) continue;//是否已经完成
if (db_order.db_status == SystemOrderStatus. && db_order.db_endtime > DateTime.Now) continue;//跳过系统冻结
if (db_order.orderLineStatusDesc != SuNingSubOrderStatus..ToString() && db_order.orderLineStatusDesc == status.ToString()) continue;//跳过相同状态
}
db_order.orderLineStatusDesc = status.ToString();
}
else
{
db_order = ConvertDBSuNingOrder(db_order, order, _order.orderCode);
db_order.db_cpsname = _item.username;
db_order.db_cpsnick = _item.usernick;
}
var strb = new StringBuilder();
try
{
strb.AppendLine($@"苏宁订单 原始: {JsonConvert.SerializeObject(db_order)}
");
}
catch (Exception ex)
{ }
UpdateOrder(db_order, session, notices);
try
{
strb.AppendLine($@"处理后: {JsonConvert.SerializeObject(db_order)}
通知数:{notices.Count}");
LogHelper.GetSingleObj().Debug("同步订单:", strb.ToString());
}
catch (Exception ex)
{ }
}
catch (Exception ex)
{
throw ex;
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
//session.Close();
}
}
}
}
catch (Exception ex)
{
_exception = ex; return;
}
}
if (_exception != null) throw _exception;
//_star = _star.AddHours(-23.99);
}
} while (_star > start_time);
}
catch (Exception ex)
{
//throw ex;
}
});
}
task.Start(1, null);
if (string.IsNullOrEmpty(order_id))
{
var session = ApiClient.GetSession();
var end_orders = session.Find<fl_order_suning>("select * from fl_order_suning where db_status=@db_status and db_endtime<@db_endtime", new { db_status = (int)SystemOrderStatus., db_endtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ToList();
foreach (var db_order in end_orders)
{
UpdateOrder(db_order, session, notices);
}
}
if (notices.Count != 0)
{
var tasks = TimerTask.GetTimer<Update_NoticeQueue>() as Update_NoticeQueue;
foreach (var item in notices)
{
//if (item.Member == null) continue;
var order = item.Order as fl_order_suning;
if (order.orderCode == order_id) continue;
tasks.Add(item);
}
}
//TaskTool task = new TaskTool();
//task.AddTask(delegate {
//});
//var session = ApiClient.GetSession();//获得一个Session
//int thread_count = 6000;
}
private fl_order_suning ConvertDBSuNingOrder(fl_order_suning suning, EntityTmp.SuNing3.OrderDetail order, string orderCode)
{
try
{
if (suning == null)
suning = new fl_order_suning();
suning.orderCode = orderCode;
suning.childAccountId = order.childAccountId;
suning.commissionRatio = order.commissionRatio;
suning.custNo = order.custNo;
suning.goodsGroupCatalog = order.goodsGroupCatalog;
suning.goodsNum = order.goodsNum;
suning.orderLineFlag = order.orderLineFlag;
suning.orderLineNumber = order.orderLineNumber;
suning.orderLineOrigin = order.orderLineOrigin;
suning.orderLineStatusChangeTime = order.orderLineStatusChangeTime;
suning.orderLineStatusDesc = order.orderLineStatusDesc;
suning.orderSubmitTime = order.orderSubmitTime;
suning.orderType = order.orderType;
suning.payAmount = order.payAmount;
suning.payTime = order.payTime;
suning.pictureUrl = order.pictureUrl;
suning.positionId = order.positionId;
suning.prePayCommission = order.prePayCommission;
suning.productFirstCatalog = order.productFirstCatalog;
suning.productName = order.productName;
suning.productSecondCatalog = order.productSecondCatalog;
suning.productThirdCatalog = order.productThirdCatalog;
suning.promotion = order.promotion;
suning.returnCommission = order.returnCommission;
suning.saleNum = order.saleNum;
suning.saleType = order.saleType;
suning.sellerCode = order.sellerCode;
suning.sellName = order.sellName;
suning.statParam = order.statParam;
suning.violation = order.violation;
}
catch (Exception ex)
{
throw ex;
}
return suning;
}
private static DateTime invalidnotice_time = DateTime.MinValue;//阿里妈妈账号无效通知时间
private static DateTime invalidnotice_time2 = DateTime.MinValue;//阿里妈妈账号日志无效时间
/// <summary>
/// 无效的苏宁账号通知
/// </summary>
/// <param name="_members">苏宁cps对象集合</param>
private void UnValidCpsMember(fl_cps_member[] _members)
{
try
{
var invalid_members = _members.Where(f => !f.is_valid).ToArray();
if (invalid_members.Length != 0)
{
var strb = new StringBuilder();
strb.AppendLine($"苏宁更新订单异常");
strb.AppendLine();
for (int i = 0; i < invalid_members.Length; i++)
{
strb.AppendLine($"{invalid_members[i].usernick} ({invalid_members[i].username})");
}
strb.AppendLine();
strb.AppendLine($"以上账号授权状态已过期");
strb.AppendLine($"跳过以上账号下载操作");
strb.AppendLine($"请重新登录苏宁账号");
var timelag2 = (DateTime.Now - invalidnotice_time2).TotalMinutes;
if (timelag2 > 5)
{
invalidnotice_time2 = DateTime.Now;
EventClient.OnEvent(this, strb.ToString());
}
var timelag = (DateTime.Now - invalidnotice_time).TotalMinutes;
if (timelag > 30)
{
strb.AppendLine($"系统时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
invalidnotice_time = DateTime.Now;
ApiClient.SendNoticeMessage(strb.ToString());
ApiClient.SendAdminEmail(ApiClient.Setting.SystemConfig.account_admin_email, "苏宁账号授权失效通知", strb.ToString(), true);
}
}
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"更新苏宁订单异常7:{ex.Message},{ex.StackTrace}");
}
}
}
}