连坤 林 2 years ago
parent
commit
60302404a4
  1. 33
      BBWY.Client/APIServices/ServiceOrderService.cs
  2. 1
      BBWY.Client/App.xaml.cs
  3. 27
      BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs
  4. 272
      BBWY.Client/ViewModels/Order/OrderListViewModel.cs
  5. 116
      BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs
  6. 45
      BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs
  7. 9
      BBWY.Client/ViewModels/ViewModelLocator.cs
  8. 38
      BBWY.Client/Views/Order/OrderList.xaml
  9. 12
      BBWY.Client/Views/Order/OrderList.xaml.cs
  10. 179
      BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml
  11. 28
      BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs
  12. 24
      BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml
  13. 10
      BBWY.Server.API/Controllers/ServiceOrderController.cs
  14. 3
      BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs
  15. 54
      BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs
  16. 33
      BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs
  17. 30
      BBWY.Server.Model/Db/Order/Serviceorder.cs
  18. 21
      BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs
  19. 29
      BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs
  20. 57
      BBWY.Test/Program.cs
  21. 7
      JD.API/Controllers/PlatformSDKController.cs
  22. 2
      JD.API/appsettings.json

33
BBWY.Client/APIServices/ServiceOrderService.cs

@ -39,6 +39,37 @@ namespace BBWY.Client.APIServices
endDate
}, null, HttpMethod.Post);
}
}
public ApiResponse<object> 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<object>(globalContext.BBYWApiHost, "Api/ServiceOrder/EditServiceOrder", new
{
servicePId,
orderId,
serviceResult,
sdRefundFreight,
returnDirection,
renewalOrderId,
reissueAfterSaleAmount,
returnCheckRemark,
renewalType,
renewalPurchaseOrderId,
renewalPurchasePlatform,
reissueFreight,
reissueProductAmount
}, null, HttpMethod.Post);
}
}
}

1
BBWY.Client/App.xaml.cs

@ -119,6 +119,7 @@ namespace BBWY.Client
serviceCollection.AddMapper(new MappingProfile());
serviceCollection.AddTransient<_1688PreviewPurchaseViewModel>();
serviceCollection.AddTransient<EditServiceOrderViewModel>();
#region 注册拳探SDK相关类
serviceCollection.AddSingleton<QuanTanProductClient>();

27
BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs

@ -238,6 +238,31 @@ namespace BBWY.Client.Models
/// </summary>
public DateTime? QualityInspectionInStoreTime { get; set; }
/// <summary>
/// 换新单号
/// </summary>
public string RenewalOrderId { get; set; }
/// <summary>
/// 退货检查备注
/// </summary>
public string ReturnCheckRemark { get; set; }
/// <summary>
/// 线下换新方式
/// </summary>
public StorageType? RenewalType { get; set; }
/// <summary>
/// 线下换新采购单号
/// </summary>
public string RenewalPurchaseOrderId { get; set; }
/// <summary>
/// 线下换新采购平台
/// </summary>
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

272
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); } }
/// <summary>
@ -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<Order>((o) => OutStock(o));
EditVenderRemarkCommand = new RelayCommand<Order>(EditVenderRemark);
ExportCommand = new RelayCommand(Export);
SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder);
//SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder);
SetIncludeExceptionOrderCommand = new RelayCommand(SetIncludeExceptionOrder);
EditAfterSaleOrderCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrder);
EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrderRefundPurchaseAmount);
FindAfterSaleOrderCommand = new RelayCommand<object>(FindAfterSaleOrder);
//EditAfterSaleOrderCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrder);
//EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrderRefundPurchaseAmount);
//FindAfterSaleOrderCommand = new RelayCommand<object>(FindAfterSaleOrder);
OpenSkuDetailCommand = new RelayCommand<object>(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
/// <param name="pageIndex"></param>
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());
}
}
@ -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)
{

116
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;
/// <summary>
/// 主键Id
/// </summary>
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); } }
/// <summary>
/// 售后补发成本
/// </summary>
public decimal? ReissueAfterSaleAmount { get => reissueAfterSaleAmount; set { Set(ref reissueAfterSaleAmount, value); } }
/// <summary>
/// 退货检查备注
/// </summary>
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");
});
}
}
}

