Browse Source

修改bug

qianyi
连坤 林 2 years ago
parent
commit
2a9eda66f7
  1. 44
      BBWY.Client/APIServices/ServiceOrderService.cs
  2. 262
      BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs
  3. 58
      BBWY.Client/Models/Enums.cs
  4. 1
      BBWY.Client/Models/MappingProfile.cs
  5. 147
      BBWY.Client/Models/PackTask/PackTaskModel.cs
  6. 37
      BBWY.Client/Models/ServiceOrder/ServiceOrder.cs
  7. 3
      BBWY.Client/ViewModels/MainViewModel.cs
  8. 8
      BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs
  9. 24
      BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
  10. 245
      BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs
  11. 16
      BBWY.Client/ViewModels/ViewModelLocator.cs
  12. 916
      BBWY.Client/Views/Order/OrderList.xaml
  13. 2
      BBWY.Client/Views/PackTask/CreatePackTask.xaml
  14. 6
      BBWY.Client/Views/PackTask/LookBarCodeWindow.xaml
  15. 6
      BBWY.Client/Views/PackTask/LookCerWindow.xaml
  16. 9
      BBWY.Client/Views/PackTask/PersonList.xaml
  17. 2
      BBWY.Client/Views/PackTask/PrintWindow.xaml
  18. 54
      BBWY.Client/Views/PackTask/PrintWindow.xaml.cs
  19. 9
      BBWY.Client/Views/PackTask/ServiceWindow.xaml
  20. 470
      BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml
  21. 26
      BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml.cs
  22. 20
      BBWY.Server.API/Controllers/OrderSyncController.cs
  23. 28
      BBWY.Server.API/Controllers/ServiceOrderController.cs
  24. 21
      BBWY.Server.API/Controllers/ServiceOrderSyncController.cs
  25. 6
      BBWY.Server.Business/BBWY.Server.Business.csproj
  26. 2
      BBWY.Server.Business/PlatformSDK/LogisticsCompanyConverter.cs
  27. 2
      BBWY.Server.Business/PlatformSDK/PlatformSDKBusiness.cs
  28. 72
      BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs
  29. 199
      BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs
  30. 124
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  31. 4
      BBWY.Server.Business/TaskSchedulerManager.cs
  32. 6
      BBWY.Server.Model/Db/Order/ExpressOrder.cs
  33. 577
      BBWY.Server.Model/Db/Order/Serviceorder.cs
  34. 21
      BBWY.Server.Model/Db/Order/WaitPayOrder.cs
  35. 30
      BBWY.Server.Model/Dto/Request/ServiceOrder/ClientQueryServiceOrderRequest.cs
  36. 2
      BBWY.Server.Model/Dto/Request/Sync/OrderPublishRequest.cs
  37. 262
      BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs
  38. 58
      BBWY.Server.Model/Enums.cs
  39. 25
      BBWY.Test/Program.cs
  40. 2
      JD.API/Controllers/PlatformSDKController.cs

44
BBWY.Client/APIServices/ServiceOrderService.cs

@ -0,0 +1,44 @@
using BBWY.Client.Models;
using BBWY.Common.Http;
using BBWY.Common.Models;
using System;
using System.Net.Http;
namespace BBWY.Client.APIServices
{
public class ServiceOrderService : BaseApiService, IDenpendency
{
public ServiceOrderService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext)
{
}
public ApiResponse<ServiceOrderResponse> GetList(string orderId,
string sku,
string spu,
string serviceId,
string shopId,
ServiceOrderState? serviceOrderState,
ReturnDirection? returnDirection,
int pageIndex,
int pageSize,
DateTime? startDate,
DateTime? endDate)
{
return SendRequest<ServiceOrderResponse>(globalContext.BBYWApiHost, "Api/ServiceOrder/GetList", new
{
orderId,
sku,
spu,
serviceId,
shopId,
serviceOrderState,
returnDirection,
pageIndex,
pageSize,
startDate,
endDate
}, null, HttpMethod.Post);
}
}
}

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

@ -0,0 +1,262 @@
using System;
using System.Collections.Generic;
namespace BBWY.Client.Models
{
public class ServiceOrderItemResponse
{
public long Id { get; set; }
/// <summary>
/// 售后成本(不含退款采购成本)
/// </summary>
public decimal? AfterTotalCost { get; set; } = 0.00M;
/// <summary>
/// 申请时间
/// </summary>
public DateTime? ApplyTime { get; set; }
/// <summary>
/// 耗材费
/// </summary>
public decimal? ConsumableAmount { get; set; } = 0.00M;
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程费
/// </summary>
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 退货拍摄图(名称)
/// </summary>
public string ImageName { get; set; }
/// <summary>
/// 入仓操作费
/// </summary>
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 是否订阅快递100
/// </summary>
public bool? IsSubscribeKuaiDi100 { get; set; }
/// <summary>
/// 是否需要订阅快递100
/// </summary>
public bool? IsNeedSubscribeKuaiDi100 { get; set; }
public string OrderId { get; set; }
/// <summary>
/// 出仓操作费
/// </summary>
public decimal? OutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
public ProductAppearance? ProductAppearance { get; set; }
/// <summary>
/// 产品功能 (坏=0 好=1)
/// </summary>
public ProductFunction? ProductFunction { get; set; }
/// <summary>
/// 商品健康状态 (残次品=0 良品=1)
/// </summary>
public NewProductHealth? ProductHealth { get; set; }
public string ProductId { get; set; }
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
public ProductPackage? ProductPackage { get; set; }
/// <summary>
/// 采购方式
/// </summary>
public PurchaseMethod? PurchaseMethod { get; set; }
/// <summary>
/// 采购单号
/// </summary>
public string PurchaseOrderId { get; set; }
/// <summary>
/// 采购单主键
/// </summary>
public long? PurchaseOrderPKId { get; set; }
/// <summary>
/// 采购平台
/// </summary>
public Platform? PurchasePlatform { get; set; }
/// <summary>
/// 退款支付宝订单号
/// </summary>
public string RefundAlipayOrderNo { get; set; }
/// <summary>
/// 退款金额
/// </summary>
public decimal? RefundAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓操作费
/// </summary>
public decimal? RefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退款商户订单号
/// </summary>
public string RefundMerchantOrderNo { get; set; }
/// <summary>
/// 退款采购成本
/// </summary>
public decimal? RefundPurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 退款时间
/// </summary>
public DateTime? RefundTime { get; set; }
/// <summary>
/// 售后补发成本
/// </summary>
public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M;
/// <summary>
/// 补发快递费
/// </summary>
public decimal? ReissueFreight { get; set; } = 0.00M;
/// <summary>
/// 补发货款成本
/// </summary>
public decimal? ReissueProductAmount { get; set; } = 0.00M;
/// <summary>
/// 退货去向(退货仓=0,采购商=1,原返=2,无退货=3)
/// </summary>
public ReturnDirection? ReturnDirection { get; set; }
/// <summary>
/// SD退货运费
/// </summary>
public decimal? SDRefundFreight { get; set; } = 0.00M;
/// <summary>
/// 服务单号
/// </summary>
public string ServiceId { get; set; }
/// <summary>
/// 服务单租备注
/// </summary>
public string ServiceOrderRemark { get; set; }
/// <summary>
/// 服务单处理结果
/// </summary>
public ServiceResult? ServiceResult { get; set; }
public string ShopId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// SKU销售件数
/// </summary>
public int? SkuItemCount { get; set; }
/// <summary>
/// 服务单状态 待收货 = 10005,取消 = 10011,完成 = 10010
/// </summary>
public ServiceOrderState? Status { get; set; }
/// <summary>
/// 变更时间
/// </summary>
public DateTime? StatusUpdateTime { get; set; }
/// <summary>
/// 仓储费
/// </summary>
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 服务单物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary>
public TransportState? TransportDetails { get; set; }
/// <summary>
/// 仓库组备注
/// </summary>
public string WareHouseGrounpRemark { get; set; }
/// <summary>
/// 快递单号
/// </summary>
public string WayBillNo { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
public string ExpressName { get; set; }
/// <summary>
/// 质检入库时间
/// </summary>
public DateTime? QualityInspectionInStoreTime { get; set; }
#region Sku
public string Logo { get; set; }
public string Title { get; set; }
//public string ContactName { get; set; }
//public string Mobile { get; set; }
public int ItemTotal { get; set; }
public decimal Price { get; set; }
#endregion
}
public class ServiceOrderResponse
{
public IList<ServiceOrderItemResponse> Items { get; set; }
public long Count { get; set; }
}
}

58
BBWY.Client/Models/Enums.cs

@ -254,7 +254,7 @@
{
= 0,
= 1,
=2
= 2
}
public enum Increment
@ -317,4 +317,60 @@
}
/// <summary>
/// 服务单状态
/// </summary>
public enum ServiceOrderState
{
= 10005,
= 10011,
= 10010
}
public enum ReturnDirection
{
退 = 0, = 1, = 2, 退 = 3
}
/// <summary>
/// 运输状态 0=待质检,1=已入库,2=派送中,3=运输中
/// </summary>
public enum TransportState
{
= 0, = 1, = 2, = 3
}
/// <summary>
/// 商品健康状态 残次品=0 良品=1
/// </summary>
public enum NewProductHealth
{
= 0, = 1
}
/// <summary>
/// 产品功能 坏=0 好=1
/// </summary>
public enum ProductFunction
{
= 0, = 1
}
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
public enum ProductAppearance
{
= 0, = 1, = 2
}
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
public enum ProductPackage
{
= 0, = 1, = 2
}
}

1
BBWY.Client/Models/MappingProfile.cs

@ -30,6 +30,7 @@ namespace BBWY.Client.Models
CreateMap<ToDayOrderAchievementResponse, ToDayOrderAchievement>();
CreateMap<SDGroupPersonStatisticsResponse, SDGroupPersonStatistics>();
CreateMap<BillCorrectionOrderResponse, BillCorrectionOrder>();
CreateMap<ServiceOrderItemResponse, ServiceOrder>();
}
}
}

147
BBWY.Client/Models/PackTask/PackTaskModel.cs

@ -159,15 +159,14 @@ namespace BBWY.Client.Models
{
if (CertificateModel == null)
{
new TipsWindow("该任务无设置合格证信息,无法打印!").ShowDialog();
new TipsWindow("该任务无设置合格证信息,无法打印!").Show();
return;
}
PrintWindow printWindow = new PrintWindow();
printWindow.LabelName = CertificateModel.LabelModel.ToString();//加载模板信息
printWindow.certificateModel = certificateModel;
printWindow.CertificateModel = certificateModel;
printWindow.LoadData();
printWindow.Datas = LoadCerLabelModels();
//printWindow.Datas = LoadCerLabelModels();
printWindow.Show();
}
@ -178,13 +177,13 @@ namespace BBWY.Client.Models
{
if (BarCodeModel == null)
{
new TipsWindow("该任务无设置条形码信息,无法打印!").ShowDialog();
new TipsWindow("该任务无设置条形码信息,无法打印!").Show();
return;
}
PrintWindow printWindow = new PrintWindow();
printWindow.LabelName = BarCodeModel.LabelModel.ToString();//加载模板信息
printWindow.barCodeModel = new BarCodeModel
// printWindow.LabelName = BarCodeModel.LabelModel.ToString();//加载模板信息
printWindow.BarCodeModel = new BarCodeModel
{
Brand = BarCodeModel.Brand,
BrandName = BarCodeModel.BrandName,
@ -194,7 +193,7 @@ namespace BBWY.Client.Models
SkuName = BarCodeModel.SkuName
};
printWindow.LoadData();
printWindow.Datas = LoadBarLabelModels();
//printWindow.Datas = LoadBarLabelModels();
printWindow.Show();
}
@ -214,71 +213,71 @@ namespace BBWY.Client.Models
new TipsWindow("修改成功").Show();
}
}
public Dictionary<string, string> LoadBarLabelModels()
{
Dictionary<string, string> data = new Dictionary<string, string>();
data.Add("pinming", $"品名: {BarCodeModel.BrandName}");
data.Add("guige", $"规格: {BarCodeModel.SkuName}");
data.Add("pop", $"POP{BarCodeModel.SkuId}");
switch (BarCodeModel.LabelModel)
{
case BarcodeLabelModel.barstander:
data.Add("pinpai", $"品牌: {BarCodeModel.Brand}");
data.Add("xinghao", $"型号: {BarCodeModel.ProductNo}");
return data;
case BarcodeLabelModel.barsimplify:
return data;
default:
break;
}
return data;
}
public Dictionary<string, string> LoadCerLabelModels()
{
Dictionary<string, string> data = new Dictionary<string, string>();
data.Add("pinming", $"品名: {CertificateModel.BrandName}");
data.Add("pinpai", $"品牌: {CertificateModel.Brand}");
data.Add("xinghao", $"型号: {CertificateModel.ProductNo}");
data.Add("dizhi", $"地址: {CertificateModel.ProductAdress}");
data.Add("caizhi", $"材质: {CertificateModel.Shader}");
data.Add("changshang", $"生产商: {CertificateModel.ProductShop}");
switch (CertificateModel.IsLogo)
{
case 0://无图
data.Add("gongchangid", $"无");
break;
case 1://有图
data.Add("gongchangid", $"{CertificateModel.FactoryNumber}");
break;
default:
break;
}
string[] excutes = CertificateModel.ExcuteStander.Split(',', StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder();
sb.Append("执行标准: ");
for (int i = 0; i < excutes.Count(); i++)
{
if (i % 2 == 0 && i > 0)//间隔两个换行
{
sb.Append("\r\n").Append(" ");
}
sb.Append(excutes[i]).Append(" ");
}
sb.Remove(sb.Length - 3, 3);
data.Add("biaozhun", sb.ToString());
return data;
}
/*
public Dictionary<string, string> LoadBarLabelModels()
{
Dictionary<string, string> data = new Dictionary<string, string>();
data.Add("pinming", $"品名: {BarCodeModel.BrandName}");
data.Add("guige", $"规格: {BarCodeModel.SkuName}");
data.Add("pop", $"POP{BarCodeModel.SkuId}");
switch (BarCodeModel.LabelModel)
{
case BarcodeLabelModel.barstander:
data.Add("pinpai", $"品牌: {BarCodeModel.Brand}");
data.Add("xinghao", $"型号: {BarCodeModel.ProductNo}");
return data;
case BarcodeLabelModel.barsimplify:
return data;
default:
break;
}
return data;
}
public Dictionary<string, string> LoadCerLabelModels()
{
Dictionary<string, string> data = new Dictionary<string, string>();
data.Add("pinming", $"品名: {CertificateModel.BrandName}");
data.Add("pinpai", $"品牌: {CertificateModel.Brand}");
data.Add("xinghao", $"型号: {CertificateModel.ProductNo}");
data.Add("dizhi", $"地址: {CertificateModel.ProductAdress}");
data.Add("caizhi", $"材质: {CertificateModel.Shader}");
data.Add("changshang", $"生产商: {CertificateModel.ProductShop}");
switch (CertificateModel.IsLogo)
{
case 0://无图
data.Add("gongchangid", $"无");
break;
case 1://有图
data.Add("gongchangid", $"{CertificateModel.FactoryNumber}");
break;
default:
break;
}
string[] excutes = CertificateModel.ExcuteStander.Split(',', StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder();
sb.Append("执行标准: ");
for (int i = 0; i < excutes.Count(); i++)
{
if (i % 2 == 0 && i > 0)//间隔两个换行
{
sb.Append("\r\n").Append(" ");
}
sb.Append(excutes[i]).Append(" ");
}
sb.Remove(sb.Length - 3, 3);
data.Add("biaozhun", sb.ToString());
return data;
}
*/
private DateTime endTime;
/// <summary>

37
BBWY.Client/Models/ServiceOrder/ServiceOrder.cs

@ -0,0 +1,37 @@
using System.Collections.Generic;
namespace BBWY.Client.Models
{
public class ServiceOrder : ServiceOrderItemResponse
{
public ServiceOrder()
{
ThumbnailImageList = new List<string>();
}
/// <summary>
/// 是否显示商品情况
/// </summary>
public bool IsShowProductInfo
{
get
{
return ProductAppearance != null || ProductFunction != null || ProductHealth != null || ProductPackage != null;
}
}
public IList<string> ThumbnailImageList { get; set; }
public void Init()
{
if (!string.IsNullOrEmpty(ImageName))
{
var imageNameArray = ImageName.Split(',', System.StringSplitOptions.RemoveEmptyEntries);
foreach (var imgItemName in imageNameArray)
{
ThumbnailImageList.Add($"https://qiyue-qiku.oss-cn-beijing.aliyuncs.com/tuihuo/{imgItemName}.jpg?x-oss-process=image/resize,m_lfit,w_35/quality,q_100");
}
}
}
}
}

3
BBWY.Client/ViewModels/MainViewModel.cs

@ -159,7 +159,8 @@ namespace BBWY.Client.ViewModels
Name = "订单管理",
ChildList = new List<MenuModel>()
{
new MenuModel(){ Name="最近订单",Url="/Views/Order/OrderList.xaml" }
new MenuModel(){ Name="最近订单",Url="/Views/Order/OrderList.xaml" },
new MenuModel(){ Name="服务单管理",Url="/Views/ServiceOrder/ServiceOrderList.xaml" }
}
});

