2022-09-20 03:10:29 +00:00
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 ;
using Newtonsoft.Json ;
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>
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_new = @"^r=(?<机器人名>.*?)\st=(?<类型>\d+)\su=(?<会员名>.+?)$" ;
/// <summary>
/// 订单 修改状态/用户绑定等操作通知用户
/// </summary>
/// <param name="db_order">拼多多订单对象</param>
/// <param name="session">数据库操作对象</param>
/// <param name="notice">事件集合</param>
/// <param name="isFrontData"></param>
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 ; //是否获得用户首单奖励
var islotUserQuery = false ; //订单是否为多人查询
2022-09-26 09:04:23 +00:00
if ( isFrontData )
{
}
2022-09-20 03:10:29 +00:00
//订单自动绑定
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 ;
#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 = db_order . goods_id , adzoneid = db_order . p_id , 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 . FindPinduoduoAutoBindPid ( ) ;
bool flag = bind_pids . FirstOrDefault ( f = > f = = db_order . p_id ) ! = null ? true : false ;
#endregion
if ( flag )
{
#region 有 定 义 custom_parameters参数
//if (!string.IsNullOrWhiteSpace(db_order.custom_parameters))
//{
// //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
// }
//}
#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 = db_order . goods_id , adzoneid = db_order . p_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 userid = int . Parse ( query . Rows [ 0 ] [ "userid" ] . ToString ( ) ) ; //要是查询记录已经标记为通知过的记录(userid 为 负数),将不通过查询记录进行绑定
if ( userid > 0 )
{
db_order . db_userid = userid ; //根据查询记录认领
var query_item = session . FindSingle < fl_query_hist > ( "select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . goods_id , adzoneid = db_order . p_id , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
db_order . msg_groupid = query_item . groupid ;
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 ) ;
}
}
}
}
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 . 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 ) member = session . Find < fl_member_info > ( "id=@id" , new { id = db_order . db_userid } ) . FirstOrDefault ( ) ;
ItemPoint itempoint = null ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 多 多 进 宝 , db_order . id ) ;
//计算的佣金
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 多 多 进 宝 , compute , db_order . promotion_amount , db_order . goods_quantity ) ;
else
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 ) ;
}
}
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 < 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 . Parse ( config [ "ReceivingTimeCheck_Switch" ] . ToString ( ) ) ;
if ( ReceivingTimeCheck_Switch )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_Hour" ) )
{
var ReceivingTimeCheck_Hour = int . Parse ( config [ "ReceivingTimeCheck_Hour" ] . ToString ( ) ) ;
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 . 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_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 )
{
#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.goods_name}({db_order.order_sn})" } ) ;
if ( pointHists ! = null & & pointHists . Count ! = 0 )
{
session . SaveOrUpdate ( db_order ) ;
return ;
}
#endregion
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 . 审 核 失 败 :
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 . 没 有 佣 金 :
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))
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 . order_sn + "," + 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_pinduoduo_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 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 ) ;
}
var rst = client . DownOrder ( _star , _end , 1 , row_count ) ;
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 )
{
_rst = client . DownOrder ( _star , _end , page , row_count ) ;
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 ( ) = = "220716-265625301872658" )
{
}
#region 不 处 理 的 PID
if ( ApiClient . Setting . SystemConfig . order_pinduoduo_download_set_pids = = SwitchType . 关 闭 )
{
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 ;
}
}
else
{
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 . Contains ( _order [ "p_id" ] . ToString ( ) ) ) ) ;
adzoneList . AddRange ( adzones . Where ( f = > f . custom_type = = "用户私人pid" & & f . extend = = "拼多多私人pid" & & ! string . IsNullOrEmpty ( f . adzone_pid ) & & f . adzone_pid . Contains ( _order [ "p_id" ] . ToString ( ) ) ) ) ;
if ( adzoneList . Count ( ) = = 0 )
{
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;
}
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}" ) ;
}
}
}
}