506583276@qq.com 2 years ago
parent
commit
1db1ac8af2
  1. 29
      BBWYB.Client/APIServices/ProductService.cs
  2. 64
      BBWYB.Client/APIServices/PurchaseProductAPIService.cs
  3. 6
      BBWYB.Client/App.xaml.cs
  4. 23
      BBWYB.Client/GlobalContext.cs
  5. 5
      BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs
  6. 2
      BBWYB.Client/Models/Product/Purchaser.cs
  7. 1
      BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs
  8. BIN
      BBWYB.Client/Resources/Images/bbwylogo.ico
  9. 6
      BBWYB.Client/ViewModels/MainViewModel.cs
  10. 8
      BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs
  11. 21
      BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs
  12. 15
      BBWYB.Client/Views/WebB/WebB.xaml.cs
  13. 14
      BBWYB.Client/Views/WebB/WebB_KPI.xaml
  14. 87
      BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs
  15. 19
      BBWYB.Server.API/Controllers/BaseApiController.cs
  16. 17
      BBWYB.Server.API/Controllers/DataRepairController.cs
  17. 40
      BBWYB.Server.API/Controllers/OrderController.cs
  18. 53
      BBWYB.Server.API/Controllers/OrderMessageController.cs
  19. 10
      BBWYB.Server.API/Controllers/ProductController.cs
  20. 21
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  21. 63
      BBWYB.Server.API/Controllers/TimeLimitTaskController.cs
  22. 8
      BBWYB.Server.API/appsettings.json
  23. 117
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  24. 83
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  25. 34
      BBWYB.Server.Business/Extensions/OrderStateExtension.cs
  26. 21
      BBWYB.Server.Business/Extensions/PurchaseExpressOrderExtension.cs
  27. 54
      BBWYB.Server.Business/JD/JDBusiness.cs
  28. 32
      BBWYB.Server.Business/MDS/MDSBusiness.cs
  29. 56
      BBWYB.Server.Business/Order/Message/OrderMessageBusiness.cs
  30. 442
      BBWYB.Server.Business/Order/OrderBusiness.cs
  31. 42
      BBWYB.Server.Business/Product/ProductBusiness.cs
  32. 1613
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  33. 64
      BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
  34. 2
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  35. 216
      BBWYB.Server.Business/QiKuManager.cs
  36. 108
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  37. 140
      BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
  38. 5
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  39. 0
      BBWYB.Server.Model/Db/Order/Cost/OrderCost.cs
  40. 0
      BBWYB.Server.Model/Db/Order/Cost/OrderCostDetail.cs
  41. 62
      BBWYB.Server.Model/Db/Order/Cost/OrderSkuCost.cs
  42. 35
      BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs
  43. 12
      BBWYB.Server.Model/Db/Order/Order.cs
  44. 38
      BBWYB.Server.Model/Db/Order/OrderMessage.cs
  45. 45
      BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs
  46. 4
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  47. 2
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs
  48. 8
      BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs
  49. 84
      BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs
  50. 9
      BBWYB.Server.Model/Dto/Request/Order/AddOrderMessageRequest.cs
  51. 44
      BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs
  52. 12
      BBWYB.Server.Model/Dto/Request/Order/SetSpecialOrderRequest.cs
  53. 6
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/DeletePurchaseOrderRequest.cs
  54. 39
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/PurchaserDeliveryRequest.cs
  55. 2
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/SetHistoryPurchaseOrderRequest.cs
  56. 6
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs
  57. 9
      BBWYB.Server.Model/Dto/Request/QiKu/QiKuPackTaskSkuPurchaseSchemeIdRequest.cs
  58. 11
      BBWYB.Server.Model/Dto/Request/QiKu/QikuPublishOrderSkuPackConfigStateRequest.cs
  59. 9
      BBWYB.Server.Model/Dto/Request/TimeLimitTask/EditTimeLimitTaskRemarkRequest.cs
  60. 36
      BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs
  61. 14
      BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs
  62. 34
      BBWYB.Server.Model/Dto/Response/JD/JDInStoreOrderDetail.cs
  63. 11
      BBWYB.Server.Model/Dto/Response/MDS/UserInfoResponse.cs
  64. 2
      BBWYB.Server.Model/Dto/Response/Order/OrderCostResponse.cs
  65. 40
      BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs
  66. 8
      BBWYB.Server.Model/Dto/Response/Order/OrderMessageResponse.cs
  67. 5
      BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs
  68. 14
      BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs
  69. 9
      BBWYB.Server.Model/Dto/Response/Order/OrderSkuCostResponse.cs
  70. 31
      BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs
  71. 7
      BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs
  72. 2
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs
  73. 22
      BBWYB.Server.Model/Dto/Response/QiKu/QiKuBindingSchemeResponse.cs
  74. 9
      BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs
  75. 9
      BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs
  76. 25
      BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs
  77. 29
      BBWYB.Server.Model/Enums.cs
  78. 4
      BBWYB.Server.Model/MappingProfiles.cs
  79. 5
      QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs
  80. 7
      QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_EditPriceRequest.cs
  81. 18
      QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_EditProductPriceRequest.cs
  82. 5
      SDKAdapter/ExpressCompanyNameConverter.cs
  83. 5
      SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs
  84. 20
      SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs
  85. 18
      SDKAdapter/OperationPlatform/Models/Request/Order/OP_EditPriceRequest.cs
  86. 16
      SDKAdapter/OperationPlatform/Models/Request/Product/OP_EditProductPriceRequest.cs
  87. 5
      SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs

29
BBWYB.Client/APIServices/ProductService.cs

@ -10,20 +10,21 @@ namespace BBWYB.Client.APIServices
{
public ProductService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext) { }
public ApiResponse<ProductListResponse> GetProductList(string spu, string productName, string productItem, int pageIndex)
public ApiResponse<ProductListResponse> GetProductList(string spu, string productName, string productItem, int pageIndex, int pageSize)
{
return SendRequest<ProductListResponse>(globalContext.BBWYApiHost,
"api/product/GetProductList",
new
{
Spu = spu,
ProductName = productName,
ProductItem = productItem,
PageIndex = pageIndex,
Platform = globalContext.User.Shop.Platform,
AppKey = globalContext.User.Shop.AppKey,
AppSecret = globalContext.User.Shop.AppSecret,
AppToken = globalContext.User.Shop.AppToken
spu,
productName,
productItem,
pageIndex,
pageSize,
globalContext.User.Shop.Platform,
globalContext.User.Shop.AppKey,
globalContext.User.Shop.AppSecret,
globalContext.User.Shop.AppToken
},
null,
HttpMethod.Post);
@ -37,10 +38,10 @@ namespace BBWYB.Client.APIServices
{
Spu = spu,
Sku = sku,
Platform = globalContext.User.Shop.Platform,
AppKey = globalContext.User.Shop.AppKey,
AppSecret = globalContext.User.Shop.AppSecret,
AppToken = globalContext.User.Shop.AppToken
globalContext.User.Shop.Platform,
globalContext.User.Shop.AppKey,
globalContext.User.Shop.AppSecret,
globalContext.User.Shop.AppToken
},
null,
HttpMethod.Post);
@ -85,5 +86,5 @@ namespace BBWYB.Client.APIServices
//
}
}

64
BBWYB.Client/APIServices/PurchaseProductAPIService.cs

@ -20,16 +20,15 @@ namespace BBWYB.Client.APIServices
private string oneBoundKey = "t5060712539";
private string oneBoundSecret = "20211103";
//private string qtAppId = "BBWY2023022001";
//private string qtAppSecret = "908e131365d5448ca651ba20ed7ddefe";
private TimeSpan purchaseProductCacheTimeSpan;
//private TimeSpan _1688SessionIdTimeSpan;
//private ConcurrentDictionary<string, (Purchaser purchaser, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkus)> productChaches;
private IDictionary<string, string> _1688ProductDetailRequestHeader;
private List<int> _1688ColorPropertyFieldIdList;
private List<string> locationIdList;
private List<string> priceIdList;
public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache)
{
this.restApiService = restApiService;
@ -43,6 +42,10 @@ namespace BBWYB.Client.APIServices
{ "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"}
};
purchaseProductCacheTimeSpan = TimeSpan.FromDays(1);
_1688ColorPropertyFieldIdList = new List<int>() { 3216, 1627207, 1234, 3151, 7853, 446, 374, 404, 100019516, 3114, 2068 };
locationIdList = new List<string>() { "1081181309101", "16347413030323", "13772573013156" };
priceIdList = new List<string>() { "1081181309582", "1081181309582", "16347413030316", "13772573013151" };
}
public (Purchaser purchaser, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkus)? GetProductInfo(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode, PurchaseProductAPIMode apiMode)
@ -191,30 +194,47 @@ namespace BBWYB.Client.APIServices
var jsonStr = match.Groups[2].Value;
var jobject = JObject.Parse(jsonStr);
var location = "";
for (var i = 0; i < locationIdList.Count(); i++)
{
if (jobject["data"][locationIdList[i]] != null)
{
location = jobject["data"][locationIdList[i]]["data"]["location"].ToString();
break;
}
}
//16347413030323
var purchaser = new Purchaser()
{
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(),
Location = jobject["data"]["1081181309101"] != null ?
jobject["data"]["1081181309101"]["data"]["location"].ToString() :
jobject["data"]["16347413030323"]["data"]["location"].ToString()
Location = location,
Platform = platform
};
var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<int>("fid") == 3216 ||
j.Value<int>("fid") == 1627207 ||
j.Value<int>("fid") == 1234 ||
j.Value<int>("fid") == 3151)["value"]
.Children()
.Select(j => new
{
name = j.Value<string>("name"),
imageUrl = j.Value<string>("imageUrl")
}).ToList();
var firstPrice = jobject["data"]["1081181309582"] != null ?
jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price") :
jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
var fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => _1688ColorPropertyFieldIdList.Contains(j.Value<int>("fid")));
if (fidJToken == null)
fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<string>("prop").Contains("颜色"));
if (fidJToken == null && jobject["globalData"]["skuModel"]["skuProps"].Children().Count() == 1)
fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault();
var colorsProperty = fidJToken["value"].Children()
.Select(j => new
{
name = j.Value<string>("name"),
imageUrl = j.Value<string>("imageUrl")
}).ToList();
var firstPrice = 0.0M;
for (var i = 0; i < priceIdList.Count(); i++)
{
if (jobject["data"][priceIdList[i]] != null)
{
firstPrice = jobject["data"][priceIdList[i]]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
break;
}
}
var purchaseSchemeProductSkus = new List<PurchaseSchemeProductSku>();

6
BBWYB.Client/App.xaml.cs

@ -32,10 +32,10 @@ namespace BBWYB.Client
#if DEBUG
//齐越山鸡
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw";
userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNjk0NjY5NjkxfQ.cSwro-7bGwOu92YejH9JhMenTai7Mvf99i2paQCmxIw";
//拳探店铺 测试002
userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTYyMDM0NDE0MDg1MDAwODA2NCIsInNvblRlYW1JZHMiOiIiLCJleHAiOjE3MDk5ODUwOTB9.v9iMB4kSpiYvHoPK3WSaOn5GE7bIUhO7266yowvxjfU";
//拳探店铺 陈默
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjI0OTUxNjgzNTc2NTAwMjI0IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNjIwMzQyMDE0NzA2OTc4ODE2LDE2MjAzNDM4Mjc0NzI1ODQ3MDQsMTYyMDM0NDAzMzczNTg3MjUxMiwxNjIwMzQ0MDkyODI5NDIxNTY4LDE2MjAzNDQxNDA4NTAwMDgwNjQiLCJleHAiOjE3MjA3NjQzMjV9.Q8fiKXCHgvzbm7NDEre-MeoSju_AmC6Ae6eDY22rUAw";
#else
var tokenResult = ReadMMF();

23
BBWYB.Client/GlobalContext.cs

@ -1,4 +1,5 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Helpers;
using BBWYB.Client.Models;
using BBWYB.Client.ViewModels;
using BBWYB.Client.Views.PackPurchaseTaska;
@ -7,6 +8,7 @@ using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows;
@ -20,7 +22,7 @@ namespace BBWYB.Client
{
public GlobalContext()
{
BBWYBApiVersion = "10025";
BBWYBApiVersion = "10030";
}
private User user;
@ -57,6 +59,25 @@ namespace BBWYB.Client
return BBWYBApiVersion;
}
public void CallALiWangWang(string sellerLoginId)
{
var url = $"aliim:sendmsg?siteid=cnalichn&portalId=&gid=&itemsId=&touid=cnalichn{sellerLoginId}&status=1";
try
{
//Process.Start("explorer.exe", url);
ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL);
}
catch (Exception ex)
{
try
{
Clipboard.SetText(url);
}
catch { }
MessageBox.Show($"{ex.Message}\r\n唤醒旺旺失败,唤醒链接已复制到剪切板,请手动打开浏览器唤醒", "提示");
}
}
/// <summary>
/// 对web版提供的修改打包任务方法
/// </summary>

5
BBWYB.Client/Models/APIModel/Response/PurchaseSchemeResponse.cs

@ -15,6 +15,11 @@ namespace BBWYB.Client.Models
/// 采购商Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 采购商Id
/// </summary>
public string PurchaserId2 { get; set; }
public string PurchaserName { get; set; }
/// <summary>
/// 发货地

2
BBWYB.Client/Models/Product/Purchaser.cs

@ -11,6 +11,8 @@ namespace BBWYB.Client.Models
public string Id { get; set; }
public string Id2 { get; set; }
public string Name { get; set; }
/// <summary>

1
BBWYB.Client/Models/PurchaseScheme/PurchaseScheme.cs

@ -22,6 +22,7 @@ namespace BBWYB.Client.Models
public decimal RealCost { get => realCost; set { SetProperty(ref realCost, value); } }
public string PurchaserId { get; set; }
public string PurchaserId2 { get; set; }
public string PurchaserName { get; set; }
public string PurchaserLocation { get; set; }
public string PurchaseProductId1 { get; set; }

BIN
BBWYB.Client/Resources/Images/bbwylogo.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 915 B

After

Width:  |  Height:  |  Size: 66 KiB

6
BBWYB.Client/ViewModels/MainViewModel.cs

@ -1,13 +1,11 @@
using BBWYB.Client.APIServices;
using BBWYB.Client.Models;
using BBWYB.Client.Views;
using BBWYB.Client.Views.SelectShop;
using BBWYB.Client.Views.WebB;
using BBWYB.Common.Extensions;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@ -111,7 +109,7 @@ namespace BBWYB.Client.ViewModels
ChildList = new List<MenuModel>()
{
new MenuModel(){ Name="订单列表Bata",Url="/Views/WebB/WebB.xaml" },
//new MenuModel(){ Name="团队配置",Url="/Views/Setting/TeamSetting.xaml" }
new MenuModel(){ Name="绩效考核",Url="/Views/WebB/WebB_KPI.xaml" }
}
});
MenuList.Add(new MenuModel()
@ -171,7 +169,7 @@ namespace BBWYB.Client.ViewModels
var response = mdsApiService.GetShopDetailList();
if (!response.Success)
throw new Exception(response.Msg);
departmentList = response.Data;
departmentList = response.Data?.Where(d => d.Name.Contains("供应链")).ToList();
if (departmentList.Count == 0)
throw new Exception("缺少有效的部门数据");

8
BBWYB.Client/ViewModels/Ware/BindingPurchaseProductViewModel.cs

@ -35,6 +35,9 @@ namespace BBWYB.Client.ViewModels
public IList<ProductSku> ProductSkuList { get; set; }
public string PurchaserId { get; set; }
public string PurchaserId2 { get; set; }
public string PurchaserName { get => purchaserName; set { SetProperty(ref purchaserName, value); } }
public string PurchaserLocation { get; set; }
public bool IsLoading { get => isLoading; set { SetProperty(ref isLoading, value); } }
@ -85,11 +88,12 @@ namespace BBWYB.Client.ViewModels
};
}
public void SetData(IList<ProductSku> productSkuList, string purchaserId, string purchaserName, Platform purchasePlatform)
public void SetData(IList<ProductSku> productSkuList, string purchaserId, string purchaserId2, string purchaserName, Platform purchasePlatform)
{
this.ProductSkuList = productSkuList;
//this.Product = product;
this.PurchaserId = purchaserId;
this.PurchaserId2 = purchaserId2;
this.PurchaserName = purchaserName;
this.PurchasePlatform = purchasePlatform;
}
@ -177,6 +181,7 @@ namespace BBWYB.Client.ViewModels
}
PurchaserId = data.Value.purchaser.Id;
PurchaserId2 = data.Value.purchaser.Id2;
PurchaserName = data.Value.purchaser.Name;
PurchaserLocation = data.Value.purchaser.Location;
@ -315,6 +320,7 @@ namespace BBWYB.Client.ViewModels
var productSku = ProductSkuList.FirstOrDefault(sku => sku.Id == purchaseSchemeProduct.SkuId);
productSku.SelectedPurchaseScheme.PurchaserId = PurchaserId;
productSku.SelectedPurchaseScheme.PurchaserId2 = PurchaserId2;
productSku.SelectedPurchaseScheme.PurchaserName = PurchaserName;
productSku.SelectedPurchaseScheme.PurchaserLocation = PurchaserLocation;
productSku.SelectedPurchaseScheme.DefaultCost = productSku.SelectedPurchaseScheme.PurchaseSchemeProductList.Sum(p => p.PurchaseSchemeProductSkuList.Count() == 0 ? 0 : p.PurchaseSchemeProductSkuList.Sum(s => s.Price));