8
BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs

@ -120,13 +120,7 @@ namespace BBWY.Client.ViewModels.PackTask
/// </summary>
public ObservableCollection<PackTaskModel> PackTaskList { get => packTaskList; set { Set(ref packTaskList, value); } }
//private ObservableCollection<FeesItemTypeDTO> feesItems;
///// <summary>
///// 动态数据表
///// </summary>
//public ObservableCollection<FeesItemTypeDTO> FeesItems { get => feesItems; set { Set(ref feesItems, value); } }
#endregion

24
BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs

@ -204,13 +204,8 @@ namespace BBWY.Client.ViewModels.PackTask
SomeArrivedCount = packTaskResult.Data.SomeArrivedCount;
WorryCount = packTaskResult.Data.WorryCount;
});
}
}
private void LoadIndex(int pageIndex)
{
PageIndex = pageIndex;//
@ -218,8 +213,6 @@ namespace BBWY.Client.ViewModels.PackTask
}
#region 事件绑定
/// <summary>
@ -275,7 +268,7 @@ namespace BBWY.Client.ViewModels.PackTask
taskStatus = 1;
break;
case Models.TaskState.:
taskStatus = 0;
IsWorry = 1;
break;
default:
@ -370,9 +363,6 @@ namespace BBWY.Client.ViewModels.PackTask
}));
}
}
else
{
@ -384,23 +374,14 @@ namespace BBWY.Client.ViewModels.PackTask
IsLoadCount();
IsLoading = false;
});
}
private void OpenSkuDetail(object param)
{
var paramList = (object[])param;
// var orderId = paramList[0].ToString();
var paramList = (object[])param;
var skuId = paramList[1].ToString();
var url = $"https://item.jd.com/{skuId}.html";
try
{
@ -411,7 +392,6 @@ namespace BBWY.Client.ViewModels.PackTask
Clipboard.SetText(url);
System.Windows.MessageBox.Show($"{ex.Message}\r\n调用浏览器失败,网页链接已复制到剪切板,请手动打开浏览器访问", "提示");
}
}

245
BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs

@ -0,0 +1,245 @@
using BBWY.Client.APIServices;
using BBWY.Client.Helpers;
using BBWY.Client.Models;
using BBWY.Common.Extensions;
using BBWY.Common.Http;
using BBWY.Common.Models;
using BBWY.Controls;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace BBWY.Client.ViewModels
{
public class ServiceOrderViewModel : BaseVM, IDenpendency
{
private ServiceOrderService serviceOrderService;
private IHttpClientFactory httpClientFactory;
private bool isLoading;
private ServiceOrderState? serviceOrderState;
private ReturnDirection? returnDirection;
private long serviceOrderCount;
private int pageIndex;
private int pageSize;
private string orderId;
private string spu;
private string sku;
private string serviceId;
private DateTime? startDate;
private DateTime? endDate;
public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } }
public ServiceOrderState? ServiceOrderState { get => serviceOrderState; set { Set(ref serviceOrderState, value); } }
public ReturnDirection? ReturnDirection { get => returnDirection; set { Set(ref returnDirection, value); } }
public ICommand SetServiceOrderStateCommand { get; set; }
public ICommand SetReturnDirectionCommand { get; set; }
public ICommand OnPageIndexChangedCommand { get; set; }
public ICommand CopyTextCommand { get; set; }
public ICommand SetSearchDateCommand { get; set; }
public ICommand SearchServiceOrderCommand { get; set; }
public ICommand NavigateToDetailCommand { get; set; }
public ICommand PreviewImgCommand { get; set; }
public IList<ServiceOrder> ServiceOrderList { get; set; }
public long ServiceOrderCount { get => serviceOrderCount; set { Set(ref serviceOrderCount, value); } }
public int PageIndex { get => pageIndex; set { Set(ref pageIndex, value); } }
public int PageSize { get => pageSize; set { Set(ref pageSize, value); } }
public string OrderId { get => orderId; set { Set(ref orderId, value); } }
public string Spu { get => spu; set { Set(ref spu, value); } }
public string Sku { get => sku; set { Set(ref sku, value); } }
public string ServiceId { get => serviceId; set { Set(ref serviceId, value); } }
public DateTime? StartDate { get => startDate; set { Set(ref startDate, value); } }
public DateTime? EndDate { get => endDate; set { Set(ref endDate, value); } }
public GlobalContext GlobalContext { get; set; }
public ServiceOrderViewModel(ServiceOrderService serviceOrderService, GlobalContext globalContext, IHttpClientFactory httpClientFactory)
{
this.httpClientFactory = httpClientFactory;
this.serviceOrderService = serviceOrderService;
SetServiceOrderStateCommand = new RelayCommand<ServiceOrderState?>(SetServiceOrderState);
SetReturnDirectionCommand = new RelayCommand<ReturnDirection?>(SetReturnDirection);
CopyTextCommand = new RelayCommand<string>(s => { try { Clipboard.SetText(s); } catch (Exception ex) { } });
SetSearchDateCommand = new RelayCommand<int>(SetSearchDate);
SearchServiceOrderCommand = new RelayCommand(InitQueryServiceOrder);
NavigateToDetailCommand = new RelayCommand<string>(NavigateToDetail);
OnPageIndexChangedCommand = new RelayCommand<PageArgs>(OnPageIndexChanged);
PreviewImgCommand = new RelayCommand<string>(PreviewImg);
ServiceOrderList = new ObservableCollection<ServiceOrder>() { new ServiceOrder(), new ServiceOrder(), new ServiceOrder() };
PageSize = 10;
GlobalContext = globalContext;
EndDate = DateTime.Now.Date;
StartDate = DateTime.Now.Date.AddDays(-15);
InitQueryServiceOrder();
}
private void InitQueryServiceOrder()
{
PageIndex = 1;
Task.Factory.StartNew(() => QueryServiceOrder(PageIndex));
}
private void SetSearchDate(int d)
{
EndDate = d == 1 ? DateTime.Now.Date.AddDays(-1) : DateTime.Now;
StartDate = DateTime.Now.Date.AddDays(d * -1);
InitQueryServiceOrder();
}
private void SetServiceOrderState(ServiceOrderState? state)
{
this.ServiceOrderState = state;
//query
InitQueryServiceOrder();
}
private void SetReturnDirection(ReturnDirection? returnDirection)
{
this.ReturnDirection = returnDirection;
//query
InitQueryServiceOrder();
}
private void QueryServiceOrder(int pageIndex)
{
IsLoading = true;
var response = serviceOrderService.GetList(OrderId, Sku, Spu, ServiceId, GlobalContext.User.Shop.ShopId.ToString(), ServiceOrderState, ReturnDirection, pageIndex, PageSize, StartDate, EndDate);
if (!response.Success)
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() =>
{
MessageBox.Show(response.Msg, "提示");
return;
});
}
IsLoading = false;
ServiceOrderCount = response.Data.Count;
App.Current.Dispatcher.Invoke(() => ServiceOrderList.Clear());
if (response.Data.Items == null || response.Data.Items.Count() == 0)
return;
var list = response.Data.Items.Map<IList<ServiceOrder>>();
App.Current.Dispatcher.Invoke(() =>
{
foreach (var s in list)
{
#region Test
//转换ImageName
if (int.Parse(s.ServiceId) % 2 == 0)
{
s.ProductPackage = ProductPackage.; s.ImageName = "20230317071208762563,8d58b491-7859-4187-9f43-4fd177a0f25f,b0df0763-9cf4-40ca-a1fc-57695e4b8d33";
}
s.Init();
#endregion
ServiceOrderList.Add(s);
}
});
}
private void NavigateToDetail(string serviceId)
{
var url = $"https://sh.shop.jd.com/afs/detail/waitReceive?afsApplyId=undefined&afsServiceId={serviceId}";
try
{
//System.Diagnostics.Process.Start("explorer.exe", url);
ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL);
}
catch (Exception ex)
{
Clipboard.SetText(url);
MessageBox.Show($"{ex.Message}\r\n调用浏览器失败,网页链接已复制到剪切板,请手动打开浏览器访问", "提示");
}
}
private void OnPageIndexChanged(PageArgs pageArgs)
{
Task.Factory.StartNew(() => QueryServiceOrder(pageArgs.PageIndex));
}
private void PreviewImg(string thumbnailImg)
{
var fullUrl = thumbnailImg.Substring(0, thumbnailImg.IndexOf("?"));
var fileName = fullUrl.Substring(fullUrl.LastIndexOf("/") + 1);
var localPath = Path.Combine(Path.GetTempPath(), fileName);
if (!File.Exists(localPath))
{
IsLoading = true;
var downloader = new HttpDownloader(httpClientFactory);
downloader.OnDownloadComplated += (s, e) =>
{
IsLoading = false;
if (e.Error != null)
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show(e.Error.Message));
return;
}
CallWindowsPhoto(localPath);
};
Task.Factory.StartNew(() => downloader.DownloadFile(fullUrl, Path.GetTempPath(), fileName, null));
}
else
{
CallWindowsPhoto(localPath);
}
}
private void CallWindowsPhoto(string path)
{
//建立新的系统进程
try
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
//设置图片的真实路径和文件名
process.StartInfo.FileName = path;
//设置进程运行参数,这里以最大化窗口方法显示图片。
process.StartInfo.Arguments = "rundl132.exe C://WINDOWS//system32//shimgvw.dll,ImageView_Fullscreen";
//此项为是否使用Shell执行程序,因系统默认为true,此项也可不设,但若设置必须为true
process.StartInfo.UseShellExecute = true;
//此处可以更改进程所打开窗体的显示样式,可以不设
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.Start();
process.Close();
}
catch (Exception ex)
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show($"打开照片查看器失败 {ex.Message}"));
}
}
}
}

16
BBWY.Client/ViewModels/ViewModelLocator.cs

