连坤 林 2 years ago
parent
commit
3ad42e81a8
  1. 75
      BBWY.Client/APIServices/ServiceOrderService.cs
  2. 1
      BBWY.Client/App.xaml.cs
  3. 289
      BBWY.Client/Models/APIModel/Response/ServiceOrder/ServiceOrderItemResponse.cs
  4. 58
      BBWY.Client/Models/Enums.cs
  5. 1
      BBWY.Client/Models/MappingProfile.cs
  6. 21
      BBWY.Client/Models/PackTask/ConsumableModel.cs
  7. 149
      BBWY.Client/Models/PackTask/PackTaskModel.cs
  8. 37
      BBWY.Client/Models/ServiceOrder/ServiceOrder.cs
  9. 3
      BBWY.Client/ViewModels/MainViewModel.cs
  10. 274
      BBWY.Client/ViewModels/Order/OrderListViewModel.cs
  11. 2
      BBWY.Client/ViewModels/PackTask/ConsumableViewModel.cs
  12. 8
      BBWY.Client/ViewModels/PackTask/TaskListViewModel.cs
  13. 22
      BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
  14. 116
      BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs
  15. 286
      BBWY.Client/ViewModels/ServiceOrder/ServiceOrderViewModel.cs
  16. 25
      BBWY.Client/ViewModels/ViewModelLocator.cs
  17. 952
      BBWY.Client/Views/Order/OrderList.xaml
  18. 12
      BBWY.Client/Views/Order/OrderList.xaml.cs
  19. 2
      BBWY.Client/Views/PackTask/Consumable.xaml
  20. 2
      BBWY.Client/Views/PackTask/CreatePackTask.xaml
  21. 4
      BBWY.Client/Views/PackTask/LookCerWindow.xaml
  22. 9
      BBWY.Client/Views/PackTask/PersonList.xaml
  23. 60
      BBWY.Client/Views/PackTask/PrintWindow.xaml.cs
  24. 4
      BBWY.Client/Views/PackTask/ServiceWindow.xaml
  25. 179
      BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml
  26. 28
      BBWY.Client/Views/ServiceOrder/EditServiceOrder.xaml.cs
  27. 478
      BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml
  28. 26
      BBWY.Client/Views/ServiceOrder/ServiceOrderList.xaml.cs
  29. 20
      BBWY.Server.API/Controllers/OrderSyncController.cs
  30. 38
      BBWY.Server.API/Controllers/ServiceOrderController.cs
  31. 21
      BBWY.Server.API/Controllers/ServiceOrderSyncController.cs
  32. 3
      BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs
  33. 6
      BBWY.Server.Business/BBWY.Server.Business.csproj
  34. 2
      BBWY.Server.Business/PlatformSDK/LogisticsCompanyConverter.cs
  35. 2
      BBWY.Server.Business/PlatformSDK/PlatformSDKBusiness.cs
  36. 100
      BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs
  37. 228
      BBWY.Server.Business/Sync/JD/JDServiceOrderSyncBusiness.cs
  38. 124
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  39. 4
      BBWY.Server.Business/TaskSchedulerManager.cs
  40. 6
      BBWY.Server.Model/Db/Order/ExpressOrder.cs
  41. 607
      BBWY.Server.Model/Db/Order/Serviceorder.cs
  42. 21
      BBWY.Server.Model/Db/Order/WaitPayOrder.cs
  43. 30
      BBWY.Server.Model/Dto/Request/ServiceOrder/ClientQueryServiceOrderRequest.cs
  44. 21
      BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs
  45. 2
      BBWY.Server.Model/Dto/Request/Sync/OrderPublishRequest.cs
  46. 291
      BBWY.Server.Model/Dto/Response/ServiceOrder/ServiceOrderItemResponse.cs
  47. 58
      BBWY.Server.Model/Enums.cs
  48. 72
      BBWY.Test/Program.cs
  49. 5
      JD.API/Controllers/PlatformSDKController.cs
  50. 2
      JD.API/appsettings.json

75
BBWY.Client/APIServices/ServiceOrderService.cs

@ -0,0 +1,75 @@
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);
}
public ApiResponse<object> EditServiceOrder(long servicePId,
string orderId,
ServiceResult? serviceResult,
decimal? sdRefundFreight,
ReturnDirection? returnDirection,
string renewalOrderId,
decimal? reissueAfterSaleAmount,
string returnCheckRemark,
StorageType? renewalType,
string renewalPurchaseOrderId,
Platform? renewalPurchasePlatform,
decimal? reissueFreight,
decimal? reissueProductAmount)
{
return SendRequest<object>(globalContext.BBYWApiHost, "Api/ServiceOrder/EditServiceOrder", new
{
servicePId,
orderId,
serviceResult,
sdRefundFreight,
returnDirection,
renewalOrderId,
reissueAfterSaleAmount,
returnCheckRemark,
renewalType,
renewalPurchaseOrderId,
renewalPurchasePlatform,
reissueFreight,
reissueProductAmount
}, null, HttpMethod.Post);
}
}
}

1
BBWY.Client/App.xaml.cs

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

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

@ -0,0 +1,289 @@
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; }
/// <summary>
/// 换新单号
/// </summary>
public string RenewalOrderId { get; set; }
/// <summary>
/// 退货检查备注
/// </summary>
public string ReturnCheckRemark { get; set; }
/// <summary>
/// 线下换新方式
/// </summary>
public StorageType? RenewalType { get; set; }
/// <summary>
/// 线下换新采购单号
/// </summary>
public string RenewalPurchaseOrderId { get; set; }
/// <summary>
/// 线下换新采购平台
/// </summary>
public Platform? RenewalPurchasePlatform { get; set; }
#region Sku
public string Logo { get; set; }
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 StorageType? StorageType { get; set; }
}
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, = 0,
= 1, = 1,
=2 = 2
} }
public enum Increment 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<ToDayOrderAchievementResponse, ToDayOrderAchievement>();
CreateMap<SDGroupPersonStatisticsResponse, SDGroupPersonStatistics>(); CreateMap<SDGroupPersonStatisticsResponse, SDGroupPersonStatistics>();
CreateMap<BillCorrectionOrderResponse, BillCorrectionOrder>(); CreateMap<BillCorrectionOrderResponse, BillCorrectionOrder>();
CreateMap<ServiceOrderItemResponse, ServiceOrder>();
} }
} }
} }

21
BBWY.Client/Models/PackTask/ConsumableModel.cs