45
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<ServiceOrder> ServiceOrderList { get; set; }
public long ServiceOrderCount { get => serviceOrderCount; set { Set(ref serviceOrderCount, value); } }
@ -91,6 +94,7 @@ namespace BBWY.Client.ViewModels
NavigateToDetailCommand = new RelayCommand<string>(NavigateToDetail);
OnPageIndexChangedCommand = new RelayCommand<PageArgs>(OnPageIndexChanged);
PreviewImgCommand = new RelayCommand<string>(PreviewImg);
EditServiceOrderCommand = new RelayCommand<ServiceOrder>(OpenEditServiceOrder);
ServiceOrderList = new ObservableCollection<ServiceOrder>() { 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);
}
});
@ -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<ServiceOrder>();
newServiceOrder.Init();
Application.Current.Dispatcher.Invoke(() =>
{
var orderIndex = ServiceOrderList.IndexOf(serviceOrder);
ServiceOrderList.Remove(serviceOrder);
ServiceOrderList.Insert(orderIndex, newServiceOrder);
});
}
}
}

9
BBWY.Client/ViewModels/ViewModelLocator.cs

@ -229,5 +229,14 @@ namespace BBWY.Client.ViewModels
return s.ServiceProvider.GetRequiredService<BillCorrectionViewModel>();
}
}
public EditServiceOrderViewModel EditServiceOrder
{
get
{
using var s = sp.CreateScope();
return s.ServiceProvider.GetRequiredService<EditServiceOrderViewModel>();
}
}
}
}

38
BBWY.Client/Views/Order/OrderList.xaml

@ -86,10 +86,10 @@
<c:BButton Content="近30天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d30}"/>
<TextBlock Text="服务单" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding IncludeAfterOrder,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchServiceId}" WaterRemark="精确匹配"
Visibility="{Binding IncludeAfterOrder,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}"/>
<!--<TextBlock Text="服务单" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding IncludeAfterOrder,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}"/>-->
<!--<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchServiceId}" WaterRemark="精确匹配"
Visibility="{Binding IncludeAfterOrder,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}"/>-->
<TextBlock Text="快递单" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding Visibility,ElementName=listbox_order}"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding SearchWaybill}" WaterRemark="前缀模糊匹配"
@ -140,17 +140,15 @@
Visibility="{Binding IsSDGroup,ConverterParameter=true:Collapsed:Visible,Converter={StaticResource objConverter}}">
<c:BButton.Background>
<MultiBinding Converter="{StaticResource mobjConverter}"
ConverterParameter=";;false:&amp;:#8080FF:#F2F2F2:6">
ConverterParameter=";false:&amp;:#8080FF:#F2F2F2:6">
<Binding Path="OrderState"/>
<Binding Path="IncludeAfterOrder"/>
<Binding Path="IncludeExceptionOrder"/>
</MultiBinding>
</c:BButton.Background>
<c:BButton.Foreground>
<MultiBinding Converter="{StaticResource mobjConverter}"
ConverterParameter=";;false:&amp;:White:#4A4A4A:6">
ConverterParameter=";false:&amp;:White:#4A4A4A:6">
<Binding Path="OrderState"/>
<Binding Path="IncludeAfterOrder"/>
<Binding Path="IncludeExceptionOrder"/>
</MultiBinding>
</c:BButton.Foreground>
@ -216,7 +214,7 @@
</TextBlock>
</c:BButton.Content>
</c:BButton>
<c:BButton Width="100"
<!--<c:BButton Width="100"
Background="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:#8080FF:#F2F2F2}"
Foreground="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:White:#4A4A4A}"
Command="{Binding SetIncludeAfterOrderCommand}"
@ -226,7 +224,7 @@
<Run Text="{Binding AfterSaleOrderUnhandleCount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"
Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</c:BButton>
</c:BButton>-->
</StackPanel>
<Border x:Name="bd_statistics" Grid.RowSpan="3" HorizontalAlignment="Right" Padding="15,0" TextBlock.Foreground="{StaticResource Text.Color}">
@ -400,18 +398,18 @@
</StackPanel>
</Border>
<Border Grid.Row="4" Background="{StaticResource Border.Background}"
Visibility="{Binding Visibility,ElementName=listbox_afterSaleOrder}">
<Border Grid.Row="4" Background="{StaticResource Border.Background}">
<StackPanel Orientation="Horizontal">
<CheckBox Content="仅显示未处理" Margin="5,0,0,0" IsChecked="{Binding OnlyUnhandle}"/>
</StackPanel>
</Border>
<local:OrderListControl x:Name="listbox_order" Grid.Row="6" Grid.RowSpan="2"
Visibility="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:Collapsed:Visible}"/>
<!--Visibility="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:Collapsed:Visible}"-->
<local:OrderListControl x:Name="listbox_order" Grid.Row="6" Grid.RowSpan="2"/>
<Border Grid.Row="6" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
<!--<Border Grid.Row="6" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2"
Visibility="{Binding Visibility,ElementName=listbox_afterSaleOrder}">
<Grid>
@ -598,7 +596,7 @@
<RowDefinition/>
</Grid.RowDefinitions>
<!--Row 1-->
--><!--Row 1--><!--
<Grid Grid.ColumnSpan="2" Background="{StaticResource Border.Background}">
<TextBlock Text="商品成本"/>
</Grid>
@ -615,7 +613,7 @@
<TextBlock Text="退款采购成本"/>
</Grid>
<!--Row 2-->
--><!--Row 2--><!--
<Grid Grid.Row="1" Background="{StaticResource Border.Background}">
<TextBlock Text="商品成本"/>
</Grid>
@ -646,7 +644,7 @@
<Grid Grid.Row="1" Grid.Column="9" Background="{StaticResource Border.Background}">
<TextBlock Text="售后补偿"/>
</Grid>
<!--Row 3-->
--><!--Row 3--><!--
<TextBlock Grid.Row="2" Text="{Binding ReissueProductAmount}"
Visibility="{Binding ReissueProductAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
@ -675,7 +673,7 @@
Visibility="{Binding RefundPurchaseAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<!--Line-->
--><!--Line--><!--
<Border Width="1" Grid.Column="1" Grid.RowSpan="3" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" Grid.Column="7" Grid.RowSpan="3" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" Grid.Column="9" Grid.Row="1" Grid.RowSpan="2" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
@ -751,7 +749,7 @@
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ListBox>-->
<c:PageControl PageIndex="{Binding PageIndex}"
PageSize="{Binding PageSize}"

