Files
29WxOrder/29WxOrderWpf/Ctrls/OrderCtrls/OrderListCtrl.xaml.cs
T
“chfei” 7c6f91f207 新增加 利润统计Window。
隐藏利润统计按钮
增加 Common 文件夹 内部是WPF公用类库
2026-08-05 18:55:03 +08:00

1595 lines
63 KiB
C#

using _29WxOrderWpf.BaseWindows;
using _29WxOrderWpf.Common;
using _29WxOrderWpf.Ctrls.BuyerCtrls;
using _29WxOrderWpf.Ctrls.Statistics;
using _29WxOrderWpf.Utils;
using AllBase;
using AllBase.Extension;
using AllBase.Helper;
using AllBase.Model;
using AllBase.Model.DBModel;
using AllBase.Model.Result;
using AllBase.Util;
using CefSharp.DevTools.Autofill;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Security.Policy;
using System.Text;
using System.Threading;
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.Shapes;
using System.Xml.Linq;
using TemuKJD.ToolForms;
using Work;
using Work._29Tools.BLL;
using Work.BuyUsers;
using static System.Net.Mime.MediaTypeNames;
namespace _29WxOrderWpf.Ctrls.OrderCtrls
{
/// <summary>
/// OrderListCtrl.xaml 的交互逻辑
/// </summary>
public partial class OrderListCtrl : UserControl
{
public CheckBox chkSelectAll = null;
public bool IsAutoReadOrder = true;
public DateTime nextGetOrderTime = DateTime.MinValue;
public string strSearchAll = "";
public List<string> lstFilterText { get; set; }
public OrderListCtrl()
{
InitializeComponent();
DataContext = this;
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
lbxOrder.ItemsSource = GlobalConfig.lstFilterOrder;
dateStart.SelectedDate = DateTime.Now.Date.AddDays(-7);
dateEnd.SelectedDate = DateTime.Now.Date.AddDays(1).AddSeconds(-1);
borderFilterRemarkSelect.Visibility = Visibility.Collapsed;
AutoGetOrder();
}
public void GetOrderTest()
{
for (int i = 0; i < 10000; i++)
{
//lstOrder.Add(new oms_wei_order_info() { id = 1, IsSelect = false, order_id = ("3737033423685556736".ParseToLong() + Randomx.GetId(0,100)).ParseToString(), shop_name = "媛卡曦工厂优选" });
GlobalConfig.lstOrder.Add(new oms_wei_order_info() { id = 1, IsSelect = false, order_id = Randomx.GetId(1000, 10000).ParseToString(), shop_name = "媛卡曦工厂优选" });
}
//GlobalConfig.lstOrder.SortDesc(o => o.order_id.ParseToLong());
}
public void AutoGetOrder()
{
Task.Run(() =>
{
Thread.Sleep(5000);
while (true)
{
if (!IsAutoReadOrder)
{
Thread.Sleep(1000);
Dispatcher.Invoke(new Action(() =>
{
btnSearch.Content = "自动读单暂停中";
imgLoading.Visibility = Visibility.Collapsed;
}));
continue;
}
if (DateTime.Now > nextGetOrderTime)
{
GetOrder();
nextGetOrderTime = DateTime.Now.AddMinutes(25);
}
Thread.Sleep(1000);
Dispatcher.Invoke(new Action(() =>
{
var ticks = nextGetOrderTime - DateTime.Now;
btnSearch.Content = "读单 " + ticks.Minutes.ToString("00") + ":" + ticks.Seconds.ToString("00");
}));
}
});
}
public bool hasReadOrder = false;
/// <summary>
///
/// </summary>
/// <param name="filterGetCondition">按过滤条件读取读取服务端订单</param>
public void GetOrder(string orderIds = "", bool filterGetCondition = false)
{
Dispatcher.Invoke(new Action(() =>
{
imgLoading.Visibility = Visibility.Visible;
btnSearch.IsEnabled = false;
}));
int page = 0;
int totalPage = 1;
int pageSize = 50;
while (true && (IsAutoReadOrder || !string.IsNullOrEmpty(orderIds)))
{
if (page >= totalPage)
{
break;
}
Dispatcher.Invoke(new Action(() =>
{
imgLoading.Visibility = Visibility.Visible;
btnSearch.IsEnabled = false;
}));
page++;
var url = BaseClass.Build29WxObjString("order/get_erp_order_list");
var data = UserLogin.GetSignaturex() + "&page=" + page;
if (!string.IsNullOrEmpty(orderIds))
data += "&erp_order_id_in=" + orderIds;
if (page > 1)
data += "&is_not_count=true";
data += "&page_size=" + pageSize;
var shop_id = string.Join(",", GlobalConfig.ShopLoginList.Select(s => s.ErpShopId).Where(s => !s.IsNullOrEmpty()));
//指定订单id的查询,不再查询店铺id
if (string.IsNullOrEmpty(orderIds))
data += "&erp_shop_id_in=" + shop_id;
Dispatcher.Invoke(new Action(() =>
{
// 按过滤条件读取
if (filterGetCondition)
{
if (!string.IsNullOrEmpty(txtShopName.Text.Trim()))
{
var shopNames = txtShopName.Text.Trim().Split(';').Where(s => !s.IsNullOrEmpty()).ToList();
shop_id = string.Join(",", GlobalConfig.ShopLoginList.Where(s => shopNames.Contains(s.ShopAccount)).Select(s => s.ErpShopId).Where(s => !s.IsNullOrEmpty()));
}
}
var startTime = BaseClass.DateTimeToTimestampSeconds(dateStart.SelectedDate.Value);
var endTime = BaseClass.DateTimeToTimestampSeconds(dateEnd.SelectedDate.Value.AddDays(1));
if (!chkEndDate.IsChecked.ParseToBool())
endTime = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.Date.AddDays(1));
data += "&start_time=" + startTime;
data += "&end_time=" + endTime;
}));
Thread.Sleep(200);
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.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
break;
}
var seconds = BaseRegex.GetDecimalJson(ref html, "seconds");
var jArr = JObject.Parse(html)["data"];
if (jArr.Count() == 0)
break;
var order_ids = string.Join(",", jArr.Select(a => a["order_id"].ParseToString()));
// 读取订单详情
if (string.IsNullOrEmpty(order_ids))
Thread.Sleep(100);
List<oms_wei_order_item_info> orderItems = GetOrderItemInfo(order_ids);
// 读取售后单
if (string.IsNullOrEmpty(order_ids))
Thread.Sleep(100);
List<oms_wei_refund_info> refunds = GetOrderRefundInfo(order_ids);
// 读订单扩展
if (string.IsNullOrEmpty(order_ids))
Thread.Sleep(100);
List<order_item_ext> orderItemExts = GetOrderItemExts(order_ids);
if (string.IsNullOrEmpty(order_ids))
{
foreach (var oie in orderItemExts)
{
// 移除订单物流异常信息,每次批量读单最后要去微信获取
oie.abnormal_text = "";
}
}
// 读取中转仓拍单订单
var url3 = BaseClass.Build29WxObjString("order/wx_get_transit_order");
var data3 = UserLogin.GetSignaturex();
data3 += "&order_no=" + order_ids;
var html3 = GetHtml.PostUtf8(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = GetHtml.PostUtf8(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
{
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html3, "msg"));
break;
}
List<oms_wei_external_procurement_log_info> transitOrderList = new List<oms_wei_external_procurement_log_info>();
try
{
transitOrderList = JsonHelper.DeserializeJsonToList<oms_wei_external_procurement_log_info>(JObject.Parse(html3)["data"].ParseToString());
}
catch { }
// 读取暂时记录的买手订单,后面想办法放到中转订单库里去
var url4 = BaseClass.Build29WxObjString("order/wx_get_buyer_order_list");
var data4 = UserLogin.GetSignaturex();
data4 += "&wx_order_id_in=" + order_ids;
var html4 = GetHtml.PostUtf8(url4, data4);
if (string.IsNullOrEmpty(html4) || !html4.Contains("\"code\":200"))
html4 = GetHtml.PostUtf8(url4, data4);
if (string.IsNullOrEmpty(html4) || !html4.Contains("\"code\":200"))
{
Dispatcher.Invoke(new Action(() =>
{
BaseMsgWindow.ShowError("订单读取失败(买手) " + BaseRegex.GetStringJson(ref html4, "msg"));
}));
break;
}
List<order_pdd_buyer_order> pddBuyerOrders = new List<order_pdd_buyer_order>();
try
{
pddBuyerOrders = JsonHelper.DeserializeJsonToList<order_pdd_buyer_order>(JObject.Parse(html4)["data"].ParseToString())
.OrderByDescending(p => p.TransitCreateTime).ToList();
}
catch { }
// 读取暂时记录的买手售后单,后面想办法放到中转订单库里去
var url6 = BaseClass.Build29WxObjString("order/wx_get_buyer_after_sale_list");
var data6 = UserLogin.GetSignaturex();
data6 += "&wx_order_id_in=" + order_ids;
List<order_pdd_buyer_after_sale> pddBuyerAfterSales = new List<order_pdd_buyer_after_sale>();
if (!string.IsNullOrEmpty(order_ids))
{
var html6 = GetHtml.PostUtf8(url6, data6);
if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200"))
html6 = GetHtml.PostUtf8(url6, data6);
if (string.IsNullOrEmpty(html6) || !html6.Contains("\"code\":200"))
{
BaseMsgWindow.ShowError("订单读取失败(买手售后) " + BaseRegex.GetStringJson(ref html6, "msg"));
break;
}
try
{
pddBuyerAfterSales = JsonHelper.DeserializeJsonToList<order_pdd_buyer_after_sale>(JObject.Parse(html6)["data"].ParseToString())
.OrderByDescending(p => p.TransitCreateTime).ToList();
}
catch
{
}
}
// 读取中转仓处理售后单
var url5 = BaseClass.Build29WxObjString("order/wx_get_transit_warehouse_aftersale_list");
var data5 = UserLogin.GetSignaturex();
data5 += "&wx_order_id_in=" + order_ids;
var html5 = GetHtml.PostUtf8(url5, data5);
if (string.IsNullOrEmpty(html5) || !html5.Contains("\"code\":200"))
html5 = GetHtml.PostUtf8(url5, data5);
if (string.IsNullOrEmpty(html5) || !html5.Contains("\"code\":200"))
{
Dispatcher.Invoke(new Action(() =>
{
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html5, "msg"));
}));
break;
}
List<oms_wei_external_procurement_after_sale_info> transitAfterSaleList = new List<oms_wei_external_procurement_after_sale_info>();
try
{
transitAfterSaleList = JsonHelper.DeserializeJsonToList<oms_wei_external_procurement_after_sale_info>(JObject.Parse(html5)["data"].ParseToString())
.OrderByDescending(p => p.created_time).ToList();
}
catch { }
// 读取关联拍单商品
var urlMap = BaseClass.Build29WxObjString("order/wx_get_buy_prod_map");
var dataMap = UserLogin.GetSignaturex()
+ "&spu_codes=" + string.Join(",", orderItems.Select(oi => GetHtml.UrlEncodeUtf8(oi.out_product_id))) + "," + string.Join(",", orderItems.Select(oi => oi.product_id));
dataMap += "&main_user_name=" + BaseClass.MainUserName;
var resultMap = GetHtml.PostUtf8(urlMap, dataMap);
if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200"))
resultMap = GetHtml.PostUtf8(urlMap, dataMap);
if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200"))
{
Dispatcher.Invoke(new Action(() =>
{
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref resultMap, "msg"));
}));
break;
}
List<WXBuyMapInfo> byuMapList = new List<WXBuyMapInfo>();
try { byuMapList = JsonHelper.DeserializeJsonToList<WXBuyMapInfo>(JObject.Parse(resultMap)["data"].ParseToString()); } catch { }
// 装载订单
foreach (JObject jObj in jArr)
{
try
{
oms_wei_order_info order = null;
order = JsonHelper.DeserializeJsonToObject<oms_wei_order_info>(JsonHelper.SerializeObject(jObj));
//装载订单商品详情
order.orderItems = new ObservableCollection<oms_wei_order_item_info>();
foreach (var item in orderItems.Where(oi => oi.order_id == order.order_id))
{
// 订单商品
item.ItemOrder = order;
order.orderItems.Add(item);
item.OrderItemExt = orderItemExts.FirstOrDefault(ext => ext.order_id == item.order_id && item.sku_id == item.sku_id);
// 已放到赋值函数中处理
// 更新店铺是否加入代发情况
//item.Shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ErpShopId == item.order_id);
//Dispatcher.Invoke(new Action(() => { item.UpdateOrderItemBuyButton(); }));
// 关联拍单关系 // 危险物品禁止拍单,仅关联安全商品
if (!GlobalConfig.lstDangerItemWord.Any(d => (item.title).ParseToString().Contains(d)))
{
item.BuyMap = byuMapList.FirstOrDefault(b => b.sku_code == item.out_sku_id && b.spu_code == item.out_product_id);
if (item.BuyMap == null)
item.BuyMap = byuMapList.FirstOrDefault(b => b.sku_code == item.sku_attr_str && b.spu_code == item.out_product_id);
if (item.BuyMap == null)
item.BuyMap = byuMapList.FirstOrDefault(b => b.sku_code == item.out_sku_id && b.spu_code == item.product_id);
if (item.BuyMap == null)
item.BuyMap = byuMapList.FirstOrDefault(b => b.sku_code == item.sku_attr_str && b.spu_code == item.product_id);
}
// 中转仓订单
if (item.ItemOrder.orderItems.Count > 1)
item.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == item.order_id && t.order_sku_id == item.sku_id));
else
item.ItemTransitOrders.AddRange(transitOrderList.Where(t => t.order_no == item.order_id));
// 中转仓退货包裹订单
item.ItemTransitOrderAfterSales = transitAfterSaleList.Where(a => item.ItemTransitOrders.Any(t => t.out_order_no == a.order_code)).ToList();
// 中转仓买手订单(wx_send_type等于0)
item.PddBuyerOrders = pddBuyerOrders.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id && po.wx_send_type == 0).ToList();
// 中转仓买手退货订单(wx_send_type等于0)
item.PddBuyerAfterSales = pddBuyerAfterSales.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id && po.wx_send_type == 0).ToList();
// 直发买手订单(wx_send_type等于1)
item.PddBuyerOrders = pddBuyerOrders.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id && po.wx_send_type == 1).ToList();
// 直发买手退款订单(wx_send_type等于1)
item.DirectPddBuyerAfterSales = pddBuyerAfterSales.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id && po.wx_send_type == 1).ToList();
}
// 装载订单售后详情
order.refundItems = new ObservableCollection<oms_wei_refund_info>(refunds.Where(of => of.order_id == order.order_id));
// 读取订单后立即赋值,防止滚动时实时赋值造成卡顿
foreach (var orderItem in order.orderItems)
{
orderItem.SetOrderItemTextProperty();
}
order.SetOrderTextProperty();
// 删除再添加,触发更新。 todo: 如果已存在相同订单,则直接修改更新
var orderExist = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.order_id);
while (orderExist != null)
{
GlobalConfig.lstOrder.Remove(orderExist);
orderExist = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.order_id);
}
GlobalConfig.lstOrder.Add(order);
Dispatcher.Invoke(new Action(() =>
{
FilterOneOrder(order);
}));
}
catch (Exception ex)
{
}
}
Dispatcher.Invoke(new Action(() =>
{
disPlayOrderTabOrderCount();
}));
var totalCount = BaseRegex.GetIntJson(ref html, "count");
if (totalCount > 0)
totalPage = Math.Ceiling(1m * totalCount / pageSize).ParseToInt();
else
{
}
}
if (string.IsNullOrEmpty(orderIds))
GetShopWaybillExceptionOrder();
if (string.IsNullOrEmpty(orderIds))
hasReadOrder = true;
Dispatcher.Invoke(new Action(() =>
{
imgLoading.Visibility = Visibility.Collapsed;
btnSearch.IsEnabled = true;
}));
}
/// <summary>
/// 读取订单详情信息
/// </summary>
/// <param name="order_ids"></param>
/// <returns></returns>
public static List<oms_wei_order_item_info> GetOrderItemInfo(string order_ids)
{
if (string.IsNullOrEmpty(order_ids))
return new List<oms_wei_order_item_info>();
var url = BaseClass.Build29WxObjString("order/get_erp_order_item_list");
var data = UserLogin.GetSignaturex();
data += "&erp_order_id_in=" + order_ids;
data += "&page_size=" + 2500;
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", 5);
}
List<oms_wei_order_item_info> orderItems = new List<oms_wei_order_item_info>();
try
{
orderItems = JsonHelper.DeserializeJsonToList<oms_wei_order_item_info>(JObject.Parse(html)["data"].ParseToString());
if (orderItems == null)
orderItems = new List<oms_wei_order_item_info>();
}
catch (Exception ex)
{
orderItems = new List<oms_wei_order_item_info>();
BaseMsgWindow.ShowAnimateMessage("订单详情读取失败 " + ex.Message, "Error", 5);
}
return orderItems;
}
public static List<order_item_ext> GetOrderItemExts(string order_ids)
{
List<order_item_ext> existOrderExtList = new List<order_item_ext>();
if (!string.IsNullOrEmpty(order_ids))
{
var url = BaseClass.Build29WxObjString("order/wx_get_order_item_ext_info");
var data = UserLogin.GetSignaturex();
data += "&wx_order_id_in=" + order_ids;
var html = GetHtml.PostUtf8(url, data);
if (!html.Contains("\"code\":200"))
html = GetHtml.PostUtf8(url, data);
if (!html.Contains("\"code\":200"))
{
BaseMsgWindow.ShowAnimateMessage("订单扩展信息查询失败 " + BaseRegex.GetStringJson(ref html, "msg"), "Error", 5);
}
existOrderExtList = JsonHelper.DeserializeJsonToList<order_item_ext>(JsonHelper.JObjectParse(html)["data"].ParseToString());
}
return existOrderExtList;
}
/// <summary>
/// 读取售后单
/// </summary>
/// <param name="order_ids"></param>
/// <returns></returns>
public static List<oms_wei_refund_info> GetOrderRefundInfo(string order_ids)
{
if (string.IsNullOrEmpty(order_ids))
return new List<oms_wei_refund_info>();
Thread.Sleep(100);
var url2 = BaseClass.Build29WxObjString("order/get_erp_refund_list");
var data2 = UserLogin.GetSignaturex();
data2 += "&erp_order_id_in=" + order_ids;
var html2 = GetHtml.PostUtf8(url2, data2);
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
html2 = GetHtml.PostUtf8(url2, data2);
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
{
//BaseMsgWindow.ShowError(MainWindow.Instance, "订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
//break;
}
List<oms_wei_refund_info> refunds = new List<oms_wei_refund_info>();
try { refunds = JsonHelper.DeserializeJsonToList<oms_wei_refund_info>(JObject.Parse(html2)["data"].ParseToString()); } catch { }
return refunds;
}
public void GetShopWaybillExceptionOrder()
{
foreach (var shop in GlobalConfig.ShopLoginList)
{
if (shop.LoginStatus == "登录成功")
ShopBLL.CheckShopLogin(shop);
if (shop.LoginStatus != "登录成功")
continue;
var rst = WxSimAbnormalOrderSeach(shop, 100);
//Thread.Sleep(Randomx.GetId(50, 150));
if (rst.Contains("\"code\":0"))
{
try
{
JObject jObj = JsonHelper.JObjectParse(rst);
var wxOrderIdIn = string.Join(",", jObj["orderList"].Select(j => j["commonInfo"]["orderId"].ParseToString()));
var wxSkuIdIn = string.Join(",", jObj["orderList"].Select(j => (j["orderProductInfo"].FirstOrDefault()?["skuId"]).ParseToString()));
// 异常单
List<order_item_ext> existOrderExtList = new List<order_item_ext>();
if (!string.IsNullOrEmpty(wxOrderIdIn) && !string.IsNullOrEmpty(wxSkuIdIn))
{
var url = BaseClass.Build29WxObjString("order/wx_get_order_item_ext_info");
var data = UserLogin.GetSignaturex();
data += "&wx_order_id_in=" + wxOrderIdIn;
data += "&wx_sku_id_in=" + wxSkuIdIn;
var html = GetHtml.PostUtf8(url, data);
if (!html.Contains("\"code\":200"))
html = GetHtml.PostUtf8(url, data);
if (!html.Contains("\"code\":200"))
{
BaseMsgWindow.ShowAnimateMessage("订单扩展信息查询失败 " + BaseRegex.GetStringJson(ref html, "msg"), "Error", 5);
continue;
}
existOrderExtList = JsonHelper.DeserializeJsonToList<order_item_ext>(JsonHelper.JObjectParse(html)["data"].ParseToString());
}
// 先把已经物流异常但未查询到的订单改为正常
var waybillExceptionOrders = GlobalConfig.lstOrder.Where(o => o.shop_id.ParseToString() == shop.ErpShopId && o.orderItems.Any(oi => oi.ShopWaybillExceptionStr == "物流异常")).ToList();
foreach (var waybillExceptionOrder in waybillExceptionOrders)
{
if (!existOrderExtList.Any(oExt => oExt.order_id == waybillExceptionOrder.order_id))
{
foreach (var orderItem in waybillExceptionOrder.orderItems)
{
if (orderItem.OrderItemExt != null)
{
orderItem.OrderItemExt.abnormal_text = "";
orderItem.ShopWaybillExceptionStr = "";
}
}
// 更新显示
Dispatcher.Invoke(new Action(() =>
{
foreach (var oi in waybillExceptionOrder.orderItems)
oi.SetOrderItemTextProperty();
waybillExceptionOrder.SetOrderTextProperty();
MainWindow.Instance.orderListCtrl.FilterOneOrder(waybillExceptionOrder, true);
}));
var orderId = waybillExceptionOrder.order_id;
order_item_ext orderExt = new order_item_ext() { order_id = orderId, shop_app_id = shop.ShopId, shop_name = shop.ShopAccount, abnormal_text = "物流异常" };
var url1 = BaseClass.Build29WxObjString("order/wx_mdy_order_item_ext_info");
var data1 = UserLogin.GetSignaturex();
data1 += "&wx_order_id=" + orderExt.order_id;
data1 += "&abnormal_text=";
var html1 = GetHtml.PostUtf8(url1, data1);
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
html1 = GetHtml.PostUtf8(url1, data1);
}
}
foreach (var od in jObj["orderList"])
{
var oStr = JsonHelper.SerializeObject(od);
//var orderId = o["commonInfo"]["orderId"].ParseToString();
var orderId = BaseRegex.GetStringJson(ref oStr, "orderId");
if (orderId == "3737914129536416512")
{
}
var skuId = BaseRegex.GetStringJson(ref oStr, "skuId");
// 存在状态完全一样的订单异常信息就跳过
order_item_ext orderExt = new order_item_ext() { order_id = orderId, sku_id = skuId, shop_app_id = shop.ShopId, shop_name = shop.ShopAccount, abnormal_text = "物流异常" };
if (!existOrderExtList.Any(eoe => eoe.order_id == orderExt.order_id && eoe.sku_id == orderExt.sku_id && eoe.abnormal_text == orderExt.abnormal_text))
{
var url1 = BaseClass.Build29WxObjString("order/wx_add_order_item_ext_info");
if (existOrderExtList.Any(eoe => eoe.order_id == orderExt.order_id && eoe.sku_id == orderExt.sku_id))
url1 = BaseClass.Build29WxObjString("order/wx_mdy_order_item_ext_info");
var data1 = UserLogin.GetSignaturex();
data1 += "&wx_order_id=" + orderExt.order_id;
data1 += "&wx_sku_id=" + orderExt.sku_id;
data1 += "&shop_app_id=" + orderExt.shop_app_id;
data1 += "&shop_name=" + orderExt.shop_name;
data1 += "&abnormal_text=" + orderExt.abnormal_text;
var html1 = GetHtml.PostUtf8(url1, data1);
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
{
BaseMsgWindow.ShowAnimateMessage("订单扩展信息写入失败 " + BaseRegex.GetStringJson(ref html1, "msg"), "Error", 5);
break;
}
}
else
{
orderExt = existOrderExtList.FirstOrDefault(eoe => eoe.order_id == orderExt.order_id && eoe.sku_id == orderExt.sku_id && eoe.abnormal_text == orderExt.abnormal_text);
}
// 更新订单附加信息
if (orderExt.order_id == "3737845591459133952")
{
}
var order = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == orderExt.order_id);
if (order != null)
{
var orderItem = order.orderItems.FirstOrDefault(oi => oi.sku_id == orderExt.sku_id);
if (orderItem != null)
{
orderItem.OrderItemExt = orderExt;
Dispatcher.Invoke(new Action(() =>
{
foreach (var oi in order.orderItems)
oi.SetOrderItemTextProperty();
order.SetOrderTextProperty();
MainWindow.Instance.orderListCtrl.FilterOneOrder(order, true);
}));
}
}
}
}
catch (Exception ex)
{
BaseMsgWindow.ShowAnimateMessage("订单扩展信息查询失败 " + ex.Message, "Error", 5);
}
}
}
}
public void disPlayOrderTabOrderCount()
{
var orders = string.Join("','", GlobalConfig.lstFilterOrder.Select(o => o.order_id));
var orders1 = string.Join(",", GlobalConfig.lstFilterOrder.Select(o => o.order_id));
var tabItems = this.tabOrderType.Items.Cast<TabItem>();
var tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待采购"));
var userOrderLst = GlobalConfig.lstOrder.Where(o => GlobalConfig.ShopLoginList.Any(s => s.ErpShopId.ParseToLong() == o.shop_id)).ToList();
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "待采购")));
//tabItem.Header = "待采购(" + userOrderLst.Where(r => r.IsWaitBuy).Count() + "|" + filteLstTmp.Where(r => r.IsWaitBuy).Count() + ")";
tabItem.Header = "待采购(" + userOrderLst.Where(r => r.IsWaitBuy).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待发货"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "待发货")));
//tabItem.Header = "待发货(" + userOrderLst.Where(r => r.IsWaitSend).Count() + "|" + filteLstTmp.Where(r => r.IsWaitSend).Count() + ")";
tabItem.Header = "待发货(" + userOrderLst.Where(r => r.IsWaitSend).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待收货"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "待收货")));
//tabItem.Header = "待收货(" + userOrderLst.Where(r => r.IsWaitReceive).Count() + "|" + filteLstTmp.Where(r => r.IsWaitReceive).Count() + ")";
tabItem.Header = "待收货(" + userOrderLst.Where(r => r.IsWaitReceive).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("售后完成单"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "售后完成单")));
//tabItem.Header = "售后完成单(" + userOrderLst.Where(r => r.IsRefund).Count() + "|" + filteLstTmp.Where(r => r.IsRefund).Count() + ")";
tabItem.Header = "售后完成单(" + userOrderLst.Where(r => r.IsRefund).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("需处理售后单"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "需处理售后单")));
//tabItem.Header = "需处理售后单(" + userOrderLst.Where(r => r.IsEmergency).Count() + "|" + filteLstTmp.Where(r => r.IsEmergency).Count() + ")";
tabItem.Header = "需处理售后单(" + userOrderLst.Where(r => r.IsEmergency).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("异常单"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "异常单")));
//tabItem.Header = "异常单(" + userOrderLst.Where(r => r.isAbnormal).Count() + "|" + filteLstTmp.Where(r => r.isAbnormal).Count() + ")";
tabItem.Header = "异常单(" + userOrderLst.Where(r => r.isAbnormal).Count() + "|" + filteLstTmp.Count() + ")";
}
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("全部订单"));
if (tabItem != null)
{
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(userOrderLst.Where(o => !GetOrderIsFilter(o, "全部订单")));
tabItem.Header = "全部订单(" + userOrderLst.Count() + "|" + filteLstTmp.Count() + ")";
}
//txtMsg.Text = "当前条件共计 " + GlobalConfig.lstFilterOrder.Count() + " 条订单记录";
}
public void FilterOrders()
{
try
{
if (this.lbxOrder == null)
return;
Dispatcher.Invoke(new Action(() =>
{
if (GlobalConfig.OrderTabHeaderStr.StartsWith("需处理售后单"))
GlobalConfig.lstFilterOrder = new ObservableCollectionThreadSafe<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o)).OrderByDescending(o => o.RefundDatetime));
else if (GlobalConfig.OrderTabHeaderStr.StartsWith("异常单"))
GlobalConfig.lstFilterOrder = new ObservableCollectionThreadSafe<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o)).OrderByDescending(o => o.update_time));
else
GlobalConfig.lstFilterOrder = new ObservableCollectionThreadSafe<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o)).OrderByDescending(o => o.create_time));
this.lbxOrder.ItemsSource = GlobalConfig.lstFilterOrder;
disPlayOrderTabOrderCount();
}));
}
catch (Exception ex)
{
}
}
public void FilterOneOrder(oms_wei_order_info order, bool updateTabCount = false)
{
var orderExist = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.order_id == order.order_id);
while (orderExist != null)
{
GlobalConfig.lstFilterOrder.Remove(orderExist);
orderExist = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.order_id == order.order_id);
}
if (!GetOrderIsFilter(order))
{
oms_wei_order_info nextOrder = null;
if (GlobalConfig.OrderTabHeaderStr.StartsWith("需处理售后单"))
nextOrder = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.RefundDatetime < order.RefundDatetime);
else if (GlobalConfig.OrderTabHeaderStr.StartsWith("异常单"))
nextOrder = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.update_time < order.update_time);
else
nextOrder = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.create_time < order.create_time);
if (nextOrder != null)
{
GlobalConfig.lstFilterOrder.Insert(GlobalConfig.lstFilterOrder.IndexOf(nextOrder), order);
}
else
{
GlobalConfig.lstFilterOrder.Add(order);
}
}
if (updateTabCount)
{
Dispatcher.Invoke(new Action(() =>
{
disPlayOrderTabOrderCount();
}));
}
}
bool GetOrderIsFilter(oms_wei_order_info order, string filterHeadStr = null)
{
if (order == null)
return true;
if (!GlobalConfig.ShopLoginList.Any(s => s.ErpShopId.ParseToLong() == order.shop_id))
return true;
if (!string.IsNullOrEmpty(strSearchAll))
{
bool isFilter = true;
// 买手物流
if (order.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.express_1_waybill.ParseToString().Contains(strSearchAll))))
isFilter = false;
// 仓库物流
else if (order.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.express_2_waybill.ParseToString().Contains(strSearchAll))))
isFilter = false;
// 退货物流
else if (order.refundItems.Any(ri => ri.return_waybill_id.ParseToString().Contains(strSearchAll)))
isFilter = false;
// 退货单号
else if (order.refundItems.Any(ri => ri.after_sale_order_id.ParseToString().Contains(strSearchAll)))
isFilter = false;
// 仓库采购单号
else if (order.orderItems.Any(oi => oi.ItemTransitOrders.Any(t => t.out_order_no.ParseToString().Contains(strSearchAll))))
isFilter = false;
// 仓库退款单号
else if (order.orderItems.Any(oi => oi.ItemTransitOrderAfterSales.Any(t => t.refund_waybill.ParseToString().Contains(strSearchAll))))
isFilter = false;
if (isFilter)
return true;
}
// 过滤店铺名称
if (!string.IsNullOrEmpty(txtShopName.Text.Trim()) && !(";" + txtShopName.Text.Trim() + ";").Contains(";" + order.shop_name + ";"))
{
return true;
}
// 过滤商品名称
if (!string.IsNullOrEmpty(txtGoodsName.Text.Trim()) && !order.orderItems.Any(it => it.title.Contains(txtGoodsName.Text.Trim())))
{
return true;
}
// 过滤id
if (!string.IsNullOrEmpty(txtOrderId.Text.Trim()) && !(";" + txtOrderId.Text.Trim().Replace(' ', ';').Replace(',', ';') + ";").Contains(";" + order.order_id + ";"))
{
return true;
}
// 过滤多子单订单
if (chkNoMultiOrder.IsChecked.ParseToBool() && order.orderItems.Count() > 1)
{
return true;
}
// 过滤非中转仓订单
if (chkOnlyWarehouseOrder.IsChecked.ParseToBool() && !order.IsWaitBuy &&
order.orderItems.All(oi => oi.ItemTransitOrderWithVoid == null) && order.orderItems.All(oi => oi.OrderItemExt?.buy_type != "直发"))
{
return true;
}
// 过滤备注
if (chkFilterRemark.IsChecked == true && !string.IsNullOrEmpty(txtFilterRemark.Text))
{
if (cmbFilterRemark.SelectedItem is ComboBoxItem comboBoxItem)
{
if (comboBoxItem.Content is TextBlock tb)
{
if (tb.Text == "店铺备注包含" && !lstFilterText.Contains(order.shop_remark))
return true;
else if (tb.Text == "软件备注包含" && !lstFilterText.Contains(order.soft_remark))
return true;
else if (tb.Text == "店铺备注不含" && lstFilterText.Contains(order.shop_remark))
return true;
else if (tb.Text == "软件备注不含" && lstFilterText.Contains(order.soft_remark))
return true;
}
}
}
if (!chkDirectOrder.IsChecked == true && order.OrderBuyType == "直发")
return true;
if (!chkTransitOrder.IsChecked == true && order.OrderBuyType == "云仓")
return true;
if (!chkTransitChangeDirectOrder.IsChecked == true && order.OrderBuyType == "云改直")
return true;
// 过滤时间范围
if (cmbTimeType.SelectedItem is ComboBoxItem cbi)
{
if (cbi.Content is TextBlock tb)
{
if (tb.Text == "更新时间")
{
if (order.UpdateDateTime < dateStart.SelectedDate.Value)
return true;
if (chkEndDate.IsChecked == true && order.UpdateDateTime > dateEnd.SelectedDate.Value)
return true;
}
if (tb.Text == "创建时间")
{
if (order.CreateDateTime < dateStart.SelectedDate.Value)
return true;
if (chkEndDate.IsChecked == true && order.CreateDateTime > dateEnd.SelectedDate.Value)
return true;
}
}
}
// 过滤标签页
if (filterHeadStr.IsNullOrEmpty())
filterHeadStr = GlobalConfig.OrderTabHeaderStr;
if (filterHeadStr.StartsWith("全部订单"))
{
return false;
}
if (filterHeadStr.StartsWith("待采购"))
{
if (!order.IsWaitBuy)
return true;
//if (order.IsRefund)
// return true;
if (chkMapProdOnly.IsChecked == true && order.orderItems.All(oi => oi.BuyMap == null))
return true;
if (chkNoMapProdOnly.IsChecked == true && order.orderItems.All(oi => oi.BuyMap != null))
return true;
}
if (filterHeadStr.StartsWith("待发货") && !order.IsWaitSend)
{
return true;
}
if (filterHeadStr.StartsWith("待收货"))
{
if (!order.IsWaitReceive)
return true;
if (chkWaitReceiveBuyerIsNotSend.IsChecked == true && order.orderItems.All(oi => oi.BuyerTransitWaybillStatusStr != "买手未发货"))
return true;
if (chkWaitReceiveBuyerIsSend.IsChecked == true && order.orderItems.All(oi => oi.BuyerTransitWaybillStatusStr != "买手已发货"))
return true;
if (chkWaitReceiveBuyerIsInWarehouse.IsChecked == true && order.orderItems.All(oi => oi.BuyerTransitWaybillStatusStr != "买手已送达"))
return true;
if (chkWaitReceiveWarehouseIsNotPickup.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转待取号"))
return true;
if (chkWaitReceiveWarehouseIsPickup.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转提前取号" && oi.WarehouseWaybillStatusStr != "中转已取号" && oi.WarehouseWaybillStatusStr != "中转已入库"))
return true;
if (chkWaitReceiveWarehouseIsSendOut.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转已出库"))
return true;
}
if (filterHeadStr.StartsWith("异常单") && !order.isAbnormal)
{
return true;
}
if (filterHeadStr.StartsWith("需处理售后单"))
{
if (!order.IsEmergency)
return true;
if (chkEmergencyBuyerWaitAfterSale.IsChecked == true && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("需手动申请售后")))
return true;
else if (chkEmergencyBuyerWaitSendBack.IsChecked == true && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("待用户发货")))
return true;
else if (chkEmergencyBuyerWaitSupplierRefund.IsChecked == true && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("商家处理中")))
return true;
else if (chkEmergencyBuyerRefundFail.IsChecked == true && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("退款失败")))
return true;
if (chkEmergencyShopCustomRefundHasWaybill.IsChecked == true && order.orderItems.Any(oi => oi.ReturnWaybillIdStr.IsNullOrEmpty()))
return true;
else if (chkEmergencyShopCustomRefundNoWaybill.IsChecked == true && order.orderItems.All(oi => !oi.ReturnWaybillIdStr.IsNullOrEmpty()))
return true;
if (order.order_id == "3737838342857424896")
{
}
// 退款完成
if (chkEmergencyShopAfterSaleSuccess.IsChecked == true && order.DeliveryDeadlineDtatusStr != "退款完成")
return true;
// 退款中
else if (chkEmergencyShopInAfterSale.IsChecked == true && (order.DeliveryDeadlineDtatusStr != "退款中"))
return true;
//// 退货退款
//if (chkEmergencyReturn.IsChecked == true && !(order.refundItems.OrderByDescending(or => or.create_time).FirstOrDefault()?.RefundStatusStr).ParseToString().Contains("退货"))
// return true;
//// 仅退款
//else if (chkEmergencyRefund.IsChecked == true && (order.refundItems.OrderByDescending(or => or.create_time).FirstOrDefault()?.RefundStatusStr).ParseToString().Contains("退货"))
// return true;
// 退货退款
if (chkEmergencyReturn.IsChecked == true && !(order.refundItems.OrderByDescending(or => or.create_time).FirstOrDefault()?.type).ParseToString().Contains("RETURN"))
return true;
// 仅退款
else if (chkEmergencyRefund.IsChecked == true && !(order.refundItems.OrderByDescending(or => or.create_time).FirstOrDefault()?.type).ParseToString().Contains("REFUND"))
return true;
}
if (filterHeadStr.StartsWith("售后完成单"))
{
if (!order.IsRefund)
return true;
if (chkAftersaleIsSend.IsChecked == true && !order.DeliveryDeadlineStr.Contains("已发货"))
return true;
else if (chkAftersaleIsNotSend.IsChecked == true && !order.DeliveryDeadlineStr.Contains("未发货"))
return true;
if (chkAftersaleBuyerIsBuy.IsChecked == true && order.orderItems.All(oi => oi.BuyerTransitWaybillStatusStr.IsNullOrEmpty()))
return true;
if (chkAftersaleWarehouseIsNotPickup.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转待取号" && !oi.WarehouseWaybillStatusStr.Contains("取号异常")))
return true;
if (chkAftersaleWarehouseIsPickup.IsChecked == true && order.orderItems.All(oi => oi.WarehouseWaybillStatusStr != "中转提前取号" && oi.WarehouseWaybillStatusStr != "中转已取号" &&
oi.WarehouseWaybillStatusStr != "中转已入库" && oi.WarehouseWaybillStatusStr != "中转已出库"))
return true;
}
return false;
}
private void btnMultiShopChoice_Click(object sender, RoutedEventArgs e)
{
MainWindow.Instance.shopListCtrl.IsVisibleChanged -= ShopListCtrl_IsVisibleChanged;
MainWindow.Instance.shopListCtrl.Visibility = Visibility.Visible;
MainWindow.Instance.shopListCtrl.IsVisibleChanged += ShopListCtrl_IsVisibleChanged;
}
private void ShopListCtrl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (!MainWindow.Instance.shopListCtrl.IsVisible && MainWindow.Instance.shopListCtrl.IsAcceptChoiceShop == true)
{
var list = MainWindow.Instance.shopListCtrl.lbxShop.ItemsSource as ObservableCollection<ShopLoginInfo>;
if (list != null)
this.txtShopName.Text = string.Join(";", list.Where(s => s.IsSelect == true).Select(s => s.ShopAccount));
FilterOrders();
}
MainWindow.Instance.shopListCtrl.IsVisibleChanged -= ShopListCtrl_IsVisibleChanged;
}
private void btnSearch_Click(object sender, RoutedEventArgs e)
{
this.btnSearch.IsEnabled = false;
Task.Run(() =>
{
Thread.Sleep(5000);
Dispatcher.Invoke(new Action(() => { this.btnSearch.IsEnabled = true; }));
});
Task.Run(() =>
{
while (!MainWindow.Instance.hasReadShop)
{
Thread.Sleep(100);
}
GetOrder();
nextGetOrderTime = DateTime.Now.AddMinutes(25);
});
}
private void btnFilter_Click(object sender, RoutedEventArgs e)
{
FilterOrders();
}
private void dgOrderHeader_ColumnDisplayIndexChanged(object sender, DataGridColumnEventArgs e)
{
}
private void dgOrderHeader_LayoutUpdated(object sender, EventArgs e)
{
foreach (var item in lbxOrder.Items)
{
ListBoxItem container = (ListBoxItem)lbxOrder.ItemContainerGenerator.ContainerFromIndex(lbxOrder.Items.IndexOf(item));
if (container != null)
{
// 找到grid控件并修改列大小
var grids = UiCtrlUtils.FindVisualChildAll<Grid>(container, "gridListItem");
foreach (var grid in grids)
{
for (int i = 0; i < grid.ColumnDefinitions.Count; i++)
{
if (dgOrderHeader.Columns.Count > i)
{
// 最后一列因滚动条变窄,已在表头补偿
if (i == grid.ColumnDefinitions.Count - 1)
grid.ColumnDefinitions[i].Width = new GridLength(Math.Max(0, dgOrderHeader.Columns[i].ActualWidth - 0));
else
grid.ColumnDefinitions[i].Width = new GridLength(dgOrderHeader.Columns[i].ActualWidth);
}
}
}
}
}
}
private void ChkSelectAll_Checked(object sender, RoutedEventArgs e)
{
foreach (var order in GlobalConfig.lstOrder.ToList())
{
order.IsSelect = true;
}
}
private void ChkSelectAll_Unchecked(object sender, RoutedEventArgs e)
{
foreach (var order in GlobalConfig.lstOrder.ToList())
{
order.IsSelect = false;
}
}
private void ChkSelectAll_Loaded(object sender, RoutedEventArgs e)
{
chkSelectAll = sender as CheckBox;
}
public void UpdateChkAllBox()
{
chkSelectAll.Checked -= ChkSelectAll_Checked;
chkSelectAll.Unchecked -= ChkSelectAll_Unchecked;
if (GlobalConfig.lstFilterOrder.All(s => s.IsSelect))
chkSelectAll.IsChecked = true;
else if (GlobalConfig.lstFilterOrder.All(s => !s.IsSelect))
chkSelectAll.IsChecked = false;
else
chkSelectAll.IsChecked = null;
chkSelectAll.Checked += ChkSelectAll_Checked;
chkSelectAll.Unchecked += ChkSelectAll_Unchecked;
}
private void txtSearchAll_TextChanged(object sender, TextChangedEventArgs e)
{
strSearchAll = txtSearchAll.Text.Trim();
}
private void tabOrderType_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
GlobalConfig.OrderTabHeaderStr = ((tabOrderType.SelectedItem as TabItem)?.Header).ParseToString();
FilterOrders();
}
private void chkMapProdOnly_Click(object sender, RoutedEventArgs e)
{
if (chkMapProdOnly.IsChecked == true)
chkNoMapProdOnly.IsChecked = false;
FilterOrders();
}
private void chkNoMapProdOnly_Click(object sender, RoutedEventArgs e)
{
if (chkNoMapProdOnly.IsChecked == true)
chkMapProdOnly.IsChecked = false;
FilterOrders();
}
public static string addNotes(ShopLoginInfo shop, string orderId, string notes, int tagColor = -1)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/common/cgi/batchMerchantNotes?token=&lang=zh_CN";
string body = @"{""items"":[{""orderId"":""" + orderId + @""",""merchantNotes"":""" + notes + @""",""merchantNotesTagColor"":" + tagColor + @"}]}";
if (tagColor == -1)
body = @"{""items"":[{""orderId"":""" + orderId + @""",""merchantNotes"":""" + notes + @"""}]}";
string refere = "https://store.weixin.qq.com/shop/order/list";
var result = HttpResponseWXBLL.WeiXinPostResponse(shop, url, body, refere);
return result;
}
public static string addNotesFlag(ShopLoginInfo shop, string orderId, string notes, int tagColor = 0)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/common/cgi/batchMerchantNotes?token=&lang=zh_CN";
string body = @"{""items"":[{""orderId"":""" + orderId + @""",""merchantNotesTagColor"":" + tagColor + @"}]}";
string refere = "https://store.weixin.qq.com/shop/order/list";
var result = HttpResponseWXBLL.WeiXinPostResponse(shop, url, body, refere);
return result;
}
private void chkAutoReadBuyerOrder_CheckedChanged(object sender, RoutedEventArgs e)
{
IsAutoReadOrder = chkAutoReadOrder.IsChecked == true;
}
private void TabItem_SizeChanged(object sender, SizeChangedEventArgs e)
{
var tabItems = this.tabOrderType.Items.Cast<TabItem>();
wpFilter.Margin = new Thickness(tabItems.Sum(t => t.ActualWidth) + 18, wpFilter.Margin.Top, wpFilter.Margin.Right, wpFilter.Margin.Bottom);
Point position1 = txtFilterRemark.TranslatePoint(new Point(0, 0), gridOrderListCtrl);
Point position2 = txtFilterRemark.TranslatePoint(new Point(0, 0), wpFilter);
borderFilterRemarkSelect.Margin = new Thickness(tabItems.Sum(t => t.ActualWidth) + 16 + position2.X, position1.Y + txtFilterRemark.ActualHeight + 3, 0, 0);
}
private void chkSubFilterSonditions_Checked(object sender, RoutedEventArgs e)
{
FilterOrders();
}
/// <summary>
/// 待处理订单买手售后状态过滤
/// </summary>
private void chkEmergencyBuyerAfterSale_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkEmergencyBuyerWaitAfterSale.IsChecked = chkEmergencyBuyerWaitSendBack.IsChecked = chkEmergencyBuyerWaitSupplierRefund.IsChecked = chkEmergencyBuyerRefundFail.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
/// <summary>
/// 待处理订单店铺买家售后物流状态过滤
/// </summary>
private void chkEmergencyShopCustomRefundWaybill_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkEmergencyShopCustomRefundHasWaybill.IsChecked = chkEmergencyShopCustomRefundNoWaybill.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
/// <summary>
/// 待处理订单店铺售后状态过滤
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chkEmergencyShopAfterSale_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkEmergencyShopAfterSaleSuccess.IsChecked = chkEmergencyShopInAfterSale.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
/// <summary>
/// 待收货 买手发货状态
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void chkWaitReceiveBuyerStatus_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkWaitReceiveBuyerIsSend.IsChecked = chkWaitReceiveBuyerIsNotSend.IsChecked = chkWaitReceiveBuyerIsInWarehouse.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private void chkWaitReceiveWarehouseStatus_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkWaitReceiveWarehouseIsNotPickup.IsChecked = chkWaitReceiveWarehouseIsPickup.IsChecked = chkWaitReceiveWarehouseIsSendOut.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private void chkAftersaleSendStatus_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkAftersaleIsSend.IsChecked = chkAftersaleIsNotSend.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private void chkAftersaleBuyerStatus_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkAftersaleBuyerIsBuy.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private void chkAftersaleWarehouseStatus_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkAftersaleWarehouseIsPickup.IsChecked = chkAftersaleWarehouseIsNotPickup.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private async void btnBatchRefund_Click(object sender, RoutedEventArgs e)
{
var orders = GlobalConfig.lstFilterOrder.Where(o => o.IsSelect == true);
List<oms_wei_order_item_info> tmpOrderItems = new List<oms_wei_order_item_info>();
foreach (var order in orders)
{
foreach (var orderItem in order.orderItems)
{
if (orderItem.ItemOrder?.OrderBuyType == "云仓")
if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemTransitOrderWithVoid?.out_order_no) && orderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
(orderItem.TransitRefundStatusStr.Contains("需手动申请售后") || orderItem.TransitRefundStatusStr.Contains("待用户发货")))
tmpOrderItems.Add(orderItem);
if (orderItem.ItemOrder?.OrderBuyType == "直发" || orderItem.ItemOrder?.OrderBuyType == "云改直")
if (orderItem != null && !string.IsNullOrEmpty(orderItem.ItemOrder?.out_order_no) && orderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() &&
((orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("需手动申请售后") || (orderItem.ItemOrder?.out_after_sale_status).ParseToString().Contains("待用户发货")))
tmpOrderItems.Add(orderItem);
}
}
if (tmpOrderItems.Count == 0)
{
BaseMsgWindow.ShowAnimateMessage("未选中需要需手动申请售后的订单", "Error", 3);
return;
}
await Task.Run(() =>
{
int index = 0;
foreach (var tmpOrderItem in tmpOrderItems)
{
Dispatcher.Invoke(new Action(() => { txtMsg.Text = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index++; }));
var pddOrderSn = "";
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓")
pddOrderSn = tmpOrderItem.ItemTransitOrderWithVoid?.out_order_no;
else if (tmpOrderItem.ItemOrder?.OrderBuyType == "直发" || tmpOrderItem.ItemOrder?.OrderBuyType == "云改直")
pddOrderSn = tmpOrderItem.ItemOrder?.out_order_no;
BuyerLoginInfo buyer = null;
if (tmpOrderItem.ItemOrder?.OrderBuyType == "云仓")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemTransitOrderWithVoid.buyer_account); }));
else if (tmpOrderItem.ItemOrder?.OrderBuyType == "直发" || tmpOrderItem.ItemOrder?.OrderBuyType == "云改直")
Dispatcher.Invoke(new Action(() => { buyer = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_nick == tmpOrderItem.ItemOrder?.out_account); }));
if (buyer == null)
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手不在当前账户下,跳过", "Error", 3);
}
// 检测一下买手号
if (buyer.status == "在线")
{
PddMobileLoginForm.CheckBuyerLogin(buyer);
}
if (buyer.status != "在线")
{
BaseMsgWindow.ShowAnimateMessage("买手单:" + pddOrderSn + " 买手号掉线,跳过", "Error", 3);
continue;
}
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); }));
if (order == null)
continue;
oms_wei_order_item_info orderItem = null;
Dispatcher.Invoke(new Action(() => { orderItem = order.orderItems.FirstOrDefault(oi => oi.order_id == tmpOrderItem.order_id && oi.sku_id == tmpOrderItem.sku_id); }));
if (orderItem == null)
continue;
string refundStatusStr = "";
string outOrderNo = "";
if (order.OrderBuyType == "云仓")
{
outOrderNo = (orderItem.ItemTransitOrderWithVoid?.out_order_no).ParseToString();
refundStatusStr = (orderItem?.TransitRefundStatusStr).ParseToString();
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
outOrderNo = (order.out_order_no).ParseToString();
refundStatusStr = (order.out_after_sale_status).ParseToString();
}
if (orderItem == null || string.IsNullOrEmpty(outOrderNo) || !orderItem.PddBuyerAfterSaleAddressStr.IsNullOrEmpty() ||
(!refundStatusStr.Contains("需手动申请售后") && !refundStatusStr.Contains("待用户发货")))
continue;
PddBuyerOrderLiteInfo pddBuyerOrderLiteInfo = new PddBuyerOrderLiteInfo();
pddBuyerOrderLiteInfo.ShopOrderIdStr = orderItem.order_id;
pddBuyerOrderLiteInfo.order_sn = pddOrderSn;
if (order.OrderBuyType == "云仓")
pddBuyerOrderLiteInfo.order_amount = orderItem.ItemTransitOrderWithVoid?.out_amount;
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
pddBuyerOrderLiteInfo.order_amount = order.out_amount;
order_pdd_buyer_after_sale pddBuyerAfterSale = new order_pdd_buyer_after_sale()
{
wx_order_id = orderItem.order_id,
wx_sku_id = orderItem.sku_id,
TransitCreateTime = orderItem.ItemTransitOrderWithVoid?.created_time == null ? DateTime.MinValue : orderItem.ItemTransitOrderWithVoid.created_time,
pre_allocated_order_no = orderItem.ItemTransitOrderWithVoid?.pre_allocated_order_no,
buyerId = buyer.buyer_id,
buyerName = buyer.buyer_name,
orderSn = pddOrderSn,
orderAmount = pddBuyerOrderLiteInfo.order_amount,
refundAmount = pddBuyerOrderLiteInfo.order_amount,
orderDate = pddOrderSn.ParseToString().Split('-').FirstOrDefault().ParseToInt(),
};
if (orderItem.PddBuyerAfterSale != null)
pddBuyerAfterSale = orderItem.PddBuyerAfterSale;
bool isSimPddAfterSaleSuccess = true;
if (refundStatusStr.Contains("需手动申请售后"))
{
isSimPddAfterSaleSuccess = false;
// pddBuyerAfterSale作为参数传入,获取退货退款金额
var rst = PDDBuyerOrderReadCtrl.SimPddAfterSaleWithReturnGoods(buyer, pddBuyerOrderLiteInfo, pddBuyerAfterSale);
var afterSalesStatus = BaseRegex.GetIntJson(ref rst, "after_sales_status");
var afterSalesId = BaseRegex.GetLongJson(ref rst, "after_sales_id");
pddBuyerAfterSale.afterSalesId = afterSalesId.ToString();
pddBuyerAfterSale.statusText = "待用户发货";
if (afterSalesStatus == 0)
{
var msg = BaseRegex.GetStringJsonByRegs(ref rst, rst, "msg", "err_msg", "error_msg", "errorMsg", "errMsg");
BaseMsgWindow.ShowAnimateMessage(msg, "Error", 3);
Thread.Sleep(5000);
}
else
{
if (order.OrderBuyType == "云仓")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendTransitAfterSaleE57(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
isSimPddAfterSaleSuccess = true;
Thread.Sleep(Randomx.GetId(10000, 12001));
}
else
{
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
else if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直")
{
var e57Rst = PDDBuyerOrderReadCtrl.SendAfterSaleE57NeedManual(pddBuyerOrderLiteInfo, "待用户发货");
if (e57Rst.Contains("<code>0</code>") || e57Rst.Contains("<code>200</code>"))
{
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新成功", "Msg", 3);
isSimPddAfterSaleSuccess = true;
Thread.Sleep(Randomx.GetId(10000, 12001));
}
else
{
var msg = BaseRegex.GetStringXml(ref e57Rst, "msg");
BaseMsgWindow.ShowAnimateMessage("买手退款信息更新失败,服务端返回 " + msg, "Error", 3);
}
}
}
}
if (isSimPddAfterSaleSuccess)
{
var addressRst = YkdBuyerOrder.GetAfterSaleAddress(buyer, pddOrderSn, pddBuyerAfterSale.afterSalesId.ParseToString());
var merchantReceiverInfo = BaseRegex.GetOneJsonObjStrJson(ref addressRst, "merchantReceiverInfo");
string address = "";
if (merchantReceiverInfo != null)
{
address = BaseRegex.GetStringJson(ref merchantReceiverInfo, "copyValue");
}
var url3 = BaseClass.Build29WxObjString("order/wx_add_mdy_buyer_after_sale");
var data3 = UserLogin.GetSignaturex();
data3 += "&wx_order_id=" + pddBuyerAfterSale.wx_order_id;
data3 += "&wx_sku_id=" + pddBuyerAfterSale.wx_sku_id;
if (pddBuyerAfterSale.TransitCreateTime != DateTime.MinValue)
data3 += "&TransitCreateTime=" + pddBuyerAfterSale.TransitCreateTime.ToString("yyyy-MM-dd HH:mm:ss");
data3 += "&pre_allocated_order_no=" + pddBuyerAfterSale.pre_allocated_order_no;
data3 += "&buyerId=" + pddBuyerAfterSale.buyerId;
data3 += "&buyerName=" + pddBuyerAfterSale.buyerName;
data3 += "&orderAmount=" + pddBuyerAfterSale.orderAmount;
data3 += "&orderSn=" + pddBuyerAfterSale.orderSn;
data3 += "&afterSalesId=" + pddBuyerAfterSale.afterSalesId;
data3 += "&orderDate=" + pddBuyerAfterSale.orderDate;
//data3 += "&TransitPickupTime=" + pddBuyerOrder.TransitPickupTime.ToString("yyyy-MM-dd HH:mm:ss");
data3 += "&refundAmount=" + pddBuyerAfterSale.refundAmount;
data3 += "&statusText=" + pddBuyerAfterSale.statusText;
if (!string.IsNullOrEmpty(address))
data3 += "&afterSaleAddress=" + address;
if (order.OrderBuyType == "直发" || order.OrderBuyType == "云改直") // 云仓 0 直发 1
data3 += "&wx_send_type=1";
//data3 += "&is_mdy=true";
var html3 = GetHtml.PostUtf8(url3, data3);
if (string.IsNullOrEmpty(html3) || !html3.Contains("\"code\":200"))
html3 = GetHtml.PostUtf8(url3, data3);
}
MainWindow.Instance.orderListCtrl.GetOrder(tmpOrderItem.order_id);
Dispatcher.Invoke(new Action(() => { txtMsg.Text = "正在处理买手退货,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
}
Dispatcher.Invoke(new Action(() => { txtMsg.Text = "买手退货处理完成,总计:" + tmpOrderItems.Count + ",已处理:" + index; }));
});
}
public static string WxSimAbnormalOrderSeach(ShopLoginInfo shop, int page = 1)
{
string url = "https://store.weixin.qq.com/shop-faas/mmchannelstradeorder/list/cgi/orderSearch?token=&lang=zh_CN";
string referer = "https://store.weixin.qq.com/shop/order/list";
string body = @"{""isSearch"":false,""pageSize"":100,""overTime"":0,""pengingShipOneDay"":0,""pengingShipSixHour"":0,""expediteDelivery"":0," +
@"""stockoutPunishAlert"":0,""appointmentInstall"":0,""waybillStatus"":3,""isUserBookingDelivery"":0,""pageNum"":" + page + @",""onAftersaleOrderExist"":0,""orderStatus"":30}";
var result = HttpResponseWXBLL.WeiXinPostResponse(shop, url, body, referer);
return result;
}
private void btnMultiRemark_Click(object sender, RoutedEventArgs e)
{
wpFilterRemarkSelect.Children.Clear();
List<string> txts = txtFilterRemark.Text.Trim().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();
var remarks = GlobalConfig.lstOrder.Select(o => o.shop_remark).Distinct().ToList();
remarks.AddRange(GlobalConfig.lstOrder.Select(o => o.soft_remark).Distinct().ToList());
remarks = remarks.Distinct().ToList();
foreach (var remark in remarks)
{
if (string.IsNullOrWhiteSpace(remark))
continue;
wpFilterRemarkSelect.Children.Add(new CheckBox() { Content = remark, IsChecked = txts.Contains(remark), Margin = new Thickness(2) });
}
Point position = txtFilterRemark.TranslatePoint(new Point(0, 0), gridOrderListCtrl);
borderFilterRemarkSelect.Margin = new Thickness(position.X - 2, position.Y + txtFilterRemark.ActualHeight + 3, 0, 0);
if (borderFilterRemarkSelect.Visibility == Visibility.Visible)
borderFilterRemarkSelect.Visibility = Visibility.Collapsed;
else
borderFilterRemarkSelect.Visibility = Visibility.Visible;
}
private void btnCancelFilterRemark_Click(object sender, RoutedEventArgs e)
{
borderFilterRemarkSelect.Visibility = Visibility.Collapsed;
}
private void btnApplyFilterRemark_Click(object sender, RoutedEventArgs e)
{
string txt = "";
foreach (UIElement element in wpFilterRemarkSelect.Children)
{
if (element is CheckBox box && box.IsChecked == true)
{
txt += box.Content.ParseToString() + ";";
}
}
txtFilterRemark.Text = txt.TrimEnd(';');
borderFilterRemarkSelect.Visibility = Visibility.Collapsed;
}
private void btnFilterRemarkSelectAll_Click(object sender, RoutedEventArgs e)
{
foreach (UIElement element in wpFilterRemarkSelect.Children)
{
if (element is CheckBox box)
{
box.IsChecked = true;
}
}
}
private void btnFilterRemarkUnSelectAll_Click(object sender, RoutedEventArgs e)
{
foreach (UIElement element in wpFilterRemarkSelect.Children)
{
if (element is CheckBox box)
{
box.IsChecked = false;
}
}
}
private void txtFilterRemark_TextChanged(object sender, TextChangedEventArgs e)
{
lstFilterText = txtFilterRemark.Text.Trim().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Distinct().ToList();
}
private void chkEmergencyReturnOrRefund_Click(object sender, RoutedEventArgs e)
{
if (sender is CheckBox chk)
{
var isCheck = !chk.IsChecked.ParseToBool();
chkEmergencyReturn.IsChecked = chkEmergencyRefund.IsChecked = false;
chk.IsChecked = !isCheck;
}
FilterOrders();
}
private void btn_ShowShopRevenueStatisticsView(object sender, RoutedEventArgs e)
{
new DialogWindow()
{
Title = "统计",
Content = new ShopRevenueStatisticsView(),
}.ShowDialog();
}
}
}