@ -46,7 +46,7 @@ namespace BBWY.Client.Models.PackTask
return; return;
} }
ApiResponse<object> res = null; ApiResponse<object> res = null;
if (Id > 0) if (Id > 0)//修改
{ {
res = consumableService.Edit(new ConsuableRequest res = consumableService.Edit(new ConsuableRequest
{ {
@ -80,7 +80,11 @@ namespace BBWY.Client.Models.PackTask
if (res != null && res.Success) if (res != null && res.Success)
{ {
var win = obj as System.Windows.Window; var win = obj as System.Windows.Window;
if (ReflashDatas != null) ReflashDatas();
ViewModelLocator viewModel = new ViewModelLocator();
var con = viewModel.Consumable;
con.SearchConsumable();
//if (ReflashDatas != null) ReflashDatas();
win.Close(); win.Close();
} }
else else
@ -94,6 +98,9 @@ namespace BBWY.Client.Models.PackTask
var res = consumableService.Deleted(Id); var res = consumableService.Deleted(Id);
if (res.Success) if (res.Success)
{ {
ViewModelLocator viewModel = new ViewModelLocator();
var con = viewModel.Consumable;
con.SearchConsumable();
list.Remove(this); list.Remove(this);
} }
} }
@ -102,7 +109,15 @@ namespace BBWY.Client.Models.PackTask
public void EditConsumable() public void EditConsumable()
{ {
EditConsumable add = new EditConsumable(this); EditConsumable add = new EditConsumable(new ConsumableModel(consumableService) {
Heigth=this.Heigth, Length=this.Length,
Id=this.Id, Name=this.Name, Weigth=this.Weigth,
Remark = this.Remark,
Width = this.Width ,
Price = this.Price
});
add.Show(); add.Show();
} }

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

@ -45,7 +45,7 @@ namespace BBWY.Client.Models
public ICommand UpdateTaskCommand { get; set; } public ICommand UpdateTaskCommand { get; set; }
/// <summary> /// <summary>
/// 修改任务 /// 删除任务
/// </summary> /// </summary>
public ICommand DeletedTaskCommand { get; set; } public ICommand DeletedTaskCommand { get; set; }
@ -158,12 +158,14 @@ namespace BBWY.Client.Models
{ {
if (CertificateModel == null) if (CertificateModel == null)
{ {
new TipsWindow("该任务无设置合格证信息,无法打印!").ShowDialog(); new TipsWindow("该任务无设置合格证信息,无法打印!").Show();
return; return;
} }
PrintWindow printWindow = new PrintWindow(); PrintWindow printWindow = new PrintWindow();
printWindow.certificateModel = certificateModel;
printWindow.CertificateModel = certificateModel;
printWindow.LoadData(); printWindow.LoadData();
//printWindow.Datas = LoadCerLabelModels();
printWindow.Show(); printWindow.Show();
} }
@ -174,11 +176,11 @@ namespace BBWY.Client.Models
{ {
if (BarCodeModel == null) if (BarCodeModel == null)
{ {
new TipsWindow("该任务无设置条形码信息,无法打印!").ShowDialog(); new TipsWindow("该任务无设置条形码信息,无法打印!").Show();
return; return;
} }
PrintWindow printWindow = new PrintWindow(); PrintWindow printWindow = new PrintWindow();
printWindow.barCodeModel = new BarCodeModel printWindow.barCodeModel = new BarCodeModel
{ {
Brand = BarCodeModel.Brand, Brand = BarCodeModel.Brand,
@ -189,6 +191,7 @@ namespace BBWY.Client.Models
SkuName = BarCodeModel.SkuName SkuName = BarCodeModel.SkuName
}; };
printWindow.LoadData(); printWindow.LoadData();
//printWindow.Datas = LoadBarLabelModels();
printWindow.Show(); printWindow.Show();
} }
@ -204,79 +207,75 @@ namespace BBWY.Client.Models
var model = packTaskService.UpdateTaskStatus(taskId, 1); var model = packTaskService.UpdateTaskStatus(taskId, 1);
if (model != null && model.Success) if (model != null && model.Success)
{ {
ViewModelLocator viewModelLocator = new ViewModelLocator();
var wareHouse = viewModelLocator.WareHouseList;
wareHouse.SearchTaskList();
this.TaskStatus = TaskStateType.; this.TaskStatus = TaskStateType.;
// new TipsWindow("修改成功").Show(); 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; private DateTime endTime;
/// <summary> /// <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 = "订单管理", Name = "订单管理",
ChildList = new List<MenuModel>() 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" }
} }
}); });

274
BBWY.Client/ViewModels/Order/OrderListViewModel.cs

