Files
29WxOrder/Work/_29Tools/Forms/PddMobileBuyOrderForm.cs
T

1617 lines
75 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AllBase;
using AllBase.Helper;
using AllBase.Model;
using AllBase.Model.Config;
using AllBase.Model.DBModel;
using AllBase.Model.Result;
using CefSharp;
using CefSharp.DevTools.IO;
using CefSharp.DevTools.Profiler;
using CefSharp.Web;
using CefSharp.WinForms;
using DevComponents.WinForms.Drawing;
//using TemuKJD.DashBoardForms;
using Microsoft.Win32;
using NaiBa.CefHelper;
using NaiBa.CefHelper.Handler;
using NaiBa.Util.Enum;
using NaiBa.Util.Extension;
using NaiBa.Util.Model;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Security.Policy;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
//using System.Web.Hosting;
using System.Windows.Forms;
using Work;
using Work._29Tools.BLL;
using Work._29Tools.CefTools;
using Work._29Tools.Forms.ToolForms;
using Work.BaseForms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
namespace TemuKJD.ToolForms
{
public partial class PddMobileBuyOrderForm : BaseGeneralForm
{
public oms_wei_external_procurement_log_info AbnormalTransitWarehouseOrderInfo { get; set; } = null;
public pddFrontGoods3Lite pddFrontGoodsLite = new pddFrontGoods3Lite();
public bool IsAutoBuy { get; set; } = true;
public bool IsFormLoad { get; set; } = false;
public bool ShowBuyMask { get; set; } = false;
/// <summary>
/// 直发direct 中转transit
/// </summary>
public string BuyType { get; set; } = "transit";
public int CloseAfterSecond { get; set; }
public string InitUrl = "";
public string BuyMapUrl = "";
private string shopCookieHead = "yangkeduo.com";
private string shopMainUrl = "https://mobile.yangkeduo.com/index.html";
private ChromiumWebBrowser cefWebBrowser = null;
private string currentUrl = "";
private bool IsSoldOut = false;
// 当前买手
private BuyerLoginInfo buyer = null;
// 订单商品
private oms_wei_order_item_info orderItem = null;
// 关联商品
private WXBuyMapInfo buyMap = null;
// 订单仓库
private TransitWarehouseParam transitWarehouse = null;
// (拍单后)回调函数,过滤订单
private Action<oms_wei_order_info, bool> filterOrderAction = null;
// (拍单后)回调函数,更新拍单余额
private Action updateBalanceAction = null;
public PddMobileBuyOrderForm(Action<oms_wei_order_info, bool> filterOrder, Action updateBalance, oms_wei_order_item_info orderItemInfo, BuyerLoginInfo buyerInfo, WXBuyMapInfo buy_map = null)
{
InitializeComponent();
this.buyer = buyerInfo;
this.orderItem = orderItemInfo;
this.buyMap = buy_map;
filterOrderAction = filterOrder;
updateBalanceAction = updateBalance;
}
private void PddBuyOrderForm_Load(object sender, EventArgs e)
{
if (this.BuyType == "direct" && pnlMap.Visible == false)
{
this.pnlDirectAddressAnalysis.Visible = true;
this.lblBuyAddress.Text = "拍单地址";
}
//splitContainer1.Dock = DockStyle.Fill;
this.Height = SystemInformation.WorkingArea.Height - 80;
this.CenterToScreen();
chkAutoChangeWarehouseAddress.Checked = GlobalConfig.BuyConfig.IsAutoChangeWarehouseAddress;
chkUseAppBalance.Checked = GlobalConfig.BuyConfig.IsUseAppBalance;
// 强制使用软件余额而非erp余额拍单
chkUseAppBalance.Checked = true;
GlobalConfig.BuyConfig.IsUseAppBalance = true;
if (CloseAfterSecond > 0)
{
Task.Run(() =>
{
Thread.Sleep(1000 * CloseAfterSecond);
if (this.Created)
{
Invoke(new Action(() => { this.Close(); }));
}
});
}
if (this.ShowBuyMask == true)
{
Task.Run(() =>
{
for (int i = 3; i > 0; i--)
{
if (this.Created)
Invoke(new Action(() =>
{
this.pnlMask.Visible = true;
this.pnlMask.Text = "自动拍单倒计时\r\n" + i;
}));
else
break;
Thread.Sleep(1000);
}
if (this.Created)
Invoke(new Action(() =>
{
this.pnlMask.Visible = false;
}));
});
}
if (buyMap != null)
{
this.txtMapGoodsName.Text = buyMap.map_goods_name;
this.txtMapSkuName.Text = buyMap.map_spec_name;
this.txtMapGoodsId.Text = buyMap.map_goods_id;
this.txtMapSkuId.Text = buyMap.map_sku_id;
txtSendProvince.Text = buyMap.map_send_address;
this.transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == buyMap.transit_warehouse_id);
// 异常单重新拍单
if (AbnormalTransitWarehouseOrderInfo != null)
{
transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == AbnormalTransitWarehouseOrderInfo.platform);
}
if (transitWarehouse != null && this.BuyType == "transit")
{
cmbTransitWarehouse.Text = transitWarehouse?.TransName + " " + transitWarehouse?.TransDetailAddress;
txtBuyTransitWarehouse.Text = transitWarehouse?.TransDetailAddress;
}
else
{
txtBuyTransitWarehouse.Text = orderItem.ItemOrder.AddressStr;
}
}
else if (orderItem.BuyMapSkus != null && orderItem.BuyMapSkus.Count > 0 && AbnormalTransitWarehouseOrderInfo == null) // 不能是异常重拍
{
panel2.Visible = true;
cmbMapSkusProd.Items.Clear();
cmbMapSkusProd.Items.Add("");
foreach (var mapSku in orderItem.BuyMapSkus)
{
cmbMapSkusProd.Items.Add(mapSku.map_goods_name + mapSku.map_goods_id);
}
}
this.pictureBox1.Image = ImageBuild.LoadBitmapLoadBitmipImageFromUrl(orderItem.thumb_img);
this.txtShopSkuId.Text = orderItem.sku_id;
this.txtShopGoodsId.Text = orderItem.product_id;
this.txtUpSpuCode.Text = orderItem.out_product_id.IsNullOrEmpty() ? orderItem.product_id : orderItem.out_product_id;
this.txtUpSkuCode.Text = orderItem.out_sku_id.IsNullOrEmpty() ? orderItem.sku_attr_str : orderItem.out_sku_id;
this.txtShopGoodsName.Text = orderItem.title;
this.txtShopSpecName.Text = orderItem.sku_attr_str;
this.txtShopOrderItemCnt.Text = orderItem.sku_cnt.ParseToString();
this.txtShopOrderItemPrice.Text = (orderItem.real_price * 0.01m).ParseToString();
this.txtOrderId.Text = orderItem.order_id;
var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == orderItem.shop_id.ParseToString());
this.txtShopName.Text = shop?.ShopAccount;
foreach (var warehouse in TransitWarehouseData.TransitWarehouseList)
{
this.cmbTransitWarehouse.Items.Add(warehouse.TransName + " " + warehouse.TransDetailAddress);
}
Task.Run(() =>
{
Invoke(new Action(() =>
{
LoadCef();
}));
});
IsFormLoad = true;
}
private void Rb_CheckedChanged(object sender, EventArgs e)
{
transitWarehouse = (sender as RadioButton)?.Tag as TransitWarehouseParam;
}
/// <summary>
/// 自动登录店铺后台
/// </summary>
private void LoadCef()
{
if (cefWebBrowser == null)
{
//cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
if (!string.IsNullOrEmpty(InitUrl))
cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(InitUrl, true, true);
else
cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(shopMainUrl, false);
LocalResourceRequestHandler resourceRequestHandler = new LocalResourceRequestHandler();
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
resourceRequestHandler.BeforeResourceLoadEvent += RequestHandler_BeforeResourceLoad;
cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler);
var lifeSapnHandler = new LocalLifeSpanHandler(PopWindowType.SelfWindow);
cefWebBrowser.LifeSpanHandler = lifeSapnHandler;
cefWebBrowser.KeyboardHandler = new KeyboardHandler();
cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
cefWebBrowser.LoadError += CefWebBrowser_LoadError;
cefWebBrowser.Dock = DockStyle.Fill;
cefWebBrowser.SendToBack();
//js绑定C#对象
//PDDShopBrowserObject shopObj = new PDDShopBrowserObject();
//shopObj.OnInfoReceived += ShopObj_OnInfoReceived;
//CefSharpSettings.WcfEnabled = true;
//cefWebBrowser.JavascriptObjectRepository.Register(
// name: "shopObj",
// objectToBind: shopObj,
// isAsync: false,
// options: new BindingOptions { Binder = BindingOptions.DefaultBinder.Binder /*CamelCaseJavascriptNames = false*/ /*cef79*/ }
//);
//if (buyer.cookie == null)
// buyer.cookie = "";
List<Cookie> cookieLst = new List<Cookie>();
try
{
if (buyer != null)
{
cookieLst = JsonHelper.DeserializeJsonToList<CefSharp.Cookie>(buyer?.cookie);
if (cookieLst == null)
cookieLst = new List<Cookie>();
}
}
catch
{
}
Task.Run(() =>
{
Invoke(new Action(() =>
{
splitContainer1.Panel1.Controls.Add(cefWebBrowser);
//cefWebBrowser.Load(shopMainUrl);
}));
// cef138必须init后方可设置或删除cookie
while (!cefWebBrowser.IsBrowserInitialized || !cefWebBrowser.GetBrowser().MainFrame.IsValid)
Thread.Sleep(20);
CEFBrowser.DeleteCookie(cefWebBrowser.GetCookieManager(null), "mobile.yangkeduo.com");
CEFBrowser.DeleteCookie(cefWebBrowser.GetCookieManager(null), "yangkeduo.com");
//if (cookieLst.Any(c => c.Value.StartsWith("windows_1")))
// cefWebBrowser.ExecuteScriptAsync("navigator.__defineGetter__('userAgent', function() { return 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.5.40.8 Safari/537.36 PddWorkbench-Online PddBrowser pdd_windows_version/3.0.3.12'; });");
//cef 138 如果没有设置RequestContext 可能为空,直接getCookieManager
//if (this.openType != EnumOpenType.login)
{
var t = CEFBrowser.SetCookieAsync(JsonHelper.SerializeObject(cookieLst), cefWebBrowser.GetCookieManager(null));
if (InitUrl.Contains("&after_sales_reason=88"))
{
t.Wait(5000);
}
}
if (!string.IsNullOrEmpty(InitUrl))
cefWebBrowser.Load(InitUrl);
else
cefWebBrowser.Load(shopMainUrl);
});
}
}
private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
{
}
private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
{
if (this.Created && !this.Disposing && !this.IsDisposed)
{
Invoke(new Action(() =>
{
currentUrl = e.Address;
txtAddress.Text = e.Address;
}));
}
}
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
{
//js绑定C#对象 html页面内声明绑定的C#对象
StringBuilder sb = new StringBuilder();
sb.Append("(function(){");
sb.Append("CefSharp.BindObjectAsync('shopObj');");
sb.Append("})();");
cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString());
}
//public Func<object, string, string, request, bool> BeforeResourceLoadEvent; // sender, requestUrl, postData, request, true(表示取消执行)
private bool RequestHandler_BeforeResourceLoad(object sender, string url, string postData, IRequest request)
{
if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/origenes/address_info"))
{
if (chkAutoChangeWarehouseAddress.Checked && transitWarehouse != null && BuyType == "transit")
{
//var address = BaseRegex.GetStringJson(ref postData, "address");
JObject jObj = JsonHelper.JObjectParse(postData);
jObj["province_id"] = transitWarehouse.province_id;
jObj["city_id"] = transitWarehouse.city_id;
jObj["district_id"] = transitWarehouse.district_id;
jObj["address"] = transitWarehouse.TransDetailAddress + Randomx.GetId(1, 35) + Randomx.GetId(1, 9).ToString().PadLeft(2, '0') + "室" + txtSourceCode.Text;
jObj["mobile"] = TransitWaybillHelper.MobileHead[Randomx.GetId(TransitWaybillHelper.MobileHead.Count)] + Randomx.GetNumber(8);
jObj["name"] = TransitWaybillHelper.LastName[Randomx.GetId(TransitWaybillHelper.LastName.Count)] + (Randomx.GetId(2) == 1 ? "先生" : "女士");
postData = JsonHelper.SerializeObject(jObj);
request.PostData.Elements[0].Bytes = System.Text.Encoding.UTF8.GetBytes(postData);
}
else if (BuyType == "direct" && orderItem?.ItemOrder?.AddressStr.Contains("******") == false)
{
var dvProvince = GlobalConfig.PddDivisions.FirstOrDefault(d => d.name == orderItem.ItemOrder.province_name);
var dvCity = dvProvince.children.FirstOrDefault(d => d.name == orderItem.ItemOrder.city_name);
var dvCounty = dvCity.children.FirstOrDefault(d => d.name == orderItem.ItemOrder.county_name);
JObject jObj = JsonHelper.JObjectParse(postData);
jObj["province_id"] = dvProvince.pdd_region_id;
jObj["city_id"] = dvCity.pdd_region_id;
jObj["district_id"] = dvCounty.pdd_region_id;
jObj["address"] = orderItem.ItemOrder.detail_info;
jObj["mobile"] = orderItem.ItemOrder.tel_number;
jObj["name"] = orderItem.ItemOrder.user_name;
postData = JsonHelper.SerializeObject(jObj);
request.PostData.Elements[0].Bytes = System.Text.Encoding.UTF8.GetBytes(postData);
}
HasChangeAddress = true;
}
return false;
}
//static int GetAntiContentsTimes = 40;
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
{
Task.Run(() => { DoResourceLoadComplete(url, postData, responseData); });
}
public void DoResourceLoadComplete(string url, string postData, string responseData)
{
if (url.StartsWith("https://mobile.yangkeduo.com/order_checkout.html") && responseData.Contains("该商品已下架"))
{
IsSoldOut = true;
}
// 个人页面
if (url.Contains("https://mobile.yangkeduo.com/personal.html"))
{
Task.Run(() =>
{
//var data = responseData;
});
}
// 商品页面 获取发货地信息,如果页面没有去客服页面询问
if (url.StartsWith("https://mobile.yangkeduo.com/goods.html?goods_id="))
{
Task.Run(() =>
{
var sendProvince = "";
var data = responseData;
var sendProvinceIndex = data.IndexOf("{\"key\":\"发货地\",\"values\":[");
if (sendProvinceIndex > 0)
{
sendProvince = data.Substring(sendProvinceIndex + "{\"key\":\"发货地\",\"values\":[".Length);
sendProvince = sendProvince.Substring(0, sendProvince.IndexOf("]"));
sendProvince = sendProvince.Trim('\"');
Invoke(new Action(() => { this.txtSendProvince.Text = sendProvince; }));
}
if (!string.IsNullOrEmpty(sendProvince) && this.transitWarehouse == null)
{
MatchTransitWarehouse(sendProvince);
}
MatchProdAllSkus(data);
});
}
// 订单详情页面 获取关联信息和拍单信息(已拍过单但是因某种原因未成功绑定仓库)
if (url.StartsWith("https://mobile.yangkeduo.com/order.html?order_sn="))
{
Task.Run(() =>
{
var data = responseData;
var goodsId = BaseRegex.GetLongJson(ref data, "goodsId");
var skuId = BaseRegex.GetLongJson(ref data, "skuId");
var goodsName = BaseRegex.GetStringJson(ref data, "goodsName");
var spec = BaseRegex.GetStringJson(ref data, "spec");
var oneGoodsPrice = BaseRegex.GetIntJson(ref data, "goodsPrice");
var buyCnt = BaseRegex.GetIntJson(ref data, "goodsNumber");
var buyPrice = BaseRegex.GetIntJson(ref data, "payAmount");
if (buyPrice.IsNullOrZero())
buyPrice = BaseRegex.GetIntJson(ref data, "orderAmount");
var orderSn = BaseRegex.GetIntJson(ref data, "orderSn");
Invoke(new Action(() =>
{
// 自动填写关联信息界面
this.txtMapGoodsId.Text = goodsId.ParseToString();
this.txtMapSkuId.Text = skuId.ParseToString();
this.txtMapGoodsName.Text = goodsName;
this.txtMapSkuName.Text = spec;
this.txtSendProvince.Text = "";
this.cmbTransitWarehouse.Text = "";
// 自动填写拍单信息界面
if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString();
if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString();
if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName;
if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec;
if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString();
if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString();
}));
});
}
// 待提交订单确认界面,填写拍单信息 两个接口都有可能有值,通过返回值内信息和url是否含有sku_id综合判断
//https://mobile.yangkeduo.com/proxy/api/api/morgan/confirm/render?pdduid=8161628055192
//https://mobile.yangkeduo.com/order_checkout.html?sku_id=1917755178967&group_id=168599782729&goods_id=966934985983&goods_number=1&page_from=0&detail_id=27322663212&_oak_rcto=YWJun7Qe7qhenWIlxgKO3uhsoi0WMIkr6Sb3iSrTsNPiwo_AHzvFVWwZ36KSfBTSAX-QF_CD92G9rA&order_extra_type=1&refer_page_element=open_btn&source_channel=0&refer_page_name=goods_detail&refer_page_id=10014_1782220402115_blxn1wofgo&refer_page_sn=10014
//https://mobile.yangkeduo.com/order_checkout.html?sku_id=1914416497946&group_id=168211384489&goods_id=964481496910&goods_number=2&page_from=23&detail_id=27475863056&_oc_refer_ad=0&_oak_rcto=YWJQMioxuzYiHEIW34yn103Toi0WMIkr6SaYUDjBkmkvOAtI8c-ZcKMw36KSfBTSAX-QF_CD92G9rA&order_extra_type=1&refer_page_element=open_btn&source_channel=0&_x_query=%E4%B8%AD%E5%9B%BD%E5%8F%A4%E4%BB%A3%E7%AE%97%E6%9C%AF%E6%B3%95%E8%80%81%E7%89%88%E6%9C%AC%E6%B4%AA%E4%B8%95%E8%B0%9F%E8%91%97%E5%91%BD%E7%90%86%E5%AD%A6%E7%A0%94%E7%A9%B6%E5%85%A5%E9%97%A8%E9%A3%8E%E6%B0%B4%E5%AD%A6%E4%B9%A6%E7%B1%8D%E5%85%A5%E9%97%A8%E5%B1%85%E5%AE%B6&refer_page_name=goods_detail&refer_page_id=10014_1782275100226_pojdmxgpty&refer_page_sn=10014
if (responseData.Contains("\"goods_id\"") && (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/morgan/confirm/render?pdduid=") || url.Contains("sku_id=")))
{
Task.Run(() =>
{
var data = responseData;
if (data.Contains("\"goods_id\""))
{
var goodsId = BaseRegex.GetLongJson(ref data, "goods_id");
var skuId = BaseRegex.GetLongJson(ref data, "sku_id");
var goodsName = BaseRegex.GetStringJson(ref data, "goods_name");
if (string.IsNullOrEmpty(goodsName))
goodsName = BaseRegex.GetStringJson(ref data, "goodsName");
var specifications = BaseRegex.GetMatchRegexString(ref data, @"""specifications"":\[([^']*?)\]");
var spec = string.IsNullOrEmpty(specifications) ? "" : specifications;
if (spec.IsNullOrEmpty())
{
var specMatch = BaseRegex.GetMatchRegex(ref data, @"""spec_value"":""([^']+?)""");
foreach (var match in specMatch)
{
var matchStr = match.ParseToString();
spec += ("," + BaseRegex.GetStringJson(ref matchStr, "spec_value"));
}
spec = spec.Trim(',');
}
var oneGoodsPrice = BaseRegex.GetIntJson(ref data, "goodsPrice");
var buyCnt = BaseRegex.GetIntJson(ref data, "goods_number");
var buyPrice = BaseRegex.GetIntJson(ref data, "pay_price");
if (!this.Created)
return;
Invoke(new Action(() =>
{
if (!goodsId.IsNullOrZero()) this.txtBuyGoodsId.Text = goodsId.ParseToString();
if (!skuId.IsNullOrZero()) this.txtBuySkuId.Text = skuId.ParseToString();
if (!goodsName.IsNullOrEmpty()) this.txtBuyGoodsName.Text = goodsName;
if (!spec.IsNullOrEmpty()) this.txtBuySkuName.Text = spec;
if (!buyCnt.IsNullOrZero()) this.txtBuyCnt.Text = buyCnt.ParseToString();
if (!buyPrice.IsNullOrZero()) this.txtBuyPrice.Text = (buyPrice * 0.01m).ParseToString();
}));
if (!this.Created)
return;
Invoke(new Action(() =>
{
if (BuyType == "direct" && txtBuyTransitWarehouse.Text.Contains("******"))
{
BaseMsgForm.ShowError("请手动输入合法地址信息再拍单!");
return;
}
// 自动修改收货地址为中转仓(或直发)
var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim());
if (transit == null && BuyType == "transit")
{
BaseMsgForm.ShowError("仓库已发生改变,请点击重新关联商品,选择仓库后重新拍单!");
return;
}
if ((transit != null || BuyType == "direct") && IsChangeAddress == false && HasChangeAddress == false)
{
if (IsSoldOut)
{
BaseMsgForm.ShowError("商品已售罄,请重新关联未售罄商品后再拍单!");
return;
}
if (!IsSoldOut)
{
Task.Run(() =>
{
IsChangeAddress = true;
Thread.Sleep(100);
if (BuyType == "transit")
{
if (AbnormalTransitWarehouseOrderInfo != null)
{
Invoke(new Action(() => { txtSourceCode.Text = AbnormalTransitWarehouseOrderInfo.random_code; }));
}
else
{
var sourceCodeRst = GetSourceCode(transit);
if (sourceCodeRst.Contains("失败"))
{
Invoke(new Action(() =>
{
this.cefWebBrowser.Visible = false;
BaseMsgForm.ShowError(sourceCodeRst);
}));
return;
}
}
}
ChangeAddress(transit);
IsChangeAddress = false;
});
}
}
// 自动下单
if (IsAutoBuy)
{
if (!IsSoldOut)
{
if (HasChangeAddress == true)
{
}
}
}
}));
}
});
}
if (postData.Contains("260805-"))
{
}
// 订单提交接口
//https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=8161628055192
//https://mobile.yangkeduo.com/proxy/api/api/van-spike/prepay?pdduid=8161628055192
if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=") ||
url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/van-spike/prepay?pdduid="))
{
var data = postData;
Task.Run(() =>
{
Invoke(new Action(() =>
{
//txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn");
txtBuyOrderId.Text = BaseRegex.GetStringJsonByRegs(ref data, "", "order_sn", "orderSn");
}));
});
}
if (url.Contains("alipay.com") && responseData.Contains("支付成功"))
{
Task.Run(() =>
{
var uri = url;
var pData = postData;
var rData = responseData;
Invoke(new Action(() =>
{
//txtBuyOrderId.Text = BaseRegex.GetStringJson(ref data, "order_sn");
btnManualUpdateBuyOrder_Click(null, null);
}));
});
}
}
/// <summary>
/// 获取溯源码
/// </summary>
/// <returns></returns>
public string GetSourceCode(TransitWarehouseParam transit)
{
JObject body = new JObject();
body["province"] = transit.province_name;
body["city"] = transit.city_name;
body["warehouseCode"] = transit.TransId;
body["matchType"] = 1;
var url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/getRandomTraceCode";
var dataStr = JsonHelper.SerializeObject(body);
var sourceCodeRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
var randomCode = BaseRegex.GetStringXml(ref sourceCodeRst, "randomCode");
if (!string.IsNullOrEmpty(randomCode))
{
Invoke(new Action(() => { txtSourceCode.Text = randomCode; }));
return randomCode;
}
else
{
return "获取失败,请关闭拍单窗口重试 " + BaseRegex.GetStringXml(ref sourceCodeRst, "msg", sourceCodeRst);
}
}
bool IsChangeAddress = false;
bool HasChangeAddress = false;
/// <summary>
/// 自动填写地址
/// </summary>
/// <param name="transit"></param>
/// <returns></returns>
public string ChangeAddress(TransitWarehouseParam transit)
{
Thread.Sleep(200);
var host = cefWebBrowser.GetBrowser().GetHost();
var client = cefWebBrowser.GetDevToolsClient();
for (int i = 0; i < 20; i++)
{
Thread.Sleep(50);
if (host == null || client == null)
{
host = cefWebBrowser.GetBrowser().GetHost();
client = cefWebBrowser.GetDevToolsClient();
continue;
}
}
if (host == null || client == null)
{
return "页面未加载";
}
// 点击图片搜索图标
var jsStr1 = @"(function() { var element = document.getElementsByClassName('oc-address-info')[0];
//for (i=0; i< elements.length;i++){
// var element = elements[i];
// if (element.outerHTML.indexOf('当前收货地址为') >= 0) {
element.click();
return 'success';
// break;
// }
//}
})();";
var ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
if (!this.Created)
return "窗口已关闭";
ts1.Wait(5000);
for (int i = 0; i < 20; i++)
{
if (ts1.Result.Result.Value is string rstStr)
{
if (rstStr == "success")
break;
}
Thread.Sleep (100);
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
ts1.Wait(5000);
}
//Thread.Sleep(Randomx.GetId(1500, 2500));
Thread.Sleep(Randomx.GetId(300, 500));
jsStr1 = @"(function() { var elements = document.getElementsByTagName('span');
for (i=0; i< elements.length;i++){
var element = elements[i];
if (element.innerHTML.indexOf('修改') == 0) {
element.click();
return 'success';
}
}
})();";
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
for (int i = 0; i < 20; i++)
{
if (!this.Created)
return "窗口已关闭";
if (ts1.Result.Result.Value is string rstStr)
{
if (rstStr == "success")
break;
}
Thread.Sleep(100);
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
ts1.Wait(5000);
}
//Thread.Sleep(Randomx.GetId(1500, 2500));
Thread.Sleep(Randomx.GetId(300, 500));
jsStr1 = @"(function() { var elements = document.getElementsByTagName('span');
for (i=0; i< elements.length;i++){
var element = elements[i];
if (element.innerHTML.indexOf('保存') == 0) {
element.click();
return 'success';
}
}
})();";
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
for (int i = 0; i < 20; i++)
{
if (ts1.Result.Result.Value is string rstStr)
{
if (rstStr == "success")
break;
}
Thread.Sleep(100);
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
ts1.Wait(5000);
}
//Thread.Sleep(Randomx.GetId(1500, 2500));
Thread.Sleep(Randomx.GetId(300, 500));
jsStr1 = @"(function() { var elements = document.getElementsByTagName('div');
for (i = elements.length - 1; i >= 0; i--){
var element = elements[i];
if (element.innerHTML.indexOf('" + txtBuyTransitWarehouse.Text.Trim() + @"') >= 0 && element.innerHTML.indexOf('" + txtSourceCode.Text.Trim() + @"') >= 0) {
element.click();
return 'success';
}
}
})();";
if (BuyType == "direct")
{
jsStr1 = @"(function() { var elements = document.getElementsByTagName('div');
for (i = elements.length - 1; i >= 0; i--){
var element = elements[i];
if (element.innerHTML.indexOf('" + orderItem?.ItemOrder?.detail_info + @"') >= 0) {
element.click();
return 'success';
}
}
})();";
}
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
for (int i = 0; i < 20; i++)
{
if (!this.Created)
return "窗口已关闭";
if (ts1.Result.Result.Value is string rstStr)
{
if (rstStr == "success")
break;
}
Thread.Sleep(100);
ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
ts1.Wait(5000);
}
//Thread.Sleep(Randomx.GetId(1500, 2500));
Thread.Sleep(Randomx.GetId(300, 500));
return "";
}
private void btnManualUpdateSendProvince_Click(object sender, EventArgs e)
{
var sendProvince = txtSendProvince.Text.Trim();
MatchTransitWarehouse(sendProvince);
}
void MatchTransitWarehouse(string sendProvince)
{
bool isAutoGetWarehouse = false;
//foreach (var control in this.flowLayoutPanel1.Controls)
//{
// if (control is RadioButton rb)
// {
// if (rb.Tag is TransitWarehouseParam warehouseParam)
// {
// if (warehouseParam.TransDetailAddress.Contains(sendProvince))
// {
// Invoke(new Action(() =>
// {
// rb.Checked = true;
// }));
// isAutoGetWarehouse = true;
// break;
// }
// }
// }
//}
foreach (var item in this.cmbTransitWarehouse.Items)
{
TransitWarehouseParam warehouseParam = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == item.ParseToString());
if (warehouseParam == null)
{
continue;
}
if (warehouseParam.TransDetailAddress.Contains(sendProvince))
{
Invoke(new Action(() =>
{
cmbTransitWarehouse.Text = warehouseParam.TransName + " " + warehouseParam.TransDetailAddress;
}));
transitWarehouse = warehouseParam;
isAutoGetWarehouse = true;
break;
}
}
if (!isAutoGetWarehouse)
{
//黄导家庭父母5天训练营-《父母5天成为孩子成长的引路人》+《不内卷养育》2本书
Invoke(new Action(() =>
{
cmbTransitWarehouse.Text = "";
BaseMsgForm.ShowError("匹配仓库失败,请手动选择");
}));
}
}
void MatchProdAllSkus(string data)
{
var skusStrLst = BaseRegex.GetJsonArrStrJson(ref data, "skus");
skusStrLst = skusStrLst.OrderByDescending(s => s.Length).ToList();
pddFrontGoodsLite.skus = JsonHelper.DeserializeJsonToList<frontSkuInfo3>(skusStrLst?.FirstOrDefault());
pddFrontGoodsLite.goodsName = BaseRegex.GetStringJson(ref data, "goodsName");
pddFrontGoodsLite.goodsId = BaseRegex.GetLongJson(ref data, "goodsId");
pddFrontGoodsLite.mallName = BaseRegex.GetStringJson(ref data, "mallName");
pddFrontGoodsLite.mallId = BaseRegex.GetLongJson(ref data, "mallId");
//bool isAutoGetWarehouse = false;
//foreach (var item in this.cmbTransitWarehouse.Items)
//{
// TransitWarehouseParam warehouseParam = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == item.ParseToString());
// if (warehouseParam == null)
// {
// continue;
// }
// if (warehouseParam.TransDetailAddress.Contains(data))
// {
// Invoke(new Action(() =>
// {
// cmbTransitWarehouse.Text = warehouseParam.TransName + " " + warehouseParam.TransDetailAddress;
// }));
// transitWarehouse = warehouseParam;
// isAutoGetWarehouse = true;
// break;
// }
//}
//if (!isAutoGetWarehouse)
//{
// //黄导家庭父母5天训练营-《父母5天成为孩子成长的引路人》+《不内卷养育》2本书
// Invoke(new Action(() =>
// {
// cmbTransitWarehouse.Text = "";
// BaseMsgForm.ShowError("匹配仓库失败,请手动选择");
// }));
//}
}
private void ShopLoginForm_FormClosed(object sender, FormClosedEventArgs e)
{
//OnSaveComplete(shop);
Task.Run(() => {
Thread.Sleep(500);
if (!this.Disposing && !this.IsDisposed)
{
//MainForm.instance.Invoke(new Action(() => { this.Dispose(); }));
}
});
}
private void txtAddress_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (cefWebBrowser != null)
{
cefWebBrowser.Load(txtAddress.Text);
}
}
}
private async void btnManualUpdateTransitWarehouse_Click(object sender, EventArgs e)
{
var sendProvince = txtSendProvince.Text.Trim();
if (transitWarehouse == null && !cmbTransitWarehouse.Text.Trim().IsNullOrEmpty())
{
transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == cmbTransitWarehouse.Text.Trim().ParseToString());
}
if (transitWarehouse == null)
{
BaseMsgForm.ShowError("仓库不能为空");
return;
}
if (this.pddFrontGoodsLite == null || this.pddFrontGoodsLite.goodsId == null)
{
await Task.Run(() =>
{
var jsStr = "document.getElementById('orderGoodsBlock').getElementsByTagName('div')[0].click();";
var host = cefWebBrowser.GetBrowser().GetHost();
var client = cefWebBrowser.GetDevToolsClient();
var ts1 = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
ts1.Wait(500);
Thread.Sleep(2000);
});
}
this.Enabled = false;
if (!this.cefWebBrowser.Address.StartsWith("https://mobile.yangkeduo.com/order.html?order_sn=") && (this.pddFrontGoodsLite?.goodsId).ParseToString() == txtMapGoodsId.Text.Trim())
{
}
string url;
string upSpuCode = txtUpSpuCode.Text.Trim();
string upSkuCode = txtUpSkuCode.Text.Trim();
// 保存sku及商品关联信息
var data = UserLogin.GetSignaturex()
+ "&spu_code=" + GetHtml.UrlEncodeUtf8(upSpuCode)
+ "&sku_code=" + GetHtml.UrlEncodeUtf8(upSkuCode)
+ "&main_user_name=" + BaseClass.MainUserName
+ "&map_goods_name=" + txtMapGoodsName.Text.Trim()
+ "&map_spec_name=" + txtMapSkuName.Text.Trim()
+ "&map_goods_id=" + txtMapGoodsId.Text.Trim()
+ "&map_sku_id=" + txtMapSkuId.Text.Trim()
+ "&map_send_address=" + sendProvince
+ "&transit_warehouse_id=" + transitWarehouse?.TransId;
if (this.pddFrontGoodsLite != null && this.pddFrontGoodsLite.goodsId.ParseToString() == txtMapGoodsId.Text.Trim())
{
// 保存商品关联信息
data += "&map_skus=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(pddFrontGoodsLite));
url = BaseClass.Build29WxObjString("order/wx_add_mdy_buy_prod_map_skus");
var skusRst = await GetHtml.PostUtf8Async(url, data);
if (!skusRst.Contains("\"code\":200"))
skusRst = await GetHtml.PostUtf8Async(url, data);
// 存完立即读取
//wx_get_buy_pord_map_skus
var dataTest = UserLogin.GetSignaturex() + "&spu_codes=" + GetHtml.UrlEncodeUtf8(upSpuCode);
dataTest += "&main_user_name=" + BaseClass.MainUserName;
url = BaseClass.Build29WxObjString("order/wx_get_buy_pord_map_skus");
var resultSkusMap = await GetHtml.PostUtf8Async(url, dataTest);
if (string.IsNullOrEmpty(resultSkusMap) || !resultSkusMap.Contains("\"code\":200"))
{
resultSkusMap = await GetHtml.PostUtf8Async(url, dataTest);
}
if (string.IsNullOrEmpty(resultSkusMap) || !resultSkusMap.Contains("\"code\":200"))
{
}
else
{
List<WXBuyMapSkusInfo> buyMapSkuList = new List<WXBuyMapSkusInfo>();
try
{
buyMapSkuList = JsonHelper.DeserializeJsonToList<WXBuyMapSkusInfo>(JObject.Parse(resultSkusMap)["data"].ParseToString());
GlobalConfig.BuyMapSkusList.RemoveAll(b => buyMapSkuList.Any(map => b.spu_code == map.spu_code));
GlobalConfig.BuyMapSkusList.AddRange(buyMapSkuList);
foreach (var order in GlobalConfig.lstOrder)
{
if (order.IsWaitBuy)
{
foreach (var item in order.orderItems)
{
if (item.out_product_id == upSpuCode || item.product_id == upSpuCode)
{
item.BuyMapSkus = buyMapSkuList;
//if (filterOrderAction != null)
//{
// item.SetOrderItemTextProperty();
// filterOrderAction(order, false);
//}
}
}
}
}
}
catch
{
}
}
}
url = BaseClass.Build29WxObjString("order/wx_add_mdy_buy_prod_map");
var result = await GetHtml.PostUtf8Async(url, data);
if (!result.Contains("\"code\":200"))
result = await GetHtml.PostUtf8Async(url, data);
if (!result.Contains("\"code\":200"))
{
this.Enabled = true;
BaseMsgForm.ShowError("保存失败" + BaseRegex.GetStringJson(ref result, "msg") + ",请稍后重试");
}
else
{
var urlMap = BaseClass.Build29WxObjString("order/wx_get_buy_prod_map");
var dataMap = UserLogin.GetSignaturex()
+ "&spu_codes=" + upSpuCode;
//dataMap += "&sku_codes=" + upSkuCode;
dataMap += "&main_user_name=" + BaseClass.MainUserName;
var resultMap = await GetHtml.PostUtf8Async(urlMap, dataMap);
if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200"))
resultMap = await GetHtml.PostUtf8Async(urlMap, dataMap);
if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200"))
{
}
else
{
List<WXBuyMapInfo> buyMapList = new List<WXBuyMapInfo>();
try
{
buyMapList = JsonHelper.DeserializeJsonToList<WXBuyMapInfo>(JObject.Parse(resultMap)["data"].ParseToString());
GlobalConfig.BuyMapList.RemoveAll(b => buyMapList.Any(map => b.spu_code == map.spu_code && b.sku_code == map.sku_code));
GlobalConfig.BuyMapList.AddRange(buyMapList);
}
catch
{
}
var map = buyMapList.FirstOrDefault(b => b.spu_code == upSpuCode && b.sku_code == upSkuCode);
if (map != null)
{
foreach (var order in GlobalConfig.lstOrder)
{
if (order.IsWaitBuy)
{
foreach (var item in order.orderItems)
{
if ((item.out_product_id == map.spu_code && item.out_sku_id == map.sku_code) ||
(item.out_product_id == map.spu_code && item.sku_attr_str == map.sku_code) ||
(item.product_id == map.spu_code && item.out_sku_id == map.sku_code) ||
(item.product_id == map.spu_code && item.sku_attr_str == map.sku_code))
{
item.BuyMap = map;
if (filterOrderAction != null)
{
item.SetOrderItemTextProperty();
filterOrderAction(order, false);
}
}
}
}
}
}
}
BaseMsgForm.ShowInfo("保存成功!");
this.Close();
}
}
private async void btnManualUpdateBuyOrder_Click(object sender, EventArgs e)
{
if (BuyType == "transit" && txtSourceCode.Text.Trim().Length != 6)
{
BaseMsgForm.ShowError("溯源码长度错误!");
return;
}
var client = cefWebBrowser.GetDevToolsClient();
if (client == null)
{
BaseMsgForm.ShowError("页面未加载!");
return;
}
//var sourceCode = txtSourceCode.Text.Trim();
//var jsStr1 = @"(function() { var elements = document.getElementsByTagName('div');
// for (i = elements.length - 1; i >= 0; i--){
// var element = elements[i];
// if (element.innerHTML.indexOf('" + sourceCode + @"') >= 0) {
// return 'success';
// }
// }
// return '';
// })();";
//var ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
//await ts1;
// 付款页面没法匹配,暂时注释
//if (ts1.Result?.Result?.Value.ParseToString() != "success")
//{
// BaseMsgForm.ShowError("溯源码不匹配!");
// return;
//}
if (BuyType == "transit" && string.IsNullOrEmpty(txtBuyTransitWarehouse.Text.Trim()))
{
BaseMsgForm.ShowError("缺少中转地址,请重新绑定商品并选择仓库地址");
return;
}
var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim());
if (BuyType == "transit" && transit == null)
{
BaseMsgForm.ShowError("中转地址对应的中转仓不存在,请核对");
return;
}
if (string.IsNullOrEmpty(txtBuyOrderId.Text.Trim()))
{
BaseMsgForm.ShowError("缺少拍单订单号,请拍单后再提交");
return;
}
if ((txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt().IsNullOrZero())
{
BaseMsgForm.ShowError("缺少拍单金额,请拍单后再提交");
return;
}
btnManualUpdateBuyOrder.Enabled = false;
if (BuyType == "transit")
{
#region 正常中转拍单
if (AbnormalTransitWarehouseOrderInfo == null)
{
JObject body = new JObject();
body["orderNo"] = orderItem.order_id; // 微信订单号
body["orderSkuId"] = orderItem.sku_id; // 微信商品skuId
body["outOrderNo"] = txtBuyOrderId.Text.Trim(); // 拍单订单号
body["outAmount"] = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + ""; // 外采金额
body["buyerAccount"] = buyer.buyer_nick; // 买手昵称
body["purchaserNote"] = BaseClass.NickName; // 购买软件账户备注
body["express1Company"] = ""; // 物流公司编号
body["express1Waybill"] = ""; // 物流编号
body["platform"] = transit.TransId; // 中转仓ID
body["orderPlatformCode"] = "WEISHOP";
body["randomCode"] = txtSourceCode.Text.Trim();
if (GlobalConfig.BuyConfig.IsUseAppBalance)
{
body["userName"] = BaseClass.UserName; // 软件端用户名
body["purchaserNote"] = BaseClass.UserName + "-" + BaseClass.NickName; // 购买软件账户备注
string basePostageKey = WarehousePostageInfo.DicWarehousePostage.Keys.FirstOrDefault(pk => (orderItem.ItemOrder?.province_name).ParseToString().Contains(pk));
decimal basePostage = basePostageKey.IsNullOrEmpty() ? WarehousePostageInfo.DicWarehousePostage.Values.Min() : WarehousePostageInfo.DicWarehousePostage[basePostageKey];
body["oemAmount"] = (BaseClass.PostagePerOrderDiff * 100).ParseToInt().ParseToString();
body["postage"] = ((basePostage + BaseClass.PostagePerOrderDiff) * 100).ParseToInt().ParseToString();
}
var url = "https://po.e57.cn/prod-api/api/oms-api/externalProcurement/saveOrUpdate";
var dataStr = JsonHelper.SerializeObject(body);
//dataStr = "{\"orderNo\":\"3737339733954942720\",\"outOrderNo\":\"2606846854564\",\"buyerAccount\":\"测试\",\"outAmount\":\"2000\",\"purchaserNote\":\"测试\",\"express1Company\":\"\"" +
// ",\"express1Waybill\":\"\",\"platform\":\"XDYSHC\",\"orderPlatformCode\":\"WEISHOP\"}";
var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
//<AjaxResult><msg>保存成功</msg><code>200</code></AjaxResult>
//<AjaxResult><msg>订单不存在:373733973395494272</msg><code>500</code></AjaxResult>
if (!exportRst.ParseToString().Contains("<code>200</code>"))
{
string msg = "";
string code = "";
try
{
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.LoadXml(exportRst);
code = xmlDoc["AjaxResult"]["code"].InnerText;
msg = xmlDoc["AjaxResult"]["msg"].InnerText;
}
catch
{
msg = exportRst.ParseToString();
}
BaseMsgForm.ShowError("拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
btnManualUpdateBuyOrder.Enabled = true;
return;
}
if (updateBalanceAction != null)
updateBalanceAction();
orderItem.ItemTransitOrders.Insert(0, new oms_wei_external_procurement_log_info()
{
buyer_account = buyer.buyer_nick,
id = 0,
order_no = orderItem.order_id,
order_sku_id = orderItem.sku_id,
out_amount = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt(),
out_order_no = txtBuyOrderId.Text.Trim(),
purchaser_note = body["purchaserNote"].ParseToString(),
created_time = DateTime.Now,
});
orderItem.SetOrderItemTextProperty();
// 利润计算重置为最小值,控件Resource更新时将计算利润
orderItem.ProfitCount = decimal.MinValue;
var order = orderItem?.ItemOrder;
orderItem.SetOrderItemTextProperty();
order.SetOrderTextProperty();
if (filterOrderAction != null && order != null)
{
filterOrderAction(order, true);
}
//// 前一天的订单直接提前取号
//if (DateTime.Now.Date > BaseClass.StampToDateTime(order.create_time).Date)
//{
// JObject data = new JObject();
// data["outOrderNo"] = txtBuyOrderId.Text.Trim();
// //data2["outOrderNo"] = orderItem.ItemTransitOrder.order_code;
// data["warehouseCode"] = transit.TransId; // 中转仓仓库对应编码 XDYSZC XDYYWC ...
// //data["warehouseCode"] = txtBuyOrderId.Text.Trim(); // 中转仓仓库对应编码
// data["platform"] = "WEISHOP";
// var getVirtualTicketUrl = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/order/virtual/create";
// var getVirtualTicketDataStr = JsonHelper.SerializeObject(data);
// var getVirtualTicketRst = HttpResponseWXBLL.e57PostResponse(getVirtualTicketUrl, getVirtualTicketDataStr, "");
// if (!getVirtualTicketRst.ParseToString().Contains("<code>200</code>") && !getVirtualTicketRst.ParseToString().Contains("<code>0</code>"))
// {
// string msg = "";
// string code = "";
// try
// {
// System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
// xmlDoc.LoadXml(getVirtualTicketRst);
// code = xmlDoc["AjaxResult"]["code"].InnerText;
// msg = xmlDoc["AjaxResult"]["msg"].InnerText;
// }
// catch
// {
// msg = getVirtualTicketRst.ParseToString();
// }
// BaseMsgForm.ShowError("拍单信息保存成功,接收到服务端传递的错误消息:" + msg, "订单提前取号失败");
// btnManualUpdateBuyOrder.Enabled = true;
// return;
// }
//}
}
#endregion
#region 秒退异常单中转重拍
if (AbnormalTransitWarehouseOrderInfo != null)
{
var url = BaseClass.Build29WxObjString("order/wx_update_abnormal_transit_order");
var data = UserLogin.GetSignaturex();
data += "&out_order_no=" + txtBuyOrderId.Text.Trim();
data += "&order_no=" + orderItem.order_id;
data += "&order_sku_id=" + orderItem.sku_id;
data += "&buyer_account=" + buyer.buyer_nick;
data += "&out_amount=" + (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + "";
data += "&purchaser_note=" + BaseClass.UserName + "-" + BaseClass.NickName; // 购买软件账户备注
data += "&refund_status=" + "";
data += "&old_out_order_no=" + AbnormalTransitWarehouseOrderInfo.out_order_no;
data += "&old_order_no=" + AbnormalTransitWarehouseOrderInfo.order_no;
data += "&old_order_sku_id=" + AbnormalTransitWarehouseOrderInfo.order_sku_id;
data += "&old_buyer_account=" + AbnormalTransitWarehouseOrderInfo.buyer_account;
data += "&old_out_amount=" + AbnormalTransitWarehouseOrderInfo.out_amount;
data += "&old_purchaser_note=" + AbnormalTransitWarehouseOrderInfo.purchaser_note;
data += "&old_refund_status=" + AbnormalTransitWarehouseOrderInfo.refund_status;
data += "&order_code=" + AbnormalTransitWarehouseOrderInfo.order_code;
var html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
var msg = BaseRegex.GetStringJsonByRegs(ref html, html, "msg");
BaseMsgForm.ShowError("异常单重拍保存失败");
btnManualUpdateBuyOrder.Enabled = true;
return;
}
if (orderItem.ItemTransitOrder != null)
{
orderItem.ItemTransitOrder.buyer_account = buyer.buyer_nick;
orderItem.ItemTransitOrder.id = 0;
orderItem.ItemTransitOrder.order_no = orderItem.order_id;
orderItem.ItemTransitOrder.order_sku_id = orderItem.sku_id;
orderItem.ItemTransitOrder.out_amount = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt();
orderItem.ItemTransitOrder.out_order_no = txtBuyOrderId.Text.Trim();
orderItem.ItemTransitOrder.purchaser_note = BaseClass.UserName + "-" + BaseClass.NickName;
orderItem.ItemTransitOrder.refund_status = "";
}
orderItem.SetOrderItemTextProperty();
// 利润计算重置为最小值,控件Resource更新时将计算利润
orderItem.ProfitCount = decimal.MinValue;
var order = orderItem?.ItemOrder;
if (filterOrderAction != null && order != null)
{
filterOrderAction(order, true);
}
}
#endregion
BaseMsgForm.ShowInfo("拍单信息保存成功");
}
if (BuyType == "direct")
{
#region 直发拍单
var url = BaseClass.Build29WxObjString("order/wx_get_order_item_ext_info");
var data = UserLogin.GetSignaturex();
data += "&wx_order_id_in=" + orderItem.order_id;
data += "&wx_sku_id_in=" + orderItem.sku_id;
var html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
html = GetHtml.PostUtf8(url, data);
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
{
BaseMsgForm.ShowError("直发拍单信息保存失败(01) " + BaseRegex.GetStringJson(ref html, "msg"));
return;
}
var existOrderExtList = JsonHelper.DeserializeJsonToList<order_item_ext>(JsonHelper.JObjectParse(html)["data"].ParseToString());
order_item_ext orderExt = new order_item_ext()
{
order_id = orderItem.order_id,
sku_id = orderItem.sku_id,
out_order_id = txtBuyOrderId.Text.Trim(),
shop_app_id = orderItem.Shop.ShopId,
shop_name = orderItem.Shop.ShopAccount,
buy_type = "直发",
};
var url1 = BaseClass.Build29WxObjString("order/wx_add_order_item_ext_info");
if (existOrderExtList.Any(eoe => eoe.order_id == orderExt.order_id && eoe.sku_id == orderExt.sku_id))
url1 = BaseClass.Build29WxObjString("order/wx_mdy_order_item_ext_info");
var data1 = UserLogin.GetSignaturex();
data1 += "&wx_order_id=" + orderExt.order_id;
data1 += "&wx_sku_id=" + orderExt.sku_id;
data1 += "&out_order_id=" + orderExt.out_order_id;
data1 += "&shop_app_id=" + orderExt.shop_app_id;
data1 += "&shop_name=" + orderExt.shop_name;
data1 += "&buy_type=" + orderExt.buy_type;
var html1 = GetHtml.PostUtf8(url1, data1);
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
{
BaseMsgForm.ShowError("直发拍单信息保存失败(02) " + BaseRegex.GetStringJson(ref html1, "msg"));
return;
}
// 拍单后覆盖原售后状态(如果有)
var url2 = BaseClass.Build29WxObjString("order/wx_update_erp_out_after_sale_status");
var data2 = UserLogin.GetSignaturex();
data2 += "&order_id=" + orderItem.order_id;
data2 += "&out_after_sale_status=NULL";
var html2 = GetHtml.PostUtf8(url2, data2);
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
html2 = GetHtml.PostUtf8(url2, data2);
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
{
BaseMsgForm.ShowError("直发拍单信息保存失败(03) " + BaseRegex.GetStringJson(ref html2, "msg"));
return;
}
JObject obj = new JObject();
obj["platform"] = "WEISHOP";
obj["outAmount"] = (txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt() + "";
obj["outAccount"] = buyer.buyer_name;
obj["orderId"] = orderItem.order_id;
obj["outOrderNo"] = txtBuyOrderId.Text.Trim();
//if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty())
//{
// obj["outExpressCompany"] = order.outExpressCompanyCode;
// obj["outExpressNo"] = order.tracking_number;
//}
var dataStr = JsonHelper.SerializeObject(obj);
url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/bind/v2";
//成功 "<ResultVo><code>0</code><msg>SUCCESS</msg><data/><totalRecords/></ResultVo>"
//<AjaxResult><msg>更新微信外采订单状态成功</msg><code>1</code></AjaxResult>
//失败 已存在 <ResultVo><code>1505</code><msg>调用微信接口更新物流信息失败: 非法参数, 同运单号拦截 rid: 69d8ab9c-22baa3b1-67de0d95</msg><data/><totalRecords/></ResultVo>
var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
var code = BaseRegex.GetStringXml(ref exportRst, "code");
var msg = BaseRegex.GetStringXml(ref exportRst, "msg");
if (code == "0" || code == "1")
{
// 利润计算重置为最小值,控件Resource更新时将计算利润
orderItem.ProfitCount = decimal.MinValue;
var order = orderItem?.ItemOrder;
if (filterOrderAction != null && order != null)
{
orderItem.OrderItemExt = orderExt;
order.out_account = buyer.buyer_id;
order.out_express_company = "OTHER";
order.out_order_no = txtBuyOrderId.Text.Trim();
orderItem.SetOrderItemTextProperty();
order.SetOrderTextProperty();
filterOrderAction(order, true);
}
BaseMsgForm.ShowInfo("拍单信息保存成功");
}
else
{
//order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg);
//NaiBa.Util.Helper.ConfigHelper.SaveConfig("other_buyer_order_list", lstOtherBuyerOrderInfoLite);
BaseMsgForm.ShowError("直发拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
return;
}
#endregion
}
this.Close();
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (pictureBox1.Size.Width == 100)
{
pictureBox1.Size = new Size(430, 430);
pictureBox1.BringToFront();
}
else
{
pictureBox1.Size = new Size(100, 100);
}
}
private void btnJumpOrderList_Click(object sender, EventArgs e)
{
cefWebBrowser.Load("https://mobile.yangkeduo.com/orders.html");
}
private void btnReMap_Click(object sender, EventArgs e)
{
transitWarehouse = null;
pnlMap.Visible = true;
}
private void cmbTransitWarehouse_SelectedIndexChanged(object sender, EventArgs e)
{
transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransName + " " + t.TransDetailAddress == cmbTransitWarehouse.Text);
}
private void chkAutoChangeWarehouseAddress_CheckedChanged(object sender, EventArgs e)
{
if (IsFormLoad)
{
GlobalConfig.BuyConfig.IsAutoChangeWarehouseAddress = chkAutoChangeWarehouseAddress.Checked;
NaiBa.Util.Helper.ConfigHelper.SaveConfig("buy_config_260708", GlobalConfig.BuyConfig);
}
}
private void chkUseAppBalance_CheckedChanged(object sender, EventArgs e)
{
if (IsFormLoad)
{
GlobalConfig.BuyConfig.IsUseAppBalance = chkUseAppBalance.Checked;
GlobalConfig.BuyConfig.IsUseAppBalance = true;
NaiBa.Util.Helper.ConfigHelper.SaveConfig("buy_config_260708", GlobalConfig.BuyConfig);
}
}
private void btnAnalysis_Click(object sender, EventArgs e)
{
var order = this.orderItem?.ItemOrder;
if (order == null)
return;
var txt = txtDirectAddress.Text.Trim();
txt = txt.Replace("\r", "").Replace("\n", "");
if (txt.Contains("拨打请输入分机号"))
{
Match extensionNumberMatch = Regex.Match(txt, @"拨打请输入分机号\d{4}");
if (extensionNumberMatch.Success)
{
var extensionNumber = extensionNumberMatch.Value.Replace("拨打请输入分机号", "");
txt = txt.Replace("-" + extensionNumber, "");
txt = txt.Replace("(", "(");
txt = txt.Replace(")", ")");
txt = txt.Replace("(拨打请输入分机号" + extensionNumber + ")", "");
}
}
// 定义座机号的正则表达式
string landlinePattern = @"\d{3}-\d{8}|\d{4}-\d{7}";
// 定义手机号的正则表达式
string mobilePattern = @"1[3-9]\d{9}";
// 使用正则表达式匹配座机号和手机号
Match landlineMatch = Regex.Match(txt, landlinePattern);
Match mobileMatch = Regex.Match(txt, mobilePattern);
var phone = "";
if (landlineMatch.Success)
{
phone = landlineMatch.Value;
txt = txt.Replace(phone, " ");
}
if (mobileMatch.Success)
{
phone = mobileMatch.Value;
txt = txt.Replace(phone, " ");
}
if (!string.IsNullOrEmpty(phone))
{
this.orderItem.ItemOrder.tel_number = phone;
}
var province = GlobalConfig.Divisions.FirstOrDefault(d => txt.Contains(d.name));
if (province == null)
return;
this.orderItem.ItemOrder.province_name = province.name;
var city = province.children.FirstOrDefault(c => txt.Contains(c.name));
if (city == null)
return;
this.orderItem.ItemOrder.city_name = city.name;
var county = city.children.FirstOrDefault(c => txt.Contains(c.name));
if (county == null)
return;
this.orderItem.ItemOrder.county_name = county.name;
txt = txt.Replace(county.name, " ").Replace(city.name, " ").Replace(province.name, " ");
var tArr = txt.Split(new string[] { " ", ",", "," }, StringSplitOptions.RemoveEmptyEntries);
tArr = tArr.OrderBy(t => t.Length).ToArray();
this.orderItem.ItemOrder.user_name = tArr.FirstOrDefault();
this.orderItem.ItemOrder.detail_info = string.Join("", tArr).Replace(this.orderItem.ItemOrder.user_name, "").Trim(',',',');
order.AddressStr = order.user_name + "," + order.tel_number + "," + order.province_name + order.city_name + order.county_name + order.detail_info;
this.txtBuyTransitWarehouse.Text = this.orderItem.ItemOrder.AddressStr;
Task.Run(() =>
{
ChangeAddress(null);
});
}
private void cmbMapSkusProd_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.IsFormLoad)
{
cmbMapSkus.Items.Clear();
if (!string.IsNullOrEmpty(cmbMapSkusProd.Text))
{
cmbMapSkus.Items.Add("");
var mapSku = orderItem.BuyMapSkus.FirstOrDefault(m => m.map_goods_name + m.map_goods_id == cmbMapSkusProd.Text);
if (mapSku != null)
{
foreach(var pddsku in mapSku.pdd_front_goods3_Lite.skus)
{
cmbMapSkus.Items.Add(string.Join(";", pddsku.specs.Select(sp => sp.spec_value)));
}
}
}
}
}
private void cmbMapSkus_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.IsFormLoad)
{
this.pictureBox2.Image = null;
this.pictureBox2.Tag = null;
var mapSkuProd = orderItem.BuyMapSkus.FirstOrDefault(s => s.map_goods_name + s.map_goods_id == cmbMapSkusProd.Text);
if (mapSkuProd == null)
return;
var mapSku = mapSkuProd.pdd_front_goods3_Lite.skus.FirstOrDefault(s => string.Join(";", s.specs.Select(sp => sp.spec_value)) == cmbMapSkus.Text);
if (mapSku == null)
return;
this.pictureBox2.Image = ImageBuild.LoadBitmapLoadBitmipImageFromUrl(mapSku.thumbUrl);
this.pictureBox2.Tag = mapSku.thumbUrl;
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
ShowImgForm imgFrom = new ShowImgForm(pictureBox2.Tag.ParseToString());
imgFrom.Show();
}
private void btnAddToMap_Click(object sender, EventArgs e)
{
if (this.IsFormLoad)
{
var mapSkuProd = orderItem.BuyMapSkus.FirstOrDefault(s => s.map_goods_name + s.map_goods_id == cmbMapSkusProd.Text);
if (mapSkuProd == null)
return;
var mapSku = mapSkuProd.pdd_front_goods3_Lite.skus.FirstOrDefault(s => string.Join(";", s.specs.Select(sp => sp.spec_value)) == cmbMapSkus.Text);
if (mapSku == null)
return;
this.txtMapGoodsName.Text = mapSkuProd.map_goods_name;
this.txtMapSkuName.Text = string.Join(",", mapSku.specs.Select(sp => sp.spec_value));
this.txtMapGoodsId.Text = mapSkuProd.map_goods_id;
this.txtMapSkuId.Text = mapSku.skuId.ParseToString();
txtSendProvince.Text = mapSkuProd.map_send_address;
this.transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == mapSkuProd.transit_warehouse_id);
if (transitWarehouse != null)
{
cmbTransitWarehouse.Text = transitWarehouse?.TransName + " " + transitWarehouse?.TransDetailAddress;
txtBuyTransitWarehouse.Text = transitWarehouse?.TransDetailAddress;
}
}
}
}
}