diff --git a/BBWY.Client/APIServices/ServiceOrderService.cs b/BBWY.Client/APIServices/ServiceOrderService.cs index b4436205..e4987264 100644 --- a/BBWY.Client/APIServices/ServiceOrderService.cs +++ b/BBWY.Client/APIServices/ServiceOrderService.cs @@ -39,6 +39,37 @@ namespace BBWY.Client.APIServices endDate }, null, HttpMethod.Post); } - } + public ApiResponse EditServiceOrder(long servicePId, + string orderId, + ServiceResult? serviceResult, + decimal? sdRefundFreight, + ReturnDirection? returnDirection, + string renewalOrderId, + decimal? reissueAfterSaleAmount, + string returnCheckRemark, + StorageType? renewalType, + string renewalPurchaseOrderId, + Platform? renewalPurchasePlatform, + decimal? reissueFreight, + decimal? reissueProductAmount) + { + return SendRequest(globalContext.BBYWApiHost, "Api/ServiceOrder/EditServiceOrder", new + { + servicePId, + orderId, + serviceResult, + sdRefundFreight, + returnDirection, + renewalOrderId, + reissueAfterSaleAmount, + returnCheckRemark, + renewalType, + renewalPurchaseOrderId, + renewalPurchasePlatform, + reissueFreight, + reissueProductAmount + }, null, HttpMethod.Post); + } + } } \ No newline at end of file diff --git a/BBWY.Client/App.xaml.cs b/BBWY.Client/App.xaml.cs index e595d3ff..5cea52bc 100644 --- a/BBWY.Client/App.xaml.cs +++ b/BBWY.Client/App.xaml.cs @@ -119,6 +119,7 @@ namespace BBWY.Client serviceCollection.AddMapper(new MappingProfile()); serviceCollection.AddTransient<_1688PreviewPurchaseViewModel>(); + serviceCollection.AddTransient(); #region 注册拳探SDK相关类 serviceCollection.AddSingleton(); diff --git a/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs b/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs index 50837c5d..19dd900d 100644 --- a/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs +++ b/BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs @@ -238,6 +238,31 @@ namespace BBWY.Client.Models /// public DateTime? QualityInspectionInStoreTime { get; set; } + /// + /// 换新单号 + /// + public string RenewalOrderId { get; set; } + + /// + /// 退货检查备注 + /// + public string ReturnCheckRemark { get; set; } + + /// + /// 线下换新方式 + /// + public StorageType? RenewalType { get; set; } + + /// + /// 线下换新采购单号 + /// + public string RenewalPurchaseOrderId { get; set; } + + /// + /// 线下换新采购平台 + /// + public Platform? RenewalPurchasePlatform { get; set; } + #region Sku public string Logo { get; set; } @@ -251,6 +276,8 @@ namespace BBWY.Client.Models public decimal Price { get; set; } #endregion + + public StorageType? StorageType { get; set; } } public class ServiceOrderResponse diff --git a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs index 1a418503..541b0364 100644 --- a/BBWY.Client/ViewModels/Order/OrderListViewModel.cs +++ b/BBWY.Client/ViewModels/Order/OrderListViewModel.cs @@ -47,7 +47,7 @@ namespace BBWY.Client.ViewModels private bool onlyUnhandle; private Random random; public GlobalContext globalContext { get; set; } - private bool? includeAfterOrder; + //private bool? includeAfterOrder; private bool includeExceptionOrder; //private decimal currentConditionsTotalProfit; private string searchServiceId; @@ -90,7 +90,7 @@ namespace BBWY.Client.ViewModels public bool ExcludeSD { get => excludeSD; set { Set(ref excludeSD, value); } } public bool ExcludeCanceled { get => excludeCanceled; set { Set(ref excludeCanceled, value); } } - public bool? IncludeAfterOrder { get => includeAfterOrder; set { Set(ref includeAfterOrder, value); } } + //public bool? IncludeAfterOrder { get => includeAfterOrder; set { Set(ref includeAfterOrder, value); } } public string SearchServiceId { get => searchServiceId; set { Set(ref searchServiceId, value); } } /// @@ -128,13 +128,13 @@ namespace BBWY.Client.ViewModels public ICommand EditVenderRemarkCommand { get; set; } - public ICommand SetIncludeAfterOrderCommand { get; set; } + //public ICommand SetIncludeAfterOrderCommand { get; set; } - public ICommand FindAfterSaleOrderCommand { get; set; } + //public ICommand FindAfterSaleOrderCommand { get; set; } - public ICommand EditAfterSaleOrderCommand { get; set; } + //public ICommand EditAfterSaleOrderCommand { get; set; } - public ICommand EditAfterSaleOrderRefundPurchaseAmountCommand { get; set; } + //public ICommand EditAfterSaleOrderRefundPurchaseAmountCommand { get; set; } public ICommand SetIncludeExceptionOrderCommand { get; set; } @@ -227,11 +227,11 @@ namespace BBWY.Client.ViewModels OutStockCommand = new RelayCommand((o) => OutStock(o)); EditVenderRemarkCommand = new RelayCommand(EditVenderRemark); ExportCommand = new RelayCommand(Export); - SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder); + //SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder); SetIncludeExceptionOrderCommand = new RelayCommand(SetIncludeExceptionOrder); - EditAfterSaleOrderCommand = new RelayCommand(EditAfterSaleOrder); - EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand(EditAfterSaleOrderRefundPurchaseAmount); - FindAfterSaleOrderCommand = new RelayCommand(FindAfterSaleOrder); + //EditAfterSaleOrderCommand = new RelayCommand(EditAfterSaleOrder); + //EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand(EditAfterSaleOrderRefundPurchaseAmount); + //FindAfterSaleOrderCommand = new RelayCommand(FindAfterSaleOrder); OpenSkuDetailCommand = new RelayCommand(OpenSkuDetail); SearchOrderCommand.Execute(null); } @@ -254,7 +254,7 @@ namespace BBWY.Client.ViewModels StartDate = DateTime.Now.Date; } PageIndex = 1; - IncludeAfterOrder = null; + //IncludeAfterOrder = null; IncludeExceptionOrder = false; } @@ -300,23 +300,23 @@ namespace BBWY.Client.ViewModels Task.Factory.StartNew(() => LoadOrder(1)); } - public void SetIncludeAfterOrder() - { - InitSearchParam(); - IncludeAfterOrder = true; - Task.Factory.StartNew(() => LoadOrder(1)); - } - - public void SetIncludeAfterOrder(string orderId, string skuId, DateTime startDate, DateTime endDate) - { - InitSearchParam(); - SearchOrderId = orderId; - SearchSku = skuId; - StartDate = startDate; - EndDate = endDate; - IncludeAfterOrder = true; - Task.Factory.StartNew(() => LoadOrder(1)); - } + //public void SetIncludeAfterOrder() + //{ + // InitSearchParam(); + // IncludeAfterOrder = true; + // Task.Factory.StartNew(() => LoadOrder(1)); + //} + + //public void SetIncludeAfterOrder(string orderId, string skuId, DateTime startDate, DateTime endDate) + //{ + // InitSearchParam(); + // SearchOrderId = orderId; + // SearchSku = skuId; + // StartDate = startDate; + // EndDate = endDate; + // IncludeAfterOrder = true; + // Task.Factory.StartNew(() => LoadOrder(1)); + //} public void RefreshOrder(string orderId, bool isRemoveOrder = false) { @@ -389,10 +389,10 @@ namespace BBWY.Client.ViewModels /// private void LoadOrder(int pageIndex) { - if (IncludeAfterOrder == true) - LoadAfterSaleOrder(pageIndex); - else - LoadNormalOrder(pageIndex); + //if (IncludeAfterOrder == true) + // LoadAfterSaleOrder(pageIndex); + //else + LoadNormalOrder(pageIndex); if (!IsSDGroup) { @@ -401,7 +401,7 @@ namespace BBWY.Client.ViewModels } else { - Task.Factory.StartNew(() => LoadSDGroupPersonStatistics()); + Task.Factory.StartNew(() => LoadSDGroupPersonStatistics()); } } @@ -437,7 +437,7 @@ namespace BBWY.Client.ViewModels var orderList = response.Data.Items.Map>(); App.Current.Dispatcher.Invoke(() => { - + OrderList.Clear(); foreach (var order in orderList) { @@ -861,22 +861,22 @@ namespace BBWY.Client.ViewModels var manualEditCostOrderSkuList = manualCalculationCost.ManualEditCostOrderSkuList; IsLoading = true; - Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId, - isSetStorageType, - storageType, - manualEditCostOrderSkuList, - globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r => - { - var response = r.Result; - if (!response.Success) - { - IsLoading = false; - App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "手动计算成本")); - return; - } - //LoadOrder(PageIndex); //手动计算成功刷新订单列表 - RefreshOrder(orderId, isSetStorageType); - }); + Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId, + isSetStorageType, + storageType, + manualEditCostOrderSkuList, + globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r => + { + var response = r.Result; + if (!response.Success) + { + IsLoading = false; + App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "手动计算成本")); + return; + } + //LoadOrder(PageIndex); //手动计算成功刷新订单列表 + RefreshOrder(orderId, isSetStorageType); + }); } private void OutStock(Order o) @@ -919,15 +919,15 @@ namespace BBWY.Client.ViewModels private void SyncOrder() { IsLoading = true; - Task.Factory.StartNew(() => orderService.SyncOrder(globalContext.User.Shop.ShopId, StartDate, EndDate)).ContinueWith(r => - { - IsLoading = false; - var response = r.Result; - if (response.Success) - App.Current.Dispatcher.Invoke(() => MessageBox.Show("同步任务创建成功,该任务会执行一段时间,请稍后查询订单列表观察同步结果", "同步订单")); - else - App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "同步订单")); - }); + Task.Factory.StartNew(() => orderService.SyncOrder(globalContext.User.Shop.ShopId, StartDate, EndDate)).ContinueWith(r => + { + IsLoading = false; + var response = r.Result; + if (response.Success) + App.Current.Dispatcher.Invoke(() => MessageBox.Show("同步任务创建成功,该任务会执行一段时间,请稍后查询订单列表观察同步结果", "同步订单")); + else + App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "同步订单")); + }); } private void EditVenderRemark(Order order) @@ -1022,84 +1022,84 @@ namespace BBWY.Client.ViewModels }); } - private void EditAfterSaleOrder(AfterSaleOrder afterSaleOrder) - { - var w = new EditAfterSaleOrderSku(afterSaleOrder); - w.Closed += EditAfterSaleOrderSku_Closed; - w.ShowDialog(); - } - - private void EditAfterSaleOrderSku_Closed(object sender, EventArgs e) - { - var w = sender as EditAfterSaleOrderSku; - if (w.DialogResult != true) - return; - - var afterSaleOrder = w.SaleOrder; - IsLoading = true; - Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrder(afterSaleOrder.Id, - afterSaleOrder.OrderId, - afterSaleOrder.ProductResult.Value, - afterSaleOrder.ServiceResult.Value, - afterSaleOrder.ProductHealth.Value, - afterSaleOrder.ReissueAfterSaleAmount, - afterSaleOrder.ReissueFreight, - afterSaleOrder.ReissueProductAmount, - afterSaleOrder.SDRefundFreight)).ContinueWith(t => - { - var response = t.Result; - if (!response.Success) - { - IsLoading = false; - App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后")); - return; - } - RefreshAfterOrder(afterSaleOrder.Id); - }); - } - - private void EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder) - { - var w = new EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder); - w.Closed += EditAfterSaleOrderRefundPurchaseAmount_Closed; - w.ShowDialog(); - } - - private void EditAfterSaleOrderRefundPurchaseAmount_Closed(object sender, EventArgs e) - { - var w = sender as EditAfterSaleOrderRefundPurchaseAmount; - if (w.DialogResult != true) - return; - - var afterSaleOrder = w.SaleOrder; - IsLoading = true; - Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder.Id, - afterSaleOrder.OrderId, - afterSaleOrder.RefundPurchaseAmount.Value, - afterSaleOrder.RefundMerchantOrderNo, - afterSaleOrder.RefundAlipayOrderNo)) - .ContinueWith(t => - { - var response = t.Result; - if (!response.Success) - { - IsLoading = false; - App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改采购退款")); - return; - } - RefreshAfterOrder(afterSaleOrder.Id); - }); - } - - private void FindAfterSaleOrder(object param) - { - var paramList = (object[])param; - var orderId = paramList[0].ToString(); - var skuId = paramList[1].ToString(); - var startDate = DateTime.Parse(paramList[2].ToString()).Date; - var endDate = DateTime.Now.Date; - SetIncludeAfterOrder(orderId, skuId, startDate, endDate); - } + //private void EditAfterSaleOrder(AfterSaleOrder afterSaleOrder) + //{ + // var w = new EditAfterSaleOrderSku(afterSaleOrder); + // w.Closed += EditAfterSaleOrderSku_Closed; + // w.ShowDialog(); + //} + + //private void EditAfterSaleOrderSku_Closed(object sender, EventArgs e) + //{ + // var w = sender as EditAfterSaleOrderSku; + // if (w.DialogResult != true) + // return; + // + // var afterSaleOrder = w.SaleOrder; + // IsLoading = true; + // Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrder(afterSaleOrder.Id, + // afterSaleOrder.OrderId, + // afterSaleOrder.ProductResult.Value, + // afterSaleOrder.ServiceResult.Value, + // afterSaleOrder.ProductHealth.Value, + // afterSaleOrder.ReissueAfterSaleAmount, + // afterSaleOrder.ReissueFreight, + // afterSaleOrder.ReissueProductAmount, + // afterSaleOrder.SDRefundFreight)).ContinueWith(t => + // { + // var response = t.Result; + // if (!response.Success) + // { + // IsLoading = false; + // App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后")); + // return; + // } + // RefreshAfterOrder(afterSaleOrder.Id); + // }); + //} + + //private void EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder) + //{ + // var w = new EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder); + // w.Closed += EditAfterSaleOrderRefundPurchaseAmount_Closed; + // w.ShowDialog(); + //} + + //private void EditAfterSaleOrderRefundPurchaseAmount_Closed(object sender, EventArgs e) + //{ + // var w = sender as EditAfterSaleOrderRefundPurchaseAmount; + // if (w.DialogResult != true) + // return; + // + // var afterSaleOrder = w.SaleOrder; + // IsLoading = true; + // Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder.Id, + // afterSaleOrder.OrderId, + // afterSaleOrder.RefundPurchaseAmount.Value, + // afterSaleOrder.RefundMerchantOrderNo, + // afterSaleOrder.RefundAlipayOrderNo)) + // .ContinueWith(t => + // { + // var response = t.Result; + // if (!response.Success) + // { + // IsLoading = false; + // App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改采购退款")); + // return; + // } + // RefreshAfterOrder(afterSaleOrder.Id); + // }); + //} + + //private void FindAfterSaleOrder(object param) + //{ + // var paramList = (object[])param; + // var orderId = paramList[0].ToString(); + // var skuId = paramList[1].ToString(); + // var startDate = DateTime.Parse(paramList[2].ToString()).Date; + // var endDate = DateTime.Now.Date; + // SetIncludeAfterOrder(orderId, skuId, startDate, endDate); + //} private void OpenSkuDetail(object param) { diff --git a/BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs b/BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs new file mode 100644 index 00000000..4fcbee5f --- /dev/null +++ b/BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs @@ -0,0 +1,116 @@ +using BBWY.Client.APIServices; +using BBWY.Client.Models; +using GalaSoft.MvvmLight.Command; +using HandyControl.Controls; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace BBWY.Client.ViewModels +{ + public class EditServiceOrderViewModel : BaseVM + { + + private ServiceOrderService serviceOrderService; + /// + /// 主键Id + /// + private long servicePId; + private string orderId; + private ServiceResult? serviceResult; + private decimal? sdRefundFreight; + private ReturnDirection? returnDirection; + private string renewalOrderId; + private decimal? reissueAfterSaleAmount; + private string returnCheckRemark; + private StorageType? renewalType; + private string renewalPurchaseOrderId; + private Platform? renewalPurchasePlatform; + private decimal? reissueFreight; + private decimal? reissueProductAmount; + private bool isLoading; + + + public ServiceResult? ServiceResult { get => serviceResult; set { Set(ref serviceResult, value); } } + public decimal? SDRefundFreight { get => sdRefundFreight; set { Set(ref sdRefundFreight, value); } } + public ReturnDirection? ReturnDirection { get => returnDirection; set { Set(ref returnDirection, value); } } + public string RenewalOrderId { get => renewalOrderId; set { Set(ref renewalOrderId, value); } } + + /// + /// 售后补发成本 + /// + public decimal? ReissueAfterSaleAmount { get => reissueAfterSaleAmount; set { Set(ref reissueAfterSaleAmount, value); } } + + /// + /// 退货检查备注 + /// + public string ReturnCheckRemark { get => returnCheckRemark; set { Set(ref returnCheckRemark, value); } } + + public StorageType? RenewalType { get => renewalType; set { Set(ref renewalType, value); } } + + public string RenewalPurchaseOrderId { get => renewalPurchaseOrderId; set { Set(ref renewalPurchaseOrderId, value); } } + + public Platform? RenewalPurchasePlatform { get => renewalPurchasePlatform; set { Set(ref renewalPurchasePlatform, value); } } + + public ICommand SaveCommand { get; set; } + + public decimal? ReissueFreight { get => reissueFreight; set { Set(ref reissueFreight, value); } } + + public decimal? ReissueProductAmount { get => reissueProductAmount; set { Set(ref reissueProductAmount, value); } } + + public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } } + + public EditServiceOrderViewModel(ServiceOrderService serviceOrderService) + { + this.serviceOrderService = serviceOrderService; + SaveCommand = new RelayCommand(Save); + } + + public void SetData(ServiceOrder serviceOrder) + { + this.servicePId = serviceOrder.Id; + this.orderId = serviceOrder.OrderId; + this.ServiceResult = serviceOrder.ServiceResult; + this.SDRefundFreight = serviceOrder.SDRefundFreight; + this.ReturnDirection = serviceOrder.ReturnDirection; + this.RenewalOrderId = serviceOrder.RenewalOrderId; + this.ReissueAfterSaleAmount = serviceOrder.ReissueAfterSaleAmount; + this.ReturnCheckRemark = serviceOrder.ReturnCheckRemark; + this.RenewalType = serviceOrder.RenewalType; + this.RenewalPurchaseOrderId = serviceOrder.RenewalPurchaseOrderId; + this.RenewalPurchasePlatform = serviceOrder.RenewalPurchasePlatform; + this.ReissueFreight = serviceOrder.ReissueFreight; + this.ReissueProductAmount = serviceOrder.ReissueProductAmount; + } + + private void Save() + { + if (IsLoading) + return; + IsLoading = true; + Task.Factory.StartNew(() => serviceOrderService.EditServiceOrder(servicePId, + orderId, + ServiceResult, + SDRefundFreight, + ReturnDirection, + RenewalOrderId, + ReissueAfterSaleAmount, + ReturnCheckRemark, + RenewalType, + RenewalPurchaseOrderId, + RenewalPurchasePlatform, + ReissueFreight, + ReissueProductAmount)).ContinueWith(t => + { + IsLoading = false; + var r = t.Result; + if (!r.Success) + { + App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "提示")); + return; + } + //closeEditServiceOrder + GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(true, "closeEditServiceOrder"); + }); + } + } +} diff --git a/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs b/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs index 875a298a..bfab5935 100644 --- a/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs +++ b/BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs @@ -1,6 +1,7 @@ using BBWY.Client.APIServices; using BBWY.Client.Helpers; using BBWY.Client.Models; +using BBWY.Client.Views.ServiceOrder; using BBWY.Common.Extensions; using BBWY.Common.Http; using BBWY.Common.Models; @@ -57,6 +58,8 @@ namespace BBWY.Client.ViewModels public ICommand PreviewImgCommand { get; set; } + public ICommand EditServiceOrderCommand { get; set; } + public IList ServiceOrderList { get; set; } public long ServiceOrderCount { get => serviceOrderCount; set { Set(ref serviceOrderCount, value); } } @@ -91,6 +94,7 @@ namespace BBWY.Client.ViewModels NavigateToDetailCommand = new RelayCommand(NavigateToDetail); OnPageIndexChangedCommand = new RelayCommand(OnPageIndexChanged); PreviewImgCommand = new RelayCommand(PreviewImg); + EditServiceOrderCommand = new RelayCommand(OpenEditServiceOrder); ServiceOrderList = new ObservableCollection() { new ServiceOrder(), new ServiceOrder(), new ServiceOrder() }; PageSize = 10; GlobalContext = globalContext; @@ -159,10 +163,9 @@ namespace BBWY.Client.ViewModels { s.ProductPackage = ProductPackage.新; s.ImageName = "20230317071208762563,8d58b491-7859-4187-9f43-4fd177a0f25f,b0df0763-9cf4-40ca-a1fc-57695e4b8d33"; } - - s.Init(); #endregion + s.Init(); ServiceOrderList.Add(s); } }); @@ -206,7 +209,7 @@ namespace BBWY.Client.ViewModels return; } CallWindowsPhoto(localPath); - }; + }; Task.Factory.StartNew(() => downloader.DownloadFile(fullUrl, Path.GetTempPath(), fileName, null)); } else @@ -241,5 +244,43 @@ namespace BBWY.Client.ViewModels App.Current.Dispatcher.Invoke(() => MessageBox.Show($"打开照片查看器失败 {ex.Message}")); } } + + private void OpenEditServiceOrder(ServiceOrder serviceOrder) + { + var w = new EditServiceOrder(serviceOrder); + var r = w.ShowDialog(); + if (r == true) + { + IsLoading = true; + Task.Factory.StartNew(() => RefreshServiceOrder(serviceOrder)); + } + } + + private void RefreshServiceOrder(long servicePId) + { + var order = ServiceOrderList.FirstOrDefault(s => s.Id == servicePId); + RefreshServiceOrder(order); + } + + private void RefreshServiceOrder(ServiceOrder serviceOrder) + { + var serviceOrderResponse = serviceOrderService.GetList(string.Empty, string.Empty, string.Empty, serviceOrder.ServiceId, serviceOrder.ShopId, null, null, 1, 1, null, null); + IsLoading = false; + if (!serviceOrderResponse.Success) + { + Application.Current.Dispatcher.Invoke(() => MessageBox.Show(serviceOrderResponse.Msg, "刷新服务单")); + return; + } + + var newServiceOrder = serviceOrderResponse.Data.Items.FirstOrDefault().Map(); + newServiceOrder.Init(); + + Application.Current.Dispatcher.Invoke(() => + { + var orderIndex = ServiceOrderList.IndexOf(serviceOrder); + ServiceOrderList.Remove(serviceOrder); + ServiceOrderList.Insert(orderIndex, newServiceOrder); + }); + } } } diff --git a/BBWY.Client/ViewModels/ViewModelLocator.cs b/BBWY.Client/ViewModels/ViewModelLocator.cs index 39b69427..daf28eb1 100644 --- a/BBWY.Client/ViewModels/ViewModelLocator.cs +++ b/BBWY.Client/ViewModels/ViewModelLocator.cs @@ -229,5 +229,14 @@ namespace BBWY.Client.ViewModels return s.ServiceProvider.GetRequiredService(); } } + + public EditServiceOrderViewModel EditServiceOrder + { + get + { + using var s = sp.CreateScope(); + return s.ServiceProvider.GetRequiredService(); + } + } } } diff --git a/BBWY.Client/Views/Order/OrderList.xaml b/BBWY.Client/Views/Order/OrderList.xaml index e462e3ec..a1392a7e 100644 --- a/BBWY.Client/Views/Order/OrderList.xaml +++ b/BBWY.Client/Views/Order/OrderList.xaml @@ -86,10 +86,10 @@ - - + + + ConverterParameter=";false:&:#8080FF:#F2F2F2:6"> - + ConverterParameter=";false:&:White:#4A4A4A:6"> - @@ -216,7 +214,7 @@ - - + --> @@ -400,18 +398,18 @@ - + - + + + - @@ -598,7 +596,7 @@ - + --> + --> + --> + --> scrollviewer_OrderList.ScrollToTop()); }); - Messenger.Default.Register(this, "AfterSaleOrderList_ScrollToTop", (x) => - { - if (scrollveewer_AfterSaleOrderList == null) - scrollveewer_AfterSaleOrderList = listbox_afterSaleOrder.FindFirstVisualChild(); - scrollviewer_OrderList.Dispatcher.Invoke(() => scrollveewer_AfterSaleOrderList.ScrollToTop()); - }); + //Messenger.Default.Register(this, "AfterSaleOrderList_ScrollToTop", (x) => + //{ + // if (scrollveewer_AfterSaleOrderList == null) + // scrollveewer_AfterSaleOrderList = listbox_afterSaleOrder.FindFirstVisualChild(); + // scrollviewer_OrderList.Dispatcher.Invoke(() => scrollveewer_AfterSaleOrderList.ScrollToTop()); + //}); } private void OrderList_Unloaded(object sender, System.Windows.RoutedEventArgs e) diff --git a/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml b/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml new file mode 100644 index 00000000..92078f87 --- /dev/null +++ b/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs b/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs new file mode 100644 index 00000000..41f3c1ef --- /dev/null +++ b/BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs @@ -0,0 +1,28 @@ +using BBWY.Client.ViewModels; +using BBWY.Controls; + +namespace BBWY.Client.Views.ServiceOrder +{ + /// + /// EditServiceOrder.xaml 的交互逻辑 + /// + public partial class EditServiceOrder : BWindow + { + public EditServiceOrder(Models.ServiceOrder serviceOrder) + { + InitializeComponent(); + (this.DataContext as EditServiceOrderViewModel).SetData(serviceOrder); + GalaSoft.MvvmLight.Messaging.Messenger.Default.Register(this, "closeEditServiceOrder", (r) => + { + if (r) + { + this.Dispatcher.Invoke(() => + { + this.DialogResult = true; + this.Close(); + }); + } + }); + } + } +} diff --git a/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml b/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml index c99e8315..961ad6ec 100644 --- a/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml +++ b/BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml @@ -236,7 +236,7 @@ - + - @@ -397,22 +397,22 @@ + Visibility="{Binding RenewalPurchaseOrderId,ConverterParameter=#null:Collapsed:Visible,Converter={StaticResource objConverter}}"> - + - + CommandParameter="{Binding RenewalPurchaseOrderId}" Margin="3,0,0,0"/> - + @@ -421,6 +421,14 @@ + + diff --git a/BBWY.Server.API/Controllers/ServiceOrderController.cs b/BBWY.Server.API/Controllers/ServiceOrderController.cs index c1899794..70816bad 100644 --- a/BBWY.Server.API/Controllers/ServiceOrderController.cs +++ b/BBWY.Server.API/Controllers/ServiceOrderController.cs @@ -24,5 +24,15 @@ namespace BBWY.Server.API.Controllers { return serviceOrderBusiness.GetList(request); } + + /// + /// 修改服务单 + /// + /// + [HttpPost] + public void EditServiceOrder([FromBody] EditQueryServiceOrderRequest request) + { + serviceOrderBusiness.EditServiceOrder(request); + } } } diff --git a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs index b416ff02..55518038 100644 --- a/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs +++ b/BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs @@ -152,7 +152,8 @@ namespace BBWY.Server.Business if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.维修 || dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发 || dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.线下换新) - { if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发) + { + if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发) dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.客户无退货; dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount; diff --git a/BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs b/BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs index 3030977d..1d96f535 100644 --- a/BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs +++ b/BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs @@ -12,24 +12,27 @@ namespace BBWY.Server.Business { public ServiceOrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { + } public ServiceOrderResponse GetList(ClientQueryServiceOrderRequest request) { - var list = fsql.Select().InnerJoin((s, osku) => s.OrderId == osku.OrderId && s.SkuId == osku.SkuId) - .Where((s, osku) => s.ShopId == request.ShopId) - .WhereIf(!string.IsNullOrEmpty(request.Sku), (s, osku) => s.SkuId == request.Sku) - .WhereIf(!string.IsNullOrEmpty(request.Spu), (s, osku) => s.ProductId == request.Spu) - .WhereIf(!string.IsNullOrEmpty(request.OrderId), (s, osku) => s.OrderId == request.OrderId) - .WhereIf(!string.IsNullOrEmpty(request.ServiceId), (s, osku) => s.ServiceId == request.ServiceId) - .WhereIf(request.ServiceOrderState != null, (s, osku) => s.Status == request.ServiceOrderState) - .WhereIf(request.ReturnDirection != null, (s, osku) => s.ReturnDirection == request.ReturnDirection) - .WhereIf(request.StartDate != null, (s, osku) => s.ApplyTime >= request.StartDate) - .WhereIf(request.EndDate != null, (s, osku) => s.ApplyTime <= request.EndDate) - .OrderByDescending((s, osku) => s.ApplyTime) + var list = fsql.Select() + .InnerJoin((s, o, osku) => s.OrderId == o.Id) + .InnerJoin((s, o, osku) => s.OrderId == osku.OrderId && s.SkuId == osku.SkuId) + .Where((s, o, osku) => s.ShopId == request.ShopId) + .WhereIf(!string.IsNullOrEmpty(request.Sku), (s, o, osku) => s.SkuId == request.Sku) + .WhereIf(!string.IsNullOrEmpty(request.Spu), (s, o, osku) => s.ProductId == request.Spu) + .WhereIf(!string.IsNullOrEmpty(request.OrderId), (s, o, osku) => s.OrderId == request.OrderId) + .WhereIf(!string.IsNullOrEmpty(request.ServiceId), (s, o, osku) => s.ServiceId == request.ServiceId) + .WhereIf(request.ServiceOrderState != null, (s, o, osku) => s.Status == request.ServiceOrderState) + .WhereIf(request.ReturnDirection != null, (s, o, osku) => s.ReturnDirection == request.ReturnDirection) + .WhereIf(request.StartDate != null, (s, o, osku) => s.ApplyTime >= request.StartDate) + .WhereIf(request.EndDate != null, (s, o, osku) => s.ApplyTime <= request.EndDate) + .OrderByDescending((s, o, osku) => s.ApplyTime) .Count(out var total) .Page(request.PageIndex, request.PageSize) - .ToList((s, osku) => new ServiceOrderItemResponse + .ToList((s, o, osku) => new ServiceOrderItemResponse { Id = s.Id, ApplyTime = s.ApplyTime, @@ -50,6 +53,8 @@ namespace BBWY.Server.Business Status = s.Status, ServiceId = s.ServiceId, ShopId = s.ShopId, + RenewalOrderId = s.RenewalOrderId, + ReturnCheckRemark = s.ReturnCheckRemark, Title = osku.Title, ItemTotal = osku.ItemTotal.Value, @@ -60,7 +65,9 @@ namespace BBWY.Server.Business ServiceOrderRemark = s.ServiceOrderRemark, StatusUpdateTime = s.StatusUpdateTime, PurchaseOrderId = s.PurchaseOrderId, - PurchasePlatform = s.PurchasePlatform + PurchasePlatform = s.PurchasePlatform, + + StorageType = o.StorageType }); return new ServiceOrderResponse() { @@ -68,5 +75,26 @@ namespace BBWY.Server.Business Items = list }; } + + public void EditServiceOrder(EditQueryServiceOrderRequest request) + { + + + fsql.Transaction(() => + { + fsql.Update(request.ServicePId).Set(s => s.ServiceResult, request.ServiceResult) + .Set(s => s.SDRefundFreight, request.SDRefundFreight) + .Set(s => s.ReturnDirection, request.ReturnDirection) + .Set(s => s.RenewalOrderId, request.RenewalOrderId) + .Set(s => s.ReissueAfterSaleAmount, request.ReissueAfterSaleAmount) + .Set(s => s.ReturnCheckRemark, request.ReturnCheckRemark) + .Set(s => s.RenewalType, request.RenewalType) + .Set(s => s.RenewalPurchaseOrderId, request.RenewalPurchaseOrderId) + .Set(s => s.RenewalPurchasePlatform, request.RenewalPurchasePlatform) + .Set(s => s.ReissueFreight, request.ReissueFreight) + .Set(s => s.ReissueProductAmount, request.ReissueProductAmount) + .ExecuteAffrows(); + }); + } } } diff --git a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs index 23e81a4a..d43714d0 100644 --- a/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs @@ -514,15 +514,24 @@ huitongkuaidi 百世快递 if (expressOrder == null) throw new Exception($"快递单号{waybillNo} 未找到对应的快递单"); - if (expressOrder.TransportStatus == Enums.TransportState.已入库) //已入库 - return; - IUpdate updateExpressOrder = null; - List> updateServiceOrderList = new List>(); + DateTime? signTime = null; + if (expressOrder.TransportStatus == Enums.TransportState.已入库) + { + if (kuaiDi100PushStateList_qianshou.Contains(state) && expressOrder.SignTime == null) + { + signTime = GetSignTime(jobject); + fsql.Update(expressOrder.Id).Set(e => e.SignTime, signTime) + .Set(e => e.UpdateTime, DateTime.Now) + .ExecuteAffrows(); + } + return; + } var isUpdate = false; Enums.TransportState? newStatus = null; - DateTime? signTime = null; + IUpdate updateExpressOrder = null; + List> updateServiceOrderList = new List>(); if (kuaiDi100PushStateList_zaitu.Contains(state) || kuaiDi100PushStateList_lanshou.Contains(state)) { @@ -539,10 +548,7 @@ huitongkuaidi 百世快递 { isUpdate = true; newStatus = Enums.TransportState.待质检; - - var data = jobject["lastResult"]["data"].Children().FirstOrDefault(d => d.Value("statusCode") == 3); - if (data != null) - signTime = DateTime.Parse(data.Value("ftime")); + signTime = GetSignTime(jobject); } } else if (kuaiDi100PushStateList_paijian.Contains(state)) @@ -573,5 +579,14 @@ huitongkuaidi 百世快递 }); } } + + public DateTime? GetSignTime(JObject jobject) + { + DateTime? signTime = null; + var data = jobject["lastResult"]["data"].Children().FirstOrDefault(d => kuaiDi100PushStateList_qianshou.Contains(d.Value("statusCode"))); + if (data != null) + signTime = DateTime.Parse(data.Value("ftime")); + return signTime; + } } } diff --git a/BBWY.Server.Model/Db/Order/Serviceorder.cs b/BBWY.Server.Model/Db/Order/Serviceorder.cs index d3136bc7..97dc72bd 100644 --- a/BBWY.Server.Model/Db/Order/Serviceorder.cs +++ b/BBWY.Server.Model/Db/Order/Serviceorder.cs @@ -283,6 +283,36 @@ namespace BBWY.Server.Model.Db /// [Column(DbType = "datetime")] public DateTime? QualityInspectionInStoreTime { get; set; } + + /// + /// 换新单号 + /// + [Column(StringLength = 100)] + public string RenewalOrderId { get; set; } + + /// + /// 退货检查备注 + /// + [Column(StringLength = 255)] + public string ReturnCheckRemark { get; set; } + + /// + /// 线下换新方式 + /// + [Column(MapType = typeof(int?))] + public Enums.StorageType? RenewalType { get; set; } + + /// + /// 线下换新采购单号 + /// + [Column(StringLength = 50)] + public string RenewalPurchaseOrderId { get; set; } + + /// + /// 线下换新采购平台 + /// + [Column(MapType = typeof(int?))] + public Enums.Platform? RenewalPurchasePlatform { get; set; } } } diff --git a/BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs b/BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs new file mode 100644 index 00000000..24ddcdf4 --- /dev/null +++ b/BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs @@ -0,0 +1,21 @@ +namespace BBWY.Server.Model.Dto +{ + public class EditQueryServiceOrderRequest + { + public long ServicePId { get; set; } + + public string OrderId { get; set; } + + public Enums.ServiceResult? ServiceResult { get; set; } + public decimal? SDRefundFreight { get; set; } + public Enums.ReturnDirection? ReturnDirection { get; set; } + public string RenewalOrderId { get; set; } + public decimal? ReissueAfterSaleAmount { get; set; } + public string ReturnCheckRemark { get; set; } + public Enums.StorageType? RenewalType { get; set; } + public string RenewalPurchaseOrderId { get; set; } + public Enums.Platform? RenewalPurchasePlatform { get; set; } + public decimal? ReissueFreight { get; set; } + public decimal? ReissueProductAmount { get; set; } + } +} diff --git a/BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs b/BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs index b7ff8ec3..634bf12f 100644 --- a/BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs +++ b/BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs @@ -238,6 +238,31 @@ namespace BBWY.Server.Model.Dto /// public DateTime? QualityInspectionInStoreTime { get; set; } + /// + /// 换新单号 + /// + public string RenewalOrderId { get; set; } + + /// + /// 退货检查备注 + /// + public string ReturnCheckRemark { get; set; } + + /// + /// 线下换新方式 + /// + public Enums.StorageType? RenewalType { get; set; } + + /// + /// 线下换新采购单号 + /// + public string RenewalPurchaseOrderId { get; set; } + + /// + /// 线下换新采购平台 + /// + public Enums.Platform? RenewalPurchasePlatform { get; set; } + #region Sku public string Logo { get; set; } @@ -251,6 +276,10 @@ namespace BBWY.Server.Model.Dto public decimal Price { get; set; } #endregion + + #region Order + public Enums.StorageType? StorageType { get; set; } + #endregion } public class ServiceOrderResponse diff --git a/BBWY.Test/Program.cs b/BBWY.Test/Program.cs index 65a23421..d89d7415 100644 --- a/BBWY.Test/Program.cs +++ b/BBWY.Test/Program.cs @@ -60,64 +60,7 @@ namespace BBWY.Test var jdClient = GetJdClient(appkey, appSecret); - //var req = new AdsIbgUniversalJosServiceAdQueryRequest(); - //req.accessPin = "可比玩具"; - //req.businessType = "2"; - //req.isDaily = "true"; - //req.clickOrOrderDay = "0"; - //req.pageSize = "100"; - //req.page = "1"; - //req.clickOrOrderCaliber = "1"; - //req.startDay = "2023-03-10"; - //req.endDay = "2023-03-10"; - //req.giftFlag = "0"; - //req.orderStatusCategory = "1"; - //var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); - - /* - var req = new AscSyncListRequest(); - - req.buId = "10598776"; - req.operatePin = "开发者测试"; - req.operateNick = "开发者测试"; - - //req.serviceId = 1687549909; - //req.orderId = ; - //req.serviceStatus = ; - - req.updateTimeBegin = DateTime.Parse("2023-03-01"); - req.updateTimeEnd = DateTime.Now; - - //req.freightUpdateDateBegin = ; - //req.freightUpdateDateEnd = ; - - req.pageNumber = "1"; - req.pageSize = "100"; - var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); - */ - - //var req = new AscQueryViewRequest(); - - //req.buId = "10598776"; - //req.operatePin = "开发测试"; - //req.operateNick = "开发测试"; - //req.serviceId = 1688379598; - //req.orderId = 262837096353; - - - - //var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); - - ////var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime()); - - //Console.WriteLine(JsonConvert.SerializeObject(res)); - - var tdeClient = new TDEClient("https://api.jd.com/routerjson", appkey, appSecret, token); - var returnWareAddress = "AATLKmlcVOJfnbZ2x4ekuBoGLTpp/eAJf9RDWWhUXsW4hRWT22+CAAuo7e08va+2KKQxGosPRWQ5t56PDp060VetknlcczPyKlymVNCdNRH2ew=="; - var pickwareAddress = "AATLKmlcVOJfnbZ2x4ekuBoGSURp5cw04y0gSLeBBy/BLvilFS91R6ASk3Ft2GokuD4YtgjX4hQC8XwsEschrw9DBJQWaFUaacMYA/GyHhlpkw=="; - Console.WriteLine($"returnWareAddress {tdeClient.DecryptString(returnWareAddress)}"); - Console.WriteLine($"pickwareAddress {tdeClient.DecryptString(pickwareAddress)}"); Console.ReadKey(); } diff --git a/JD.API/Controllers/PlatformSDKController.cs b/JD.API/Controllers/PlatformSDKController.cs index 6e52da0a..3e49f5f9 100644 --- a/JD.API/Controllers/PlatformSDKController.cs +++ b/JD.API/Controllers/PlatformSDKController.cs @@ -288,6 +288,7 @@ namespace JD.API.API.Controllers return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionTask(request); } + [HttpPost] public void StartJDPromotionDelayTask([FromBody] StartPromotionTaskDelayRequest request) { platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionDelayTask(request); @@ -340,7 +341,7 @@ namespace JD.API.API.Controllers /// /// [HttpPost] - public JArray GetServiceOrderList([FromBody] ClientQueryServiceOrderRequest request) + public JArray GetServiceOrderList([FromBody] QueryServiceOrderRequest request) { return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderList(request); } @@ -351,7 +352,7 @@ namespace JD.API.API.Controllers /// /// [HttpPost] - public JToken GetServiceOrderDetail(QueryServiceOrderDetailRequest request) + public JToken GetServiceOrderDetail([FromBody] QueryServiceOrderDetailRequest request) { return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDetail(request); } @@ -362,7 +363,7 @@ namespace JD.API.API.Controllers /// /// [HttpPost] - public JToken GetServiceOrderDeliveryDetail(QueryServiceOrderDetailRequest request) + public JToken GetServiceOrderDeliveryDetail([FromBody] QueryServiceOrderDetailRequest request) { return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDeliveryDetail(request); } diff --git a/JD.API/appsettings.json b/JD.API/appsettings.json index 746b7356..d3a0a141 100644 --- a/JD.API/appsettings.json +++ b/JD.API/appsettings.json @@ -9,7 +9,7 @@ "ConnectionStrings": { "DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;", }, - "IsEnableSwagger": false, + "IsEnableSwagger": true, "AllowedHosts": "*", "ValidatePlatformKey": 1 }