506583276@qq.com 2 years ago
parent
commit
1db1ac8af2
  1. 27
      BBWYB.Client/APIServices/ProductService.cs
  2. 52
      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. 38
      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. 73
      BBWYB.Server.Business/Extensions/OrderAmountExtension.cs
  25. 32
      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. 428
      BBWYB.Server.Business/Order/OrderBusiness.cs
  31. 40
      BBWYB.Server.Business/Product/ProductBusiness.cs
  32. 1543
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  33. 54
      BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
  34. 2
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  35. 210
      BBWYB.Server.Business/QiKuManager.cs
  36. 108
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  37. 140
      BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
  38. 3
      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. 5
      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. 21
      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

27
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);

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

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

73
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,7 +78,7 @@ namespace BBWYB.Server.Business.Extensions
/// <param name="purchaseFreight">采购运费</param>
/// <param name="outPackAmount">支出打包费</param>
/// <param name="deliveryExpressFreight">发货运费</param>
public static void CalculationOrderCostCostAndProfit(this OrderCost oc,
public static void CalculationOrderCostAndProfit(this OrderCost oc,
decimal orderAmount,
decimal purchaseProductAmount,
decimal 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;
}
}
}

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

428
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)
{
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?>()
{
this.opPlatformClientFactory = opPlatformClientFactory;
this.restApiService = restApiService;
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());
}
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");
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))
{
var childSelect = fsql.Select<OrderPurchaseInfo>().As("opi")
.Where(opi => opi.PurchaseOrderId == 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
#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
//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 判断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.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,19 +604,48 @@ 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.CalculationOrderCostAndProfit(order.OrderTotalAmount,
orderCost.SkuAmount ?? 0M,
orderCost.PurchaseFreight ?? 0M,
orderCost.OutPackAmount ?? 0M,
@ -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.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();
}
}
}

40
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;
@ -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);
}
}
}

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

File diff suppressed because it is too large

54
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()
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 = 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 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,

210
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,7 +44,7 @@ namespace BBWYB.Server.Business
/// <param name="orderPurchaseRelationInfoList"></param>
/// <param name="orderPurchaseSkuInfoList"></param>
/// <param name="purchaseExpressOrderList"></param>
public void PublishQiKu(OrderPurchaseInfo orderPurchaseInfo,
public void PublishQiKuReceiveInfo(OrderPurchaseInfo orderPurchaseInfo,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> 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();
}
}
}

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

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

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

@ -8,5 +8,10 @@ namespace BBWYB.Server.Model.Dto
/// 归属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; }
}
}

21
BBWYB.Server.Model/Enums.cs

@ -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