@ -85,6 +85,18 @@ namespace BBWY.Client.ViewModels
}
}
}
public ServiceOrderViewModel ServiceOrderList
{
get
{
using (var s = sp.CreateScope())
{
return s.ServiceProvider.GetRequiredService<ServiceOrderViewModel>();
}
}
}
public ConsumableViewModel Consumable
{
get
@ -157,8 +169,6 @@ namespace BBWY.Client.ViewModels
public CreatePackTaskViewModel CreateTaskView
{
get
{
using (var s = sp.CreateScope())
@ -169,7 +179,7 @@ namespace BBWY.Client.ViewModels
}
}
}
public ChoosePurchaseSchemeViewModel ChoosePurchaseScheme
{

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

@ -409,913 +409,7 @@
<local:OrderListControl x:Name="listbox_order" Grid.Row="6" Grid.RowSpan="2"
Visibility="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:Collapsed:Visible}"/>
<!--<Border Grid.Row="6" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2"
Visibility="{Binding Visibility,ElementName=listbox_order}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="351"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="商品信息" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="仓储类型" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购信息" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="成本信息" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="利润信息" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="物流信息" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="订单状态" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="备注信息" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="7"/>
</Grid>
</Border>
<ListBox x:Name="listbox_order"
Grid.Row="7"
ItemsSource="{Binding OrderList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,1,1,0"
Foreground="{StaticResource Text.Color}"
Visibility="{Binding IncludeAfterOrder,Converter={StaticResource objConverter},ConverterParameter=true:Collapsed:Visible}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_order,Converter={StaticResource widthConverter},ConverterParameter=-0}"
MinHeight="185">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Background="#F2F2F2" Grid.ColumnSpan="2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding OrderStartTime,StringFormat=yyyy-MM-dd HH:mm:ss}" VerticalAlignment="Center" Margin="5,0,0,0"/>
<TextBlock VerticalAlignment="Center" Text="订单号:" Margin="5,0,0,0" />
<c:BButton Content="{Binding Id}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding Id}" Margin="5,0,0,0"/>
<Border Width="1" Margin="5,5,0,5" Background="{StaticResource Border.Brush}"/>
<c:BButton x:Name="btn_decodeCommand" Content="解密收货信息" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.DecodeConsigneeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<StackPanel x:Name="txt_consignee" Margin="5,0,0,0" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="收货人:"/>
<TextBox Text="{Binding Consignee.ContactName}" Foreground="{StaticResource Text.Color}"
IsReadOnly="True" Background="Transparent" BorderThickness="0"/>
<TextBlock Text="联系电话:" Margin="5,0,0,0"/>
<TextBox Text="{Binding Consignee.Mobile}" Foreground="{StaticResource Text.Color}"
IsReadOnly="True" Background="Transparent" BorderThickness="0"/>
</StackPanel>
</StackPanel>
<Border VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox x:Name="listbox_orerSku" ItemsSource="{Binding ItemList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_orerSku}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
-->
<!--{Binding Logo}-->
<!--
<c:BAsyncImage UrlSource="{Binding Logo}"
Width="80" DecodePixelWidth="80"
VerticalAlignment="Top" Margin="0,5,0,0"/>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="0,5,0,5">
<TextBlock TextTrimming="CharacterEllipsis">
<TextBlock.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="{Binding Title}"/>
</ToolTip>
</TextBlock.ToolTip>
<Run Text="SKU名称:"/>
<Run Text="{Binding Title}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap">
<Run Text="单价:"/>
<Run Text="{Binding Price}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap">
<Run Text="数量:"/>
<Run Text="{Binding ItemTotal}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Text="SPU:"/>
<c:BButton Content="{Binding ProductId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding ProductId}"
Margin=" 5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="SKU:"/>
<c:BButton Content="{Binding Id}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding Id}"
Margin=" 5,0,0,0"/>
</StackPanel>
</StackPanel>
<c:BButton Content="修改售后" Padding="5,0" Margin="5,0,0,0" Background="{StaticResource Text.Pink}"
Visibility="{Binding DataContext.IsAfterSaleOrder,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}},Converter={StaticResource objConverter},ConverterParameter=true:Visible:Collapsed}"
Command="{Binding DataContext.FindAfterSaleOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}">
<c:BButton.CommandParameter>
<MultiBinding Converter="{StaticResource mptConverter}">
<Binding Path="DataContext.Id" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox},AncestorLevel=1}"/>
<Binding Path="Id"/>
<Binding Path="DataContext.OrderStartTime" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox},AncestorLevel=1}"/>
</MultiBinding>
</c:BButton.CommandParameter>
</c:BButton>
</StackPanel>
<TextBlock>
<Run Text="货号:" />
<Run Text="{Binding ProductItemNum}"/>
</TextBlock>
<Border BorderBrush="{StaticResource Text.Pink}" BorderThickness="1" HorizontalAlignment="Left" Padding="5,2"
Visibility="{Binding IsRefund,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}">
<TextBlock Text="售后" Foreground="{StaticResource Text.Pink}"/>
</Border>
</StackPanel>
<Border Grid.ColumnSpan="2" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"
DataContext="{Binding DataContext,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
Visibility="{Binding ItemList.Count,Converter={StaticResource objConverter},ConverterParameter=1:Collapsed:Visible}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox x:Name="listbox_storageType" Grid.Column="1"
Style="{StaticResource NoScrollViewListBoxStyle}"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,0"
ItemsSource="{Binding Source={StaticResource storageTypeProvider}}"
SelectedItem="{Binding StorageType,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemContainerStyle>
<Style BasedOn="{StaticResource NoBgListBoxItemStyle}" TargetType="ListBoxItem">
<Setter Property="IsEnabled">
<Setter.Value>
<MultiBinding Converter="{StaticResource ostConverter}">
<MultiBinding.Bindings>
<Binding Path="."/>
<Binding Path="DataContext.StorageType" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox},AncestorLevel=1}"/>
</MultiBinding.Bindings>
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
-->
<!--<Grid x:Name="grid_storageType"
Width="{Binding ActualWidth,ElementName=listbox_storageType}"
Margin="5" Height="25"
Background="{StaticResource Button.Normal.Background}">
<TextBlock x:Name="txt_storageType" Text="{Binding }" HorizontalAlignment="Center" VerticalAlignment="Center"
Margin="0,0,7,0"/>
</Grid>-->
<!--
<c:BButton x:Name="btn_storageType" Content="{Binding }"
Width="{Binding ActualWidth,ElementName=listbox_storageType}"
Margin="5,5,5,0" Height="25"
Background="{StaticResource Button.Normal.Background}"
Foreground="{StaticResource Text.Color}"
DisableText="{Binding Content,RelativeSource={RelativeSource Mode=Self}}"
Command="{Binding DataContext.ChooseStorageTypeCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}">
<c:BButton.CommandParameter>
<MultiBinding Converter="{StaticResource mptConverter}">
<Binding Path="DataContext.Id" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox},AncestorLevel=1}"/>
<Binding Path="."/>
</MultiBinding>
</c:BButton.CommandParameter>
</c:BButton>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}}}"
Value="True">
<Setter TargetName="btn_storageType" Property="Background" Value="{StaticResource Button.Selected.Background}"/>
<Setter TargetName="btn_storageType" Property="Foreground" Value="White"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox x:Name="listbox_df" Grid.Column="2"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
ItemsSource="{Binding OrderDropShippingList}"
Visibility="Collapsed"
VerticalAlignment="Center"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Grid.Column="2" VerticalAlignment="Center"
HorizontalAlignment="Center" Margin="10,0,0,10">
<TextBlock>
<Run Text="采购平台"/>
<Run Text="{Binding PurchasePlatform}"/>
</TextBlock>
<TextBlock>
<Run Text="买家账号"/>
<Run Text="{Binding BuyerAccount}"/>
</TextBlock>
<TextBlock ToolTip="{Binding SellerAccount}">
<Run Text="卖家账号"/>
<Run Text="{Binding SellerAccount}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="采购单号"/>
<c:BButton Content="{Binding PurchaseOrderId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding PurchaseOrderId}"
Margin="3,0,0,0"/>
</StackPanel>
<TextBlock>
<Run Text="采购成本"/>
<Run Text="{Binding PurchaseAmount}"/>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="2" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="3" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="4" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="5" HorizontalAlignment="Right"/>
<Border Width="1" Background="{StaticResource Border.Brush}" Grid.Column="6" HorizontalAlignment="Right"/>
<Border x:Name="bd_costbg" Background="#FCECEE" Grid.Column="3"
Visibility="{Binding IsCostException,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}" Margin="0,0,1,0"/>
<StackPanel Grid.Column="3" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock>
<Run Text="实收金额"/>
<Run Text="{Binding ActualAmount,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"/>
</TextBlock>
<Path Style="{StaticResource path_question}" Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<StackPanel>
<TextBlock>
<Run Text="货款金额"/>
<Run Text="{Binding OrderSellerPrice}"/>
</TextBlock>
<TextBlock>
<Run Text="用户支付运费"/>
<Run Text="{Binding FreightPrice}"/>
</TextBlock>
</StackPanel>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock Visibility="{Binding OrderCost.RefundAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"
Foreground="Red">
<Run Text="退款金额"/>
<Run Text="{Binding OrderCost.RefundAmount}"/>
</TextBlock>
<TextBlock Visibility="{Binding OrderCost.RefundPurchaseAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"
Foreground="Red">
<Run Text="采购退款"/>
<Run Text="{Binding OrderCost.RefundPurchaseAmount}"/>
</TextBlock>
<StackPanel x:Name="sp_orderCoupon" Orientation="Horizontal">
<TextBlock>
<Run Text="优惠金额"/>
<Run Text="{Binding PreferentialAmount}"/>
</TextBlock>
<Path Style="{StaticResource path_question}" Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<ListBox ItemsSource="{Binding OrderCouponList}"
Style="{StaticResource NoScrollViewListBoxStyle}" Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Run Text="{Binding CouponType}"/>
<Run Text="{Binding CouponPrice,StringFormat=¥{0}}"/>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel x:Name="sp_purchaseAmount" Orientation="Horizontal">
<TextBlock>
<Run Text="采购成本"/>
<Run Text="{Binding OrderCost.BeforeTotalCost}"/>
</TextBlock>
<Path x:Name="path_purchaseAmount_question"
Style="{StaticResource path_question}"
Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}"
ToolTipService.InitialShowDelay="0"
ToolTipService.ShowDuration="20000">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock x:Name="txt_isManualed" Text="该订单成本经过手动编辑"
Style="{StaticResource middleTextBlock}"
Foreground="Red"
Visibility="{Binding OrderCost.IsManualEdited,Converter={StaticResource objConverter},ConverterParameter=true:Visible:Collapsed}"/>
<ListBox Grid.Row="1"
ItemsSource="{Binding OrderCostDetailGroupList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding SkuId,StringFormat=SKU {0}}" VerticalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid Background="{StaticResource Border.Background}" Grid.RowSpan="2">
<TextBlock Text="库存流水" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.ColumnSpan="2">
<TextBlock Text="商品成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.ColumnSpan="6">
<TextBlock Text="期间成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="9" Grid.RowSpan="2">
<TextBlock Text="小计成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="10" Grid.RowSpan="2">
<TextBlock Text="扣减时间" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.Row="1">
<TextBlock Text="货款成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="2" Grid.Row="1">
<TextBlock Text="采购运费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.Row="1">
<TextBlock Text="头程费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="4" Grid.Row="1">
<TextBlock Text="打包耗材" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="5" Grid.Row="1">
<TextBlock Text="快递费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="6" Grid.Row="1">
<TextBlock Text="入库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="7" Grid.Row="1">
<TextBlock Text="出库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="8" Grid.Row="1">
<TextBlock Text="仓储费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Border Grid.RowSpan="2" Grid.ColumnSpan="11" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1"/>
<Border Width="1" HorizontalAlignment="Right" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="2" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="3" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="4" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="5" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="6" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="7" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="8" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="9" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.Column="1" Grid.ColumnSpan="8" Background="{StaticResource Border.Brush}"/>
</Grid>
<ListBox Grid.Row="2"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,0,1,0"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding PurchaseOrderPKId}" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SkuAmount}" Grid.Column="1" Style="{StaticResource middleTextBlock}"
Visibility="{Binding SkuAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding PurchaseFreight}" Grid.Column="2" Style="{StaticResource middleTextBlock}"
Visibility="{Binding PurchaseFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding FirstFreight}" Grid.Column="3" Style="{StaticResource middleTextBlock}"
Visibility="{Binding FirstFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding ConsumableAmount}" Grid.Column="4" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ConsumableAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding DeliveryExpressFreight}" Grid.Column="5" Style="{StaticResource middleTextBlock}"
Visibility="{Binding DeliveryExpressFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding InStorageAmount}" Grid.Column="6" Style="{StaticResource middleTextBlock}"
Visibility="{Binding InStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding OutStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"
Visibility="{Binding OutStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding StorageAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"
Visibility="{Binding StorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding TotalCost2,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Grid.Column="1" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="2" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="3" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="4" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="6" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="7" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="8" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="9" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.ColumnSpan="11" Background="{StaticResource Border.Brush}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
-->
<!--<TextBlock Text="汇总" Grid.Row="2"/>
<Grid Grid.Row="3">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>-->
<!--
</Grid>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel x:Name="sp_afterSaleOrder" Orientation="Horizontal"
Visibility="{Binding OrderCost.AfterTotalCost,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}">
<TextBlock>
<Run Text="售后成本"/>
<Run Text="{Binding OrderCost.AfterTotalCost}"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}"
ToolTipService.InitialShowDelay="0"
ToolTipService.ShowDuration="10000">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ListBox ItemsSource="{Binding AfterSaleOrderGroupList}"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding SkuId,StringFormat=SKU {0}}" VerticalAlignment="Center"/>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid Background="{StaticResource Border.Background}" Grid.RowSpan="2">
<TextBlock Text="服务单号" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.ColumnSpan="2">
<TextBlock Text="商品成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.ColumnSpan="6">
<TextBlock Text="期间成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="9" Grid.ColumnSpan="3">
<TextBlock Text="售后耗损" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="1" Grid.Row="1">
<TextBlock Text="货款成本" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="2" Grid.Row="1">
<TextBlock Text="采购运费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="3" Grid.Row="1">
<TextBlock Text="头程费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="4" Grid.Row="1">
<TextBlock Text="打包耗材" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="5" Grid.Row="1">
<TextBlock Text="快递费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="6" Grid.Row="1">
<TextBlock Text="入库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="7" Grid.Row="1">
<TextBlock Text="出库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="8" Grid.Row="1">
<TextBlock Text="仓储费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="9" Grid.Row="1">
<TextBlock Text="退货入仓" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="10" Grid.Row="1">
<TextBlock Text="售后补偿" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="11" Grid.Row="1">
<TextBlock Text="SD退货" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="12" Grid.RowSpan="2">
<TextBlock Text="售后小计" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="13" Grid.RowSpan="2">
<TextBlock Text="退款到账" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Border Grid.RowSpan="2" Grid.ColumnSpan="14" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1"/>
<Border Width="1" HorizontalAlignment="Right" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="1" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="2" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="3" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="4" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="5" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="6" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="7" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="8" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="9" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="10" Grid.Row="1" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="11" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Grid.Column="12" Grid.RowSpan="2" Background="{StaticResource Border.Brush}"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.Column="1" Grid.ColumnSpan="11" Background="{StaticResource Border.Brush}"/>
</Grid>
<ListBox Grid.Row="2"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,0,1,0"
Style="{StaticResource NoScrollViewListBoxStyle}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="25">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding ServiceId}" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding ReissueProductAmount}" Grid.Column="1" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ReissueProductAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding ReissueFreight}" Grid.Column="2" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ReissueFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding FirstFreight}" Grid.Column="3" Style="{StaticResource middleTextBlock}"
Visibility="{Binding FirstFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding ConsumableAmount}" Grid.Column="4" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ConsumableAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding DeliveryExpressFreight}" Grid.Column="5" Style="{StaticResource middleTextBlock}"
Visibility="{Binding DeliveryExpressFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding InStorageAmount}" Grid.Column="6" Style="{StaticResource middleTextBlock}"
Visibility="{Binding InStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding OutStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"
Visibility="{Binding OutStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding StorageAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"
Visibility="{Binding StorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding RefundInStorageAmount}" Grid.Column="9" Style="{StaticResource middleTextBlock}"
Visibility="{Binding RefundInStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding ReissueAfterSaleAmount}" Grid.Column="10" Style="{StaticResource middleTextBlock}"
Visibility="{Binding ReissueAfterSaleAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding SDRefundFreight}" Grid.Column="11" Style="{StaticResource middleTextBlock}"
Visibility="{Binding SDRefundFreight,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding AfterTotalCost}" Grid.Column="12" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding RefundPurchaseAmount}" Grid.Column="13" Style="{StaticResource middleTextBlock}"
Visibility="{Binding RefundPurchaseAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Grid.Column="1" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="2" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="3" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="4" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="6" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="7" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="8" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="9" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="10" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="11" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Grid.Column="12" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Margin="0,0,-1,0"/>
<Border Height="1" VerticalAlignment="Bottom" Grid.ColumnSpan="14" Background="{StaticResource Border.Brush}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
-->
<!--<TextBlock Text="汇总" Grid.Row="2"/>
<Grid Grid.Row="3">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
</Grid>-->
<!--
</Grid>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock>
<Run Text="平台扣点"/>
<Run Text="{Binding OrderCost.PlatformCommissionAmount}"/>
<Run Text="{Binding OrderCost.PlatformCommissionRatio,StringFormat=({0:P})}"/>
</TextBlock>
<TextBlock x:Name="txt_sdCommissionAmount">
<Run Text="{Binding SDType,Converter={StaticResource objConverter},ConverterParameter=自刷:空单号/刷单号:SD佣金}"/>
<Run Text="{Binding OrderCost.SDCommissionAmount}"/>
</TextBlock>
<TextBlock>
<Run Text="成本总计"/>
<Run Text="{Binding OrderCost.TotalCost,Mode=OneWay}"/>
</TextBlock>
</StackPanel>
<Border Height="1" Background="{StaticResource Border.Brush}" Grid.Column="3" VerticalAlignment="Bottom" Margin="0,0,0,23"
Visibility="{Binding Visibility,ElementName=btn_editCost}"/>
<c:BButton x:Name="btn_editCost" Content="修改" Grid.Column="3" VerticalAlignment="Bottom"
Foreground="{StaticResource Text.Color}"
HorizontalAlignment="Stretch"
Background="White"
Margin="0,0,1,0"
Command="{Binding DataContext.EditCostCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }"
Visibility="{Binding StorageType,Converter={StaticResource objConverter},ConverterParameter=#null:Collapsed:Visible}"
Height="23"/>
<StackPanel Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock>
<Run Text="利润"/>
<Run Text="{Binding OrderCost.Profit}"/>
</TextBlock>
<TextBlock>
<Run Text="利润率"/>
<Run Text="{Binding OrderCost.ProfitRatio,StringFormat=\{0\}%}"/>
</TextBlock>
</StackPanel>
<Grid x:Name="sp_store" Grid.Column="5">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock x:Name="txt_storeName"
Text="{Binding StoreName}"
TextWrapping="Wrap"
HorizontalAlignment="Center"
Visibility="{Binding StoreName,Converter={StaticResource objConverter},ConverterParameter=#null|0:Collapsed:Visible}"/>
<StackPanel x:Name="sp_waybill" Orientation="Horizontal">
<TextBlock Text="{Binding WaybillNo,Converter={StaticResource waybillConverter}}"/>
<c:BButton x:Name="btn_waybillCopy" Style="{StaticResource LinkButton}"
Content="复制"
Command="{Binding DataContext.CopyOrderWaybillCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }" Margin="5,0,0,0"/>
</StackPanel>
</StackPanel>
<c:BButton x:Name="btn_outStore" Content="出库" VerticalAlignment="Bottom"
Foreground="{StaticResource Text.Color}"
HorizontalAlignment="Stretch"
Background="White"
Margin="0,0,1,0"
Height="25"
Visibility="Collapsed"
Command="{Binding DataContext.OutStockCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Height="1" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom" Margin="0,0,0,25"
Visibility="{Binding Visibility,ElementName=btn_outStore}"/>
</Grid>
<TextBlock Text="{Binding OrderState}" Grid.Column="6"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
<StackPanel Orientation="Vertical" Grid.Column="7" Margin="5,5,5,0">
<StackPanel x:Name="sp_buyerRemark">
<StackPanel Orientation="Horizontal">
<TextBlock Text="买家备注"/>
<c:BButton Content="复制" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding BuyerRemark}"/>
</StackPanel>
<TextBlock Text="{Binding BuyerRemark}" TextWrapping="Wrap"/>
</StackPanel>
<StackPanel x:Name="sp_venderRemark" Margin="0,5,0,0">
<StackPanel Orientation="Horizontal">
<TextBlock Text="商家备注"/>
<c:BButton x:Name="btn_copyVenderRemark" Content="复制" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding VenderRemark}"/>
<c:BButton Content="修改" Style="{StaticResource LinkButton}" Margin="5,0,0,0"
Command="{Binding DataContext.EditVenderRemarkCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Path x:Name="path_flag" Style="{StaticResource path_flag}" Width="16"
Fill="{Binding Flag}"/>
<TextBlock TextWrapping="Wrap" Text="{Binding VenderRemark}"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Grid>
<Border Grid.Row="1" VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding WaybillNo}" Value="">
<Setter TargetName="sp_waybill" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding WaybillNo}" Value="-10000">
<Setter TargetName="btn_waybillCopy" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
-->
<!--<DataTrigger Binding="{Binding StoreName}" Value="">
<Setter TargetName="txt_storeName" Property="Visibility" Value="Collapsed"/>
</DataTrigger>-->
<!--
<DataTrigger Binding="{Binding BuyerRemark}" Value="">
<Setter TargetName="sp_buyerRemark" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding VenderRemark}" Value="">
<Setter TargetName="btn_copyVenderRemark" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Consignee.IsDecode}" Value="True">
<Setter Property="Visibility" Value="Visible" TargetName="txt_consignee"/>
<Setter Property="Visibility" Value="Collapsed" TargetName="btn_decodeCommand"/>
</DataTrigger>
<DataTrigger Binding="{Binding PreferentialAmount}" Value="0">
<Setter TargetName="sp_orderCoupon" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding OrderCost.PurchaseAmount}" Value="0">
<Setter TargetName="path_purchaseAmount_question" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Flag}" Value="{x:Null}">
<Setter TargetName="path_flag" Property="Fill" Value="{x:Null}"/>
<Setter TargetName="path_flag" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding OrderCost.SDCommissionAmount}" Value="0">
<Setter TargetName="txt_sdCommissionAmount" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
-->
<!--<DataTrigger Binding="{Binding StorageType}" Value="SD">
<Setter TargetName="sp_purchaseAmount" Property="Visibility" Value="Collapsed"/>
</DataTrigger>-->
<!--
<DataTrigger Binding="{Binding StorageType}" Value="代发">
<Setter TargetName="listbox_df" Property="Visibility" Value="Visible"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding StorageType}" Value="代发"/>
<Condition Binding="{Binding OrderState}" Value="待出库"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter TargetName="btn_outStore" Property="Visibility" Value="Visible"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>-->
<Border Grid.Row="6" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2"
@ -1670,14 +764,6 @@
</b:EventTrigger>
</b:Interaction.Triggers>
</c:PageControl>
<!--<TextBlock Grid.Row="8"
HorizontalAlignment="Right" VerticalAlignment="Center"
Margin="0,0,5,0"
Visibility="{Binding Visibility,ElementName=listbox_order}">
<Run Text="当前条件利润汇总"/>
<Run Text="{Binding CurrentConditionsTotalProfit,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</TextBlock>-->
</Grid>
</Grid>
</Page>