@ -47,7 +47,7 @@ namespace BBWY.Client.ViewModels
private bool onlyUnhandle; private bool onlyUnhandle;
private Random random; private Random random;
public GlobalContext globalContext { get; set; } public GlobalContext globalContext { get; set; }
private bool? includeAfterOrder; //private bool? includeAfterOrder;
private bool includeExceptionOrder; private bool includeExceptionOrder;
//private decimal currentConditionsTotalProfit; //private decimal currentConditionsTotalProfit;
private string searchServiceId; private string searchServiceId;
@ -90,7 +90,7 @@ namespace BBWY.Client.ViewModels
public bool ExcludeSD { get => excludeSD; set { Set(ref excludeSD, value); } } public bool ExcludeSD { get => excludeSD; set { Set(ref excludeSD, value); } }
public bool ExcludeCanceled { get => excludeCanceled; set { Set(ref excludeCanceled, value); } } public bool ExcludeCanceled { get => excludeCanceled; set { Set(ref excludeCanceled, value); } }
public bool? IncludeAfterOrder { get => includeAfterOrder; set { Set(ref includeAfterOrder, value); } } //public bool? IncludeAfterOrder { get => includeAfterOrder; set { Set(ref includeAfterOrder, value); } }
public string SearchServiceId { get => searchServiceId; set { Set(ref searchServiceId, value); } } public string SearchServiceId { get => searchServiceId; set { Set(ref searchServiceId, value); } }
/// <summary> /// <summary>
@ -128,13 +128,13 @@ namespace BBWY.Client.ViewModels
public ICommand EditVenderRemarkCommand { get; set; } public ICommand EditVenderRemarkCommand { get; set; }
public ICommand SetIncludeAfterOrderCommand { get; set; } //public ICommand SetIncludeAfterOrderCommand { get; set; }
public ICommand FindAfterSaleOrderCommand { get; set; } //public ICommand FindAfterSaleOrderCommand { get; set; }
public ICommand EditAfterSaleOrderCommand { get; set; } //public ICommand EditAfterSaleOrderCommand { get; set; }
public ICommand EditAfterSaleOrderRefundPurchaseAmountCommand { get; set; } //public ICommand EditAfterSaleOrderRefundPurchaseAmountCommand { get; set; }
public ICommand SetIncludeExceptionOrderCommand { get; set; } public ICommand SetIncludeExceptionOrderCommand { get; set; }
@ -227,11 +227,11 @@ namespace BBWY.Client.ViewModels
OutStockCommand = new RelayCommand<Order>((o) => OutStock(o)); OutStockCommand = new RelayCommand<Order>((o) => OutStock(o));
EditVenderRemarkCommand = new RelayCommand<Order>(EditVenderRemark); EditVenderRemarkCommand = new RelayCommand<Order>(EditVenderRemark);
ExportCommand = new RelayCommand(Export); ExportCommand = new RelayCommand(Export);
SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder); //SetIncludeAfterOrderCommand = new RelayCommand(SetIncludeAfterOrder);
SetIncludeExceptionOrderCommand = new RelayCommand(SetIncludeExceptionOrder); SetIncludeExceptionOrderCommand = new RelayCommand(SetIncludeExceptionOrder);
EditAfterSaleOrderCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrder); //EditAfterSaleOrderCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrder);
EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrderRefundPurchaseAmount); //EditAfterSaleOrderRefundPurchaseAmountCommand = new RelayCommand<AfterSaleOrder>(EditAfterSaleOrderRefundPurchaseAmount);
FindAfterSaleOrderCommand = new RelayCommand<object>(FindAfterSaleOrder); //FindAfterSaleOrderCommand = new RelayCommand<object>(FindAfterSaleOrder);
OpenSkuDetailCommand = new RelayCommand<object>(OpenSkuDetail); OpenSkuDetailCommand = new RelayCommand<object>(OpenSkuDetail);
SearchOrderCommand.Execute(null); SearchOrderCommand.Execute(null);
} }
@ -254,7 +254,7 @@ namespace BBWY.Client.ViewModels
StartDate = DateTime.Now.Date; StartDate = DateTime.Now.Date;
} }
PageIndex = 1; PageIndex = 1;
IncludeAfterOrder = null; //IncludeAfterOrder = null;
IncludeExceptionOrder = false; IncludeExceptionOrder = false;
} }
@ -300,23 +300,23 @@ namespace BBWY.Client.ViewModels
Task.Factory.StartNew(() => LoadOrder(1)); Task.Factory.StartNew(() => LoadOrder(1));
} }
public void SetIncludeAfterOrder() //public void SetIncludeAfterOrder()
{ //{
InitSearchParam(); // InitSearchParam();
IncludeAfterOrder = true; // IncludeAfterOrder = true;
Task.Factory.StartNew(() => LoadOrder(1)); // Task.Factory.StartNew(() => LoadOrder(1));
} //}
public void SetIncludeAfterOrder(string orderId, string skuId, DateTime startDate, DateTime endDate) //public void SetIncludeAfterOrder(string orderId, string skuId, DateTime startDate, DateTime endDate)
{ //{
InitSearchParam(); // InitSearchParam();
SearchOrderId = orderId; // SearchOrderId = orderId;
SearchSku = skuId; // SearchSku = skuId;
StartDate = startDate; // StartDate = startDate;
EndDate = endDate; // EndDate = endDate;
IncludeAfterOrder = true; // IncludeAfterOrder = true;
Task.Factory.StartNew(() => LoadOrder(1)); // Task.Factory.StartNew(() => LoadOrder(1));
} //}
public void RefreshOrder(string orderId, bool isRemoveOrder = false) public void RefreshOrder(string orderId, bool isRemoveOrder = false)
{ {
@ -389,10 +389,10 @@ namespace BBWY.Client.ViewModels
/// <param name="pageIndex"></param> /// <param name="pageIndex"></param>
private void LoadOrder(int pageIndex) private void LoadOrder(int pageIndex)
{ {
if (IncludeAfterOrder == true) //if (IncludeAfterOrder == true)
LoadAfterSaleOrder(pageIndex); // LoadAfterSaleOrder(pageIndex);
else //else
LoadNormalOrder(pageIndex); LoadNormalOrder(pageIndex);
if (!IsSDGroup) if (!IsSDGroup)
{ {
@ -401,7 +401,7 @@ namespace BBWY.Client.ViewModels
} }
else else
{ {
Task.Factory.StartNew(() => LoadSDGroupPersonStatistics()); Task.Factory.StartNew(() => LoadSDGroupPersonStatistics());
} }
} }
@ -437,7 +437,7 @@ namespace BBWY.Client.ViewModels
var orderList = response.Data.Items.Map<IList<Order>>(); var orderList = response.Data.Items.Map<IList<Order>>();
App.Current.Dispatcher.Invoke(() => App.Current.Dispatcher.Invoke(() =>
{ {
OrderList.Clear(); OrderList.Clear();
foreach (var order in orderList) foreach (var order in orderList)
{ {
@ -861,22 +861,22 @@ namespace BBWY.Client.ViewModels
var manualEditCostOrderSkuList = manualCalculationCost.ManualEditCostOrderSkuList; var manualEditCostOrderSkuList = manualCalculationCost.ManualEditCostOrderSkuList;
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId, Task.Factory.StartNew(() => orderService.ManualCalculationCost(orderId,
isSetStorageType, isSetStorageType,
storageType, storageType,
manualEditCostOrderSkuList, manualEditCostOrderSkuList,
globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r => globalContext.User.Shop.PlatformCommissionRatio ?? 0.05M)).ContinueWith(r =>
{ {
var response = r.Result; var response = r.Result;
if (!response.Success) if (!response.Success)
{ {
IsLoading = false; IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "手动计算成本")); App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "手动计算成本"));
return; return;
} }
//LoadOrder(PageIndex); //手动计算成功刷新订单列表 //LoadOrder(PageIndex); //手动计算成功刷新订单列表
RefreshOrder(orderId, isSetStorageType); RefreshOrder(orderId, isSetStorageType);
}); });
} }
private void OutStock(Order o) private void OutStock(Order o)
@ -919,15 +919,15 @@ namespace BBWY.Client.ViewModels
private void SyncOrder() private void SyncOrder()
{ {
IsLoading = true; IsLoading = true;
Task.Factory.StartNew(() => orderService.SyncOrder(globalContext.User.Shop.ShopId, StartDate, EndDate)).ContinueWith(r => Task.Factory.StartNew(() => orderService.SyncOrder(globalContext.User.Shop.ShopId, StartDate, EndDate)).ContinueWith(r =>
{ {
IsLoading = false; IsLoading = false;
var response = r.Result; var response = r.Result;
if (response.Success) if (response.Success)
App.Current.Dispatcher.Invoke(() => MessageBox.Show("同步任务创建成功,该任务会执行一段时间,请稍后查询订单列表观察同步结果", "同步订单")); App.Current.Dispatcher.Invoke(() => MessageBox.Show("同步任务创建成功,该任务会执行一段时间,请稍后查询订单列表观察同步结果", "同步订单"));
else else
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "同步订单")); App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "同步订单"));
}); });
} }
private void EditVenderRemark(Order order) private void EditVenderRemark(Order order)
@ -1022,84 +1022,84 @@ namespace BBWY.Client.ViewModels
}); });
} }
private void EditAfterSaleOrder(AfterSaleOrder afterSaleOrder) //private void EditAfterSaleOrder(AfterSaleOrder afterSaleOrder)
{ //{
var w = new EditAfterSaleOrderSku(afterSaleOrder); // var w = new EditAfterSaleOrderSku(afterSaleOrder);
w.Closed += EditAfterSaleOrderSku_Closed; // w.Closed += EditAfterSaleOrderSku_Closed;
w.ShowDialog(); // w.ShowDialog();
} //}
private void EditAfterSaleOrderSku_Closed(object sender, EventArgs e) //private void EditAfterSaleOrderSku_Closed(object sender, EventArgs e)
{ //{
var w = sender as EditAfterSaleOrderSku; // var w = sender as EditAfterSaleOrderSku;
if (w.DialogResult != true) // if (w.DialogResult != true)
return; // return;
//
var afterSaleOrder = w.SaleOrder; // var afterSaleOrder = w.SaleOrder;
IsLoading = true; // IsLoading = true;
Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrder(afterSaleOrder.Id, // Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrder(afterSaleOrder.Id,
afterSaleOrder.OrderId, // afterSaleOrder.OrderId,
afterSaleOrder.ProductResult.Value, // afterSaleOrder.ProductResult.Value,
afterSaleOrder.ServiceResult.Value, // afterSaleOrder.ServiceResult.Value,
afterSaleOrder.ProductHealth.Value, // afterSaleOrder.ProductHealth.Value,
afterSaleOrder.ReissueAfterSaleAmount, // afterSaleOrder.ReissueAfterSaleAmount,
afterSaleOrder.ReissueFreight, // afterSaleOrder.ReissueFreight,
afterSaleOrder.ReissueProductAmount, // afterSaleOrder.ReissueProductAmount,
afterSaleOrder.SDRefundFreight)).ContinueWith(t => // afterSaleOrder.SDRefundFreight)).ContinueWith(t =>
{ // {
var response = t.Result; // var response = t.Result;
if (!response.Success) // if (!response.Success)
{ // {
IsLoading = false; // IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后")); // App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改售后"));
return; // return;
} // }
RefreshAfterOrder(afterSaleOrder.Id); // RefreshAfterOrder(afterSaleOrder.Id);
}); // });
} //}
private void EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder) //private void EditAfterSaleOrderRefundPurchaseAmount(AfterSaleOrder afterSaleOrder)
{ //{
var w = new EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder); // var w = new EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder);
w.Closed += EditAfterSaleOrderRefundPurchaseAmount_Closed; // w.Closed += EditAfterSaleOrderRefundPurchaseAmount_Closed;
w.ShowDialog(); // w.ShowDialog();
} //}
private void EditAfterSaleOrderRefundPurchaseAmount_Closed(object sender, EventArgs e) //private void EditAfterSaleOrderRefundPurchaseAmount_Closed(object sender, EventArgs e)
{ //{
var w = sender as EditAfterSaleOrderRefundPurchaseAmount; // var w = sender as EditAfterSaleOrderRefundPurchaseAmount;
if (w.DialogResult != true) // if (w.DialogResult != true)
return; // return;
//
var afterSaleOrder = w.SaleOrder; // var afterSaleOrder = w.SaleOrder;
IsLoading = true; // IsLoading = true;
Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder.Id, // Task.Factory.StartNew(() => afterOrderService.EditAfterSaleOrderRefundPurchaseAmount(afterSaleOrder.Id,
afterSaleOrder.OrderId, // afterSaleOrder.OrderId,
afterSaleOrder.RefundPurchaseAmount.Value, // afterSaleOrder.RefundPurchaseAmount.Value,
afterSaleOrder.RefundMerchantOrderNo, // afterSaleOrder.RefundMerchantOrderNo,
afterSaleOrder.RefundAlipayOrderNo)) // afterSaleOrder.RefundAlipayOrderNo))
.ContinueWith(t => // .ContinueWith(t =>
{ // {
var response = t.Result; // var response = t.Result;
if (!response.Success) // if (!response.Success)
{ // {
IsLoading = false; // IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改采购退款")); // App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "修改采购退款"));
return; // return;
} // }
RefreshAfterOrder(afterSaleOrder.Id); // RefreshAfterOrder(afterSaleOrder.Id);
}); // });
} //}
private void FindAfterSaleOrder(object param) //private void FindAfterSaleOrder(object param)
{ //{
var paramList = (object[])param; // var paramList = (object[])param;
var orderId = paramList[0].ToString(); // var orderId = paramList[0].ToString();
var skuId = paramList[1].ToString(); // var skuId = paramList[1].ToString();
var startDate = DateTime.Parse(paramList[2].ToString()).Date; // var startDate = DateTime.Parse(paramList[2].ToString()).Date;
var endDate = DateTime.Now.Date; // var endDate = DateTime.Now.Date;
SetIncludeAfterOrder(orderId, skuId, startDate, endDate); // SetIncludeAfterOrder(orderId, skuId, startDate, endDate);
} //}
private void OpenSkuDetail(object param) private void OpenSkuDetail(object param)
{ {

2
BBWY.Client/ViewModels/PackTask/ConsumableViewModel.cs

@ -76,7 +76,7 @@ namespace BBWY.Client.ViewModels.PackTask
} }
private void SearchConsumable() public void SearchConsumable()
{ {
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {

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

@ -120,13 +120,7 @@ namespace BBWY.Client.ViewModels.PackTask
/// </summary> /// </summary>
public ObservableCollection<PackTaskModel> PackTaskList { get => packTaskList; set { Set(ref packTaskList, value); } } 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 #endregion

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

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

116
BBWY.Client/ViewModels/ServiceOrder/EditServiceOrderViewModel.cs

@ -0,0 +1,116 @@
using BBWY.Client.APIServices;
using BBWY.Client.Models;
using GalaSoft.MvvmLight.Command;
using HandyControl.Controls;
using System.Threading.Tasks;
using System.Windows.Input;
namespace BBWY.Client.ViewModels
{
public class EditServiceOrderViewModel : BaseVM
{
private ServiceOrderService serviceOrderService;
/// <summary>
/// 主键Id
/// </summary>
private long servicePId;
private string orderId;
private ServiceResult? serviceResult;
private decimal? sdRefundFreight;
private ReturnDirection? returnDirection;
private string renewalOrderId;
private decimal? reissueAfterSaleAmount;
private string returnCheckRemark;
private StorageType? renewalType;
private string renewalPurchaseOrderId;
private Platform? renewalPurchasePlatform;
private decimal? reissueFreight;
private decimal? reissueProductAmount;
private bool isLoading;
public ServiceResult? ServiceResult { get => serviceResult; set { Set(ref serviceResult, value); } }
public decimal? SDRefundFreight { get => sdRefundFreight; set { Set(ref sdRefundFreight, value); } }
public ReturnDirection? ReturnDirection { get => returnDirection; set { Set(ref returnDirection, value); } }
public string RenewalOrderId { get => renewalOrderId; set { Set(ref renewalOrderId, value); } }
/// <summary>
/// 售后补发成本
/// </summary>
public decimal? ReissueAfterSaleAmount { get => reissueAfterSaleAmount; set { Set(ref reissueAfterSaleAmount, value); } }
/// <summary>
/// 退货检查备注
/// </summary>
public string ReturnCheckRemark { get => returnCheckRemark; set { Set(ref returnCheckRemark, value); } }
public StorageType? RenewalType { get => renewalType; set { Set(ref renewalType, value); } }
public string RenewalPurchaseOrderId { get => renewalPurchaseOrderId; set { Set(ref renewalPurchaseOrderId, value); } }
public Platform? RenewalPurchasePlatform { get => renewalPurchasePlatform; set { Set(ref renewalPurchasePlatform, value); } }
public ICommand SaveCommand { get; set; }
public decimal? ReissueFreight { get => reissueFreight; set { Set(ref reissueFreight, value); } }
public decimal? ReissueProductAmount { get => reissueProductAmount; set { Set(ref reissueProductAmount, value); } }
public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } }
public EditServiceOrderViewModel(ServiceOrderService serviceOrderService)
{
this.serviceOrderService = serviceOrderService;
SaveCommand = new RelayCommand(Save);
}
public void SetData(ServiceOrder serviceOrder)
{
this.servicePId = serviceOrder.Id;
this.orderId = serviceOrder.OrderId;
this.ServiceResult = serviceOrder.ServiceResult;
this.SDRefundFreight = serviceOrder.SDRefundFreight;
this.ReturnDirection = serviceOrder.ReturnDirection;
this.RenewalOrderId = serviceOrder.RenewalOrderId;
this.ReissueAfterSaleAmount = serviceOrder.ReissueAfterSaleAmount;
this.ReturnCheckRemark = serviceOrder.ReturnCheckRemark;
this.RenewalType = serviceOrder.RenewalType;
this.RenewalPurchaseOrderId = serviceOrder.RenewalPurchaseOrderId;
this.RenewalPurchasePlatform = serviceOrder.RenewalPurchasePlatform;
this.ReissueFreight = serviceOrder.ReissueFreight;
this.ReissueProductAmount = serviceOrder.ReissueProductAmount;
}
private void Save()
{
if (IsLoading)
return;
IsLoading = true;
Task.Factory.StartNew(() => serviceOrderService.EditServiceOrder(servicePId,
orderId,
ServiceResult,
SDRefundFreight,
ReturnDirection,
RenewalOrderId,
ReissueAfterSaleAmount,
ReturnCheckRemark,
RenewalType,
RenewalPurchaseOrderId,
RenewalPurchasePlatform,
ReissueFreight,
ReissueProductAmount)).ContinueWith(t =>
{
IsLoading = false;
var r = t.Result;
if (!r.Success)
{
App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "提示"));
return;
}
//closeEditServiceOrder
GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(true, "closeEditServiceOrder");
});
}
}
}

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

