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

248 lines
9.2 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 SetAfterSaleInfoStep : WxProductPublishStepBase
{
public override string Description => "设置售后信息";
protected override Task ExecuteProvider(WXPublishContext context, CancellationToken cancellationToken)
{
if (context.Progress != null)
{
Invoke(new Action(() =>
{
context.Progress.Report("正在选取售后属性");
}));
}
// 非上海仓退货
if (!context.Parameters.IsUseShanghaiReturnOrderAddress)
{
var afterSaleAddress = "";
var afterSaleDetail = "";
// 厂商直采获取售后地址用于处理售后单
if (context.Product.ProductGetTypeText == "厂商直采")
{
var urlAfterSale = BaseClass.BuildObjString("product/wx_get_after_sale");
var dataAfterSale = Work.UserLogin.GetSignaturex();
if (!string.IsNullOrEmpty(context.Product.RealCoid))
dataAfterSale += "&coid=" + context.Product.SkcId + "->" + context.Product.RealCoid;
else
dataAfterSale += "&coid=" + context.Product.SkcId;
var htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
if (string.IsNullOrEmpty(htmlAfterSale) || !htmlAfterSale.Contains("\"code\":200"))
htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
if (string.IsNullOrEmpty(htmlAfterSale) || !htmlAfterSale.Contains("\"code\":200"))
{
}
else
{
if (htmlAfterSale.Contains("\"data\":\"\""))
{
}
else
{
try
{
afterSaleAddress = JsonHelper.SerializeObject(JsonHelper.JObjectParse(htmlAfterSale)["data"]);
}
catch
{
}
}
}
//{"address_id":null,"user_name":"退货","postal_code":null,"province_name":"广东省","city_name":"揭阳市","county_name":"榕城区","street_name":"东兴街道","detail_info":"建阳路万泰华庭二期对面眼镜","tel_number":"13024622251","number":"10431013","name":"麦多多供应链"}
//{"address_id":null,"user_name":"退货","postal_code":null,"province_name":"广东省","city_name":"揭阳市","county_name":"榕城区","street_name":"东兴街道","detail_info":"建阳路万泰华庭二期对面眼镜","tel_number":"13024622251","number":"10431013","name":"麦多多供应链"}
if (string.IsNullOrEmpty(afterSaleAddress))
{
// 获取推单售后地址
var urlAfter = BaseClass.BuildObjString("product/e57_after_sale");
var dataAfter = Work.UserLogin.GetSignaturex() + "&coid=" + context.Product.SkcId;
var afterRst = GetHtml.PostUtf8(urlAfter, dataAfter);
try
{
afterSaleAddress = JsonHelper.SerializeObject(JsonHelper.JObjectParse(afterRst)["data"]);
if (afterRst.Contains("\"code\":0") && !string.IsNullOrEmpty(afterSaleAddress))
{
urlAfterSale = BaseClass.BuildObjString("product/wx_add_mdy_after_sale");
dataAfterSale = Work.UserLogin.GetSignaturex() +
"&coid=" + context.Product.SkcId +
"&after_sale_json=" + afterSaleAddress;
htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
if (string.IsNullOrEmpty(htmlAfterSale) || !htmlAfterSale.Contains("\"code\":200"))
htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
}
}
catch (Exception ex)
{
}
}
if (string.IsNullOrEmpty(afterSaleAddress))
{
throw new Exception("售后地址信息获取失败");
}
}
// 官方库1688厂家数据必须有退货地址才能上传,用户自采数据使用店铺或默认退货地址 26.5.29
// 官方库暂时也放开限制可以随意传 26.5.31
else if (context.Product.ProductGetTypeText == "1688厂家" && context.Product.AddUserName == "admin" && 1 == 2)
{
var urlAfterSale = BaseClass.BuildObjString("product/wx_get_after_sale");
var dataAfterSale = Work.UserLogin.GetSignaturex();
dataAfterSale += "&coid=" + context.Product.FromShopId;
var htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
if (string.IsNullOrEmpty(htmlAfterSale) || !htmlAfterSale.Contains("\"code\":200"))
htmlAfterSale = GetHtml.PostUtf8(urlAfterSale, dataAfterSale);
if (string.IsNullOrEmpty(htmlAfterSale) || !htmlAfterSale.Contains("\"code\":200"))
{
}
else
{
if (htmlAfterSale.Contains("\"data\":\"\""))
{
}
else
{
try
{
afterSaleAddress = JsonHelper.SerializeObject(JsonHelper.JObjectParse(htmlAfterSale)["data"]);
}
catch
{
}
}
}
if (string.IsNullOrEmpty(afterSaleAddress))
{
throw new Exception("售后地址信息获取失败");
}
}
else if (GlobalConfig.GlobalSettings.IsWxUseSoftwareDefaultAddress == true && !context.Parameters.IgnoreSoftwareDefaultAddressOnce)
{
if (GlobalConfig.WXShopDefaultAddressList.Any(a => a.shop_id == context.Parameters.Shop.ShopId))
{
// 界面操作已移除。
}
var address = GlobalConfig.WXShopDefaultAddressList.First(a => a.shop_id == context.Parameters.Shop.ShopId);
if (!address.isFullAddress)
throw new Exception("店铺地址信息获取失败");
afterSaleAddress = JsonHelper.SerializeObject(address);
}
if (!string.IsNullOrEmpty(afterSaleAddress))
{
afterSaleDetail = BaseRegex.GetStringJson(ref afterSaleAddress, "detail_info");
if (string.IsNullOrEmpty(afterSaleDetail))
{
throw new Exception("售后地址详细信息获取失败");
}
}
var addressRst = WXUpload.getAddress(context.Parameters.Shop, afterSaleDetail);
if (!addressRst.Contains("\"code\":0") && !addressRst.Contains("\"success\":true"))
{
var error = BaseRegex.GetStringJson(ref addressRst, "msg");
if (string.IsNullOrEmpty(error))
error = addressRst;
throw new Exception("售后地址获取失败 " + error);
}
if (addressRst.Contains("\"totalNum\":0") && !string.IsNullOrEmpty(afterSaleDetail))
{
string provinceName = BaseRegex.GetStringJson(ref afterSaleAddress, "province_name");
string cityName = BaseRegex.GetStringJson(ref afterSaleAddress, "city_name");
string countyName = BaseRegex.GetStringJson(ref afterSaleAddress, "county_name");
string detailInfo = afterSaleDetail;
string userName = BaseRegex.GetStringJson(ref afterSaleAddress, "user_name");
string telNumber = BaseRegex.GetStringJson(ref afterSaleAddress, "tel_number");
var addAddRst = WXUpload.addAddress(context.Parameters.Shop, provinceName, cityName, countyName, detailInfo, userName, telNumber);
Thread.Sleep(Randomx.GetId(500, 1000));
addressRst = WXUpload.getAddress(context.Parameters.Shop, afterSaleDetail);
if (!addressRst.Contains("\"code\":0") && !addressRst.Contains("\"success\":true"))
{
var error = BaseRegex.GetStringJson(ref addressRst, "msg");
if (string.IsNullOrEmpty(error))
error = addressRst;
throw new Exception("售后地址获取失败 " + error);
}
}
if (addressRst.Contains("\"totalNum\":0"))
{
throw new Exception("售后地址获取失败");
}
context.Parameters.ProductParameter.product.info.afterSaleInfo = new afterSaleInfoParam();
context.Parameters.ProductParameter.product.info.afterSaleInfo.afterSaleAddressId = BaseRegex.GetStringJson(ref addressRst, "addressId");
}
// 上海仓退货
else
{
try
{
string addressId = "";
string setAddressRst = WXProdNoCheckEditHelper.SetShanghaiReturnOrderAddress(context.Parameters.Shop);
if (setAddressRst.Contains("\"success\":true"))
{
addressId = WXProdNoCheckEditHelper.dicShopAddressId[context.Parameters.Shop.ShopId];
}
else
{
var errmsg = BaseRegex.GetStringJson(ref setAddressRst, "msg");
if (string.IsNullOrWhiteSpace(errmsg))
errmsg = setAddressRst;
WXProdNoCheckEditHelper.dicShopAddressId.Remove(context.Parameters.Shop.ShopId);
throw new Exception("退货地址指定失败:" + errmsg);
}
context.Parameters.ProductParameter.product.info.afterSaleInfo = new afterSaleInfoParam();
context.Parameters.ProductParameter.product.info.afterSaleInfo.afterSaleAddressId = addressId;
}
catch (Exception ex)
{
WXProdNoCheckEditHelper.dicShopAddressId.Remove(context.Parameters.Shop.ShopId);
throw new Exception("退货地址指定失败:" + ex.Message);
}
}
return Task.CompletedTask;
}
}