2
BBWY.Client/Views/PackTask/CreatePackTask.xaml

@ -13,7 +13,7 @@
xmlns:sys="clr-namespace:System;assembly=mscorlib"
CloseButtonVisibility="Visible"
CloseButtonColor="{StaticResource WindowButtonColor}"
DataContext="{Binding CreateTaskView,Source={StaticResource Locator}}"
DataContext="{Binding CreateTaskView,Source={StaticResource Locator}}"
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0"

6
BBWY.Client/Views/PackTask/LookBarCodeWindow.xaml

@ -7,7 +7,7 @@
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask"
mc:Ignorable="d"
Style="{StaticResource bwstyle}"
Height="259" Width="320"
Height="240" Width="320"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:ctr="clr-namespace:BBWY.Client.Converters"
xmlns:cmodel="clr-namespace:BBWY.Client.Models"
@ -16,7 +16,9 @@
CloseButtonColor="{StaticResource WindowButtonColor}"
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0">
RightButtonGroupMargin="0,5,5,0"
ResizeMode="NoResize"
>
<!-- DataContext="{Binding CreateSetBarCodeView,Source={StaticResource Locator}}"-->
<Grid>
<Grid.RowDefinitions>

6
BBWY.Client/Views/PackTask/LookCerWindow.xaml

@ -7,7 +7,7 @@
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask"
mc:Ignorable="d"
Style="{StaticResource bwstyle}"
Height="357" Width="386"
Height="340" Width="382"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:ctr="clr-namespace:BBWY.Client.Converters"
xmlns:cmodel="clr-namespace:BBWY.Client.Models"
@ -16,7 +16,9 @@
CloseButtonColor="{StaticResource WindowButtonColor}"
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0">
RightButtonGroupMargin="0,5,5,0"
ResizeMode="NoResize"
>
<!-- DataContext="{Binding CreateSetBarCodeView,Source={StaticResource Locator}}"-->
<Grid>
<Grid.RowDefinitions>

9
BBWY.Client/Views/PackTask/PersonList.xaml

@ -1,20 +1,19 @@
<Page x:Class="BBWY.Client.Views.PackTask.PersonList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:ctr="clr-namespace:BBWY.Client.Converters"
xmlns:cmodel="clr-namespace:BBWY.Client.Models"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
DataContext="{Binding WareHouseList,Source={StaticResource Locator}}"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="2048"
Title="TaskList">
<Page.Resources>
<sys:Int32 x:Key="d0">0</sys:Int32>
<sys:Int32 x:Key="d1">1</sys:Int32>
<sys:Int32 x:Key="d3">2</sys:Int32>

2
BBWY.Client/Views/PackTask/PrintWindow.xaml

@ -17,7 +17,7 @@
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0">
<!-- DataContext="{Binding CreateSetBarCodeView,Source={StaticResource Locator}}"-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="39"/>

54
BBWY.Client/Views/PackTask/PrintWindow.xaml.cs

@ -30,7 +30,7 @@ namespace BBWY.Client.Views.PackTask
{
InitializeComponent();
var printingNames = System.Drawing.Printing.PrinterSettings.InstalledPrinters;//获取本机的打印机数据
var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据
int index = -1;
int selectIndex = 0;
foreach (string name in printingNames)
@ -58,7 +58,7 @@ namespace BBWY.Client.Views.PackTask
/// </summary>
public void LoadData()
{
if (certificateModel==null)
if (CertificateModel==null)
{
cer.Visibility = Visibility.Collapsed;
}
@ -69,20 +69,20 @@ namespace BBWY.Client.Views.PackTask
CertificateModel data = new CertificateModel
{
Brand = certificateModel.Brand,
BrandName = certificateModel.BrandName,
ExcuteStander = certificateModel.ExcuteStander,
FactoryNumber = certificateModel.FactoryNumber,
IsLogo = certificateModel.IsLogo,
LabelModel = certificateModel.LabelModel,
ProductAdress = certificateModel.ProductAdress,
Id = certificateModel.Id,
ProductDate = certificateModel.ProductDate,
ProductNo = certificateModel.ProductNo,
ProductShop = certificateModel.ProductShop,
Shader = certificateModel.Shader,
SkuId = certificateModel.SkuId,
Reseller = certificateModel.Reseller
Brand = CertificateModel.Brand,
BrandName = CertificateModel.BrandName,
ExcuteStander = CertificateModel.ExcuteStander,
FactoryNumber = CertificateModel.FactoryNumber,
IsLogo =CertificateModel.IsLogo,
LabelModel = CertificateModel.LabelModel,
ProductAdress = CertificateModel.ProductAdress,
Id = CertificateModel.Id,
ProductDate = CertificateModel.ProductDate,
ProductNo = CertificateModel.ProductNo,
ProductShop = CertificateModel.ProductShop,
Shader = CertificateModel.Shader,
SkuId = CertificateModel.SkuId,
Reseller = CertificateModel.Reseller
};
StringBuilder sb = new StringBuilder();
@ -116,7 +116,7 @@ namespace BBWY.Client.Views.PackTask
}
}
if (barCodeModel == null)
if (BarCodeModel == null)
{
bar.Visibility = Visibility.Collapsed;
}
@ -124,8 +124,8 @@ namespace BBWY.Client.Views.PackTask
{
bar.Visibility = Visibility.Visible;
cer.Visibility = Visibility.Collapsed;
this.DataContext = barCodeModel;
if (barCodeModel.LabelModel == BarcodeLabelModel.barsimplify)
this.DataContext = BarCodeModel;
if (BarCodeModel.LabelModel == BarcodeLabelModel.barsimplify)
{//精简版
jingjian.Visibility = Visibility.Visible;
biaozhun.Visibility = Visibility.Collapsed;
@ -138,13 +138,13 @@ namespace BBWY.Client.Views.PackTask
}
}
public CertificateModel certificateModel { get; set; }
public CertificateModel CertificateModel { get; set; }
public BarCodeModel barCodeModel { get; set; }
public BarCodeModel BarCodeModel { get; set; }
public string LabelName { get; set; }
// public string LabelName { get; set; }
public Dictionary<string, string> Datas { get; set; }
//public Dictionary<string, string> Datas { get; set; }
private void BButton_Click(object sender, RoutedEventArgs e)
{
@ -185,13 +185,13 @@ namespace BBWY.Client.Views.PackTask
Font font = new Font("宋体", 6, System.Drawing.FontStyle.Regular);
if (barCodeModel!=null)
if (BarCodeModel != null)
{
MyPrintHelper.PrintBarcode(ref args, barCodeModel, font);
MyPrintHelper.PrintBarcode(ref args, BarCodeModel, font);
}
if (certificateModel!=null)
if (CertificateModel !=null)
{
MyPrintHelper.PrintCertificate(ref args, certificateModel, font);
MyPrintHelper.PrintCertificate(ref args, CertificateModel, font);
}
}

9
BBWY.Client/Views/PackTask/ServiceWindow.xaml

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask"
mc:Ignorable="d"
Title="TipsWindow" Height="769" Width="350"
Title="TipsWindow" Height="769" Width="360"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:ctr="clr-namespace:BBWY.Client.Converters"
@ -14,7 +14,6 @@
CloseButtonVisibility="Visible"
WindowStartupLocation="CenterScreen"
CloseButtonColor="{StaticResource WindowButtonColor}"
MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0">
@ -161,8 +160,8 @@
<TextBlock Text="耗材项目" Margin="19,20,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" />
<Border Background="Black" HorizontalAlignment="Left" VerticalAlignment="Top" Width="217" Margin="77,27,0,0" Height="1"/>
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="240" Margin="19,56,0,0" Height="1"/>
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="240" Margin="19,86,0,0" Height="1"/>
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="260" Margin="19,56,0,0" Height="1"/>
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="260" Margin="19,86,0,0" Height="1"/>
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="1" Margin="19,56,0,0" Height="30" />
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="1" Margin="135,56,0,0" Height="30" />
<Border Background="{StaticResource Border.Brush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="1" Margin="239,56,0,0" Height="30" />
@ -224,7 +223,7 @@
<c:BButton Grid.Row="2" Content="确定" HorizontalAlignment="Right" Width="100" VerticalAlignment="Stretch"
<c:BButton Grid.Row="2" Content="确定" Margin="0 0 20 0" HorizontalAlignment="Right" Width="100" VerticalAlignment="Stretch"
Command="{Binding UpLoadPackCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
/>

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

