Files
KJD/Store.Product/Publish/Steps/Wx/CommissionPreparationStep.cs
T
2026-09-14 09:16:59 +08:00

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;
}
}