743 lines
33 KiB
C#
743 lines
33 KiB
C#
using _29WxOrderWpf.BaseWindows;
|
|
using _29WxOrderWpf.Ctrls.BuyerCtrls;
|
|
using _29WxOrderWpf.Utils;
|
|
using AllBase;
|
|
using AllBase.Extension;
|
|
using AllBase.Helper;
|
|
using AllBase.Model;
|
|
using AllBase.Model.DBModel;
|
|
using NaiBa.Util.Extension;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
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 TemuKJD.ToolForms;
|
|
using Work;
|
|
using Work._29Tools.BLL;
|
|
|
|
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 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);
|
|
|
|
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)
|
|
{
|
|
if (page >= totalPage)
|
|
{
|
|
break;
|
|
}
|
|
|
|
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()));
|
|
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 += "&erp_shop_id_in=" + shop_id;
|
|
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 jArr = JObject.Parse(html)["data"];
|
|
if (jArr.Count() == 0)
|
|
break;
|
|
|
|
var order_ids = string.Join(",", jArr.Select(a => a["order_id"].ParseToString()));
|
|
|
|
// 读取订单详情
|
|
Thread.Sleep(100);
|
|
var url1 = BaseClass.Build29WxObjString("order/get_erp_order_item_list");
|
|
var data1 = UserLogin.GetSignaturex();
|
|
data1 += "&erp_order_id_in=" + order_ids;
|
|
data1 += "&page_size=" + 2000;
|
|
var html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
html1 = GetHtml.PostUtf8(url1, data1);
|
|
if (string.IsNullOrEmpty(html1) || !html1.Contains("\"code\":200"))
|
|
{
|
|
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "msg"));
|
|
break;
|
|
}
|
|
List<oms_wei_order_item_info> orderItems = new List<oms_wei_order_item_info>();
|
|
try { orderItems = JsonHelper.DeserializeJsonToList<oms_wei_order_item_info>(JObject.Parse(html1)["data"].ParseToString()); } catch { }
|
|
|
|
|
|
// 读取售后单
|
|
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(url, data);
|
|
if (string.IsNullOrEmpty(html2) || !html2.Contains("\"code\":200"))
|
|
{
|
|
BaseMsgWindow.ShowError("订单读取失败 " + 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 { }
|
|
|
|
|
|
// 读取中转仓拍单订单
|
|
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"))
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "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());
|
|
// 直接过滤掉仓库作废单
|
|
//transitOrderList = transitOrderList.Where(t => t.order_void_status != 1).ToList();
|
|
}
|
|
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 html, "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 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 html, "msg"));
|
|
}));
|
|
break;
|
|
}
|
|
List<oms_wei_external_procurement_after_sale_info> pddTransitAfterSales = new List<oms_wei_external_procurement_after_sale_info>();
|
|
try
|
|
{
|
|
pddTransitAfterSales = 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"))
|
|
GetHtml.PostUtf8(urlMap, dataMap);
|
|
if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200"))
|
|
{
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
BaseMsgWindow.ShowError("订单读取失败 " + BaseRegex.GetStringJson(ref html, "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;
|
|
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
order = JsonHelper.DeserializeJsonToObject<oms_wei_order_info>(JsonHelper.SerializeObject(jObj));
|
|
if (order.order_id == "3737596572558051840")
|
|
{
|
|
|
|
}
|
|
}));
|
|
//装载订单商品详情
|
|
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.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.PddBuyerOrders = pddBuyerOrders.Where(po => po.wx_order_id == item.order_id && po.wx_sku_id == item.sku_id).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.SetItemRefund(order.refundItems.ToList());
|
|
}
|
|
|
|
var orderExist = GlobalConfig.lstOrder.FirstOrDefault(o => o.order_id == order.order_id);
|
|
if (orderExist != null)
|
|
GlobalConfig.lstOrder.Remove(orderExist);
|
|
|
|
var nextOrder = GlobalConfig.lstOrder.FirstOrDefault(o => o.create_time < order.create_time);
|
|
if (nextOrder != null)
|
|
{
|
|
GlobalConfig.lstOrder.Insert(GlobalConfig.lstOrder.IndexOf(nextOrder), order);
|
|
}
|
|
else
|
|
{
|
|
GlobalConfig.lstOrder.Add(order);
|
|
}
|
|
if (order.orderItems.Count > 1)
|
|
{
|
|
}
|
|
|
|
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
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
hasReadOrder = true;
|
|
Dispatcher.Invoke(new Action(() =>
|
|
{
|
|
imgLoading.Visibility = Visibility.Collapsed;
|
|
btnSearch.IsEnabled = true;
|
|
}));
|
|
}
|
|
|
|
public void disPlayOrderTabOrderCount()
|
|
{
|
|
var tabItems = this.tabOrderType.Items.Cast<TabItem>();
|
|
var tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待采购"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "待采购")));
|
|
tabItem.Header = "待采购(" + GlobalConfig.lstOrder.Where(r => r.IsWaitBuy).Count() + "|" + filteLstTmp.Where(r => r.IsWaitBuy).Count() + ")";
|
|
}
|
|
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待发货"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "待发货")));
|
|
tabItem.Header = "待发货(" + GlobalConfig.lstOrder.Where(r => r.IsWaitSend).Count() + "|" + filteLstTmp.Where(r => r.IsWaitSend).Count() + ")";
|
|
}
|
|
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("待收货"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "待收货")));
|
|
tabItem.Header = "待收货(" + GlobalConfig.lstOrder.Where(r => r.IsWaitReceive).Count() + "|" + filteLstTmp.Where(r => r.IsWaitReceive).Count() + ")";
|
|
}
|
|
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("退款单"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "退款单")));
|
|
tabItem.Header = "退款单(" + GlobalConfig.lstOrder.Where(r => r.IsRefund).Count() + "|" + filteLstTmp.Where(r => r.IsRefund).Count() + ")";
|
|
}
|
|
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("紧急单"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "紧急单")));
|
|
tabItem.Header = "紧急单(" + GlobalConfig.lstOrder.Where(r => r.IsEmergency).Count() + "|" + filteLstTmp.Where(r => r.IsEmergency).Count() + ")";
|
|
}
|
|
tabItem = tabItems.FirstOrDefault(t => t.Header.ParseToString().StartsWith("全部订单"));
|
|
if (tabItem != null)
|
|
{
|
|
var filteLstTmp = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o, "全部订单")));
|
|
tabItem.Header = "全部订单(" + GlobalConfig.lstOrder.Count() + "|" + filteLstTmp.Count() + ")";
|
|
}
|
|
txtFilterCount.Text = "当前条件共计 " + GlobalConfig.lstFilterOrder.Count() + " 条订单记录";
|
|
}
|
|
|
|
public void FilterOrders()
|
|
{
|
|
try
|
|
{
|
|
if (this.lbxOrder == null)
|
|
return;
|
|
|
|
//foreach (var order in GlobalConfig.lstFilterOrder.ToList())
|
|
//{
|
|
// if (GetOrderIsFilter(order))
|
|
// {
|
|
// GlobalConfig.lstFilterOrder.Remove(order);
|
|
// }
|
|
//}
|
|
//foreach (var order in GlobalConfig.lstOrder.ToList())
|
|
//{
|
|
// FilterOneOrder(order);
|
|
//}
|
|
GlobalConfig.lstFilterOrder = new ObservableCollection<oms_wei_order_info>(GlobalConfig.lstOrder.Where(o => !GetOrderIsFilter(o)));
|
|
this.lbxOrder.ItemsSource = GlobalConfig.lstFilterOrder;
|
|
|
|
//Dispatcher.Invoke(new Action(() => {
|
|
// txtFilterCount.Text = "当前条件共计 " + GlobalConfig.lstFilterOrder.Count().ToString() + " 条订单记录";
|
|
//}));
|
|
disPlayOrderTabOrderCount();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
public void FilterOneOrder(oms_wei_order_info order, bool updateTabCount = false)
|
|
{
|
|
if (!GetOrderIsFilter(order))
|
|
{
|
|
var orderExist = GlobalConfig.lstFilterOrder.FirstOrDefault(o => o.order_id == order.order_id);
|
|
if (orderExist != null)
|
|
GlobalConfig.lstFilterOrder.Remove(orderExist);
|
|
|
|
var 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 (!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.Sum(o => o.sku_cnt) > 1)
|
|
{
|
|
return true;
|
|
}
|
|
if (chkOnlyWarehouseOrder.IsChecked.ParseToBool() && order.status >= 30 && order.orderItems.All(oi => oi.ItemTransitOrderWithVoid == null))
|
|
{
|
|
return true;
|
|
}
|
|
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("待收货") && !order.IsWaitReceive)
|
|
{
|
|
return true;
|
|
}
|
|
if (filterHeadStr.StartsWith("退款单") && !order.IsRefund)
|
|
{
|
|
return true;
|
|
}
|
|
if (filterHeadStr.StartsWith("紧急单"))
|
|
{
|
|
if (!order.IsEmergency)
|
|
return true;
|
|
if (chkWaitOperate.IsChecked == true && order.orderItems.All(oi => !oi.TransitRefundStatusStr.Contains("需手动申请售后")))
|
|
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 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;
|
|
}
|
|
|
|
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) + 20, 6, 0, 0);
|
|
}
|
|
|
|
private void chkSubFilterSonditions_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
FilterOrders();
|
|
}
|
|
|
|
private void chkWaitOperate_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
FilterOrders();
|
|
}
|
|
}
|
|
}
|