794 lines
50 KiB
C#
794 lines
50 KiB
C#
|
using Api.Framework.Cps;
|
|||
|
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 Api.Framework.Tools;
|
|||
|
using SqlSugar;
|
|||
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Data;
|
|||
|
using System.Linq;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
using System.Threading;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace Api.Framework.Timers
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 下载拼多多订单,定时器
|
|||
|
/// </summary>
|
|||
|
public class DownPinduoduoTimer : TimerTask
|
|||
|
{
|
|||
|
private DateTime update_time = DateTime.Now.AddMinutes(-60);
|
|||
|
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(-20);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 订单id
|
|||
|
/// </summary>
|
|||
|
public string order_id = string.Empty;
|
|||
|
private object lock_obj = new object();
|
|||
|
/// <summary>
|
|||
|
/// 下载订单任务下达A
|
|||
|
/// </summary>
|
|||
|
/// <param name="member"></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>
|
|||
|
public 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();
|
|||
|
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_new = @"^r=(?<机器人名>.*?)\st=(?<类型>\d+)\su=(?<会员名>.+?)$";
|
|||
|
|
|||
|
public void UpdateOrder(fl_order_pinduoduo 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;//是否获得用户首单奖励
|
|||
|
|
|||
|
//订单自动绑定
|
|||
|
if (db_order.db_userid == 0 && ApiClient.Setting.SystemConfig.order_pinduoduo_bind == SwitchType.开启)
|
|||
|
{
|
|||
|
var isbind = false;
|
|||
|
#region 拼多多返利进行自动绑定
|
|||
|
//私人推广位强制绑定绑定
|
|||
|
var privateAdzonePids = session.FindPinduoduoPrivatePid(db_order.p_id.ToString());
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!isbind)
|
|||
|
{
|
|||
|
var bind_pids = session.FindPinduoduoAutoBindPid();
|
|||
|
bool flag = bind_pids.FirstOrDefault(f => f == db_order.p_id) != null ? true : false;
|
|||
|
#endregion
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
//var reg = Regex.Match(db_order.custom_parameters, @"^robot=(?<机器人名>.*?)\stype=(?<类型>\d+)\suser=(?<会员名>.*?)$");
|
|||
|
//var reg = Regex.Match(db_order.custom_parameters, @"^robot=(?<机器人名>.*?)\stype=(?<类型>\d+)\suser=(?<会员名>.+?)(?:\smallid=(?<店铺ID>\d+))?$");
|
|||
|
var reg = Regex.Match(db_order.custom_parameters, custom_parameters_regex_new);
|
|||
|
if (!reg.Success)
|
|||
|
reg = Regex.Match(db_order.custom_parameters, custom_parameters_regex);
|
|||
|
if (reg.Success)
|
|||
|
{
|
|||
|
member = session.FindSingle<fl_member_info>("username=@username and robot_type=@robot_type", new { username = reg.Groups["会员名"].Value, robot_type = reg.Groups["类型"].Value });
|
|||
|
if (member == null)
|
|||
|
{
|
|||
|
member = new fl_member_info() { robot_type = Util.ConvertEnum<ChatType>(int.Parse(reg.Groups["类型"].Value)), username = reg.Groups["会员名"].Value, robot_name = reg.Groups["机器人名"].ToString(), 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 = reg.Groups["机器人名"].Value;
|
|||
|
db_order.db_robottype = Util.ConvertEnum<ChatType>(int.Parse(reg.Groups["类型"].Value));
|
|||
|
}
|
|||
|
|
|||
|
#region 绑定群号
|
|||
|
if (string.IsNullOrWhiteSpace(db_order.msg_groupid))
|
|||
|
{
|
|||
|
var query_item = session.Find<fl_query_hist>("userid=@userid and itemid=@itemid and adzoneid = @adzoneid", new { userid = db_order.db_userid, itemid = db_order.goods_id, adzoneid = db_order.p_id }).FirstOrDefault();
|
|||
|
if (query_item != null)
|
|||
|
{
|
|||
|
db_order.msg_groupid = query_item.groupid;
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
member = session.Find<fl_member_info>("id=@id", new { id = db_order.db_userid }).FirstOrDefault();
|
|||
|
}
|
|||
|
|
|||
|
if ((db_order.order_status == 0 || db_order.order_status == 1) && 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.order_pay_time);
|
|||
|
session.Saveable(record).ExecuteCommand();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
//计算积分
|
|||
|
if (string.IsNullOrEmpty(db_order.db_point))
|
|||
|
{
|
|||
|
if (member == null) session.Find<fl_member_info>("id=@id", new { id = db_order.db_userid }).FirstOrDefault();
|
|||
|
var itempoint = session.FindItemPoint(member, db_order.promotion_amount, db_order.goods_quantity, 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);
|
|||
|
}
|
|||
|
}
|
|||
|
var status = Util.ConvertEnum<PinduoduoOrderStatus>(db_order.order_status);
|
|||
|
switch (status)
|
|||
|
{
|
|||
|
case PinduoduoOrderStatus.确认收货:
|
|||
|
case PinduoduoOrderStatus.审核成功:
|
|||
|
case PinduoduoOrderStatus.已经结算:
|
|||
|
{
|
|||
|
//未发放佣金
|
|||
|
if (db_order.db_endtime == DateTime.MinValue)
|
|||
|
{
|
|||
|
var sleep = session.FindSleep(CpsType.多多进宝, ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType.商品总佣金 ? db_order.promotion_amount : 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)config["ReceivingTimeCheck_Hour"];
|
|||
|
if ((DateTime.Now - db_order.order_pay_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)config["ReceivingTimeCheck_FreezeTime"];
|
|||
|
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_pinduoduo 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.goods_name}({db_order.order_sn})");
|
|||
|
|
|||
|
#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, db_order.order_amount);
|
|||
|
#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.goods_name}({db_order.order_sn})");
|
|||
|
if (flag != null)
|
|||
|
{
|
|||
|
ids.Add(flag.id);
|
|||
|
|
|||
|
#region 判断上级是否符合获得推荐新人奖励
|
|||
|
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.order_amount);
|
|||
|
#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.goods_name}({db_order.order_sn})");
|
|||
|
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.goods_name}({db_order.order_sn})");
|
|||
|
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.goods_name}({db_order.order_sn})");
|
|||
|
if (flag != null) notice.Add(new OrderNoticeEvent(CpsType.多多进宝, flag, db_order, OrderNoticeType.群主分成) { Customer = member });
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else db_order.db_status = SystemOrderStatus.订单冻结;
|
|||
|
break;
|
|||
|
}
|
|||
|
case PinduoduoOrderStatus.已经付款:
|
|||
|
case PinduoduoOrderStatus.已经成团:
|
|||
|
{
|
|||
|
db_order.db_status = SystemOrderStatus.订单付款;
|
|||
|
}
|
|||
|
break;
|
|||
|
case PinduoduoOrderStatus.审核失败:
|
|||
|
//db_order.db_status = (old_status == SystemOrderStatus.订单结算) ? SystemOrderStatus.全额退款 : SystemOrderStatus.订单失效;
|
|||
|
#region 全额维权
|
|||
|
//if (member != null && old_status == SystemOrderStatus.订单结算 && db_order.db_status == SystemOrderStatus.全额退款)//扣除积分
|
|||
|
if (db_order.db_endtime != DateTime.MinValue && db_order.db_endtime <= DateTime.Now)
|
|||
|
{
|
|||
|
db_order.db_status = SystemOrderStatus.全额退款;
|
|||
|
#region
|
|||
|
//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.goods_name}({db_order.order_sn}) - 售后中(扣除)");
|
|||
|
|
|||
|
// //#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, db_order.order_amount);
|
|||
|
// #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.goods_name}({db_order.order_sn}) - 售后中(扣除)");
|
|||
|
// if (flag != null)
|
|||
|
// {
|
|||
|
// ids.Add(flag.id);
|
|||
|
|
|||
|
// //#region 判断上级是否符合获得推荐新人奖励
|
|||
|
// //isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.order_amount);
|
|||
|
// //#endregion
|
|||
|
|
|||
|
// //notice.Add(new OrderNoticeEvent(CpsType.多多进宝, flag, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });
|
|||
|
// notice.Add(new OrderNoticeEvent(CpsType.多多进宝, flag, db_order, OrderNoticeType.一级提成) { Customer = member });
|
|||
|
|
|||
|
// 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.goods_name}({db_order.order_sn}) - 售后中(扣除)");
|
|||
|
// 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.goods_name}({db_order.order_sn}) - 售后中(扣除)");
|
|||
|
// 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.goods_name}({db_order.order_sn}) - 售后中(扣除)");
|
|||
|
// if (flag != null) notice.Add(new OrderNoticeEvent(CpsType.多多进宝, flag, db_order, OrderNoticeType.群主分成) { Customer = member });
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }
|
|||
|
// }
|
|||
|
//}
|
|||
|
#endregion
|
|||
|
new OrderHelper().DeductPinDuoOrderPoint(notice, db_order);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
db_order.db_status = SystemOrderStatus.订单失效;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
break;
|
|||
|
case PinduoduoOrderStatus.没有佣金:
|
|||
|
case PinduoduoOrderStatus.违规订单:
|
|||
|
db_order.db_status = SystemOrderStatus.订单失效;
|
|||
|
break;
|
|||
|
case PinduoduoOrderStatus.等待付款:
|
|||
|
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))
|
|||
|
notice.Add(new Events.OrderNoticeEvent(CpsType.多多进宝, member, db_order, OrderNoticeType.客户订单) { IsRewards = isFirstOrder });
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
EventClient.OnEvent(this, "更新拼多多订单错误:" + db_order.order_sn + "," + ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void UpdateOrder(fl_cps_member[] members, DateTime start_time, DateTime end_time)
|
|||
|
{
|
|||
|
if (members == null || members.Length == 0) return;
|
|||
|
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_pinduoduo_not_download_pid.Replace(",", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
|
|||
|
foreach (var item in members)
|
|||
|
{
|
|||
|
var _item = item;
|
|||
|
var client = new PinduoduoApi(_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);
|
|||
|
}
|
|||
|
Dictionary<string, object> rst = null;
|
|||
|
for (int i = 0; i < 3; i++)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
rst = client.DownOrder(_star, _end, 1, row_count);
|
|||
|
break;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Thread.Sleep(1000);
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
int total_count = int.Parse(rst["total_count"].ToString());
|
|||
|
if (total_count == 0) continue;
|
|||
|
var order_list = rst["order_list"] as ArrayList;
|
|||
|
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
|
|||
|
{
|
|||
|
Dictionary<string, object> _rst = null;
|
|||
|
//下载
|
|||
|
if (page != 1)
|
|||
|
{
|
|||
|
for (int z = 0; z < 3; z++)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
_rst = client.DownOrder(_star, _end, page, row_count);
|
|||
|
break;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Thread.Sleep(1000);
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
order_list = _rst["order_list"] as ArrayList;
|
|||
|
}
|
|||
|
|
|||
|
if (order_list != null && order_list.Count > 0)
|
|||
|
{
|
|||
|
int _count = 1;
|
|||
|
foreach (Dictionary<string, object> _order in order_list)
|
|||
|
{
|
|||
|
_count++;
|
|||
|
|
|||
|
var session = ApiClient.GetSession();
|
|||
|
try
|
|||
|
{
|
|||
|
//if (_order["order_sn"].ToString() == "200525-419953705981880")
|
|||
|
//if (_order["order_sn"].ToString() == "200705-538107904903242")
|
|||
|
//{
|
|||
|
//}
|
|||
|
|
|||
|
#region 不处理的PID
|
|||
|
if (not_download_pids.Count != 0)
|
|||
|
{
|
|||
|
var isExist = not_download_pids.Contains(_order["p_id"].ToString());//是否包含
|
|||
|
//continue;
|
|||
|
if (ApiClient.Setting.SystemConfig.order_pinduoduo_down_type == DownAdzoneType.不下载推广位 && isExist)
|
|||
|
continue;
|
|||
|
else if (ApiClient.Setting.SystemConfig.order_pinduoduo_down_type == DownAdzoneType.只下载推广位 && !isExist)
|
|||
|
continue;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && _count % 10 == 0)
|
|||
|
Thread.Sleep(150);
|
|||
|
|
|||
|
//计算订单信息
|
|||
|
var status = Util.ConvertEnum<PinduoduoOrderStatus>(int.Parse(_order["order_status"].ToString()));
|
|||
|
//if (status == PinduoduoOrderStatus.等待付款) continue;
|
|||
|
//var db_order = session.Queryable<fl_order_pinduoduo>().Where(f => f.order_sn == _order["order_sn"].ToString()).First();
|
|||
|
var db_order = session.FindSingle<fl_order_pinduoduo>("order_sn=@order_sn", new { order_sn = _order["order_sn"].ToString() });
|
|||
|
if (db_order != null) //跳过相同状态
|
|||
|
{
|
|||
|
var statusTemp = (PinduoduoOrderStatus)db_order.order_status;
|
|||
|
|
|||
|
if (status == statusTemp ||
|
|||
|
(status == PinduoduoOrderStatus.确认收货 || status == PinduoduoOrderStatus.已经结算 || status == PinduoduoOrderStatus.审核成功) && (statusTemp == PinduoduoOrderStatus.确认收货 || status == PinduoduoOrderStatus.已经结算 || status == PinduoduoOrderStatus.审核成功))
|
|||
|
{
|
|||
|
if (db_order.IsFinish()) continue;//是否已经完成
|
|||
|
if (db_order.db_status == SystemOrderStatus.订单冻结 && db_order.db_endtime > DateTime.Now) continue;//跳过系统冻结
|
|||
|
if (db_order.order_status != 2 && db_order.order_status == (int)status) continue;//跳过相同状态
|
|||
|
}
|
|||
|
db_order.order_status = (int)status;
|
|||
|
if (db_order.goods_price == 0 || db_order.order_amount == 0 || db_order.promotion_amount == 0)
|
|||
|
{
|
|||
|
var temp = _order.ConvertToObj<fl_order_pinduoduo>();
|
|||
|
db_order.promotion_amount = temp.promotion_amount == 0 ? 0 : Math.Round(temp.promotion_amount / 100.00, 2);
|
|||
|
db_order.order_amount = temp.order_amount == 0 ? 0 : Math.Round(temp.order_amount / 100.00, 2);
|
|||
|
db_order.goods_price = temp.goods_price == 0 ? 0 : Math.Round(temp.goods_price / 100.00, 2);
|
|||
|
}
|
|||
|
if (db_order.price_compare_status != (PinduoduoBiJiaType)db_order.price_compare_status)
|
|||
|
db_order.price_compare_status = (PinduoduoBiJiaType)db_order.price_compare_status;
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
db_order = _order.ConvertToObj<fl_order_pinduoduo>();
|
|||
|
db_order.promotion_amount = db_order.promotion_amount == 0 ? 0 : Math.Round(db_order.promotion_amount / 100.00, 2);
|
|||
|
db_order.order_amount = db_order.order_amount == 0 ? 0 : Math.Round(db_order.order_amount / 100.00, 2);
|
|||
|
db_order.goods_price = db_order.goods_price == 0 ? 0 : Math.Round(db_order.goods_price / 100.00, 2);
|
|||
|
db_order.db_cpsname = _item.username;
|
|||
|
db_order.db_cpsnick = _item.usernick;
|
|||
|
}
|
|||
|
if (string.IsNullOrWhiteSpace(db_order.mall_id))
|
|||
|
{
|
|||
|
//var reg = Regex.Match(db_order.custom_parameters, @"^robot=(?<机器人名>.*?)\stype=(?<类型>\d+)\suser=(?<会员名>.+?)(?:\smallid=(?<店铺ID>\d+))?$");
|
|||
|
var reg = Regex.Match(db_order.custom_parameters, custom_parameters_regex);
|
|||
|
if (reg.Success && reg.Groups["店铺ID"] != null && !string.IsNullOrWhiteSpace(reg.Groups["店铺ID"].ToString()))
|
|||
|
db_order.mall_id = reg.Groups["店铺ID"].ToString();
|
|||
|
|
|||
|
if (string.IsNullOrWhiteSpace(db_order.mall_id))
|
|||
|
{
|
|||
|
var query_item = session.FindSingle<fl_query_hist>("select * from fl_query_hist where itemid = @itemid", new { itemid = db_order.goods_id });
|
|||
|
if (query_item != null)
|
|||
|
db_order.mall_id = query_item.mallid;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
UpdateOrder(db_order, session, notices);
|
|||
|
//if (!result.Result)
|
|||
|
//{
|
|||
|
// _exception = result.Exception;return;
|
|||
|
//}
|
|||
|
}
|
|||
|
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_pinduoduo>("select * from fl_order_pinduoduo 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_pinduoduo;
|
|||
|
if (order.order_sn == order_id) continue;
|
|||
|
tasks.Add(item);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//TaskTool task = new TaskTool();
|
|||
|
//task.AddTask(delegate {
|
|||
|
|
|||
|
//});
|
|||
|
//var session = ApiClient.GetSession();//获得一个Session
|
|||
|
//int thread_count = 6000;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|