@ -0,0 +1,286 @@
using BBWY.Client.APIServices;
using BBWY.Client.Helpers;
using BBWY.Client.Models;
using BBWY.Client.Views.ServiceOrder;
using BBWY.Common.Extensions;
using BBWY.Common.Http;
using BBWY.Common.Models;
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 ICommand EditServiceOrderCommand { 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);
EditServiceOrderCommand = new RelayCommand<ServiceOrder>(OpenEditServiceOrder);
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";
//}
#endregion
s.Init();
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}"));
}
}
private void OpenEditServiceOrder(ServiceOrder serviceOrder)
{
var w = new EditServiceOrder(serviceOrder);
var r = w.ShowDialog();
if (r == true)
{
IsLoading = true;
Task.Factory.StartNew(() => RefreshServiceOrder(serviceOrder));
}
}
private void RefreshServiceOrder(long servicePId)
{
var order = ServiceOrderList.FirstOrDefault(s => s.Id == servicePId);
RefreshServiceOrder(order);
}
private void RefreshServiceOrder(ServiceOrder serviceOrder)
{
var serviceOrderResponse = serviceOrderService.GetList(string.Empty, string.Empty, string.Empty, serviceOrder.ServiceId, serviceOrder.ShopId, null, null, 1, 1, null, null);
IsLoading = false;
if (!serviceOrderResponse.Success)
{
Application.Current.Dispatcher.Invoke(() => MessageBox.Show(serviceOrderResponse.Msg, "刷新服务单"));
return;
}
var newServiceOrder = serviceOrderResponse.Data.Items.FirstOrDefault().Map<ServiceOrder>();
newServiceOrder.Init();
Application.Current.Dispatcher.Invoke(() =>
{
var orderIndex = ServiceOrderList.IndexOf(serviceOrder);
ServiceOrderList.Remove(serviceOrder);
ServiceOrderList.Insert(orderIndex, newServiceOrder);
});
}
}
}