@ -0,0 +1,470 @@
<Page x:Class="BBWY.Client.Views.ServiceOrder.ServiceOrderList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:BBWY.Client.Views.ServiceOrder"
xmlns:cmodel="clr-namespace:BBWY.Client.Models"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="1920"
Title="ServiceOrderList"
DataContext="{Binding ServiceOrderList,Source={StaticResource Locator}}">
<Page.Resources>
<sys:Int32 x:Key="d0">0</sys:Int32>
<sys:Int32 x:Key="d1">1</sys:Int32>
<sys:Int32 x:Key="d3">2</sys:Int32>
<sys:Int32 x:Key="d7">6</sys:Int32>
<sys:Int32 x:Key="d15">14</sys:Int32>
<sys:Int32 x:Key="d30">29</sys:Int32>
<sys:Int32 x:Key="ddaishouhuo">10005</sys:Int32>
<sys:Int32 x:Key="dyiwancheng">10010</sys:Int32>
</Page.Resources>
<Grid>
<c:RoundWaitProgress Play="{Binding IsLoading}" Panel.ZIndex="999"/>
<Grid Margin="5,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition Height="5"/>
<RowDefinition Height="30"/>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<Grid Background="{StaticResource Border.Background}" HorizontalAlignment="Left" Height="75" Panel.ZIndex="999">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="5"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0" Height="30">
<StackPanel.Resources>
<Style TargetType="DatePickerTextBox">
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</StackPanel.Resources>
<TextBlock Text="下单时间" VerticalAlignment="Center" Margin="5,0,0,0"/>
<DatePicker SelectedDate="{Binding StartDate}" Width="133.5" Height="30" VerticalContentAlignment="Center" FocusVisualStyle="{x:Null}" Margin="5,0,0,0"/>
<DatePicker SelectedDate="{Binding EndDate}" Width="133.5" Height="30" VerticalContentAlignment="Center" FocusVisualStyle="{x:Null}" Margin="5,0,0,0"/>
<TextBlock Text="订单号" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding OrderId}" WaterRemark="精确匹配"/>
<TextBlock Text="SPU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" WaterRemark="精确匹配" Text="{Binding ProductId}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="2" Margin="0,0,0,5" Height="30">
<c:BButton Content="今天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d0}"/>
<c:BButton Content="昨天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d1}"/>
<c:BButton Content="近3天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d3}"/>
<c:BButton Content="近7天" Width="50" Height="24" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d7}"/>
<c:BButton Content="近15天" Width="50" Height="25" Margin="5,0,0,0"
Command="{Binding SetSearchDateCommand}"
CommandParameter="{StaticResource d15}"/>
<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"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding ServiceId}" WaterRemark="精确匹配"/>
<TextBlock Text="SKU" VerticalAlignment="Center" Margin="5,0,0,0"/>
<c:BTextBox Width="150" Margin="5,0,0,0" Text="{Binding Sku}" WaterRemark="精确匹配"/>
<c:BButton Content="同步" Width="50" Margin="5,0,0,0" Command="{Binding SyncOrderCommand}" ToolTipService.InitialShowDelay="0" ToolTipService.ShowDuration="10000"
Visibility="Collapsed">
<c:BButton.ToolTip>
<StackPanel>
<TextBlock Text="1.使用筛选条件中的开始时间和结束时间进行同步"/>
<TextBlock Text="2.从开始时间起每次同步3小时时长的订单直到到达结束时间"/>
<TextBlock Text="3.已存在未结束的同步任务将不会重复执行"/>
</StackPanel>
</c:BButton.ToolTip>
</c:BButton>
</StackPanel>
<Grid Grid.Column="1" Grid.RowSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="搜索" Width="50" VerticalAlignment="Stretch" Margin="5,0,0,0" Command="{Binding SearchServiceOrderCommand}"
Grid.RowSpan="2" Background="{StaticResource Button.Selected.Background}" BorderThickness="0" Foreground="White"/>
<Button Content="导出" Command="{Binding ExportCommand}" Width="50" Grid.Column="1"
Visibility="{Binding Visibility,ElementName=listbox_order}" Background="#1CC2A2" BorderThickness="0" Foreground="White"/>
<Button Content="同步" Command="{Binding SyncOrderCommand}" Width="50" Grid.Column="1" Grid.Row="1"
Visibility="{Binding Visibility,ElementName=listbox_order}" Background="#02A7F0" BorderThickness="0" Foreground="White"/>
</Grid>
</Grid>
<StackPanel Grid.Row="2" HorizontalAlignment="Left" Orientation="Horizontal">
<TextBlock Text="服务单状态" VerticalAlignment="Center"/>
<c:BButton Content="全部" Width="100" Margin="5,0,0,0"
Background="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=#null:#8080FF:#F2F2F2}"
Foreground="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=#null:White:#4A4A4A}"
Command="{Binding SetServiceOrderStateCommand}" CommandParameter="{x:Null}"/>
<c:BButton Content="待收货" Width="100"
Background="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=待收货:#8080FF:#F2F2F2}"
Foreground="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=待收货:White:#4A4A4A}"
Command="{Binding SetServiceOrderStateCommand}" CommandParameter="{x:Static cmodel:ServiceOrderState.待收货}"/>
<c:BButton Content="已完成" Width="100"
Background="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=已完成:#8080FF:#F2F2F2}"
Foreground="{Binding ServiceOrderState,Converter={StaticResource objConverter},ConverterParameter=已完成:White:#4A4A4A}"
Command="{Binding SetServiceOrderStateCommand}" CommandParameter="{x:Static cmodel:ServiceOrderState.已完成}"/>
<TextBlock Text="退货去向" VerticalAlignment="Center" Margin="30,0,0,0"/>
<c:BButton Content="全部" Width="100" Margin="5,0,0,0"
Background="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=#null:#8080FF:#F2F2F2}"
Foreground="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=#null:White:#4A4A4A}"
Command="{Binding SetReturnDirectionCommand}" CommandParameter="{x:Null}"/>
<c:BButton Content="退货仓" Width="100"
Background="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=退货仓:#8080FF:#F2F2F2}"
Foreground="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=退货仓:White:#4A4A4A}"
Command="{Binding SetReturnDirectionCommand}" CommandParameter="{x:Static cmodel:ReturnDirection.退货仓}"/>
<c:BButton Content="采购商" Width="100"
Background="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=采购商:#8080FF:#F2F2F2}"
Foreground="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=采购商:White:#4A4A4A}"
Command="{Binding SetReturnDirectionCommand}" CommandParameter="{x:Static cmodel:ReturnDirection.采购商}"/>
<c:BButton Content="原返" Width="100"
Background="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=原返:#8080FF:#F2F2F2}"
Foreground="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=原返:White:#4A4A4A}"
Command="{Binding SetReturnDirectionCommand}" CommandParameter="{x:Static cmodel:ReturnDirection.原返}"/>
<c:BButton Content="无退货" Width="100"
Background="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=无退货:#8080FF:#F2F2F2}"
Foreground="{Binding ReturnDirection,Converter={StaticResource objConverter},ConverterParameter=无退货:White:#4A4A4A}"
Command="{Binding SetReturnDirectionCommand}" CommandParameter="{x:Static cmodel:ReturnDirection.无退货}"/>
</StackPanel>
<Border Grid.Row="4" Background="{StaticResource Border.Background}">
<StackPanel Orientation="Horizontal">
<CheckBox Content="仅显示采购单未退款" VerticalContentAlignment="Center"/>
</StackPanel>
</Border>
<Border Grid.Row="6" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1,1,1,0"
Background="#F2F2F2"
Visibility="{Binding Visibility,ElementName=listbox_afterSaleOrder}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="360"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="190"/>
<ColumnDefinition/>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock Text="商品信息" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="退货去向" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="退货检查备注" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="商品情况" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购单" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="售后成本" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="退货物流" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="操作" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="1"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="2"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="3"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="4"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="5"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="6"/>
</Grid>
</Border>
<ListBox x:Name="listbox_serviceOrder"
Grid.Row="7"
ItemsSource="{Binding ServiceOrderList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
BorderBrush="{StaticResource Border.Brush}"
BorderThickness="1,1,1,0"
Foreground="{StaticResource Text.Color}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ActualWidth,ElementName=listbox_serviceOrder,Converter={StaticResource widthConverter},ConverterParameter=-0}">
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition />
</Grid.RowDefinitions>
<Grid Background="#F2F2F2">
<StackPanel Orientation="Horizontal">
<Border BorderBrush="{StaticResource Text.Pink}" BorderThickness="1"
Background="White"
Padding="10,0"
Height="25"
Margin="5,0,0,0">
<TextBlock Text="{Binding Status}"
Foreground="{StaticResource Text.Pink}"
VerticalAlignment="Center"/>
</Border>
<TextBlock Text="{Binding ApplyTime,StringFormat=yyyy-MM-dd HH:mm:ss}" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0">
<Run Text="服务单类型:"/>
<Run Text="{Binding ServiceResult}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Text="服务单号:" Margin="10,0,0,0" VerticalAlignment="Center"/>
<c:BButton Content="{Binding ServiceId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding ServiceId}" Margin="3,0,0,0"/>
<TextBlock VerticalAlignment="Center" Margin="10,0,0,0">
<Run Text="仓储类型:"/>
<Run Text="代发" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Text="订单号:" Margin="10,0,0,0" VerticalAlignment="Center"/>
<c:BButton Content="{Binding OrderId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding OrderId}" Margin="3,0,0,0"/>
</StackPanel>
<Border VerticalAlignment="Bottom" Height="1" Background="{StaticResource Border.Brush}"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="360"/>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="190"/>
<ColumnDefinition/>
<ColumnDefinition Width="100"/>
<ColumnDefinition/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="90"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<c:BAsyncImage UrlSource="{Binding Logo}"
Width="80" DecodePixelWidth="80"
VerticalAlignment="Top" Margin="0,5"/>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="0,5,0,5">
<TextBlock TextTrimming="CharacterEllipsis">
<TextBlock.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="{Binding Title}"/>
</ToolTip>
</TextBlock.ToolTip>
<Run Text="SKU名称:"/>
<Run Text="{Binding Title}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<TextBlock Text="SPU:"/>
<c:BButton Content="{Binding ProductId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding ProductId}"
Margin=" 5,0,0,0"/>
<TextBlock Text="SKU:" Margin="5,0,0,0"/>
<c:BButton Content="{Binding SkuId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}"
CommandParameter="{Binding SkuId}"
Margin=" 5,0,0,0"/>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock TextWrapping="Wrap">
<Run Text="单价:"/>
<Run Text="{Binding Price}"/>
</TextBlock>
<TextBlock TextWrapping="Wrap" Margin="5,0,0,0">
<Run Text="数量:"/>
<Run Text="{Binding ItemTotal}"/>
</TextBlock>
</StackPanel>
</StackPanel>
</Grid>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<TextBlock Text="{Binding ReturnDirection}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,20"/>
<Border Height="1" Background="{StaticResource Border.Brush}" Grid.Column="1" VerticalAlignment="Bottom" Margin="0,0,0,27"/>
<c:BButton Content="修改" VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Background="Transparent"
Foreground="{StaticResource Text.Color}"
Grid.Column="1"
Command="{Binding DataContext.EditAfterSaleOrderCommand,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"
TextWrapping="Wrap"/>
<Border Grid.Column="2" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<Grid Grid.Column="3">
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="0.5*"/>
</Grid.RowDefinitions>
<Grid Margin="5,5,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.55*"/>
<ColumnDefinition Width="0.45*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock
Visibility="{Binding IsShowProductInfo,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Run Text="商品状态:"/>
<Run Text="{Binding ProductHealth,ConverterParameter=#null:未填:#source,Converter={StaticResource objConverter}}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Grid.Column="1"
Visibility="{Binding IsShowProductInfo,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Run Text="商品功能:"/>
<Run Text="{Binding ProductFunction,ConverterParameter=#null:未填:#source,Converter={StaticResource objConverter}}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Grid.Row="1"
Visibility="{Binding IsShowProductInfo,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Run Text="商品外观:"/>
<Run Text="{Binding ProductAppearance,ConverterParameter=#null:未填:#source,Converter={StaticResource objConverter}}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
<TextBlock Grid.Row="1" Grid.Column="1"
Visibility="{Binding IsShowProductInfo,Mode=OneWay,UpdateSourceTrigger=PropertyChanged,ConverterParameter=true:Visible:Collapsed,Converter={StaticResource objConverter}}">
<Run Text="商品包装:"/>
<Run Text="{Binding ProductPackage,ConverterParameter=#null:未填:#source,Converter={StaticResource objConverter}}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</Grid>
<ListBox ItemsSource="{Binding ThumbnailImageList}"
ItemContainerStyle="{StaticResource NoBgListBoxItemStyle}"
Style="{StaticResource NoScrollViewListBoxStyle}"
Grid.Row="1">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="5,0,0,0" Cursor="Hand">
<c:BAsyncImage UrlSource="{Binding }"
DecodePixelWidth="35"
Width="35">
<b:Interaction.Triggers>
<b:EventTrigger EventName="PreviewMouseLeftButtonDown">
<b:InvokeCommandAction PassEventArgsToCommand="True"
CommandParameter="{Binding }"
Command="{Binding DataContext.PreviewImgCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"/>
</b:EventTrigger>
</b:Interaction.Triggers>
</c:BAsyncImage>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
<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}}">
<TextBlock>
<Run Text="采购平台:"/>
<Run Text="{Binding PurchasePlatform}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="采购订单号:"/>
<c:BButton Content="{Binding PurchaseOrderId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding PurchaseOrderId}" 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">
<TextBlock>
<Run Text="总耗损"/>
<Run Text="{Binding AfterTotalCost}"/>
</TextBlock>
<Path Style="{StaticResource path_question}" Width="14" Margin="5,0,0,0" Fill="{StaticResource Text.Pink}">
</Path>
</StackPanel>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<StackPanel Grid.Column="6" VerticalAlignment="Center" Margin="5,0,0,0"
Visibility="{Binding WayBillNo,ConverterParameter=#null:Collapsed:Visible,Converter={StaticResource objConverter}}">
<TextBlock>
<Run Text="物流状态:"/>
<Run Text="{Binding TransportDetails}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ExpressName,StringFormat=\{0\}:}"/>
<c:BButton Content="{Binding WayBillNo}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding WayBillNo}" Margin="3,0,0,0"/>
</StackPanel>
</StackPanel>
<Border Grid.Column="6" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<StackPanel Orientation="Horizontal" Grid.Column="7" HorizontalAlignment="Center">
<c:BButton Style="{StaticResource LinkButton}" Content="查看详情"
Command="{Binding DataContext.NavigateToDetailCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding ServiceId}"/>
</StackPanel>
</Grid>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<c:PageControl PageIndex="{Binding PageIndex}"
PageSize="{Binding PageSize}"
RecordCount="{Binding ServiceOrderCount}"
Grid.Row="8"
HorizontalAlignment="Left">
<b:Interaction.Triggers>
<b:EventTrigger EventName="OnPageIndexChanged">
<b:InvokeCommandAction Command="{Binding OnPageIndexChangedCommand}" PassEventArgsToCommand="True"/>
</b:EventTrigger>
</b:Interaction.Triggers>
</c:PageControl>
</Grid>
</Grid>
</Page>

