Files
KJD/Work/CostTemplateSet.cs
T
2025-06-29 19:38:31 +08:00

221 lines
14 KiB
C#

using AllBase;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Work.Api;
namespace Work
{
public class CostTemplateSet
{
public ShopChatBase Shop;
public static List<CostTemplate> costTemplateList = new List<CostTemplate>();
public static List<CostTemplate> costlateList = new List<CostTemplate>();
public void query()
{
costlateList.Clear();
costTemplateList.Clear();
string html = "";
if (!BaseClass.UseApiFirst)
{
string url = "https://mms.pinduoduo.com/express_inf/cost_template/get_list";
string refere = "https://mms.pinduoduo.com/Pdd.html";
string data = "{\"mallId\":" + Shop.MallId + ",\"pageNo\":1,\"pageSize\":10,\"sourceKey\":\"MMS\"}";
html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Shop.Cookies);
//var m = BaseRegex.GetMatchRegex(ref html, @"{[\s]*""costTemplateId"":[\s\S]+?""dispatchCost""[^}]+?}");
var m = BaseRegex.GetMatchRegex(ref html, @"{[\s]*""costTemplateId"":[\s\S]+?""noShipConfig""[\w\W]+?][\s]*}");
for (int j = 0; m != null && j < m.Count; j++)
{
string list = m[j].Groups[0].Value;
CostTemplate costTemplate = new CostTemplate();
costTemplate.shopName = Shop.ShopName;
costTemplate.costTemplateId = BaseRegex.GetLongJson(ref list, "costTemplateId");
costTemplate.costTemplateName = BaseRegex.GetStringJson(ref list, "costTemplateName");
costTemplate.costType = BaseRegex.GetIntJson(ref list, "costType");
costTemplate.provinceId = BaseRegex.GetIntJson(ref list, "provinceId");
costTemplate.cityId = BaseRegex.GetIntJson(ref list, "cityId");
costTemplate.districtId = BaseRegex.GetIntJson(ref list, "districtId");
costTemplate.templateItemId = BaseRegex.GetLongJson(ref list, "templateItemId");
costTemplate.updateTime = BaseRegex.GetLongJson(ref list, "updateTime");
var mcp = BaseRegex.GetMatchRegex(ref list, @"""dispatchFree"":{[\w\W]+?""dispatchCost""");
string mcpStr = mcp[0].Groups[0].Value;
var mc = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+?)}");
for (int k = 0; mc != null && k < mc.Count; k++)
{
int province = int.Parse(mc[k].Groups[1].Value);
costTemplate.provinceList.Add(province);
}
costTemplate.firstStandard = BaseRegex.GetIntJson(ref list, "firstStandard");
costTemplate.firstCost = BaseRegex.GetIntJson(ref list, "firstCost");
costTemplate.addStandard = BaseRegex.GetIntJson(ref list, "addStandard");
costTemplate.addCost = BaseRegex.GetIntJson(ref list, "addCost");
costTemplate.minCountForDeliveryFree = BaseRegex.GetIntJson(ref list, "minCountForDeliveryFree");
costTemplate.noShipReasonType = BaseRegex.GetIntJson(ref list, "noShipReasonType");
costTemplate.minAmountForDeliveryFree = BaseRegex.GetIntJson(ref list, "minAmountForDeliveryFree");
mc = BaseRegex.GetMatchRegex(ref list, @"""hasMinAmount"":([\w\W]+?),");
if (mc != null && mc.Count > 0)
costTemplate.hasMinAmount = mc[0].Groups[1].Value;
costTemplate.minText = "minCountForDeliveryFree";
costTemplate.buygood = costTemplate.minCountForDeliveryFree.ToString();
if (costTemplate.hasMinAmount == "true")
{
costTemplate.buygood = costTemplate.minAmountForDeliveryFree + "00";
costTemplate.minText = "minAmountForDeliveryFree";
}
mc = BaseRegex.GetMatchRegex(ref list, @"""areaList"":[{""province"":[\d]+?}],""firstStandard""");
for (int k = 0; mc != null && k < mc.Count; k++)
{
string item = mc[k].Groups[0].Value;
int province = BaseRegex.GetIntJson(ref item, "province");
costTemplate.payList.Add(province);
}
mc = BaseRegex.GetMatchRegex(ref list, @"""noShipConfig"":[[\w\W]+?]");
mcpStr = mc[0].Groups[0].Value;
var mcv = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+),""noShipReasonType"":[\d]+}");
for (int k = 0; mcv != null && k < mcv.Count; k++)
{
int province = int.Parse(mcv[k].Groups[1].Value);
costTemplate.nopayList.Add(province);
}
costTemplateList.Add(costTemplate);
costlateList.Add(costTemplate);
}
}
else
{
string htmlTemplate = new PinduoduoApiGetProduct(Shop).GetLogisticsTemplate();
if (htmlTemplate.Contains("goods_logistics_template_get_response"))
{
// {"goods_logistics_template_get_response":{"total_count":2,"logistics_template_list":[{"free_deliver_house":false,"template_name":"123","cost_template_list":[],"free_deliver_house_area_list":[],"cost_type":0,"province_id":3,"sf_free_type":0,"template_id":135941251406166,"district_id":3404,"additional_service_type":null,"free_province_list":[{"province":"北京市","province_id":2},{"province":"安徽省","province_id":3},{"province":"福建省","province_id":4},{"province":"广东省","province_id":6},{"province":"广西壮族自治区","province_id":7},{"province":"贵州省","province_id":8},{"province":"河北省","province_id":10},{"province":"河南省","province_id":11},{"province":"黑龙江省","province_id":12},{"province":"湖北省","province_id":13},{"province":"湖南省","province_id":14},{"province":"吉林省","province_id":15},{"province":"江苏省","province_id":16},{"province":"江西省","province_id":17},{"province":"辽宁省","province_id":18},{"province":"山东省","province_id":22},{"province":"山西省","province_id":23},{"province":"陕西省","province_id":24},{"province":"上海市","province_id":25},{"province":"四川省","province_id":26},{"province":"天津市","province_id":27},{"province":"云南省","province_id":30},{"province":"浙江省","province_id":31},{"province":"重庆市","province_id":32}],"city_id":3401},{"free_deliver_house":false,"template_name":"12345","cost_template_list":[],"free_deliver_house_area_list":[],"cost_type":0,"province_id":3,"sf_free_type":0,"template_id":135853330403670,"district_id":3404,"additional_service_type":null,"free_province_list":[{"province":"安徽省","province_id":3}],"city_id":3401}],"request_id":"15876283275836320"}}
JObject jObj = JObject.Parse(htmlTemplate);
var jArr = jObj["goods_logistics_template_get_response"]["logistics_template_list"] as JArray;
if (jArr != null)
{
foreach (var item in jArr)
{
string str = item.ToString();
CostTemplate costTemplate = new CostTemplate();
costTemplate.shopName = Shop.ShopName;
costTemplate.costTemplateId = AllBase.BaseRegex.GetLongJson(ref str, "template_id"); // 模板编号
costTemplate.costTemplateName = AllBase.BaseRegex.GetStringJson(ref str, "template_name"); // 模板名称
costTemplate.costType = AllBase.BaseRegex.GetIntJson(ref str, "cost_type"); // 模板付费类型
costTemplate.provinceId = AllBase.BaseRegex.GetIntJson(ref str, "province_id"); // 发货省编号
costTemplate.cityId = AllBase.BaseRegex.GetIntJson(ref str, "city_id"); // 发货市编号
costTemplate.districtId = AllBase.BaseRegex.GetIntJson(ref str, "district_id"); // 发货区编号
//costTemplate.templateItemId = AllBase.BaseRegex.GetLongJson(ref str, "templateItemId");
//costTemplate.updateTime = BaseRegex.GetLongJson(ref str, "updateTime");
// 包邮地区
var provinceArr = item["free_province_list"] as JArray;
if (provinceArr != null)
{
foreach (var freeProvince in provinceArr)
{
try
{
int province = Convert.ToInt32(freeProvince["province_id"]);
costTemplate.provinceList.Add(province);
//costTemplate.provinceNameList.Add(freeProvince["province"].ToString());
}
catch { }
}
}
costTemplate.firstStandard = AllBase.BaseRegex.GetIntJson(ref str, "first_standard"); // 首件
costTemplate.firstCost = AllBase.BaseRegex.GetIntJson(ref str, "first_cost"); // 首件或首重邮费价格,单位为分
costTemplate.addStandard = AllBase.BaseRegex.GetIntJson(ref str, "add_standard"); // 续重或续件
costTemplate.addCost = AllBase.BaseRegex.GetIntJson(ref str, "add_cost"); // 续件或续重邮费价格,单位为分
costTemplate.minCountForDeliveryFree = AllBase.BaseRegex.GetIntJson(ref str, "have_free_min_count"); // 对不包邮地区,满足指定件数包邮,该值为商家设置的指定件数,若为 - 1则商家没有开启满足件数包邮
costTemplate.minAmountForDeliveryFree = AllBase.BaseRegex.GetIntJson(ref str, "have_free_min_amount"); // 对不包邮地区,满足指定价格包邮,该值为商家设置的指定订单金额,若为 - 1则商家没有开启满足指定价格包邮,注意,单位为分
//costTemplate.noShipReasonType = AllBase.BaseRegex.GetIntJson(ref str, "noShipReasonType"); // 不包邮原因 API接口暂不支持
var mc = AllBase.BaseRegex.GetMatchRegex(ref str, @"""is_have_free_min_amount"":([\w\W]+?),");
if (mc != null && mc.Count > 0)
costTemplate.hasMinAmount = mc[0].Groups[1].Value.StartsWith("true") ? "true" : "false";
costTemplate.minText = "minCountForDeliveryFree";
costTemplate.buygood = costTemplate.minCountForDeliveryFree.ToString();
if (costTemplate.hasMinAmount == "true")
{
//costTemplate.buygood = costTemplate.minAmountForDeliveryFree + "00";
costTemplate.minText = "minAmountForDeliveryFree";
}
// 邮费配送地区
mc = AllBase.BaseRegex.GetMatchRegex(ref str, @"""areaList"":[{""province"":[\d]+?}],""firstStandard""");
var costProvinceArr = item["cost_template_list"] as JArray;
if (costProvinceArr != null)
{
foreach (var costProvinceItem in costProvinceArr)
{
string costStr = costProvinceItem.ToString();
int provinceId = AllBase.BaseRegex.GetIntJson(ref costStr, "province_id");
costTemplate.payList.Add(provinceId);
}
}
// 不配送地区 API接口暂不支持
//mc = BaseRegex.GetMatchRegex(ref list, @"""noShipConfig"":[[\w\W]+?]");
//mcpStr = mc[0].Groups[0].Value;
//var mcv = BaseRegex.GetMatchRegex(ref mcpStr, @"{""province"":([\d]+),""noShipReasonType"":[\d]+}");
//for (int k = 0; mcv != null && k < mcv.Count; k++)
//{
// int province = int.Parse(mcv[k].Groups[1].Value);
// costTemplate.nopayList.Add(province);
//}
costlateList.Add(costTemplate);
costTemplateList.Add(costTemplate);
}
}
}
Thread.Sleep(1000);
}
}
}
public class CostTemplate
{
public string shopName = "";
public long costTemplateId = 0;
public long templateItemId = 0;
public string costTemplateName = "";
public int costType = 0;
public int provinceId = 0;
public int cityId = 0;
public int districtId = 0;
public long updateTime = 0;
public List<int> provinceList = new List<int>();
public int firstStandard = 0;
public int firstCost = 0;
public int addStandard = 0;
public int addCost = 0;
public int minCountForDeliveryFree = 0;
public int noShipReasonType = 0;
public int minAmountForDeliveryFree = 0;
public string hasMinAmount = "false";
public string minText = "";
public string buygood = "";
public List<int> payList = new List<int>();
public List<int> nopayList = new List<int>();
}
}