25
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 public ConsumableViewModel Consumable
{ {
get get
@ -157,8 +169,6 @@ namespace BBWY.Client.ViewModels
public CreatePackTaskViewModel CreateTaskView public CreatePackTaskViewModel CreateTaskView
{ {
get get
{ {
using (var s = sp.CreateScope()) using (var s = sp.CreateScope())
@ -169,7 +179,7 @@ namespace BBWY.Client.ViewModels
} }
} }
} }
public ChoosePurchaseSchemeViewModel ChoosePurchaseScheme public ChoosePurchaseSchemeViewModel ChoosePurchaseScheme
{ {
@ -219,5 +229,14 @@ namespace BBWY.Client.ViewModels
return s.ServiceProvider.GetRequiredService<BillCorrectionViewModel>(); return s.ServiceProvider.GetRequiredService<BillCorrectionViewModel>();
} }
} }
public EditServiceOrderViewModel EditServiceOrder
{
get
{
using var s = sp.CreateScope();
return s.ServiceProvider.GetRequiredService<EditServiceOrderViewModel>();
}
}
} }
} }

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

File diff suppressed because it is too large

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

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

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

@ -155,7 +155,7 @@
</Grid> </Grid>
<Grid Grid.Column="5"> <Grid Grid.Column="5">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<c:BButton Background="Transparent" Foreground="Blue" Content="编辑" Command="{Binding EditConsumableCommand}" Margin="0 0 10 0"/> <c:BButton Background="Transparent" Foreground="Blue" Content="编辑" Command="{Binding EditConsumableCommand}" CommandParameter="" Margin="0 0 10 0"/>
<c:BButton Background="Transparent" Foreground="Blue" Content="删除" Command="{Binding DeletedConsumableCommand}" <c:BButton Background="Transparent" Foreground="Blue" Content="删除" Command="{Binding DeletedConsumableCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}, Path=ItemsSource}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListBox}, Path=ItemsSource}"
/> />

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

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

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

@ -16,7 +16,9 @@
CloseButtonColor="{StaticResource WindowButtonColor}" CloseButtonColor="{StaticResource WindowButtonColor}"
MinButtonVisibility="Collapsed" MinButtonVisibility="Collapsed"
MaxButtonVisibility="Collapsed" MaxButtonVisibility="Collapsed"
RightButtonGroupMargin="0,5,5,0"> RightButtonGroupMargin="0,5,5,0"
ResizeMode="NoResize"
>
<!-- DataContext="{Binding CreateSetBarCodeView,Source={StaticResource Locator}}"--> <!-- DataContext="{Binding CreateSetBarCodeView,Source={StaticResource Locator}}"-->
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>

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

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

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