26
BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml.cs

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BBWY.Client.Views.ServiceOrder
{
/// <summary>
/// ServiceOrderList.xaml 的交互逻辑
/// </summary>
public partial class ServiceOrderList : Page
{
public ServiceOrderList()
{
InitializeComponent();
}
}
}

20
BBWY.Server.API/Controllers/OrderSyncController.cs

@ -59,7 +59,7 @@ namespace BBWY.Server.API.Controllers
}
/// <summary>
/// 订单推送
/// 接收订单推送
/// </summary>
/// <param name="request"></param>
[HttpPost]
@ -67,5 +67,23 @@ namespace BBWY.Server.API.Controllers
{
orderSyncBusiness.OrderPublish(request);
}
/// <summary>
/// 检查全店暂停订单
/// </summary>
[HttpPost]
public void CheckJDPauseOrder()
{
orderSyncBusiness.CheckJDPauseOrder(null);
}
/// <summary>
/// 检查全店暂停订单
/// </summary>
[HttpPost("{shopId}")]
public void CheckJDPauseOrder(long shopId)
{
orderSyncBusiness.CheckJDPauseOrder(shopId);
}
}
}

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

@ -0,0 +1,28 @@
using BBWY.Server.Business;
using BBWY.Server.Model.Dto;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace BBWY.Server.API.Controllers
{
public class ServiceOrderController : BaseApiController
{
private ServiceOrderBusiness serviceOrderBusiness { get; set; }
public ServiceOrderController(IHttpContextAccessor httpContextAccessor, ServiceOrderBusiness serviceOrderBusiness) : base(httpContextAccessor)
{
this.serviceOrderBusiness = serviceOrderBusiness;
}
/// <summary>
/// 查询服务单
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public ServiceOrderResponse GetList([FromBody] ClientQueryServiceOrderRequest request)
{
return serviceOrderBusiness.GetList(request);
}
}
}

21
BBWY.Server.API/Controllers/ServiceOrderSyncController.cs

@ -1,11 +1,11 @@
using BBWY.Server.Business.Sync;
using BBWY.Server.API.Filters;
using BBWY.Server.Business.Sync;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System.Linq;
namespace BBWY.Server.API.Controllers
{
public class ServiceOrderSyncController : BaseApiController
{
private JDServiceOrderSyncBusiness jdServiceOrderSyncBusiness;
@ -15,11 +15,24 @@ namespace BBWY.Server.API.Controllers
this.jdServiceOrderSyncBusiness = jdServiceOrderSyncBusiness;
}
[Consumes("application/x-www-form-urlencoded")]
[HttpPost]
public void ReceiveKuaiDi100Push(string sign, string param)
public IActionResult ReceiveKuaiDi100Push([FromForm] string sign, [FromForm] string param)
{
var filters = ControllerContext.ActionDescriptor.FilterDescriptors;
var filterToRemove = filters.FirstOrDefault(f => f.Filter.GetType() == typeof(ResultFilter));
if (filterToRemove != null)
{
filters.Remove(filterToRemove);
}
jdServiceOrderSyncBusiness.ReceiveKuaiDi100Push(param);
return new JsonResult(new
{
result = true,
returnCode = "200",
message = "成功"
});
}
/// <summary>

6
BBWY.Server.Business/BBWY.Server.Business.csproj

@ -5,12 +5,6 @@
<GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup>
<ItemGroup>
<Compile Remove="新文件夹\**" />
<EmbeddedResource Remove="新文件夹\**" />
<None Remove="新文件夹\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" Version="2.6.100" />

2
BBWY.Server.Business/PlatformSDK/LogisticsCompanyConverter.cs

@ -21,7 +21,7 @@ namespace BBWY.Server.Business
new LogisticsCompanyRelationship(){SourceName="圆通速递(YTO)",TargetName="圆通快递"},
new LogisticsCompanyRelationship(){SourceName="邮政国内小包",TargetName="邮政快递包裹"},
new LogisticsCompanyRelationship(){SourceName="韵达快递",TargetName="韵达快递"},
new LogisticsCompanyRelationship(){SourceName="申通快递(STO)",TargetName="厂家自送"},
new LogisticsCompanyRelationship(){SourceName="申通快递(STO)",TargetName="申通快递",SecondTargetName="厂家自送"},
new LogisticsCompanyRelationship(){SourceName="顺丰速运",TargetName="顺丰快递"},
new LogisticsCompanyRelationship(){SourceName="百世快递",TargetName="厂家自送"},
new LogisticsCompanyRelationship(){SourceName="其他",TargetName="厂家自送"},

2
BBWY.Server.Business/PlatformSDK/PlatformSDKBusiness.cs

@ -188,7 +188,7 @@ namespace BBWY.Server.Business
throw new NotImplementedException();
}
public virtual JArray GetServiceOrderList(Model.Dto.QueryServiceOrderRequest request)
public virtual JArray GetServiceOrderList(QueryServiceOrderRequest request)
{
throw new NotImplementedException();
}

72
BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs

@ -0,0 +1,72 @@
using BBWY.Common.Models;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using System;
using System.Collections.Generic;
using System.Text;
using Yitter.IdGenerator;
namespace BBWY.Server.Business
{
public class ServiceOrderBusiness : BaseBusiness, IDenpendency
{
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)
.Count(out var total)
.Page(request.PageIndex, request.PageSize)
.ToList((s, osku) => new ServiceOrderItemResponse
{
Id = s.Id,
ApplyTime = s.ApplyTime,
CreateTime = s.CreateTime,
ExpressName = s.ExpressName,
WayBillNo = s.WayBillNo,
ImageName = s.ImageName,
OrderId = s.OrderId,
SkuId = s.SkuId,
ProductId = s.ProductId,
ProductAppearance = s.ProductAppearance,
ProductFunction = s.ProductFunction,
ProductHealth = s.ProductHealth,
ProductPackage = s.ProductPackage,
ServiceResult = s.ServiceResult,
TransportDetails = s.TransportDetails,
WareHouseGrounpRemark = s.WareHouseGrounpRemark,
Status = s.Status,
ServiceId = s.ServiceId,
ShopId = s.ShopId,
Title = osku.Title,
ItemTotal = osku.ItemTotal.Value,
Logo = osku.Logo,
Price = osku.Price.Value,
SkuItemCount = osku.ItemTotal.Value,
ReturnDirection = s.ReturnDirection,
ServiceOrderRemark = s.ServiceOrderRemark,
StatusUpdateTime = s.StatusUpdateTime,
PurchaseOrderId = s.PurchaseOrderId,
PurchasePlatform = s.PurchasePlatform
});
return new ServiceOrderResponse()
{
Count = total,
Items = list
};
}
}
}

199
BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs

