248 lines
9.2 KiB
C#
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;
|
|
}
|
|
}
|