21
BBWYB.Client/ViewModels/Ware/WareManagerViewModel.cs

@ -57,6 +57,7 @@ namespace BBWYB.Client.ViewModels
#region Methods
public WareManagerViewModel(GlobalContext globalContext, BindingPurchaseProductViewModel bindingPurchaseProduct, PurchaseService purchaseService, ProductService productService)
{
PageSize = 5;
AddPurchaserCommand = new RelayCommand<Product>(AddPurchaser);
EditPurchaserCommand = new RelayCommand<Purchaser>(EditPurchaser);
DeletePurchaserCommand = new RelayCommand<Purchaser>(DeletePurchaser);
@ -111,7 +112,7 @@ namespace BBWYB.Client.ViewModels
IsLoading = false;
return;
}
productApiResponse = productService.GetProductList(skuResponse.Data.Items[0].ProductId, string.Empty, string.Empty, pageIndex);
productApiResponse = productService.GetProductList(skuResponse.Data.Items[0].ProductId, string.Empty, string.Empty, pageIndex, PageSize);
}
else
{
@ -122,7 +123,7 @@ namespace BBWYB.Client.ViewModels
}
else
{
productApiResponse = productService.GetProductList(SearchSpu, SearchProductName, SearchProductItem, pageIndex);
productApiResponse = productService.GetProductList(SearchSpu, SearchProductName, SearchProductItem, pageIndex, PageSize);
}
if (!productApiResponse.Success)
@ -241,7 +242,13 @@ namespace BBWYB.Client.ViewModels
var purchaser = product.PurchaserList.FirstOrDefault(purchaser => purchaser.Id == pscheme.PurchaserId);
if (purchaser == null)
{
purchaser = new Purchaser() { Id = pscheme.PurchaserId, Name = pscheme.PurchaserName, ProductId = product.Id };
purchaser = new Purchaser()
{
Id = pscheme.PurchaserId,
Id2 = pscheme.PurchaserId2,
Name = pscheme.PurchaserName,
ProductId = product.Id
};
product.PurchaserList.Add(purchaser);
}
purchaser.SkuUseCount++;
@ -259,13 +266,13 @@ namespace BBWYB.Client.ViewModels
return;
}
OpenBindingView(product, string.Empty, string.Empty);
OpenBindingView(product, string.Empty, string.Empty, string.Empty);
}
private void EditPurchaser(Purchaser purchaser)
{
var product = ProductList.FirstOrDefault(p => p.Id == purchaser.ProductId);
OpenBindingView(product, purchaser.Id, purchaser.Name);
OpenBindingView(product, purchaser.Id, purchaser.Id2, purchaser.Name);
}
private void DeletePurchaser(Purchaser purchaser)
@ -305,10 +312,10 @@ namespace BBWYB.Client.ViewModels
});
}
private void OpenBindingView(Product product, string purchaserId, string purchaserName)
private void OpenBindingView(Product product, string purchaserId, string purchaserId2, string purchaserName)
{
var skuList = product.SkuList;
bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserName, product.SelectedPurchasePlatformModel);
bindingPurchaseProduct.SetData(skuList, purchaserId, purchaserId2, purchaserName, product.SelectedPurchasePlatformModel);
var bindingView = new BindingPurchaseProduct();
var r = bindingView.ShowDialog();
if (r == true)

15
BBWYB.Client/Views/WebB/WebB.xaml.cs

@ -1,10 +1,6 @@
using BBWYB.Client.APIServices;
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
@ -18,9 +14,6 @@ namespace BBWYB.Client.Views.WebB
private WebView2Manager w2m;
private bool isNavigated;
private IList<string> managerDepartment;
private MdsApiService mdsApiService;
private ShopService shopService;
private GlobalContext globalContext;
public WebB()
@ -61,20 +54,20 @@ namespace BBWYB.Client.Views.WebB
{
w2m = s.ServiceProvider.GetRequiredService<WebView2Manager>();
globalContext = s.ServiceProvider.GetRequiredService<GlobalContext>();
mdsApiService = s.ServiceProvider.GetRequiredService<MdsApiService>();
shopService = s.ServiceProvider.GetRequiredService<ShopService>();
}
#if DEBUG
var url = "http://192.168.1.8:8080";
var registerName = "webTestContext";
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com";
var registerName = "webContext";
#endif
//var url = "http://qtbbwy.qiyue666.com";
w2m.CoreWebView2InitializationCompleted = (e) =>
{
w2m.wb2.CoreWebView2.AddHostObjectToScript("webContext", this.globalContext);
w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
isNavigated = true;
w2m.wb2.CoreWebView2.Navigate(url);
};

14
BBWYB.Client/Views/WebB/WebB_KPI.xaml

@ -0,0 +1,14 @@
<Page x:Class="BBWYB.Client.Views.WebB.WebB_KPI"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:BBWYB.Client.Views.WebB"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="WebB_KPI">
<Grid x:Name="grid">
</Grid>
</Page>

87
BBWYB.Client/Views/WebB/WebB_KPI.xaml.cs

@ -0,0 +1,87 @@
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Windows;
using System.Windows.Controls;
namespace BBWYB.Client.Views.WebB
{
/// <summary>
/// WebB_KPI.xaml 的交互逻辑
/// </summary>
public partial class WebB_KPI : Page
{
private WebView2Manager w2m;
private bool isNavigated;
private GlobalContext globalContext;
public WebB_KPI()
{
InitializeComponent();
this.Loaded += WebB_KPI_Loaded; ;
this.Unloaded += WebB_KPI_Unloaded;
WeakReferenceMessenger.Default.Register<Message_WebBKPI_Refresh>(this, (o, x) =>
{
this.Dispatcher.Invoke(() =>
{
_ = w2m.wb2.ExecuteScriptAsync("window.location.reload();");
});
});
}
private void WebB_KPI_Unloaded(object sender, RoutedEventArgs e)
{
grid.Children.Remove(w2m.wb2);
w2m.Close();
WeakReferenceMessenger.Default.UnregisterAll(this);
}
private void WebB_KPI_Loaded(object sender, RoutedEventArgs e)
{
var sp = (App.Current as App).ServiceProvider;
using (var s = sp.CreateScope())
{
w2m = s.ServiceProvider.GetRequiredService<WebView2Manager>();
globalContext = s.ServiceProvider.GetRequiredService<GlobalContext>();
}
#if DEBUG
var url = "http://localhost:8080/#/performance";
var registerName = "webTestContext";
#else
var url = "http://qtbbwy.qiyue666.com/#/performance";
var registerName = "webContext";
#endif
w2m.CoreWebView2InitializationCompleted = (e) =>
{
w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
isNavigated = true;
w2m.wb2.CoreWebView2.Navigate(url);
};
w2m.Init("bbwyb_web");
w2m.wb2.SetValue(Grid.RowProperty, 1);
w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
//grid.Children.Clear();
grid.Children.Add(w2m.wb2);
if (w2m.IsInitializationCompleted && !isNavigated)
{
w2m.wb2.CoreWebView2.Navigate(url);
//w2m.wb2.CoreWebView2.NavigateToString(content);
isNavigated = true;
}
}
}
public class Message_WebBKPI_Refresh : ValueChangedMessage<object>
{
public Message_WebBKPI_Refresh(object value) : base(value)
{
}
}
}

19
BBWYB.Server.API/Controllers/BaseApiController.cs

@ -1,5 +1,7 @@
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
namespace BBWYB.Server.API.Controllers
{
[Produces("application/json")]
@ -13,5 +15,22 @@ namespace BBWYB.Server.API.Controllers
{
this.httpContextAccessor = httpContextAccessor;
}
protected string GetUserId()
{
return httpContextAccessor?.HttpContext?.User.Claims.Where(x => x.Type == "userId")?.FirstOrDefault()?.Value;
}
protected string GetToken()
{
httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Authorization", out StringValues token);
return token;
}
protected string GetClientCode()
{
httpContextAccessor.HttpContext.Request.Headers.TryGetValue("ClientCode", out StringValues clientCode);
return clientCode;
}
}
}

17
BBWYB.Server.API/Controllers/DataRepairController.cs

@ -25,5 +25,22 @@ namespace BBWYB.Server.API.Controllers
dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode);
}
/// <summary>
/// 修复采购商信息
/// </summary>
[HttpPost]
public void SupplementPurchaserInfo()
{
dataRepairBusiness.SupplementPurchaserInfo();
}
/// <summary>
/// 修复订单Sku成本
/// </summary>
[HttpPost]
public void SupplementOrderSkuCost()
{
dataRepairBusiness.SupplementOrderSkuCost();
}
}
}

40
BBWYB.Server.API/Controllers/OrderController.cs

@ -68,10 +68,8 @@ namespace BBWYB.Server.API.Controllers
[HttpPost]
public void CancelOrder([FromBody] CancelOrderRequest request)
{
if (!httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Authorization", out StringValues token))
throw new Exception("未获取到token");
orderBusiness.CancelOrder(request, token.ToString());
var token = GetToken();
orderBusiness.CancelOrder(request, token);
}
/// <summary>
@ -119,7 +117,7 @@ namespace BBWYB.Server.API.Controllers
/// </summary>
/// <param name="orderId"></param>
[HttpPost("{orderId}")]
public void CheckComputationOrder([FromRoute]string orderId)
public void CheckComputationOrder([FromRoute] string orderId)
{
orderBusiness.CheckComputationOrder(orderId);
}
@ -133,5 +131,37 @@ namespace BBWYB.Server.API.Controllers
{
orderBusiness.QiKuPublishPackAmount(request);
}
/// <summary>
/// 统计各状态订单数量
/// </summary>
/// <param name="shopId"></param>
/// <returns></returns>
[HttpPost("{shopId}")]
public OrderCountByStateResponse StatisticsOrderCountByOrderState([FromRoute] long shopId)
{
return orderBusiness.StatisticsOrderCountByOrderState(shopId);
}
/// <summary>
/// 齐库推送sku配置状态
/// </summary>
/// <param name="request"></param>
[HttpPost]
[AllowAnonymous]
public void QikuPublishOrderSkuPackConfigState([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
{
orderBusiness.QikuPublishOrderSkuPackConfigState(request);
}
/// <summary>
/// 设置/取消特殊单
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void SetSpecialOrder([FromBody] SetSpecialOrderRequest request)
{
orderBusiness.SetSpecialOrder(request);
}
}
}

53
BBWYB.Server.API/Controllers/OrderMessageController.cs

@ -0,0 +1,53 @@
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class OrderMessageController : BaseApiController
{
private OrderMessageBusiness orderMessageBusiness;
public OrderMessageController(IHttpContextAccessor httpContextAccessor, OrderMessageBusiness orderMessageBusiness) : base(httpContextAccessor)
{
this.orderMessageBusiness = orderMessageBusiness;
}
/// <summary>
/// 新增订单留言
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void AddOrderMessage([FromBody] AddOrderMessageRequest request)
{
var token = GetToken();
var clientCode = GetClientCode();
orderMessageBusiness.AddOrderMessage(request, token, clientCode);
}
/// <summary>
/// 查询订单留言
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
[HttpGet("{orderId}")]
public IList<OrderMessageResponse> GetOrderMessageList([FromRoute] string orderId)
{
return orderMessageBusiness.GetOrderMessageList(orderId);
}
/// <summary>
/// 批量查询订单留言
/// </summary>
/// <param name="orderIds"></param>
/// <returns></returns>
[HttpPost]
public IList<OrderMessageResponse> GetOrdersMessageList([FromBody]string[] orderIds)
{
return orderMessageBusiness.GetOrderMessageList(orderIds);
}
}
}

10
BBWYB.Server.API/Controllers/ProductController.cs

@ -33,5 +33,15 @@ namespace BBWYB.Server.API.Controllers
{
return productBusiness.GetProductSkuList(request);
}
/// <summary>
/// 修改商品价格
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditProductPrice([FromBody] OP_EditProductPriceRequest request)
{
productBusiness.EditProductPrice(request);
}
}
}

21
BBWYB.Server.API/Controllers/PurchaseOrderController.cs

@ -91,6 +91,17 @@ namespace BBWYB.Server.API.Controllers
purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
}
/// <summary>
/// 删除历史采购单
/// </summary>
/// <param name="request"></param>
[HttpDelete]
public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request)
{
request.IsDelete = true;
purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
}
/// <summary>
/// 手动签收采购单
/// </summary>
@ -112,6 +123,16 @@ namespace BBWYB.Server.API.Controllers
purchaseOrderBusiness.ManualDelivery(request);
}
/// <summary>
/// 设置快递单和入仓采购单(厂商代发入仓订单专用)
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void PurchaserDelivery([FromBody] PurchaserDeliveryRequest request)
{
purchaseOrderBusiness.PurchaserDelivery(request);
}
/// <summary>
/// 手动收货
/// </summary>

63
BBWYB.Server.API/Controllers/TimeLimitTaskController.cs

@ -0,0 +1,63 @@
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
/// <summary>
/// 限时任务
/// </summary>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class TimeLimitTaskController : BaseApiController
{
private TimeLimitTaskBusiness timeLimitTaskBusiness;
public TimeLimitTaskController(IHttpContextAccessor httpContextAccessor, TimeLimitTaskBusiness timeLimitTaskBusiness) : base(httpContextAccessor)
{
this.timeLimitTaskBusiness = timeLimitTaskBusiness;
}
/// <summary>
/// 检查任务过期(自动任务,前端无需对接)
/// </summary>
[HttpPost]
[AllowAnonymous]
public void CheckTask()
{
timeLimitTaskBusiness.CheckTask();
}
/// <summary>
/// 查询限时任务列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public TimeLimitTaskListResponse QueryTimeLimitTask([FromBody] QueryTimeLimitTaskRequest request)
{
return timeLimitTaskBusiness.QueryTimeLimitTask(request);
}
/// <summary>
/// 限时任务统计
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public IList<TimeLimitTaskStatisticsResponse> TimeOutStatistics([FromBody]QueryTimeOutRequest request)
{
return timeLimitTaskBusiness.TimeOutStatistics(request);
}
/// <summary>
/// 修改备注
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditTimeLimitTaskRemark([FromBody] EditTimeLimitTaskRemarkRequest request)
{
timeLimitTaskBusiness.EditTimeLimitTaskRemark(request);
}
}
}

8
BBWYB.Server.API/appsettings.json

@ -15,9 +15,9 @@
"AllowedSwagger": true,
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0",
"ApiVersionRequirements": [
{
"Api": "/api/purchaseOrder/createpurchaseorder",
"MinimumVersion": 10017
}
//{
// "Api": "/api/purchaseOrder/createpurchaseorder",
// "MinimumVersion": 10017
//}
]
}

117
BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

