2022-09-20 03:10:29 +00:00
using Api.Framework ;
using Api.Framework.Cps ;
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 Chat.Framework.WXSdk ;
using CsharpHttpHelper ;
using JDRebate.Entitys ;
using JDRebate.Properties ;
using Newtonsoft.Json ;
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text.RegularExpressions ;
using System.Threading ;
using static JDRebate . Enums ;
namespace JDRebate
{
public class Class1 : Plugin
{
public Class1 ( )
{
this . Name = Resources . PluginName ;
this . Note = Resources . PluginNote ;
this . Logo = Resources . 京 东 ;
}
#region 自 定 义 变 量
public static Config Config ;
private MainForm mainForm = null ;
// public static VariateReplace variateReplace = null;
#endregion
public override void Start ( )
{
try
{
var session = ApiClient . GetSession ( ) ;
#region 判 断 表 是 否 存 在 , 不 存 在 创 建 表
#endregion
//创建配置文件
Config = this . ReadConfig < Config > ( ) ;
// variateReplace = new VariateReplace();
SDK . ReciveIMEvent + = SDK_ReciveIMEvent ;
SDK . OrderNoticeEvent + = SDK_OrderNoticeEvent ;
}
catch ( Exception ex )
{
this . OnLog ( ex . Message ) ;
}
}
public override void ShowForm ( )
{
try
{
if ( mainForm = = null | | mainForm . IsDisposed )
{
mainForm = new MainForm ( ) ;
mainForm . Show ( ) ;
}
mainForm . TopMost = true ;
mainForm . TopMost = false ;
}
catch ( Exception ex )
{
this . OnLog ( ex . Message ) ;
}
}
public override void Stop ( )
{
try
{
SessionExt . Clear ( ) ;
if ( mainForm ! = null )
{
mainForm . CloseForm ( ) ;
mainForm = null ;
}
}
catch ( Exception ex )
{
this . OnLog ( ex . Message ) ;
}
}
private void SDK_OrderNoticeEvent ( object sender , OrderNoticeEvent e )
{
try
{
if ( e . ChatType = = CpsType . 京 东 联 盟 )
{
var session = ApiClient . GetSession ( ) ;
//订单信息
var order_jd = e . Order as fl_order_jingdong ;
if ( order_jd = = null ) return ;
if ( e . Member ! = null )
{
2022-09-26 09:04:23 +00:00
//是否黑名单
if ( ApiClient . IsBlackFlMemberInfo ( e . Member ) )
{
return ;
}
2022-09-20 03:10:29 +00:00
var robot_info = session . FindRobotInfo ( e . Member . robot_name , e . Member . robot_type ) ;
if ( robot_info ! = null )
{
var mess = string . Empty ;
var point = HttpHelper . JsonToObject < ItemPoint > ( order_jd . db_point ) as ItemPoint ;
switch ( e . OrderNoticeType )
{
case OrderNoticeType . 客 户 订 单 :
if ( Config . UserOrderChangeSwitch = = SwitchType . 开 启 & & ! ApiClient . Setting . SystemConfig . message_warning_switch )
{
mess = _GetOrderStateMess ( order_jd . db_status , SettleType . 未 结 算 提 示 , order_jd , e . Member , point ) ;
if ( ! string . IsNullOrEmpty ( e . Member . username ) & & ! string . IsNullOrEmpty ( mess ) )
ApiClient . SendMessage ( robot_info , e . Member . username , mess , order_jd . msg_groupid ) ;
}
return ;
case OrderNoticeType . 一 级 提 成 :
if ( Config . AgentReceivedCommissionSwitch = = SwitchType . 开 启 )
{
if ( e . Customer ! = null & & point . AwardOne ! = 0 )
{
if ( order_jd . db_status = = SystemOrderStatus . 订 单 维 权 中 )
mess = Config . ClientOrderRefund_OneLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 付 款 )
mess = Config . OrderPaymentInform_OneLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 失 效 )
mess = Config . OrderCountermandInform_OneLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 结 算 )
mess = Config . OrderSettlement_OneLevelTip ;
}
}
break ;
case OrderNoticeType . 二 级 提 成 :
if ( Config . AgentReceivedCommissionSwitch = = SwitchType . 开 启 )
{
if ( e . Customer ! = null )
{
if ( order_jd . db_status = = SystemOrderStatus . 订 单 维 权 中 )
mess = Config . ClientOrderRefund_TwoLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 付 款 )
mess = Config . OrderPaymentInform_TwoLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 失 效 )
mess = Config . OrderCountermandInform_TwoLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 结 算 )
mess = Config . OrderSettlement_TwoLevelTip ;
}
}
break ;
case OrderNoticeType . 三 级 提 成 :
if ( Config . AgentReceivedCommissionSwitch = = SwitchType . 开 启 )
{
if ( e . Customer ! = null )
{
if ( order_jd . db_status = = SystemOrderStatus . 订 单 维 权 中 )
mess = Config . ClientOrderRefund_ThreeLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 付 款 )
mess = Config . OrderPaymentInform_ThreeLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 失 效 )
mess = Config . OrderCountermandInform_ThreeLevelTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 结 算 )
mess = Config . OrderSettlement_ThreeLevelTip ;
}
}
break ;
case OrderNoticeType . 群 主 分 成 :
if ( Config . PrincipalReceivedCommissionSwitch = = SwitchType . 开 启 )
{
if ( e . Customer ! = null )
{
if ( order_jd . db_status = = SystemOrderStatus . 订 单 维 权 中 )
mess = Config . ClientOrderRefund_LeaderTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 付 款 )
mess = Config . OrderPaymentInform_LeaderTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 失 效 )
mess = Config . OrderCountermandInform_LeaderTip ;
else if ( order_jd . db_status = = SystemOrderStatus . 订 单 结 算 )
mess = Config . OrderSettlement_LeaderTip ;
}
}
break ;
default :
break ;
}
if ( ! ApiClient . Setting . SystemConfig . message_warning_switch & & ! string . IsNullOrEmpty ( e . Member . username ) & & ! string . IsNullOrWhiteSpace ( mess ) )
ApiClient . SendMessage ( robot_info , e . Member . username , new VariateReplace ( ) . CommonReplace ( mess , order_jd , e . Member , point ) . Replace ( "[下级昵称]" , e . Customer . realnick ) ) ;
}
}
else //多人查询通知消息
{
var querys = session . Find < queryhist_temp > ( "select robot_name,type,userid from fl_query_hist where itemid=@itemid and adzoneid = @adzoneid and userid > 0 and crt_time>@time and is_multiple=@is_multiple group by userid,type,robot_name" , new { itemid = order_jd . skuId , adzoneid = order_jd . positionId , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) , is_multiple = false } ) ;
if ( querys . Count > 0 )
{
for ( int i = 0 ; i < querys . Count ; i + + )
{
try
{
if ( querys [ i ] . type ! = CpsType . 京 东 联 盟 ) continue ;
//未绑定的数量
var unbound_count = int . Parse ( session . FindTable ( $"select count(id) as num from fl_order_jingdong where orderId = @orderId and db_userid != 0" , new { orderId = order_jd . orderId } ) . Rows [ 0 ] [ "num" ] . ToString ( ) ) ;
if ( unbound_count ! = 0 ) break ; //已经被绑定直接停止
var queryhist_temp = querys [ i ] ;
var userid = queryhist_temp . userid ;
var robot_name = queryhist_temp . robot_name ;
var robot_info = session . Find < fl_robot_info > ( "select * from fl_robot_info where name = @name" , new { name = robot_name } ) . FirstOrDefault ( ) ; //机器人类型应该是没有的,直接通过机器人name查询机器人信息
if ( robot_info ! = null )
{
Thread . Sleep ( 5000 ) ;
var wxbase = Chat . Framework . ChatClient . WXClient . Values . ToList ( ) . FirstOrDefault ( f = > f . WeixinHao = = robot_name ) ;
if ( wxbase ! = null /*&& wxbase.WeixinType == WeixinType.Grpc微信*/ & & wxbase . Status = = WxStatus . 在 线 )
{
var member = session . FindMemberInfoById ( userid ) ;
if ( member ! = null )
{
ApiClient . SendMessage ( robot_info , member . username , Config . LotUserQueryBindTip . Replace ( "[商品标题]" , order_jd . skuName ) ) ;
session . ExcuteSQL ( "update fl_query_hist set is_multiple = @is_multiple where itemid = @itemid and adzoneid = @adzoneid and robot_name = @robotname and userid = @userid" , new { is_multiple = true , itemid = order_jd . skuId , adzoneid = order_jd . positionId , robotname = robot_name , userid = member . id } ) ;
}
}
}
}
catch ( Exception )
{ }
}
}
}
}
}
catch ( Exception ex )
{
this . OnLog ( $"{ex.Message},{ex.StackTrace}" ) ;
}
}
private void SDK_ReciveIMEvent ( object sender , ReciveIMEvent e )
{
Compute compute = null ;
string goodName = string . Empty ;
try
{
//过滤表情xml和卡片xml
if ( ( e . Message . Contains ( @"<msg><emoji" ) | | e . Message . StartsWith ( "[声音=" ) ) & & ! e . Message . Contains ( @"点击链接,再选择浏览器咑閞" ) ) return ;
if ( ! OrderHelper . IsCurrentCpsMess ( e . Message , CpsType . 京 东 联 盟 ) ) return ;
var db = ApiClient . GetSession ( ) ;
var member = e . GetMemberinfo ( ) ;
#region 手 动 绑 定 订 单 号
if ( Regex . IsMatch ( e . Message . Trim ( ) , @"^\d{11,12}$" ) )
{
// int i = 0;
//Next:
var orderId = e . Message . Trim ( ) ; //订单号
var orders = db . Find < fl_order_jingdong > ( "select * from fl_order_jingdong where orderId = @orderId" , new { orderId = orderId } ) ;
var _order = orders . FirstOrDefault ( f = > f . db_userid ! = 0 & & f . db_userid ! = member . id ) ;
if ( _order ! = null )
{
e . SendMessage ( Config . OccupyOrderErrorTip . Replace ( "[订单号]" , orderId ) ) ;
return ;
}
if ( orders ! = null & & orders . Count ! = 0 )
{
var notices = new List < OrderNoticeEvent > ( ) ;
var downJingdongTimer = new DownJingdongTimer ( ) ;
#region 订 单 用 户 已 经 绑 定 纯 提 示 , 非 结 算 的 订 单 也 提 示 上 级
var bindOrders = orders . 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 ;
member = e . GetMemberinfo ( true ) ;
if ( order . db_status = = SystemOrderStatus . 订 单 付 款 )
e . SendMessage ( new VariateReplace ( ) . CommonReplace ( Config . OrderRepetBindTip , order , point , member ) ) ;
else
e . SendMessage ( _GetOrderStateMess ( order . db_status , ( order . db_status = = SystemOrderStatus . 订 单 结 算 ? SettleType . 已 结 算 提 示 : SettleType . 未 结 算 提 示 ) , order , member , point ) ) ;
Thread . Sleep ( 500 ) ;
}
}
#endregion
#region 订 单 没 有 被 绑 定 ( 两 种 情 况 = > 一 个 订 单 已 经 被 结 算 一 个 是 订 单 未 结 算 )
var notBindOrders = orders . Where ( f = > f . db_userid = = 0 ) . ToList ( ) ;
if ( notBindOrders ! = null & & notBindOrders . Count ! = 0 )
{
if ( notBindOrders [ 0 ] . orderTime < ApiClient . Setting . SystemConfig . allow_bind_create_order_time )
{
e . SendMessage ( $"订单:{orderId},已经过了有效绑定时间!" ) ;
return ;
}
foreach ( var order in notBindOrders )
{
if ( order . db_status = = SystemOrderStatus . 订 单 结 算 )
order . db_endtime = DateTime . Now . AddMinutes ( - 5 ) ; //重新结算的话,需要将订单的冻结时间重新赋值,让后台处理
//没有绑定用户的订单进行绑定
order . db_userid = member . id ;
order . db_robotname = e . RobotName ;
order . db_robottype = e . RobotInfo . type ;
order . msg_groupid = e . Groupid ;
#region 手 动 绑 定 , 重 新 计 算 用 户 的 返 利 积 分
//查询历史查询比例
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 = member . id , itemid = order . skuId , adzoneid = order . positionId } ) ;
//计算公式不为空
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 . 京 东 联 盟
} ;
LogHelper . GetSingleObj ( ) . Error ( "历史查询记录5" , JsonConvert . SerializeObject ( queryRatioHist ) ) ;
db . SaveOrUpdate ( queryRatioHist ) ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( "京东计算" , $"获取历史查询比异常:{ex.Message}" ) ;
}
}
}
ItemPoint itempoint = null ;
//计算的佣金
if ( compute ! = null )
itempoint = db . FindItemPoint ( CpsType . 京 东 联 盟 , compute , order . actualFee = = 0 ? order . estimateFee : order . actualFee , ( int ) order . skuNum ) ;
else
itempoint = db . FindItemPoint ( member , order . actualFee = = 0 ? order . estimateFee : order . actualFee , ( int ) order . skuNum , CpsType . 京 东 联 盟 ) ;
if ( itempoint ! = null )
{
order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
order . db_userpoint = itempoint . UserPoint ;
}
#endregion
if ( member ! = null )
{
member . bind_order + + ;
member = db . UpdateMemberGroup ( member ) ;
}
#region 首 次 付 款 时 间
var record = db . FindStatisticsRecord ( member . id ) ;
if ( record = = null )
{
record = new fl_statistics_record ( ) { uid = member . id , ex2 = 0 , ex4 = HttpExtend . GetTimeStamp ( DateTime . Now ) , ex5 = HttpExtend . GetTimeStamp ( order . orderTime ) } ;
db . Saveable < fl_statistics_record > ( record ) . ExecuteCommand ( ) ;
}
else
{
if ( record . ex2 = = 0 & & record . ex4 = = 0 )
record . ex4 = HttpExtend . GetTimeStamp ( DateTime . Now ) ;
record . ex5 = HttpExtend . GetTimeStamp ( order . orderTime ) ;
db . Saveable < fl_statistics_record > ( record ) . ExecuteCommand ( ) ;
}
#endregion
db . SaveOrUpdate ( order ) ;
downJingdongTimer . UpdateOrder ( order , db , notices , 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
//SDK_OrderNoticeEvent(this, item);
}
}
#endregion
e . Cancel = true ;
}
else
{
e . SendMessage ( 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 = member . id } ) . ExecuteCommand ( ) ;
db . FindBindCache ( orderId , true ) ;
}
e . Cancel = true ;
return ;
}
}
if ( OrderHelper . IsOrderId ( e . Message . Trim ( ) ) )
return ;
#endregion
compute = null ;
#region 查 询 宝 贝
var jdinfoTemps = db . FindJdInfoTempGroups ( ) ;
var jdInfoTemp = jdinfoTemps . FirstOrDefault ( f = > f . name = = e . RobotInfo . name & & f . onoff = = false ) ;
if ( jdInfoTemp ! = null )
{
#region 京 东 解 析 商 品 图 片
string QRCodeUrl = string . Empty ;
if ( Config . QRCodeSearchSwitch = = SwitchType . 开 启 )
{
var reg_ = Regex . Match ( e . Message , @"\[图片=(?<二维码图片>.+?)\]" ) ;
if ( reg_ . Success )
QRCodeUrl = Util . DecodeQRCode ( reg_ . Groups [ "二维码图片" ] . Value ) ; //解析的二维码图片所得到的二维码内容
}
#endregion
var itemId = JDHelper . GetJingdongItemId ( string . IsNullOrEmpty ( QRCodeUrl ) ? e . Message : QRCodeUrl ) ; //匹配京东链接获取京东宝贝ID
//this.OnLog($"京东商品编码:{itemId}");
if ( ! string . IsNullOrEmpty ( itemId ) )
{
JingdongApi api = null ;
fl_cps_member jd_cps = null ;
var pid = string . Empty ;
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 ;
jd_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 = = member . id ) ;
if ( memberAdzone ! = null & & ! string . IsNullOrWhiteSpace ( memberAdzone . adzone_pid ) ) //私人推广位
{
pid = memberAdzone . adzone_pid ;
jd_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 京 东 联 盟 & & f . username = = memberAdzone . adzone_pid_cps_name ) ;
isDefault = false ;
}
}
if ( isDefault ) //默认推广位
{
pid = ( member . buy_point > = Config . Point & & member . finish_order > = Config . OrderNum ) ? jdInfoTemp . pid_chief : jdInfoTemp . pid_deputy ;
jd_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 京 东 联 盟 & & f . username = = ( ( member . buy_point > = Config . Point & & member . finish_order > = Config . OrderNum ) ? jdInfoTemp . pid_chief_cps_name : jdInfoTemp . pid_deputy_cps_name ) ) ; //通过判断用户的购物积分,来判断用户使用哪个推广位
}
if ( jd_cps = = null ) { this . OnLog ( "京东联盟推广位异常,请检测后重试!" ) ; return ; }
api = new JingdongApi ( jd_cps ) ;
if ( ! ApiClient . Setting . SystemConfig . message_warning_switch )
e . SendMessage ( Config . SearchingTip ) ; //正在搜索提示
var goodInfoResult = api . SendJingdong ( "jd.union.open.goods.query" , new { goodsReqDTO = new { skuIds = new long [ ] { long . Parse ( itemId ) } } } ) ;
var goodData = goodInfoResult . ConvertToObj < goodInfo_temp > ( ) ;
if ( goodData . data = = null ) throw new Exception ( "京东无返利信息" ) ;
foreach ( Dictionary < string , object > _goodinfo in goodData . data )
{
var goodinfo = _goodinfo . ConvertToObj < GoodsResp > ( ) ;
goodName = goodinfo . skuName = goodinfo . skuName . Replace ( " " , "" ) . Replace ( "<" , "<" ) . Replace ( ">" , ">" ) . Replace ( "&" , "&" ) . Replace ( """ , "\"" ) . Replace ( " ©" , "©" ) ;
if ( goodinfo . commissionInfo . Count ! = 0 ) //有佣金
{
var isJdSale = goodinfo . isJdSale = = 0 ? false : true ; //是否已是京东自营
double price = double . Parse ( goodinfo . priceInfo [ "price" ] . ToString ( ) ) ; //商品价格
double lowestPrice = double . Parse ( goodinfo . priceInfo [ "lowestPrice" ] . ToString ( ) ) ; //商品促销价格
var commissionshare = decimal . Parse ( goodinfo . commissionInfo [ "commissionShare" ] . ToString ( ) ) / 100 m ; //普通用户佣金比例 ,通用接口中的佣金比例
#region 这 里 主 要 是 获 取 改 商 品 的 实 际 佣 金 比 例 , 上 面 的 佣 金 比 例 是 通 用 的 佣 金 比 例 , 会 不 准 一 些
try
{
var goodResult = api . SendJingdong ( "jd.union.open.goods.promotiongoodsinfo.query" , new { skuIds = itemId } ) ;
if ( goodResult ! = null & & goodResult . ContainsKey ( "data" ) )
{
var _goodData = goodResult [ "data" ] as ArrayList ;
if ( _goodData ! = null & & _goodData . Count ! = 0 )
{
foreach ( Dictionary < string , object > data in _goodData )
{
if ( data . ContainsKey ( "commisionRatioWl" ) )
{
commissionshare = decimal . Parse ( data [ "commisionRatioWl" ] . ToString ( ) ) / 100 m ; //接口中该商品的实际佣金,比较准一些,
break ;
}
}
}
}
}
catch ( Exception )
{ }
#endregion
#region plus用户的佣金比例 commissionshare_plus
// decimal commissionshare_plus = 0m; //plus会员佣金比例
// int i = 0;
//Next:
// try
// {
// var http = new HttpHelper();
// var item = new HttpItem();
// item.URL = @"https://union.jd.com/api/help/getCategoryCommiPlus?level=3&parentId= " + goodinfo.categoryInfo["cid2"].ToString();
// var reuslt = http.GetHtml(item);
// var jsonObj = HttpExtend.JsonToDictionary(reuslt.Html);
// if (jsonObj["code"].ToString() == "200")
// {
// if (jsonObj.ContainsKey("data"))
// {
// var cid3 = goodinfo.categoryInfo["cid3"].ToString();
// if (jsonObj.ContainsKey("data"))
// {
// var data = jsonObj["data"] as ArrayList;
// foreach (Dictionary<string, object> obj in data)
// {
// if (obj["id"].ToString() == cid3)
// {
// //goodinfo.owner //g=自营, p=pop
// if (goodinfo.owner == "g")
// commissionshare_plus = decimal.Parse(obj["selfMobileComm"].ToString());
// else
// commissionshare_plus = decimal.Parse(obj["popMobileComm"].ToString());
// commissionshare_plus = commissionshare_plus / 100;
// break;
// }
// }
// }
// }
// }
// }
// catch (Exception ex)
// {
// this.OnLog(ex.Message);
// if (i <= 2)
// {
// i++;
// goto Next;
// }
// }
#endregion
//原价的佣金
ItemPoint usecoupon_commfee = null ; //普通用户 用优惠券后积分信息
//ItemPoint usecoupon_commfee_plus = null;//plus用户 用优惠券后积分信息
//促销价的佣金
ItemPoint usecoupon_commfee_lowest = null ;
double discount = - 1 ; //优惠券金额
List < coupon > coupons = new List < coupon > ( ) ; //优惠券信息
if ( goodinfo . couponInfo . Count ! = 0 )
{
var couponList = goodinfo . couponInfo [ "couponList" ] as ArrayList ;
if ( couponList . Count ! = 0 ) //有优惠券
{
Compute compute0 = null ;
Compute compute_lowest = null ;
foreach ( Dictionary < string , object > coupon in couponList )
{
ItemPoint _usecoupon_commfee = null ;
//普通
{
var quota = double . Parse ( coupon [ "quota" ] . ToString ( ) ) ; //券消费限额
if ( quota < = price ) //break;//优惠券面额大于商品单价时终止
{
discount = double . Parse ( coupon [ "discount" ] . ToString ( ) ) ; //券面额
#region 普 通 用 户
decimal usecoupon_totalcommfee = decimal . Round ( ( ( decimal ) price - ( decimal ) discount ) * commissionshare , 2 ) ; //券后 总佣金(自营)
if ( ! isJdSale )
usecoupon_totalcommfee = decimal . Round ( usecoupon_totalcommfee * 0.9 m , 2 ) ; //券后 总佣金(非自营)
_usecoupon_commfee = db . FindItemPoint ( member , ( double ) usecoupon_totalcommfee , 1 , CpsType . 京 东 联 盟 , out compute0 ) ; //用券后 给用户的佣金
#endregion
#region plus用户
//var usecoupon_totalcommfee_plus = decimal.Round(((decimal)price - (decimal)discount) * commissionshare_plus, 2);//plus 券后 总佣金(自营)
//if (!isJdSale)
// usecoupon_totalcommfee_plus = decimal.Round(usecoupon_totalcommfee_plus * 0.9m,2);//券后 总佣金(非自营)
//usecoupon_commfee_plus = session.FindItemPoint(member, (double)usecoupon_totalcommfee_plus, 1, CpsType.京东联盟);//plus 用券后 给用户的佣金
#endregion
}
}
ItemPoint _usecoupon_commfee_lowest = null ;
//促销
{
var quota = double . Parse ( coupon [ "quota" ] . ToString ( ) ) ; //券消费限额
if ( quota < = lowestPrice ) //break;//优惠券面额大于商品单价时终止
{
discount = double . Parse ( coupon [ "discount" ] . ToString ( ) ) ; //券面额
#region 普 通 用 户
decimal usecoupon_totalcommfee = decimal . Round ( ( ( decimal ) lowestPrice - ( decimal ) discount ) * commissionshare , 2 ) ; //券后 总佣金(自营)
if ( ! isJdSale )
usecoupon_totalcommfee = decimal . Round ( usecoupon_totalcommfee * 0.9 m , 2 ) ; //券后 总佣金(非自营)
_usecoupon_commfee_lowest = db . FindItemPoint ( member , ( double ) usecoupon_totalcommfee , 1 , CpsType . 京 东 联 盟 , out compute_lowest ) ; //用券后 给用户的佣金
#endregion
}
}
if ( _usecoupon_commfee_lowest ! = null | | _usecoupon_commfee ! = null )
{
coupons . Add ( new Class1 . coupon ( ) { couponlike = coupon [ "link" ] . ToString ( ) , discount = discount , isBest = int . Parse ( coupon [ "isBest" ] . ToString ( ) ) , usecoupon_commfee = _usecoupon_commfee , usecoupon_commfee_lowest = _usecoupon_commfee_lowest , compute_lowest = compute_lowest , compute = compute0 } ) ;
}
}
}
}
var buyshorturl = string . Empty ; //转连后的地址
#region 转 连 ( 生 成 自 己 推 广 的 链 接 [ 有 券 链 接 ( 二 合 一 ) 或 无 券 链 接 ] )
Dictionary < string , object > conversionlinkresult = null ; //查询到的转换链接对象
var positionId = pid . Substring ( pid . LastIndexOf ( "_" ) + 1 ) ;
//var custom = $"p_{positionId}_r_{e.RobotName}_u_{e.GetMemberinfo().username}_gid_{itemId}";
if ( coupons . Count ! = 0 )
{
coupons = coupons . OrderByDescending ( s = > s . isBest ) . ToList < coupon > ( ) ;
for ( int i = 0 ; i < coupons . Count ; i + + )
{
try
{
conversionlinkresult = api . SendJingdong ( "jd.union.open.promotion.byunionid.get" , new { promotionCodeReq = new { materialId = $@"https://item.m.jd.com/product/{itemId}.html" , positionId = positionId , unionId = jd_cps . usernick , couponUrl = coupons [ i ] . couponlike , chainType = 3 /*, subUnionId = custom*/ } } ) ;
discount = coupons [ i ] . discount ;
usecoupon_commfee = coupons [ i ] . usecoupon_commfee ;
usecoupon_commfee_lowest = coupons [ i ] . usecoupon_commfee ;
compute = coupons [ i ] . compute ? ? coupons [ i ] . compute_lowest ;
break ;
}
catch ( Exception ex )
{
discount = - 1 ;
conversionlinkresult = null ;
compute = null ;
continue ;
}
}
}
if ( coupons . Count = = 0 | | conversionlinkresult = = null )
{
conversionlinkresult = api . SendJingdong ( "jd.union.open.promotion.byunionid.get" , new { promotionCodeReq = new { materialId = $@"https://item.m.jd.com/product/{itemId}.html" , positionId = positionId , unionId = jd_cps . usernick , chainType = 3 /*, subUnionId = custom*/ } } ) ; //宝贝id 和 用户的目标推客的联盟id
}
if ( conversionlinkresult ! = null )
{
#region 通 过 宝 贝 id查询接口返回的json样式 #
/ *
//没有返利的样式
{
result : {
apicodeenum : "user_unionid_err" ,
code : 411 ,
message : "unionid不正确, 请检查unionid是否正确" ,
requestid : "21922_0b12a2ef_jul5xdgr_4036450"
} ,
code : "0"
}
//有返利的样式
{
result : {
code : 200 ,
data : {
shorturl : "https://u.jd.com/q6xkht"
} ,
message : "success" ,
requestid : "21922_0ab504e9_jul5xy3v_4135009"
} ,
code : "0"
}
* /
#endregion
if ( conversionlinkresult [ "code" ] . ToString ( ) ! = "200" ) throw new Exception ( $"京东查询接口调用失败:{conversionlinkresult[" message "].ToString()}" ) ; //抛出错误信息
if ( conversionlinkresult . ContainsKey ( "data" ) )
{
var data = conversionlinkresult [ "data" ] as Dictionary < string , object > ;
if ( data . ContainsKey ( "shortURL" ) ) buyshorturl = data [ "shortURL" ] . ToString ( ) ; //购买短连接
}
if ( string . IsNullOrWhiteSpace ( buyshorturl ) ) throw new Exception ( "京东转链失败,请稍后重试" ) ;
}
#endregion
#region 普 通 用 户
Compute computeTmp = null ;
//不用券 佣金
var unusecoupon_totalcommfee = decimal . Round ( ( decimal ) price * commissionshare , 2 ) ; //券后 总佣金(自营)
if ( ! isJdSale )
unusecoupon_totalcommfee = decimal . Round ( unusecoupon_totalcommfee * 0.9 m , 2 ) ; //券后 总佣金(非自营)
//不用券 给用户的佣金
var unusecoupon_commfee = db . FindItemPoint ( member , ( double ) unusecoupon_totalcommfee , 1 , CpsType . 京 东 联 盟 , out computeTmp ) ;
if ( compute = = null )
compute = computeTmp ;
#endregion
#region 促 销 用 户
//不用券 佣金
var unusecoupon_totalcommfee_lowest = decimal . Round ( ( decimal ) lowestPrice * commissionshare , 2 ) ; //券后 总佣金(自营)
if ( ! isJdSale )
unusecoupon_totalcommfee_lowest = decimal . Round ( unusecoupon_totalcommfee_lowest * 0.9 m , 2 ) ; //券后 总佣金(非自营)
//不用券 给用户的佣金
var unusecoupon_commfee_lowest = db . FindItemPoint ( member , ( double ) unusecoupon_totalcommfee_lowest , 1 , CpsType . 京 东 联 盟 , out computeTmp ) ;
if ( compute = = null )
compute = computeTmp ;
#endregion
#region Plus用户
//plus 不用券 佣金
//var unusecoupon_totalcommfee_plus = decimal.Round((decimal)price * commissionshare_plus, 2);//券后 总佣金(自营)
//if (!isJdSale)
// unusecoupon_totalcommfee_plus = decimal.Round(unusecoupon_totalcommfee_plus * 0.9m,2);//券后 总佣金(非自营)
//plus 不用券 给用户的佣金
//var unusecoupon_commfee_plus = session.FindItemPoint(member, (double)unusecoupon_totalcommfee_plus, 1, CpsType.京东联盟);
#endregion
var imageList = goodinfo . imageInfo [ "imageList" ] as ArrayList ;
string imageUrl = string . Empty ;
if ( imageList . Count > 0 )
imageUrl = ( imageList [ 0 ] as Dictionary < string , object > ) [ "url" ] . ToString ( ) ; //宝贝主图
if ( discount ! = - 1 ) //有券的情况
{
var mess = string . Empty ;
if ( e . ChatType = = ChatType . 微 信 | | e . ChatType = = ChatType . 企 业 微 信 | | ( e . ChatType = = ChatType . QQ & & string . IsNullOrWhiteSpace ( Config . QQSearchSuccessWithCouponTip ) ) )
mess = Config . SearchSuccessWithCouponTip ;
else
mess = Config . QQSearchSuccessWithCouponTip ;
e . SendMessage ( mess
. Replace ( "劵" , "券" )
. Replace ( "[商品标题]" , goodinfo . skuName )
. Replace ( "[商品原价]" , goodinfo . priceInfo [ "price" ] . ToString ( ) )
. Replace ( "[商品主图]" , $"[图片={imageUrl}]" )
. Replace ( "[图片地址]" , imageUrl )
. Replace ( "[月销量]" , goodinfo . inOrderCount30Days . ToString ( ) )
. Replace ( "[券后返利]" , usecoupon_commfee . UserPoint . ToString ( ) )
. Replace ( "[弃券返利]" , unusecoupon_commfee . UserPoint . ToString ( ) )
//.Replace("[会员券后返利]", usecoupon_commfee_plus.UserPoint.ToString())
//.Replace("[会员弃券返利]", unusecoupon_commfee_plus.UserPoint.ToString())
. Replace ( "[券后价]" , ( ( decimal ) price - ( decimal ) discount ) . ToString ( ) )
. Replace ( "[优惠券金额]" , string . Format ( "{0:F}" , discount ) )
. Replace ( "[购买地址]" , buyshorturl )
. Replace ( "[共节省]" , ( ( decimal ) discount + ( decimal ) usecoupon_commfee . UserPoint ) . ToString ( ) )
. Replace ( "[商品促销价]" , string . Format ( "{0:F}" , lowestPrice ) )
. Replace ( "[促销价返利]" , ( ( decimal ) usecoupon_commfee_lowest . UserPoint ) . ToString ( ) )
. Replace ( "[促销券后价]" , ( ( decimal ) lowestPrice - ( decimal ) discount ) . ToString ( ) )
. Replace ( "[促销共节省]" , ( usecoupon_commfee_lowest = = null ? ( ( decimal ) discount + ( decimal ) usecoupon_commfee . UserPoint ) . ToString ( ) : ( ( decimal ) discount + ( decimal ) usecoupon_commfee_lowest . UserPoint ) . ToString ( ) ) )
. Replace ( "[商品图片]" , mess . Contains ( "[商品图片]" ) ? "[图片=" + ApiClient . GetQRImage ( goodinfo . skuName , price . ToString ( ) , discount . ToString ( ) , ( ( decimal ) price - ( decimal ) discount ) . ToString ( ) , imageUrl , buyshorturl , ApiClient . QrImageType . 模 板 B , CpsType . 京 东 联 盟 ) + "]" : string . Empty ) ) ;
}
else
{
var mess = string . Empty ;
if ( e . ChatType = = ChatType . 微 信 | | e . ChatType = = ChatType . 企 业 微 信 | | ( e . ChatType = = ChatType . QQ & & string . IsNullOrWhiteSpace ( Config . QQSearchSuccessWithoutCouponTip ) ) )
mess = Config . SearchSuccessWithoutCouponTip ;
else
mess = Config . QQSearchSuccessWithoutCouponTip ;
e . SendMessage ( mess . Replace ( "[商品标题]" , goodinfo . skuName )
. Replace ( "[商品原价]" , goodinfo . priceInfo [ "price" ] . ToString ( ) )
. Replace ( "[商品主图]" , $"[图片={imageUrl}]" )
. Replace ( "[图片地址]" , imageUrl )
. Replace ( "[月销量]" , goodinfo . inOrderCount30Days . ToString ( ) )
. Replace ( "[返利积分]" , string . Format ( "{0:F}" , unusecoupon_commfee . UserPoint ) )
//.Replace("[会员返利积分]", (unusecoupon_commfee_plus.UserPoint).ToString())
. Replace ( "[购买地址]" , buyshorturl )
. Replace ( "[共节省]" , string . Format ( "{0:F}" , unusecoupon_commfee . UserPoint ) )
. Replace ( "[商品促销价]" , string . Format ( "{0:F}" , lowestPrice ) )
. Replace ( "[促销价返利]" , ( ( decimal ) unusecoupon_commfee_lowest . UserPoint ) . ToString ( ) )
. Replace ( "[商品图片]" , mess . Contains ( "[商品图片]" ) ? "[图片=" + ApiClient . GetQRImage ( goodinfo . skuName , price . ToString ( ) , "0" , price . ToString ( ) , imageUrl , buyshorturl , ApiClient . QrImageType . 模 板 B , CpsType . 京 东 联 盟 ) + "]" : string . Empty )
) ;
}
#region 记 录 用 户 信 息 , 宝 贝 信 息 , 平 台 信 息 , 查 询 时 间 等
db . Insertable ( new fl_query_hist ( )
{
crt_time = DateTime . Now ,
type = CpsType . 京 东 联 盟 ,
itemid = itemId ,
groupid = e . Groupid ,
robot_name = e . RobotName ,
robot_type = e . ChatType ,
userid = member . id ,
title = goodinfo . skuName ,
adzoneid = positionId ,
compute_configdic = compute = = null ? string . Empty : JsonConvert . SerializeObject ( compute )
} ) . ExecuteCommand ( ) ;
db . UpdateRecord ( member . id ) ;
var shared = new Dictionary < string , object > ( ) ;
shared [ "msg_type" ] = "查询宝贝" ;
shared [ "cps_type" ] = CpsType . 京 东 联 盟 ;
shared [ "msg_username" ] = member . username ;
shared [ "price" ] = string . Format ( "{0:F}" , lowestPrice ) ;
shared [ "title" ] = goodName ;
shared [ "coupon_price" ] = string . Format ( "{0:F}" , ( discount ! = - 1 ? discount : 0 ) ) ;
shared [ "user_point" ] = discount ! = - 1 ? string . Format ( "{0:F}" , usecoupon_commfee_lowest . UserPoint ) : string . Format ( "{0:F}" , unusecoupon_commfee_lowest . UserPoint ) ;
shared [ "economize" ] = string . Format ( "{0:F}" , ( discount ! = - 1 ? ( usecoupon_commfee_lowest = = null ? ( ( decimal ) discount + ( decimal ) usecoupon_commfee . UserPoint ) : ( ( decimal ) discount + ( decimal ) usecoupon_commfee_lowest . UserPoint ) ) : ( decimal ) unusecoupon_commfee_lowest . UserPoint ) ) ;
var sharedEvent = new SharedEvents ( shared ) ;
EventClient . OnEvent ( sender , sharedEvent ) ;
#endregion
}
}
}
}
#endregion
}
catch ( Exception ex )
{
if ( ex . Message . Contains ( "商品不在推广中" ) | | ex . Message . StartsWith ( "京东" ) ) //自己抛出的错误,以京东开头
{
e . SendMessage ( Config . SearchNoCommissionTip ) ; //提示没有返利提示
var session = ApiClient . GetSession ( ) ;
session . UpdateRecord ( e . GetMemberinfo ( ) . id ) ;
var shared = new Dictionary < string , object > ( ) ;
shared [ "msg_type" ] = "查询宝贝" ;
shared [ "cps_type" ] = CpsType . 京 东 联 盟 ;
shared [ "msg_username" ] = e . GetMemberinfo ( ) . username ;
shared [ "price" ] = "未知" ;
shared [ "title" ] = goodName ;
shared [ "coupon_price" ] = "未知" ;
shared [ "user_point" ] = "未知" ;
shared [ "economize" ] = "未知" ;
var sharedEvent = new SharedEvents ( shared ) ;
EventClient . OnEvent ( sender , sharedEvent ) ;
return ;
}
this . OnLog ( $"{ex.Message},{ex.StackTrace}" ) ;
e . SendMessage ( ApiClient . Setting . SystemConfig . msg_error ) ;
}
}
/// <summary>
/// 订单状态 提示语替换
/// </summary>
/// <param name="order"></param>
/// <param name="objs"></param>
/// <returns></returns>
private string _GetOrderStateMess ( SystemOrderStatus order , SettleType settle , params object [ ] objs )
{
var mess = string . Empty ;
switch ( order )
{
case SystemOrderStatus . 订 单 付 款 :
mess = new VariateReplace ( ) . CommonReplace ( Config . OrderPaymentTip , objs ) ;
break ;
case SystemOrderStatus . 订 单 失 效 :
mess = new VariateReplace ( ) . CommonReplace ( Config . OrderFailureTip , objs ) ;
break ;
case SystemOrderStatus . 全 额 退 款 :
mess = new VariateReplace ( ) . CommonReplace ( Config . OrderFrozen_AllTip , objs ) ;
break ;
case SystemOrderStatus . 订 单 维 权 中 :
mess = new VariateReplace ( ) . CommonReplace ( Config . OrderRefundTip , objs ) ;
break ;
case SystemOrderStatus . 订 单 结 算 :
mess = new VariateReplace ( ) . CommonReplace ( settle = = SettleType . 未 结 算 提 示 ? Config . OrderSettlementTip : Config . OrderAlreadySettlementTip , objs ) ;
break ;
case SystemOrderStatus . 订 单 冻 结 :
mess = new VariateReplace ( ) . CommonReplace ( Config . OrderFreezeTip , objs ) ;
break ;
}
return mess ;
}
private class coupon
{
//优惠券链接
public string couponlike { get ; set ; }
//券面额
public double discount { get ; set ; }
//最优优惠券, 1: 是; 0: 否
public int isBest { get ; set ; }
//分出佣金积分信息
public ItemPoint usecoupon_commfee { get ; set ; }
/// <summary>
/// 促销分出佣金积分信息
/// </summary>
public ItemPoint usecoupon_commfee_lowest { get ; set ; }
/// <summary>
/// 计算佣金的比例数据
/// </summary>
public Compute compute { get ; set ; }
/// <summary>
/// 促销计算佣金的比例数据
/// </summary>
public Compute compute_lowest { get ; set ; }
}
}
}