12
BBWY.Client/Views/Order/OrderList.xaml.cs

@ -24,12 +24,12 @@ namespace BBWY.Client.Views.Order
scrollviewer_OrderList.Dispatcher.Invoke(() => scrollviewer_OrderList.ScrollToTop());
});
Messenger.Default.Register<string>(this, "AfterSaleOrderList_ScrollToTop", (x) =>
{
if (scrollveewer_AfterSaleOrderList == null)
scrollveewer_AfterSaleOrderList = listbox_afterSaleOrder.FindFirstVisualChild<ScrollViewer>();
scrollviewer_OrderList.Dispatcher.Invoke(() => scrollveewer_AfterSaleOrderList.ScrollToTop());
});
//Messenger.Default.Register<string>(this, "AfterSaleOrderList_ScrollToTop", (x) =>
//{
// if (scrollveewer_AfterSaleOrderList == null)
// scrollveewer_AfterSaleOrderList = listbox_afterSaleOrder.FindFirstVisualChild<ScrollViewer>();
// scrollviewer_OrderList.Dispatcher.Invoke(() => scrollveewer_AfterSaleOrderList.ScrollToTop());
//});
}
private void OrderList_Unloaded(object sender, System.Windows.RoutedEventArgs e)

179
BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml

@ -0,0 +1,179 @@
<c:BWindow x:Class="BBWY.Client.Views.ServiceOrder.EditServiceOrder"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BBWY.Client.Views.ServiceOrder"
mc:Ignorable="d"
xmlns:clientModel="clr-namespace:BBWY.Client.Models"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
Style="{StaticResource bwstyle}"
DataContext="{Binding EditServiceOrder,Source={StaticResource Locator}}"
Title="EditServiceOrder" Height="450" Width="340">
<c:BWindow.Resources>
<ObjectDataProvider x:Key="serviceResultProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="clientModel:ServiceResult"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="returnDirectionProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="clientModel:ReturnDirection"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="storageTypeProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="clientModel:StorageType"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<ObjectDataProvider x:Key="platformProvider" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="clientModel:Platform"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</c:BWindow.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<Border BorderThickness="0,0,0,1" BorderBrush="{StaticResource MainMenu.BorderBrush}"
Background="{StaticResource Border.Background}">
<TextBlock Text="售后信息" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Row="1" Margin="5">
<Grid Height="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="处理结果:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<ComboBox ItemsSource="{Binding Source={StaticResource serviceResultProvider}}"
SelectedItem="{Binding ServiceResult,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"
Width="160"
Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=换新|线下换新|退货:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="退货去向:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<ComboBox ItemsSource="{Binding Source={StaticResource returnDirectionProvider}}"
SelectedItem="{Binding ReturnDirection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"
Width="160"
Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=SD退货:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="SD退货运费:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding SDRefundFreight}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=换新:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="换新单号:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding RenewalOrderId}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=换新|线下换新|退货|商品补发|原返|仅退款:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="售后补偿:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding ReissueAfterSaleAmount}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=线下换新:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="换新方式:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<ComboBox ItemsSource="{Binding Source={StaticResource storageTypeProvider}}"
SelectedItem="{Binding RenewalType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"
Width="160"
Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=线下换新:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Text="采购单号:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding RenewalPurchaseOrderId}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
<ComboBox ItemsSource="{Binding Source={StaticResource platformProvider}}"
SelectedItem="{Binding RenewalPurchasePlatform,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
Grid.Column="2"
HorizontalAlignment="Left"
VerticalContentAlignment="Center"
MinWidth="70"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=商品补发:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="补发快递费:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding ReissueFreight}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
</Grid>
<Grid Height="25" Margin="0,5,0,0"
Visibility="{Binding ServiceResult,ConverterParameter=商品补发:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="补发货款成本:" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<c:BTextBox Text="{Binding ReissueProductAmount}" Width="160" Grid.Column="1" HorizontalAlignment="Left"
Height="25" Margin="5,0,0,0"/>
</Grid>
</StackPanel>
<Grid Grid.Row="2" Margin="5,0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="退货检查备注:" Margin="0,3"/>
<TextBox Grid.Row="1" AcceptsReturn="True"
TextWrapping="Wrap" Padding="3"
Text="{Binding ReturnCheckRemark}"/>
</Grid>
<c:BButton Content="保存" Width="80" HorizontalAlignment="Right" Grid.Row="3"
Command="{Binding SaveCommand}" Margin="0,0,5,0"/>
</Grid>
</c:BWindow>

