2022-09-20 03:10:29 +00:00
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 CsharpHttpHelper ;
using DYRebate.Entitys ;
using Newtonsoft.Json ;
using Newtonsoft.Json.Linq ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
using System.Text.RegularExpressions ;
using System.Threading ;
using System.Threading.Tasks ;
using Api.Framework.Utils ;
using static DYRebate . Class1 ;
namespace DYRebate
{
public class MessageOperation
{
private static List < string > AddMessUsernameList = new List < string > ( ) { "wxid_mjzeh4qj9hio22" , "wxid_lrf1mr7ond6622" , "wujiahua0876" , "wxid_2ufntuf4purl22" , "wxid_bua0te17il7i22" } ;
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
public bool AnalyseFanLi ( )
{
//计算公式
Compute compute = null ;
var memberTmp = e . GetMemberinfo ( ) ;
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 false ;
var message = e . Message . Trim ( ) ;
//推广位
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请求失败" ) ;
2022-12-28 09:10:01 +00:00
//var title = string.Empty;//商品标题
2022-09-20 03:10:29 +00:00
//判断消息中是否包含抖音链接信息
var promotion_id = string . Empty ; //促销id
//api.ConvertInstPickSource(e.Message);
//api.GetShareMaterial();
//var itemid = e.Message.Trim();
var itemid = api . GetDyGoodsID ( message , out promotion_id ) ;
#region 标 题 搜 索 和 商 品 id搜索
if ( string . IsNullOrEmpty ( itemid ) )
return false ;
if ( ! ApiClient . Setting . SystemConfig . message_warning_switch )
e . SendMessage ( Class1 . Config . SearchingTip ) ;
try
{
//屏蔽商品
if ( Class1 . Config . ItemIDRestrictList . Contains ( itemid ) )
{
e . SendMessage ( Class1 . Config . ItemIDRestrictTip . Replace ( "[商品ID]" , itemid ) ) ;
return true ;
}
var items = api . FindItemInfo ( itemid ) ;
if ( items = = null | | items . products = = null | | items . products . Count = = 0 )
throw new Exception ( "商品不存在" ) ;
var goods = items . products [ 0 ] ;
var shopUrl = string . Empty ;
ShareInfo extInfo = null ;
var isApiSharable = false ;
if ( Class1 . Config . AllRebateModelSwitch = = SwitchType . 开 启 )
{
if ( goods . sharable ! = "false" )
{
try
{
extInfo = api . ConvertUrl ( goods . detail_url , pid , $"{e.GetMemberinfo().username}" ) ;
isApiSharable = true ;
}
catch ( Exception )
{ }
}
}
2022-12-28 09:10:01 +00:00
//var rateTmp = 0m;
2022-09-20 03:10:29 +00:00
//if (goods.sharable == "false")//throw new Exception("商品未推广");
if ( ! isApiSharable ) //throw new Exception("商品未推广");
{
var key = $"{itemid}" ;
var value = Comm . GetCache ( key ) ;
if ( ! string . IsNullOrWhiteSpace ( value ) )
shopUrl = value ;
else
{
if ( string . IsNullOrWhiteSpace ( promotion_id ) )
throw new Exception ( "商品未推广" ) ;
isApiSharable = false ;
if ( ! api . BindGoods ( itemid , promotion_id ) )
{
throw new Exception ( "添加商品异常" ) ;
}
shopUrl = api . GetShopWindow_PromotionUrlToGoodsId ( itemid ) ;
if ( string . IsNullOrWhiteSpace ( shopUrl ) )
throw new Exception ( "未获取推广链接" ) ;
2022-12-28 09:10:01 +00:00
//var info = api.FindGoodsInfo(promotion_id);
//if (info != null)
// rateTmp = (decimal)info.data.cos_ratio / 10000m;
2022-09-20 03:10:29 +00:00
Comm . SetCache ( key , shopUrl , 15 * 60 ) ;
}
}
2022-12-28 09:10:01 +00:00
var title = string . Empty ;
2022-09-20 03:10:29 +00:00
//店铺名称
var nick = goods . shop_name ;
//商品主图
var pict_url = ! string . IsNullOrWhiteSpace ( goods . cover ) ? goods . cover : ( goods . imgs ! = null & & goods . imgs . Count ! = 0 ) ? goods . imgs [ 0 ] : string . Empty ;
2022-12-28 09:10:01 +00:00
////商品标题//< >&"© <, >, &, ",©;
//title = goods.title.Replace(" ", "").Replace("<", "<").Replace(">", ">").Replace("&", "&").Replace(""", "\"").Replace(" ©", "©");//这里有个看不见的字符,要将其替换掉
2022-09-20 03:10:29 +00:00
//原价
var price = decimal . Parse ( ( goods . price / 100 m ) . ToString ( ) ) ;
//减去技术费的总佣金(不用券)
var calcPrice = Math . Round ( ( price * 0.9 m ) , 2 , MidpointRounding . AwayFromZero ) ;
//30天销量
var volume = goods . sales ;
//佣金率
var commission_rate = ( decimal ) goods . cos_ratio / 100 m ;
2022-12-28 09:10:01 +00:00
//if (rateTmp != 0 && commission_rate != rateTmp)
// commission_rate = rateTmp;
2022-09-20 03:10:29 +00:00
//优惠券金额
var coupon_price = 0.00 m ;
#region xxx
//if (goods.sale_infos != null && goods.sale_infos.Count != 0)
//{
// var coupon_tmp = 0m;
// for (int i = 0; i < goods.sale_infos.Count; i++)
// {
// if (goods.sale_infos[i].title.Contains("减"))
// {
// var splitStrs = goods.sale_infos[i].title.Split(new string[] { "减" }, StringSplitOptions.RemoveEmptyEntries);
// if (splitStrs != null && splitStrs.Length == 2)
// {
// var now = decimal.Parse(splitStrs[0]);
// if (price >= now)
// {
// if (now > coupon_tmp)
// {
// coupon_tmp = now;
// coupon_price = decimal.Parse(splitStrs[1]);
// }
// }
// }
// }
// }
//}
#endregion
//券后价
var endPrice = ( decimal ) ( ( goods . coupon_price ? ? 0 ) / 100d ) ;
if ( endPrice ! = 0 )
{
if ( endPrice < price )
coupon_price = price - endPrice ;
}
//券后佣金
var useCalcPrice = endPrice * 0.9 m ;
//用券后 佣金
var useCoupon_totalCommFee = ( double ) Math . Round ( useCalcPrice * commission_rate , 2 ) ;
//用券后 给用户的佣金
var useCoupon_commFee = db . FindItemPoint ( memberTmp , useCoupon_totalCommFee , 1 , CpsType . 抖 音 联 盟 , out compute ) ;
Compute compute1 = null ;
//不用券 佣金
var unuseCoupon_totalCommFee = Math . Round ( calcPrice * commission_rate , 2 ) ;
//不用券 给用户的佣金
var unuseCoupon_commFee = db . FindItemPoint ( memberTmp , ( double ) unuseCoupon_totalCommFee , 1 , CpsType . 抖 音 联 盟 , out compute1 ) ;
if ( compute = = null )
compute = compute1 ;
LogHelper . GetSingleObj ( ) . Info ( "" , $"抖音佣金计算:券后价{useCoupon_totalCommFee},佣金:{useCalcPrice} ||| 无券价:{unuseCoupon_totalCommFee},佣金:{unuseCoupon_totalCommFee} @@ 佣金率:{commission_rate} => {itemid}" ) ;
// 获取短链接
//var shopShortLink = ApiClient.ShortURL(shopUrl, Class1.Config.Dwz_Type).Result;
//抖音缩短链接
var shopShortLink = string . Empty ;
//抖音口令
var password = string . Empty ;
if ( isApiSharable )
{
if ( extInfo = = null )
extInfo = api . ConvertUrl ( goods . detail_url , pid , $"{e.GetMemberinfo().username}" ) ;
if ( extInfo = = null )
throw new Exception ( "转链异常" ) ;
password = extInfo . dy_password ;
var reg = Regex . Match ( extInfo . dy_password , "(?<口令>[︽#]{2}[0-9a-zA-Z]{9,}[︽#]{2})" , RegexOptions . IgnoreCase | RegexOptions . Multiline ) ;
if ( reg . Success )
password = reg . Groups [ "口令" ] . ToString ( ) ;
}
else
{
2022-12-28 09:10:01 +00:00
password = DYHelperV2 . CreateKouling ( shopUrl ) ;
2022-09-20 03:10:29 +00:00
if ( ! string . IsNullOrWhiteSpace ( password ) )
{
2022-12-28 09:10:01 +00:00
shopShortLink = DYHelperV2 . ShortDyUrl ( shopUrl ) ;
2022-09-20 03:10:29 +00:00
shopUrl = string . Empty ;
}
else
{
2022-12-28 09:10:01 +00:00
shopShortLink = DYHelperV2 . ShortDyUrl ( shopUrl ) ;
2022-09-20 03:10:29 +00:00
}
//api.DelGoodsWindowUrl(promotion_id);
var pidhist = db . Queryable < fl_plugin_dy_pidhist > ( ) . First ( g = > g . cpsname = = api . Member . username & & g . pid = = promotion_id ) ;
if ( pidhist = = null )
pidhist = new fl_plugin_dy_pidhist ( ) { pid = promotion_id , cpsname = api . Member . username } ;
pidhist . expirestime = DateTime . Now . AddHours ( 1 ) ;
db . Saveable ( pidhist ) . ExecuteCommand ( ) ;
}
#region 正 常 订 单
//有券的情况
if ( coupon_price ! = 0 )
{
var mess = string . Empty ;
if ( e . ChatType = = ChatType . 微 信 | | e . ChatType = = ChatType . 企 业 微 信 | | ( e . ChatType = = ChatType . QQ & & string . IsNullOrWhiteSpace ( Class1 . Config . QQSearchSuccessWithCouponTip ) ) )
{
if ( ! string . IsNullOrWhiteSpace ( shopShortLink ) )
mess = Class1 . Config . SearchSuccessWithCouponTip ;
else
mess = Class1 . Config . SearchSuccessWithCouponTip_kl ;
}
else
{
if ( ! string . IsNullOrWhiteSpace ( shopShortLink ) )
mess = Class1 . Config . QQSearchSuccessWithCouponTip ;
else
mess = Class1 . Config . QQSearchSuccessWithCouponTip_kl ;
}
if ( AddMessUsernameList . Contains ( e . GetMemberinfo ( ) . username ) )
mess + = "[分段][延迟=1]" + shopUrl ;
e . SendMessage ( mess
. Replace ( "劵" , "券" )
. Replace ( "[商品标题]" , mess . Contains ( "<appmsg" ) ? title . Replace ( "<" , "" ) . Replace ( ">" , "" ) : title )
. Replace ( "[商品原价]" , string . Format ( "{0:F}" , price ) )
. Replace ( "[商品主图]" , $"[图片={pict_url}]" )
. Replace ( "[图片地址]" , pict_url )
. Replace ( "[月销量]" , volume . ToString ( ) )
. Replace ( "[店铺名称]" , nick )
. Replace ( "[券后返利]" , string . Format ( "{0:F}" , useCoupon_commFee . UserPoint ) )
. Replace ( "[弃券返利]" , string . Format ( "{0:F}" , unuseCoupon_commFee . UserPoint ) )
. Replace ( "[券后价]" , string . Format ( "{0:F}" , endPrice ) )
. Replace ( "[优惠券金额]" , coupon_price . ToString ( ) )
. Replace ( "[购买地址]" , shopShortLink )
. Replace ( "[购买口令]" , password . Replace ( "#" , "︽" ) )
. Replace ( "[共节省]" , ( ( decimal ) coupon_price + ( decimal ) useCoupon_commFee . UserPoint ) . ToString ( ) )
. Replace ( "[商品图片]" , mess . Contains ( "[商品图片]" ) ? "[图片=" + ApiClient . GetQRImage ( title , string . Format ( "{0:F}" , price ) , coupon_price . ToString ( ) , endPrice . ToString ( ) , pict_url , shopShortLink , ApiClient . QrImageType . 模 板 B , CpsType . 抖 音 联 盟 ) + "]" : string . Empty )
) ;
}
else //没有券的情况
{
var mess = string . Empty ;
if ( e . ChatType = = ChatType . 微 信 | | e . ChatType = = ChatType . 企 业 微 信 | | ( e . ChatType = = ChatType . QQ & & string . IsNullOrWhiteSpace ( Class1 . Config . QQSearchSuccessWithoutCouponTip ) ) )
{
if ( ! string . IsNullOrWhiteSpace ( shopShortLink ) )
mess = Class1 . Config . SearchSuccessWithoutCouponTip ;
else
mess = Class1 . Config . SearchSuccessWithoutCouponTip_kl ;
}
else
{
if ( ! string . IsNullOrWhiteSpace ( shopShortLink ) )
mess = Class1 . Config . QQSearchSuccessWithoutCouponTip ;
else
mess = Class1 . Config . QQSearchSuccessWithoutCouponTip_kl ;
}
if ( AddMessUsernameList . Contains ( e . GetMemberinfo ( ) . username ) )
mess + = "[分段][延迟=1]" + shopUrl ;
e . SendMessage ( mess
. Replace ( "[商品标题]" , mess . Contains ( "<appmsg" ) ? title . Replace ( "<" , "" ) . Replace ( ">" , "" ) : title )
. Replace ( "[商品原价]" , string . Format ( "{0:F}" , price ) )
. Replace ( "[商品主图]" , $"[图片={pict_url}]" )
. Replace ( "[图片地址]" , pict_url )
. Replace ( "[月销量]" , volume . ToString ( ) )
. Replace ( "[店铺名称]" , nick )
. Replace ( "[返利积分]" , string . Format ( "{0:F}" , unuseCoupon_commFee . UserPoint ) )
. Replace ( "[购买地址]" , shopShortLink )
. Replace ( "[购买口令]" , password . Replace ( "#" , "︽" ) )
. Replace ( "[共节省]" , string . Format ( "{0:F}" , useCoupon_commFee . UserPoint ) )
. Replace ( "[商品图片]" , mess . Contains ( "[商品图片]" ) ? "[图片=" + ApiClient . GetQRImage ( title , price . ToString ( ) , "0" , price . ToString ( ) , pict_url , shopShortLink , ApiClient . QrImageType . 模 板 B , CpsType . 抖 音 联 盟 ) + "]" : string . Empty )
) ;
}
#endregion
#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 = memberTmp . id ,
title = title ,
adzoneid = dy_cps . username ,
mallid = goods . shop_id . ToString ( ) ,
compute_configdic = compute = = null ? string . Empty : JsonConvert . SerializeObject ( compute )
} ) . ExecuteCommand ( ) ;
db . UpdateRecord ( memberTmp . id ) ;
var shared = new Dictionary < string , object > ( ) ;
shared [ "msg_type" ] = "查询宝贝" ;
shared [ "cps_type" ] = CpsType . 抖 音 联 盟 ;
shared [ "msg_username" ] = memberTmp . username ;
shared [ "price" ] = string . Format ( "{0:F}" , price ) ;
shared [ "title" ] = title ;
shared [ "coupon_price" ] = string . Format ( "{0:F}" , coupon_price ) ;
shared [ "user_point" ] = coupon_price ! = 0 ? string . Format ( "{0:F}" , useCoupon_commFee . UserPoint ) : string . Format ( "{0:F}" , unuseCoupon_commFee . UserPoint ) ;
shared [ "economize" ] = coupon_price ! = 0 ? string . Format ( "{0:F}" , ( ( decimal ) coupon_price + ( decimal ) useCoupon_commFee . UserPoint ) ) : string . Format ( "{0:F}" , useCoupon_commFee . UserPoint ) ;
var sharedEvent = new SharedEvents ( shared ) ;
EventClient . OnEvent ( sender , sharedEvent ) ;
#endregion
return true ;
}
catch ( Exception ex )
{
//{"code":90000,"err_no":7,"log_id":"202202271755520101330360171F8980A6","message":"商家已设置该商品仅指定作者可推广,请您更换其他商品","msg":"未知错误, 此错误会逐步细化明确, 请不要依赖sub_code或sub_msg做业务判断","sub_code":"isp.unknown-error","sub_msg":"1025:商家已设置该商品仅指定作者可推广,请您更换其他商品"}
if ( ex . Message . Contains ( "商品不存在" ) | | ex . Message . Contains ( "商品未推广" ) | | ex . Message . Contains ( "未获取推广链接" ) | | ex . Message . Contains ( "添加商品异常" ) | ex . Message . Contains ( "商家已设置该商品仅指定作者可推广" ) )
{
e . SendMessage ( Class1 . Config . SearchNoCommissionTip ) ; //未搜索到提示语
db . UpdateRecord ( memberTmp . id ) ;
var shared = new Dictionary < string , object > ( ) ;
shared [ "msg_type" ] = "查询宝贝" ;
shared [ "cps_type" ] = CpsType . 抖 音 联 盟 ;
shared [ "msg_username" ] = memberTmp . username ;
shared [ "price" ] = "未知" ;
shared [ "title" ] = message ;
shared [ "coupon_price" ] = "未知" ;
shared [ "user_point" ] = "未知" ;
shared [ "economize" ] = "未知" ;
var sharedEvent = new SharedEvents ( shared ) ;
EventClient . OnEvent ( sender , sharedEvent ) ;
}
else if ( ex . Message . Contains ( "转链异常" ) | | ex . Message . Contains ( "当前商品暂不支持站外分享" ) )
{
e . SendMessage ( Class1 . Config . SearchNoCommissionTip ) ; //未搜索到提示语
throw ex ;
}
else
throw ex ;
}
#endregion
}
catch ( Exception ex )
{
if ( ex . Message . Contains ( "商品不存在" ) | | ex . Message . Contains ( "商品未推广" ) | | ex . Message . Contains ( "商家已设置该商品仅指定作者可推广" ) )
{
e . SendMessage ( Class1 . Config . SearchNoCommissionTip ) ; //未搜索到提示语
ApiClient . GetSession ( ) . UpdateRecord ( memberTmp . id ) ;
var shared = new Dictionary < string , object > ( ) ;
shared [ "msg_type" ] = "查询宝贝" ;
shared [ "cps_type" ] = CpsType . 抖 音 联 盟 ;
shared [ "msg_username" ] = memberTmp . username ;
shared [ "price" ] = "未知" ;
shared [ "title" ] = "未知" ;
shared [ "coupon_price" ] = "未知" ;
shared [ "user_point" ] = "未知" ;
shared [ "economize" ] = "未知" ;
var sharedEvent = new SharedEvents ( shared ) ;
EventClient . OnEvent ( sender , sharedEvent ) ;
return true ;
}
if ( ex . Message . StartsWith ( "@" ) )
plugin . OnLog ( $"W : ({e.RobotInfo.nick}【{e.RobotInfo.name}】){ex.Message.Replace(" @", "")}" ) ;
else
plugin . OnLog ( $"W: ({e.RobotInfo.nick}【{e.RobotInfo.name}】){ex.Message} - {ex.StackTrace}" ) ;
plugin . OnLog ( ApiClient . Setting . SystemConfig . msg_error ) ;
}
return false ;
}
}
}