@ -1,8 +1,10 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using System.Net.Http.Headers;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
@ -10,9 +12,11 @@ namespace BBWYB.Server.Business
public class DataRepairBusiness : BaseBusiness, IDenpendency
{
private KuaiDi100Manager kuaiDi100Manager;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager) : base(fsql, nLogManager, idGenerator)
private PurchaseSchemeBusiness purchaseSchemeBusiness;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness) : base(fsql, nLogManager, idGenerator)
{
this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness;
}
@ -20,5 +24,116 @@ namespace BBWYB.Server.Business
{
kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
}
public void SupplementPurchaserInfo()
{
var purlList = fsql.Select<PurchaseSchemeProduct, PurchaseScheme, Purchaser>()
.InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id)
.InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id)
.Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform. && string.IsNullOrEmpty(p.Id2))
.ToList((psp, ps, p) => new
{
//psp.PurchaseUrl,
psp.PurchaseProductId,
p.Id
});
var groups = purlList.GroupBy(p => p.Id);
Console.WriteLine(groups.Count());
IList<IUpdate<Purchaser>> updatePurchaserList = new List<IUpdate<Purchaser>>();
int i = 1;
foreach (var group in groups)
{
var purchaseId = group.Key;
var productId = group.Max(p => p.PurchaseProductId);
Thread.Sleep(1000);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"index {i}");
Console.ResetColor();
Console.WriteLine();
var response = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
{
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
Platform = Enums.Platform.,
PriceMode = Enums.PurchaseOrderMode.,
PurchaseProductId = productId
});
if (!string.IsNullOrEmpty(response?.Purchaser?.Id2))
{
if (response.Purchaser.Id2.Length > 20)
Console.WriteLine(response.Purchaser.Id2);
var update = fsql.Update<Purchaser>(purchaseId).Set(p => p.Id2, response.Purchaser.Id2);
updatePurchaserList.Add(update);
}
i++;
if (updatePurchaserList.Count >= 10)
{
fsql.Transaction(() =>
{
foreach (var update in updatePurchaserList)
update.ExecuteAffrows();
});
updatePurchaserList.Clear();
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("更新数据库更新");
Console.ResetColor();
Console.WriteLine();
}
}
if (updatePurchaserList.Count() > 0)
{
fsql.Transaction(() =>
{
foreach (var update in updatePurchaserList)
update.ExecuteAffrows();
});
}
}
public void SupplementOrderSkuCost()
{
var orderSkuCostList = fsql.Select<OrderCostDetail, Order>().InnerJoin((ocd, o) => ocd.OrderId == o.Id)
.Where((ocd, o) => ocd.IsEnabled == true &&
o.IsPurchased == true &&
o.OrderState != Enums.OrderState. &&
!fsql.Select<OrderSkuCost>().As("osc").Where(osc => osc.OrderId == o.Id).Any())
.GroupBy((ocd, o) => new { ocd.OrderId, ocd.SkuId })
.ToList(g => new
{
OrderId = g.Key.OrderId,
SkuId = g.Key.SkuId,
SkuAmount = g.Sum(g.Value.Item1.SkuAmount),
PurchaseFreight = g.Sum(g.Value.Item1.PurchaseFreight)
});
var orderIds = orderSkuCostList.Select(x => x.OrderId).Distinct().ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIds.Contains(osku.OrderId)).ToList();
var insertOrderSkuCostList = new List<OrderSkuCost>();
foreach (var osc in orderSkuCostList)
{
var osku = orderSkuList.FirstOrDefault(osku => osku.SkuId == osc.SkuId && osku.OrderId == osc.OrderId);
var insert = new OrderSkuCost()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
DeliveryExpressFreight = 0M,
OrderId = osc.OrderId,
SkuId = osc.SkuId,
OutPackAmount = 0M,
PurchaseFreight = osc.PurchaseFreight,
SkuAmount = osc.SkuAmount,
TotalCost = osc.PurchaseFreight + osc.SkuAmount,
Profit = ((osku.Price * osku.ItemTotal) ?? 0M) + osku.BuyerPayFreight - osc.PurchaseFreight - osc.SkuAmount
};
insertOrderSkuCostList.Add(insert);
}
fsql.Transaction(() =>
{
fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
});
}
}
}

83
BBWYB.Server.Business/Extensions/OrderAmountExtension.cs

@ -8,17 +8,11 @@ namespace BBWYB.Server.Business.Extensions
/// 计算订单sku明细的成本和利润
/// </summary>
/// <param name="ocd">订单SKU明细成本对象</param>
/// <param name="skuProductAmount">sku商品金额(收入)</param>
/// <param name="skuBuyerPayFreight">sku买家支付运费(收入)</param>
/// <param name="skuInPackAmount">sku实收打包费(收入)</param>
/// <param name="skuPurchaseProductAmount">sku采购货款(支出)</param>
/// <param name="skuPurchaseFreight">sku采购运费(支出)</param>
/// <param name="skuOutPackAmount">sku支出打包费(支出)</param>
/// <param name="skuDeliveryExpressFreight">sku发货运费(支出)</param>
public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd,
decimal skuProductAmount,
decimal skuBuyerPayFreight,
decimal skuInPackAmount,
decimal skuPurchaseProductAmount,
decimal skuPurchaseFreight,
decimal skuOutPackAmount,
@ -29,7 +23,50 @@ namespace BBWYB.Server.Business.Extensions
ocd.OutPackAmount = skuOutPackAmount;
ocd.DeliveryExpressFreight = skuDeliveryExpressFreight;
ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
//ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
/// <summary>
/// 计算订单sku成本和利润
/// </summary>
/// <param name="orderSkuCost">订单SKU明细成本对象</param>
/// <param name="skuProductAmount">sku商品金额(收入)</param>
/// <param name="skuBuyerPayFreight">sku买家支付运费(收入)</param>
/// <param name="skuInPackAmount">sku实收打包费(收入)</param>
/// <param name="orderCostDetailList">订单成本明细列表</param>
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
decimal skuProductAmount,
decimal skuBuyerPayFreight,
decimal skuInPackAmount,
IList<OrderCostDetail> orderCostDetailList)
{
var currentSkuCostDetailList = orderCostDetailList.Where(ocd => ocd.SkuId == orderSkuCost.SkuId && ocd.IsEnabled == true).ToList();
orderSkuCost.SkuAmount = currentSkuCostDetailList.Sum(ocd => ocd.SkuAmount);
orderSkuCost.PurchaseFreight = currentSkuCostDetailList.Sum(ocd => ocd.PurchaseFreight);
orderSkuCost.OutPackAmount = currentSkuCostDetailList.Sum(ocd => ocd.OutPackAmount);
orderSkuCost.DeliveryExpressFreight = currentSkuCostDetailList.Sum(ocd => ocd.DeliveryExpressFreight);
orderSkuCost.TotalCost = orderSkuCost.SkuAmount +
orderSkuCost.PurchaseFreight +
orderSkuCost.OutPackAmount +
orderSkuCost.DeliveryExpressFreight; //采购货款+采购运费+支出打包费+发货运费
orderSkuCost.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - orderSkuCost.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
}
/// <summary>
/// 计算订单sku成本和利润
/// </summary>
/// <param name="orderSkuCost"></param>
/// <param name="orderSku"></param>
/// <param name="orderCostDetailList"></param>
public static void CalculationOrderSkuCostAndProfit(this OrderSkuCost orderSkuCost,
OrderSku orderSku,
IList<OrderCostDetail> orderCostDetailList)
{
orderSkuCost.CalculationOrderSkuCostAndProfit((orderSku.ItemTotal * orderSku.Price) ?? 0M,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
orderCostDetailList);
}
/// <summary>
@ -41,12 +78,12 @@ namespace BBWYB.Server.Business.Extensions
/// <param name="purchaseFreight">采购运费</param>
/// <param name="outPackAmount">支出打包费</param>
/// <param name="deliveryExpressFreight">发货运费</param>
public static void CalculationOrderCostCostAndProfit(this OrderCost oc,
decimal orderAmount,
decimal purchaseProductAmount,
decimal purchaseFreight,
decimal outPackAmount,
decimal deliveryExpressFreight)
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
decimal purchaseProductAmount,
decimal purchaseFreight,
decimal outPackAmount,
decimal deliveryExpressFreight)
{
oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前
@ -57,5 +94,25 @@ namespace BBWYB.Server.Business.Extensions
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost;
}
/// <summary>
/// 计算订单的成本和利润
/// </summary>
/// <param name="oc"></param>
/// <param name="orderAmount"></param>
/// <param name="orderSkuCostList"></param>
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
IList<OrderSkuCost> orderSkuCostList)
{
var currentOrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == oc.OrderId).ToList();
oc.SkuAmount = currentOrderSkuCostList.Sum(osc => osc.SkuAmount);
oc.PurchaseFreight = currentOrderSkuCostList.Sum(osc => osc.PurchaseFreight);
oc.PurchaseAmount = oc.SkuAmount + oc.PurchaseFreight; //兼容以前
oc.OutPackAmount = currentOrderSkuCostList.Sum(osc => osc.OutPackAmount);
oc.DeliveryExpressFreight = currentOrderSkuCostList.Sum(osc => osc.DeliveryExpressFreight);
oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
oc.Profit = orderAmount - oc.TotalCost;
}
}
}

34
BBWYB.Server.Business/Extensions/OrderStateExtension.cs

@ -2,6 +2,7 @@
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using JD.Dto;
namespace BBWYB.Server.Business
{
@ -11,14 +12,19 @@ namespace BBWYB.Server.Business
/// 计算订单状态
/// </summary>
/// <param name="order"></param>
/// <param name="fsql"></param>
/// <param name="IsNotifyDingDingWhenInStoreOrderFail">是否在入库单验证失败后通知钉钉</param>
/// <param name="orderSkuList"></param>
/// <param name="orderPurchaseInfoList"></param>
/// <returns></returns>
/// <param name="jdInStoreOrderDetailList"></param>
public static void CalculationOrderState(this Order order,
IFreeSql fsql,
out bool IsNotifyDingDingWhenInStoreOrderFail,
IList<OrderSku> orderSkuList = null,
IList<OrderPurchaseInfo> orderPurchaseInfoList = null)
IList<OrderPurchaseInfo> orderPurchaseInfoList = null,
IList<JDInStoreOrderDetail> jdInStoreOrderDetailList = null)
{
IsNotifyDingDingWhenInStoreOrderFail = false;
if (order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState. ||
order.OrderState == Enums.OrderState.)
@ -112,8 +118,16 @@ namespace BBWYB.Server.Business
else
order.OrderState = Enums.OrderState.;
}
else
order.OrderState = Enums.OrderState.;
else if (order.IntoStoreType == Enums.IntoStoreType.)
{
if (jdInStoreOrderDetailList == null || jdInStoreOrderDetailList.Count() == 0 || jdInStoreOrderDetailList.Any(x => x.storageStatus != "2"))
{
order.OrderState = Enums.OrderState.;
IsNotifyDingDingWhenInStoreOrderFail = true;
}
else
order.OrderState = Enums.OrderState.;
}
return;
}
#endregion
@ -125,10 +139,12 @@ namespace BBWYB.Server.Business
/// 计算采购单状态
/// </summary>
/// <param name="orderPurchaseInfo"></param>
/// <param name="intoStoreType"></param>
/// <param name="fsql"></param>
/// <param name="orderPurchaseSkuList"></param>
/// <param name="purchaseExpressOrderList"></param>
public static void CalculationOrderState(this OrderPurchaseInfo orderPurchaseInfo,
Enums.IntoStoreType intoStoreType,
IFreeSql fsql,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null,
IList<PurchaseExpressOrder> purchaseExpressOrderList = null)
@ -145,18 +161,15 @@ namespace BBWYB.Server.Business
if (orderPurchaseInfo.OrderState == Enums.PurchaseOrderState.)
return;
if (purchaseExpressOrderList == null)
return;
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.)
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform. && intoStoreType != Enums.IntoStoreType.) //支持采购sku和关联信息
{
if (orderPurchaseSkuList == null)
orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(ops => ops.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
}
if (purchaseExpressOrderList == null)
return;
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.) //支持采购sku和关联信息
{
#region 待发货
if (orderPurchaseSkuList.Count() == orderPurchaseSkuList.Count(ops => string.IsNullOrEmpty(ops.WaybillNo)))
{
@ -186,7 +199,6 @@ namespace BBWYB.Server.Business
#endregion
}
#region 待收货
if (purchaseExpressOrderList.Count(exo => exo.ExpressState == "QianShou") == 0)
{

21
BBWYB.Server.Business/Extensions/PurchaseExpressOrderExtension.cs

@ -10,10 +10,12 @@ namespace BBWYB.Server.Business.Extensions
/// 计算快递单归属
/// </summary>
/// <param name="purchaseExpressOrder">必须是经过与快递单关系表进行联合查询的结果 (ExpressOrderRelationInfo-PurchaseExpressOrder)</param>
/// <param name="intoStoreType"></param>
/// <param name="orderPurchaseInfoList"></param>
/// <param name="orderPurchaseRelationInfoList"></param>
/// <param name="orderPurchaseSkuInfoList"></param>
public static void CalculationBelongOrderSku(this PurchaseExpressOrderResponse purchaseExpressOrder,
Enums.IntoStoreType? intoStoreType,
IList<OrderPurchaseInfoResponse> orderPurchaseInfoList,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfoResponse> orderPurchaseSkuInfoList)
@ -21,7 +23,7 @@ namespace BBWYB.Server.Business.Extensions
var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId);
if (purchaseOrder == null)
return;
if (purchaseOrder.PurchasePlatform == Enums.Platform.)
if (purchaseOrder.PurchasePlatform == Enums.Platform. && intoStoreType != Enums.IntoStoreType.)
{
var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo &&
posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId)
@ -32,27 +34,10 @@ namespace BBWYB.Server.Business.Extensions
.Distinct()
.ToList();
purchaseExpressOrder.BelongSkuIds = string.Join(",", orderSkuIds);
//var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
// orderSkuIds.Contains(osku.SkuId)).ToList();
//foreach (var osku in currentOrderSkuList)
//{
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
// continue;
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
//}
}
else
{
purchaseExpressOrder.BelongSkuIds = purchaseOrder.BelongSkuIds;
//var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
// purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList();
//foreach (var osku in currentOrderSkuList)
//{
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
// continue;
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
//}
}
}
}

54
BBWYB.Server.Business/JD/JDBusiness.cs

@ -0,0 +1,54 @@
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using JD.Dto;
using Newtonsoft.Json;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business.JD
{
public class JDBusiness : BaseBusiness, IDenpendency
{
private RestApiService restApiService;
private VenderBusiness venderBusiness;
public JDBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
RestApiService restApiService,
VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
this.venderBusiness = venderBusiness;
}
public ApiResponse<IList<JDInStoreOrderDetail>> GetJDInStoreOrderDetailList(string sourceShopName, IList<string> poOrderNos)
{
var shop = venderBusiness.GetShopList(shopName: sourceShopName).FirstOrDefault();
if (shop == null)
return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = $"未找到店铺{sourceShopName}" };
try
{
var httpResult = restApiService.SendRequest("https://yunding.qiyue666.com/", "api/PlatformSDK/GetJDInStorePurchaseOrderList", new
{
Platform = shop.PlatformId,
shop.AppKey,
shop.AppSecret,
shop.AppToken,
PoOrderNos = string.Join(',', poOrderNos)
}, null, HttpMethod.Post);
if (httpResult.StatusCode != System.Net.HttpStatusCode.OK)
return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = httpResult.Content };
var response = JsonConvert.DeserializeObject<ApiResponse<IList<JDInStoreOrderDetail>>>(httpResult.Content);
return response;
}
catch (Exception ex)
{
return new ApiResponse<IList<JDInStoreOrderDetail>>() { Code = 0, Msg = ex.Message };
}
}
}
}

32
BBWYB.Server.Business/MDS/MDSBusiness.cs

@ -0,0 +1,32 @@
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Dto;
using Newtonsoft.Json;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class MDSBusiness : BaseBusiness, IDenpendency
{
private RestApiService restApiService;
public MDSBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
}
public UserInfoResponse GetUserInfo(string token)
{
var httpResult = restApiService.SendRequest("http://mdsapi.qiyue666.com/", "TaskList/User/GetUserInfo", null, new Dictionary<string, string>()
{
{ "Authorization",token}
}, HttpMethod.Get);
if (httpResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new BusinessException($"获取用户信息失败 {httpResult.Content}");
var response = JsonConvert.DeserializeObject<ApiResponse<UserInfoResponse>>(httpResult.Content);
if (!response.Success)
throw new BusinessException($"获取用户信息失败 {response.Msg}");
return response.Data;
}
}
}

56
BBWYB.Server.Business/Order/Message/OrderMessageBusiness.cs

@ -0,0 +1,56 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class OrderMessageBusiness : BaseBusiness, IDenpendency
{
private MDSBusiness mdsBusiness;
public OrderMessageBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, MDSBusiness mdsBusiness) : base(fsql, nLogManager, idGenerator)
{
this.mdsBusiness = mdsBusiness;
}
public void AddOrderMessage(AddOrderMessageRequest request, string token, string clientCode)
{
if (string.IsNullOrEmpty(request.Message) ||
string.IsNullOrEmpty(request.OrderId))
throw new BusinessException("留言信息不完整");
if (string.IsNullOrEmpty(clientCode))
throw new BusinessException("缺少客户端标识");
var order = fsql.Select<Order>(request.OrderId).ToOne();
if (order == null)
throw new BusinessException("订单不存在");
var user = mdsBusiness.GetUserInfo(token);
var om = new OrderMessage()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
CreatorId = user.Id,
CreatorName = user.UserName,
Message = request.Message,
OrderId = request.OrderId,
OrderSn = order.OrderSn,
ShopId = order.ShopId,
From = clientCode
};
fsql.Insert(om).ExecuteAffrows();
}
public IList<OrderMessageResponse> GetOrderMessageList(string orderId)
{
return fsql.Select<OrderMessage>().Where(om => om.OrderId == orderId).ToList<OrderMessageResponse>();
}
public IList<OrderMessageResponse> GetOrderMessageList(string[] orderIds)
{
return fsql.Select<OrderMessage>().Where(om => orderIds.Contains(om.OrderId)).ToList<OrderMessageResponse>();
}
}
}