28
BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs

@ -0,0 +1,28 @@
using BBWY.Client.ViewModels;
using BBWY.Controls;
namespace BBWY.Client.Views.ServiceOrder
{
/// <summary>
/// EditServiceOrder.xaml 的交互逻辑
/// </summary>
public partial class EditServiceOrder : BWindow
{
public EditServiceOrder(Models.ServiceOrder serviceOrder)
{
InitializeComponent();
(this.DataContext as EditServiceOrderViewModel).SetData(serviceOrder);
GalaSoft.MvvmLight.Messaging.Messenger.Default.Register<bool>(this, "closeEditServiceOrder", (r) =>
{
if (r)
{
this.Dispatcher.Invoke(() =>
{
this.DialogResult = true;
this.Close();
});
}
});
}
}
}

24
BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml

@ -236,7 +236,7 @@
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0">
<Run Text="仓储类型:"/>
<Run Text="代发" Foreground="{StaticResource Text.Pink}"/>
<Run Text="{Binding StorageType}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Text="订单号:" Margin="10,0,0,0" VerticalAlignment="Center"/>
<c:BButton Content="{Binding OrderId}" Style="{StaticResource LinkButton}"
@ -316,12 +316,12 @@
Background="Transparent"
Foreground="{StaticResource Text.Color}"
Grid.Column="1"
Command="{Binding DataContext.EditAfterSaleOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
Command="{Binding DataContext.EditServiceOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Grid.Column="1" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<TextBlock Text="{Binding WareHouseGrounpRemark}" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center"
<TextBlock Text="{Binding ReturnCheckRemark}" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center"
TextWrapping="Wrap"/>
<Border Grid.Column="2" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
@ -397,22 +397,22 @@
<Border Grid.Column="3" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<StackPanel Grid.Column="4" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding PurchaseOrderId,ConverterParameter=#null:Collapsed:Visible,Converter={StaticResource objConverter}}">
Visibility="{Binding RenewalPurchaseOrderId,ConverterParameter=#null:Collapsed:Visible,Converter={StaticResource objConverter}}">
<TextBlock>
<Run Text="采购平台:"/>
<Run Text="{Binding PurchasePlatform}"/>
<Run Text="{Binding RenewalPurchasePlatform}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="采购订单号:"/>
<c:BButton Content="{Binding PurchaseOrderId}" Style="{StaticResource LinkButton}"
<c:BButton Content="{Binding RenewalPurchaseOrderId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding PurchaseOrderId}" Margin="3,0,0,0"/>
CommandParameter="{Binding RenewalPurchaseOrderId}" Margin="3,0,0,0"/>
</StackPanel>
</StackPanel>
<Border Grid.Column="4" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel Orientation="Horizontal" Grid.Column="5" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,20">
<TextBlock>
<Run Text="总耗损"/>
<Run Text="{Binding AfterTotalCost}"/>
@ -421,6 +421,14 @@
</Path>
</StackPanel>
<Border Height="1" Background="{StaticResource Border.Brush}" Grid.Column="5" VerticalAlignment="Bottom" Margin="0,0,0,27"/>
<c:BButton Content="设置" VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Background="Transparent"
Foreground="{StaticResource Text.Color}"
Grid.Column="5"
Command="{Binding DataContext.EditServiceOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>

