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(); // 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) { 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(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("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("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(@"("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(); 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(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("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(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(record).ExecuteCommand(); } else { if (record.ex2 == 0 && record.ex4 == 0) record.ex4 = HttpExtend.GetTimeStamp(DateTime.Now); record.ex5 = HttpExtend.GetTimeStamp(order.orderTime); db.Saveable(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() 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(); if (goodData.data == null) throw new Exception("京东无返利信息"); foreach (Dictionary _goodinfo in goodData.data) { var goodinfo = _goodinfo.ConvertToObj(); 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()) / 100m;//普通用户佣金比例 ,通用接口中的佣金比例 #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 data in _goodData) { if (data.ContainsKey("commisionRatioWl")) { commissionshare = decimal.Parse(data["commisionRatioWl"].ToString()) / 100m; //接口中该商品的实际佣金,比较准一些, 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 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 coupons = new List();//优惠券信息 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 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.9m, 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.9m, 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 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(); 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; 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.9m, 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.9m, 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)["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(); 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(); 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); } } /// /// 订单状态 提示语替换 /// /// /// /// 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; } /// /// 促销分出佣金积分信息 /// public ItemPoint usecoupon_commfee_lowest { get; set; } /// /// 计算佣金的比例数据 /// public Compute compute { get; set; } /// /// 促销计算佣金的比例数据 /// public Compute compute_lowest { get; set; } } } }