442
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -7,6 +7,7 @@ using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using SDKAdapter;
using SDKAdapter.OperationPlatform.Client;
@ -19,12 +20,32 @@ namespace BBWYB.Server.Business
{
public class OrderBusiness : BaseBusiness, IDenpendency
{
private OP_PlatformClientFactory opPlatformClientFactory;
private RestApiService restApiService;
public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
private IList<Enums.PackConfigState?> waitConfigStateList;
private Lazy<QiKuManager> qikuManagerLazy;
private Lazy<OP_PlatformClientFactory> opPlatformClientFactoryLazy;
private Lazy<RestApiService> restApiServiceLazy;
private OP_PlatformClientFactory opPlatformClientFactory => opPlatformClientFactoryLazy.Value;
private RestApiService restApiService => restApiServiceLazy.Value;
private QiKuManager qikuManager => qikuManagerLazy.Value;
private List<Enums.TimeLimitTaskType?> hgzTaskTypeList;
public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
{
this.opPlatformClientFactory = opPlatformClientFactory;
this.restApiService = restApiService;
qikuManagerLazy = new Lazy<QiKuManager>(() => serviceProvider.GetService<QiKuManager>());
opPlatformClientFactoryLazy = new Lazy<OP_PlatformClientFactory>(() => serviceProvider.GetService<OP_PlatformClientFactory>());
restApiServiceLazy = new Lazy<RestApiService>(() => serviceProvider.GetService<RestApiService>());
waitConfigStateList = new List<Enums.PackConfigState?>() { Enums.PackConfigState., Enums.PackConfigState. };
hgzTaskTypeList = new List<Enums.TimeLimitTaskType?>()
{
Enums.TimeLimitTaskType.,
Enums.TimeLimitTaskType.
};
}
private ISelect<Order, OrderConsignee, OrderCost> GetOrderListQueryConditions(QueryOrderRequest request)
@ -38,21 +59,68 @@ namespace BBWYB.Server.Business
select = select.Where((o, ocs, oct) => o.OrderSn == request.OrderSn);
else
{
if (!string.IsNullOrEmpty(request.Sku) || !string.IsNullOrEmpty(request.SourceSku) || !string.IsNullOrEmpty(request.ProductId))
if (!string.IsNullOrEmpty(request.Sku) ||
!string.IsNullOrEmpty(request.SourceSku) ||
!string.IsNullOrEmpty(request.ProductId) ||
request.IsWaitConfig)
{
var childSelect = fsql.Select<OrderSku>().As("osku")
.WhereIf(!string.IsNullOrEmpty(request.Sku), osku => osku.SkuId == request.Sku)
.WhereIf(!string.IsNullOrEmpty(request.SourceSku), osku => osku.BelongSkuId == request.SourceSku)
.WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId);
select = select.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any());
.WhereIf(!string.IsNullOrEmpty(request.ProductId), osku => osku.ProductId == request.ProductId)
.WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState != 1, osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null)
.WhereIf(request.IsWaitConfig && request.IsOnlyDisplayPackConfigEditState == 1, osku => osku.PackConfigState == Enums.PackConfigState.);
select = select.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState.)
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.)
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.IsPurchased == true)
.Where((o, ocs, oct) => childSelect.Where(osku => osku.OrderId == o.Id).Any());
if (request.IsWaitConfig && request.IsOnlyDisplayCerConfigTimeOut == 1)
{
var configTimeOutChildSelect = fsql.Select<TimeLimitTask>().As("t")
.Where(t => t.ShopId == request.ShopId)
.Where(t => hgzTaskTypeList.Contains(t.TaskType))
.Where(t => t.IsTimely == false);
select = select.Where((o, ocs, oct) => configTimeOutChildSelect.Where(t => t.OrderId == o.Id).Any());
}
}
if (request.IsOnlyDisplayPurchaseTimeOut == 1 && (request.OrderState == Enums.OrderState. || request.OrderState == Enums.OrderState.))
{
var childSelect = fsql.Select<TimeLimitTask>().As("t")
.Where(t => t.ShopId == request.ShopId)
.Where(t => t.TaskType == Enums.TimeLimitTaskType.)
.Where(t => t.IsTimely == false);
select = select.Where((o, ocs, oct) => childSelect.Where(t => t.OrderId == o.Id).Any());
}
if (request.IsOnlyDisplayCheckComputationTimeOut == 1 && request.OrderState == Enums.OrderState.)
{
var childSelect = fsql.Select<TimeLimitTask>().As("t")
.Where(t => t.ShopId == request.ShopId)
.Where(t => t.TaskType == Enums.TimeLimitTaskType.)
.Where(t => t.IsTimely == false);
select = select.Where((o, ocs, oct) => childSelect.Where(t => t.OrderId == o.Id).Any());
}
if (!string.IsNullOrEmpty(request.PurchaseOrderId))
var isDeliveryTimeout = request.IsOnlyDisplayDeliveryTimeout == 1 && (request.OrderState == Enums.OrderState. || request.OrderState == Enums.OrderState.);
if (isDeliveryTimeout || !string.IsNullOrEmpty(request.PurchaseOrderId))
{
var childSelect = fsql.Select<OrderPurchaseInfo>().As("opi")
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
var childSelect = fsql.Select<OrderPurchaseInfo>().As("opi");
if (isDeliveryTimeout)
{
var before24hTime = DateTime.Now.AddHours(-24);
childSelect = childSelect.Where(opi => opi.ShopId == request.ShopId &&
(opi.OrderState == Enums.PurchaseOrderState. || opi.OrderState == Enums.PurchaseOrderState.) &&
opi.CreateTime < before24hTime);
}
if (!string.IsNullOrEmpty(request.PurchaseOrderId))
{
childSelect = childSelect.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
}
select = select.Where((o, ocs, oct) => childSelect.Where(opi => opi.OrderId == o.Id).Any());
}
select = select.WhereIf(request.OrderState == Enums.OrderState. ||
request.OrderState == Enums.OrderState. ||
request.OrderState == Enums.OrderState. ||
@ -65,11 +133,13 @@ namespace BBWYB.Server.Business
o.OrderState == Enums.OrderState.)
.WhereIf(request.OrderState == Enums.OrderState., (o, ocs, oct) => o.OrderState == Enums.OrderState. ||
o.OrderState == Enums.OrderState.)
.WhereIf(request.IsWaitConfig, (o, ocs, oct) => o.OrderState != Enums.OrderState. && o.IsPurchased == true)
.WhereIf(request.StartDate != null, (o, ocs, oct) => o.StartTime >= request.StartDate)
.WhereIf(request.EndDate != null, (o, ocs, oct) => o.StartTime <= request.EndDate)
.WhereIf(!string.IsNullOrEmpty(request.ClientOrderId), (o, ocs, oct) => o.ClientOrderId == request.ClientOrderId)
.WhereIf(!string.IsNullOrEmpty(request.SourceShopName), (o, ocs, oct) => o.SourceShopName == request.SourceShopName);
.WhereIf(!string.IsNullOrEmpty(request.SourceShopName), (o, ocs, oct) => o.SourceShopName == request.SourceShopName)
.WhereIf(request.IsOnlyDisplaySpecialOrder == 1, (o, ocs, oct) => o.IsSpecialOrder == 1)
.WhereIf(request.IsOnlyDisplaySendQiYue == 1, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.)
.WhereIf(request.IsOnlyDisplayPurchaserSendInStore == 1, (o, ocs, oct) => o.IntoStoreType == Enums.IntoStoreType.);
}
select = select.WhereIf(request.ShopId != null, (o, ocs, oct) => o.ShopId == request.ShopId);
@ -112,6 +182,8 @@ namespace BBWYB.Server.Business
InPackAmount = o.InPackAmount,
IsWaitPack = o.IsWaitPack,
IntoStoreType = o.IntoStoreType,
PayTime = o.PayTime,
IsSpecialOrder = o.IsSpecialOrder,
ContactName = ocs.ContactName,
Address = ocs.Address,
@ -174,14 +246,50 @@ namespace BBWYB.Server.Business
});
#endregion
#region 查询入仓采购单信息
var inStoreRelationList = fsql.Select<InStorePurchaseOrdeRrelationInfo>().Where(i => orderIdList.Contains(i.OrderId)).ToList();
if (inStoreRelationList.Count() > 0)
{
foreach (var purchaseExpressOrder in purchaseExpressOrderList)
{
purchaseExpressOrder.InStorePurchaseOrderIdList = inStoreRelationList.Where(i => i.OrderId == purchaseExpressOrder.OrderId &&
i.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId &&
i.WaybillNo == purchaseExpressOrder.WaybillNo)
.Select(i => i.InStorePurchaseOrderId)
.ToList();
}
}
#endregion
#region 查询订单留言
var orderMessageList = fsql.Select<OrderMessage>().Where(om => orderIdList.Contains(om.OrderId)).ToList<OrderMessageResponse>();
foreach (var order in orderList)
order.OrderMessageList = orderMessageList.Where(om => om.OrderId == order.Id).ToList();
#endregion
#region 处理订单成本明细
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList<OrderCostDetailResponse>();
foreach (var order in orderList)
order.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList();
#endregion
#region 处理订单Sku成本
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => orderIdList.Contains(osc.OrderId)).ToList<OrderSkuCostResponse>();
foreach (var order in orderList)
{
if (order.OrderCost == null)
continue;
order.OrderCost.OrderSkuCostList = orderSkuCostList.Where(osc => osc.OrderId == order.Id).ToList();
foreach (var orderSkuCost in order.OrderCost.OrderSkuCostList)
{
orderSkuCost.OrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id && ocd.SkuId == orderSkuCost.SkuId).ToList();
}
}
#endregion
#region 处理采购信息
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var purchaserIdList = orderPurchaseInfoList.Where(opi => !string.IsNullOrEmpty(opi.PurchaserId)).Select(opi => opi.PurchaserId).Distinct().ToList();
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList<OrderPurchaseSkuInfoResponse>();
foreach (var order in orderList)
{
@ -191,12 +299,41 @@ namespace BBWYB.Server.Business
orderPurchaseInfo.OrderPurchaseSkuInfoList = orderPurchaseSkuInfoList.Where(opsi => opsi.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
orderPurchaseInfo.PurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
}
if (order.OrderPurchaseInfoList != null && order.OrderPurchaseInfoList.Count() > 0)
{
if (order.OrderState == Enums.OrderState. &&
order.OrderPurchaseInfoList.Any(opi => opi.IsAutoEditOrderPrice == Enums.AutoEditOrderPriceType.))
{
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.;
continue;
}
var opiCount = order.OrderPurchaseInfoList.Count();
var pjCount = order.OrderPurchaseInfoList.Count(opi => opi.IsAutoEditOrderPrice == Enums.AutoEditOrderPriceType.);
if (pjCount == 0)
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.;
if (opiCount == pjCount)
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.;
else if (opiCount > pjCount)
order.IsAutoEditOrderPrice = Enums.AutoEditOrderPriceType.;
}
}
#endregion
#region 处理采购单商家信息
if (purchaserIdList.Count() > 0)
{
var purchaserList = fsql.Select<Purchaser>(purchaserIdList).ToList();
foreach (var purchaseOrder in orderPurchaseInfoList)
{
purchaseOrder.Purchaser = purchaserList.FirstOrDefault(p => p.Id == purchaseOrder.PurchaserId);
}
}
#endregion
#region 处理SKU
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 &&
orderIdList.Contains(osku.OrderId)).ToList<OrderSkuResponse>();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIdList.Contains(osku.OrderId)).ToList<OrderSkuResponse>();
foreach (var order in orderList)
{
order.ItemList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList();
@ -206,7 +343,10 @@ namespace BBWYB.Server.Business
#region 处理SKU的快递单
foreach (var purchaseExpressOrder in purchaseExpressOrderList)
{
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationInfoList, orderPurchaseSkuInfoList);
var order = orderList.FirstOrDefault(o => o.Id == purchaseExpressOrder.OrderId);
if (order == null)
continue;
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationInfoList, orderPurchaseSkuInfoList);
var currentOrderSkuList = orderSkuList.Where(osku => !string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds) &&
osku.OrderId == purchaseExpressOrder.OrderId &&
purchaseExpressOrder.BelongSkuIds.Contains(osku.SkuId)).ToList();
@ -216,43 +356,83 @@ namespace BBWYB.Server.Business
continue;
osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
}
}
#endregion
//var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId);
//if (purchaseOrder == null)
// continue;
//if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴)
//{
// var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo &&
// posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId)
// .Select(posku => posku.PurchaseSkuId).ToList();
// var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
// purchaseSkuIds.Contains(ori.PurchaseSkuId))
// .Select(ori => ori.BelongSkuId)
// .Distinct()
// .ToList();
// var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
// orderSkuIds.Contains(osku.SkuId)).ToList();
// foreach (var osku in currentOrderSkuList)
// {
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
// continue;
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
// }
//}
//else
//{
// var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == purchaseOrder.OrderId &&
// purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).ToList();
// foreach (var osku in currentOrderSkuList)
// {
// if (osku.PurchaseExpressOrderList.Any(peo => peo.WaybillNo == purchaseExpressOrder.WaybillNo))
// continue;
// osku.PurchaseExpressOrderList.Add(purchaseExpressOrder);
// }
//}
#region 限时任务
var orderTimeLimitTaskList = fsql.Select<TimeLimitTask>().Where(t => orderIdList.Contains(t.OrderId))
.ToList<TimeLimitTaskResponse>();
foreach (var order in orderList)
{
foreach (var orderSku in order.ItemList)
{
#region 采购限时任务
orderSku.PurchaseTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id &&
t.SkuId == orderSku.SkuId &&
t.TaskType == Enums.TimeLimitTaskType.);
#endregion
#region 合格证拟定任务
orderSku.CerConfigTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id &&
t.SkuId == orderSku.SkuId &&
t.TaskType == Enums.TimeLimitTaskType.);
#endregion
#region 合格证补充任务
orderSku.CerEditTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id &&
t.SkuId == orderSku.SkuId &&
t.TaskType == Enums.TimeLimitTaskType.);
#endregion
#region 待核算任务
orderSku.CheckComputationTimeLimitTask = orderTimeLimitTaskList.FirstOrDefault(t => t.OrderId == order.Id &&
t.TaskType == Enums.TimeLimitTaskType.);
#endregion
#region 判断sku的发货状态
var purchaseOrder = order.OrderPurchaseInfoList.FirstOrDefault(opi => opi.OrderId == order.Id && opi.BelongSkuIds.Contains(orderSku.SkuId));
if (purchaseOrder != null)
{
if (purchaseOrder.PurchasePlatform == Enums.Platform. && order.IntoStoreType != Enums.IntoStoreType.)
{
//验证采购关系
var currentSku_PurchaseSkuIdList = orderPurchaseRelationInfoList.Where(opri => opri.OrderId == order.Id &&
opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
opri.BelongSkuId == orderSku.SkuId)
.Select(x => x.PurchaseSkuId)
.Distinct()
.ToList();
if (currentSku_PurchaseSkuIdList.Count() > 0)
{
var currentSku_PurchaseSkuList = purchaseOrder.OrderPurchaseSkuInfoList?.Where(posku => currentSku_PurchaseSkuIdList.Contains(posku.PurchaseSkuId))
?.ToList();
if (currentSku_PurchaseSkuList != null && currentSku_PurchaseSkuList.Count() > 0)
{
var totalCount = currentSku_PurchaseSkuList.Count();
var shipCount = currentSku_PurchaseSkuList.Count(posku => !string.IsNullOrEmpty(posku.WaybillNo));
if (totalCount == shipCount)
orderSku.ShipState = 1;
if (shipCount == 0)
orderSku.ShipState = 0;
if (totalCount > shipCount)
orderSku.ShipState = 2;
}
}
}
else
{
orderSku.ShipState = purchaseOrder.PurchaseExpressOrderList != null &&
purchaseOrder.PurchaseExpressOrderList.Count() > 0 ? 1 : 0;
}
}
#endregion
}
}
#endregion
}
return new OrderListResponse()
{
@ -281,7 +461,7 @@ namespace BBWYB.Server.Business
TargetExpressName = peo.TargetExpressName,
WaybillNo = peo.WaybillNo
});
var order = fsql.Select<Order>(request.OrderId).ToOne();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => op.OrderId == request.OrderId && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.OrderId == request.OrderId && opri.SourceSkuId == request.SourceSkuId).ToList();
var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => posku.OrderId == request.OrderId).ToList<OrderPurchaseSkuInfoResponse>();
@ -291,7 +471,7 @@ namespace BBWYB.Server.Business
#region 处理SKU的快递单
foreach (var purchaseExpressOrder in purchaseExpressOrderList)
{
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList);
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList);
if (!string.IsNullOrEmpty(purchaseExpressOrder.BelongSkuIds))
{
if (purchaseExpressOrder.BelongSkuIds.Contains(orderSku.SkuId))
@ -301,37 +481,6 @@ namespace BBWYB.Server.Business
}
}
}
//foreach (var purchaseOrder in orderPurchaseInfoList)
//{
// if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴)
// {
// var currentRelationList = orderPurchaseRelationList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
// var waybillNos = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
// currentRelationList.Any(opri => opri.PurchaseSkuId == posku.PurchaseSkuId))
// .Select(x => x.WaybillNo)
// .ToList();
// foreach (var waybillNo in waybillNos)
// {
// var peo = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == waybillNo);
// if (peo != null && !list.Any(x => x.WaybillNo == waybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId))
// list.Add(peo);
// }
// }
// else
// {
// var currentSkuList = orderSkuList.Where(osku => purchaseOrder.BelongSkuIds.Contains(osku.SkuId)).Select(osku => osku.BelongSkuId).Distinct().ToList();
// if (currentSkuList.Contains(request.SourceSkuId))
// {
// var peoList = purchaseExpressOrderList.Where(x => x.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
// foreach (var peo in peoList)
// {
// if (!list.Any(x => x.WaybillNo == peo.WaybillNo && x.PurchaseOrderId == purchaseOrder.PurchaseOrderId))
// list.Add(peo);
// }
// }
// }
//}
#endregion
return list;
}
@ -356,7 +505,7 @@ namespace BBWYB.Server.Business
TargetExpressName = peo.TargetExpressName,
WaybillNo = peo.WaybillNo
});
var orderList = fsql.Select<Order>(orderIds).ToList();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIds.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => orderIds.Contains(opri.OrderId)).ToList();
var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => orderIds.Contains(posku.OrderId)).ToList<OrderPurchaseSkuInfoResponse>();
@ -364,7 +513,10 @@ namespace BBWYB.Server.Business
#region 处理SKU的快递单
foreach (var purchaseExpressOrder in purchaseExpressOrderList)
{
purchaseExpressOrder.CalculationBelongOrderSku(orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList);
var order = orderList.FirstOrDefault(o => o.Id == purchaseExpressOrder.OrderId);
if (order == null)
continue;
purchaseExpressOrder.CalculationBelongOrderSku(order.IntoStoreType, orderPurchaseInfoList, orderPurchaseRelationList, orderPurchaseSkuList);
}
#endregion
return purchaseExpressOrderList;
@ -382,7 +534,11 @@ namespace BBWYB.Server.Business
Remark = request.Remark
});
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
fsql.Transaction(() =>
{
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
fsql.Delete<TimeLimitTask>().Where(t => t.OrderId == request.OrderId).ExecuteAffrows();
});
try
{
@ -448,23 +604,52 @@ namespace BBWYB.Server.Business
var order = orderListResponse.Items.FirstOrDefault();
var orderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var orderSkuCostList = fsql.Select<OrderSkuCost>().Where(osc => osc.OrderId == request.OrderId).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
IList<IUpdate<OrderSku>> updates_orderSku = new List<IUpdate<OrderSku>>();
IUpdate<OrderCost> updateOrderCost = null;
IList<IUpdate<OrderSkuCost>> updateOrderSkuCostList = new List<IUpdate<OrderSkuCost>>();
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
foreach (var orderSku in order.OrderSkuList)
{
updates_orderSku.Add(fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.Price, orderSku.SkuPrice)
.Set(osku => osku.BuyerPayFreight, orderSku.FreightAmount)
.Set(osku => osku.InPackAmount, orderSku.PackAmount));
var ocdList = orderCostDetailList.Where(ocd => ocd.SkuId == orderSku.SkuId).ToList();
if (ocdList != null && ocdList.Count() > 0)
{
foreach (var orderCostDetail in ocdList)
{
orderCostDetail.CalculationOrderCostDetailCostAndProfit(orderCostDetail.SkuAmount ?? 0M,
orderCostDetail.PurchaseFreight ?? 0M,
orderCostDetail.OutPackAmount ?? 0M,
orderCostDetail.DeliveryExpressFreight ?? 0M);
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>(orderCostDetail.Id).Set(ocd => ocd.Profit, orderCostDetail.Profit));
}
}
var orderSkuCost = orderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
if (orderSkuCost != null)
{
orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku.SkuPrice * orderSku.Quantity,
orderSku.FreightAmount,
orderSku.PackAmount,
ocdList);
updateOrderSkuCostList.Add(fsql.Update<OrderSkuCost>(orderSkuCost.Id).Set(osc => osc.Profit, orderSkuCost.Profit));
}
}
if (orderCost != null)
{
orderCost.CalculationOrderCostCostAndProfit(order.OrderTotalAmount,
orderCost.SkuAmount ?? 0M,
orderCost.PurchaseFreight ?? 0M,
orderCost.OutPackAmount ?? 0M,
orderCost.DeliveryExpressFreight ?? 0M);
orderCost.CalculationOrderCostAndProfit(order.OrderTotalAmount,
orderCost.SkuAmount ?? 0M,
orderCost.PurchaseFreight ?? 0M,
orderCost.OutPackAmount ?? 0M,
orderCost.DeliveryExpressFreight ?? 0M);
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost);
}
@ -474,6 +659,7 @@ namespace BBWYB.Server.Business
fsql.Update<Order>(request.OrderId).Set(o => o.OrderTotalPrice, order.OrderTotalAmount)
.Set(o => o.OrderSellerPrice, order.OrderProductAmount)
.Set(o => o.FreightPrice, order.FreightAmount)
.Set(o => o.InPackAmount, order.PackAmount)
.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
@ -482,6 +668,14 @@ namespace BBWYB.Server.Business
foreach (var update in updates_orderSku)
update.ExecuteAffrows();
}
if (updateOrderCostDetailList.Count() > 0)
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
}
if (updateOrderSkuCostList.Count() > 0)
foreach (var update in updateOrderSkuCostList)
update.ExecuteAffrows();
});
#region 通知C端
@ -532,7 +726,7 @@ namespace BBWYB.Server.Business
updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.IsCheck, true);
var oldOrderState = dbOrder.OrderState;
dbOrder.CalculationOrderState(fsql, orderSkuList, null);
dbOrder.CalculationOrderState(fsql, out _, orderSkuList, null);
if (oldOrderState != dbOrder.OrderState)
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState);
@ -556,7 +750,16 @@ namespace BBWYB.Server.Business
if (Math.Abs(orderCost.Profit ?? 0) > 1M)
throw new BusinessException("订单利润绝对值不能大于1");
fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
fsql.Transaction(() =>
{
fsql.Update<Order>(orderId).Set(o => o.OrderState, Enums.OrderState.).ExecuteAffrows();
fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
.Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false))
.Where(t => t.OrderId == orderId)
.Where(t => t.CompletionTime == null)
.Where(t => t.TaskType == Enums.TimeLimitTaskType.).ExecuteAffrows();
});
SendPurchaseOrderStateToC(orderId, Enums.OrderState.);
}
@ -575,5 +778,58 @@ namespace BBWYB.Server.Business
}
}
public OrderCountByStateResponse StatisticsOrderCountByOrderState(long shopId)
{
var noOrderStateList = new List<Enums.OrderState>()
{
Enums.OrderState.,
Enums.OrderState.
};
var orderCountGroup = fsql.Select<Order>().Where(o => o.ShopId == shopId)
.Where(o => !noOrderStateList.Contains(o.OrderState.Value))
.GroupBy(o => o.OrderState)
.ToList(g => new
{
OrderState = g.Key,
OrderCount = g.Count()
});
var childSelect = fsql.Select<OrderSku>().As("osku").Where(osku => waitConfigStateList.Contains(osku.PackConfigState) || osku.PackConfigState == null);
var waitConfigCount = fsql.Select<Order>().Where(o => o.ShopId == shopId)
.Where(o => !noOrderStateList.Contains(o.OrderState.Value))
.Where(o => o.IntoStoreType == Enums.IntoStoreType.)
.Where(o => o.IsPurchased == true)
.Where(o => childSelect.Where(osku => osku.OrderId == o.Id).Any())
.Count();
return new OrderCountByStateResponse()
{
WaitPayCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitPurchaseCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState. ||
o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitShipmentCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState. ||
o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitReceiveCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState. ||
o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitCheckCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitComputationCount = orderCountGroup.FirstOrDefault(o => o.OrderState == Enums.OrderState.)?.OrderCount ?? 0,
WaitConfigCount = waitConfigCount,
};
}
/// <summary>
/// 齐库推送sku配置状态
/// </summary>
/// <param name="request"></param>
public void QikuPublishOrderSkuPackConfigState(QikuPublishOrderSkuPackConfigStateRequest request)
{
qikuManager.QikuPublishOrderSkuPackConfigState(request);
}
public void SetSpecialOrder(SetSpecialOrderRequest request)
{
fsql.Update<Order>(request.OrderId).Set(o => o.IsSpecialOrder, request.IsSpecialOrder).ExecuteAffrows();
}
}
}