@ -30,7 +30,7 @@ namespace BBWY.Client.Views.PackTask
{ {
InitializeComponent(); InitializeComponent();
var printingNames = System.Drawing.Printing.PrinterSettings.InstalledPrinters;//获取本机的打印机数据 var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据
int index = -1; int index = -1;
int selectIndex = 0; int selectIndex = 0;
foreach (string name in printingNames) foreach (string name in printingNames)
@ -58,7 +58,7 @@ namespace BBWY.Client.Views.PackTask
/// </summary> /// </summary>
public void LoadData() public void LoadData()
{ {
if (certificateModel==null) if (CertificateModel==null)
{ {
cer.Visibility = Visibility.Collapsed; cer.Visibility = Visibility.Collapsed;
} }
@ -69,20 +69,20 @@ namespace BBWY.Client.Views.PackTask
CertificateModel data = new CertificateModel CertificateModel data = new CertificateModel
{ {
Brand = certificateModel.Brand, Brand = CertificateModel.Brand,
BrandName = certificateModel.BrandName, BrandName = CertificateModel.BrandName,
ExcuteStander = certificateModel.ExcuteStander, ExcuteStander = CertificateModel.ExcuteStander,
FactoryNumber = certificateModel.FactoryNumber, FactoryNumber = CertificateModel.FactoryNumber,
IsLogo = certificateModel.IsLogo, IsLogo =CertificateModel.IsLogo,
LabelModel = certificateModel.LabelModel, LabelModel = CertificateModel.LabelModel,
ProductAdress = certificateModel.ProductAdress, ProductAdress = CertificateModel.ProductAdress,
Id = certificateModel.Id, Id = CertificateModel.Id,
ProductDate = certificateModel.ProductDate, ProductDate = CertificateModel.ProductDate,
ProductNo = certificateModel.ProductNo, ProductNo = CertificateModel.ProductNo,
ProductShop = certificateModel.ProductShop, ProductShop = CertificateModel.ProductShop,
Shader = certificateModel.Shader, Shader = CertificateModel.Shader,
SkuId = certificateModel.SkuId, SkuId = CertificateModel.SkuId,
Reseller = certificateModel.Reseller Reseller = CertificateModel.Reseller
}; };
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -116,7 +116,7 @@ namespace BBWY.Client.Views.PackTask
} }
} }
if (barCodeModel == null) if (BarCodeModel == null)
{ {
bar.Visibility = Visibility.Collapsed; bar.Visibility = Visibility.Collapsed;
} }
@ -124,8 +124,8 @@ namespace BBWY.Client.Views.PackTask
{ {
bar.Visibility = Visibility.Visible; bar.Visibility = Visibility.Visible;
cer.Visibility = Visibility.Collapsed; cer.Visibility = Visibility.Collapsed;
this.DataContext = barCodeModel; this.DataContext = BarCodeModel;
if (barCodeModel.LabelModel == BarcodeLabelModel.barsimplify) if (BarCodeModel.LabelModel == BarcodeLabelModel.barsimplify)
{//精简版 {//精简版
jingjian.Visibility = Visibility.Visible; jingjian.Visibility = Visibility.Visible;
biaozhun.Visibility = Visibility.Collapsed; biaozhun.Visibility = Visibility.Collapsed;
@ -138,22 +138,18 @@ 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; }
private void BButton_Click(object sender, RoutedEventArgs e) private void BButton_Click(object sender, RoutedEventArgs e)
{ {
int printCount = Convert.ToInt32(tbCount.Text);
string printName = cbPrints.Text;//选择的要打印的打印机名称
Task.Factory.StartNew(() => { Task.Factory.StartNew(() => {
try try
{ {
//string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
//string path = appPath + $"/Resources/LabelNames/{LabelName}.btw";
int printCount = Convert.ToInt32(tbCount.Text);//份数
string printName = cbPrints.Text;//选择的要打印的打印机名称
PrintDocument pd = new PrintDocument(); PrintDocument pd = new PrintDocument();
PrintDocument document = new PrintDocument(); PrintDocument document = new PrintDocument();
document.PrinterSettings.PrinterName = printName; document.PrinterSettings.PrinterName = printName;
@ -180,13 +176,13 @@ namespace BBWY.Client.Views.PackTask
//args.Graphics.SetClip(bounds);//设置打印区域 //args.Graphics.SetClip(bounds);//设置打印区域
Font font = new Font("宋体", 6, System.Drawing.FontStyle.Regular); 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);
} }
} }

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

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BBWY.Client.Views.PackTask" xmlns:local="clr-namespace:BBWY.Client.Views.PackTask"
mc:Ignorable="d" 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:c="clr-namespace:BBWY.Controls;assembly=BBWY.Controls"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors" xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:ctr="clr-namespace:BBWY.Client.Converters" xmlns:ctr="clr-namespace:BBWY.Client.Converters"
@ -224,7 +224,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}" Command="{Binding UpLoadPackCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
/> />

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

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

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

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

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

@ -0,0 +1,478 @@
<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="{Binding StorageType}" 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.EditServiceOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Grid.Column="1" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<TextBlock Text="{Binding ReturnCheckRemark}" 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 RenewalPurchaseOrderId,ConverterParameter=#null:Collapsed:Visible,Converter={StaticResource objConverter}}">
<TextBlock>
<Run Text="采购平台:"/>
<Run Text="{Binding RenewalPurchasePlatform}"/>
</TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock Text="采购订单号:"/>
<c:BButton Content="{Binding RenewalPurchaseOrderId}" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.CopyTextCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding RenewalPurchaseOrderId}" Margin="3,0,0,0"/>
</StackPanel>
</StackPanel>
<Border Grid.Column="4" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<StackPanel Orientation="Horizontal" Grid.Column="5" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,20">
<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 Height="1" Background="{StaticResource Border.Brush}" Grid.Column="5" VerticalAlignment="Bottom" Margin="0,0,0,27"/>
<c:BButton Content="设置" VerticalAlignment="Bottom"
HorizontalAlignment="Stretch"
Background="Transparent"
Foreground="{StaticResource Text.Color}"
Grid.Column="5"
Command="{Binding DataContext.EditServiceOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}"
CommandParameter="{Binding }"/>
<Border Grid.Column="5" Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
<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>
/// 订单推送 /// 接收订单推送
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>
[HttpPost] [HttpPost]
@ -67,5 +67,23 @@ namespace BBWY.Server.API.Controllers
{ {
orderSyncBusiness.OrderPublish(request); orderSyncBusiness.OrderPublish(request);
} }
/// <summary>
/// 检查全店暂停订单
/// </summary>
[HttpPost]
public void CheckJDPauseOrder()
{
orderSyncBusiness.CheckJDPauseOrder(null);
}
/// <summary>
/// 检查全店暂停订单
/// </summary>
[HttpPost("{shopId}")]
public void CheckJDPauseOrder(long shopId)
{
orderSyncBusiness.CheckJDPauseOrder(shopId);
}
} }
} }

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

