102 lines
4.5 KiB
C#
102 lines
4.5 KiB
C#
using AllBase;
|
|
using AllBase.Extension;
|
|
using NaiBa.Util.Extension;
|
|
using AllBase.Helper;
|
|
using AllBase.Model.Config;
|
|
using AllBase.Model.DBModel;
|
|
using AllBase.Model.Param.WXParam;
|
|
using AllBase.Model.Result;
|
|
using AllBase.Model.Result.PDDResult;
|
|
using AllBase.Model.Result.WXResult;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using Store.Product.Models.PublishParameters.Wx;
|
|
using Store.Product.Publish;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Work;
|
|
|
|
namespace Store.Product.Publish.Steps.Wx;
|
|
/// <summary>
|
|
/// 由 WXDBProdUploadForm.UploadProduct 的“处理佣金上传”区段迁移。
|
|
/// TODO(迁移): 原区段中的 TEMUKJD/WXUpload/窗体服务引用需按 Store.Product 运行时适配逐项核对。
|
|
/// </summary>
|
|
public sealed class CommissionPreparationStep : WxProductPublishStepBase
|
|
{
|
|
public override string Description => "处理佣金上传";
|
|
|
|
protected override Task ExecuteProvider(WXPublishContext context, CancellationToken cancellationToken)
|
|
{
|
|
if (BaseClass.UserAuthority.Contains("佣金上货") && context.Parameters.IsCommissionUpload)
|
|
{
|
|
if (context.Product.SpecialProdType != "爆款数据" && context.Product.ProductGetTypeText != "微信小店")
|
|
throw new Exception("拥金上货失败:仅爆款微信小店数据支持佣金上传!");
|
|
|
|
var rst = WXApi.GetAndUpdateWebStatus(context.Shop.Cookie);
|
|
if (!rst.Html.Contains("\"isOpenLeague\":true"))
|
|
{
|
|
throw new Exception("拥金上货失败:需要开通优选联盟!");
|
|
}
|
|
|
|
var url = BaseClass.BuildObjString("product/wx_get_commission_rate");
|
|
var date = UserLogin.GetSignaturex();
|
|
date += "&spu_ids=" + context.Product.SpuId;
|
|
|
|
var prodCommissionRst = GetHtml.PostUtf8(url, date);
|
|
if (!prodCommissionRst.Contains("\"code\":200"))
|
|
{
|
|
var errMsg = BaseRegex.GetStringJsonByRegs(ref prodCommissionRst, prodCommissionRst, "msg");
|
|
throw new Exception("拥金上货失败:" + errMsg);
|
|
}
|
|
context.Parameters.FromCommissionRate = BaseRegex.GetStringJson(ref prodCommissionRst, "commission_rate").ParseToNullableInt();
|
|
if (context.Parameters.FromCommissionRate == null)
|
|
context.Parameters.FromCommissionRate = -1;
|
|
if (prodCommissionRst.Contains("\"data\":[]") || BaseRegex.GetStringJson(ref prodCommissionRst, "mdy_time").ParseToString().ParseToDateTime() < DateTime.Now.AddDays(-30))
|
|
{
|
|
var assistantShop = new ShopLoginInfo();
|
|
assistantShop.Cookies = "[]";
|
|
var result = WXApi.wxGetAssistant(context.Parameters.Shop.Cookies, context.Product.SpuId);
|
|
if (result.Html.Contains("mcn magic invalid"))
|
|
throw new Exception("拥金上货失败:请先登录上货助手");
|
|
var resultHtml = result.Html;
|
|
context.Parameters.FromCommissionRate = BaseRegex.GetStringJson(ref resultHtml, "commissionRate").ParseToNullableInt();
|
|
var prodName = BaseRegex.GetStringJson(ref resultHtml, "name");
|
|
if (context.Parameters.FromCommissionRate == null)
|
|
context.Parameters.FromCommissionRate = -1;
|
|
if (prodName.IsNullOrEmpty())
|
|
prodName = context.Product.Title;
|
|
//if (fromCommissionRate != null && !string.IsNullOrEmpty(prodName))
|
|
{
|
|
url = BaseClass.BuildObjString("product/wx_add_mdy_commission_rate");
|
|
date = UserLogin.GetSignaturex();
|
|
date += "&spu_id=" + context.Product.SpuId;
|
|
date += "&commission_rate=" + context.Parameters.FromCommissionRate;
|
|
date += "&product_name=" + prodName;
|
|
var addCommissionRateRst = GetHtml.PostUtf8(url, date);
|
|
}
|
|
}
|
|
Invoke(new Action(() =>
|
|
{
|
|
context.Parameters.MinCommissionRate = context.Parameters.CommissionMinPercent * 10000;
|
|
context.Parameters.MaxCommissionRate = context.Parameters.CommissionMaxPercent * 10000;
|
|
context.Parameters.CommissionRateChange = context.Parameters.CommissionChangePercent * 10000;
|
|
if (!context.Parameters.IsCommissionIncrease)
|
|
context.Parameters.CommissionRateChange = -context.Parameters.CommissionRateChange;
|
|
context.Parameters.CommissionRate = context.Parameters.FromCommissionRate.ParseToInt() + context.Parameters.CommissionRateChange;
|
|
}));
|
|
if (context.Parameters.FromCommissionRate < context.Parameters.MinCommissionRate || context.Parameters.FromCommissionRate > context.Parameters.MaxCommissionRate)
|
|
{
|
|
throw new Exception("拥金上货失败:原商品佣金比例 " + context.Parameters.FromCommissionRate * 0.0001 + "% 超过设置的佣金范围!");
|
|
}
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|