42
BBWYB.Server.Business/Product/ProductBusiness.cs

@ -1,5 +1,6 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
using Yitter.IdGenerator;
@ -14,7 +15,7 @@ namespace BBWYB.Server.Business
{
this.opPlatformClientFactory = opPlatformClientFactory;
}
public OP_ProductListResponse GetProductList(OP_QueryProductRequest request)
{
return opPlatformClientFactory.GetClient(request.Platform).GetProductList(request);
@ -24,5 +25,44 @@ namespace BBWYB.Server.Business
{
return opPlatformClientFactory.GetClient(request.Platform).GetProductSkuList(request);
}
public void EditProductPrice(OP_EditProductPriceRequest request)
{
var skuRequest = new OP_QueryProductSkuRequest()
{
AppKey = request.AppKey,
AppSecret = request.AppSecret,
AppToken = request.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = request.Platform,
Spu = request.Spu
};
var editSkuList = new List<OP_EditProductSkuPriceRequest>();
while (true)
{
var response = GetProductSkuList(skuRequest);
if (response.Items.Count > 0)
{
editSkuList.AddRange(response.Items.Select(sku => new OP_EditProductSkuPriceRequest()
{
Sku = sku.Id,
Price = sku.Price,
}));
}
if (response.Items.Count < 50)
break;
skuRequest.PageIndex++;
}
foreach (var editReq in request.EditSkuList)
{
var editSku = editSkuList.FirstOrDefault(x => x.Sku == editReq.Sku);
if (editSku != null)
editSku.Price = editReq.Price;
}
request.EditSkuList.Clear();
request.EditSkuList.AddRange(editSkuList);
opPlatformClientFactory.GetClient(request.Platform).EditProductPrice(request);
}
}
}

1613
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

File diff suppressed because it is too large

64
BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs

@ -27,6 +27,10 @@ namespace BBWYB.Server.Business
private IDictionary<string, string> _1688ProductDetailRequestHeader;
private List<int> _1688ColorPropertyFieldIdList;
private List<string> locationIdList;
private List<string> priceIdList;
public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache)
{
this.memoryCache = memoryCache;
@ -40,6 +44,16 @@ namespace BBWYB.Server.Business
{ "Accept-Language","zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"}
};
purchaseProductCacheTimeSpan = TimeSpan.FromDays(1);
_1688ColorPropertyFieldIdList = new List<int>() { 3216, 1627207, 1234, 3151, 7853, 446, 374, 404, 100019516, 3114, 2068 };
//jobject["data"]["1081181309101"] != null ?
// jobject["data"]["1081181309101"]["data"]["location"].ToString() :
// jobject["data"]["16347413030323"]["data"]["location"].ToString(),
locationIdList = new List<string>() { "1081181309101", "16347413030323", "13772573013156" };
//var firstPrice = jobject["data"]["1081181309582"] != null ?
// jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price") :
// jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
priceIdList = new List<string>() { "1081181309582", "1081181309582", "16347413030316", "13772573013151" };
}
public PurchaseSkuBasicInfoResponse GetProductInfo(PurchaseSkuBasicInfoRequest request)
@ -193,31 +207,43 @@ namespace BBWYB.Server.Business
var jsonStr = match.Groups[2].Value;
var jobject = JObject.Parse(jsonStr);
//16347413030323
var location = "";
for (var i = 0; i < locationIdList.Count(); i++)
{
if (jobject["data"][locationIdList[i]] != null)
{
location = jobject["data"][locationIdList[i]]["data"]["location"].ToString();
break;
}
}
var purchaser = new Purchaser()
{
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(),
Location = jobject["data"]["1081181309101"] != null ?
jobject["data"]["1081181309101"]["data"]["location"].ToString() :
jobject["data"]["16347413030323"]["data"]["location"].ToString(),
Location = location,
Platform = Enums.Platform.
};
var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<int>("fid") == 3216 ||
j.Value<int>("fid") == 1627207 ||
j.Value<int>("fid") == 1234 ||
j.Value<int>("fid") == 3151)["value"]
.Children()
.Select(j => new
{
name = j.Value<string>("name"),
imageUrl = j.Value<string>("imageUrl")
}).ToList();
var firstPrice = jobject["data"]["1081181309582"] != null ?
jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price") :
jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
var fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => _1688ColorPropertyFieldIdList.Contains(j.Value<int>("fid")));
if (fidJToken == null)
fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<string>("prop").Contains("颜色"));
if (fidJToken == null && jobject["globalData"]["skuModel"]["skuProps"].Children().Count() == 1)
fidJToken = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault();
var colorsProperty = fidJToken["value"].Children()
.Select(j => new
{
name = j.Value<string>("name"),
imageUrl = j.Value<string>("imageUrl")
}).ToList();
var firstPrice = 0.0M;
for (var i = 0; i < priceIdList.Count(); i++)
{
if (jobject["data"][priceIdList[i]] != null)
{
firstPrice = jobject["data"][priceIdList[i]]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
break;
}
}
var list = new List<PurchaseSkuItemBasicInfoResponse>();

2
BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs

@ -30,6 +30,7 @@ namespace BBWYB.Server.Business
addPurchaserList.Add(new Purchaser()
{
Id = scheme.PurchaserId,
Id2 = scheme.PurchaserId2,
Name = scheme.PurchaserName,
Location = scheme.PurchaserLocation,
Platform = scheme.PurchasePlatform
@ -163,6 +164,7 @@ namespace BBWYB.Server.Business
SkuId = ps.SkuId,
ShopId = ps.ShopId,
PurchaserId = p.Id,
PurchaserId2 = p.Id2,
PurchaserName = p.Name,
PurchaserLocation = p.Location,
DefaultCost = ps.DefaultCost,

216
BBWYB.Server.Business/QiKuManager.cs

@ -1,22 +1,42 @@
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Text;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class QiKuManager : IDenpendency
public class QiKuManager : BaseBusiness, IDenpendency
{
private RestApiService restApiService;
private IFreeSql fsql;
public QiKuManager(RestApiService restApiService, IFreeSql fsql)
private List<Enums.TimeLimitTaskType?> hgzTaskTypeList;
private Lazy<DingDingBusiness> dingDingBusinessLazy;
private Lazy<VenderBusiness> venderBusinessLazy;
private DingDingBusiness dingDingBusiness => dingDingBusinessLazy.Value;
private VenderBusiness venderBusiness => venderBusinessLazy.Value;
public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
this.fsql = fsql;
hgzTaskTypeList = new List<Enums.TimeLimitTaskType?>()
{
Enums.TimeLimitTaskType.,
Enums.TimeLimitTaskType.
};
this.dingDingBusinessLazy = new Lazy<DingDingBusiness>(() => serviceProvider.GetService<DingDingBusiness>());
this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
}
/// <summary>
/// 通知齐库
/// 通知齐库到货情况
/// <para>支持关联的采购平台以来源SKU为单位通知齐库</para>
/// <para>不支持关联的采购平台以采购单为单位通知齐库</para>
/// </summary>
@ -24,10 +44,10 @@ namespace BBWYB.Server.Business
/// <param name="orderPurchaseRelationInfoList"></param>
/// <param name="orderPurchaseSkuInfoList"></param>
/// <param name="purchaseExpressOrderList"></param>
public void PublishQiKu(OrderPurchaseInfo orderPurchaseInfo,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
public void PublishQiKuReceiveInfo(OrderPurchaseInfo orderPurchaseInfo,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.)
PublishQiKuByRelation(orderPurchaseRelationInfoList, orderPurchaseSkuInfoList, purchaseExpressOrderList);
@ -114,5 +134,183 @@ namespace BBWYB.Server.Business
}
}
/// <summary>
/// 查询齐库合格证
/// </summary>
/// <param name="order"></param>
/// <param name="packTaskSkuPurchaseSchemeIdList"></param>
/// <param name="orderSkuList"></param>
public void SearchCerConfigured(Order order, IList<QiKuPackTaskSkuPurchaseSchemeIdRequest> packTaskSkuPurchaseSchemeIdList, IList<OrderSku> orderSkuList)
{
try
{
nLogManager.Default().Info($"SearchCerConfigured OrderId {order.Id}, packTaskSkuPurchaseSchemeIdList {JsonConvert.SerializeObject(packTaskSkuPurchaseSchemeIdList)}");
var restApiResult = restApiService.SendRequest("http://qiku.qiyue666.com", "api/PackPurchaseTask/SearchCerConfigured", new
{
orderId = order.Id,
packTaskSkuPurchaseSchemeIdList
}, null, HttpMethod.Post);
if (restApiResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception(restApiResult.Content);
var response = JsonConvert.DeserializeObject<ApiResponse<QiKuBindingSchemeResponse>>(restApiResult.Content);
if (!response.Success)
throw new Exception(response.Msg);
if (response.Data.PackTaskSkuPurchaseSchemeIdList != null && response.Data.PackTaskSkuPurchaseSchemeIdList.Count() > 0)
{
IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
var dbTimeLimitTaskList = fsql.Select<TimeLimitTask>().Where(t => t.OrderId == order.Id &&
t.TaskType == Enums.TimeLimitTaskType.).ToList();
foreach (var skuConfigured in response.Data.PackTaskSkuPurchaseSchemeIdList)
{
var orderSku = orderSkuList.FirstOrDefault(osku => osku.BelongSkuId == skuConfigured.SkuId);
if (orderSku == null)
continue;
var oldPackState = orderSku.PackConfigState ?? Enums.PackConfigState.;
var qiKuPackState = skuConfigured.IsConfiguredCer ? Enums.PackConfigState. : Enums.PackConfigState.;
if (oldPackState != qiKuPackState)
{
orderSku.PackConfigState = qiKuPackState;
var update = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.PackConfigState, qiKuPackState);
updateOrderSkuList.Add(update);
}
if (qiKuPackState == Enums.PackConfigState. && order.ShopId != 9 && !dbTimeLimitTaskList.Any(t => t.SkuId == orderSku.SkuId))
{
//创建合格证拟定任务
var t = new TimeLimitTask()
{
CreateTme = DateTime.Now,
Id = idGenerator.NewLong(),
OrderId = order.Id,
SkuId = orderSku.SkuId,
OrderSn = order.OrderSn,
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1),
};
insertTimeLimitTaskList.Add(t);
}
}
fsql.Transaction(() =>
{
if (updateOrderSkuList.Count() > 0)
{
foreach (var update in updateOrderSkuList)
update.ExecuteAffrows();
}
if (insertTimeLimitTaskList.Count() > 0)
fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows();
});
}
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"SearchCerConfigured\r\n{JsonConvert.SerializeObject(new { order.Id, packTaskSkuPurchaseSchemeIdList })}");
}
}
/// <summary>
/// 齐库推送sku配置状态
/// </summary>
/// <param name="request"></param>
public void QikuPublishOrderSkuPackConfigState(QikuPublishOrderSkuPackConfigStateRequest request)
{
var order = fsql.Select<Order>(request.OrderId).ToOne();
if (order == null)
throw new BusinessException($"未查询到订单{request.OrderId}");
if (request.PackConfigState == Enums.PackConfigState. && order.ShopId != 9)
return;
var orderSku = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId && osku.BelongSkuId == request.SkuId).ToOne();
if (orderSku == null)
throw new BusinessException($"未查询到订单来源sku{request.SkuId}");
IInsert<TimeLimitTask> insertTimeLimitTask = null;
IUpdate<TimeLimitTask> updateTimeLimitTask = null;
IUpdate<OrderSku> updateOrderSku = null;
if (orderSku.PackConfigState != request.PackConfigState)
{
//updateOrderSku = fsql.Select<OrderSku, Order>()
// .InnerJoin((osku, o) => osku.OrderId == o.Id)
// .Where((osku, o) => o.OrderState != Enums.OrderState.已取消 &&
// o.IntoStoreType == Enums.IntoStoreType.发回齐越 &&
// osku.SkuId == orderSku.SkuId &&
// osku.PackConfigState != request.PackConfigState)
// .ToUpdate()
// .Set(osku => osku.PackConfigState, request.PackConfigState);
updateOrderSku = fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.PackConfigState, request.PackConfigState);
}
if (request.PackConfigState == Enums.PackConfigState.)
{
var isExists = fsql.Select<TimeLimitTask>().Where(t => t.OrderId == request.OrderId &&
t.SkuId == orderSku.SkuId &&
t.CompletionTime == null &&
t.TaskType == Enums.TimeLimitTaskType.)
.Any();
if (!isExists)
{
var t = new TimeLimitTask()
{
CreateTme = DateTime.Now,
Id = idGenerator.NewLong(),
OrderId = request.OrderId,
SkuId = orderSku.SkuId,
OrderSn = order.OrderSn,
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.
};
if (DateTime.Now.Hour < 16)
t.ExpirationTime = DateTime.Now.AddHours(2);
else
t.ExpirationTime = DateTime.Now.Date.AddDays(1).AddHours(13);
insertTimeLimitTask = fsql.Insert(t);
#region 发送钉钉通知
try
{
var shop = venderBusiness.GetShopList(order.ShopId.Value).FirstOrDefault();
var content = new StringBuilder();
content.AppendLine($"拳探店铺:{shop?.ShopName}");
content.AppendLine($"订单号:{order.OrderSn}");
content.AppendLine($"拳探SKU:{orderSku.SkuId}");
content.AppendLine("信息:需补充合格证信息");
dingDingBusiness.SendDingDingBotMessage("SECf32e6111bb4bd633cfe44cf0c1d4c3384cda4b91096bcdd962402fdfd67f31c6",
"https://oapi.dingtalk.com/robot/send?access_token=c87a037e038ec38e379ad5bc6fe50adc679ba89d4957f8fc5396e15fbc3a9df7",
content.ToString());
}
catch { }
#endregion
}
}
else if (request.PackConfigState == Enums.PackConfigState.)
{
updateTimeLimitTask = fsql.Update<TimeLimitTask>().Set(t => t.CompletionTime, DateTime.Now)
.Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false))
.Where(t => t.OrderId == request.OrderId)
.Where(t => t.SkuId == orderSku.SkuId)
.Where(t => t.CompletionTime == null)
.Where(t => hgzTaskTypeList.Contains(t.TaskType));
}
fsql.Transaction(() =>
{
insertTimeLimitTask?.ExecuteAffrows();
updateTimeLimitTask?.ExecuteAffrows();
updateOrderSku?.ExecuteAffrows();
});
}
}
}