@ -0,0 +1,38 @@
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);
}
/// <summary>
/// 修改服务单
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditServiceOrder([FromBody] EditQueryServiceOrderRequest request)
{
serviceOrderBusiness.EditServiceOrder(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.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq; using System.Linq;
namespace BBWY.Server.API.Controllers namespace BBWY.Server.API.Controllers
{ {
public class ServiceOrderSyncController : BaseApiController public class ServiceOrderSyncController : BaseApiController
{ {
private JDServiceOrderSyncBusiness jdServiceOrderSyncBusiness; private JDServiceOrderSyncBusiness jdServiceOrderSyncBusiness;
@ -15,11 +15,24 @@ namespace BBWY.Server.API.Controllers
this.jdServiceOrderSyncBusiness = jdServiceOrderSyncBusiness; this.jdServiceOrderSyncBusiness = jdServiceOrderSyncBusiness;
} }
[Consumes("application/x-www-form-urlencoded")] [Consumes("application/x-www-form-urlencoded")]
[HttpPost] [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); jdServiceOrderSyncBusiness.ReceiveKuaiDi100Push(param);
return new JsonResult(new
{
result = true,
returnCode = "200",
message = "成功"
});
} }
/// <summary> /// <summary>

3
BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs

@ -152,7 +152,8 @@ namespace BBWY.Server.Business
if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult. || if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult. ||
dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult. || dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult. ||
dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.线) dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.线)
{ if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.) {
if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.)
dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.退; dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.退;
dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount; dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount;

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

@ -5,12 +5,6 @@
<GenerateDocumentationFile>True</GenerateDocumentationFile> <GenerateDocumentationFile>True</GenerateDocumentationFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="新文件夹\**" />
<EmbeddedResource Remove="新文件夹\**" />
<None Remove="新文件夹\**" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" /> <PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" 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="圆通速递(YTO)",TargetName="圆通快递"},
new LogisticsCompanyRelationship(){SourceName="邮政国内小包",TargetName="邮政快递包裹"}, new LogisticsCompanyRelationship(){SourceName="邮政国内小包",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="厂家自送"}, 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(); throw new NotImplementedException();
} }
public virtual JArray GetServiceOrderList(Model.Dto.QueryServiceOrderRequest request) public virtual JArray GetServiceOrderList(QueryServiceOrderRequest request)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }

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

@ -0,0 +1,100 @@
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, Order, OrderSku>()
.InnerJoin((s, o, osku) => s.OrderId == o.Id)
.InnerJoin((s, o, osku) => s.OrderId == osku.OrderId && s.SkuId == osku.SkuId)
.Where((s, o, osku) => s.ShopId == request.ShopId)
.WhereIf(!string.IsNullOrEmpty(request.Sku), (s, o, osku) => s.SkuId == request.Sku)
.WhereIf(!string.IsNullOrEmpty(request.Spu), (s, o, osku) => s.ProductId == request.Spu)
.WhereIf(!string.IsNullOrEmpty(request.OrderId), (s, o, osku) => s.OrderId == request.OrderId)
.WhereIf(!string.IsNullOrEmpty(request.ServiceId), (s, o, osku) => s.ServiceId == request.ServiceId)
.WhereIf(request.ServiceOrderState != null, (s, o, osku) => s.Status == request.ServiceOrderState)
.WhereIf(request.ReturnDirection != null, (s, o, osku) => s.ReturnDirection == request.ReturnDirection)
.WhereIf(request.StartDate != null, (s, o, osku) => s.ApplyTime >= request.StartDate)
.WhereIf(request.EndDate != null, (s, o, osku) => s.ApplyTime <= request.EndDate)
.OrderByDescending((s, o, osku) => s.ApplyTime)
.Count(out var total)
.Page(request.PageIndex, request.PageSize)
.ToList((s, o, 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,
RenewalOrderId = s.RenewalOrderId,
ReturnCheckRemark = s.ReturnCheckRemark,
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,
StorageType = o.StorageType
});
return new ServiceOrderResponse()
{
Count = total,
Items = list
};
}
public void EditServiceOrder(EditQueryServiceOrderRequest request)
{
fsql.Transaction(() =>
{
fsql.Update<ServiceOrder>(request.ServicePId).Set(s => s.ServiceResult, request.ServiceResult)
.Set(s => s.SDRefundFreight, request.SDRefundFreight)
.Set(s => s.ReturnDirection, request.ReturnDirection)
.Set(s => s.RenewalOrderId, request.RenewalOrderId)
.Set(s => s.ReissueAfterSaleAmount, request.ReissueAfterSaleAmount)
.Set(s => s.ReturnCheckRemark, request.ReturnCheckRemark)
.Set(s => s.RenewalType, request.RenewalType)
.Set(s => s.RenewalPurchaseOrderId, request.RenewalPurchaseOrderId)
.Set(s => s.RenewalPurchasePlatform, request.RenewalPurchasePlatform)
.Set(s => s.ReissueFreight, request.ReissueFreight)
.Set(s => s.ReissueProductAmount, request.ReissueProductAmount)
.ExecuteAffrows();
});
}
}
}

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

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

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

@ -735,7 +735,7 @@ namespace BBWY.Server.Business
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.); var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
foreach (var shop in shopList) 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; return orderState;
} }
/// <summary>
/// 接收订单推送
/// </summary>
/// <param name="request"></param>
public void OrderPublish(OrderPublishRequest request) 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)}"); nLogManager.Default().Info($"订单推送-{JsonConvert.SerializeObject(request)}");
if (request.erpOrderStatus != "5") if (request.orderStatus != "TRADE_CREATED")
return; return;
var shop = venderBusiness.GetShopByVenderId(request.venderId); var shop = venderBusiness.GetShopByVenderId(request.venderId);
if (shop == null) if (shop == null)
return; 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 SyncServiceOrderTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler SyncPauseOrderTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; } public LimitedConcurrencyLevelTaskScheduler PurchaseOrderCallbackTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler JDPopularizeTaskScheduler { get; private set; } public LimitedConcurrencyLevelTaskScheduler JDPopularizeTaskScheduler { get; private set; }
@ -48,6 +50,8 @@ namespace BBWY.Server.Business
JDPromotionDelayTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); JDPromotionDelayTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
JDPromotionMonitorTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10); JDPromotionMonitorTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
JDPromotionAutoStartTaskScheduler = 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 public partial class ExpressOrder
{ {
[Column(IsPrimary = true, IsIdentity = true)] [Column(IsPrimary = true)]
public long Id { get; set; } public long Id { get; set; }
[Column(DbType = "datetime")] [Column(DbType = "datetime")]
@ -45,8 +45,8 @@ namespace BBWY.Server.Model.Db
/// <summary> /// <summary>
/// 物流状态(0=待质检,1=已入库,2=派送中,3=运输中) /// 物流状态(0=待质检,1=已入库,2=派送中,3=运输中)
/// </summary> /// </summary>
[Column(MapType = typeof(int?))]
public int? TransportStatus { get; set; } public Enums.TransportState? TransportStatus { get; set; }
[Column(DbType = "datetime")] [Column(DbType = "datetime")]
public DateTime? UpdateTime { get; set; } public DateTime? UpdateTime { get; set; }

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

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

21
BBWY.Server.Model/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; }
}
}