10
BBWY.Server.API/Controllers/ServiceOrderController.cs

@ -24,5 +24,15 @@ namespace BBWY.Server.API.Controllers
{
return serviceOrderBusiness.GetList(request);
}
/// <summary>
/// 修改服务单
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditServiceOrder([FromBody] EditQueryServiceOrderRequest request)
{
serviceOrderBusiness.EditServiceOrder(request);
}
}
}

3
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;

54
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<ServiceOrder, OrderSku>().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<ServiceOrder, Order, OrderSku>()
.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<ServiceOrder>(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();
});
}
}
}

33
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<ExpressOrder> updateExpressOrder = null;
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
DateTime? signTime = null;
if (expressOrder.TransportStatus == Enums.TransportState.)
{
if (kuaiDi100PushStateList_qianshou.Contains(state) && expressOrder.SignTime == null)
{
signTime = GetSignTime(jobject);
fsql.Update<ExpressOrder>(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<ExpressOrder> updateExpressOrder = null;
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
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<int>("statusCode") == 3);
if (data != null)
signTime = DateTime.Parse(data.Value<string>("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<int>("statusCode")));
if (data != null)
signTime = DateTime.Parse(data.Value<string>("ftime"));
return signTime;
}
}
}

30
BBWY.Server.Model/Db/Order/Serviceorder.cs

@ -283,6 +283,36 @@ namespace BBWY.Server.Model.Db
/// </summary>
[Column(DbType = "datetime")]
public DateTime? QualityInspectionInStoreTime { get; set; }
/// <summary>
/// 换新单号
/// </summary>
[Column(StringLength = 100)]
public string RenewalOrderId { get; set; }
/// <summary>
/// 退货检查备注
/// </summary>
[Column(StringLength = 255)]
public string ReturnCheckRemark { get; set; }
/// <summary>
/// 线下换新方式
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.StorageType? RenewalType { get; set; }
/// <summary>
/// 线下换新采购单号
/// </summary>
[Column(StringLength = 50)]
public string RenewalPurchaseOrderId { get; set; }
/// <summary>
/// 线下换新采购平台
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.Platform? RenewalPurchasePlatform { get; set; }
}
}

21
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; }
}
}

29
BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs

@ -238,6 +238,31 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public DateTime? QualityInspectionInStoreTime { get; set; }
/// <summary>
/// 换新单号
/// </summary>
public string RenewalOrderId { get; set; }
/// <summary>
/// 退货检查备注
/// </summary>
public string ReturnCheckRemark { get; set; }
/// <summary>
/// 线下换新方式
/// </summary>
public Enums.StorageType? RenewalType { get; set; }
/// <summary>
/// 线下换新采购单号
/// </summary>
public string RenewalPurchaseOrderId { get; set; }
/// <summary>
/// 线下换新采购平台
/// </summary>
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

57
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();
}

7
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
/// <param name="request"></param>
/// <returns></returns>
[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
/// <param name="request"></param>
/// <returns></returns>
[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
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public JToken GetServiceOrderDeliveryDetail(QueryServiceOrderDetailRequest request)
public JToken GetServiceOrderDeliveryDetail([FromBody] QueryServiceOrderDetailRequest request)
{
return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDeliveryDetail(request);
}

2
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
}

Loading…
Cancel
Save