diff --git a/29WxOrder.sln b/29WxOrder.sln
index d04f653..2ffd4f3 100644
--- a/29WxOrder.sln
+++ b/29WxOrder.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 18
-VisualStudioVersion = 18.4.11620.152 stable
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36221.1 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "29WxOrderAllBase", "AllBase\29WxOrderAllBase.csproj", "{6461D807-B1C8-45F0-B388-E0CA1A418DE0}"
EndProject
@@ -59,8 +59,8 @@ Global
{D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x64.Build.0 = Release|x64
{D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x86.ActiveCfg = Release|x86
{D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x86.Build.0 = Release|x86
- {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.ActiveCfg = Debug|x86
- {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.Build.0 = Debug|x86
+ {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.Build.0 = Debug|x86
{1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.ActiveCfg = Debug|x64
diff --git a/29WxOrderWpf/29WxOrderWpf.csproj b/29WxOrderWpf/29WxOrderWpf.csproj
index 928a4e0..8b1d1ab 100644
--- a/29WxOrderWpf/29WxOrderWpf.csproj
+++ b/29WxOrderWpf/29WxOrderWpf.csproj
@@ -174,6 +174,7 @@
OrderListCtrl.xaml
+
Icons.xaml
diff --git a/29WxOrderWpf/App.xaml.cs b/29WxOrderWpf/App.xaml.cs
index c5af986..b1aa21c 100644
--- a/29WxOrderWpf/App.xaml.cs
+++ b/29WxOrderWpf/App.xaml.cs
@@ -51,7 +51,7 @@ namespace _29WxOrderWpf
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
- //StartUp.Init();
+ StartUp.Init();
new Initialization().Get();
#region 贴牌
@@ -62,46 +62,45 @@ namespace _29WxOrderWpf
//string IbPakFile = "locales/ib.pak";//ico
string IcPakFile = "locales/ic.pak";//功能配置
- if (!File.Exists("locales/io.pak"))
+ if (File.Exists("locales/io.pak"))
{
- return;
- }
+ var ioTxt = FileBase.ReadAllText("locales/io.pak");
+ if (ioTxt.StartsWith("MThd") || !ioTxt.Contains("MThd"))
+ return;
- var ioTxt = FileBase.ReadAllText("locales/io.pak");
- if (ioTxt.StartsWith("MThd") || !ioTxt.Contains("MThd"))
- return;
-
- string agentNameFile = "locales/na.pak";
- if (File.Exists(agentNameFile))
- {
- var config = FileBase.ReadAllText(agentNameFile, Encoding.UTF8);
- var configArr = config.Split(new string[] { "\r\n", "MThd" }, StringSplitOptions.RemoveEmptyEntries);
- if (configArr.Length >= 2)
+ string agentNameFile = "locales/na.pak";
+ if (File.Exists(agentNameFile))
{
- BaseClass.ProgramName = configArr[1];
- BaseClass.ToolName = configArr[1];
- BaseClass.AgentName = configArr[0];
+ var config = FileBase.ReadAllText(agentNameFile, Encoding.UTF8);
+ var configArr = config.Split(new string[] { "\r\n", "MThd" }, StringSplitOptions.RemoveEmptyEntries);
+ if (configArr.Length >= 2)
+ {
+ BaseClass.ProgramName = configArr[1];
+ BaseClass.ToolName = configArr[1];
+ BaseClass.AgentName = configArr[0];
+ }
}
- }
- string LogoPakFile = "locales/lo.pak"; // ico
- if (File.Exists(LogoPakFile))
- {
- BitmapImage bitmap = new BitmapImage(new Uri(LogoPakFile, UriKind.Relative));
- Application.Current.Resources["main29WeixinIcon"] = bitmap;
- // winform部分,直接指定路径,从bitmap转换的会丢失颜色
- BaseClass.Ico = new Icon(LogoPakFile); //BitmapImageToIcon(Application.Current.Resources["main29WeixinIcon"] as BitmapImage);
- }
- //BaseClass.ProgromLogo = Environment.CurrentDirectory + "\\locales\\ia.pak";//logo
- //BaseClass.ProgromLogoIco = Environment.CurrentDirectory + "\\locales\\ib.pak";//ico
- string ImgPakFile = "locales/im.pak";
- if (File.Exists(ImgPakFile))
- {
- BaseClass.LogoImage = Image.FromFile(ImgPakFile);
- }
+ string LogoPakFile = "locales/lo.pak"; // ico
+ if (File.Exists(LogoPakFile))
+ {
+ BitmapImage bitmap = new BitmapImage(new Uri(LogoPakFile, UriKind.Relative));
+ Application.Current.Resources["main29WeixinIcon"] = bitmap;
+ // winform部分,直接指定路径,从bitmap转换的会丢失颜色
+ BaseClass.Ico = new Icon(LogoPakFile); //BitmapImageToIcon(Application.Current.Resources["main29WeixinIcon"] as BitmapImage);
+ }
+ //BaseClass.ProgromLogo = Environment.CurrentDirectory + "\\locales\\ia.pak";//logo
+ //BaseClass.ProgromLogoIco = Environment.CurrentDirectory + "\\locales\\ib.pak";//ico
+ string ImgPakFile = "locales/im.pak";
+ if (File.Exists(ImgPakFile))
+ {
+ BaseClass.LogoImage = Image.FromFile(ImgPakFile);
+ }
- // 待后续完善
- OenMechanism(IgPakFile, OenVersionFile, IaPakFile, LogoPakFile, IcPakFile);
+ // 待后续完善
+ OenMechanism(IgPakFile, OenVersionFile, IaPakFile, LogoPakFile, IcPakFile);
+
+ }
#endregion
}
catch (Exception ex)
diff --git a/29WxOrderWpf/Converters/TextToVisibilityConverter.cs b/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
index b00a13a..1f0aabc 100644
--- a/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
+++ b/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
@@ -14,6 +14,8 @@ namespace _29WxOrderWpf.Converters
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
+ if ( value == null)
+ return Visibility.Collapsed;
return !value.ParseToString().Trim().IsNullOrEmpty() ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
index 7f1aaa2..17f9466 100644
--- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml
@@ -28,8 +28,8 @@
-
+
@@ -40,125 +40,188 @@
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs
index de9d122..56c3722 100644
--- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs
+++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml.cs
@@ -51,14 +51,10 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
ConcurrentList lstPddBuyerAfterSaleInfoLite { get; set; } = new ConcurrentList();
public CancellationTokenSource cancellationTokenSource { get; set; } = new CancellationTokenSource();
//public ChromiumWebBrowser cefWebBrowser = null;
- public BuyerOrderConfig buyerOrderConfig = new BuyerOrderConfig();
+ public BuyerReadOrderConfig buyerReadOrderConfig = new BuyerReadOrderConfig();
public DateTime nextGetOrderTime = DateTime.MinValue;
public DateTime lastCefReadOrderTime = DateTime.Now;
///
- /// 是否自动读买手单
- ///
- public bool IsAutoReadBuyerOrder = true;
- ///
/// 是否正在读买手单
///
bool isReadBuyerOrder = false;
@@ -129,18 +125,20 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
return false;
if (isHideNoWxOrderNo && order.ShopOrderIdStr.IsNullOrEmpty())
return false;
- if (!string.IsNullOrEmpty(filterTxt) && !order.order_sn.Contains(filterTxt) && !order.ShopOrderIdStr.Contains(filterTxt) && !order.tracking_number.Contains(filterTxt))
+ if (!string.IsNullOrEmpty(filterTxt) && !order.order_sn.Contains(filterTxt) && !order.ShopOrderIdStr.ParseToString().Contains(filterTxt) &&
+ !order.tracking_number.Contains(filterTxt) &&
+ !order.sendStatus.ParseToString().Contains(filterTxt))
return false;
return true;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
- buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config");
- if (buyerOrderConfig == null)
- buyerOrderConfig = new BuyerOrderConfig();
- this.chkAutoReadBuyerOrder.IsChecked = !buyerOrderConfig.IsPause;
- //this.chkAutoAfterSale.IsChecked = buyerOrderConfig.IsAutoAfterSale;
+ buyerReadOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_read_order_config");
+ if (buyerReadOrderConfig == null)
+ buyerReadOrderConfig = new BuyerReadOrderConfig();
+ this.chkAutoReadBuyerOrder.IsChecked = buyerReadOrderConfig.IsAutoReadOrder;
+ this.chkAutoAfterSale.IsChecked = buyerReadOrderConfig.IsAutoAfterSale;
lstPddBuyerOrderInfoLite = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("pdd_buyer_order_list");
@@ -190,7 +188,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Thread.Sleep(5000);
while (true)
{
- if (!IsAutoReadBuyerOrder)
+ if (!buyerReadOrderConfig.IsAutoReadOrder)
{
Thread.Sleep(1000);
Dispatcher.Invoke(new Action(() =>
@@ -202,7 +200,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (DateTime.Now > nextGetOrderTime)
{
- btnSearch_Click(null, null);
+ GetOrderAndAfterSale();
}
if (isReadBuyerOrder)
{
@@ -501,10 +499,91 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
//break;
}
List transitOrderList = new List();
- try { transitOrderList = JsonHelper.DeserializeJsonToList(JObject.Parse(html3)["data"].ParseToString()); } catch { }
+ try
+ {
+ transitOrderList = JsonHelper.DeserializeJsonToList(JObject.Parse(html3)["data"].ParseToString());
+ // 直接过滤掉仓库售后单
+ transitOrderList = transitOrderList.Where(t => t.transfer_refund_status.IsNullOrZero()).ToList();
+ }
+ catch
+ {
+ }
return transitOrderList;
}
+ ///
+ /// 读取订单详情信息
+ ///
+ ///
+ ///
+ List GetOrderInfo(string order_ids)
+ {
+ Thread.Sleep(100);
+ var url1 = BaseClass.Build29WxObjString("order/get_erp_order_list");
+ var data1 = UserLogin.GetSignaturex();
+ data1 += "&erp_order_id_in=" + order_ids;
+ data1 += "&page_size=" + 1000;
+ var html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ {
+ //BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
+ //break;
+ }
+ List orders = new List();
+ try
+ {
+ orders = JsonHelper.DeserializeJsonToList(JObject.Parse(html1)["data"].ParseToString());
+ if (orders == null)
+ orders = new List();
+ }
+ catch
+ {
+ }
+ var orderItems = GetOrderItemInfo(order_ids);
+ foreach (var orderItem in orderItems)
+ {
+ var order = orders.FirstOrDefault(o => o.order_id == orderItem.order_id);
+ orderItem.ItemOrder = order;
+ order.orderItems.Add(orderItem);
+ }
+ return orders;
+ }
+
+ ///
+ /// 读取订单详情信息
+ ///
+ ///
+ ///
+ List GetOrderItemInfo(string order_ids)
+ {
+ Thread.Sleep(100);
+ var url1 = BaseClass.Build29WxObjString("order/get_erp_order_item_list");
+ var data1 = UserLogin.GetSignaturex();
+ data1 += "&erp_order_id_in=" + order_ids;
+ data1 += "&page_size=" + 1000;
+ var html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ html1 = GetHtml.PostUtf8(url1, data1);
+ if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
+ {
+ //BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
+ //break;
+ }
+ List orderItems = new List();
+ try
+ {
+ orderItems = JsonHelper.DeserializeJsonToList(JObject.Parse(html1)["data"].ParseToString());
+ if (orderItems == null)
+ orderItems = new List();
+ }
+ catch
+ {
+ }
+ return orderItems;
+ }
+
///
/// 读取售后单
///
@@ -513,7 +592,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
List GetOrderRefundInfo(string order_ids)
{
Thread.Sleep(100);
- var url2 = BaseClass.Build29WxObjString("order/get_refund_list");
+ var url2 = BaseClass.Build29WxObjString("order/get_erp_refund_list");
var data2 = UserLogin.GetSignaturex();
data2 += "&erp_order_id_in=" + order_ids;
var html2 = GetHtml.PostUtf8(url2, data2);
@@ -529,22 +608,29 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
return refunds;
}
- void UpdateOrderStatus(PddBuyerOrderLiteInfo o, oms_wei_order_item_info order_item, oms_wei_refund_info refund_item, oms_wei_external_procurement_log transitOrderList)
+ void UpdateOrderStatus(PddBuyerOrderLiteInfo pdd_order, oms_wei_order_item_info wx_order_item, oms_wei_refund_info wx_refund_item, oms_wei_external_procurement_log wx_transit_order)
{
- o.ShopOrderIdStr = order_item?.order_id ?? transitOrderList.order_no;
- o.ShopOrderSkuIdStr = order_item?.sku_id ?? transitOrderList.order_sku_id;
- o.ShopOrderSkuNameStr = order_item?.sku_attr_str;
- o.ShopOrderRefundStr = refund_item?.count > 0 ? "店铺售后" : "";
- o.TransitWarehouseIdStr = transitOrderList?.platform;
- o.Express1WaybillStr = transitOrderList?.express_1_waybill;
- o.Express1CompanyStr = transitOrderList?.express_1_company;
- o.Express2WaybillStr = transitOrderList?.express_2_waybill;
- o.Express2CompanyStr = transitOrderList?.express_2_company;
- o.TransferWareHouseStatus = transitOrderList?.transfer_warehouse_status.ParseToString();
- o.PreAllocatedOrderNoStr = transitOrderList?.pre_allocated_order_no.ParseToString();
+ pdd_order.ShopOrderIdStr = wx_order_item?.order_id ?? wx_transit_order?.order_no;
+ pdd_order.ShopOrderSkuIdStr = wx_order_item?.sku_id ?? wx_transit_order?.order_sku_id;
+ pdd_order.ShopOrderSkuNameStr = wx_order_item?.sku_attr_str;
+ pdd_order.WxOrderCreateTime = wx_order_item?.ItemOrder?.create_time == null ? DateTime.MinValue : BaseClass.StampToDateTime((wx_order_item?.ItemOrder?.create_time).ParseToInt());
+ pdd_order.ShopOrderRefundStr = ""; // (/*refund_item?.count > 0 &&*/ wx_order_item.refund_status > 1) ? "店铺售后" : "";
+ pdd_order.wxRefundStatus = "";
+ if (wx_order_item.refund_status > 1)
+ {
+ pdd_order.ShopOrderRefundStr = "店铺售后";
+ pdd_order.wxRefundStatus = pdd_order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
+ }
+ pdd_order.TransitWarehouseIdStr = wx_transit_order?.platform;
+ pdd_order.Express1WaybillStr = wx_transit_order?.express_1_waybill;
+ pdd_order.Express1CompanyStr = wx_transit_order?.express_1_company;
+ pdd_order.Express2WaybillStr = wx_transit_order?.express_2_waybill;
+ pdd_order.Express2CompanyStr = wx_transit_order?.express_2_company;
+ pdd_order.TransferWareHouseStatus = wx_transit_order?.transfer_warehouse_status.ParseToString();
+ pdd_order.PreAllocatedOrderNoStr = wx_transit_order?.pre_allocated_order_no.ParseToString();
// 更新订单中转取号状态
- o.sendStatus = (o.TransitOrderStatus + " " + o.ShopOrderRefundStr).Trim();
- o.TransitCreateTime = transitOrderList?.created_time ?? DateTime.MinValue;
+ pdd_order.sendStatus = (pdd_order.TransitOrderStatus + " " + pdd_order.ShopOrderRefundStr).Trim();
+ pdd_order.TransitCreateTime = wx_transit_order?.created_time ?? DateTime.MinValue;
}
void CefReadBuyerOrder(string url, string data)
@@ -588,21 +674,32 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
+ var orders = GetOrderInfo(order_ids);
+ foreach(var order in orders)
+ {
+ foreach (var orderItem in order.orderItems)
+ {
+ // 中转仓订单
+ if (orderItem.ItemOrder.orderItems.Count > 1)
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
+ else
+ orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
+ }
+ }
var refunds = GetOrderRefundInfo(order_ids);
foreach (PddBuyerOrderLiteInfo o in list)
{
o.buyerId = buyer.buyer_id;
o.buyerName = buyer.buyer_name;
- o.outExpressCompanyMsg = o.extra_info.order_hint?.message;
// 查找店铺订单并更新店铺订单状态
- var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == o.order_sn)));
- if (ShopOrder != null)
+ var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn);
+ if (transit_item != null)
{
- var order_item = ShopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == o.order_sn));
+ var shopOrder = orders.FirstOrDefault(o1 => o1.order_id == transit_item.order_no);
+ var order_item = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == o.order_sn));
var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item.order_id) ?? order_item?.ItemRefund;
- var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == o.order_sn);
UpdateOrderStatus(o, order_item, refund_item, transit_item);
}
@@ -655,7 +752,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
order.parent_order_sn = o.parent_order_sn;
order.service_amount = o.service_amount;
order.shipping_amount = o.shipping_amount;
- order.outExpressCompanyMsg = o.outExpressCompanyMsg;
order.order_time = o.order_time;
order.tracking_number = o.tracking_number;
order.ShopOrderIdStr = o.ShopOrderIdStr;
@@ -669,6 +765,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
order.TransferWareHouseStatus = o.TransferWareHouseStatus;
order.PreAllocatedOrderNoStr = o.PreAllocatedOrderNoStr;
order.ShopOrderRefundStr = o.ShopOrderRefundStr;
+ order.wxRefundStatus = o.wxRefundStatus;
var index = lstPddBuyerOrderInfoLite.IndexOf(order);
Dispatcher.Invoke(new Action(() =>
@@ -703,6 +800,14 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
Task.Run(() =>
{
//SendOrderE57(order);
+ //if (order.sendStatus.ParseToString().Contains("售后"))
+ if (order.ShopOrderRefundStr.ParseToString().Contains("售后"))
+ {
+ if (",2,3,4,5,7,8,10,31,".Contains((order.after_sales?.after_sales_status).ParseToString()))
+ {
+ var afterSaleRst = PddAutoAfterSale(order);
+ }
+ }
SendTransitOrderE57(order);
});
@@ -800,7 +905,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
{
Task.Run(() =>
{
- SendAfterSaleE57(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn));
+ //SendAfterSaleE57(lstPddBuyerAfterSaleInfoLite.FirstOrDefault(a => a.orderSn == afterSale.orderSn));
});
Dispatcher.Invoke(new Action(() =>
@@ -821,30 +926,25 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
TimeSpan PauseTick = new TimeSpan(1);
private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
{
-
- IsAutoReadBuyerOrder = chkAutoReadBuyerOrder.IsChecked == true;
-
- if (!IsAutoReadBuyerOrder)
+ if (isLoad)
{
- //if (cancellationTokenSource != null)
- // cancellationTokenSource.Cancel();
- }
-
- if (IsAutoReadBuyerOrder)
+ buyerReadOrderConfig.IsAutoReadOrder = chkAutoReadBuyerOrder.IsChecked == true;
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
+ //buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config");
+
+ if (buyerReadOrderConfig.IsAutoReadOrder)
nextGetOrderTime = DateTime.Now + PauseTick;
else
PauseTick = nextGetOrderTime - DateTime.Now;
-
- if (isLoad)
- {
- buyerOrderConfig.IsPause = !IsAutoReadBuyerOrder;
- NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerOrderConfig);
- //buyerOrderConfig = NaiBa.Util.Helper.ConfigHelper.LoadConfig("pdd_buyer_order_config");
- return;
}
}
private void btnSearch_Click(object sender, RoutedEventArgs e)
+ {
+ GetOrderAndAfterSale();
+ }
+
+ void GetOrderAndAfterSale()
{
nextGetOrderTime = DateTime.Now.AddMinutes(25);
GetPddOrder();
@@ -1148,15 +1248,30 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var transitOrderList = GetOrderTransitWarehouseInfo(out_order_nos);
var order_ids = string.Join(",", transitOrderList.Select(ts => ts.order_no));
+ var orders = GetOrderInfo(order_ids);
+ //foreach (var order in orders)
+ //{
+ // foreach (var orderItem in order.orderItems)
+ // {
+ // // 中转仓订单
+ // if (orderItem.ItemOrder.orderItems.Count > 1)
+ // orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id && t.order_sku_id == orderItem.sku_id));
+ // else
+ // orderItem.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == orderItem.order_id));
+ // }
+ //}
var refunds = GetOrderRefundInfo(order_ids);
// 查找店铺订单并更新店铺订单状态
- var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
- if (ShopOrder != null)
+ //var ShopOrder = GlobalConfig.lstOrder.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
+ //var ShopOrder = orders.FirstOrDefault(o1 => o1.orderItems.Any(i1 => i1.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn)));
+ //if (ShopOrder != null)
+ var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == buyerOrder.order_sn);
+ if (transit_item != null)
{
- var order_item = ShopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn));
+ var shopOrder = orders.FirstOrDefault(o => o.order_id == transit_item.order_no);
+ var order_item = shopOrder.orderItems.FirstOrDefault(oi => oi.ItemTransitOrders.Any(t1 => t1.out_order_no == buyerOrder.order_sn));
var refund_item = refunds.FirstOrDefault(ri => ri.order_id == order_item.order_id) ?? order_item?.ItemRefund;
- var transit_item = transitOrderList.FirstOrDefault(t1 => t1.out_order_no == buyerOrder.order_sn);
UpdateOrderStatus(buyerOrder, order_item, refund_item, transit_item);
}
@@ -1180,81 +1295,82 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
// order.sendStatus = "";
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
- // 处理中, "已取号(更正)", 已取号, 提前取号, 取号失败
+ // 仓库处理中
+ if (order.sendStatus.ParseToString().Contains("仓库处理中"))
+ {
+ // 仓库处理中超过10分钟认为已处理完成,否则跳过。
+ if (order.TransitCreateTime.AddMinutes(10) < DateTime.Now)
+ {
+ order.sendStatus = order.sendStatus.Replace("仓库处理中", "").Trim();
+ }
+ else
+ {
+ return;
+ }
+ }
+
+ // "已取号(更正)", 已取号, 提前取号, 取号失败
// 正在处理取号、已取号(包括提前取号更正的订单)、有售后或者没有中转仓(非中转系统订单)的订单,不发送
- if (order.sendStatus == "处理中" || order.sendStatus == "已取号" || order.sendStatus == "已取号(更正)" ||
+ if (order.sendStatus == "已取号" || order.sendStatus == "已取号(更正)" ||
order.sendStatus.ParseToString().Contains("售后") || order.TransitWarehouseIdStr.IsNullOrEmpty())
{
return;
}
- // 物流单号不为空才更新服务端
- if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty())
+ // 物流单号为空,先判断是否需要提前取号,无需提前取号则直接返回
+ if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty())
{
+ // 如果是隔天订单,拍单20分钟后立即提前取号
+ if (!order.sendStatus.Contains("提前取号") && order.TransitCreateTime != DateTime.MinValue &&
+ DateTime.Now.Date > order.WxOrderCreateTime.Date && DateTime.Now > order.TransitCreateTime.AddMinutes(20))
+ {
+ JObject data = new JObject();
+ data["outOrderNo"] = order.order_sn;
+ data["warehouseCode"] = order.TransitWarehouseIdStr; //transit.TransId; // 中转仓仓库对应编码
+ 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("200") && !getVirtualTicketRst.ParseToString().Contains("0"))
+ {
+ 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("拍单信息保存成功,接收到erp服务端传递的错误消息:" + msg, "订单提前取号失败");
+ order.sendStatus = "提前取号失败,服务端返回 " + msg;
+ }
+ }
+
return;
}
- // 如果物流不一致,提交物流信息
- if (order.Express1CompanyStr != order.outExpressCompanyCode || order.Express1WaybillStr != order.tracking_number)
- {
- //JObject obj = new JObject();
- //obj["orderNo"] = order.ShopOrderIdStr;
- //obj["orderSkuId"] = order.ShopOrderSkuIdStr;
- //obj["outOrderNo"] = order.order_sn;
- //obj["outAmount"] = order.order_amount.ParseToString();
- //obj["buyerAccount"] = order.buyerName;
- //obj["purchaserNote"] = BaseClass.NickName;
- //obj["platform"] = order.TransitWarehouseIdStr; // 中转仓ID
- //obj["orderPlatformCode"] = "WEISHOP";
- //if (!order.outExpressCompanyCode.IsNullOrEmpty() && !order.tracking_number.IsNullOrEmpty())
- //{
- // obj["express1Company"] = order.outExpressCompanyCode; // 物流公司编号
- // obj["express1Waybill"] = order.tracking_number; // 物流单号
- //}
- //var dataStr = JsonHelper.SerializeObject(obj);
- //string url = "https://po.e57.cn/prod-api/api/oms-api/externalProcurement/saveOrUpdate";
- ////保存成功200
- //var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
-
- //if (!exportRst.Contains("200"))
- //{
- // order.sendStatus = "提交运单信息失败";
- // return;
- //}
- //if (order.outExpressCompanyCode.IsNullOrEmpty() || order.tracking_number.IsNullOrEmpty())
- //{
- // order.sendStatus = "已提交";
- //}
-
- //var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express");
- //var data3 = UserLogin.GetSignaturex();
- //data3 += "&out_order_no=" + order.order_sn;
- //data3 += "&express_1_company=" + order.outExpressCompanyCode; // 物流公司编号
- //data3 += "&express_1_waybil=" + order.tracking_number; // 物流单号
- //var html3 = GetHtml.PostUtf8(url3, data3);
- //if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
- // html3 = GetHtml.PostUtf8(url3, data3);
- //if (html3.Contains("\"code\":200"))
- //{
- // order.sendStatus = "已提交";
- //}
-
- // 修改上游物流单号
- string url = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/update-upstream-waybill";
- JObject obj = new JObject();
- obj["platform"] = "WEISHOP";
- obj["outOrderNo"] = order.order_sn; //外采单号
- obj["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号
- obj["outExpressNo"] = order.tracking_number; // 物流单号
- obj["orderCode"] = order.tracking_number; //实际就是外采单号
- var dataStr = JsonHelper.SerializeObject(obj);
- var exportRst = HttpResponseWXBLL.e57PostResponse(url, dataStr, "");
- if (exportRst.Contains("0") || exportRst.Contains("200"))
- {
- order.sendStatus = "提交物流信息失败";
- return;
- }
- }
+ //// 如果物流不一致,提交物流信息 临时补救
+ //if (order.Express1CompanyStr != order.outExpressCompanyCode || order.Express1WaybillStr != order.tracking_number)
+ //{
+ // //var url3 = BaseClass.Build29WxObjString("order/wx_update_erp_order_express");
+ // //var data3 = UserLogin.GetSignaturex();
+ // //data3 += "&out_order_no=" + order.order_sn;
+ // //data3 += "&express_1_company=" + order.outExpressCompanyCode; // 物流公司编号
+ // //data3 += "&express_1_waybil=" + order.tracking_number; // 物流单号
+ // //var html3 = GetHtml.PostUtf8(url3, data3);
+ // //if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
+ // // html3 = GetHtml.PostUtf8(url3, data3);
+ // //if (html3.Contains("\"code\":200"))
+ // //{
+ // // order.sendStatus = "已提交";
+ // //}
+ //}
// 直接取号
if (order.sendStatus != "提前取号" && order.sendStatus != "提前取号(旧订单)")
{
@@ -1294,7 +1410,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
else
{
- order.sendStatus = "直接取号失败" + BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ order.sendStatus = "直接取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
}
}
// 修改提前取号
@@ -1303,6 +1419,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
if (order.TransitCreateTime.AddHours(23) > DateTime.Now)
{
order.sendStatus = "提前取号流程进行中";
+ return;
}
string url2 = "https://po.e57.cn/prod-api/api/oms-api/external_procurement/update-upstream-waybill";
@@ -1313,7 +1430,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
data["outExpressCompany"] = order.outExpressCompanyCode; // 物流公司编号
data["outExpressNo"] = order.tracking_number;
data["platform"] = "WEISHOP";
- data["orderCode"] = order.order_sn; // 中转仓订单唯一标识码 = 外采定单号
+ data["orderCode"] = order.order_sn; // 中转仓订单唯一标识码 = 外采订单号
var dataStr2 = JsonHelper.SerializeObject(data);
var dispatchRst = HttpResponseWXBLL.e57PostResponse(url2, dataStr2, "");
@@ -1346,7 +1463,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
else
{
- order.sendStatus = "修改提前取号失败" + BaseRegex.GetStringXml(ref dispatchRst, "msg");
+ order.sendStatus = "修改提前取号失败,服务端返回 " + BaseRegex.GetStringXml(ref dispatchRst, "msg");
}
}
}
@@ -1525,7 +1642,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
while (isReadBuyerOrder)
{
Thread.Sleep(500);
- //break;
}
foreach (var buyer in GlobalConfig.PDDBuyerLoginList)
@@ -1533,7 +1649,6 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
//postman request POST 'https://po.e57.cn/prod-api/api/oms-api/external_procurement/hasAfterSsale' \
//--header 'Content-Type: application/json' \
//--body '{ "platform": "WEISHOP", "startTime": 1774763836, "endTime": "1776050614" , "userAccount": "闲鱼会开车的鱼2343"}'
-
JObject body = new JObject();
body["platform"] = "WEISHOP";
body["startTime"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-7));
@@ -1561,14 +1676,14 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
order.wxRefundStatus = order.order_status_prompt.Contains("待发货") ? "待退款" : "待退货";
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
- Dispatcher.Invoke(new Action(() =>
- {
- ShowOrder(order);
- }));
- if (chkAutoAfterSale.IsChecked == true)
- {
- MakeWxToPddAfterSale(order);
- }
+ //Dispatcher.Invoke(new Action(() =>
+ //{
+ // ShowOrder(order);
+ //}));
+ //if (chkAutoAfterSale.IsChecked == true)
+ //{
+ // PddAutoAfterSale(order);
+ //}
}
}
catch (Exception ex)
@@ -1584,7 +1699,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
///
///
///
- public string MakeWxToPddAfterSale(PddBuyerOrderLiteInfo order)
+ public string PddAutoAfterSale(PddBuyerOrderLiteInfo order)
{
//if (isReadOrder)
//{
@@ -1625,6 +1740,7 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
var afterSaleRst = YkdBuyerOrder.SetOrderAfterSale(buyer, mobile, order.order_sn, applyAmount, refundAmount, newMaxApplyAmount);
if (afterSaleRst.Contains("\"after_sales_status\":1") || afterSaleRst.Contains("该订单已全额退款"))
{
+ // 保存退款成功状态
//order.refundStatus = "已完成/退货";
order.order_status_prompt = "退款成功";
NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_list", lstPddBuyerOrderInfoLite);
@@ -1691,6 +1807,29 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
else
Panel.SetZIndex(MainWindow.Instance.gridPddBuyerOrderReadCtrl, -1);
}
+
+ private void btnHide_Click(object sender, RoutedEventArgs e)
+ {
+ if (btnHide.Content.ParseToString() == "▲")
+ {
+ btnHide.Content = "▼";
+ gridTable.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ btnHide.Content = "▲";
+ gridTable.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ private void chkAutoAfterSale_Checked(object sender, RoutedEventArgs e)
+ {
+ if (isLoad)
+ {
+ buyerReadOrderConfig.IsAutoAfterSale = chkAutoAfterSale.IsChecked == true;
+ NaiBa.Util.Helper.ConfigHelper.SaveConfig("pdd_buyer_order_config", buyerReadOrderConfig);
+ }
+ }
}
public class YkdBuyerOrder
@@ -1730,9 +1869,15 @@ namespace _29WxOrderWpf.Ctrls.BuyerCtrls
}
}
- public class BuyerOrderConfig
+ public class BuyerReadOrderConfig
{
- public bool IsPause = false;
+ ///
+ /// 是否自动读单
+ ///
+ public bool IsAutoReadOrder = true;
+ ///
+ /// 是否自动售后未发货订单
+ ///
public bool IsAutoAfterSale = true;
}
}
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
index 60412c6..b30a197 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
@@ -38,7 +38,7 @@
-
+
@@ -48,22 +48,25 @@
-
+
-
-
+
+
-
-
+
+
+
-
-
-
+
+
+
+
+
@@ -83,9 +86,16 @@
+
+
+
+