21
BBWY.Server.Model/Dto/Request/ServiceOrder/EditQueryServiceOrderRequest.cs

@ -0,0 +1,21 @@
namespace BBWY.Server.Model.Dto
{
public class EditQueryServiceOrderRequest
{
public long ServicePId { get; set; }
public string OrderId { get; set; }
public Enums.ServiceResult? ServiceResult { get; set; }
public decimal? SDRefundFreight { get; set; }
public Enums.ReturnDirection? ReturnDirection { get; set; }
public string RenewalOrderId { get; set; }
public decimal? ReissueAfterSaleAmount { get; set; }
public string ReturnCheckRemark { get; set; }
public Enums.StorageType? RenewalType { get; set; }
public string RenewalPurchaseOrderId { get; set; }
public Enums.Platform? RenewalPurchasePlatform { get; set; }
public decimal? ReissueFreight { get; set; }
public decimal? ReissueProductAmount { get; set; }
}
}

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

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

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

@ -0,0 +1,291 @@
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; }
/// <summary>
/// 换新单号
/// </summary>
public string RenewalOrderId { get; set; }
/// <summary>
/// 退货检查备注
/// </summary>
public string ReturnCheckRemark { get; set; }
/// <summary>
/// 线下换新方式
/// </summary>
public Enums.StorageType? RenewalType { get; set; }
/// <summary>
/// 线下换新采购单号
/// </summary>
public string RenewalPurchaseOrderId { get; set; }
/// <summary>
/// 线下换新采购平台
/// </summary>
public Enums.Platform? RenewalPurchasePlatform { get; set; }
#region Sku
public string Logo { get; set; }
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
#region Order
public Enums.StorageType? StorageType { 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> /// <summary>
/// 采购方式 /// 采购方式 线上采购 = 0,线下采购 = 1
/// </summary> /// </summary>
public enum PurchaseMethod public enum PurchaseMethod
{ {
@ -255,5 +255,61 @@
{ {
= 0, = 1, = 2 = 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
}
} }
} }

72
BBWY.Test/Program.cs

@ -45,73 +45,21 @@ namespace BBWY.Test
//var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具 //var token = "44c19a1c1fbd4641957e6e8985ed1358jmtl"; //森王玩具
//var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; //可比车品 //var token = "4a0ddc095e054c7aa90adcaccb14f83cwzgr"; //可比车品
var dt1 = DateTime.Now; //var dt1 = DateTime.Now;
List<string> list = new List<string>(); //List<string> list = new List<string>();
for (var i = 1; i <= 5000000; i++) //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"); // 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}"); // Console.WriteLine($"生成第{i}位指纹,长度{str.Length},{str}");
list.Add(str); // list.Add(str);
} //}
var dt2 = DateTime.Now; //var dt2 = DateTime.Now;
Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒"); //Console.WriteLine($"总数量{list.Count},总耗时{(dt2 - dt1).TotalSeconds}秒");
var jdClient = GetJdClient(appkey, appSecret); var jdClient = GetJdClient(appkey, appSecret);
//var req = new AdsIbgUniversalJosServiceAdQueryRequest();
//req.accessPin = "可比玩具";
//req.businessType = "2";
//req.isDaily = "true";
//req.clickOrOrderDay = "0";
//req.pageSize = "100";
//req.page = "1";
//req.clickOrOrderCaliber = "1";
//req.startDay = "2023-03-10";
//req.endDay = "2023-03-10";
//req.giftFlag = "0";
//req.orderStatusCategory = "1";
//var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
/*
var req = new AscSyncListRequest();
req.buId = "10598776";
req.operatePin = "开发者测试";
req.operateNick = "开发者测试";
//req.serviceId = 1687549909;
//req.orderId = ;
//req.serviceStatus = ;
req.updateTimeBegin = DateTime.Parse("2023-03-01");
req.updateTimeEnd = DateTime.Now;
//req.freightUpdateDateBegin = ;
//req.freightUpdateDateEnd = ;
req.pageNumber = "1";
req.pageSize = "100";
var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
*/
//var req = new AscQueryViewRequest();
//req.buId = "10598776";
//req.operatePin = "开发测试";
//req.operateNick = "开发测试";
//req.serviceId = 1688379598;
//req.orderId = 262837096353;
//var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
////var res = jdClient.Execute(req, token, DateTime.Now.ToLocalTime());
//Console.WriteLine(JsonConvert.SerializeObject(res));
Console.ReadKey(); Console.ReadKey();
} }

5
JD.API/Controllers/PlatformSDKController.cs

@ -288,6 +288,7 @@ namespace JD.API.API.Controllers
return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionTask(request); return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionTask(request);
} }
[HttpPost]
public void StartJDPromotionDelayTask([FromBody] StartPromotionTaskDelayRequest request) public void StartJDPromotionDelayTask([FromBody] StartPromotionTaskDelayRequest request)
{ {
platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionDelayTask(request); platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).StartJDPromotionDelayTask(request);
@ -351,7 +352,7 @@ namespace JD.API.API.Controllers
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public JToken GetServiceOrderDetail(QueryServiceOrderDetailRequest request) public JToken GetServiceOrderDetail([FromBody] QueryServiceOrderDetailRequest request)
{ {
return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDetail(request); return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDetail(request);
} }
@ -362,7 +363,7 @@ namespace JD.API.API.Controllers
/// <param name="request"></param> /// <param name="request"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public JToken GetServiceOrderDeliveryDetail(QueryServiceOrderDetailRequest request) public JToken GetServiceOrderDeliveryDetail([FromBody] QueryServiceOrderDetailRequest request)
{ {
return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDeliveryDetail(request); return platformSDKBusinessList.FirstOrDefault(p => p.Platform == request.Platform).GetServiceOrderDeliveryDetail(request);
} }

2
JD.API/appsettings.json

@ -9,7 +9,7 @@
"ConnectionStrings": { "ConnectionStrings": {
"DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;", "DB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;",
}, },
"IsEnableSwagger": false, "IsEnableSwagger": true,
"AllowedHosts": "*", "AllowedHosts": "*",
"ValidatePlatformKey": 1 "ValidatePlatformKey": 1
} }

Loading…
Cancel
Save