old_flsystem/应用/DYRebate/MessageOperation.cs

424 lines
19 KiB
C#

using Api.Framework;
using Api.Framework.EntityTmp.Douyin;
using Api.Framework.Enums;
using Api.Framework.Events;
using Api.Framework.Model;
using Api.Framework.SDK;
using Api.Framework.Timers;
using Api.Framework.Tools;
using Api.Framework.Utils;
using CsharpHttpHelper;
using DYRebate.Entitys;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using Api.Framework.Cps;
using static DYRebate.Class1;
namespace DYRebate
{
public class MessageOperation
{
ReciveIMEvent e = null;
Class1 plugin = null;
object sender = null;
public MessageOperation(object sender, ReciveIMEvent e, Class1 plugin)
{
this.e = e;
this.plugin = plugin;
this.sender = sender;
}
#region
public bool BindOrderId()
{
try
{
#region
var orderid = e.Message.Trim();
#region
if (Regex.IsMatch(orderid, @"^\d{19}$"))
{
var oid = long.Parse(orderid);
if (oid < 4000000000000000000)
{
return false;
}
var db = ApiClient.GetSession();
var dy_orders_temp = db.Find<fl_order_douyin>("select * from fl_order_douyin where order_id = @order_id", new { order_id = orderid });
var memberTmp = e.GetMemberinfo();
if (dy_orders_temp != null && dy_orders_temp.Count != 0)
{
var member = dy_orders_temp.FirstOrDefault(f => f.db_userid != 0 && f.db_userid != memberTmp.id);
if (member != null)
{
//订单已经被他人绑定
e.SendMessage(Class1.Config.OccupyOrderErrorTip.Replace("[订单号]", orderid));
return true;
}
var notices = new List<OrderNoticeEvent>();
var downDyTimer = new DownDouyinTimer();
#region ,
var bindOrders = dy_orders_temp.Where(f => f.db_userid != 0).ToList();
if (bindOrders != null && bindOrders.Count != 0)
{
foreach (var order in bindOrders)
{
var point = HttpHelper.JsonToObject<ItemPoint>(order.db_point) as ItemPoint;
memberTmp = e.GetMemberinfo(true);
if (order.db_status == SystemOrderStatus.)
e.SendMessage(new VariateReplace().CommonReplace(Class1.Config.OrderRepetBindTip, order, memberTmp, point));
else
e.SendMessage(Class1._GetOrderStateMess(order.db_status, (order.db_status == SystemOrderStatus. ? SettleType. : SettleType.), order, memberTmp, point));
Thread.Sleep(500);
}
//return;
}
#endregion
#region ( => )
var notBindOrders = dy_orders_temp.Where(f => f.db_userid == 0).ToList();
if (notBindOrders != null && notBindOrders.Count != 0)
{
if (HttpExtend.GetDateTime(notBindOrders[0].pay_time.ToString()) < ApiClient.Setting.SystemConfig.allow_bind_create_order_time)
{
e.SendMessage($"订单:{orderid},已经过了有效绑定时间!");
return true;
}
foreach (var order in notBindOrders)
{
if (order.db_status == SystemOrderStatus.)
order.db_endtime = DateTime.Now.AddMinutes(-5);//重新结算的话,需要将订单的冻结时间重新赋值,让后台处理
//没有绑定用户的订单进行绑定
order.db_userid = memberTmp.id;
order.db_robotname = e.RobotName;
order.db_robottype = e.RobotInfo.type;
order.msg_groupid = e.Groupid;
#region ,
//查询历史查询比例
var compute = db.FindQueryRatioHist(CpsType., order.id);
if (compute == null)
{
var query_item = db.FindSingle<fl_query_hist>("select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid order by id desc", new { userid = e.GetMemberinfo().id, itemid = order.product_id, adzoneid = order.db_cpsname });
//计算公式不为空
if (query_item != null && !string.IsNullOrWhiteSpace(query_item.compute_configdic))
{
try
{
compute = JsonConvert.DeserializeObject<Compute>(query_item.compute_configdic);
var queryRatioHist = new fl_query_ratio_hist()
{
compute_config = query_item.compute_configdic,
db_orderid = order.id,
createtime = DateTime.Now,
cpstype = CpsType.
};
db.SaveOrUpdate(queryRatioHist);
}
catch (Exception ex)
{
EventClient.OnEvent("抖音计算", $"获取历史查询比异常:{ex.Message}");
}
}
}
ItemPoint itempoint = null;
//计算的佣金
if (compute != null)
itempoint = db.FindItemPoint(CpsType., compute, Util.ConvertDouble_FenToYuan(order.estimated_comission), 1);
else
itempoint = db.FindItemPoint(memberTmp, Util.ConvertDouble_FenToYuan(order.estimated_comission), 1, CpsType.);
if (itempoint != null)
{
order.db_point = HttpHelper.ObjectToJson(itempoint);
order.db_userpoint = itempoint.UserPoint;
}
#endregion
#region 1
if (memberTmp != null)
{
memberTmp.bind_order++;
memberTmp = db.UpdateMemberGroup(memberTmp);
}
#endregion
#region
var record = db.FindStatisticsRecord(memberTmp.id);
if (record == null)
{
record = new fl_statistics_record() { uid = memberTmp.id, ex2 = 0, ex4 = HttpExtend.GetTimeStamp(DateTime.Now) };
db.Saveable(record).ExecuteCommand();
}
else
{
if (record.ex2 == 0 && record.ex4 == 0)
{
record.ex4 = HttpExtend.GetTimeStamp(DateTime.Now);
db.Saveable(record).ExecuteCommand();
}
}
#endregion
db.SaveOrUpdate(order);
downDyTimer.UpdateOrder(order, notices, db, isFrontData: true);
}
}
#endregion
#region
if (!ApiClient.Setting.SystemConfig.message_warning_switch && notices.Count != 0)
{
var tasks = TimerTask.GetTimer<Update_NoticeQueue>() as Update_NoticeQueue;
foreach (var item in notices)
{
//if (item.IsRewards)
tasks.Add(item);
//else
//plugin.SDK_OrderNoticeEvent(this, item);
}
}
#endregion
}
else
{
#region ,
e.SendMessage(Class1.Config.NotFoundOrderErrorTip.Replace("[订单号]", orderid));
var bind = db.FindBindCache(orderid);
if (bind == null)
{
db.Insertable(new fl_bind_cache() { crt_time = DateTime.Now, db_robotid = e.RobotInfo.id, orderid = orderid, groupid = e.Groupid, db_userid = memberTmp.id }).ExecuteCommand();
db.FindBindCache(orderid, true);
}
#endregion
}
//消息已经处理完成,将不往后面的插件传递
e.Cancel = true;
return true;
}
#endregion
//判断消息是否是其他cps平台的订单号
if (OrderHelper.IsOrderId(e.Message.Trim()))
return true;
#endregion
}
catch (Exception ex)
{
plugin.OnLog($"手动绑定订单号异常:{ex.Message}_{ex.StackTrace}");
}
return false;
}
#endregion
/// <summary>
/// 抖客判断
/// </summary>
/// <returns></returns>
public CpsInfo DouKe()
{
try
{
var db = ApiClient.GetSession();
var dkefoTemps = db.FindDkInfoTempGroups();
var dyInfoTemp = dkefoTemps.FirstOrDefault(f => f.name == e.RobotInfo.name && f.onoff == false);
if (dyInfoTemp == null)
{
return null;
}
var memberTmp = e.GetMemberinfo();
//推广位
var pid = string.Empty;
fl_cps_member dy_cps = null;
var isDefault = true;
if (!string.IsNullOrWhiteSpace(e.Groupid))//群pid
{
var groupAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.group_id == e.Groupid);
if (groupAdzone != null && !string.IsNullOrWhiteSpace(groupAdzone.adzone_pid))
{
pid = groupAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == groupAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//私人pid
{
var memberAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.member_id == memberTmp.id);
if (memberAdzone != null && !string.IsNullOrWhiteSpace(memberAdzone.adzone_pid))//私人推广位
{
pid = memberAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == memberAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//默认推广位
{
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief_cps_name : dyInfoTemp.pid_deputy_cps_name));//通过判断用户的购物积分,来判断用户使用哪个推广位
pid = ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief : dyInfoTemp.pid_deputy);
}
if (dy_cps == null)
{
throw new Exception("抖音推广位设置异常,请检测后重试!");
}
var api = CpsClient.CreateDouyinRequestV3(dy_cps);
if (api == null)
{
throw new Exception("@创建抖音API请求失败");
}
return new CpsInfo()
{
api = api,
DyCps = dy_cps,
Pid = pid
};
}
catch (Exception ex)
{
this.plugin.OnLog("抖客判断" + ex.Message);
}
return null;
}
/// <summary>
/// 达人判断
/// </summary>
/// <returns></returns>
public CpsInfo DaRen()
{
try
{
var db = ApiClient.GetSession();
var dyinfoTemps = db.FindDyInfoTempGroups();
var dyInfoTemp = dyinfoTemps.FirstOrDefault(f => f.name == e.RobotInfo.name && f.onoff == false);
if (dyInfoTemp == null)
{
return null;
}
var memberTmp = e.GetMemberinfo();
//推广位
var pid = string.Empty;
fl_cps_member dy_cps = null;
var isDefault = true;
if (!string.IsNullOrWhiteSpace(e.Groupid))//群pid
{
var groupAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.group_id == e.Groupid);
if (groupAdzone != null && !string.IsNullOrWhiteSpace(groupAdzone.adzone_pid))
{
pid = groupAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == groupAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//私人pid
{
var memberAdzone = db.FindAdzoneInfos().FirstOrDefault(f => f.alliance_id == (int)CpsType. && f.custom_type == PrivateAdzoneCustomType.pid.ToString() && f.member_id == memberTmp.id);
if (memberAdzone != null && !string.IsNullOrWhiteSpace(memberAdzone.adzone_pid))//私人推广位
{
pid = memberAdzone.adzone_pid;
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == memberAdzone.adzone_pid_cps_name);
isDefault = false;
}
}
if (isDefault)//默认推广位
{
dy_cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief_cps_name : dyInfoTemp.pid_deputy_cps_name));//通过判断用户的购物积分,来判断用户使用哪个推广位
pid = ((memberTmp.buy_point >= Class1.Config.Point && memberTmp.finish_order >= Class1.Config.OrderNum) ? dyInfoTemp.pid_chief : dyInfoTemp.pid_deputy);
}
if (dy_cps == null)
{
throw new Exception("抖音推广位设置异常,请检测后重试!");
}
var api = CpsClient.CreateDouyinRequest(dy_cps);
if (api == null)
{
throw new Exception("@创建抖音API请求失败");
}
return new CpsInfo()
{
DyCps = dy_cps,
Pid = pid,
api = api
};
}
catch (Exception ex)
{
this.plugin.OnLog("达人判断" + ex.Message);
}
return null;
}
public bool AnalyseFanLi()
{
var cpsInfo = DouKe();
if (cpsInfo != null)
{
var douke = new DouKeHandle(sender, e, this.plugin);
var flag = douke.Invok(cpsInfo);
return flag;
}
cpsInfo = DaRen();
if (cpsInfo != null)
{
var douke = new DaRenHandle(sender, e, this.plugin);
var flag = douke.Invok(cpsInfo);
return flag;
}
return false;
}
}
public class CpsInfo
{
public BaseCpsApi api { get; set; }
public fl_cps_member DyCps { get; set; }
public string Pid { get; set; }
}
}