108
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -5,6 +5,7 @@ using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using Newtonsoft.Json.Linq;
using Org.BouncyCastle.Bcpg;
using SDKAdapter;
using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
@ -74,12 +75,21 @@ namespace BBWYB.Server.Business.Sync
var qtOrderIdList = qtOrderList.Items.Select(qto => qto.OrderId).ToList();
var dbOrderList = fsql.Select<Model.Db.Order>(qtOrderIdList).ToList();
//采购限时任务列表
var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList();
var dbPurchaseTimeLimitTaskList = fsql.Select<TimeLimitTask>().Where(t => t.TaskType == Enums.TimeLimitTaskType. &&
payedQTOrderIdList.Contains(t.OrderId)).ToList();
List<Model.Db.Order> insertOrderList = new List<Model.Db.Order>();
List<OrderSku> insertOrderSkuList = new List<OrderSku>();
List<OrderConsignee> insertOrderConsigneeList = new List<OrderConsignee>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
List<string> deleteTimeLimitTaskOrderIdList = new List<string>();
List<IUpdate<Model.Db.Order>> updateOrderList = new List<IUpdate<Model.Db.Order>>();
foreach (var qtOrder in qtOrderList.Items)
{
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId);
@ -113,7 +123,8 @@ namespace BBWYB.Server.Business.Sync
OrderState = orderState,
ClientOrderId = qtOrder.ClientOrderId,
BuyerAccount = qtOrder.UserAccount,
InPackAmount = qtOrder.PackAmount
InPackAmount = qtOrder.PackAmount,
PayTime = qtOrder.PayTime,
};
JArray belongSkus = null;
if (!string.IsNullOrEmpty(qtOrder.Extended))
@ -178,45 +189,43 @@ namespace BBWYB.Server.Business.Sync
}
else
{
Enums.OrderState? updateOrderState = null;
var updateModifyTime = false;
var updateBuyerRemark = false;
var updateVenderRemark = false;
var updateBuyerAccount = false;
var updateOrderSn = false;
#region 订单状态脱离拳探 只处理付款和取消
Enums.OrderState? updateOrderState = null;
if (dbOrder.OrderState == Enums.OrderState. && orderState != Enums.OrderState.)
updateOrderState = Enums.OrderState.;
if (dbOrder.OrderState != Enums.OrderState. && orderState == Enums.OrderState.)
{
updateOrderState = Enums.OrderState.;
if (dbPurchaseTimeLimitTaskList.Any(t => t.OrderId == qtOrder.OrderId))
deleteTimeLimitTaskOrderIdList.Add(qtOrder.OrderId);
}
#endregion
if (dbOrder.ModifyTime != qtOrder.ModifyTime)
updateModifyTime = true;
if (dbOrder.BuyerRemark != qtOrder.BuyerRemark)
updateBuyerRemark = true;
if (dbOrder.VenderRemark != qtOrder.VenderRemark)
updateVenderRemark = true;
if (dbOrder.BuyerAccount != qtOrder.UserAccount)
updateBuyerAccount = true;
if (dbOrder.OrderSn != qtOrder.OrderSn)
updateOrderSn = true;
if (updateOrderState != null || updateModifyTime || updateBuyerRemark || updateVenderRemark || updateBuyerAccount || updateOrderSn)
var updateModifyTime = dbOrder.ModifyTime != qtOrder.ModifyTime;
var updateBuyerRemark = dbOrder.BuyerRemark != qtOrder.BuyerRemark;
var updateVenderRemark = dbOrder.VenderRemark != qtOrder.VenderRemark;
var updateBuyerAccount = dbOrder.BuyerAccount != qtOrder.UserAccount;
var updateOrderSn = dbOrder.OrderSn != qtOrder.OrderSn;
var updatePayTime = dbOrder.PayTime != qtOrder.PayTime;
if (updateOrderState != null || updateModifyTime || updateBuyerRemark || updateVenderRemark || updateBuyerAccount || updateOrderSn || updatePayTime)
{
var update = fsql.Update<Model.Db.Order>(dbOrder.Id).SetIf(updateOrderState != null, o => o.OrderState, orderState)
var update = fsql.Update<Model.Db.Order>(dbOrder.Id).SetIf(updateOrderState != null, o => o.OrderState, updateOrderState)
.SetIf(updateModifyTime, o => o.ModifyTime, qtOrder.ModifyTime)
.SetIf(updateBuyerRemark, o => o.BuyerRemark, qtOrder.BuyerRemark)
.SetIf(updateVenderRemark, o => o.VenderRemark, qtOrder.VenderRemark)
.SetIf(updateBuyerAccount, o => o.BuyerAccount, qtOrder.UserAccount)
.SetIf(updateOrderSn, o => o.OrderSn, qtOrder.OrderSn);
.SetIf(updateOrderSn, o => o.OrderSn, qtOrder.OrderSn)
.SetIf(updatePayTime, o => o.PayTime, qtOrder.PayTime);
updateOrderList.Add(update);
}
}
}
CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList);
fsql.Transaction(() =>
{
if (insertOrderList.Count > 0)
@ -228,9 +237,15 @@ namespace BBWYB.Server.Business.Sync
if (insertOrderConsigneeList.Count() > 0)
fsql.Insert(insertOrderConsigneeList).ExecuteAffrows();
if (insertTimeLimitTaskList.Count() > 0)
fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows();
if (updateOrderList.Count() > 0)
foreach (var update in updateOrderList)
update.ExecuteAffrows();
if (deleteTimeLimitTaskOrderIdList.Count() > 0)
fsql.Delete<TimeLimitTask>().Where(t => deleteTimeLimitTaskOrderIdList.Contains(t.OrderId)).ExecuteAffrows();
});
}
catch (Exception ex)
@ -239,6 +254,55 @@ namespace BBWYB.Server.Business.Sync
}
}
private void CheckPurchaseTimeLimitTask(long shopId, IList<OP_OrderResponse> orderList, IList<TimeLimitTask> dbTimeLimits, List<TimeLimitTask> insertTimeLimitTasks)
{
foreach (var order in orderList)
{
if (!order.IsPay || order.PayTime == null || order.OrderState == "-1")
continue;
var waitInserTimeLimitTasks = order.OrderSkuList.Where(osku => !dbTimeLimits.Any(x => x.OrderId == order.OrderId && x.SkuId == osku.SkuId))
.Select(osku => new TimeLimitTask()
{
Id = idGenerator.NewLong(),
CreateTme = DateTime.Now,
OrderId = order.OrderId,
OrderSn = order.OrderSn,
SkuId = osku.SkuId,
TaskType = Enums.TimeLimitTaskType.,
ShopId = shopId,
ExpirationTime = CalculationPurcashTimeLimitTaskExpirationTime(order.PayTime.Value),
PayTime = order.PayTime
}).ToList();
if (waitInserTimeLimitTasks != null && waitInserTimeLimitTasks.Count() > 0)
insertTimeLimitTasks.AddRange(waitInserTimeLimitTasks);
}
}
/// <summary>
/// 计算采购限时任务的到期时间
/// </summary>
/// <param name="payTime">付款时间</param>
/// <returns></returns>
private DateTime CalculationPurcashTimeLimitTaskExpirationTime(DateTime payTime)
{
var addDays = 0;
if (payTime.DayOfWeek == DayOfWeek.Sunday ||
payTime.DayOfWeek == DayOfWeek.Monday ||
payTime.DayOfWeek == DayOfWeek.Tuesday ||
payTime.DayOfWeek == DayOfWeek.Wednesday ||
payTime.DayOfWeek == DayOfWeek.Thursday ||
payTime.DayOfWeek == DayOfWeek.Friday)
{
if (payTime.Hour >= 0 && payTime.Hour < 15)
addDays = 0; //当日
else
addDays = payTime.DayOfWeek == DayOfWeek.Friday ? 2 : 1; //次日,星期五是后天
}
else if (payTime.DayOfWeek == DayOfWeek.Saturday)
addDays = 1;
return payTime.Date.AddDays(addDays).AddHours(16);
}
private Enums.OrderState? ConvertQuanTanOrderState(string qtOrderState, bool isPay, bool isPurchased)
{
/*

140
BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs

@ -0,0 +1,140 @@
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class TimeLimitTaskBusiness : BaseBusiness, IDenpendency
{
private VenderBusiness venderBusiness;
private List<Enums.TimeLimitTaskType?> hgzTaskTypeList;
public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
{
this.venderBusiness = venderBusiness;
hgzTaskTypeList = new List<Enums.TimeLimitTaskType?>()
{
Enums.TimeLimitTaskType.,
Enums.TimeLimitTaskType.
};
}
public void CheckTask()
{
fsql.Update<TimeLimitTask>().Set(t => t.IsTimely, false)
.Where(t => t.CompletionTime == null)
.Where(t => t.ExpirationTime < DateTime.Now)
.ExecuteAffrows();
}
public TimeLimitTaskListResponse QueryTimeLimitTask(QueryTimeLimitTaskRequest request)
{
if (request.StartDate > request.EndDate)
throw new BusinessException("开始时间不能大于结束时间");
if (request.PageSize > 100)
request.PageSize = 100;
var shopList = venderBusiness.GetShopList(request.ShopId, Model.Enums.Platform.);
request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1);
var list = fsql.Select<TimeLimitTask>().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId)
.Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate)
.WhereIf(request.IsCompleted != null && request.IsCompleted == 1, t => t.CompletionTime != null)
.WhereIf(request.IsCompleted != null && request.IsCompleted == 0, t => t.CompletionTime == null)
.WhereIf(request.IsTimeOut != null && request.IsTimeOut == 1, t => t.IsTimely == false)
.WhereIf(request.IsTimeOut != null && request.IsTimeOut == 0, t => t.IsTimely == true || t.IsTimely == null)
.WhereIf(request.TimeLimitTaskType != null, t => t.TaskType == request.TimeLimitTaskType)
.OrderByDescending(t => t.CreateTme)
.Count(out var count)
.Page(request.PageIndex, request.PageSize)
.ToList<TimeLimitTaskResponse>();
foreach (var task in list)
{
var shopId = task.ShopId.ToString();
task.ShopName = shopList.FirstOrDefault(s => s.ShopId == shopId)?.ShopName;
}
return new TimeLimitTaskListResponse()
{
Count = count,
ItemList = list
};
}
public IList<TimeLimitTaskStatisticsResponse> TimeOutStatistics(QueryTimeOutRequest request)
{
if (request.StartDate > request.EndDate)
throw new BusinessException("开始时间不能大于结束时间");
request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1);
var shopList = venderBusiness.GetShopList(request.ShopId, Model.Enums.Platform.);
var list = new List<TimeLimitTaskStatisticsResponse>();
var shopIdList = new List<long>();
#region 采购超时率
var purchaseTaskCountGroups = fsql.Select<TimeLimitTask>().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId)
.Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate)
.Where(t => t.TaskType == Model.Enums.TimeLimitTaskType.)
.GroupBy(t => t.ShopId)
.ToList(g => new
{
ShopId = g.Key,
TaskCount = g.Count()
});
var purchaseTaskTimOutCountGroups = fsql.Select<TimeLimitTask>().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId)
.Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate)
.Where(t => t.IsTimely == false)
.Where(t => t.TaskType == Model.Enums.TimeLimitTaskType.)
.GroupBy(t => t.ShopId)
.ToList(g => new
{
ShopId = g.Key,
TaskCount = g.Count()
});
#endregion
#region 合格证补充/拟定超时量
var cerTimeOutCountGroups = fsql.Select<TimeLimitTask>().WhereIf(request.ShopId != null, t => t.ShopId == request.ShopId)
.Where(t => t.CreateTme >= request.StartDate && t.CreateTme <= request.EndDate)
.Where(t => t.IsTimely == false)
.Where(t => hgzTaskTypeList.Contains(t.TaskType))
.GroupBy(t => new { t.ShopId, t.TaskType })
.ToList(g => new
{
ShopId = g.Key.ShopId,
TaskType = g.Key.TaskType,
TaskCount = g.Count()
});
#endregion
shopIdList.AddRange(purchaseTaskCountGroups.Select(g => g.ShopId.Value).ToList());
foreach (var shopId in shopIdList)
{
var sid = shopId.ToString();
var response = new TimeLimitTaskStatisticsResponse();
response.ShopId = shopId;
response.ShopName = shopList.FirstOrDefault(s => s.ShopId == sid)?.ShopName;
var purchaseTaskCount = purchaseTaskCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId)?.TaskCount ?? 0;
var purchaseTaskTimeOutCount = purchaseTaskTimOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId)?.TaskCount ?? 0;
response.PurchaseTimeOutPercent = purchaseTaskCount == 0 ? 0 : Math.Round(1.0 * purchaseTaskTimeOutCount / purchaseTaskCount * 100, 2);
response.CerEditTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId &&
x.TaskType == Enums.TimeLimitTaskType.)?.TaskCount ?? 0;
response.CerConfigTimeOutCount = cerTimeOutCountGroups.FirstOrDefault(x => x.ShopId == response.ShopId &&
x.TaskType == Enums.TimeLimitTaskType.)?.TaskCount ?? 0;
list.Add(response);
}
return list;
}
public void EditTimeLimitTaskRemark(EditTimeLimitTaskRemarkRequest request)
{
fsql.Update<TimeLimitTask>(request.TaskId).Set(t => t.Remark, request.Remark).ExecuteAffrows();
}
}
}

5
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -23,11 +23,12 @@ namespace BBWYB.Server.Business
this.kuaiDi100Manager = kuaiDi100Manager;
}
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null)
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null, string shopName = "")
{
return fsqlManager.MDSfsql.Select<Shops>().Where(s => !string.IsNullOrEmpty(s.ShopId))
.WhereIf(shopId != null, s => s.ShopId == shopId.ToString())
.WhereIf(platform != null, s => s.PlatformId == (int)platform)
.WhereIf(!string.IsNullOrEmpty(shopName), s => s.ShopName == shopName)
.ToList<ShopResponse>();
}
@ -87,7 +88,7 @@ namespace BBWYB.Server.Business
public IList<KuaiDi100ExpressCompany> GetKuaiDi100ExpressCompanyList(KuaiDi100ExpressSearchRequest request)
{
return kuaiDi100Manager.GetKuaiDi100ExpressCompanyList(request);
return kuaiDi100Manager.GetKuaiDi100ExpressCompanyList(request);
}
}
}

0
BBWYB.Server.Model/Db/Order/OrderCost.cs → BBWYB.Server.Model/Db/Order/Cost/OrderCost.cs

0
BBWYB.Server.Model/Db/Order/OrderCostDetail.cs → BBWYB.Server.Model/Db/Order/Cost/OrderCostDetail.cs

62
BBWYB.Server.Model/Db/Order/Cost/OrderSkuCost.cs

@ -0,0 +1,62 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "orderskucost", DisableSyncStructure = true)]
public partial class OrderSkuCost {
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? DeliveryExpressFreight { get; set; }
/// <summary>
/// 订单Id
/// </summary>
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 支出打包费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutPackAmount { get; set; }
/// <summary>
/// 订单利润
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? Profit { get; set; }
/// <summary>
/// 采购运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseFreight { get; set; }
/// <summary>
/// 采购货款
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; }
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// Sku总成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; }
}
}

35
BBWYB.Server.Model/Db/Order/InStorePurchaseOrdeRrelationInfo.cs

@ -0,0 +1,35 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 入库采购单关系表
/// </summary>
[Table(Name = "instorepurchaseorderrelationinfo", DisableSyncStructure = true)]
public partial class InStorePurchaseOrdeRrelationInfo
{
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 100)]
public string InStorePurchaseOrderId { get; set; }
[Column(StringLength = 100)]
public string OrderId { get; set; }
[Column(StringLength = 100)]
public string PurchaseOrderId { get; set; }
public long? ShopId { get; set; }
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
}
}

12
BBWYB.Server.Model/Db/Order/Order.cs

@ -50,6 +50,12 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "datetime")]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 支付时间
/// </summary>
[Column(DbType = "datetime", IsNullable = true)]
public DateTime? PayTime { get; set; }
/// <summary>
/// 用户应付金额
/// </summary>
@ -252,6 +258,12 @@ namespace BBWYB.Server.Model.Db
[Column(MapType = typeof(int?))]
public Enums.IntoStoreType? IntoStoreType { get; set; }
/// <summary>
/// 是否为特殊单
/// </summary>
[Column(DbType = "int(1)", IsNullable = true)]
public int? IsSpecialOrder { get; set; }
}
}

38
BBWYB.Server.Model/Db/Order/OrderMessage.cs

@ -0,0 +1,38 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
[Table(Name = "ordermessage", DisableSyncStructure = true)]
public partial class OrderMessage
{
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 50)]
public string CreatorId { get; set; }
[Column(StringLength = 50)]
public string CreatorName { get; set; }
[Column(StringLength = 500)]
public string Message { get; set; }
[Column(StringLength = 50)]
public string OrderId { get; set; }
[Column(StringLength = 50)]
public string OrderSn { get; set; }
public long? ShopId { get; set; }
[Column(StringLength = 50)]
public string From { get; set; }
}
}

45
BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs

@ -56,35 +56,6 @@ namespace BBWYB.Server.Model.Db
/// </summary>
public long? ShopId { get; set; }
///// <summary>
///// 우뒵데뵀
///// </summary>
//[Column(StringLength = 100)]
//public string WaybillNo { get; set; }
///// <summary>
///// 覩迦우뒵무鱇츰냔
///// </summary>
//[Column(StringLength = 100)]
//public string SourceExpressName { get; set; }
///// <summary>
///// 覩迦우뒵무鱇Id
///// </summary>
//[Column(StringLength = 100)]
//public string SourceExpressId { get; set; }
///// <summary>
///// 커깃우뒵무鱇츰냔
///// </summary>
//[Column(StringLength = 100)]
//public string TargetExpressName { get; set; }
///// <summary>
///// 커깃우뒵무鱇Id
///// </summary>
//[Column(StringLength = 100)]
//public string TargetExpressId { get; set; }
/// <summary>
/// 백橄땐데Sku
@ -101,17 +72,23 @@ namespace BBWYB.Server.Model.Db
[Column(StringLength = 500)]
public string Remark { get; set; }
///// <summary>
///// 角뤠푯澗
///// </summary>
//[Column(DbType = "bit")]
//public bool? IsSign { get; set; } = false;
/// <summary>
/// 设置历史采购单时间
/// </summary>
[Column(DbType = "datetime", IsNullable = true)]
public DateTime HistorySettingTime { get; set; }
/// <summary>
/// 꽃뭔데榴檄
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.PurchaseOrderState? OrderState { get; set; }
/// <summary>
/// 是否平价
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.AutoEditOrderPriceType? IsAutoEditOrderPrice { get; set; }
}
}

4
BBWYB.Server.Model/Db/Order/OrderSku.cs

@ -70,10 +70,6 @@ namespace BBWYB.Server.Model.Db
public string Title { get; set; }
/// <summary>
/// 打包配置状态(0=待配置, 1=已配置)
/// </summary>
[Column(DbType = "int(1)", MapType = typeof(int?))]
public Enums.PackConfigState? PackConfigState { get; set; }

2
BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs

@ -1,8 +1,6 @@
using BBWYB.Server.Model.Db;
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
namespace BBWYB.Server.Model
{

8
BBWYB.Server.Model/Db/PurchaseScheme/Purchaser.cs

@ -11,11 +11,17 @@ namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 采购商Id
/// 采购商Id (1688 SellerUserId)
/// </summary>
[Column(StringLength = 20, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 采购商Id2 (1688 SellerLoginId)
/// </summary>
[Column(StringLength = 50)]
public string Id2 { get; set; }
/// <summary>
/// 采购商名称
/// </summary>

84
BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs

@ -0,0 +1,84 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 时限任务表
/// </summary>
[Table(Name = "timelimittask", DisableSyncStructure = true)]
public partial class TimeLimitTask
{
[Column(IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 完成时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CompletionTime { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? CreateTme { get; set; }
/// <summary>
/// 付款时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? PayTime { get; set; }
/// <summary>
/// 到期时间(非时间长度,而是具体的时间)
/// </summary>
[Column(DbType = "datetime")]
public DateTime? ExpirationTime { get; set; }
/// <summary>
/// 是否及时完成
/// </summary>
public bool? IsTimely { get; set; }
/// <summary>
/// 订单Id (采购任务时有效)
/// </summary>
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 订单Sn (采购任务时有效)
/// </summary>
[Column(StringLength = 100)]
public string OrderSn { get; set; }
/// <summary>
/// 店铺Id
/// </summary>
public long? ShopId { get; set; }
/// <summary>
/// SKU
/// </summary>
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// 任务类型(采购任务=0,合格证拟定任务=10,合格证补充任务=11)
/// </summary>
[Column(MapType = typeof(int?))]
public Enums.TimeLimitTaskType? TaskType { get; set; }
/// <summary>
/// 备注
/// </summary>
[Column(StringLength = 500)]
public string Remark { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Request/Order/AddOrderMessageRequest.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class AddOrderMessageRequest
{
public string Message { get; set; }
public string OrderId { get; set; }
}
}

44
BBWYB.Server.Model/Dto/Request/Order/QueryOrderRequest.cs

@ -71,14 +71,48 @@
/// <summary>
/// 是否为待配置 (复合条件)
/// <para>条件1: 已采购 + 未取消</para>
/// <para>订单未取消 + 订单为发回齐越 + 订单已采购 + 任意sku为待配置</para>
/// </summary>
public bool IsWaitConfig { get; set; }
///// <summary>
///// 是否过滤已配置
///// </summary>
//public bool ExcludeConfigured { get; set; }
/// <summary>
/// 是否仅显示待采购超时,是=1否=0,null则不处理该条件,只在订单状态为【待采购和部分采购】时生效
/// </summary>
public int? IsOnlyDisplayPurchaseTimeOut { get; set; }
/// <summary>
/// 是否仅显示待发货超时,是=1否=0,null则不处理该条件,只在订单状态为【待发货和部分发货】时生效
/// </summary>
public int? IsOnlyDisplayDeliveryTimeout { get; set; }
/// <summary>
/// 是否仅显示待配置-需修改,是=1否=0,null则不处理该条件,只在【IsWaitConfig=true】时生效
/// </summary>
public int? IsOnlyDisplayPackConfigEditState { get; set; }
/// <summary>
/// 是否仅显示配置超时,是=1否=0,null则不处理该条件,只在【IsWaitConfig=true】时生效(优先)
/// </summary>
public int? IsOnlyDisplayCerConfigTimeOut { get; set; }
/// <summary>
/// 是否仅显示核算超时,是=1否=0,null则不处理该条件,只在订单状态为【待核算】时生效
/// </summary>
public int? IsOnlyDisplayCheckComputationTimeOut { get; set; }
/// <summary>
/// 是否仅显示发回齐越,是=1否=0,null则不处理该条件
/// </summary>
public int? IsOnlyDisplaySendQiYue { get; set; }
/// <summary>
/// 是否仅显示厂家代发入仓,是=1否=0,null则不处理该条件
/// </summary>
public int? IsOnlyDisplayPurchaserSendInStore { get; set; }
/// <summary>
/// 是否仅显示特殊单,是=1否=0,null则不处理该条件
/// </summary>
public int? IsOnlyDisplaySpecialOrder { get; set; }
}
}

12
BBWYB.Server.Model/Dto/Request/Order/SetSpecialOrderRequest.cs

@ -0,0 +1,12 @@
namespace BBWYB.Server.Model.Dto
{
public class SetSpecialOrderRequest
{
public string OrderId { get; set; }
/// <summary>
/// 是=1 否=0
/// </summary>
public int IsSpecialOrder { get; set; }
}
}

6
BBWYB.Server.Model/Dto/Request/PurchaseOrder/DeletePurchaseOrderRequest.cs

@ -0,0 +1,6 @@
namespace BBWYB.Server.Model.Dto
{
public class DeletePurchaseOrderRequest : SetHistoryPurchaseOrderRequest
{
}
}

39
BBWYB.Server.Model/Dto/Request/PurchaseOrder/PurchaserDeliveryRequest.cs

@ -0,0 +1,39 @@
namespace BBWYB.Server.Model.Dto
{
public class PurchaserDeliveryRequest
{
public string OrderId { get; set; }
public string PurchaseOrderId { get; set; }
/// <summary>
/// 订单SkuId (OrderSku对象的SkuId)
/// </summary>
public string SkuId { get; set; }
public IList<InStorePurchaseOrderManualDeliveryRequest> InStorePurchaseOrderManualDeliveryList { get; set; }
}
public class InStorePurchaseOrderManualDeliveryRequest
{
/// <summary>
/// 快递公司Id
/// </summary>
public string ExpressId { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
public string ExpressName { get; set; }
/// <summary>
/// 快递单号
/// </summary>
public string WaybillNo { get; set; }
/// <summary>
/// 入库采购单集合
/// </summary>
public IList<string> InStorePurchaseOrderIdList { get; set; }
}
}

2
BBWYB.Server.Model/Dto/Request/PurchaseOrder/SetHistoryPurchaseOrderRequest.cs

@ -11,5 +11,7 @@
/// 采购单Id
/// </summary>
public string PurchaseOrderId { get; set; }
public bool? IsDelete { get; set; }
}
}

6
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs

@ -19,6 +19,12 @@ namespace BBWYB.Server.Model.Dto
/// 采购商Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 采购商Id
/// </summary>
public string PurchaserId2 { get; set; }
/// <summary>
/// 采购商名称
/// </summary>

9
BBWYB.Server.Model/Dto/Request/QiKu/QiKuPackTaskSkuPurchaseSchemeIdRequest.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class QiKuPackTaskSkuPurchaseSchemeIdRequest
{
public string SkuId { get; set; }
public string SkuPurchaseSchemeId { get; set; }
}
}

11
BBWYB.Server.Model/Dto/Request/QiKu/QikuPublishOrderSkuPackConfigStateRequest.cs

@ -0,0 +1,11 @@
namespace BBWYB.Server.Model.Dto
{
public class QikuPublishOrderSkuPackConfigStateRequest
{
public string OrderId { get; set; }
public string SkuId { get; set; }
public Enums.PackConfigState PackConfigState { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Request/TimeLimitTask/EditTimeLimitTaskRemarkRequest.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class EditTimeLimitTaskRemarkRequest
{
public long TaskId { get; set; }
public string Remark { get; set; }
}
}

36
BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeLimitTaskRequest.cs

@ -0,0 +1,36 @@
namespace BBWYB.Server.Model.Dto
{
public class QueryTimeLimitTaskRequest
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public Enums.TimeLimitTaskType? TimeLimitTaskType { get; set; }
/// <summary>
/// 是否完成,完成=1,未完成=0,可空
/// </summary>
public int? IsCompleted { get; set; }
/// <summary>
/// 是否超时,超时=1,未超时=0,可空
/// </summary>
public int? IsTimeOut { get; set; }
/// <summary>
/// 店铺Id,可空
/// </summary>
public long? ShopId { get; set; }
/// <summary>
/// 页码,1开始
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 每页记录数
/// </summary>
public int PageSize { get; set; }
}
}

14
BBWYB.Server.Model/Dto/Request/TimeLimitTask/QueryTimeOutRequest.cs

@ -0,0 +1,14 @@
namespace BBWYB.Server.Model.Dto
{
public class QueryTimeOutRequest
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
/// <summary>
/// 店铺Id 可空
/// </summary>
public long? ShopId { get; set; }
}
}

34
BBWYB.Server.Model/Dto/Response/JD/JDInStoreOrderDetail.cs

@ -0,0 +1,34 @@
namespace JD.Dto
{
public class JDInStoreOrderDetail
{
public string poOrderNo { get; set; }
public string isvPoOrderNo { get; set; }
/// <summary>
/// 开放平台事业部编号
/// </summary>
public string deptNo { get; set; }
/// <summary>
/// 开放平台库房编号
/// </summary>
public string whNo { get; set; }
/// <summary>
/// 开放平台供应商编号
/// </summary>
public string supplierNo { get; set; }
/// <summary>
/// 采购入库单状态:4等待箱明细、5等待序列号清单、6待集单、10新建、15追加中、16已集单、20初始、30预约、31单据申报、32入园放行、33理货申报、34入库放行、40叫号、50验收、51 TC验收、60上架、70完成、80异常、81未完成、82申报失败、90取消中、91取消成功、92取消失败、93待取消、94等待取消中、95库房修改;最大长度4字符
/// </summary>
public string poOrderStatus { get; set; }
/// <summary>
/// 采购入库单入库状态;1:有差异待确认,2:无差异已确认,3:待确认,4:有差异已确认
/// </summary>
public string storageStatus { get; set; }
}
}

11
BBWYB.Server.Model/Dto/Response/MDS/UserInfoResponse.cs

@ -0,0 +1,11 @@
namespace BBWYB.Server.Model.Dto
{
public class UserInfoResponse
{
public string Id { get; set; }
public string UserName { get; set; }
//其余字段需要用到的时候再扩充
}
}

2
BBWYB.Server.Model/Dto/Response/Order/OrderCostResponse.cs

@ -4,6 +4,6 @@ namespace BBWYB.Server.Model.Dto
{
public class OrderCostResponse : OrderCost
{
public IList<OrderSkuCostResponse> OrderSkuCostList { get; set; }
}
}

40
BBWYB.Server.Model/Dto/Response/Order/OrderCountByStateResponse.cs

@ -0,0 +1,40 @@
namespace BBWYB.Server.Model.Dto
{
public class OrderCountByStateResponse
{
/// <summary>
/// 待付款数量
/// </summary>
public long WaitPayCount { get; set; }
/// <summary>
/// 待采购数量(含部分采购)
/// </summary>
public int WaitPurchaseCount { get; set; }
/// <summary>
/// 待配置数量
/// </summary>
public long WaitConfigCount { get; set; }
/// <summary>
/// 待发货数量(含部分发货)
/// </summary>
public long WaitShipmentCount { get; set; }
/// <summary>
/// 待收货数量(含部分收货)
/// </summary>
public long WaitReceiveCount { get; set; }
/// <summary>
/// 待验收数量
/// </summary>
public long WaitCheckCount { get; set; }
/// <summary>
/// 待核算数量
/// </summary>
public long WaitComputationCount { get; set; }
}
}

8
BBWYB.Server.Model/Dto/Response/Order/OrderMessageResponse.cs

@ -0,0 +1,8 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class OrderMessageResponse : OrderMessage
{
}
}

5
BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs

@ -13,5 +13,10 @@ namespace BBWYB.Server.Model.Dto
/// 快递单列表
/// </summary>
public IList<PurchaseExpressOrderResponse> PurchaseExpressOrderList { get; set; }
/// <summary>
/// 采购商家
/// </summary>
public Purchaser Purchaser { get; set; }
}
}

14
BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs

@ -26,6 +26,11 @@
/// </summary>
public DateTime ModifyTime { get; set; }
/// <summary>
/// 支付时间
/// </summary>
public DateTime? PayTime { get; set; }
/// <summary>
/// 订单平台
/// </summary>
@ -147,6 +152,15 @@
public Enums.PackConfigState? PackConfigState { get; set; }
public Enums.IntoStoreType? IntoStoreType { get; set; }
public Enums.AutoEditOrderPriceType? IsAutoEditOrderPrice { get; set; }
public IList<OrderMessageResponse> OrderMessageList { get; set; }
/// <summary>
/// 是否为特殊单 是=1 否=0
/// </summary>
public int? IsSpecialOrder { get; set; }
}
public class OrderListResponse

9
BBWYB.Server.Model/Dto/Response/Order/OrderSkuCostResponse.cs

@ -0,0 +1,9 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class OrderSkuCostResponse : OrderSkuCost
{
public IList<OrderCostDetailResponse> OrderCostDetailList { get; set; }
}
}

31
BBWYB.Server.Model/Dto/Response/Order/OrderSkuResponse.cs

@ -4,19 +4,40 @@ namespace BBWYB.Server.Model.Dto
{
public class OrderSkuResponse : OrderSku
{
// /// <summary>
// /// 采购方案
// /// </summary>
//public long SchemeId { get;set; }
public OrderSkuResponse()
{
PurchaseExpressOrderList = new List<PurchaseExpressOrderResponse>();
//TimeLimitTaskList = new List<TimeLimitTaskResponse>();
}
/// <summary>
/// 订单SKU发货状态 (未发货=0,已发货=1,部分发=2)
/// </summary>
public int ShipState { get; set; }
/// <summary>
/// 快递单列表
/// </summary>
public IList<PurchaseExpressOrderResponse> PurchaseExpressOrderList { get; set; }
/// <summary>
/// 采购限时任务
/// </summary>
public TimeLimitTaskResponse? PurchaseTimeLimitTask { get; set; }
/// <summary>
/// 合格证拟定任务
/// </summary>
public TimeLimitTaskResponse? CerConfigTimeLimitTask { get; set; }
/// <summary>
/// 合格证补充任务
/// </summary>
public TimeLimitTaskResponse? CerEditTimeLimitTask { get; set; }
/// <summary>
/// 待核算任务
/// </summary>
public TimeLimitTaskResponse? CheckComputationTimeLimitTask { get; set; }
}
}

7
BBWYB.Server.Model/Dto/Response/Order/PurchaseExpressOrderResponse.cs

@ -2,11 +2,16 @@
namespace BBWYB.Server.Model.Dto
{
public class PurchaseExpressOrderResponse: PurchaseExpressOrder
public class PurchaseExpressOrderResponse : PurchaseExpressOrder
{
/// <summary>
/// 归属SkuId,逗号间隔 (拳探SKU)
/// </summary>
public string BelongSkuIds { get; set; }
/// <summary>
/// 入仓采购单号
/// </summary>
public IList<string> InStorePurchaseOrderIdList { get; set; }
}
}

2
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs

@ -8,6 +8,8 @@ namespace BBWYB.Server.Model.Dto
{
public string PurchaserName { get; set; }
public string PurchaserId2 { get; set; }
public string PurchaserLocation { get; set; }
public new List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; }

22
BBWYB.Server.Model/Dto/Response/QiKu/QiKuBindingSchemeResponse.cs

@ -0,0 +1,22 @@
namespace BBWYB.Server.Model.Dto
{
public class QiKuBindingSchemeResponse
{
public string OrderId { get; set; }
public IList<QiKuBindingSchemeSkuResponse> PackTaskSkuPurchaseSchemeIdList { get; set; }
}
public class QiKuBindingSchemeSkuResponse
{
/// <summary>
/// 来源skuId
/// </summary>
public string SkuId { get; set; }
/// <summary>
/// 是否配置合格证
/// </summary>
public bool IsConfiguredCer { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskListResponse.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class TimeLimitTaskListResponse
{
public long Count { get; set; }
public IList<TimeLimitTaskResponse> ItemList { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskResponse.cs

@ -0,0 +1,9 @@
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Model.Dto
{
public class TimeLimitTaskResponse : TimeLimitTask
{
public string ShopName { get; set; }
}
}

25
BBWYB.Server.Model/Dto/Response/TimeLimitTask/TimeLimitTaskStatisticsResponse.cs

@ -0,0 +1,25 @@
namespace BBWYB.Server.Model.Dto
{
public class TimeLimitTaskStatisticsResponse
{
public long ShopId { get; set; }
public string ShopName { get; set; }
/// <summary>
/// 采购超时率(%)
/// </summary>
public double PurchaseTimeOutPercent { get; set; }
/// <summary>
/// 合格证补充超时量
/// </summary>
public int? CerEditTimeOutCount { get; set; }
/// <summary>
/// 合格证拟定超时量
/// </summary>
public int? CerConfigTimeOutCount { get; set; }
}
}

29
BBWYB.Server.Model/Enums.cs

@ -103,10 +103,10 @@
public enum PurchaseOrderState
{
= 0,
= 1,
= 10,
= 11,
= 20,
= 1,
= 10,
= 11,
= 20,
= 100
}
@ -290,12 +290,13 @@
}
/// <summary>
/// 打包配置状态 待配置 = 0,已配置 = 1
/// 打包配置状态 待配置 = 0,已配置 = 1,需修改 = 2
/// </summary>
public enum PackConfigState
{
= 0,
= 1
= 1,
= 2
}
/// <summary>
@ -305,5 +306,21 @@
{
= 0, = 1
}
/// <summary>
/// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20
/// </summary>
public enum TimeLimitTaskType
{
= 0, = 10, = 11, = 20
}
/// <summary>
/// 平价状态 未平价=0 已平价=1 部分平价=2
/// </summary>
public enum AutoEditOrderPriceType
{
= 0, = 1, = 2
}
}
}

4
BBWYB.Server.Model/MappingProfiles.cs

@ -45,7 +45,9 @@ namespace BBWYB.Server.Model
.ForPath(t => t.OrderCost.PlatformCommissionAmount, opt => opt.MapFrom(f => f.PlatformCommissionAmount ?? 0))
.ForPath(t => t.OrderCost.PlatformCommissionRatio, opt => opt.MapFrom(f => f.PlatformCommissionRatio ?? 0))
.ForPath(t => t.OrderCost.PreferentialAmount, opt => opt.MapFrom(f => f.PreferentialAmount))
.ForPath(t => t.OrderCost.IsManualEdited, opt => opt.MapFrom(f => f.IsManualEdited));
.ForPath(t => t.OrderCost.IsManualEdited, opt => opt.MapFrom(f => f.IsManualEdited))
.ForPath(t => t.OrderCost.SkuAmount, opt => opt.MapFrom(f => f.SkuAmount))
.ForPath(t => t.OrderCost.PurchaseFreight, opt => opt.MapFrom(f => f.PurchaseFreight));
CreateMap<OrderPurchaseInfo, OrderPurchaseInfoResponse>();
//CreateMap<AddOrEditPromotionTaskRequest, PromotionTask>();

5
QuanTan.SDK/Client/Supplier/QuanTan_Supplier_ProductClient.cs

@ -19,5 +19,10 @@ namespace QuanTan.SDK.Client.Supplier
{
return SendRequest<QuanTan_Supplier_ProductSkuListResponse>("api/platform/supply/product/list", request, appId, appSecret);
}
public QuanTanResponse<object> EditProductPrice(QuanTan_Supplier_EditProductPriceRequest request, string appId, string appSecret)
{
return SendRequest<object>("api/platform/supply/product/price/change", request, appId, appSecret);
}
}
}

7
QuanTan.SDK/Models/Supplier/Request/Order/QuanTan_Supplier_EditPriceRequest.cs

@ -22,8 +22,13 @@
public decimal price { get; set; }
/// <summary>
/// Sku运费
/// Sku运费
/// </summary>
public decimal postagePrice { get; set; }
/// <summary>
/// 单个订单商品的打包费
/// </summary>
public decimal packingChargeSingle { get; set; }
}
}

18
QuanTan.SDK/Models/Supplier/Request/Product/QuanTan_Supplier_EditProductPriceRequest.cs

@ -0,0 +1,18 @@
namespace QuanTan.SDK.Models.Supplier
{
public class QuanTan_Supplier_EditProductPriceRequest
{
public string productId { get; set; }
public string editAdmin { get; set; }
public IList<QuanTan_Supplier_EditProductSkuPriceRequest> skuList { get; set; }
}
public class QuanTan_Supplier_EditProductSkuPriceRequest
{
public string skuId { get; set; }
public decimal price { get; set; }
}
}

5
SDKAdapter/ExpressCompanyNameConverter.cs

@ -124,7 +124,10 @@ namespace SDKAdapter
new LogisticsCompanyRelationship(){SourceName="加运美速递",TargetName="加运美",TargetCode="jiayunmeiwuliu"},
new LogisticsCompanyRelationship(){SourceName="加运美",TargetName="加运美",TargetCode="jiayunmeiwuliu"},
new LogisticsCompanyRelationship(){SourceName="信丰物流",TargetName="信丰物流",TargetCode="xinfengwuliu"},
new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"}
new LogisticsCompanyRelationship(){SourceName="京东物流",TargetName="京东物流",TargetCode="jd"},
new LogisticsCompanyRelationship(){SourceName="速腾快递",TargetName="速腾快递",TargetCode="suteng"},
new LogisticsCompanyRelationship(){SourceName="运通快运",TargetName="运通快运",TargetCode="ytky168"},
new LogisticsCompanyRelationship(){SourceName="汇森速运",TargetName="汇森速运",TargetCode="huisenky"}
});
}

5
SDKAdapter/OperationPlatform/Client/Base/OP_PlatformClient.cs

@ -51,5 +51,10 @@ namespace SDKAdapter.OperationPlatform.Client
{
throw new NotImplementedException();
}
public virtual void EditProductPrice(OP_EditProductPriceRequest request)
{
throw new NotImplementedException();
}
}
}

20
SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs

@ -146,6 +146,7 @@ namespace SDKAdapter.OperationPlatform.Client
PackAmount = qto.PackingCharge,
PayType = 0,
IsPay = qto.Paid == 1,
PayTime = qto.Paid == 1 ? qto.PayTime : null,
PreferentialAmount = 0,
SellerPreferentialAmount = 0,
OrderSkuList = qto.OrderProduct.Select(qtosku => new OP_OrderProductSkuResponse()
@ -215,12 +216,29 @@ namespace SDKAdapter.OperationPlatform.Client
{
orderProductId = item.OrderSkuId,
postagePrice = item.Freight,
price = item.Price
price = item.Price,
packingChargeSingle = item.InPackAmountPrice
}).ToList()
}, request.AppKey, request.AppSecret);
if (qtResponse.Status != 200)
throw new Exception(qtResponse.Message);
}
public override void EditProductPrice(OP_EditProductPriceRequest request)
{
var qtResponse = supplier_ProductClient.EditProductPrice(new QuanTan_Supplier_EditProductPriceRequest()
{
productId = request.Spu,
editAdmin = request.AppToken,
skuList = request.EditSkuList.Select(x => new QuanTan_Supplier_EditProductSkuPriceRequest()
{
price = x.Price,
skuId = x.Sku
}).ToList()
}, request.AppKey, request.AppSecret);
if (qtResponse.Status != 200)
throw new Exception(qtResponse.Message);
}
}
}

18
SDKAdapter/OperationPlatform/Models/Request/Order/OP_EditPriceRequest.cs

@ -10,26 +10,32 @@
public class OP_EditPriceSkuRequest
{
/// <summary>
/// 订单Sku商品Id
/// 订单Sku对象Id主键
/// </summary>
public string OrderSkuId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 单价
/// sku单价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 数量
/// sku打包费单价
/// </summary>
public int Quantity { get; set; }
public decimal InPackAmountPrice { get; set; }
///// <summary>
///// 数量
///// </summary>
//public int Quantity { get; set; }
/// <summary>
/// 运费
/// 单笔sku的订单运费(用户支付运费)
/// </summary>
public decimal Freight { get; set; }
}
}

16
SDKAdapter/OperationPlatform/Models/Request/Product/OP_EditProductPriceRequest.cs

@ -0,0 +1,16 @@
namespace SDKAdapter.OperationPlatform.Models
{
public class OP_EditProductPriceRequest : BasePlatformRequest
{
public string Spu { get; set; }
public List<OP_EditProductSkuPriceRequest> EditSkuList { get; set; }
}
public class OP_EditProductSkuPriceRequest
{
public string Sku { get; set; }
public decimal Price { get; set; }
}
}

5
SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs

@ -42,6 +42,11 @@
/// </summary>
public bool IsPay { get; set; }
/// <summary>
/// 支付时间
/// </summary>
public DateTime? PayTime { get; set; }
/// <summary>
/// 下单来源
/// <para>京东【】</para>

Loading…
Cancel
Save