@ -13,13 +13,19 @@ using Yitter.IdGenerator;
using System.Linq;
using BBWY.Server.Model.Db;
using FreeSql;
using BBWY.Common.Extensions;
namespace BBWY.Server.Business.Sync
{
public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency
{
private IList<LogisticsCompanyRelationship> jd_kd100_logisticsCompanyDictionary;
private IList<int> kuaiDi100PushStateList;
private IList<int> kuaiDi100PushStateList_zaitu;
private IList<int> kuaiDi100PushStateList_lanshou;
private IList<int> kuaiDi100PushStateList_qianshou;
private IList<int> kuaiDi100PushStateList_paijian;
private Dictionary<int, Enums.ServiceResult> processResultDic;
public JDServiceOrderSyncBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, NLogManager nLogManager, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness) : base(restApiService, options, nLogManager, fsql, idGenerator, taskSchedulerManager, venderBusiness, yunDingBusiness)
{
@ -48,13 +54,10 @@ jingdongkuaiyun 京东快运
huitongkuaidi
*/
kuaiDi100PushStateList = new List<int>()
{
0, //在途
1, //揽收
3, //签收
5, //派件
};
kuaiDi100PushStateList_zaitu = new List<int>() { 0, 1001, 1002, 1003 };
kuaiDi100PushStateList_lanshou = new List<int>() { 1, 101, 102, 103 };
kuaiDi100PushStateList_qianshou = new List<int>() { 3, 301, 302, 303, 304 };
kuaiDi100PushStateList_paijian = new List<int>() { 5, 501 };
jd_kd100_logisticsCompanyDictionary = new List<LogisticsCompanyRelationship>()
{
@ -80,6 +83,15 @@ huitongkuaidi 百世快递
new LogisticsCompanyRelationship(){ SourceName="百世快递",TargetName="百世快递",TargetCode="huitongkuaidi"},
new LogisticsCompanyRelationship(){ SourceName="百世快运",TargetName="百世快递",TargetCode="huitongkuaidi"},
};
processResultDic = new Dictionary<int, Enums.ServiceResult>()
{
{ 23,Enums.ServiceResult.},
{ 40,Enums.ServiceResult.退},
{ 60,Enums.ServiceResult.},
{ 90,Enums.ServiceResult.线},
{ 110,Enums.ServiceResult.}
};
}
public void SyncServiceOrder()
@ -92,6 +104,7 @@ huitongkuaidi 百世快递
System.Threading.CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.SyncServiceOrderTaskScheduler);
}
}
@ -112,17 +125,24 @@ huitongkuaidi 百世快递
var exceptServiceIdList = serviceIdList.Except(dbServiceIdList);
var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value<string>("serviceId"))).Select(j => j.Value<string>("orderId")).ToList();
var dbOrderSkuList = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => osku.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId) && osku.Price != 0)
.ToList((osku, o) => new
{
Id = osku.Id,
ProductId = osku.ProductId,
SkuId = osku.SkuId,
OrderId = osku.OrderId,
ItemTotal = osku.ItemTotal,
StorageType = o.StorageType
});
var dbOrderSkuList = fsql.Select<OrderSku, Order, OrderCostDetail, PurchaseOrder>()
.InnerJoin((osku, o, ocd, po) => osku.OrderId == o.Id)
.LeftJoin((osku, o, ocd, po) => osku.OrderId == ocd.OrderId && osku.SkuId == ocd.SkuId)
.LeftJoin((osku, o, ocd, po) => ocd.PurchaseOrderPKId == po.Id)
.Where((osku, o, ocd, po) => o.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId) && osku.Price != 0)
.ToList((osku, o, ocd, po) => new
{
osku.Id,
osku.ProductId,
osku.SkuId,
osku.OrderId,
osku.ItemTotal,
o.StorageType,
po.PurchasePlatform,
po.PurchaseMethod,
po.PurchaseOrderId,
ocd.PurchaseOrderPKId
});
List<ServiceOrder> insertServiceOrderList = new List<ServiceOrder>();
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
@ -130,8 +150,8 @@ huitongkuaidi 百世快递
foreach (var serviceOrderJToken in jtokenList)
{
var serviceId = serviceOrderJToken.Value<string>("serviceId");
var status = serviceOrderJToken.Value<int>("sserviceOrderJToken");
var statusUpdateTime = serviceOrderJToken.Value<DateTime>("updateTime");
var status = (Enums.ServiceOrderState)serviceOrderJToken.Value<int>("serviceStatus");
var statusUpdateTime = serviceOrderJToken.Value<long>("updateTime").StampToDateTime();
var dbServiceOrder = dbServiceOrderList.FirstOrDefault(s => s.ServiceId == serviceId);
if (dbServiceOrder == null)
{
@ -142,39 +162,42 @@ huitongkuaidi 百世快递
continue;
var isNeedSubscribeKuaiDi100 = false;
var isTuiHuoCang = false;
Enums.ServiceResult? serviceResult = null;
#region 待收货服务单,检查是否需要订阅快递100
if (status == 10005)
if (status == Enums.ServiceOrderState.)
{
if (dbOsku.StorageType == Enums.StorageType.)
isNeedSubscribeKuaiDi100 = true;
else
try
{
try
var serviceOrderDetailResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderDetail", new QueryServiceOrderDetailRequest()
{
var serviceOrderDetailResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderDetail", new QueryServiceOrderDetailRequest()
{
AppKey = appKey,
AppSecret = appSecret,
AppToken = token,
OrderId = serviceOrderId,
ServiceId = serviceId,
Platform = Enums.Platform.,
VenderId = shop.VenderId
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (serviceOrderDetailResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResult.Content}");
var serviceOrderDetailResponse = JsonConvert.DeserializeObject<ApiResponse<JToken>>(serviceOrderDetailResult.Content);
if (!serviceOrderDetailResponse.Success)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResponse.Msg}");
//检查退货城市是否为泉州
isNeedSubscribeKuaiDi100 = serviceOrderDetailResponse.Data["returnWareAddress"].Value<int>("cityCode") == 2812;
isTuiHuoCang = isNeedSubscribeKuaiDi100;
}
catch { }
AppKey = appKey,
AppSecret = appSecret,
AppToken = token,
OrderId = serviceOrderId,
ServiceId = serviceId,
Platform = Enums.Platform.,
VenderId = shop.VenderId
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (serviceOrderDetailResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResult.Content}");
var serviceOrderDetailResponse = JsonConvert.DeserializeObject<ApiResponse<JToken>>(serviceOrderDetailResult.Content);
if (!serviceOrderDetailResponse.Success)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResponse.Msg}");
var processResult = serviceOrderDetailResponse.Data.Value<int>("processResult");
if (processResultDic.ContainsKey(processResult))
serviceResult = processResultDic[processResult];
//检查退货城市是否为泉州鲤城区
isNeedSubscribeKuaiDi100 = (serviceOrderDetailResponse.Data["afsContactInfo"]?.Value<int>("cityCode") ?? 0) == 1332 &&
(serviceOrderDetailResponse.Data["afsContactInfo"]?.Value<int>("countyCode") ?? 0) == 42930;
isTuiHuoCang = isNeedSubscribeKuaiDi100;
}
catch { }
if (dbOsku.StorageType == Enums.StorageType.)
isNeedSubscribeKuaiDi100 = true;
}
#endregion
@ -192,7 +215,13 @@ huitongkuaidi 百世快递
StatusUpdateTime = statusUpdateTime,
IsSubscribeKuaiDi100 = false,
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100,
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime"),
ApplyTime = serviceOrderJToken.Value<long>("applyTime").StampToDateTime(),
ServiceResult = serviceResult,
PurchaseMethod = dbOsku.PurchaseMethod,
PurchasePlatform = dbOsku.PurchasePlatform,
PurchaseOrderId = dbOsku.PurchaseOrderId,
PurchaseOrderPKId = dbOsku.PurchaseOrderPKId
};
if (isTuiHuoCang)
dbServiceOrder.ReturnDirection = 0;
@ -275,7 +304,8 @@ huitongkuaidi 百世快递
break;
}
SyncServiceOrder(shop, shopId, jtokenList, relayAPIHost, request.AppKey, request.AppSecret, request.AppToken);
if (jtokenList.Count() > 0)
SyncServiceOrder(shop, shopId, jtokenList, relayAPIHost, request.AppKey, request.AppSecret, request.AppToken);
}
catch (Exception ex)
{
@ -311,7 +341,7 @@ huitongkuaidi 百世快递
try
{
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.ShopId == shop.Id &&
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.ShopId == shop.ShopId &&
s.IsNeedSubscribeKuaiDi100 == true &&
s.IsSubscribeKuaiDi100 == false)
.OrderByDescending(s => s.StatusUpdateTime)
@ -351,6 +381,11 @@ huitongkuaidi 百世快递
serviceOrder.WayBillNo = serviceOrderDeliveryResponse.Data.Value<string>("expressCode");
serviceOrder.ExpressName = serviceOrderDeliveryResponse.Data.Value<string>("expressCompany");
if (!string.IsNullOrEmpty(serviceOrder.WayBillNo) && serviceOrder.WayBillNo.StartsWith("JD") && string.IsNullOrEmpty(serviceOrder.ExpressName))
{
serviceOrder.ExpressName = "京东快递";
}
isUpdateDelivery = !string.IsNullOrEmpty(serviceOrder.WayBillNo) && !string.IsNullOrEmpty(serviceOrder.ExpressName);
}
#endregion
@ -403,7 +438,7 @@ huitongkuaidi 百世快递
.SetIf(isUpdateSubscribe, s => s.IsSubscribeKuaiDi100, true);
updateSerivceOrderList.Add(update);
if (isUpdateDelivery)
if (isUpdateDelivery && insertExpressOrderList.Count(e => e.WayBillNo == serviceOrder.WayBillNo) == 0)
{
insertExpressOrderList.Add(new ExpressOrder()
{
@ -419,6 +454,22 @@ huitongkuaidi 百世快递
}
}
if (insertExpressOrderList.Count() > 0)
{
var insertExpressOrderWayBillNoList = insertExpressOrderList.Select(e => e.WayBillNo).ToList();
var dbWayBillNoList = fsql.Select<ExpressOrder>().Where(e => insertExpressOrderWayBillNoList.Contains(e.WayBillNo)).ToList(e => e.WayBillNo);
if (dbWayBillNoList.Count() > 0)
{
for (var i = 0; i < insertExpressOrderList.Count(); i++)
{
if (dbWayBillNoList.Any(w => w == insertExpressOrderList[i].WayBillNo))
{
insertExpressOrderList.Remove(insertExpressOrderList[i]);
i--;
}
}
}
}
fsql.Transaction(() =>
{
@ -443,14 +494,16 @@ huitongkuaidi 百世快递
return result.TargetCode;
}
public void ReceiveKuaiDi100Push(string param)
{
nLogManager.Default().Info($"收到快递100推送 {param}");
JObject jobject = JObject.Parse(param);
var waybillNo = jobject["lastResult"].Value<string>("nu");
var state = jobject["lastResult"].Value<int>("state");
if (!kuaiDi100PushStateList.Contains(state))
if (!kuaiDi100PushStateList_lanshou.Contains(state) &&
!kuaiDi100PushStateList_zaitu.Contains(state) &&
!kuaiDi100PushStateList_paijian.Contains(state) &&
!kuaiDi100PushStateList_qianshou.Contains(state))
return;
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.WayBillNo == waybillNo).ToList();
@ -461,50 +514,43 @@ huitongkuaidi 百世快递
if (expressOrder == null)
throw new Exception($"快递单号{waybillNo} 未找到对应的快递单");
if (expressOrder.TransportStatus == 1) //已入库
if (expressOrder.TransportStatus == Enums.TransportState.) //已入库
return;
IUpdate<ExpressOrder> updateExpressOrder = null;
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
/*
0, //在途
1, //揽收
3, //签收
5, //派件
*/
var isUpdate = false;
var newStatus = 0;
Enums.TransportState? newStatus = null;
DateTime? signTime = null;
if (state == 0 || state == 1)
if (kuaiDi100PushStateList_zaitu.Contains(state) || kuaiDi100PushStateList_lanshou.Contains(state))
{
//在途 //揽收
if (expressOrder.TransportStatus != 3)
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = 3;
newStatus = Enums.TransportState.;
}
}
else if (state == 3)
else if (kuaiDi100PushStateList_qianshou.Contains(state))
{
if (expressOrder.TransportStatus != 0)
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = 0;
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"));
}
}
else if (state == 5)
else if (kuaiDi100PushStateList_paijian.Contains(state))
{
if (expressOrder.TransportStatus != 2)
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = 2;
newStatus = Enums.TransportState.;
}
}
@ -513,12 +559,13 @@ huitongkuaidi 百世快递
fsql.Transaction(() =>
{
fsql.Update<ExpressOrder>(expressOrder.Id).Set(e => e.TransportStatus, newStatus)
.SetIf(state == 3, e => e.SignTime, signTime)
.SetIf(kuaiDi100PushStateList_qianshou.Contains(state), e => e.SignTime, signTime)
.Set(e => e.UpdateTime, DateTime.Now)
.ExecuteAffrows(); //签收
foreach (var serviceOrder in serviceOrderList)
{
if (serviceOrder.TransportDetails == 1)
if (serviceOrder.TransportDetails == Enums.TransportState.)
continue;
fsql.Update<ServiceOrder>(serviceOrder.Id).Set(s => s.TransportDetails, newStatus)
.ExecuteAffrows();

124
BBWY.Server.Business/Sync/OrderSyncBusiness.cs

@ -735,7 +735,7 @@ namespace BBWY.Server.Business
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => SyncOrder(shop, string.Empty, isAuto: true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
Task.Factory.StartNew(() => SyncOrder(shop, string.Empty, isAuto: true), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
}
}
@ -809,86 +809,66 @@ namespace BBWY.Server.Business
return orderState;
}
/// <summary>
/// 接收订单推送
/// </summary>
/// <param name="request"></param>
public void OrderPublish(OrderPublishRequest request)
{
/*
if (erpOrderStatus.equals(("1"))){
status="新订单";
}else if (erpOrderStatus.equals(("2"))){
status="等待付款";
}else if (erpOrderStatus.equals(("3"))){
status="等待付款确认";
}else if (erpOrderStatus.equals(("4"))){
status="延迟付款确认";
}else if (erpOrderStatus.equals(("5"))){
status="暂停";
}else if (erpOrderStatus.equals(("6"))){
status="店长最终审核";
}else if (erpOrderStatus.equals(("7"))){
status="等待打印";
}else if (erpOrderStatus.equals(("8"))){
status="等待出库";
}else if (erpOrderStatus.equals(("9"))){
status="等待打包";
}else if (erpOrderStatus.equals(("10"))){
status="等待发货";
}else if (erpOrderStatus.equals(("11"))){
status="自提途中";
}else if (erpOrderStatus.equals(("12"))){
status="上门提货";
}else if (erpOrderStatus.equals(("13"))){
status="自提退货";
}else if (erpOrderStatus.equals(("14"))){
status="确认自提";
}else if (erpOrderStatus.equals(("15"))){
status="等待回执";
}else if (erpOrderStatus.equals(("16"))){
status="等待确认收货";
}else if (erpOrderStatus.equals(("17"))){
status="配送退货";
}else if (erpOrderStatus.equals(("18"))){
status="货到付款确认";
}else if (erpOrderStatus.equals(("19"))){
status="完成";
}else if (erpOrderStatus.equals(("20"))){
status="等待分期付款";
}else if (erpOrderStatus.equals(("21"))){
status="收款确认";
}else if (erpOrderStatus.equals(("22"))){
status="锁定";
}else if (erpOrderStatus.equals(("23"))){
status="等待退款";
}else if (erpOrderStatus.equals(("24"))){
status="等待客户回复";
}else if (erpOrderStatus.equals(("25"))){
status="厂商确认完成";
}else if (erpOrderStatus.equals(("29"))){
status="等待三方出库";
}else if (erpOrderStatus.equals(("30"))){
status="等待三方发货";
}else if (erpOrderStatus.equals(("31"))){
status="等待三方发货完成";
}else if (erpOrderStatus.equals(("26"))){
status="等待再审核";
}else if (erpOrderStatus.equals(("27"))){
status="对账中";
}else if (erpOrderStatus.equals(("28"))){
status="退款中";
}else if (erpOrderStatus.equals(("-1"))){
status="未知";
}else if (erpOrderStatus.equals(("NOT_PAY"))){
status="新订单";
}else if (erpOrderStatus.equals(
*/
nLogManager.Default().Info($"订单推送-{JsonConvert.SerializeObject(request)}");
if (request.erpOrderStatus != "5")
if (request.orderStatus != "TRADE_CREATED")
return;
var shop = venderBusiness.GetShopByVenderId(request.venderId);
if (shop == null)
return;
Task.Factory.StartNew(() => SyncOrder(shop, request.orderId, null, null, isAuto: false, Enums.SortTimeType.StartTime), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
var isExists = fsql.Select<WaitPayOrder>(request.orderId).Any();
if (!isExists)
{
fsql.Insert(new WaitPayOrder()
{
CreateTime = DateTime.Now,
Id = request.orderId,
ShopId = long.Parse(shop.ShopId)
}).ExecuteAffrows();
}
}
#region 同步暂停订单
public void CheckJDPauseOrder(long? shopId)
{
var shopList = venderBusiness.GetShopList(shopId);
var shopIds = shopList.Select(s => long.Parse(s.ShopId)).ToList();
var deleteRow = fsql.Select<WaitPayOrder>().Where(wo => shopIds.Contains(wo.ShopId.Value))
.Where(wo => fsql.Select<Order>().Where(o => o.Id == wo.Id).Any())
.ToDelete()
.ExecuteAffrows();
var waitPayOrderList = fsql.Select<WaitPayOrder>().Where(wo => shopIds.Contains(wo.ShopId.Value)).ToList();
if (waitPayOrderList.Count() == 0)
return;
foreach (var shop in shopList)
{
var currentWaitPayOrderList = waitPayOrderList.Where(wo => wo.ShopId == long.Parse(shop.ShopId)).ToList();
if (currentWaitPayOrderList.Count() > 0)
{
Task.Factory.StartNew(() => CheckJDPauseOrder(shop, currentWaitPayOrderList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
}
}
}
private void CheckJDPauseOrder(ShopResponse shop, IList<WaitPayOrder> waitPayOrderList)
{
foreach (var w in waitPayOrderList)
{
SyncOrder(shop, w.Id);
}
}
#endregion
}
}

4
BBWY.Server.Business/TaskSchedulerManager.cs

@ -14,6 +14,8 @@ namespace BBWY.Server.Business
public LimitedConcurrencyLevelTaskScheduler SyncServiceOrderTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler SyncPauseOrderTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler JDPopularizeTaskScheduler { get; private set; }
@ -48,6 +50,8 @@ namespace BBWY.Server.Business
JDPromotionDelayTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
JDPromotionMonitorTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
JDPromotionAutoStartTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
SyncPauseOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
}
}
}

6
BBWY.Server.Model/Db/Order/ExpressOrder.cs

