diff --git a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml index 8be4995..7a2ca9e 100644 --- a/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml +++ b/29WxOrderWpf/Ctrls/BuyerCtrls/PDDBuyerOrderReadCtrl.xaml @@ -364,6 +364,7 @@ RowHeaderWidth="0" RowHeight="50" SelectionChanged="dgBuyerOrder_SelectionChanged" + SelectionUnit="Cell" VerticalGridLinesBrush="{StaticResource VerticalGridLinesBrush}"> + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrl.xaml.cs new file mode 100644 index 0000000..5a7d45a --- /dev/null +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrl.xaml.cs @@ -0,0 +1,59 @@ +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.Ctrls.OrderCtrls; + +/// +/// OrderTransitListCtrl.xaml 的交互逻辑 +/// +public partial class OrderTransitListCtrl : UserControl +{ + OrderTransitListCtrlViewModel ViewModel; + + public OrderTransitListCtrl(oms_wei_order_item_transit_info transitInfo) + { + InitializeComponent(); + + ViewModel = new OrderTransitListCtrlViewModel(transitInfo); + ViewModel.RequestClose += ViewModel_RequestClose; + + DataContext = ViewModel; + this.lbxTransitList.ItemsSource = ViewModel.TransitInfo.OrderItemTransitDetailList; + } + + private void ViewModel_RequestClose() + { + Window parentWindow = Window.GetWindow(this); + if (this.IsLoaded && parentWindow != null) + parentWindow.Close(); + } + + private void OrderTransitListCtrl_Loaded(object sender, RoutedEventArgs e) + { + Window parentWindow = Window.GetWindow(this); + if (parentWindow != null) + { + parentWindow.Closed += ChangeWaybillView_Closed; + } + ViewModel.Start(); + } + + private void ChangeWaybillView_Closed(object sender, EventArgs e) + { + ViewModel.Stop(); + } + +} diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrlViewModel.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrlViewModel.cs new file mode 100644 index 0000000..a8ff3f7 --- /dev/null +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListCtrlViewModel.cs @@ -0,0 +1,62 @@ +using AllBase.Model.DBModel; +using AllBase.Model.MvvmBaseClasses; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrderWpf.Ctrls.OrderCtrls; + +public class OrderTransitListCtrlViewModel : PropertyNotifyObject +{ + private volatile bool _isWindowLoaded = false; + + public oms_wei_order_item_transit_info TransitInfo + { + get { return this.GetValue(x => x.TransitInfo); } + set { this.SetValue(x => x.TransitInfo, value); } + } + public oms_wei_order_item_info OrderItem + { + get { return this.GetValue(x => x.OrderItem); } + set { this.SetValue(x => x.OrderItem, value); } + } + public string OrderIdStr + { + get { return this.GetValue(x => x.OrderIdStr); } + set { this.SetValue(x => x.OrderIdStr, value); } + } + public string ShopNameStr + { + get { return this.GetValue(x => x.ShopNameStr); } + set { this.SetValue(x => x.ShopNameStr, value); } + } + + + /// 请求关闭窗口 + public event Action RequestClose; + + public OrderTransitListCtrlViewModel(oms_wei_order_item_transit_info transitInfo) + { + TransitInfo = transitInfo; + OrderItem = transitInfo?.OrderItem; + OrderIdStr = OrderItem?.order_id; + ShopNameStr = OrderItem?.ItemOrder?.Shop?.ShopAccount; + } + + /// + /// 窗口加载完成时调用 + /// + public void Start() + { + _isWindowLoaded = true; + } + /// + /// 窗口关闭时调用,停止后台任务 + /// + public void Stop() + { + _isWindowLoaded = false; + } +} diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml new file mode 100644 index 0000000..a878279 --- /dev/null +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml.cs b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml.cs new file mode 100644 index 0000000..0f295f9 --- /dev/null +++ b/29WxOrderWpf/Ctrls/OrderCtrls/OrderTransitListDetailCtrl.xaml.cs @@ -0,0 +1,27 @@ +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.Ctrls.OrderCtrls; + +/// +/// OrderTransitListDetailCtrl.xaml 的交互逻辑 +/// +public partial class OrderTransitListDetailCtrl : UserControl +{ + public OrderTransitListDetailCtrl() + { + InitializeComponent(); + } +} diff --git a/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs b/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs index 4a12d93..70e70e7 100644 --- a/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs +++ b/29WxOrderWpf/Views/ChangeWaybillView.xaml.cs @@ -39,10 +39,15 @@ public partial class ChangeWaybillView : UserControl private void ChangeWaybillView_Loaded(object sender, RoutedEventArgs e) { + Window parentWindow = Window.GetWindow(this); + if (parentWindow != null) + { + parentWindow.Closed += ChangeWaybillView_Closed; + } ViewModel.Start(); } - private void ChangeWaybillView_Closed(object sender, RoutedEventArgs e) + private void ChangeWaybillView_Closed(object sender, EventArgs e) { ViewModel.Stop(); } diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs index 79bb0e1..99aa044 100644 --- a/AllBase/BaseClass.cs +++ b/AllBase/BaseClass.cs @@ -37,7 +37,7 @@ namespace AllBase /// 版本ID /// - public static int VersionCount = 357; + public static int VersionCount = 360; //public static string ServerUrl { get; set; } = "http://1.13.195.131:9000"; public static string ServerUrl 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 4e920a6..aaa9846 100644 --- a/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs +++ b/AllBase/Model/DBModel/oms_wei_external_procurement_log_info.cs @@ -29,8 +29,10 @@ namespace AllBase.Model.DBModel } public void SetOutOrderBuyerStr() { - OutOrderBuyerStr = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == buyer_account)?.buyer_name ?? - GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => b.buyer_id == buyer_account)?.buyer_name ?? buyer_account; + if (!out_order_no.ParseToString().StartsWith("tb_")) + OutOrderBuyerStr = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == buyer_account)?.buyer_name ?? buyer_account; + else + OutOrderBuyerStr = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => b.buyer_id == buyer_account)?.buyer_name ?? buyer_account; } diff --git a/AllBase/Model/DBModel/oms_wei_order_info.cs b/AllBase/Model/DBModel/oms_wei_order_info.cs index 0a56e98..9cfaa74 100644 --- a/AllBase/Model/DBModel/oms_wei_order_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_info.cs @@ -13,6 +13,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows; +using System.Windows.Controls; using System.Windows.Media; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; @@ -896,6 +897,11 @@ namespace AllBase.Model.DBModel public bool GetIsAbnormal() { + if (order_id == "3740040052771291904") + { + + } + // 三退或者两退,为退款完成单 //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 == "退款成功"))) @@ -917,7 +923,7 @@ namespace AllBase.Model.DBModel return true; // 订单无售后或者售后关闭,有未作废的仓库单且仓库单买手信息为退款成功 - if (orderItems.Any(oi => oi.refund_status <= 1 && oi.ItemTransitOrder != null && oi.ItemTransitOrder.refund_status == "买手退款成功")) + if (orderItems.Any(oi => oi.refund_status <= 1 && oi.ItemTransitOrderWithVoid != null && oi.ItemTransitOrderWithVoid.refund_status == "买手退款成功")) 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 01f02e4..a0da648 100644 --- a/AllBase/Model/DBModel/oms_wei_order_item_info.cs +++ b/AllBase/Model/DBModel/oms_wei_order_item_info.cs @@ -1837,17 +1837,22 @@ namespace AllBase.Model.DBModel /// public bool GetIsAbnormalOrderRebuy() { + if (order_id == "3740040052771291904") + { + + } + var order_item = this; // 不是异常单的不可异常重拍 if (order_item?.ItemOrder?.IsAbnormal != true) return false; // 买手未退款的,中转正式取号以后的,不可异常重拍 - if (order_item.ItemTransitOrder?.refund_status != "买手退款成功" || + if (order_item.ItemTransitOrderWithVoid?.refund_status != "买手退款成功" || order_item.WarehouseWaybillStatusStr == "中转已取号" || order_item.WarehouseWaybillStatusStr == "中转已入库" || order_item.WarehouseWaybillStatusStr == "中转已出库") return false; // 已正式取号的,不可异常重拍 - if (order_item.ItemTransitOrder?.pre_allocated_order_no == 1 || order_item.ItemTransitOrder?.pre_allocated_order_no == 3) + if (order_item.ItemTransitOrderWithVoid?.pre_allocated_order_no == 1 || order_item.ItemTransitOrderWithVoid?.pre_allocated_order_no == 3) return false; // 仓库异常的异常单不可异常重拍 List rawMsgKeyWords = new List { "取号异常", "无法调用" }; diff --git a/AllBase/Model/DBModel/oms_wei_order_item_transit_info.cs b/AllBase/Model/DBModel/oms_wei_order_item_transit_info.cs new file mode 100644 index 0000000..6a7ec64 --- /dev/null +++ b/AllBase/Model/DBModel/oms_wei_order_item_transit_info.cs @@ -0,0 +1,235 @@ +using AllBase.Helper; +using AllBase.Model.MvvmBaseClasses; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace AllBase.Model.DBModel; + +public class oms_wei_order_item_transit_info : PropertyNotifyObject +{ + public oms_wei_order_item_info OrderItem + { + get { return this.GetValue(x => x.OrderItem); } + set + { + this.SetValue(x => x.OrderItem, value); + GetOrderItemTransitDetail(); + } + } + + public ObservableCollection OrderItemTransitDetailList + { + get { return this.GetValue(x => x.OrderItemTransitDetailList); } + private set { this.SetValue(x => x.OrderItemTransitDetailList, value); } + } + + void GetOrderItemTransitDetail() + { + if (OrderItem == null || OrderItem.ItemOrder == null) + { + this.OrderItemTransitDetailList = new ObservableCollection(); + return; + } + + List transitDetailList = new List(); + foreach (var transitOrder in OrderItem.ItemTransitOrders ?? new List()) + { + + var transitDetail = new oms_wei_order_item_transit_detail_info() + { + TransitTypeStr = "发货包裹", + + OrderCode = transitOrder.order_code, + SourceCode = transitOrder.random_code, + + WxOrderId = transitOrder.order_no, + WxOrderSkuId = transitOrder.order_sku_id, + WxOrderThumbImg = OrderItem.thumb_img, + WxOrderCreateTime = OrderItem.ItemOrder.CreateDateTime, + + OutOrderId = transitOrder.out_order_no, + OutBuyerName = transitOrder.OutOrderBuyerStr, + + UpperWaybill = (transitOrder.express_1_company + "-" + transitOrder.express_1_waybill).Trim('-'), + DownWaybill = (transitOrder.express_2_company + "-" + transitOrder.express_2_waybill).Trim('-'), + BuyReundStatus = transitOrder.refund_status, + + PickUpTime = transitOrder.pickup_time == DateTime.MinValue ? null : transitOrder.pickup_time, + InboundTime = transitOrder.inbound_time, + OutboundTime = transitOrder.outbound_time, + }; + + if (!transitDetail.OutOrderId.StartsWith("tb_")) + transitDetail.OutBuyerId = GlobalConfig.PDDBuyerLoginList.FirstOrDefault(b => b.buyer_id == transitOrder.buyer_account)?.buyer_id ?? ""; + else + transitDetail.OutBuyerId = GlobalConfig.TaobaoBuyerLoginList.FirstOrDefault(b => b.buyer_id == transitOrder.buyer_account)?.buyer_id ?? ""; + + // 中转仓订单创建状态 0 未使用,1 已创建,2 创建失败,3 处理中(业务方根据此字段处理中转流程) + if (transitOrder.transfer_warehouse_status == 1) + transitDetail.TransitStatus = "已创建"; + else if (transitOrder.transfer_warehouse_status == 2) + transitDetail.TransitStatus = "创建失败"; + else if (transitOrder.transfer_warehouse_status == 3) + transitDetail.TransitStatus = "创建中"; + + // 中转仓入库状态 0: 未入库, 1: 已入库, 2: 已出库, 3: 拦截到仓 + if (transitOrder.warehouse_status == 0) + transitDetail.WarehouseStatus = "已创建"; + else if (transitOrder.warehouse_status == 1) + transitDetail.WarehouseStatus = "已入库"; + else if (transitOrder.warehouse_status == 2) + transitDetail.WarehouseStatus = "已出库"; + else if (transitOrder.warehouse_status == 3) + transitDetail.WarehouseStatus = "已拦截到仓"; + + transitDetailList.Add(transitDetail); + } + + this.OrderItemTransitDetailList = new ObservableCollection(transitDetailList); + } +} + +public class oms_wei_order_item_transit_detail_info : PropertyNotifyObject +{ + /// + /// 仓库类型 发货包裹 退货包裹 + /// + public string TransitTypeStr + { + get { return this.GetValue(x => x.TransitTypeStr); } + set { this.SetValue(x => x.TransitTypeStr, value); } + } + + /// 仓库订单号 + public string OrderCode + { + get { return this.GetValue(x => x.OrderCode); } + set { this.SetValue(x => x.OrderCode, value); } + } + public string SourceCode + { + get { return this.GetValue(x => x.SourceCode); } + set { this.SetValue(x => x.SourceCode, value); } + } + /// 取号时间((中转单)创建时间) + public DateTime? PickUpTime + { + get { return this.GetValue(x => x.PickUpTime); } + set { this.SetValue(x => x.PickUpTime, value); PickUpTimeStr = value == null ? "" : value.Value.ToString("yyyy-MM-dd HH:mm:ss"); } + } + public string PickUpTimeStr + { + get { return this.GetValue(x => x.PickUpTimeStr); } + set { this.SetValue(x => x.PickUpTimeStr, value); } + } + + /// 微信订单号(交易单号) + public string WxOrderId + { + get { return this.GetValue(x => x.WxOrderId); } + set { this.SetValue(x => x.WxOrderId, value); } + } + public string WxOrderSkuId + { + get { return this.GetValue(x => x.WxOrderSkuId); } + set { this.SetValue(x => x.WxOrderSkuId, value); } + } + /// 微信订单创建时间(支付时间) + public DateTime WxOrderCreateTime + { + get { return this.GetValue(x => x.WxOrderCreateTime); } + set { this.SetValue(x => x.WxOrderCreateTime, value); WxOrderCreateTimeStr = value.ToString("yyyy-MM-dd HH:mm:ss"); } + } + public string WxOrderCreateTimeStr + { + get { return this.GetValue(x => x.WxOrderCreateTimeStr); } + set { this.SetValue(x => x.WxOrderCreateTimeStr, value); } + } + public string WxOrderThumbImg + { + get { return this.GetValue(x => x.WxOrderThumbImg); } + set { this.SetValue(x => x.WxOrderThumbImg, value); } + } + + public string OutOrderId + { + get { return this.GetValue(x => x.OutOrderId); } + set { this.SetValue(x => x.OutOrderId, value); } + } + public string OutBuyerId + { + get { return this.GetValue(x => x.OutBuyerId); } + set { this.SetValue(x => x.OutBuyerId, value); } + } + public string OutBuyerName + { + get { return this.GetValue(x => x.OutBuyerName); } + set { this.SetValue(x => x.OutBuyerName, value); } + } + + /// 中转状态 + public string TransitStatus + { + get { return this.GetValue(x => x.TransitStatus); } + set { this.SetValue(x => x.TransitStatus, value); } + } + /// 仓库状态 + public string WarehouseStatus + { + get { return this.GetValue(x => x.WarehouseStatus); } + set { this.SetValue(x => x.WarehouseStatus, value); } + } + /// 买手退货状态 + public string BuyReundStatus + { + get { return this.GetValue(x => x.BuyReundStatus); } + set { this.SetValue(x => x.BuyReundStatus, value); } + } + + public string UpperWaybill + { + get { return this.GetValue(x => x.UpperWaybill); } + set { this.SetValue(x => x.UpperWaybill, value); UpperWaybillVisibility = string.IsNullOrEmpty(value) ? Visibility.Collapsed : Visibility.Visible; } + } + public Visibility UpperWaybillVisibility + { + get { return this.GetValue(x => x.UpperWaybillVisibility); } + private set { this.SetValue(x => x.UpperWaybillVisibility, value); } + } + public string DownWaybill + { + get { return this.GetValue(x => x.DownWaybill); } + set { this.SetValue(x => x.DownWaybill, value); DownWaybillVisibility = string.IsNullOrEmpty(value) ? Visibility.Collapsed : Visibility.Visible; } + } + public Visibility DownWaybillVisibility + { + get { return this.GetValue(x => x.DownWaybillVisibility); } + private set { this.SetValue(x => x.DownWaybillVisibility, value); } + } + + public DateTime? InboundTime + { + get { return this.GetValue(x => x.InboundTime); } + set { this.SetValue(x => x.InboundTime, value); InboundTimeStr = value == null ? "" : value.Value.ToString("yyyy-MM-dd HH:mm:ss"); } + } + public string InboundTimeStr + { + get { return this.GetValue(x => x.InboundTimeStr); } + private set { this.SetValue(x => x.InboundTimeStr, value); } + } + public DateTime? OutboundTime + { + get { return this.GetValue(x => x.OutboundTime); } + set { this.SetValue(x => x.OutboundTime, value); OutboundTimeStr = value == null ? "" : value.Value.ToString("yyyy-MM-dd HH:mm:ss"); } + } + public string OutboundTimeStr + { + get { return this.GetValue(x => x.OutboundTimeStr); } + private set { this.SetValue(x => x.OutboundTimeStr, value); } + } +} diff --git a/AllBase/Model/Result/PddBuyerAfterSaleLiteInfo.cs b/AllBase/Model/Result/PddBuyerAfterSaleLiteInfo.cs index 91bbbfe..858dc98 100644 --- a/AllBase/Model/Result/PddBuyerAfterSaleLiteInfo.cs +++ b/AllBase/Model/Result/PddBuyerAfterSaleLiteInfo.cs @@ -267,6 +267,7 @@ namespace AllBase.Model.Result var detailPage = listItemExtraVO.navToDetailPageUrl; return BaseRegex.GetStringQuery(ref detailPage, "order_sn"); } + set { } } public int? tbOrderDate { get; set; } public int? orderDate { get { return tbOrderDate ?? orderSn.Split('-').FirstOrDefault().ParseToInt(); } }