diff --git a/29WxOrderWpf/App.xaml b/29WxOrderWpf/App.xaml
index 1c7d122..e1b9953 100644
--- a/29WxOrderWpf/App.xaml
+++ b/29WxOrderWpf/App.xaml
@@ -11,6 +11,7 @@
+
diff --git a/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs b/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs
index 7061a44..528b65a 100644
--- a/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs
+++ b/29WxOrderWpf/BaseWindows/BaseMsgWindow.xaml.cs
@@ -49,14 +49,14 @@ namespace _29WxOrderWpf.BaseWindows
BaseMsgWindow msgBox = null;
Window owner = window ?? MainWindow.Instance;
-
- owner.Dispatcher.Invoke(new Action(() =>
- {
+ //owner.Dispatcher.Invoke(() =>
+ Application.Current.Dispatcher.Invoke(() =>
+ {
msgBox = CreateMsgForm(msg, title, wl);
msgBox.imgTip.Source = Application.Current.Resources["imgBaseMsgInfo"] as ImageSource;
- msgBox.Owner = owner;
+ //msgBox.Owner = owner;
msgBox.ShowDialog();
- }));
+ });
return msgBox;
}
@@ -65,13 +65,14 @@ namespace _29WxOrderWpf.BaseWindows
string title = string.IsNullOrEmpty(caption) ? "系统错误" : caption;
BaseMsgWindow msgBox = null;
Window owner = window ?? MainWindow.Instance;
- owner.Dispatcher.Invoke(new Action(() =>
- {
+ //owner.Dispatcher.Invoke(() =>
+ Application.Current.Dispatcher.Invoke(() =>
+ {
msgBox = CreateMsgForm(msg, title, wl);
msgBox.imgTip.Source = Application.Current.Resources["imgBaseMsgErr"] as ImageSource;
- msgBox.Owner = owner;
+ //msgBox.Owner = owner;
msgBox.ShowDialog();
- }));
+ });
return msgBox;
}
@@ -81,8 +82,9 @@ namespace _29WxOrderWpf.BaseWindows
BaseMsgWindow msgBox = null;
Window owner = window ?? MainWindow.Instance;
- owner.Dispatcher.Invoke(() =>
- {
+ //owner.Dispatcher.Invoke(() =>
+ Application.Current.Dispatcher.Invoke(() =>
+ {
msgBox = new BaseMsgWindow
{
lblTitle = { Content = title },
@@ -94,7 +96,7 @@ namespace _29WxOrderWpf.BaseWindows
msgBox.Width = (int)MsgWindowLevel.LARGE;
msgBox.Height = 500;
}
- msgBox.Owner = owner;
+ //msgBox.Owner = owner;
msgBox.ShowDialog();
});
return msgBox;
diff --git a/29WxOrderWpf/Converters/TextToVisibilityConverter.cs b/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
index e9343fb..0c9130f 100644
--- a/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
+++ b/29WxOrderWpf/Converters/TextToVisibilityConverter.cs
@@ -53,20 +53,36 @@ namespace _29WxOrderWpf.Converters
}
}
- ///
- /// 超出26个字的文本显示省略号
- ///
- public class TextEllipsisConverter26 : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value.ParseToString().Length > 26)
- return string.Join("", value.ParseToString().Take(26)) + "…";
- return value.ParseToString();
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException(); // 单向绑定可不实现
- }
- }
+ ///
+ /// 超出26个字的文本显示省略号
+ ///
+ public class TextEllipsisConverter26 : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value.ParseToString().Length > 26)
+ return string.Join("", value.ParseToString().Take(26)) + "…";
+ return value.ParseToString();
+ }
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException(); // 单向绑定可不实现
+ }
+ }
+ ///
+ /// 超出10个字的文本显示省略号
+ ///
+ public class TextEllipsisConverter8 : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value.ParseToString().Length > 8)
+ return string.Join("", value.ParseToString().Take(8)) + "…";
+ return value.ParseToString();
+ }
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException(); // 单向绑定可不实现
+ }
+ }
}
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
index 403bb8b..ef2d0a8 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml
@@ -596,7 +596,7 @@
VerticalAlignment="Center"
BorderBrush="{StaticResource mainColorBrush}"
Click="chkMapProd_Click"
- Content="已关联商品"
+ Content="选择SKU"
FontSize="12" />
+
-
+
+
+
+
+
-
+
+
+
+
+
+
-
+
@@ -1091,17 +1138,7 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
index f398aef..82baa63 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
@@ -5,6 +5,8 @@ using _29WxOrderWpf.Ctrls.BuyerCtrls;
using _29WxOrderWpf.Ctrls.Statistics;
using _29WxOrderWpf.Services;
using _29WxOrderWpf.Utils;
+using _29WxOrderWpf.ViewModels;
+using _29WxOrderWpf.Views;
using _29WxOrderWpf.Windows.OrderWindows;
using AllBase;
using AllBase.Extension;
@@ -42,9 +44,9 @@ using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
-using _29WxOrderWpf.ViewModels;
using Work;
using Work._29Tools.BLL;
+using Work.BaseForms;
using Work.BuyUsers;
using Work.KJDServer.API.Models;
using WPFCommon.Helpers;
@@ -58,6 +60,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
///
public partial class OrderListCtrl : UserControl, INotifyPropertyChanged
{
+ public static bool IsAutoBuy { get; set; } = false;
public CheckBox chkSelectAll = null;
OrderFilterConfig _orderFilterConfig;
public OrderFilterConfig orderFilterConfig
@@ -304,8 +307,12 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// 读取关联拍单商品
var buyMapList = GetBuyProdMap(orderItems);
+ // 读取关联拍单的所有sku
var buyMapSkusList = GetBuyProdMapSkus(orderItems);
+ // 读取物流轨迹
+ var ewaybillLst = GetEWaybillPath(order_ids);
+
// 装载订单
foreach (JObject jObj in jArr)
{
@@ -364,6 +371,15 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
// 装载订单售后详情
order.refundItems = new ObservableCollection(refunds.Where(of => of.order_id == order.order_id));
+
+ if (order.order_id.Contains("3738794693820307200"))
+ {
+
+ }
+
+ // 装载订单物流最后一条信息
+ order.latestEWaybills = [.. ewaybillLst.Where(ew => ew.order_id == order.order_id.ParseToLong())];
+
// 读取订单后立即赋值,防止滚动时实时赋值造成卡顿
InitOrderObservableProp(order);
@@ -682,6 +698,37 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return new List();
}
+ public static List GetEWaybillPath(string order_ids)
+ {
+ List oms_wei_ewaybill_path_list = null;
+ if (!string.IsNullOrEmpty(order_ids))
+ {
+ try
+ {
+ var url = BaseClass.Build29WxObjString("order/wx_get_erp_ewaybill_path_latest_list");
+ var data = UserLogin.GetSignaturex();
+ data += "&erp_order_id_in=" + order_ids;
+ 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"))
+ {
+ BaseMsgWindow.ShowAnimateMessage("物流查询失败 " + BaseRegex.GetStringJson(ref html, "msg"), "Error", 6);
+ }
+ else
+ {
+ oms_wei_ewaybill_path_list = JsonHelper.DeserializeJsonToList(JObject.Parse(html)["data"].ParseToString()).OrderByDescending(p => p.update_time).ToList();
+ }
+ }
+ catch
+ {
+ }
+ }
+ if (oms_wei_ewaybill_path_list == null)
+ oms_wei_ewaybill_path_list = new List();
+ return oms_wei_ewaybill_path_list;
+ }
+
public static List GetBuyProdMap(List orderItems)
{
//foreach (var item in orderItems.ToList())
@@ -987,7 +1034,19 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
var waybillId = orderItem.ItemTransitOrderAfterSale.downstream_waybill;
var chkRst = AddReturnPddShopPackageInfocheck(buyer, orderSn, afterSalesId, waybillId);
- var result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId);
+ var type = 4;
+ if (chkRst.Contains("\"interactType\":0"))
+ type = 2;
+ var result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
+ if (!result.Contains("\"result\":\"ok\""))
+ {
+ type = type == 4 ? 2 : 4;
+ result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
+ }
+ if (!result.Contains("\"result\":\"ok\""))
+ {
+ result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", "5");
+ }
if (result.Contains("\"result\":\"ok\""))
{
@@ -1068,6 +1127,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
type = type == 4 ? 2 : 4;
result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
}
+ if (!result.Contains("\"result\":\"ok\""))
+ {
+ result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", "5");
+ }
if (result.Contains("\"result\":\"ok\""))
{
@@ -1149,6 +1212,10 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
type = type == 4 ? 2 : 4;
result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", type.ToString());
}
+ if (!result.Contains("\"result\":\"ok\""))
+ {
+ result = AddReturnPddShopPackageInfo(buyer, orderSn, afterSalesId, waybillId, "韵达快递", "121", "5");
+ }
if (result.Contains("\"result\":\"ok\""))
{
@@ -1239,7 +1306,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (tabItem != null)
{
var filteLstTmp = userOrderLst.Where(o => !GetOrderIsFilter(o, "异常需重拍"));
- Dispatcher.Invoke(new Action(() => { tabItem.Header = "异常需重拍(" + userOrderLst.Where(r => r.isAbnormal).Count() + "|" + filteLstTmp.Count() + ")"; }));
+ Dispatcher.Invoke(new Action(() => { tabItem.Header = "异常需重拍(" + userOrderLst.Where(r => r.IsAbnormal).Count() + "|" + filteLstTmp.Count() + ")"; }));
}
Dispatcher.Invoke(new Action(() => { tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("全部订单")); }));
if (tabItem != null)
@@ -1510,13 +1577,17 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
}
if (filterHeadStr.StartsWith("待采购"))
{
+ if (order.order_id == "3739161507780018688")
+ {
+
+ }
if (!order.IsWaitBuy)
return true;
- if (chkMapSku.IsChecked == true && order.orderItems.All(oi => oi.BuyMap == null && (oi.BuyMapSkus == null || oi.BuyMapSkus.Count == 0)))
+ if (chkMapSku.IsChecked == true && order.orderItems.Any(oi => oi.BuyMap == null))
return true;
- if (chkMapProd.IsChecked == true && order.orderItems.All(oi => oi.BuyMapSkus == null || oi.BuyMapSkus.Count == 0))
+ if (chkMapProd.IsChecked == true && order.orderItems.All(oi => oi.BuyMapSkus == null || oi.BuyMapSkus.Count == 0 || oi.BuyMap != null))
return true;
- if (chkNoMapProd.IsChecked == true && order.orderItems.All(oi => oi.BuyMap != null))
+ if (chkNoMapProd.IsChecked == true && (order.orderItems.All(oi => oi.BuyMap != null) || order.orderItems.All(oi => oi.BuyMapSkus != null && oi.BuyMapSkus.Count > 0)))
return true;
}
if (filterHeadStr.StartsWith("待发货"))
@@ -1531,6 +1602,35 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
if (!rst2)
return true;
}
+
+ if (chkWaitSend72HourNoWaybill.IsChecked == true)
+ {
+ if (order.orderItems.Any(oi => oi.DirectPddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && bOrder?.order_time <= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72))))
+ { }
+ // 直发没有单号正常发货才判断中转仓总店是否超时发货
+ else if (order.orderItems.Any(oi => (oi.DirectPddBuyerOrders?.Count).IsNullOrZero() &&
+ oi.PddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && bOrder?.order_time <= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72))))
+ { }
+ else
+ return true;
+ }
+ else if (chkWaitSend48HourNoWaybill.IsChecked == true)
+ {
+ if (order.orderItems.Any(oi => oi.DirectPddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && (bOrder?.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-48)) &&
+ bOrder.order_time >= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72)))))
+ { }
+ // 直发没有单号才判断中转仓总店是否超时发货
+ else if (order.orderItems.Any(oi => (oi.DirectPddBuyerOrders?.Count).IsNullOrZero() &&
+ oi.PddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && (bOrder?.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-48)) &&
+ bOrder.order_time >= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72)))))
+ { }
+ else
+ return true;
+ }
}
if (filterHeadStr.StartsWith("待收货"))
{
@@ -1559,8 +1659,41 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return true;
if (chkWaitReceiveWarehouseIsSendOut.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转已出库"))
return true;
+
+ if (chk72HourNoWaybill.IsChecked == true)
+ {
+ if (order.order_id == "3739190405314033408")
+ {
+
+ }
+ // 直发没有单号才判断中转仓总店是否超时发货
+ if (order.orderItems.Any(oi => oi.DirectPddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && bOrder?.order_time <= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72))))
+ { }
+ else if (order.orderItems.Any(oi => (oi.DirectPddBuyerOrders?.Count).IsNullOrZero() &&
+ oi.PddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && bOrder?.order_time <= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72))))
+ { }
+ else
+ return true;
+ }
+ else if (chk48HourNoWaybill.IsChecked == true)
+ {
+ // 直发没有单号才判断中转仓总店是否超时发货
+ if (order.orderItems.Any(oi => oi.DirectPddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && (bOrder?.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-48)) &&
+ bOrder.order_time >= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72)))))
+ { }
+ else if (order.orderItems.Any(oi =>(oi.DirectPddBuyerOrders?.Count).IsNullOrZero() &&
+ oi.PddBuyerOrders.OrderByDescending(bo => bo.order_time).FirstOrDefault() is order_pdd_buyer_order bOrder &&
+ (bOrder?.tracking_number).IsNullOrEmpty() && (bOrder?.order_time < BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-48)) &&
+ bOrder.order_time >= BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddHours(-72)))))
+ { }
+ else
+ return true;
+ }
}
- if (filterHeadStr.StartsWith("异常需重拍") && !order.isAbnormal)
+ if (filterHeadStr.StartsWith("异常需重拍") && !order.IsAbnormal)
{
return true;
}
@@ -1657,12 +1790,9 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
foreach (var orderItem in order.orderItems)
{
- for (int i = 0; i < 1000; i++)
- {
- var receiver = TransitReturnOrderWindow.PddAddressAnalysis(orderItem.PddBuyerAfterSale?.afterSaleAddress);
- if (!receiver.receiver_address.IsNullOrEmpty())
- return true;
- }
+ var receiver = TransitReturnOrderWindow.PddAddressAnalysis(orderItem.PddBuyerAfterSale?.afterSaleAddress);
+ if (!receiver.receiver_address.IsNullOrEmpty() && receiver.receiver_name.Length <= 15)
+ return true;
}
}
else
@@ -1673,11 +1803,34 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
foreach (var orderItem in order.orderItems)
{
var receiver = TransitReturnOrderWindow.PddAddressAnalysis(orderItem.DirectPddBuyerAfterSale?.afterSaleAddress);
- if (!receiver.receiver_address.IsNullOrEmpty())
+ if (!receiver.receiver_address.IsNullOrEmpty() && receiver.receiver_name.Length <= 15)
return true;
}
}
}
+
+ var cmbReturnOrderStatusText = cmbReturnOrderStatus.SelectedItem.ParseToString().Replace("System.Windows.Controls.ComboBoxItem: ", "");
+ if (cmbReturnOrderStatusText == "未创建" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseReturnOrderStr == "未创建"))
+ return true;
+ if (cmbReturnOrderStatusText == "创建失败" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseReturnOrderStr == "创建失败"))
+ return true;
+ if (cmbReturnOrderStatusText == "已创建未到仓" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseReturnOrderStr.StartsWith("已创建未到仓")))
+ return true;
+ if (cmbReturnOrderStatusText == "已到仓" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseReturnOrderStr.StartsWith("已到仓")))
+ return true;
+ if (cmbReturnOrderStatusText == "已发回" && !order.orderItems.Any(oi => oi.AddEditTransitWarehouseReturnOrderStr.StartsWith("已发回")))
+ return true;
+
+ var cmbReturnOrderBuyerStatusText = cmbReturnOrderBuyerStatus.SelectedItem.ParseToString().Replace("System.Windows.Controls.ComboBoxItem: ", "");
+
+ if (cmbReturnOrderBuyerStatusText == "买手待申请售后" && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("需手动申请售后")))
+ return true;
+ else if (cmbReturnOrderBuyerStatusText == "买手待退货" && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("待用户发货")))
+ return true;
+ else if (cmbReturnOrderBuyerStatusText == "买手已寄出待商家退款" && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("商家处理中")))
+ return true;
+ else if (cmbReturnOrderBuyerStatusText == "买手退货失败" && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("退款失败")))
+ return true;
}
if (filterHeadStr.StartsWith("售后完成单"))
{
@@ -2176,7 +2329,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
int index = 0;
foreach (var tmpOrderItem in tmpOrderItems)
{
- if (tmpOrderItem.order_id == "3738534855500515072")
+ if (tmpOrderItem.order_id == "3739068430223324416")
{
}
@@ -2211,7 +2364,8 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
continue;
}
- MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id);
+ await Task.Run(() => { MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id); });
+
oms_wei_order_info order = null;
Dispatcher.Invoke(new Action(() => { order = GlobalConfig.lstOrder.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id); }));
@@ -2327,7 +2481,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功" + orderItem.order_id, "Msg", 3);
isSimPddAfterSaleSuccess = true;
- Thread.Sleep(Randomx.GetId(10000, 12001));
+ await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
@@ -2342,7 +2496,7 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
isSimPddAfterSaleSuccess = true;
- Thread.Sleep(Randomx.GetId(10000, 12001));
+ await Task.Run(() => { Thread.Sleep(Randomx.GetId(10000, 12001)); });
}
else
{
@@ -2715,16 +2869,57 @@ namespace _29WxOrderWpf.Ctrls.OrderCtrls
return;
}
+ IsAutoBuy = true;
foreach (var order in buyOrders)
{
var orderItem = order.orderItems.FirstOrDefault();
await OrderListRowItemCtrl.BuyOrder(orderItem, true);
+ if (IsAutoBuy == false)
+ break;
}
+ IsAutoBuy = false;
}
private void btnAutoBuyIntroduction_Click(object sender, RoutedEventArgs e)
{
+ AutoBuyIntroductionView autoBuyIntroForm = new AutoBuyIntroductionView();
+ new DialogWindow()
+ {
+ Title = "自动拍单设置说明",
+ Content = autoBuyIntroForm,
+ }.ShowDialog();
+ }
+ private void chkNoWaybill_Click(object sender, RoutedEventArgs e)
+ {
+ if (sender is CheckBox chk)
+ {
+ var isCheck = !chk.IsChecked.ParseToBool();
+ chk48HourNoWaybill.IsChecked = chk72HourNoWaybill.IsChecked = false;
+ chk.IsChecked = !isCheck;
+ }
+ FilterOrders();
+ }
+
+ private void chkWaitSendNoWaybill_Click(object sender, RoutedEventArgs e)
+ {
+ if (sender is CheckBox chk)
+ {
+ var isCheck = !chk.IsChecked.ParseToBool();
+ chkWaitSend48HourNoWaybill.IsChecked = chkWaitSend72HourNoWaybill.IsChecked = false;
+ chk.IsChecked = !isCheck;
+ }
+ FilterOrders();
+ }
+
+ private void cmbReturnOrderStatus_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ FilterOrders();
+ }
+
+ private void cmbReturnOrderBuyerStatus_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ FilterOrders();
}
}
diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
index 29153b3..706bdeb 100644
--- a/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
+++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderListRowItemCtrl.xaml
@@ -207,6 +207,7 @@
+
+
+
+
-
+
@@ -417,15 +430,33 @@
-
+
+
+
+
+
-
-
-
+
-
+
+
+
+
@@ -896,7 +932,7 @@
+
+
@@ -996,7 +1041,7 @@
IsReadOnly="True"
Text="{Binding ItemOrder.shop_remark}"
TextWrapping="Wrap"
- Visibility="Visible"
+ Visibility="{Binding ItemOrder.shop_remark, Converter={StaticResource HasTextVisibility}}"
WaterMark="店铺备注" />
+
@@ -1104,10 +1163,11 @@
IsReadOnly="True"
Text="{Binding AddEditTransitWarehouseReturnOrderWaybillStr}"
TextWrapping="Wrap"
+ Visibility="{Binding AddEditTransitWarehouseReturnOrderWaybillStr, Converter={StaticResource HasTextVisibility}}"
WaterMark="云仓退货" />
@@ -1170,7 +1230,7 @@
Background="Transparent"
Cursor="Hand"
MouseLeftButtonDown="pathDirectBuyerAfterSaleAddress_MouseLeftButtonDown"
- Visibility="{Binding ElementName=txtBuyerRefundAddress, Path=Visibility}">
+ Visibility="{Binding ElementName=txtDirectBuyerRefundAddress, Path=Visibility}">
diff --git a/29WxOrderWpf/Views/AutoBuyIntroductionView.xaml.cs b/29WxOrderWpf/Views/AutoBuyIntroductionView.xaml.cs
index f0292e5..ce06795 100644
--- a/29WxOrderWpf/Views/AutoBuyIntroductionView.xaml.cs
+++ b/29WxOrderWpf/Views/AutoBuyIntroductionView.xaml.cs
@@ -1,4 +1,9 @@
-using System;
+using _29WxOrderWpf.BaseWindows;
+using AllBase.Helper;
+using AllBase.Model.DBModel;
+using NaiBa.Util;
+using NaiBa.Util.Helper;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -12,6 +17,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using Work.Pinduoduo;
namespace _29WxOrderWpf.Views
{
@@ -27,17 +33,42 @@ namespace _29WxOrderWpf.Views
private void AutoBuyInstructionView_Loaded(object sender, RoutedEventArgs e)
{
-
+ this.pbxPassWord.Password = DataOpenSSL.DecryptString(GlobalConfig.AlipayPassword);
}
private void btnSaveAliPass_Click(object sender, RoutedEventArgs e)
{
-
+ GlobalConfig.AlipayPassword = DataOpenSSL.EncryptString(this.pbxPassWord.Password);
+ ConfigHelper.SaveConfig("ali_pay_password", new List() { GlobalConfig.AlipayPassword });
+ BaseMsgWindow.ShowInfo("密码保存成功!");
}
private void btnClear_Click(object sender, RoutedEventArgs e)
{
+ this.pbxPassWord.Password = "";
+ GlobalConfig.AlipayPassword = "";
+ ConfigHelper.SaveConfig("ali_pay_password", new List() { GlobalConfig.AlipayPassword });
+ BaseMsgWindow.ShowInfo("密码已清除!");
+ }
+ private void btnSee_Click(object sender, RoutedEventArgs e)
+ {
+ if (txtPassWord.Visibility == Visibility.Visible)
+ txtPassWord.Visibility = Visibility.Collapsed;
+ else
+ txtPassWord.Visibility = Visibility.Visible;
+ }
+
+ private void pbxPassWord_PasswordChanged(object sender, RoutedEventArgs e)
+ {
+ if (txtPassWord.Text != pbxPassWord.Password)
+ txtPassWord.Text = pbxPassWord.Password;
+ }
+
+ private void txtPassWord_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (txtPassWord.Text != pbxPassWord.Password)
+ pbxPassWord.Password = txtPassWord.Text;
}
}
}
diff --git a/29WxOrderWpf/Views/ChangeWaybillView.xaml b/29WxOrderWpf/Views/ChangeWaybillView.xaml
new file mode 100644
index 0000000..2400b87
--- /dev/null
+++ b/29WxOrderWpf/Views/ChangeWaybillView.xaml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs b/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs
new file mode 100644
index 0000000..c76fa1a
--- /dev/null
+++ b/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs
@@ -0,0 +1,63 @@
+using _29WxOrderWpf.ViewModels;
+using AllBase.Helper;
+using AllBase.Model.DBModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace _29WxOrderWpf.Views;
+
+///
+/// ChangeWaybillView.xaml 的交互逻辑
+///
+public partial class ChangeWaybillView : UserControl
+{
+ ///
+ /// 视图模型
+ ///
+ public ChangeWaybillViewModel ViewModel { get; }
+
+ public ChangeWaybillView(oms_wei_order_info _order)
+ {
+ InitializeComponent();
+
+ ViewModel = new ChangeWaybillViewModel(_order);
+ ViewModel.RequestClose += ViewModel_RequestClose;
+ DataContext = ViewModel;
+ }
+
+ private void ChangeWaybillView_Loaded(object sender, RoutedEventArgs e)
+ {
+ ViewModel.Start();
+ }
+
+ private void ChangeWaybillView_Closed(object sender, RoutedEventArgs e)
+ {
+ ViewModel.Stop();
+ }
+
+ private void ViewModel_RequestClose()
+ {
+ Window parentWindow = Window.GetWindow(this);
+ if (this.IsLoaded && parentWindow != null)
+ parentWindow.Close();
+
+ MainWindow.Instance.orderListCtrl.FilterOneOrder(ViewModel.Order);
+ }
+
+ private void Button_Click(object sender, RoutedEventArgs e)
+ {
+
+ }
+}
diff --git a/29WxOrderWpf/Views/EWaybillPathListView.xaml b/29WxOrderWpf/Views/EWaybillPathListView.xaml
new file mode 100644
index 0000000..d364d79
--- /dev/null
+++ b/29WxOrderWpf/Views/EWaybillPathListView.xaml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Views/EWaybillPathListView.xaml.cs b/29WxOrderWpf/Views/EWaybillPathListView.xaml.cs
new file mode 100644
index 0000000..ba34dad
--- /dev/null
+++ b/29WxOrderWpf/Views/EWaybillPathListView.xaml.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace _29WxOrderWpf.Views;
+
+///
+/// EWaybillPathListView.xaml 的交互逻辑
+///
+public partial class EWaybillPathListView : UserControl
+{
+ public EWaybillPathListView()
+ {
+ InitializeComponent();
+ }
+
+ private void imgSku_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+
+ }
+
+ private void imgSku_MouseEnter(object sender, MouseEventArgs e)
+ {
+
+ }
+
+ private void imgSku_MouseLeave(object sender, MouseEventArgs e)
+ {
+
+ }
+}
diff --git a/29WxOrderWpf/Views/EWaybillPathView.xaml b/29WxOrderWpf/Views/EWaybillPathView.xaml
new file mode 100644
index 0000000..2497ad5
--- /dev/null
+++ b/29WxOrderWpf/Views/EWaybillPathView.xaml
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/29WxOrderWpf/Views/EWaybillPathView.xaml.cs b/29WxOrderWpf/Views/EWaybillPathView.xaml.cs
new file mode 100644
index 0000000..be03b99
--- /dev/null
+++ b/29WxOrderWpf/Views/EWaybillPathView.xaml.cs
@@ -0,0 +1,42 @@
+using _29WxOrderWpf.ViewModels;
+using AllBase.Model.DBModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace _29WxOrderWpf.Views;
+
+///
+/// EWaybillPathView.xaml 的交互逻辑
+///
+public partial class EWaybillPathView : UserControl
+{
+ ///
+ /// 视图模型
+ ///
+ public EWaybillPathViewModel ViewModel { get; }
+
+ public EWaybillPathView(oms_wei_order_info _order, string _waybillId, string _expressName)
+ {
+ InitializeComponent();
+
+ ViewModel = new EWaybillPathViewModel(_order, _waybillId, _expressName);
+ DataContext = ViewModel;
+ }
+
+ private void EWaybillPathCtrl_Loaded(object sender, RoutedEventArgs e)
+ {
+ ViewModel.Start();
+ }
+}
diff --git a/29WxOrderWpf/Windows/OrderWindows/TransitReturnOrderWindow.xaml.cs b/29WxOrderWpf/Windows/OrderWindows/TransitReturnOrderWindow.xaml.cs
index 3eedbb7..3ae61cc 100644
--- a/29WxOrderWpf/Windows/OrderWindows/TransitReturnOrderWindow.xaml.cs
+++ b/29WxOrderWpf/Windows/OrderWindows/TransitReturnOrderWindow.xaml.cs
@@ -102,16 +102,31 @@ namespace _29WxOrderWpf.Windows.OrderWindows
{
// 回填库内信息
btnAdd.Content = "创 建";
- txtProvince.Text = OrderItem.DistribReturnOrderInfo.receiver_province;
- txtCity.Text = OrderItem.DistribReturnOrderInfo.receiver_city;
- txtCounty.Text = OrderItem.DistribReturnOrderInfo.receiver_area;
- txtDetailAddress.Text = OrderItem.DistribReturnOrderInfo.receiver_address;
- txtUser.Text = OrderItem.DistribReturnOrderInfo.receiver_name;
- txtMobile.Text = OrderItem.DistribReturnOrderInfo.receiver_phone;
+ if (OrderItem.DistribReturnOrderInfo != null)
+ {
+ txtProvince.Text = OrderItem.DistribReturnOrderInfo.receiver_province;
+ txtCity.Text = OrderItem.DistribReturnOrderInfo.receiver_city;
+ txtCounty.Text = OrderItem.DistribReturnOrderInfo.receiver_area;
+ txtDetailAddress.Text = OrderItem.DistribReturnOrderInfo.receiver_address;
+ txtUser.Text = OrderItem.DistribReturnOrderInfo.receiver_name;
+ txtMobile.Text = OrderItem.DistribReturnOrderInfo.receiver_phone;
+ }
}
- if (OrderItem.AddEditTransitWarehouseReturnOrderStr == "已创建" || OrderItem.AddEditTransitWarehouseReturnOrderStr == "处理中")
- btnAdd.IsEnabled = false;
+ if (OrderItem.AddEditTransitWarehouseReturnOrderStr == "已创建未到仓" || OrderItem.AddEditTransitWarehouseReturnOrderStr == "已到仓" ||
+ OrderItem.AddEditTransitWarehouseReturnOrderStr == "已发回")
+ {
+ btnAdd.IsEnabled = btnAddressAnalysis.IsEnabled = false;
+ if (OrderItem.DistribReturnOrderInfo != null)
+ {
+ txtProvince.Text = OrderItem.DistribReturnOrderInfo.receiver_province;
+ txtCity.Text = OrderItem.DistribReturnOrderInfo.receiver_city;
+ txtCounty.Text = OrderItem.DistribReturnOrderInfo.receiver_area;
+ txtDetailAddress.Text = OrderItem.DistribReturnOrderInfo.receiver_address;
+ txtUser.Text = OrderItem.DistribReturnOrderInfo.receiver_name;
+ txtMobile.Text = OrderItem.DistribReturnOrderInfo.receiver_phone;
+ }
+ }
}
}
@@ -133,6 +148,11 @@ namespace _29WxOrderWpf.Windows.OrderWindows
BaseMsgWindow.ShowError("缺少收货人信息!");
return;
}
+ if (txtUser.Text.Trim().Length > 15)
+ {
+ BaseMsgWindow.ShowError("收货人姓名长度不能超过15!");
+ return;
+ }
JObject jObj = new JObject();
@@ -254,7 +274,7 @@ namespace _29WxOrderWpf.Windows.OrderWindows
if (wxExpressName.IsNullOrEmpty() || OrderItem.ItemRefund.return_waybill_id.IsNullOrEmpty() || receiver.receiver_name.IsNullOrEmpty() || receiver.receiver_phone.IsNullOrEmpty() ||
receiver.receiver_province.IsNullOrEmpty() || receiver.receiver_city.IsNullOrEmpty() || receiver.receiver_area.IsNullOrEmpty() || receiver.receiver_address.IsNullOrEmpty())
{
- if (!string.IsNullOrWhiteSpace(aftersaleAddress))
+ if (!string.IsNullOrWhiteSpace(aftersaleAddress) || receiver.receiver_name?.Length > 15)
{
// todo 提示地址解析失败请手动提交
OrderItem.AddEditTransitWarehouseReturnOrderStr = "解析失败请手动添加";
diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs
index c89c4ec..44fafc9 100644
--- a/AllBase/BaseClass.cs
+++ b/AllBase/BaseClass.cs
@@ -36,7 +36,7 @@ namespace AllBase
/// 版本ID
///
- public static int VersionCount = 279;
+ public static int VersionCount = 287;
public static string ServerUrl { get; set; } = "http://1.13.195.131:9000";
public static string DebugUrl { get; set; } = "http://localhost:9000";
diff --git a/AllBase/Model/DBModel/oms_wei_ewaybill_path.cs b/AllBase/Model/DBModel/oms_wei_ewaybill_path.cs
new file mode 100644
index 0000000..daa1e11
--- /dev/null
+++ b/AllBase/Model/DBModel/oms_wei_ewaybill_path.cs
@@ -0,0 +1,75 @@
+using AllBase.Model.MvvmBaseClasses;
+using NaiBa.Util.Extension;
+using NaiBa.Util.Helper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AllBase.Model.DBModel
+{
+ public class oms_wei_ewaybill_path : PropertyNotifyObject
+ {
+ public long id { get; set; }
+ public long? shop_id { get; set; }
+ public long? order_id { get; set; }
+ public string ewaybill_order_id { get; set; }
+ public string waybill_id { get; set; }
+ public long update_time
+ {
+ get { return this.GetValue(x => x.update_time); }
+ set
+ {
+ this.SetValue(x => x.update_time, value);
+ this.UpdateTimeStr = BaseClass.StampToDateTime(value.ParseToInt()).ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ }
+ public string UpdateTimeStr
+ {
+ get { return this.GetValue(x => x.UpdateTimeStr); }
+ set { this.SetValue(x => x.UpdateTimeStr, value); }
+ }
+
+ //0待揽件 1揽收 2运输中 3派件 4入柜 5签收 6退回 7转寄 8异常 9出柜 99其他未知
+ public int status
+ {
+ get { return this.GetValue(x => x.status); }
+ set
+ {
+ this.SetValue(x => x.status, value);
+ try
+ {
+ StatusStr = ((oms_wei_ewaybill_path_status_emum)value).ParseToString();
+ }
+ catch
+ {
+ StatusStr = "其他未知";
+ }
+ }
+ }
+ public string StatusStr
+ {
+ get { return this.GetValue(x => x.StatusStr); }
+ set { this.SetValue(x => x.StatusStr, value); }
+ }
+ public string node_desc { get; set; }
+ public DateTime create_time { get; set; }
+ }
+
+ public enum oms_wei_ewaybill_path_status_emum
+ {
+ 待揽件 = 0,
+ 揽收 = 1,
+ 运输中 = 2,
+ 派件 = 3,
+ 入柜 = 4,
+ 签收 = 5,
+ 退回 = 6,
+ 转寄 = 7,
+ 异常 = 8,
+ 出柜 = 9,
+ 其他未知 = 99
+ }
+}
+
diff --git a/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs b/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs
index 1ae9d53..8da7560 100644
--- a/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs
+++ b/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs
@@ -1,4 +1,5 @@
-using System;
+using AllBase.Model.MvvmBaseClasses;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,8 +7,8 @@ using System.Threading.Tasks;
namespace AllBase.Model.DBModel
{
- public class oms_wei_external_procurement_log_info
- {
+ public class oms_wei_external_procurement_log_info : PropertyNotifyObject
+ {
public string OutOrderNumStr
{
get { return out_order_no; }
diff --git a/AllBase/Model/DBModel/oms_wei_order_info.cs b/AllBase/Model/DBModel/oms_wei_order_info.cs
index b0fc8b5..3b6a37a 100644
--- a/AllBase/Model/DBModel/oms_wei_order_info.cs
+++ b/AllBase/Model/DBModel/oms_wei_order_info.cs
@@ -1,5 +1,6 @@
using AllBase.Helper;
using AllBase.Model.MvvmBaseClasses;
+using NaiBa.Util;
using NaiBa.Util.Extension;
using NPOI.OpenXmlFormats.Dml.Diagram;
using NPOI.OpenXmlFormats.Spreadsheet;
@@ -43,10 +44,12 @@ namespace AllBase.Model.DBModel
public ObservableCollection refundItems { get; set; } = new ObservableCollection();
- ///
- /// 待采购
- ///
- public bool IsWaitBuy
+ public ConcurrentList latestEWaybills { get; set; } = new ConcurrentList();
+
+ ///
+ /// 待采购
+ ///
+ public bool IsWaitBuy
{
get { return this.GetValue(x => x.IsWaitBuy); }
set { this.SetValue(x => x.IsWaitBuy, value); }
@@ -143,10 +146,16 @@ namespace AllBase.Model.DBModel
///
/// 异常单(买手异常退货)异常需重拍
///
- public bool isAbnormal
+ public bool IsAbnormal
{
- get { return this.GetValue(x => x.isAbnormal); }
- set { this.SetValue(x => x.isAbnormal, value); }
+ get { return this.GetValue(x => x.IsAbnormal); }
+ set { this.SetValue(x => x.IsAbnormal, value); }
+ }
+
+ public bool IsShowChangeWaybillBtn
+ {
+ get { return this.GetValue(x => x.IsShowChangeWaybillBtn); }
+ set { this.SetValue(x => x.IsShowChangeWaybillBtn, value); }
}
public string orderStatusStr
@@ -207,7 +216,7 @@ namespace AllBase.Model.DBModel
///
public string ship_done_time_str
{
- get { return BaseClass.StampToDateTime(this.ship_done_time.ParseToInt()).ToString("yyyy-MM-dd HH:mm:ss"); }
+ get { return BaseClass.StampToDateTime(this.ship_done_time.ParseToInt()).ToString("yy-MM-dd HH:mm:ss"); }
set { }
}
///
@@ -666,6 +675,10 @@ namespace AllBase.Model.DBModel
/// 中转仓的状态 0未使用,1已创建,2创建失败(购买失败),3已创建未有上游快递单号,4已创建有上游快递单号
///
public decimal? transfer_warehouse_status { get; set; }
+ ///
+ /// 店铺运费
+ ///
+ public int? postage_price { get; set; }
public void SetOrderTextProperty()
{
@@ -699,7 +712,17 @@ namespace AllBase.Model.DBModel
IsWaitBuy = GetIsWaitBuy();
IsWaitSend = GetIsWaitSend();
IsWaitReceive = GetIsWaitReceive();
- isAbnormal = GetIsAbnormal();
+
+ if (order_id == "3739089000222605568")
+ {
+
+ }
+ IsAbnormal = GetIsAbnormal();
+
+ if (IsWaitBuy || IsWaitSend)
+ IsShowChangeWaybillBtn = false;
+ else
+ IsShowChangeWaybillBtn = true;
}
public bool GetIsWaitBuy()
@@ -773,6 +796,11 @@ namespace AllBase.Model.DBModel
public bool GetIsAbnormal()
{
+ // 三退或者两退,为退款完成单
+ //if (orderItems.All(oi => (oi.refund_status == 4 || oi.refund_status == 11) && (oi.ItemTransitOrder != null || string.IsNullOrWhiteSpace(out_order_no)) &&
+ // (oi.ItemTransitOrder == null || oi.ItemTransitOrder?.refund_status == "买手退款成功") && (string.IsNullOrWhiteSpace(out_order_no) || out_after_sale_status == "退款成功")))
+ // return false;
+
// 如果有售后,直接作为售后单处理
if (orderItems.All(oi => oi.refund_status > 1))
return false;
@@ -781,7 +809,6 @@ namespace AllBase.Model.DBModel
return false;
if (gift_order_status == 1 || gift_order_status == 2)
return false;
-
if (orderItems.Any(oi => !(oi.OrderItemExt?.abnormal_text).IsNullOrEmpty()))
return true;
diff --git a/AllBase/Model/DBModel/oms_wei_order_item_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_info.cs
index e0f6e6f..52b435c 100644
--- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs
+++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs
@@ -227,20 +227,20 @@ namespace AllBase.Model.DBModel
}
public List PddBuyerAfterSales { get; set; } = new List();
public order_pdd_buyer_after_sale PddBuyerAfterSale
- {
- get { return this.GetValue(x => x.PddBuyerAfterSale); }
- set { this.SetValue(x => x.PddBuyerAfterSale, value); }
+ {
+ get { return this.GetValue(x => x.PddBuyerAfterSale); }
+ set
+ {
+ this.SetValue(x => x.PddBuyerAfterSale, value);
+ // 云仓买手退货地址
+ this.PddBuyerAfterSaleAddressStr = this.PddBuyerAfterSale?.afterSaleAddress;
+ }
}
public string PddBuyerAfterSaleAddressStr
{
get { return this.GetValue(x => x.PddBuyerAfterSaleAddressStr); }
set { this.SetValue(x => x.PddBuyerAfterSaleAddressStr, value); }
}
- public string DirectPddBuyerAfterSaleAddressStr
- {
- get { return this.GetValue(x => x.DirectPddBuyerAfterSaleAddressStr); }
- set { this.SetValue(x => x.DirectPddBuyerAfterSaleAddressStr, value); }
- }
public void SetTransitOrder()
{
@@ -276,9 +276,9 @@ namespace AllBase.Model.DBModel
else
TransitOrderWaybillFromWareHouseStr = ItemTransitOrder.express_2_company + "-" + ItemTransitOrder.express_2_waybill;
- if (order_id == "3738461463336072960")
+ if (order_id == "3739043283864307968")
{
-
+ var xx = ShopWaybillExceptionStr;
}
TransitWarehouseRejectSuccessTimeStr = this.ItemTransitOrderWithVoid?.rejected_time == null ? "" : this.ItemTransitOrderWithVoid.rejected_time.Value.ToString("yy-MM-dd HH:mm");
AddEditTransitWarehouseRejectStr = "申请";
@@ -290,11 +290,12 @@ namespace AllBase.Model.DBModel
AddEditTransitWarehouseRejectStr = "申请拒收成功";
if (this.ItemTransitOrderWithVoid?.has_reject == 5)
AddEditTransitWarehouseRejectStr = "已取消拒收";
- if (this.ItemTransitOrderWithVoid == null || this.ItemRefund?.type != "REFUND" || // 仅退款
+
+ if (this.ItemTransitOrderWithVoid == null || (this.ItemRefund?.type != "REFUND" && !this.ItemOrder.IsAbnormal) || // 仅退款
+ TransitRefundStatusStr.Contains("退款成功") ||
!(this.ItemRefund?.return_waybill_id).IsNullOrEmpty() || !(this.ItemRefund?.return_detail).IsNullOrEmpty() ||
- (!this.ItemOrder.IsEmergency && !this.ItemOrder.isAbnormal && !this.ItemOrder.IsRefund) ||
+ (!this.ItemOrder.IsEmergency && !this.ItemOrder.IsAbnormal && !this.ItemOrder.IsRefund) ||
(this.ItemTransitOrderWithVoid.warehouse_status != 0 && this.ItemTransitOrderWithVoid.warehouse_status != 1) ||
- /*this.ItemTransitOrderWithVoid.platform == "XDYYWC" ||*/ // 义务仓不能申请拒收
string.IsNullOrEmpty(PddBuyerOrder?.order_sn))
{
if (AddEditTransitWarehouseRejectStr == "申请")
@@ -303,22 +304,28 @@ namespace AllBase.Model.DBModel
// AddEditTransitWarehouseRejectStr = "申请拒收失败*";
}
- if (order_id == "3738396781943865344")
+ if (order_id == "3739154342108377600")
{
}
+ // 拦截退回操作信息
+ InterceptReturnInfoStr = "";
+ if (this.ItemTransitOrderWithVoid != null)
+ InterceptReturnInfoStr = this.ItemTransitOrderWithVoid.intercept_return_info;
+
// 仓库物流售后拦截包裹按钮上的文字,仓库作废单不存在仓库物流,所以此处必须是有效的仓库单(含作废失败)
AddEditTransitWarehouseAfterSaleStr = "添加";
if (this.ItemTransitOrderAfterSale != null)
AddEditTransitWarehouseAfterSaleStr = "已添加";
if (this.ItemTransitOrderAfterSale != null && (ItemTransitOrderWithVoid.intercept_return_status == 1 || !string.IsNullOrEmpty(ItemTransitOrderAfterSale.downstream_waybill)))
AddEditTransitWarehouseAfterSaleStr = "拦截成功";
- //if (this.ItemTransitOrderAfterSale != null && ItemTransitOrderWithVoid.intercept_return_status == 2)
- // AddEditTransitWarehouseAfterSaleStr = "拦截失败";
- if (this.ItemTransitOrderWithVoid == null || this.ItemRefund?.type != "REFUND" ||
+ if (this.ItemTransitOrderAfterSale != null && ItemTransitOrderWithVoid.intercept_return_status == 2)
+ AddEditTransitWarehouseAfterSaleStr = "拦截失败";
+ if (this.ItemTransitOrderWithVoid == null || (this.ItemRefund?.type != "REFUND" && !this.ItemOrder.IsAbnormal) ||
+ TransitRefundStatusStr.Contains("退款成功") ||
!(this.ItemRefund?.return_waybill_id).IsNullOrEmpty() || !(this.ItemRefund?.return_detail).IsNullOrEmpty() ||
- (!this.ItemOrder.IsEmergency && !this.ItemOrder.isAbnormal && !this.ItemOrder.IsRefund) ||
+ (!this.ItemOrder.IsEmergency && !this.ItemOrder.IsAbnormal && !this.ItemOrder.IsRefund) ||
this.ItemTransitOrderWithVoid.warehouse_status == 0 ||
(this.ItemTransitOrderWithVoid.warehouse_status == 1 && !AddEditTransitWarehouseRejectStr.IsNullOrEmpty() && !AddEditTransitWarehouseRejectStr.StartsWith("申请拒收失败")))
{
@@ -326,7 +333,7 @@ namespace AllBase.Model.DBModel
AddEditTransitWarehouseAfterSaleStr = "";
}
// 退货退款的,不能拦截退回总店。如果是退到退货仓,则退货仓流程,否则店家自行收货退回总店。
- if (!RefundAddressStr.ParseToString().Trim().IsNullOrEmpty() || this.ItemRefund?.type != "REFUND")
+ if (!RefundAddressStr.ParseToString().Trim().IsNullOrEmpty() || (this.ItemRefund?.type != "REFUND" && !this.ItemOrder.IsAbnormal))
{
if (AddEditTransitWarehouseAfterSaleStr == "添加")
AddEditTransitWarehouseAfterSaleStr = "";
@@ -334,6 +341,7 @@ namespace AllBase.Model.DBModel
if (this.ItemTransitOrderAfterSale != null)
TransitWarehouseAfterSaleWayBillStr = (this.ItemTransitOrderAfterSale?.downstream_express_code + "-" + this.ItemTransitOrderAfterSale?.downstream_waybill).Trim('-');
+
AddEditTransitWarehouseReturnOrderStr = "";
if (ItemRefund?.return_detail.StartsWith(GlobalConfig.TransitReturnOrderReturnAddress) == true)
{
@@ -342,22 +350,26 @@ namespace AllBase.Model.DBModel
}
- // 关闭中转包裹退回,改为中转分销退货
if (AddEditTransitWarehouseAfterSaleStr == "添加")
AddEditTransitWarehouseAfterSaleStr = "";
- AddEditTransitWarehouseReturnOrderStr = DistribReturnOrderInfo == null ? "添加" : "已添加";
+ AddEditTransitWarehouseReturnOrderStr = DistribReturnOrderInfo == null ? "未创建" : "已添加";
if (DistribReturnOrderInfo?.warehouse_status == 1)
- AddEditTransitWarehouseReturnOrderStr = "已创建";
+ {
+ if ((DistribReturnOrderInfo?.real_logistics_express_code).IsNullOrEmpty())
+ AddEditTransitWarehouseReturnOrderStr = "已到仓";
+ else
+ AddEditTransitWarehouseReturnOrderStr = "已发回";
+ }
if (DistribReturnOrderInfo?.warehouse_status == 2)
- AddEditTransitWarehouseReturnOrderStr = "创建异常";
+ AddEditTransitWarehouseReturnOrderStr = "创建失败";
if (DistribReturnOrderInfo?.warehouse_status == 3)
- AddEditTransitWarehouseReturnOrderStr = "处理中";
+ AddEditTransitWarehouseReturnOrderStr = "已创建未到仓";
+ if (TransitRefundStatusStr.Contains("退款成功"))
+ {
+ if (AddEditTransitWarehouseReturnOrderStr == "未创建")
+ AddEditTransitWarehouseReturnOrderStr = "";
+ }
}
-
- // 云仓买手退货地址
- this.PddBuyerAfterSaleAddressStr = this.PddBuyerAfterSale?.afterSaleAddress;
- // 直发买手退货地址
- this.DirectPddBuyerAfterSaleAddressStr = this.DirectPddBuyerAfterSale?.afterSaleAddress;
}
///
/// 仓库拒收按钮文本参数
@@ -382,6 +394,14 @@ namespace AllBase.Model.DBModel
set { this.SetValue(x => x.AddEditTransitWarehouseAfterSaleStr, value); }
}
///
+ /// 拦截退回操作信息/回调信息 文本
+ ///
+ public string InterceptReturnInfoStr
+ {
+ get { return this.GetValue(x => x.InterceptReturnInfoStr); }
+ set { this.SetValue(x => x.InterceptReturnInfoStr, value); }
+ }
+ ///
/// 仓库分销退货按钮显示文本参数
///
public string AddEditTransitWarehouseReturnOrderStr
@@ -849,11 +869,26 @@ namespace AllBase.Model.DBModel
public List DirectPddBuyerAfterSales { get; set; } = new List();
public order_pdd_buyer_after_sale DirectPddBuyerAfterSale
- {
- get { return this.GetValue(x => x.DirectPddBuyerAfterSale); }
- set { this.SetValue(x => x.DirectPddBuyerAfterSale, value); }
- }
- public string DirectRefundStatusStr
+ {
+ get { return this.GetValue(x => x.DirectPddBuyerAfterSale); }
+ set
+ {
+ if (order_id == "3738766466298321152")
+ {
+
+ }
+
+ this.SetValue(x => x.DirectPddBuyerAfterSale, value);
+ // 直发买手退货地址
+ this.DirectPddBuyerAfterSaleAddressStr = DirectPddBuyerAfterSale?.afterSaleAddress;
+ }
+ }
+ public string DirectPddBuyerAfterSaleAddressStr
+ {
+ get { return this.GetValue(x => x.DirectPddBuyerAfterSaleAddressStr); }
+ set { this.SetValue(x => x.DirectPddBuyerAfterSaleAddressStr, value); }
+ }
+ public string DirectRefundStatusStr
{
get { return this.GetValue(x => x.DirectRefundStatusStr); }
set { this.SetValue(x => x.DirectRefundStatusStr, value); }
@@ -903,10 +938,24 @@ namespace AllBase.Model.DBModel
DirectOrderBuyTimeStr = DirectPddBuyerOrder != null ? DirectPddBuyerOrder.add_time.ToString("yyyy-MM-dd HH:mm:ss") : "";
}
- ///
- /// 订单中所有商品加起来的总售价文本
- ///
- public string RealPriceStr
+ /// 直发最后一条物流信息
+ public oms_wei_ewaybill_path LatestDirectEWaybill
+ {
+ get { return this.GetValue(x => x.LatestDirectEWaybill); }
+ set { this.SetValue(x => x.LatestDirectEWaybill, value); }
+ }
+
+ /// 中转仓最后一条物流信息
+ public oms_wei_ewaybill_path LatestTransitEWaybill
+ {
+ get { return this.GetValue(x => x.LatestTransitEWaybill); }
+ set { this.SetValue(x => x.LatestTransitEWaybill, value); }
+ }
+
+ ///
+ /// 订单中所有商品加起来的总售价文本
+ ///
+ public string RealPriceStr
{
//get { return "¥" + (order_items.Sum(oi => oi.real_price) * 0.01m).ParseToDecimal().ToString("0.00"); }
get { return "¥" + (real_price * 0.01m).ParseToDecimal().ToString("0.00"); }
@@ -923,11 +972,18 @@ namespace AllBase.Model.DBModel
set { }
}
+ public string PostagePriceStr
+ {
+
+ get { return "¥" + (ItemOrder?.postage_price * 0.01m / ItemOrder?.orderItems.Count).ParseToDecimal().ToString("0.00"); }
+ set { }
+ }
+
///
/// 采购价文本
///
- public string purchase_price_str
- {
+ public string PurchasePriceStr
+ {
//get { return "¥" + (order_items.Sum(oi => oi.purchase_price.ParseToInt()) * 0.01m).ParseToDecimal().ToString("0.00"); }
get { return "¥" + (purchase_price * 0.01m).ParseToDecimal().ToString("0.00"); }
set { }
@@ -935,16 +991,20 @@ namespace AllBase.Model.DBModel
///
/// 采购价文本是否可见
///
- public Visibility purchase_price_visibility
+ public Visibility PurchasePriceVisibility
{
- get { if (ItemOrder.out_amount > 0 || ItemTransitOrder?.out_amount > 0) return Visibility.Collapsed; return Visibility.Visible; }
+ get
+ {
+ //if (ItemOrder.out_amount > 0 || ItemTransitOrder?.out_amount > 0) return Visibility.Collapsed; return Visibility.Visible;
+ return Visibility.Collapsed;
+ }
set { }
}
///
/// 运费文本
///
- public string freight_str
+ public string FreightStr
{
//get { return "¥" + (order_items.Sum(oi => oi.freight.ParseToInt()) * 0.01m).ParseToDecimal().ToString("0.00"); }
get { return "¥" + (freight * 0.01m).ParseToDecimal().ToString("0.00"); }
@@ -954,10 +1014,10 @@ namespace AllBase.Model.DBModel
/// 运费文本是否可见
///
public Visibility FreightVisibility
- {
- get { if (ItemOrder.out_amount > 0 || ItemTransitOrder?.out_amount > 0) return Visibility.Collapsed; return Visibility.Visible; }
- //get { if (ItemOrder.freight > 0) return Visibility.Visible; return Visibility.Collapsed; }
- set { }
+ {
+ //get { if (ItemOrder.out_amount > 0 || ItemTransitOrder?.out_amount > 0) return Visibility.Collapsed; return Visibility.Visible; }
+ get { return Visibility.Collapsed; }
+ set { }
}
///
@@ -1012,7 +1072,9 @@ namespace AllBase.Model.DBModel
{
//ItemOrder.out_amount ItemTransitOrder.out_amount 只有一个有值
var out_amount = ItemTransitOrder?.out_amount ?? ItemOrder.out_amount / ItemOrder.orderItems.Count;
- profitCount = ((real_price.ParseToInt() + cash_coupon_discounted_price.ParseToInt() - purchase_price.ParseToInt() - freight.ParseToInt() - predict_commission_fee.ParseToInt() -
+ var postage_price = ItemOrder?.postage_price ?? ItemOrder.postage_price / ItemOrder.orderItems.Count;
+ profitCount = ((real_price.ParseToInt() + cash_coupon_discounted_price.ParseToInt() + postage_price -
+ purchase_price.ParseToInt() - freight.ParseToInt() - predict_commission_fee.ParseToInt() -
commission_amount.ParseToInt() - out_amount.ParseToInt()) * 0.01m).ParseToDecimal();
}
return profitCount;
@@ -1113,7 +1175,7 @@ namespace AllBase.Model.DBModel
// 买手秒退异常重拍
BtnAbnormalBtnVisibility = Visibility.Visible;
// 不是异常单的不可异常重拍
- if (this.ItemOrder?.isAbnormal != true)
+ if (this.ItemOrder?.IsAbnormal != true)
BtnAbnormalBtnVisibility = Visibility.Collapsed;
// 买手未退款的,中转正式取号以后的,不可异常重拍
else if (this.ItemTransitOrder?.refund_status != "买手退款成功" ||
@@ -1145,6 +1207,13 @@ namespace AllBase.Model.DBModel
}
}
+ public string RefundStatusStr
+ {
+ get { return this.GetValue(x => x.RefundStatusStr); }
+ set { this.SetValue(x => x.RefundStatusStr, value); }
+ }
+
+
///
/// 订单商品表数据库id
///
@@ -1286,7 +1355,24 @@ namespace AllBase.Model.DBModel
///
/// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4:退款成功,11:已取消(售后完成订单取消)
///
- public int? refund_status { get; set; }
+ public int? refund_status
+ {
+ get { return this.GetValue(x => x.refund_status); }
+ set
+ {
+ this.SetValue(x => x.refund_status, value);
+ if (value == 1)
+ RefundStatusStr = "无售后/售后关闭";
+ else if (value == 2)
+ RefundStatusStr = "售后处理中";
+ else if (value == 3)
+ RefundStatusStr = "退款中";
+ else if (value == 4)
+ RefundStatusStr = "退款成功";
+ else if (value == 11)
+ RefundStatusStr = "售后完成订单取消";
+ }
+ }
public void SetOrderItemTextProperty()
{
@@ -1312,7 +1398,27 @@ namespace AllBase.Model.DBModel
// 拍单、代发等信息判断并控制拍单按钮
this.UpdateOrderItemBuyButton();
this.SetAbnormalAndDirectBtnVisibility();
- }
+
+ SetEWaybillInfo();
+ }
+
+ /// 初始化物流明细信息
+ public void SetEWaybillInfo()
+ {
+ if(order_id == "3738794693820307200")
+ {
+
+ }
+ if (this.ItemOrder?.latestEWaybills?.Count > 0 && !string.IsNullOrEmpty(ItemTransitOrderWithVoid?.express_2_waybill))
+ LatestTransitEWaybill = ItemOrder.latestEWaybills.FirstOrDefault(ew => ew.waybill_id == ItemTransitOrderWithVoid.express_2_waybill);
+ else
+ LatestTransitEWaybill = null;
+
+ if (this.ItemOrder?.latestEWaybills?.Count > 0 && !string.IsNullOrEmpty(this.ItemOrder?.out_express_no))
+ LatestDirectEWaybill = ItemOrder.latestEWaybills.FirstOrDefault(ew => ew.waybill_id == this.ItemOrder?.out_express_no);
+ else
+ LatestDirectEWaybill = null;
+ }
public void UpdateOrderItemBuyButton()
{
diff --git a/AllBase/Model/Result/PDDFrontProductInfo3.cs b/AllBase/Model/Result/PDDFrontProductInfo3.cs
index 96484d6..a87353a 100644
--- a/AllBase/Model/Result/PDDFrontProductInfo3.cs
+++ b/AllBase/Model/Result/PDDFrontProductInfo3.cs
@@ -203,7 +203,10 @@ namespace AllBase.Model.Result
set
{
_specs = value;
- SpecNameStr = string.Join(",", value.Select(s => s.spec_value));
+ if (value != null)
+ SpecNameStr = string.Join(",", value.Select(s => s.spec_value));
+ else
+ SpecNameStr = "";
}
}
public int? price { get; set; } // 0,
diff --git a/AllBase/Model/Result/WxOrderExpressInfo.cs b/AllBase/Model/Result/WxOrderExpressInfo.cs
new file mode 100644
index 0000000..d6fd21c
--- /dev/null
+++ b/AllBase/Model/Result/WxOrderExpressInfo.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AllBase.Model.Result
+{
+ public class WxOrderExpressInfo
+ {
+ public int? deliverType { get; set; } // 5,
+ public string phone { get; set; } // "3859",
+ public List deliveryProductInfo { get; set; } //
+ public int? orderProductCnt { get; set; } // 1,
+ public int? deliveryCnt { get; set; } // 1,
+ public bool? isIntracityOrder { get; set; } // false,
+ public object intracityTracking { get; set; } // null,
+ public List
public string BuyType { get; set; } = "transit";
- public int CloseAfterSecond { get; set; }
+ public int MaxCloseAfterSecond { get; set; }
public string InitUrl = "";
public string BuyMapUrl = "";
- private string shopCookieHead = "yangkeduo.com";
+
+ private static readonly object lockObj = new();
+ private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
+
+ private string shopCookieHead = "yangkeduo.com";
private string shopMainUrl = "https://mobile.yangkeduo.com/index.html";
private ChromiumWebBrowser cefWebBrowser = null;
private string currentUrl = "";
@@ -80,7 +89,15 @@ namespace TemuKJD.ToolForms
// (拍单后)回调函数,更新拍单余额
private Action updateBalanceAction = null;
- public PddMobileBuyOrderForm(Action filterOrder, Action updateBalance, oms_wei_order_item_info orderItemInfo, BuyerLoginInfo buyerInfo, WXBuyMapInfo buy_map = null)
+ ///
+ /// 拍单中转地址
+ ///
+ string txtBuyTransitWarehouseStr = "";
+ bool IsChangeAddress = false;
+ bool HasChangeAddress = false;
+
+
+ public PddMobileBuyOrderForm(Action filterOrder, Action updateBalance, oms_wei_order_item_info orderItemInfo, BuyerLoginInfo buyerInfo, WXBuyMapInfo buy_map = null)
{
InitializeComponent();
@@ -94,6 +111,8 @@ namespace TemuKJD.ToolForms
private void PddBuyOrderForm_Load(object sender, EventArgs e)
{
+ lblErrMsg.Text = string.Empty;
+
if (this.BuyType == "direct" && pnlMap.Visible == false)
{
this.pnlDirectAddressAnalysis.Visible = true;
@@ -111,15 +130,21 @@ namespace TemuKJD.ToolForms
chkUseAppBalance.Checked = true;
GlobalConfig.BuyConfig.IsUseAppBalance = true;
- if (CloseAfterSecond > 0)
+ if (IsAutoBuy)
+ MaxCloseAfterSecond = 60;
+ if (MaxCloseAfterSecond > 0)
{
Task.Run(() =>
{
- Thread.Sleep(1000 * CloseAfterSecond);
- if (this.Created)
- {
- Invoke(new Action(() => { this.Close(); }));
- }
+ Thread.Sleep(1000 * MaxCloseAfterSecond);
+ if (this.Created && IsAutoBuy)
+ {
+ Invoke(new Action(() =>
+ {
+ this.IsClose = true;
+ this.Close();
+ }));
+ }
});
}
@@ -198,7 +223,6 @@ namespace TemuKJD.ToolForms
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);
@@ -211,7 +235,10 @@ namespace TemuKJD.ToolForms
LoadCef();
}));
});
- IsFormLoad = true;
+
+ this.AotoBuyLoop();
+
+ IsFormLoad = true;
}
private void Rb_CheckedChanged(object sender, EventArgs e)
@@ -310,16 +337,13 @@ namespace TemuKJD.ToolForms
{
}
- private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
+ private async 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;
- }));
- }
+ if (!this.IsClose && this.Created && !this.Disposing && !this.IsDisposed)
+ {
+ currentUrl = e.Address;
+ Invoke(() => { txtAddress.Text = e.Address; });
+ }
}
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
@@ -374,12 +398,44 @@ namespace TemuKJD.ToolForms
}
//static int GetAntiContentsTimes = 40;
- private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
+ // 处理网页加载信息
+ private async void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
{
- Task.Run(() => { DoResourceLoadComplete(url, postData, responseData); });
- }
+ try
+ {
+ await DoResourceLoadComplete(url, postData, responseData);
+ }
+ catch (Exception ex)
+ {
+ if (!this.IsClose && this.Created)
+ {
+ Invoke(new Action(() =>
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError(ex.Message);
+ else
+ lblErrMsg.Text = ex.Message;
+ }));
+ if (IsAutoBuy)
+ {
+ await (Task.Run(() =>
+ {
+ Thread.Sleep(10000);
+ if (!this.IsClose && this.Created)
+ {
+ Invoke(new Action(() =>
+ {
+ this.IsClose = true;
+ this.Close();
+ }));
+ }
+ }));
+ }
+ }
+ }
+ }
- public void DoResourceLoadComplete(string url, string postData, string responseData)
+ public async Task DoResourceLoadComplete(string url, string postData, string responseData)
{
if (url.StartsWith("https://mobile.yangkeduo.com/order_checkout.html") && responseData.Contains("该商品已下架"))
{
@@ -389,250 +445,216 @@ namespace TemuKJD.ToolForms
// 个人页面
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 (url.StartsWith("https://mobile.yangkeduo.com/goods.html?goods_id="))
+ {
+ 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);
- }
+ if (!string.IsNullOrEmpty(sendProvince) && this.transitWarehouse == null)
+ {
+ await MatchTransitWarehouse(sendProvince);
+ }
+ MatchProdAllSkus(data);
+ }
- MatchProdAllSkus(data);
+ // 订单详情页面 获取关联信息和拍单信息(已拍过单但是因某种原因未成功绑定仓库)
+ if (url.StartsWith("https://mobile.yangkeduo.com/order.html?order_sn="))
+ {
+ 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 (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();
- }));
- });
- }
+ // 自动填写拍单信息界面
+ 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=")))
+ if (responseData.Contains("\"goods_id\""))
{
- Task.Run(() =>
- {
- var data = responseData;
+ if (url.StartsWith("https://mobile.yangkeduo.com/proxy/api/api/morgan/confirm/render?pdduid=") || url.Contains("sku_id="))
+ {
+ 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 (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 (BuyType == "direct" && txtBuyTransitWarehouse.Text.Contains("******"))
- {
- BaseMsgForm.ShowError("请手动输入合法地址信息再拍单!");
- return;
- }
+ {
+ 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();
+ }));
- // 自动修改收货地址为中转仓(或直发)
- 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 (!this.Created)
+ return;
+ if (BuyType == "direct" && txtBuyTransitWarehouseStr.Contains("******"))
+ {
+ throw new Exception("请先解析地址或者输入合法地址信息再拍单!");
+ }
- });
- }
- }
- // 自动下单
- if (IsAutoBuy && HasChangeAddress && url.StartsWith("https://mobile.yangkeduo.com/order_checkout.html?sku_id="))
- {
- Task.Run(async () =>
+ // 自动修改收货地址为中转仓(或直发)
+ var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouseStr);
+ if (transit == null && BuyType == "transit")
+ {
+ throw new Exception("仓库已发生改变,请点击重新关联商品,选择仓库后重新拍单!");
+ }
+ if (IsSoldOut)
+ {
+ throw new Exception("商品已售罄,请重新关联未售罄商品后再拍单!");
+ }
+ if ((transit != null || BuyType == "direct") && IsChangeAddress == false && HasChangeAddress == false)
+ {
+ IsChangeAddress = true;
+ Thread.Sleep(100);
+ if (BuyType == "transit")
+ {
+ if (AbnormalTransitWarehouseOrderInfo != null)
{
- try
+ Invoke(new Action(() => { txtSourceCode.Text = AbnormalTransitWarehouseOrderInfo.random_code; }));
+ }
+ else
+ {
+ var sourceCodeRst = GetSourceCode(transit);
+ if (sourceCodeRst.Contains("失败"))
{
- await AutoBuy();
+ Invoke(new Action(() =>
+ {
+ this.cefWebBrowser.Visible = false;
+ BaseMsgForm.ShowError(sourceCodeRst);
+ }));
+ return;
}
- catch (Exception ex)
- {
- this.BuyErrMsg = ex.Message;
- }
- Invoke(() => { this.Close(); });
- });
+ }
}
- }));
- }
- });
- }
+ var rst = await ChangeAddress(transit);
+ IsChangeAddress = false;
+ }
+ }
+ }
+ }
- 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;
+ Invoke(new Action(() =>
+ {
+ txtBuyOrderId.Text = BaseRegex.GetStringJsonByRegs(ref data, "", "order_sn", "orderSn");
+ }));
+ }
- }
-
- // 订单提交接口
- //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);
- }));
- });
- }
+ if (url.Contains("alipay.com") && responseData.Contains("支付成功"))
+ {
+ var uri = url;
+ var pData = postData;
+ var rData = responseData;
+ Invoke(new Action(() =>
+ {
+ btnManualUpdateBuyOrder_Click(null, null);
+ }));
+ }
}
+ public void AotoBuyLoop()
+ {
+ Task.Run(async () =>
+ {
+ // 自动下单
+ while (true && IsAutoBuy)
+ {
+ if (HasChangeAddress && (this.cefWebBrowser?.GetMainFrame()?.Url).ParseToString().StartsWith("https://mobile.yangkeduo.com/order_checkout.html?sku_id="))
+ {
+ try
+ {
+ await AutoBuy();
+ }
+ catch (Exception ex)
+ {
+ this.BuyErrMsg = ex.Message;
+ }
+ if (!this.IsClose && this.Created && IsAutoBuy)
+ {
+ Invoke(() =>
+ {
+ this.IsClose = true;
+ this.Close();
+ });
+ }
+ }
+ }
+ });
+ }
+
public async Task AutoBuy()
{
if (IsSoldOut)
throw new Exception("商品已售罄");
- //for (int i = 0; i < 50; i++)
- //{
- // if (HasChangeAddress != true)
- // Thread.Sleep(500);
- //}
- //if (!HasChangeAddress)
- //{
- // throw new Exception("订单收货地址修改失败");
- //}
-
await CheckSourceCode();
await SetAliPaySecret();
@@ -640,120 +662,136 @@ namespace TemuKJD.ToolForms
public async Task SetAliPaySecret()
{
- var host = cefWebBrowser.GetBrowser().GetHost();
- var client = cefWebBrowser.GetDevToolsClient();
- for (int i = 0; i < 20; i++)
+ // 选择支付宝去支付
+ if (!IsAutoBuy) return;
+ var ts1 = await EvaluateJsBuyTagNameAndInnerHtml("span", "支付宝", true);
+ if (ts1.Result?.Value.ParseToString() != "success")
{
- Thread.Sleep(50);
- if (host == null || client == null)
- {
- host = cefWebBrowser.GetBrowser().GetHost();
- client = cefWebBrowser.GetDevToolsClient();
- continue;
- }
+ throw new Exception("支付方式获取失败1");
}
- if (host == null || client == null)
- {
- throw new Exception("页面加载异常");
- }
-
- var sourceCode = txtSourceCode.Text.Trim();
- var jsStr1 = @"(function() { var elements = document.getElementsByTagName('span');
- for (i = elements.length - 1; i >= 0; i--){
- var element = elements[i];
- if (element.innerHTML.indexOf('支付宝') >= 0) {
- element.click();
- return 'success';
- }
- }
- return '';
- })();";
Thread.Sleep(Randomx.GetId(500, 1000));
- var ts1 = await client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
- var jsStr2 = @"(function() { var elements = document.getElementsByTagName('span');
- for (i = elements.length - 1; i >= 0; i--){
- var element = elements[i];
- if (element.innerHTML.indexOf('立即支付') >= 0) {
- element.click();
- return 'success';
- }
- }
- return '';
- })();";
- var ts2 = await client.Runtime.EvaluateAsync(jsStr2, null, true, null, null, true, null, true);
- if (ts1.Result?.Value.ParseToString() != "success" || ts2.Result?.Value.ParseToString() != "success")
+ if (!IsAutoBuy) return;
+ var ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "立即支付", true);
+ for (int i = 0; i < 5; i++)
{
- throw new Exception("支付方式获取失败");
+ if (ts2.Result?.Value is string rstStr && rstStr == "success")
+ break;
+ Thread.Sleep(500);
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "确认付款", true);
+ }
+ if (ts2.Result?.Value.ParseToString() != "success")
+ {
+ throw new Exception("支付方式获取失败2");
}
- Thread.Sleep(Randomx.GetId(1500, 2000));
- var jsStr3 = @"(function() { var elements = document.getElementsByTagName('span');
- for (i = elements.length - 1; i >= 0; i--){
- var element = elements[i];
- if (element.innerHTML.indexOf('确认付款') >= 0) {
- element.click();
- return 'success';
- }
- }
- return '';
- })();";
- var ts3 = await client.Runtime.EvaluateAsync(jsStr3, null, true, null, null, true, null, true);
- if (!this.Created)
- throw new Exception("窗口已关闭");
+ // 点击确认付款
+ Thread.Sleep(Randomx.GetId(500, 1000));
+ if (!IsAutoBuy) return;
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "确认付款", true);
for (int i = 0; i < 50; i++)
{
- if (ts3.Result?.Value is string rstStr)
- {
- if (rstStr == "success")
- break;
- }
- Thread.Sleep(200);
- ts3 = await client.Runtime.EvaluateAsync(jsStr3, null, true, null, null, true, null, true);
+ if (ts2.Result?.Value is string rstStr && rstStr == "success")
+ break;
+ Thread.Sleep(100);
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("span", "确认付款", true);
}
- Thread.Sleep(Randomx.GetId(10000, 12500));
+
+ // 输入支付密码
+ Thread.Sleep(Randomx.GetId(500, 1000));
+ if (!IsAutoBuy) return;
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("div", "输入支付密码");
+ for (int i = 0; i < 50; i++)
+ {
+ if (ts2.Result?.Value is string rstStr && rstStr == "success")
+ break;
+
+ Thread.Sleep(100);
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("div", "输入支付密码");
+ }
+ Thread.Sleep(Randomx.GetId(500, 1000));
+ foreach (var c in DataOpenSSL.DecryptString(GlobalConfig.AlipayPassword))
+ {
+ CEFBrowser.SimulateInputChar(host, c);
+ }
+
+ // 点下一步付款
+ Thread.Sleep(Randomx.GetId(500, 1000));
+ if (!IsAutoBuy) return;
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("button", "下一步", true);
+ for (int i = 0; i < 50; i++)
+ {
+ if (ts2.Result?.Value is string rstStr && rstStr == "success")
+ break;
+
+ Thread.Sleep(200);
+ if (!IsAutoBuy) return;
+ ts2 = await EvaluateJsBuyTagNameAndInnerHtml("button", "下一步", true);
+ }
+
+ // 最后未执行成功也关闭窗口。
+ Thread.Sleep(Randomx.GetId(12500, 15000));
}
public async Task CheckSourceCode()
{
- 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)
- {
- throw new Exception("页面加载异常");
- }
-
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 = await client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
+ var ts1 = await EvaluateJsBuyTagNameAndInnerHtml("div", sourceCode);
if (ts1.Result?.Value.ParseToString() != "success")
{
throw new Exception("溯源码不匹配");
}
}
- ///
- /// 获取溯源码
- ///
- ///
- public string GetSourceCode(TransitWarehouseParam transit)
+ IBrowserHost host = null;
+ DevToolsClient client = null;
+
+ public async Task EvaluateJsBuyTagNameAndInnerHtml(string tagName, string innerHTML, bool isClick = false)
+ {
+ if (!this.Created)
+ throw new Exception("窗口已关闭");
+
+ for (int i = 0; i < 25; i++)
+ {
+ Thread.Sleep(200);
+ if (host == null || client == null)
+ {
+ host = cefWebBrowser.GetBrowser().GetHost();
+ client = cefWebBrowser.GetDevToolsClient();
+ }
+ else
+ break;
+ }
+ if (host == null || client == null)
+ {
+ throw new Exception("页面加载异常");
+ }
+
+ var jsStr1 = @"(function() { var elements = document.getElementsByTagName('" + tagName + @"');
+ for (i = elements.length - 1; i >= 0; i--){
+ var element = elements[i];
+ if (element.innerHTML.indexOf('" + innerHTML + @"') >= 0) {";
+ if (isClick)
+ jsStr1 += @"element.click();";
+ jsStr1 += @"
+ return 'success';
+ }
+ }
+ return '';
+ })();";
+
+ var rst = await client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
+ if (tagName == "button")
+ {
+
+ }
+ return rst;
+ }
+
+ ///
+ /// 获取溯源码
+ ///
+ ///
+ public string GetSourceCode(TransitWarehouseParam transit)
{
JObject body = new JObject();
body["province"] = transit.province_name;
@@ -775,117 +813,87 @@ namespace TemuKJD.ToolForms
}
}
- bool IsChangeAddress = false;
- bool HasChangeAddress = false;
///
/// 自动填写地址
///
///
///
- public string ChangeAddress(TransitWarehouseParam transit)
+ public async Task ChangeAddress(TransitWarehouseParam transit)
{
Thread.Sleep(200);
- var host = cefWebBrowser.GetBrowser().GetHost();
- var client = cefWebBrowser.GetDevToolsClient();
- for (int i = 0; i < 20; i++)
+ for (int i = 0; i < 50; i++)
{
- Thread.Sleep(50);
- if (host == null || client == null)
- {
- host = cefWebBrowser.GetBrowser().GetHost();
- client = cefWebBrowser.GetDevToolsClient();
- continue;
- }
+ Thread.Sleep(100);
+ if (host == null || client == null)
+ {
+ host = cefWebBrowser.GetBrowser().GetHost();
+ client = cefWebBrowser.GetDevToolsClient();
+ }
+ else
+ break;
}
if (host == null || client == null)
- {
- return "页面未加载";
- }
+ {
+ throw new Exception("页面加载异常");
+ }
- // 点击图片搜索图标
- 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) {
+ // 点击地址框第一个
+ var jsStr1 = @"(function() {
+ var element = document.getElementsByClassName('oc-address-info')[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)
+ for (int i = 0; i < 50; i++)
+ {
+ Thread.Sleep(200);
+ if (!this.Created) return "窗口已关闭";
+
+ var ts1 = await client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
+ if (ts1.Result.Value is string rstStr)
{
if (rstStr == "success")
- break;
+ {
+ ts1 = await EvaluateJsBuyTagNameAndInnerHtml("span", "修改");
+ if (ts1.Result.Value is string rst && rst == "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 "窗口已关闭";
+ for (int i = 0; i < 50; i++)
+ {
+ Thread.Sleep(200);
+ 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));
+ var ts1 = await EvaluateJsBuyTagNameAndInnerHtml("span", "修改", true);
+ if (ts1.Result.Value is string rstStr && rstStr == "success")
+ {
+ break;
+ }
+ }
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));
+ for (int i = 0; i < 50; i++)
+ {
+ Thread.Sleep(200);
+ if (!this.Created) return "窗口已关闭";
+
+ var ts1 = await EvaluateJsBuyTagNameAndInnerHtml("span", "保存", true);
+ if (ts1.Result.Value is string rstStr)
+ {
+ if (rstStr == "success")
+ break;
+ }
+ }
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) {
+ if (element.innerHTML.indexOf('" + txtBuyTransitWarehouseStr + @"') >= 0 && element.innerHTML.indexOf('" + txtSourceCode.Text.Trim() + @"') >= 0) {
element.click();
return 'success';
}
@@ -903,55 +911,40 @@ namespace TemuKJD.ToolForms
}
})();";
}
- ts1 = client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
for (int i = 0; i < 20; i++)
{
+ Thread.Sleep(100);
if (!this.Created)
return "窗口已关闭";
- if (ts1.Result.Result.Value is string rstStr)
+ var ts1 = await client.Runtime.EvaluateAsync(jsStr1, null, true, null, null, true, null, true);
+ if (ts1.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)
+ private async void btnManualUpdateSendProvince_Click(object sender, EventArgs e)
{
var sendProvince = txtSendProvince.Text.Trim();
- MatchTransitWarehouse(sendProvince);
+ try
+ {
+ await MatchTransitWarehouse(sendProvince);
+ }
+ catch (Exception ex)
+ {
+ BaseMsgForm.ShowError("匹配仓库失败,请手动选择");
+ }
}
- void MatchTransitWarehouse(string sendProvince)
+ async Task 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());
@@ -970,14 +963,14 @@ namespace TemuKJD.ToolForms
break;
}
}
- if (!isAutoGetWarehouse)
- {
- //黄导家庭父母5天训练营-《父母5天成为孩子成长的引路人》+《不内卷养育》2本书
- Invoke(new Action(() =>
- {
- cmbTransitWarehouse.Text = "";
- BaseMsgForm.ShowError("匹配仓库失败,请手动选择");
- }));
+ if (!isAutoGetWarehouse)
+ {
+ //黄导家庭父母5天训练营-《父母5天成为孩子成长的引路人》+《不内卷养育》2本书
+ Invoke(() =>
+ {
+ cmbTransitWarehouse.Text = "";
+ });
+ throw new Exception("匹配仓库失败,请手动选择");
}
}
@@ -991,36 +984,6 @@ namespace TemuKJD.ToolForms
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)
@@ -1060,7 +1023,7 @@ namespace TemuKJD.ToolForms
return;
}
- if (this.pddFrontGoodsLite == null || this.pddFrontGoodsLite.goodsId == null)
+ if ((this.pddFrontGoodsLite?.goodsId).IsNullOrZero() || (this.pddFrontGoodsLite?.mallId).IsNullOrZero())
{
await Task.Run(() =>
{
@@ -1070,14 +1033,18 @@ namespace TemuKJD.ToolForms
var client = cefWebBrowser.GetDevToolsClient();
var ts1 = client.Runtime.EvaluateAsync(jsStr, null, true, null, null, true, null, true);
ts1.Wait(500);
- Thread.Sleep(2000);
+ for (int i = 0; i < 80; i++)
+ {
+ if (!(this.pddFrontGoodsLite?.mallId).IsNullOrZero())
+ break;
+ Thread.Sleep(100);
+ }
});
}
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;
@@ -1094,7 +1061,7 @@ namespace TemuKJD.ToolForms
+ "&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())
+ if (!(this.pddFrontGoodsLite?.mallId).IsNullOrZero() && this.pddFrontGoodsLite.goodsId.ParseToString() == txtMapGoodsId.Text.Trim())
{
// 保存商品关联信息
data += "&map_skus=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(pddFrontGoodsLite));
@@ -1214,62 +1181,84 @@ namespace TemuKJD.ToolForms
}
}
BaseMsgForm.ShowInfo("保存成功!");
- this.Close();
+ this.IsClose = true;
+ this.Close();
}
}
private async void btnManualUpdateBuyOrder_Click(object sender, EventArgs e)
{
if (BuyType == "transit" && txtSourceCode.Text.Trim().Length != 6)
- {
- BaseMsgForm.ShowError("溯源码长度错误!");
- return;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("溯源码长度错误!");
+ else
+ Invoke(() => { lblErrMsg.Text = "溯源码长度错误!"; });
+ return;
}
var client = cefWebBrowser.GetDevToolsClient();
if (client == null)
- {
- BaseMsgForm.ShowError("页面未加载!");
- return;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("页面未加载!");
+ else
+ Invoke(() => { lblErrMsg.Text = "页面未加载!"; });
+ 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;
- //}
+ //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")
+ //{
+ // if (!IsAutoBuy)
+ // BaseMsgForm.ShowError("溯源码不匹配!");
+ // else
+ // Invoke(() => { lblErrMsg.Text = "页面未加载!"; });
+ // return;
+ //}
- if (BuyType == "transit" && string.IsNullOrEmpty(txtBuyTransitWarehouse.Text.Trim()))
- {
- BaseMsgForm.ShowError("缺少中转地址,请重新绑定商品并选择仓库地址");
- return;
+ if (BuyType == "transit" && string.IsNullOrEmpty(txtBuyTransitWarehouseStr))
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("缺少中转地址,请重新绑定商品并选择仓库地址");
+ else
+ Invoke(() => { lblErrMsg.Text = "缺少中转地址,请重新绑定商品并选择仓库地址"; });
+ return;
}
- var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouse.Text.Trim());
+ var transit = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransDetailAddress == txtBuyTransitWarehouseStr);
if (BuyType == "transit" && transit == null)
- {
- BaseMsgForm.ShowError("中转地址对应的中转仓不存在,请核对");
- return;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("中转地址对应的中转仓不存在,请核对");
+ else
+ Invoke(() => { lblErrMsg.Text = "中转地址对应的中转仓不存在,请核对"; });
+ return;
}
if (string.IsNullOrEmpty(txtBuyOrderId.Text.Trim()))
- {
- BaseMsgForm.ShowError("缺少拍单订单号,请拍单后再提交");
- return;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("缺少拍单订单号,请拍单后再提交");
+ else
+ Invoke(() => { lblErrMsg.Text = "缺少拍单订单号,请拍单后再提交"; });
+ return;
}
if ((txtBuyPrice.Text.ParseToDecimal() * 100).ParseToInt().IsNullOrZero())
- {
- BaseMsgForm.ShowError("缺少拍单金额,请拍单后再提交");
- return;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("缺少拍单金额,请拍单后再提交");
+ else
+ Invoke(() => { lblErrMsg.Text = "缺少拍单金额,请拍单后再提交"; });
+ return;
}
btnManualUpdateBuyOrder.Enabled = false;
@@ -1323,9 +1312,12 @@ namespace TemuKJD.ToolForms
catch
{
msg = exportRst.ParseToString();
- }
- BaseMsgForm.ShowError("拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
- btnManualUpdateBuyOrder.Enabled = true;
+ }
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
+ else
+ Invoke(() => { lblErrMsg.Text = "拍单保存失败,服务端返回 " + msg; });
+ btnManualUpdateBuyOrder.Enabled = true;
return;
}
@@ -1354,44 +1346,47 @@ namespace TemuKJD.ToolForms
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);
+ //// 前一天的订单直接提前取号
+ //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("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("拍单信息保存成功,接收到服务端传递的错误消息:" + msg, "订单提前取号失败");
- // btnManualUpdateBuyOrder.Enabled = true;
- // return;
- // }
- //}
- }
- #endregion
+ // 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();
+ // }
+ // if (!IsAutoBuy)
+ // BaseMsgForm.ShowError("拍单信息保存成功,接收到服务端传递的错误消息:" + msg, "订单提前取号失败");
+ // else
+ // Invoke(() => { lblErrMsg.Text = "拍单信息保存成功,接收到服务端传递的错误消息:" + msg; });
+ // btnManualUpdateBuyOrder.Enabled = true;
+ // return;
+ // }
+ //}
+ }
+ #endregion
- #region 秒退异常单中转重拍
- if (AbnormalTransitWarehouseOrderInfo != null)
+ #region 秒退异常单中转重拍
+ if (AbnormalTransitWarehouseOrderInfo != null)
{
var url = BaseClass.Build29WxObjString("order/wx_update_abnormal_transit_order");
var data = UserLogin.GetSignaturex();
@@ -1439,9 +1434,10 @@ namespace TemuKJD.ToolForms
filterOrderAction(order, true);
}
}
- #endregion
+ #endregion
- BaseMsgForm.ShowInfo("拍单信息保存成功");
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowInfo("拍单信息保存成功");
}
if (BuyType == "direct")
@@ -1456,9 +1452,12 @@ namespace TemuKJD.ToolForms
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;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("直发拍单信息保存失败(01) " + BaseRegex.GetStringJson(ref html, "msg"));
+ else
+ Invoke(() => { lblErrMsg.Text = "直发拍单信息保存失败(01) " + BaseRegex.GetStringJson(ref html, "msg"); });
+ return;
}
var existOrderExtList = JsonHelper.DeserializeJsonToList(JsonHelper.JObjectParse(html)["data"].ParseToString());
order_item_ext orderExt = new order_item_ext()
@@ -1482,9 +1481,12 @@ namespace TemuKJD.ToolForms
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;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("直发拍单信息保存失败(02) " + BaseRegex.GetStringJson(ref html1, "msg"));
+ else
+ Invoke(() => { lblErrMsg.Text = "直发拍单信息保存失败(02) " + BaseRegex.GetStringJson(ref html, "msg"); });
+ return;
}
// 拍单后覆盖原售后状态(如果有)
@@ -1496,9 +1498,12 @@ namespace TemuKJD.ToolForms
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;
+ {
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("直发拍单信息保存失败(03) " + BaseRegex.GetStringJson(ref html2, "msg"));
+ else
+ Invoke(() => { lblErrMsg.Text = "直发拍单信息保存失败(03) " + BaseRegex.GetStringJson(ref html, "msg"); });
+ return;
}
JObject obj = new JObject();
@@ -1537,18 +1542,23 @@ namespace TemuKJD.ToolForms
filterOrderAction(order, true);
}
- BaseMsgForm.ShowInfo("拍单信息保存成功");
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowInfo("拍单信息保存成功");
}
else
{
- //order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg);
- //NaiBa.Util.Helper.ConfigHelper.SaveConfig("other_buyer_order_list", lstOtherBuyerOrderInfoLite);
- BaseMsgForm.ShowError("直发拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
- return;
+ //order.sendStatus = "发送失败 " + (string.IsNullOrEmpty(msg) ? data : msg);
+ //NaiBa.Util.Helper.ConfigHelper.SaveConfig("other_buyer_order_list", lstOtherBuyerOrderInfoLite);
+ if (!IsAutoBuy)
+ BaseMsgForm.ShowError("直发拍单保存失败,服务端返回 " + msg, "拍单信息保存失败");
+ else
+ Invoke(() => { lblErrMsg.Text = "直发拍单保存失败,服务端返回 " + msg; });
+ return;
}
- #endregion
- }
- this.Close();
+ #endregion
+ }
+ this.IsClose = true;
+ this.Close();
}
private void pictureBox1_Click(object sender, EventArgs e)
@@ -1600,7 +1610,7 @@ namespace TemuKJD.ToolForms
}
}
- private void btnAnalysis_Click(object sender, EventArgs e)
+ private async void btnAnalysis_Click(object sender, EventArgs e)
{
var order = this.orderItem?.ItemOrder;
if (order == null)
@@ -1669,12 +1679,14 @@ namespace TemuKJD.ToolForms
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);
- });
+ try
+ {
+ await ChangeAddress(null);
+ }
+ catch (Exception ex)
+ {
+ }
}
private void cmbMapSkusProd_SelectedIndexChanged(object sender, EventArgs e)
@@ -1749,5 +1761,16 @@ namespace TemuKJD.ToolForms
}
}
}
+
+ private void btnCancelAutoBuy_Click(object sender, EventArgs e)
+ {
+ IsAutoBuy = false;
+ BaseMsgForm.ShowInfo("已取消自动拍单");
+ }
+
+ private void txtBuyTransitWarehouse_TextChanged(object sender, EventArgs e)
+ {
+ txtBuyTransitWarehouseStr = txtBuyTransitWarehouse.Text.Trim();
+ }
}
}
diff --git a/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs b/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs
index 97a327f..198b70f 100644
--- a/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs
+++ b/Work/_29Tools/Forms/PddMobileBuyOrderForm.designer.cs
@@ -31,6 +31,7 @@
this.components = new System.ComponentModel.Container();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.pnlMask = new DevComponents.DotNetBar.PanelEx();
+ this.lblErrMsg = new System.Windows.Forms.Label();
this.btnJumpOrderList = new DevComponents.DotNetBar.PanelEx();
this.txtBuySkuName = new System.Windows.Forms.TextBox();
this.label21 = new System.Windows.Forms.Label();
@@ -83,6 +84,7 @@
this.splitContainer2 = new System.Windows.Forms.SplitContainer();
this.txtAddress = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
+ this.btnCancelAutoBuy = new DevComponents.DotNetBar.PanelEx();
this.panel2 = new System.Windows.Forms.Panel();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.cmbMapSkus = new System.Windows.Forms.ComboBox();
@@ -152,6 +154,7 @@
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White;
+ this.splitContainer1.Panel2.Controls.Add(this.lblErrMsg);
this.splitContainer1.Panel2.Controls.Add(this.btnJumpOrderList);
this.splitContainer1.Panel2MinSize = 0;
this.splitContainer1.Size = new System.Drawing.Size(864, 888);
@@ -184,6 +187,17 @@
this.pnlMask.Text = "自动拍单倒计时\r\n8";
this.pnlMask.Visible = false;
//
+ // lblErrMsg
+ //
+ this.lblErrMsg.AutoSize = true;
+ this.lblErrMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lblErrMsg.ForeColor = System.Drawing.Color.Red;
+ this.lblErrMsg.Location = new System.Drawing.Point(166, 5);
+ this.lblErrMsg.Name = "lblErrMsg";
+ this.lblErrMsg.Size = new System.Drawing.Size(87, 17);
+ this.lblErrMsg.TabIndex = 893;
+ this.lblErrMsg.Text = "errMsg ";
+ //
// btnJumpOrderList
//
this.btnJumpOrderList.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@@ -468,11 +482,11 @@
this.label13.TabIndex = 815;
this.label13.Text = "关联商品信息:";
//
- // txtUpSpuCode
+ // txtSpuCode
//
this.txtSpuCode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtSpuCode.Location = new System.Drawing.Point(85, 228);
- this.txtSpuCode.Name = "txtUpSpuCode";
+ this.txtSpuCode.Name = "txtSpuCode";
this.txtSpuCode.Size = new System.Drawing.Size(152, 23);
this.txtSpuCode.TabIndex = 814;
//
@@ -485,13 +499,13 @@
this.label12.TabIndex = 813;
this.label12.Text = "平台SKU编码";
//
- // txtUpSkuCode
+ // txtSkuCode
//
this.txtSkuCode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSkuCode.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtSkuCode.Location = new System.Drawing.Point(321, 228);
- this.txtSkuCode.Name = "txtUpSkuCode";
+ this.txtSkuCode.Name = "txtSkuCode";
this.txtSkuCode.Size = new System.Drawing.Size(152, 23);
this.txtSkuCode.TabIndex = 812;
//
@@ -755,6 +769,7 @@
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Right)));
+ this.panel1.Controls.Add(this.btnCancelAutoBuy);
this.panel1.Controls.Add(this.panel2);
this.panel1.Controls.Add(this.pnlDirectAddressAnalysis);
this.panel1.Controls.Add(this.chkUseAppBalance);
@@ -788,6 +803,31 @@
this.panel1.Size = new System.Drawing.Size(487, 890);
this.panel1.TabIndex = 0;
//
+ // btnCancelAutoBuy
+ //
+ this.btnCancelAutoBuy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnCancelAutoBuy.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+ this.btnCancelAutoBuy.Cursor = System.Windows.Forms.Cursors.Hand;
+ this.btnCancelAutoBuy.DisabledBackColor = System.Drawing.Color.Empty;
+ this.btnCancelAutoBuy.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.btnCancelAutoBuy.Location = new System.Drawing.Point(376, 35);
+ this.btnCancelAutoBuy.Name = "btnCancelAutoBuy";
+ this.btnCancelAutoBuy.Size = new System.Drawing.Size(97, 23);
+ this.btnCancelAutoBuy.Style.Alignment = System.Drawing.StringAlignment.Center;
+ this.btnCancelAutoBuy.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143)))));
+ this.btnCancelAutoBuy.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(152)))), ((int)(((byte)(99)))), ((int)(((byte)(143)))));
+ this.btnCancelAutoBuy.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
+ this.btnCancelAutoBuy.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
+ this.btnCancelAutoBuy.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None;
+ this.btnCancelAutoBuy.Style.ForeColor.Color = System.Drawing.Color.White;
+ this.btnCancelAutoBuy.Style.GradientAngle = 90;
+ this.btnCancelAutoBuy.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center;
+ this.btnCancelAutoBuy.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(107)))), ((int)(((byte)(83)))), ((int)(((byte)(147)))));
+ this.btnCancelAutoBuy.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(107)))), ((int)(((byte)(83)))), ((int)(((byte)(147)))));
+ this.btnCancelAutoBuy.TabIndex = 887;
+ this.btnCancelAutoBuy.Text = "取消自动拍单";
+ this.btnCancelAutoBuy.Click += new System.EventHandler(this.btnCancelAutoBuy_Click);
+ //
// panel2
//
this.panel2.Controls.Add(this.pictureBox2);
@@ -949,7 +989,7 @@
this.txtShopName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtShopName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.txtShopName.Location = new System.Drawing.Point(321, 60);
+ this.txtShopName.Location = new System.Drawing.Point(321, 67);
this.txtShopName.Name = "txtShopName";
this.txtShopName.Size = new System.Drawing.Size(152, 23);
this.txtShopName.TabIndex = 876;
@@ -958,7 +998,7 @@
//
this.label27.AutoSize = true;
this.label27.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.label27.Location = new System.Drawing.Point(253, 63);
+ this.label27.Location = new System.Drawing.Point(253, 70);
this.label27.Name = "label27";
this.label27.Size = new System.Drawing.Size(68, 17);
this.label27.TabIndex = 875;
@@ -968,7 +1008,7 @@
//
this.label26.AutoSize = true;
this.label26.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.label26.Location = new System.Drawing.Point(253, 92);
+ this.label26.Location = new System.Drawing.Point(253, 99);
this.label26.Name = "label26";
this.label26.Size = new System.Drawing.Size(68, 17);
this.label26.TabIndex = 874;
@@ -979,7 +1019,7 @@
this.txtOrderId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOrderId.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.txtOrderId.Location = new System.Drawing.Point(321, 89);
+ this.txtOrderId.Location = new System.Drawing.Point(321, 96);
this.txtOrderId.Name = "txtOrderId";
this.txtOrderId.Size = new System.Drawing.Size(152, 23);
this.txtOrderId.TabIndex = 873;
@@ -1078,6 +1118,7 @@
this.txtBuyTransitWarehouse.Name = "txtBuyTransitWarehouse";
this.txtBuyTransitWarehouse.Size = new System.Drawing.Size(388, 23);
this.txtBuyTransitWarehouse.TabIndex = 870;
+ this.txtBuyTransitWarehouse.TextChanged += new System.EventHandler(this.txtBuyTransitWarehouse_TextChanged);
//
// label29
//
@@ -1154,6 +1195,7 @@
((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit();
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
+ this.splitContainer1.Panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.splitContainer2.Panel1.ResumeLayout(false);
@@ -1259,5 +1301,7 @@
private System.Windows.Forms.ComboBox cmbMapSkus;
private System.Windows.Forms.Label label31;
private System.Windows.Forms.PictureBox pictureBox2;
+ private DevComponents.DotNetBar.PanelEx btnCancelAutoBuy;
+ private System.Windows.Forms.Label lblErrMsg;
}
}
\ No newline at end of file
diff --git a/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs b/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs
index a4ecc71..988e3af 100644
--- a/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs
+++ b/Work/_29Tools/Forms/ToolForms/ShowImgForm.cs
@@ -146,7 +146,8 @@ namespace Work._29Tools.Forms.ToolForms
Task.Run(() =>
{
Thread.Sleep(2500);
- Invoke(new Action(() => { this.btnCopy.Text = "复制图片"; }));
+ if (this.Created)
+ Invoke(new Action(() => { this.btnCopy.Text = "复制图片"; }));
});
//BaseMsgForm.ShowInfo("图片已复制到剪贴板");
}