@ -11,7 +11,7 @@ namespace BBWY.Server.Model.Db
public partial class ExpressOrder
{
[Column(IsPrimary = true, IsIdentity = true)]
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
@ -45,8 +45,8 @@ namespace BBWY.Server.Model.Db
/// <summary>
/// 物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary>
public int? TransportStatus { get; set; }
[Column(MapType = typeof(int?))]
public Enums.TransportState? TransportStatus { get; set; }
[Column(DbType = "datetime")]
public DateTime? UpdateTime { get; set; }

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

@ -1,295 +1,288 @@
using FreeSql.DatabaseModel;using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Newtonsoft.Json;
using FreeSql.DataAnnotations;
namespace BBWY.Server.Model.Db {
/// <summary>
/// 服务单表(new)
/// </summary>
[ Table(Name = "serviceorder", DisableSyncStructure = true)]
public partial class ServiceOrder {
[Column(IsPrimary = true, IsIdentity = true)]
public long Id { get; set; }
/// <summary>
/// 售后成本(不含退款采购成本)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? AfterTotalCost { get; set; } = 0.00M;
/// <summary>
/// 申请时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? ApplyTime { get; set; }
/// <summary>
/// 耗材费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 退货拍摄图(名称)
/// </summary>
[Column(StringLength = 1000)]
public string ImageName { get; set; }
/// <summary>
/// 入仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 是否订阅快递100
/// </summary>
public bool? IsSubscribeKuaiDi100 { get; set; }
/// <summary>
/// 是否需要订阅快递100
/// </summary>
public bool? IsNeedSubscribeKuaiDi100 { get; set; }
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 出仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? OutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
public int? ProductAppearance { get; set; }
/// <summary>
/// 产品功能 (坏=0 好=1)
/// </summary>
public int? ProductFunction { get; set; }
/// <summary>
/// 商品健康状态 (残次品=0 良品=1)
/// </summary>
public int? ProductHealth { get; set; }
/// <summary>
/// 商品情况(定义待变更);名称待定,以前的商品情况,叶总需要更换定义
/// </summary>
public int? ProductHealth2 { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
public int? ProductPackage { get; set; }
/// <summary>
/// 商品处理方式;弃用
/// </summary>
public int? ProductResult { get; set; }
/// <summary>
/// 采购方式
/// </summary>
public int? PurchaseMethod { get; set; }
/// <summary>
/// 采购单号
/// </summary>
[Column(StringLength = 100)]
public string PurchaseOrderId { get; set; }
/// <summary>
/// 采购单主键
/// </summary>
public long? PurchaseOrderPKId { get; set; }
/// <summary>
/// 采购平台
/// </summary>
public int? PurchasePlatform { get; set; }
/// <summary>
/// 退款支付宝订单号
/// </summary>
[Column(StringLength = 100)]
public string RefundAlipayOrderNo { get; set; }
/// <summary>
/// 退款金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? RefundAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? RefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退款商户订单号
/// </summary>
[Column(StringLength = 100)]
public string RefundMerchantOrderNo { get; set; }
/// <summary>
/// 退款采购成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? RefundPurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 退款时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? RefundTime { get; set; }
/// <summary>
/// 售后补发成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M;
/// <summary>
/// 补发快递费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueFreight { get; set; } = 0.00M;
/// <summary>
/// 补发货款成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueProductAmount { get; set; } = 0.00M;
/// <summary>
/// 退货去向(退货仓=0,采购商=1,原返=2,无退货=3)
/// </summary>
public int? ReturnDirection { get; set; }
/// <summary>
/// SD退货运费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? SDRefundFreight { get; set; } = 0.00M;
/// <summary>
/// 服务单号
/// </summary>
[Column(StringLength = 20)]
public string ServiceId { get; set; }
/// <summary>
/// 服务单租备注
/// </summary>
[Column(StringLength = 100)]
public string ServiceOrderRemark { get; set; }
/// <summary>
/// 服务单处理结果
/// </summary>
public int? ServiceResult { get; set; }
[Column(StringLength = 20)]
public string ShopId { get; set; }
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// SKU销售件数
/// </summary>
public int? SkuItemCount { get; set; }
/// <summary>
/// 服务单状态
/// </summary>
public int? Status { get; set; }
/// <summary>
/// 变更时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? StatusUpdateTime { get; set; }
/// <summary>
/// 仓储费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 服务单物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary>
public int? TransportDetails { get; set; }
/// <summary>
/// 仓库组备注
/// </summary>
[Column(StringLength = 100)]
public string WareHouseGrounpRemark { get; set; }
/// <summary>
/// 快递单号
/// </summary>
[Column(StringLength = 100)]
public string WayBillNo { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
/// <summary>
/// 质检入库时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? QualityInspectionInStoreTime { get; set; }
}
using System;
namespace BBWY.Server.Model.Db
{
/// <summary>
/// 服务单表(new)
/// </summary>
[Table(Name = "serviceorder", DisableSyncStructure = true)]
public partial class ServiceOrder
{
[Column(IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 售后成本(不含退款采购成本)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? AfterTotalCost { get; set; } = 0.00M;
/// <summary>
/// 申请时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? ApplyTime { get; set; }
/// <summary>
/// 耗材费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 退货拍摄图(名称)
/// </summary>
[Column(StringLength = 1000)]
public string ImageName { get; set; }
/// <summary>
/// 入仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 是否订阅快递100
/// </summary>
public bool? IsSubscribeKuaiDi100 { get; set; }
/// <summary>
/// 是否需要订阅快递100
/// </summary>
public bool? IsNeedSubscribeKuaiDi100 { get; set; }
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 出仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? OutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ProductAppearance? ProductAppearance { get; set; }
/// <summary>
/// 产品功能 (坏=0 好=1)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ProductFunction? ProductFunction { get; set; }
/// <summary>
/// 商品健康状态 (残次品=0 良品=1)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.NewProductHealth? ProductHealth { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ProductPackage? ProductPackage { get; set; }
/*
/// <summary>
/// 商品处理方式;弃用
/// </summary>
public int? ProductResult { get; set; }
*/
/// <summary>
/// 采购方式
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.PurchaseMethod? PurchaseMethod { get; set; }
/// <summary>
/// 采购单号
/// </summary>
[Column(StringLength = 100)]
public string PurchaseOrderId { get; set; }
/// <summary>
/// 采购单主键
/// </summary>
public long? PurchaseOrderPKId { get; set; }
/// <summary>
/// 采购平台
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.Platform? PurchasePlatform { get; set; }
/// <summary>
/// 退款支付宝订单号
/// </summary>
[Column(StringLength = 100)]
public string RefundAlipayOrderNo { get; set; }
/// <summary>
/// 退款金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? RefundAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓操作费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? RefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退款商户订单号
/// </summary>
[Column(StringLength = 100)]
public string RefundMerchantOrderNo { get; set; }
/// <summary>
/// 退款采购成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? RefundPurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 退款时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? RefundTime { get; set; }
/// <summary>
/// 售后补发成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M;
/// <summary>
/// 补发快递费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueFreight { get; set; } = 0.00M;
/// <summary>
/// 补发货款成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueProductAmount { get; set; } = 0.00M;
/// <summary>
/// 退货去向(退货仓=0,采购商=1,原返=2,无退货=3)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ReturnDirection? ReturnDirection { get; set; }
/// <summary>
/// SD退货运费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? SDRefundFreight { get; set; } = 0.00M;
/// <summary>
/// 服务单号
/// </summary>
[Column(StringLength = 20)]
public string ServiceId { get; set; }
/// <summary>
/// 服务单租备注
/// </summary>
[Column(StringLength = 100)]
public string ServiceOrderRemark { get; set; }
/// <summary>
/// 服务单处理结果
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ServiceResult? ServiceResult { get; set; }
[Column(StringLength = 20)]
public string ShopId { get; set; }
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// SKU销售件数
/// </summary>
public int? SkuItemCount { get; set; }
/// <summary>
/// 服务单状态 待收货 = 10005,取消 = 10011,完成 = 10010
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.ServiceOrderState? Status { get; set; }
/// <summary>
/// 变更时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? StatusUpdateTime { get; set; }
/// <summary>
/// 仓储费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 服务单物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.TransportState? TransportDetails { get; set; }
/// <summary>
/// 仓库组备注
/// </summary>
[Column(StringLength = 100)]
public string WareHouseGrounpRemark { get; set; }
/// <summary>
/// 快递单号
/// </summary>
[Column(StringLength = 100)]
public string WayBillNo { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
/// <summary>
/// 质检入库时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? QualityInspectionInStoreTime { get; set; }
}
}

21
BBWY.Server.Model/Db/Order/WaitPayOrder.cs

@ -0,0 +1,21 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
{
[ Table(Name = "waitpayorder", DisableSyncStructure = true)]
public partial class WaitPayOrder
{
[Column(StringLength = 100, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
public long? ShopId { get; set; }
}
}

30
BBWY.Server.Model/Dto/Request/ServiceOrder/ClientQueryServiceOrderRequest.cs

@ -0,0 +1,30 @@

using System;
namespace BBWY.Server.Model.Dto
{
public class ClientQueryServiceOrderRequest
{
public string OrderId { get; set; }
public string Sku { get; set; }
public string Spu { get; set; }
public string ServiceId { get; set; }
public string ShopId { get; set; }
public Enums.ServiceOrderState? ServiceOrderState { get; set; }
public Enums.ReturnDirection? ReturnDirection { get; set; }
public int PageIndex { get; set; }
public int PageSize { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
}
}

2
BBWY.Server.Model/Dto/Request/Sync/OrderPublishRequest.cs

@ -2,7 +2,7 @@
{
public class OrderPublishRequest
{
public string erpOrderStatus { get; set; }
public string orderStatus { get; set; }
public string orderId { get; set; }

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

@ -0,0 +1,262 @@
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
namespace BBWY.Server.Model.Dto
{
public class ServiceOrderItemResponse
{
public long Id { get; set; }
/// <summary>
/// 售后成本(不含退款采购成本)
/// </summary>
public decimal? AfterTotalCost { get; set; } = 0.00M;
/// <summary>
/// 申请时间
/// </summary>
public DateTime? ApplyTime { get; set; }
/// <summary>
/// 耗材费
/// </summary>
public decimal? ConsumableAmount { get; set; } = 0.00M;
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程费
/// </summary>
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 退货拍摄图(名称)
/// </summary>
public string ImageName { get; set; }
/// <summary>
/// 入仓操作费
/// </summary>
public decimal? InStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 是否订阅快递100
/// </summary>
public bool? IsSubscribeKuaiDi100 { get; set; }
/// <summary>
/// 是否需要订阅快递100
/// </summary>
public bool? IsNeedSubscribeKuaiDi100 { get; set; }
public string OrderId { get; set; }
/// <summary>
/// 出仓操作费
/// </summary>
public decimal? OutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
public Enums.ProductAppearance? ProductAppearance { get; set; }
/// <summary>
/// 产品功能 (坏=0 好=1)
/// </summary>
public Enums.ProductFunction? ProductFunction { get; set; }
/// <summary>
/// 商品健康状态 (残次品=0 良品=1)
/// </summary>
public Enums.NewProductHealth? ProductHealth { get; set; }
public string ProductId { get; set; }
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
public Enums.ProductPackage? ProductPackage { get; set; }
/// <summary>
/// 采购方式
/// </summary>
public Enums.PurchaseMethod? PurchaseMethod { get; set; }
/// <summary>
/// 采购单号
/// </summary>
public string PurchaseOrderId { get; set; }
/// <summary>
/// 采购单主键
/// </summary>
public long? PurchaseOrderPKId { get; set; }
/// <summary>
/// 采购平台
/// </summary>
public Enums.Platform? PurchasePlatform { get; set; }
/// <summary>
/// 退款支付宝订单号
/// </summary>
public string RefundAlipayOrderNo { get; set; }
/// <summary>
/// 退款金额
/// </summary>
public decimal? RefundAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓操作费
/// </summary>
public decimal? RefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退款商户订单号
/// </summary>
public string RefundMerchantOrderNo { get; set; }
/// <summary>
/// 退款采购成本
/// </summary>
public decimal? RefundPurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 退款时间
/// </summary>
public DateTime? RefundTime { get; set; }
/// <summary>
/// 售后补发成本
/// </summary>
public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M;
/// <summary>
/// 补发快递费
/// </summary>
public decimal? ReissueFreight { get; set; } = 0.00M;
/// <summary>
/// 补发货款成本
/// </summary>
public decimal? ReissueProductAmount { get; set; } = 0.00M;
/// <summary>
/// 退货去向(退货仓=0,采购商=1,原返=2,无退货=3)
/// </summary>
public Enums.ReturnDirection? ReturnDirection { get; set; }
/// <summary>
/// SD退货运费
/// </summary>
public decimal? SDRefundFreight { get; set; } = 0.00M;
/// <summary>
/// 服务单号
/// </summary>
public string ServiceId { get; set; }
/// <summary>
/// 服务单租备注
/// </summary>
public string ServiceOrderRemark { get; set; }
/// <summary>
/// 服务单处理结果
/// </summary>
public Enums.ServiceResult? ServiceResult { get; set; }
public string ShopId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// SKU销售件数
/// </summary>
public int? SkuItemCount { get; set; }
/// <summary>
/// 服务单状态 待收货 = 10005,取消 = 10011,完成 = 10010
/// </summary>
public Enums.ServiceOrderState? Status { get; set; }
/// <summary>
/// 变更时间
/// </summary>
public DateTime? StatusUpdateTime { get; set; }
/// <summary>
/// 仓储费
/// </summary>
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 服务单物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary>
public Enums.TransportState? TransportDetails { get; set; }
/// <summary>
/// 仓库组备注
/// </summary>
public string WareHouseGrounpRemark { get; set; }
/// <summary>
/// 快递单号
/// </summary>
public string WayBillNo { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
public string ExpressName { get; set; }
/// <summary>
/// 质检入库时间
/// </summary>
public DateTime? QualityInspectionInStoreTime { get; set; }
#region Sku
public string Logo { get; set; }
public string Title { get; set; }
//public string ContactName { get; set; }
//public string Mobile { get; set; }
public int ItemTotal { get; set; }
public decimal Price { get; set; }
#endregion
}
public class ServiceOrderResponse
{
public IList<ServiceOrderItemResponse> Items { get; set; }
public long Count { get; set; }
}
}

58
BBWY.Server.Model/Enums.cs

@ -16,7 +16,7 @@
}
/// <summary>
/// 采购方式
/// 采购方式 线上采购 = 0,线下采购 = 1
/// </summary>
public enum PurchaseMethod
{
@ -255,5 +255,61 @@
{
= 0, = 1, = 2
}
/// <summary>
/// 服务单状态
/// </summary>
public enum ServiceOrderState
{
= 10005,
= 10011,
= 10010
}
public enum ReturnDirection
{
退 = 0, = 1, = 2, 退 = 3
}
/// <summary>
/// 运输状态 0=待质检,1=已入库,2=派送中,3=运输中
/// </summary>
public enum TransportState
{
= 0, = 1, = 2, = 3
}
/// <summary>
/// 商品健康状态 残次品=0 良品=1
/// </summary>
public enum NewProductHealth
{
= 0, = 1
}
/// <summary>
/// 产品功能 坏=0 好=1
/// </summary>
public enum ProductFunction
{
= 0, = 1
}
/// <summary>
/// 产品外观 (严重损=0 轻微损=1 新=2)
/// </summary>
public enum ProductAppearance
{
= 0, = 1, = 2
}
/// <summary>
/// 产品包装(无=0 非新=1 新=2)
/// </summary>
public enum ProductPackage
{
= 0, = 1, = 2
}
}
}

25
BBWY.Test/Program.cs

@ -45,16 +45,16 @@ namespace BBWY.Test
//var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具
//var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; //可比车品
var dt1 = DateTime.Now;
List<string> list = new List<string>();
for (var i = 1; i <= 5000000; i++)
{
var str = tomMd5($"Mozilla/5.0 (Linux; Android 12; 21121210C Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/13.8 SP-engine/2.46.0 baiduboxapp/13.8.1.10 (Baidu; P1 12) NABar/1.0 Edg/102.0.5005.63_{i}_192.158.241.{i}_28726526517321");
Console.WriteLine($"生成第{i}位指纹,长度{str.Length},{str}");
list.Add(str);
}
var dt2 = DateTime.Now;
Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒");
//var dt1 = DateTime.Now;
//List<string> list = new List<string>();
//for (var i = 1; i <= 5000000; i++)
//{
// var str = tomMd5($"Mozilla/5.0 (Linux; Android 12; 21121210C Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/13.8 SP-engine/2.46.0 baiduboxapp/13.8.1.10 (Baidu; P1 12) NABar/1.0 Edg/102.0.5005.63_{i}_192.158.241.{i}_28726526517321");
// Console.WriteLine($"生成第{i}位指纹,长度{str.Length},{str}");
// list.Add(str);
//}
//var dt2 = DateTime.Now;
//Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒");
@ -113,6 +113,11 @@ namespace BBWY.Test
//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();
}

2
JD.API/Controllers/PlatformSDKController.cs

@ -340,7 +340,7 @@ namespace JD.API.API.Controllers
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public JArray GetServiceOrderList([FromBody] QueryServiceOrderRequest request)
public JArray GetServiceOrderList([FromBody] ClientQueryServiceOrderRequest request)
{
return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderList(request);
}

Loading…
Cancel
Save