Browse Source

使用工作时倒计时,添加超时赔付结算

AddValidOverTime
506583276@qq.com 1 year ago
parent
commit
41b5a0f735
  1. 3
      BBWY.Client/APIServices/OrderService.cs
  2. 23
      BBWY.Client/APIServices/PurchaseOrderService.cs
  3. 48
      BBWY.Client/APIServices/PurchaseProductAPIService.cs
  4. 41
      BBWY.Client/Converters/InputNumberConverter.cs
  5. 2
      BBWY.Client/GlobalContext.cs
  6. 9
      BBWY.Client/Models/APIModel/Response/BillCorrection/BillCorrectionOrderResponse.cs
  7. 13
      BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs
  8. 14
      BBWY.Client/Models/APIModel/Response/Order/OrderCostDetailResponse.cs
  9. 5
      BBWY.Client/Models/APIModel/Response/Order/OrderCostResponse.cs
  10. 9
      BBWY.Client/Models/APIModel/Response/PurchaseOrder/PurchaseOrderResponse.cs
  11. 9
      BBWY.Client/Models/BillCorrection/BillCorrectionOrder.cs
  12. 59
      BBWY.Client/Models/Order/ManualEditCostOrderSku.cs
  13. 19
      BBWY.Client/Models/Order/Order.cs
  14. 5
      BBWY.Client/Models/Order/OrderCost.cs
  15. 17
      BBWY.Client/Models/PurchaseOrder/CargoParam.cs
  16. 39
      BBWY.Client/Models/PurchaseOrder/PurchaseOrder.cs
  17. 8
      BBWY.Client/ViewModels/Order/OrderListViewModel.cs
  18. 16
      BBWY.Client/ViewModels/PackTask/WareHouseListViewModel.cs
  19. 55
      BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs
  20. 4
      BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs
  21. 2
      BBWY.Client/ViewModels/TotalPackTask/ShopPackTaskTotalViewModel.cs
  22. 10
      BBWY.Client/Views/BillCorrection/BillCorrectionView.xaml
  23. 10
      BBWY.Client/Views/Order/ManualCalculationCost.xaml
  24. 13
      BBWY.Client/Views/Order/OrderListControl.xaml
  25. 4
      BBWY.Client/Views/PackTask/PrintWindow.xaml
  26. 92
      BBWY.Client/Views/PackTask/PrintWindow.xaml.cs
  27. 24
      BBWY.Client/Views/PackagingTask/PrintPackDetailWindow.xaml.cs
  28. 10
      BBWY.Client/Views/PackagingTask/ShopWaitPackingTaskControl.xaml
  29. 224
      BBWY.Client/Views/Ware/WareStock.xaml
  30. 2
      BBWY.JDSDK/Request/AttrValueAliasJson.cs
  31. 4
      BBWY.Server.API/BBWY.Server.API.csproj
  32. 56
      BBWY.Server.API/Controllers/OrderEstimateCostSyncController.cs
  33. 12
      BBWY.Server.API/Controllers/TestController.cs
  34. 5
      BBWY.Server.API/Startup.cs
  35. 2
      BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs
  36. 4
      BBWY.Server.Business/BBWY.Server.Business.csproj
  37. 6
      BBWY.Server.Business/BillCorrection/BillCorrectionBusiness.cs
  38. 12
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  39. 103
      BBWY.Server.Business/Order/OrderBusiness.cs
  40. 136
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  41. 44
      BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  42. 49
      BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
  43. 2
      BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs
  44. 23
      BBWY.Server.Business/Statistics/StatisticsBusiness.cs
  45. 38
      BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs
  46. 47
      BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs
  47. 33
      BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs
  48. 28
      BBWY.Server.Business/Sync/JD/JDPopularizeReportFormSkuLevelSyncBusiness.cs
  49. 397
      BBWY.Server.Business/Sync/OrderEstimateCostSyncBusiness.cs
  50. 84
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  51. 4
      BBWY.Server.Business/TaskSchedulerManager.cs
  52. 231
      BBWY.Server.Business/TestBusiness.cs
  53. 4
      BBWY.Server.Business/Vender/VenderBusiness.cs
  54. 2
      BBWY.Server.Model/BBWY.Server.Model.csproj
  55. 187
      BBWY.Server.Model/Db/JD/JDPopularizeAdGroup.cs
  56. 232
      BBWY.Server.Model/Db/JD/JDPopularizeAdSku.cs
  57. 206
      BBWY.Server.Model/Db/JD/JDPopularizeCampaign.cs
  58. 426
      BBWY.Server.Model/Db/JDXX/Newskus.cs
  59. 6
      BBWY.Server.Model/Db/Order/Order.cs
  60. 6
      BBWY.Server.Model/Db/Order/OrderCost.cs
  61. 29
      BBWY.Server.Model/Db/Order/OrderCostDetail.cs
  62. 100
      BBWY.Server.Model/Db/Order/SkuRecentCost.cs
  63. 37
      BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrder.cs
  64. 10
      BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs
  65. 19
      BBWY.Server.Model/Dto/Request/PurchaseOrder/AddPurchaseOrderRequest.cs
  66. 19
      BBWY.Server.Model/Dto/Request/PurchaseOrder/EditPurchaseOrderRequest.cs
  67. 2
      BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs
  68. 15
      BBWY.Server.Model/Dto/Request/Sync/SkuRecentCostRequest.cs
  69. 2
      BBWY.Server.Model/Dto/Response/BillCorrection/BillCorrectionOrderResponse.cs
  70. 10
      BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs
  71. 1
      BBWY.Server.Model/MappingProfiles.cs
  72. 4
      BBWY.Test/BBWY.Test.csproj
  73. 84
      BBWY.Test/Program.cs
  74. 4
      JD.API/JD.API.csproj
  75. 2
      QuanTan.SDK/Model/Response/Product/QuanTanProductResponse.cs

3
BBWY.Client/APIServices/OrderService.cs

@ -126,7 +126,8 @@ namespace BBWY.Client.APIServices
osku.PurchaseFreight,
osku.ProductId,
osku.SkuAmount,
osku.StorageAmount,
//osku.StorageAmount,
osku.PackagingLaborAmount,
osku.TotalCost,
osku.UnitCost
}),

23
BBWY.Client/APIServices/PurchaseOrderService.cs

@ -57,20 +57,13 @@ namespace BBWY.Client.APIServices
/// <param name="consignee"></param>
/// <param name="purchaseSchemeProductSkuList"></param>
/// <returns></returns>
public ApiResponse<PreviewOrderResponse> PreviewPurchaseOrder(Consignee consignee, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkuList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode)
public ApiResponse<PreviewOrderResponse> PreviewPurchaseOrder(Consignee consignee, List<CargoParam> cargoParamList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode)
{
return SendRequest<PreviewOrderResponse>(globalContext.BBYWApiHost, "api/purchaseOrder/PreviewPurchaseOrder", new
{
purchaseOrderMode,
consignee,
CargoParamList = purchaseSchemeProductSkuList.Select(sku => new
{
ProductId = sku.PurchaseProductId,
SkuId = sku.PurchaseSkuId,
SpecId = sku.PurchaseSkuSpecId,
Quantity = sku.ItemTotal,
BelongSkuId = sku.SkuId
}),
CargoParamList = cargoParamList,
Platform = purchasePlatform,
AppKey = purchaseAccount.AppKey,
AppSecret = purchaseAccount.AppSecret,
@ -99,7 +92,7 @@ namespace BBWY.Client.APIServices
/// <param name="extensions"></param>
/// <returns></returns>
public ApiResponse<object> FastCreateOrder(Consignee consignee,
IList<PurchaseSchemeProductSku> purchaseSchemeProductSkuList,
List<CargoParam> cargoParamList,
Platform purchasePlatform,
PurchaseAccount purchaseAccount,
PurchaseOrderMode purchaseOrderMode,
@ -118,15 +111,7 @@ namespace BBWY.Client.APIServices
{
purchaseOrderMode,
consignee,
CargoParamList = purchaseSchemeProductSkuList.Select(sku => new
{
ProductId = sku.PurchaseProductId,
SkuId = sku.PurchaseSkuId,
SpecId = sku.PurchaseSkuSpecId,
Quantity = sku.ItemTotal,
BelongSkuId = sku.SkuId,
SchemeId = sku.SkuPurchaseSchemeId
}),
CargoParamList = cargoParamList,
Platform = purchasePlatform,
purchaseAccount.AppKey,
purchaseAccount.AppSecret,

48
BBWY.Client/APIServices/PurchaseProductAPIService.cs

@ -25,6 +25,9 @@ namespace BBWY.Client.APIServices
private string qtAppId = "BBWY2023022001";
private string qtAppSecret = "908e131365d5448ca651ba20ed7ddefe";
private List<string> locationIdList;
private List<string> priceIdList;
private TimeSpan purchaseProductCacheTimeSpan;
//private TimeSpan _1688SessionIdTimeSpan;
@ -48,6 +51,17 @@ namespace BBWY.Client.APIServices
};
purchaseProductCacheTimeSpan = TimeSpan.FromDays(1);
this.quanTanProductClient = quanTanProductClient;
locationIdList = new List<string>()
{
"300252630336272",
"1081181309101",
"16347413030323"
};
priceIdList = new List<string>() {
"300252630336263",
"1081181309582",
"16347413030316"
};
}
public (Purchaser purchaser, IList<PurchaseSchemeProductSku> purchaseSchemeProductSkus)? GetProductInfo(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode, PurchaseProductAPIMode apiMode)
@ -189,7 +203,7 @@ namespace BBWY.Client.APIServices
if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK)
return null;
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*</script>)");
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA\s?=)(.*)(\r*\n*\s*</script>)");
if (!match.Success)
return null;
@ -200,11 +214,18 @@ namespace BBWY.Client.APIServices
var purchaser = new Purchaser()
{
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(),
Location = jobject["data"]["1081181309101"] != null ?
jobject["data"]["1081181309101"]["data"]["location"].ToString() :
jobject["data"]["16347413030323"]["data"]["location"].ToString()
Name = jobject["globalData"]["tempModel"]["companyName"].ToString()
};
foreach (var lid in locationIdList)
{
if (jobject["data"][lid] != null)
{
purchaser.Location = jobject["data"][lid]["data"]["location"].ToString();
break;
}
}
var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<int>("fid") == 3216 ||
j.Value<int>("fid") == 1627207 ||
@ -217,9 +238,18 @@ namespace BBWY.Client.APIServices
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 = 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 = 0M;
foreach (var pid in priceIdList)
{
if (jobject["data"][pid] != null)
{
firstPrice = jobject["data"][pid]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
break;
}
}
var purchaseSchemeProductSkus = new List<PurchaseSchemeProductSku>();
@ -238,7 +268,7 @@ namespace BBWY.Client.APIServices
SkuId = skuId,
PurchaseProductId = purchaseProductId,
Price = skuPrice == 0M ? firstPrice : skuPrice,
Title = name,
Title = matchName,
PurchaseSkuId = value.Value<string>("skuId"),
PurchaseSkuSpecId = value.Value<string>("specId"),
Logo = colorsProperty.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png"

41
BBWY.Client/Converters/InputNumberConverter.cs

@ -1,4 +1,5 @@
using System;
using MathNet.Numerics;
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
@ -16,14 +17,44 @@ namespace BBWY.Client.Converters
{
string strValue = value as string;
if (string.IsNullOrEmpty(strValue))
{
return null;
}
decimal result;
var dotIndex = strValue.IndexOf('.');
if (dotIndex == strValue.Length - 1 ||
(dotIndex != -1 && strValue.EndsWith("0")) ||
!decimal.TryParse(strValue, out result))
if (strValue.IndexOf('.') == strValue.Length - 1 || (strValue.IndexOf('0') == strValue.Length - 1 && strValue.IndexOf('.') != -1) || !decimal.TryParse(strValue, out result))
{
return DependencyProperty.UnsetValue;
}
return result;
//if (string.IsNullOrEmpty(strValue))
// return DependencyProperty.UnsetValue;
//if (strValue.EndsWith("."))
// return DependencyProperty.UnsetValue;
//decimal result = 0M;
//var dotIndex = strValue.IndexOf('.');
//if (dotIndex == -1)
// decimal.TryParse(strValue, out result);
//else
//{
// //var intValueStr = strValue.Substring(0, dotIndex);
// var decimalValueStr = strValue.Substring(dotIndex + 1);
// var n = 1M;
// if (decimalValueStr.Length == 1)
// n = 1.0M;
// if (decimalValueStr.Length == 2)
// n = 1.00M;
// if (decimalValueStr.Length == 3)
// n = 1.000M;
// if (decimalValueStr.Length == 4)
// n = 1.0000M;
// if (decimal.TryParse(strValue, out result))
// result = decimal.Round(result * n, decimalValueStr.Length);
// else
// return DependencyProperty.UnsetValue;
//}
//return result;
}
}
}

2
BBWY.Client/GlobalContext.cs

@ -14,7 +14,7 @@ namespace BBWY.Client
{
ShopServiceGroupList = new List<string>();
ShopServiceGroupLowerList = new List<string>();
ClientVersion = "10211";
ClientVersion = "10229";
}

9
BBWY.Client/Models/APIModel/Response/BillCorrection/BillCorrectionOrderResponse.cs

@ -61,10 +61,15 @@ namespace BBWY.Client.Models
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 仓储费
///// </summary>
//public decimal StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// 包装人工
/// </summary>
public decimal StorageAmount { get; set; } = 0.00M;
public decimal PackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
/// 售后费用

13
BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs

@ -37,10 +37,15 @@ namespace BBWY.Client.Models
/// </summary>
public decimal FirstFreight { get; set; }
///// <summary>
///// 仓储费
///// </summary>
//public decimal StorageAmount { get; set; }
/// <summary>
/// 仓储费
/// 包装人工
/// </summary>
public decimal StorageAmount { get; set; }
public decimal PackagingLaborAmount { get; set; }
/// <summary>
/// 发货快递费
@ -111,8 +116,8 @@ namespace BBWY.Client.Models
public override string ToString()
{
//日期,店铺订单号,SKU编码,订单状态,仓储类型,代发下单单号,售价,商品成本,采购运费,头程费用,仓储服务费,快递费,耗材费,入仓操作费,出仓操作费,刷单/空单号费,平台扣点,补差金额,应付金额,实收金额,利润,利润率,收件人联系方式,商家备注,售后类型,售后与特殊情况备注
return $"{OrderStartTime:yyyy-MM-dd HH:mm:ss},{OrderId},{SkuIds},{OrderState},{StorageType},{PurchaseOrderIds},{OrderTotalPrice},{PurchaseSkuAmount},{PurchaseFreight},{FirstFreight},{StorageAmount},{DeliveryExpressFreight},{ConsumableAmount},{InStorageAmount},{OutStorageAmount},{SDOrderAmount},{PlatformCommissionAmount},{FreightPrice},{OrderPayment},{ActualAmount},{Profit},{ProfitRatio},{ConsigneeStr},{VenderRemark}";
//日期,店铺订单号,SKU编码,订单状态,仓储类型,代发下单单号,售价,商品成本,采购运费,头程费用,包装人工费,快递费,耗材费,入仓操作费,出仓操作费,刷单/空单号费,平台扣点,补差金额,应付金额,实收金额,利润,利润率,收件人联系方式,商家备注,售后类型,售后与特殊情况备注
return $"{OrderStartTime:yyyy-MM-dd HH:mm:ss},{OrderId},{SkuIds},{OrderState},{StorageType},{PurchaseOrderIds},{OrderTotalPrice},{PurchaseSkuAmount},{PurchaseFreight},{FirstFreight},{PackagingLaborAmount},{DeliveryExpressFreight},{ConsumableAmount},{InStorageAmount},{OutStorageAmount},{SDOrderAmount},{PlatformCommissionAmount},{FreightPrice},{OrderPayment},{ActualAmount},{Profit},{ProfitRatio},{ConsigneeStr},{VenderRemark}";
}
}
}

14
BBWY.Client/Models/APIModel/Response/Order/OrderCostDetailResponse.cs

@ -70,10 +70,15 @@ namespace BBWY.Client.Models
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 仓储费
///// </summary>
//public decimal StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// 包装人工
/// </summary>
public decimal StorageAmount { get; set; } = 0.00M;
public decimal PackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
/// 总计(不含销售运费 历史遗留)
@ -84,5 +89,10 @@ namespace BBWY.Client.Models
/// 总计 包含销售运费
/// </summary>
public decimal TotalCost2 { get; set; } = 0.00M;
/// <summary>
/// 是否为预估成本
/// </summary>
public bool IsEstimateCost { get; set; } = false;
}
}

5
BBWY.Client/Models/APIModel/Response/Order/OrderCostResponse.cs

@ -53,6 +53,11 @@ namespace BBWY.Client.Models
/// </summary>
public bool IsManualEdited { get; set; }
/// <summary>
/// 是否为预估成本
/// </summary>
public bool IsEstimateCost { get; set; } = false;
/// <summary>
/// 刷单佣金
/// </summary>

9
BBWY.Client/Models/APIModel/Response/PurchaseOrder/PurchaseOrderResponse.cs

@ -55,10 +55,15 @@ namespace BBWY.Client.Models
/// </summary>
public decimal SingleConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 单件仓储费
///// </summary>
//public decimal SingleStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 单件仓储费
/// 包装人工
/// </summary>
public decimal SingleStorageAmount { get; set; } = 0.00M;
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
/// 单件Sku成本

9
BBWY.Client/Models/BillCorrection/BillCorrectionOrder.cs

@ -65,10 +65,15 @@ namespace BBWY.Client.Models
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 仓储费
///// </summary>
//public decimal StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// 包装人工
/// </summary>
public decimal StorageAmount { get; set; } = 0.00M;
public decimal PackagingLaborAmount { get; set; }=0.00M;
/// <summary>
/// 售后费用

59
BBWY.Client/Models/Order/ManualEditCostOrderSku.cs

@ -46,11 +46,14 @@ namespace BBWY.Client.Models
private decimal consumableAmount;
private string consumableAmountStr;
/// <summary>
/// 仓储费
/// </summary>
private decimal storageAmount;
private string storageAmountStr;
///// <summary>
///// 仓储费
///// </summary>
//private decimal storageAmount;
//private string storageAmountStr;
private decimal packagingLaborAmount;
private string packagingLaborAmountStr;
/// <summary>
/// 总计(不含发货运费)
@ -100,7 +103,7 @@ namespace BBWY.Client.Models
public decimal PurchaseFreight { get => purchaseFreight; set { if (Set(ref purchaseFreight, value)) { CalculationCost(); } } }
public decimal FirstFreight { get => firstFreight; set { if (Set(ref firstFreight, value)) { CalculationCost(); } } }
public decimal ConsumableAmount { get => consumableAmount; set { if (Set(ref consumableAmount, value)) { CalculationCost(); } } }
public decimal StorageAmount { get => storageAmount; set { if (Set(ref storageAmount, value)) { CalculationCost(); } } }
//public decimal StorageAmount { get => storageAmount; set { if (Set(ref storageAmount, value)) { CalculationCost(); } } }
public decimal TotalCost
{
get => totalCost; set
@ -114,7 +117,7 @@ namespace BBWY.Client.Models
private void CalculationCost()
{
TotalCost = SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + ConsumableAmount + StorageAmount;
TotalCost = SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + ConsumableAmount + PackagingLaborAmount;
UnitCost = ItemTotal == 0 ? 0 : TotalCost / ItemTotal;
}
@ -164,17 +167,17 @@ namespace BBWY.Client.Models
}
}
}
public string StorageAmountStr
{
get => storageAmountStr; set
{
if (Set(ref storageAmountStr, value))
{
if (decimal.TryParse(storageAmountStr, out decimal d))
StorageAmount = d;
}
}
}
//public string StorageAmountStr
//{
// get => storageAmountStr; set
// {
// if (Set(ref storageAmountStr, value))
// {
// if (decimal.TryParse(storageAmountStr, out decimal d))
// StorageAmount = d;
// }
// }
//}
public string DeliveryExpressFreightStr
{
@ -225,5 +228,25 @@ namespace BBWY.Client.Models
OutStorageAmount = d;
}
}
public decimal PackagingLaborAmount
{
get => packagingLaborAmount;
set
{
if (Set(ref packagingLaborAmount, value))
CalculationCost();
}
}
public string PackagingLaborAmountStr
{
get => packagingLaborAmountStr;
set
{
if (Set(ref packagingLaborAmountStr, value))
if (decimal.TryParse(packagingLaborAmountStr, out decimal d))
packagingLaborAmount = d;
}
}
}
}

19
BBWY.Client/Models/Order/Order.cs

@ -237,11 +237,22 @@ namespace BBWY.Client.Models
{
get
{
//var beforeTotalCost = OrderCost?.BeforeTotalCost ?? 0M;
//return OrderState != OrderState.已取消 && StorageType != Models.StorageType.SD &&
// ((StorageType != null && beforeTotalCost == 0M) ||
// (beforeTotalCost > OrderSellerPrice + FreightPrice + PingTaiChengDanYouHuiQuan) ||
// (StorageType == null && OrderState != OrderState.等待采购 && OrderState != OrderState.待付款));
var beforeTotalCost = OrderCost?.BeforeTotalCost ?? 0M;
return OrderState != OrderState. && StorageType != Models.StorageType.SD &&
((StorageType != null && beforeTotalCost == 0M) ||
(beforeTotalCost > OrderSellerPrice + FreightPrice + PingTaiChengDanYouHuiQuan) ||
(StorageType == null && OrderState != OrderState. && OrderState != OrderState.));
var profit = OrderCost?.Profit ?? 0M;
return (OrderState != OrderState. &&
StorageType != Models.StorageType.SD &&
StorageType != null &&
(beforeTotalCost == 0M || profit < 0M)) ||
(StorageType == null &&
OrderState != OrderState. &&
OrderState != OrderState. &&
OrderState != OrderState.);
}
}

5
BBWY.Client/Models/Order/OrderCost.cs

@ -53,6 +53,11 @@
/// </summary>
public bool IsManualEdited { get; set; }
/// <summary>
/// 是否为预估成本
/// </summary>
public bool IsEstimateCost { get; set; } = false;
/// <summary>
/// 退款金额
/// </summary>

17
BBWY.Client/Models/PurchaseOrder/CargoParam.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BBWY.Client.Models
{
public class CargoParam
{
public string ProductId { get; set; }
public string SkuId { get; set; }
public string SpecId { get; set; }
public int Quantity { get; set; }
public string BelongSkuId { get; set; }
public long SchemeId { get; set; }
}
}

39
BBWY.Client/Models/PurchaseOrder/PurchaseOrder.cs

@ -119,18 +119,18 @@ namespace BBWY.Client.Models
}
}
/// <summary>
/// 单件仓储费
/// </summary>
public decimal SingleStorageAmount
{
get => singleStorageAmount;
set
{
if (Set(ref singleStorageAmount, value))
RefreshUnitCost();
}
}
///// <summary>
///// 单件仓储费
///// </summary>
//public decimal SingleStorageAmount
//{
// get => singleStorageAmount;
// set
// {
// if (Set(ref singleStorageAmount, value))
// RefreshUnitCost();
// }
//}
public decimal SingleInStorageAmount
{
@ -153,9 +153,19 @@ namespace BBWY.Client.Models
public decimal SingleRefundInStorageAmount { get => singleRefundInStorageAmount; set { Set(ref singleRefundInStorageAmount, value); } }
public decimal SinglePackagingLaborAmount
{
get => singlePackagingLaborAmount;
set
{
if (Set(ref singlePackagingLaborAmount, value))
RefreshUnitCost();
}
}
public void RefreshUnitCost()
{
UnitCost = SingleSkuAmount + SingleFreight + SingleFirstFreight + SingleInStorageAmount + SingleOutStorageAmount + SingleConsumableAmount + SingleStorageAmount;
UnitCost = SingleSkuAmount + SingleFreight + SingleFirstFreight + SingleInStorageAmount + SingleOutStorageAmount + SingleConsumableAmount + SinglePackagingLaborAmount;
}
private bool isEdit;
@ -168,7 +178,8 @@ namespace BBWY.Client.Models
private decimal singleDeliveryFreight;
//private decimal singleOperationAmount;
private decimal singleConsumableAmount;
private decimal singleStorageAmount;
//private decimal singleStorageAmount;
private decimal singlePackagingLaborAmount;
private decimal singleInStorageAmount;
private decimal singleOutStorageAmount;
private decimal singleRefundInStorageAmount;

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

@ -811,7 +811,8 @@ namespace BBWY.Client.ViewModels
manualEditCostOrderSku.OutStorageAmount = orderCostDetailList.Sum(ocd => ocd.OutStorageAmount);
manualEditCostOrderSku.PurchaseFreight = orderCostDetailList.Sum(ocd => ocd.PurchaseFreight);
manualEditCostOrderSku.SkuAmount = orderCostDetailList.Sum(ocd => ocd.SkuAmount);
manualEditCostOrderSku.StorageAmount = orderCostDetailList.Sum(ocd => ocd.StorageAmount);
//manualEditCostOrderSku.StorageAmount = orderCostDetailList.Sum(ocd => ocd.StorageAmount);
manualEditCostOrderSku.PackagingLaborAmount = orderCostDetailList.Sum(ocd => ocd.PackagingLaborAmount);
manualEditCostOrderSku.TotalCost = orderCostDetailList.Sum(ocd => ocd.TotalCost);
manualEditCostOrderSku.UnitCost = orderCostDetailList.FirstOrDefault().UnitCost;
}
@ -823,7 +824,8 @@ namespace BBWY.Client.ViewModels
manualEditCostOrderSku.OutStorageAmountStr = manualEditCostOrderSku.OutStorageAmount.ToString();
manualEditCostOrderSku.PurchaseFreightStr = manualEditCostOrderSku.PurchaseFreight.ToString();
manualEditCostOrderSku.SkuAmountStr = manualEditCostOrderSku.SkuAmount.ToString();
manualEditCostOrderSku.StorageAmountStr = manualEditCostOrderSku.StorageAmount.ToString();
//manualEditCostOrderSku.StorageAmountStr = manualEditCostOrderSku.StorageAmount.ToString();
manualEditCostOrderSku.PackagingLaborAmountStr = manualEditCostOrderSku.PackagingLaborAmount.ToString();
}
var manualCalculationCost = new ManualCalculationCost(orderId, isSetStorageType, storageType, orderSkuList);
@ -990,7 +992,7 @@ namespace BBWY.Client.ViewModels
try
{
var list = r.Data.Select(x => x.ToString()).ToList();
list.Insert(0, "日期,店铺订单号,SKU编码,订单状态,仓储类型,代发下单单号,售价,商品成本,采购运费,头程费用,仓储服务费,快递费,耗材费,入仓操作费,出仓操作费,刷单/空单号费,平台扣点,补差金额,应付金额,实收金额,利润,利润率,收件人联系方式,商家备注,售后类型,售后与特殊情况备注");
list.Insert(0, "日期,店铺订单号,SKU编码,订单状态,仓储类型,代发下单单号,售价,商品成本,采购运费,头程费用,包装人工费,快递费,耗材费,入仓操作费,出仓操作费,刷单/空单号费,平台扣点,补差金额,应付金额,实收金额,利润,利润率,收件人联系方式,商家备注,售后类型,售后与特殊情况备注");
System.IO.File.WriteAllLines(ssaveFileName, list, Encoding.UTF8);
App.Current.Dispatcher.Invoke(() => MessageBox.Show("导出完成", "导出"));
}

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

@ -39,6 +39,7 @@ using BBWY.Client.Extensions;
using BBWY.Client.Views.PackTaskAbort;
using System.Windows.Controls;
using BBWY.Client.Views.SomeArrival;
using BBWY.Client.Views.PackTask;
namespace BBWY.Client.ViewModels.PackTask
{
@ -1565,6 +1566,21 @@ namespace BBWY.Client.ViewModels.PackTask
{
var model = (SealBoxModel)obj;
var datas = sealBoxService.GetWareSealBoxList(null, null, null, model.SealBoxId, 1, 10);
if (datas != null && datas.Data != null && datas.Success)
{
var dataModel = datas.Data;
var flashModel = dataModel.WaitSealBoxModels.SingleOrDefault(w => w.SealBoxId == model.SealBoxId);
if (flashModel != null)
{
model.SealBoxSkus = flashModel.SealBoxSkus;
}
}
SealBoxPrintDetailsWindow printDetailsWindow = new SealBoxPrintDetailsWindow(model, sealBoxService);
printDetailsWindow.ShowDialog();
}

55
BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs

@ -11,6 +11,7 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using Newtonsoft.Json;
namespace BBWY.Client.ViewModels
{
@ -75,6 +76,7 @@ namespace BBWY.Client.ViewModels
/// 扩展数据,暂用于拳探
/// </summary>
private string extensions;
private bool isSkuMatchError;
public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService,
PurchaseService purchaseService,
@ -116,7 +118,7 @@ namespace BBWY.Client.ViewModels
protected override void Load()
{
IsLoading = true;
isSkuMatchError = false;
Task.Factory.StartNew(() => purchaseService.GetPurchaseSchemeList(order.ItemList.Select(osku => osku.Id).ToList(), purchaser.Id, globalContext.User.Shop.ShopId))
.ContinueWith(r =>
{
@ -149,6 +151,9 @@ namespace BBWY.Client.ViewModels
else
{
IsLoading = false;
if (isSkuMatchError)
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案与当前商品页的数据匹配失败,请删除旧采购方案后重新绑定采购方案", "提示"));
else
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案商品加载失败,请重新打开预览窗口", "提示"));
}
});
@ -181,6 +186,8 @@ namespace BBWY.Client.ViewModels
App.Current.Dispatcher.Invoke(() =>
{
foreach (var purchaseSchemeProductSku in data.Value.purchaseSchemeProductSkus)
{
if (orderSku != null && purchaseSchemeProductSku.SkuId == orderSku.Id)
{
purchaseSchemeProductSku.SkuPurchaseSchemeId = purchaseSchemeProduct.SkuPurchaseSchemeId;
if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId))
@ -190,7 +197,13 @@ namespace BBWY.Client.ViewModels
purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged;
}
}
}
});
if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => !data.Value.purchaseSchemeProductSkus.Any(s1 => s1.PurchaseSkuId == s)))
{
isSkuMatchError = true;
}
}
ewh.Set();
@ -224,6 +237,33 @@ namespace BBWY.Client.ViewModels
return;
}
#region 由于未知原因,会存在不属于当前订单的配件sku,预览时清理一次
for (var i = 0; i < PurchaseSchemeProductSkuList.Count(); i++)
{
var pss = PurchaseSchemeProductSkuList[i];
if (!order.ItemList.Any(osku => osku.Id == pss.SkuId))
{
//这个采购配件不属于这笔订单
PurchaseSchemeProductSkuList.RemoveAt(i);
i--;
}
}
if (PurchaseSchemeProductSkuList.Count() == 0)
{
MessageBox.Show("采购配件数量为0");
return;
}
#endregion
var cargoParamList = PurchaseSchemeProductSkuList.Select(sku => new CargoParam
{
ProductId = sku.PurchaseProductId,
SkuId = sku.PurchaseSkuId,
SpecId = sku.PurchaseSkuSpecId,
Quantity = sku.ItemTotal,
BelongSkuId = sku.SkuId
}).ToList();
IsLoading = true;
Task.Factory.StartNew(() => purchaseOrderService.PreviewPurchaseOrder(new Consignee()
{
@ -235,7 +275,7 @@ namespace BBWY.Client.ViewModels
Province = Province,
TelePhone = Mobile,
Town = Town
}, PurchaseSchemeProductSkuList, purchaseAccount.PurchasePlatformId, purchaseAccount, PurchaseOrderMode))
}, cargoParamList, purchaseAccount.PurchasePlatformId, purchaseAccount, PurchaseOrderMode))
.ContinueWith(t =>
{
IsLoading = false;
@ -275,6 +315,15 @@ namespace BBWY.Client.ViewModels
MessageBox.Show("收货人信息不全", "下单");
return;
}
var cargoParamList = PurchaseSchemeProductSkuList.Select(sku => new CargoParam
{
ProductId = sku.PurchaseProductId,
SkuId = sku.PurchaseSkuId,
SpecId = sku.PurchaseSkuSpecId,
Quantity = sku.ItemTotal,
BelongSkuId = sku.SkuId,
SchemeId = sku.SkuPurchaseSchemeId
}).ToList();
IsLoading = true;
Task.Factory.StartNew(() => purchaseOrderService.FastCreateOrder(new Consignee()
@ -287,7 +336,7 @@ namespace BBWY.Client.ViewModels
Province = Province,
TelePhone = Mobile,
Town = Town
}, PurchaseSchemeProductSkuList,
}, cargoParamList,
purchaseAccount.PurchasePlatformId,
purchaseAccount,
PurchaseOrderMode,

4
BBWY.Client/ViewModels/QualityTask/QualityViewModel.cs

@ -535,7 +535,7 @@ namespace BBWY.Client.ViewModels
}
request.BarcodeId = BarCodeModel.Id;
}
IsNeedPrintCer = Need.;
if (IsNeedPrintCer == Need.)
if (PurchaseSkuList != null && PurchaseSkuList.Count > 0 && purchaseSkuList.Any(p => p.IsNeedCer))
{
if (PurchaseSkuList.Where(p => p.IsSetCertificate).Count() > 0)
@ -555,7 +555,7 @@ namespace BBWY.Client.ViewModels
return;
}
request.CerId = string.Join(",", PurchaseSkuList.Where(p => p.IsNeedCer && p.CerDTO.Id > 0).Select(p => p.CerDTO.Id));
IsNeedPrintCer = Need.;
}
try

2
BBWY.Client/ViewModels/TotalPackTask/ShopPackTaskTotalViewModel.cs

@ -134,7 +134,7 @@ namespace BBWY.Client.ViewModels.TotalPackTask
if (res.Success)
{
//string title = "任务ID,日期,是否结清,部门,店铺,对接人,sku名称,sku数量,增值服务,打包服务,耗材服务,原价,促销折扣,结算价格,对接备注";
string title = "任务ID,日期,是否结清,所属部门,所属店铺,包装数量,收货数量,耗材总价,工序类型,工序套餐,工序单价,包装原价,包装折扣系数,包装折扣价,总收费";
string title = "任务ID,日期,是否结清,所属部门,所属店铺,包装数量,收货数量,耗材明细,耗材总价,工序类型,工序套餐,工序单价,包装原价,包装折扣系数,包装折扣价,总收费";
var excelList = res.Data.ShopTotals.Select(x => x.ToString()).ToList();
excelList.Insert(0, title);
System.IO.File.WriteAllLines(fileName, excelList, Encoding.UTF8);

10
BBWY.Client/Views/BillCorrection/BillCorrectionView.xaml

@ -219,15 +219,15 @@
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding FirstFreight}" Header="头程运费" Width="60"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding StorageAmount}" Header="仓储费" Width="60"
<DataGridTextColumn Binding="{Binding PackagingLaborAmount}" Header="包装人工费" Width="60"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding ConsumableAmount}" Header="耗才费" Width="60"
<DataGridTextColumn Binding="{Binding ConsumableAmount}" Header="包装耗材费" Width="60"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding InStorageAmount}" Header="入操作费" Width="70"
<DataGridTextColumn Binding="{Binding InStorageAmount}" Header="入操作费" Width="70"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding OutStorageAmount}" Header="出操作费" Width="70"
<DataGridTextColumn Binding="{Binding OutStorageAmount}" Header="出操作费" Width="70"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding DeliveryExpressFreight}" Header="销售运费" Width="60"
<DataGridTextColumn Binding="{Binding DeliveryExpressFreight}" Header="尾程运费" Width="60"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>
<DataGridTextColumn Binding="{Binding AfterTotalCost}" Header="售后费用" Width="60"
ElementStyle="{StaticResource verticalCenterTextBlock}"/>

10
BBWY.Client/Views/Order/ManualCalculationCost.xaml

@ -98,15 +98,15 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="仓储费" Width="70"
<DataGridTemplateColumn Header="包装人工费" Width="70"
HeaderStyle="{StaticResource ColumnHeaderStyle_Center}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<c:BTextBox Text="{Binding StorageAmountStr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Margin="5,0"/>
<c:BTextBox Text="{Binding PackagingLaborAmountStr,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Margin="5,0"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="入操作" Width="70"
<DataGridTemplateColumn Header="入操作" Width="70"
HeaderStyle="{StaticResource ColumnHeaderStyle_Center}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
@ -114,7 +114,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="出操作" Width="70"
<DataGridTemplateColumn Header="出操作" Width="70"
HeaderStyle="{StaticResource ColumnHeaderStyle_Center}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
@ -130,7 +130,7 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="销售运费" Width="70"
<DataGridTemplateColumn Header="尾程运费" Width="70"
HeaderStyle="{StaticResource ColumnHeaderStyle_Center}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>

13
BBWY.Client/Views/Order/OrderListControl.xaml

@ -178,7 +178,7 @@
Margin=" 5,0,0,0"/>
</StackPanel>
</StackPanel>
<c:BButton Content="修改售后" Padding="5,0" Margin="5,0,0,0" Background="{StaticResource Text.Pink}"
<!--<c:BButton Content="修改售后" Padding="5,0" Margin="5,0,0,0" Background="{StaticResource Text.Pink}"
Visibility="{Binding DataContext.IsAfterSaleOrder,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}},Converter={StaticResource objConverter},ConverterParameter=true:Visible:Collapsed}"
Command="{Binding DataContext.FindAfterSaleOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}}">
<c:BButton.CommandParameter>
@ -188,7 +188,7 @@
<Binding Path="DataContext.OrderStartTime" RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox},AncestorLevel=1}"/>
</MultiBinding>
</c:BButton.CommandParameter>
</c:BButton>
</c:BButton>-->
</StackPanel>
<TextBlock>
<Run Text="货号:" />
@ -476,7 +476,7 @@
<TextBlock Text="打包耗材" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="5" Grid.Row="1">
<TextBlock Text="快递费" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="尾程费" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="6" Grid.Row="1">
<TextBlock Text="入库操作" Style="{StaticResource middleTextBlock}"/>
@ -485,7 +485,7 @@
<TextBlock Text="出库操作" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Grid Background="{StaticResource Border.Background}" Grid.Column="8" Grid.Row="1">
<TextBlock Text="仓储费" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="包装人工" Style="{StaticResource middleTextBlock}"/>
</Grid>
<Border Grid.RowSpan="2" Grid.ColumnSpan="11" BorderBrush="{StaticResource Border.Brush}" BorderThickness="1"/>
@ -538,8 +538,8 @@
Visibility="{Binding InStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding OutStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"
Visibility="{Binding OutStorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding StorageAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"
Visibility="{Binding StorageAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding PackagingLaborAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"
Visibility="{Binding PackagingLaborAmount,ConverterParameter=0|0.0|0.00:Collapsed:Visible,Converter={StaticResource objConverter}}"/>
<TextBlock Text="{Binding TotalCost2,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
@ -806,6 +806,7 @@
<TextBlock>
<Run Text="成本总计"/>
<Run Text="{Binding OrderCost.TotalCost,Mode=OneWay}"/>
<Run Text="{Binding OrderCost.IsEstimateCost,Converter={StaticResource objConverter},ConverterParameter=true:预估:}" Foreground="{StaticResource Text.Pink}"/>
</TextBlock>
</StackPanel>
<Border Height="1" Background="{StaticResource Border.Brush}" Grid.Column="3" VerticalAlignment="Bottom" Margin="0,0,0,23"

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

@ -45,13 +45,13 @@
<TextBlock Margin="48,0,10,0" VerticalAlignment="Center" HorizontalAlignment="Left" Height="15" Width="43" Text="打印机:"/>
<Border BorderBrush="{StaticResource Border.Brush}" Height="30" BorderThickness="1">
<ComboBox x:Name="cbPrints" BorderThickness="0" Width="200" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left" />
<ComboBox ItemsSource="{Binding PrintList}" Text="{Binding PrintName}" BorderThickness="0" Width="200" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left" />
</Border>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0 10 0 10">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Margin="60,0,0,0" Width="30" Height="15" Text="数量:"/>
<c:BTextBox x:Name="tbCount" Width="203" Margin="11,0,0,0" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<c:BTextBox Text="{Binding PrintCount}" Width="203" Margin="11,0,0,0" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Margin="0 10 0 0">

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

@ -9,6 +9,8 @@ using System.Threading.Tasks;
using System.Windows;
using System.Collections.ObjectModel;
using BBWY.Client.Extensions;
using System.Reflection;
using System.IO;
namespace BBWY.Client.Views.PackTask
{
@ -20,21 +22,17 @@ namespace BBWY.Client.Views.PackTask
public PrintWindow()
{
InitializeComponent();
this.Loaded += PrintWindow_Loaded;
}
InitPrintList();
this.DataContext = this;
private void PrintWindow_Loaded(object sender, RoutedEventArgs e)
{
LoadPrints();
}
/// <summary>
/// 获取打印机名称
/// </summary>
private void LoadPrints()
public void InitPrintList()
{
PrintList = new ObservableCollection<string>();
var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据
int index = -1;
int selectIndex = 0;
@ -49,12 +47,30 @@ namespace BBWY.Client.Views.PackTask
{
selectIndex = index;
}
cbPrints.Items.Add(name);
PrintList.Add(name);
}
try
{
var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string printNames = System.IO.Path.Combine(applicationPath, "handPrintBarCerName.init");
if (File.Exists(printNames))
{
PrintName = File.ReadAllText(printNames);
}
else
{
if (PrintList.Count > 0)
{
PrintName = PrintList[0].ToString();
}
}
if (cbPrints.Items.Count > selectIndex)
}
catch (Exception)
{
cbPrints.SelectedIndex = selectIndex;
}
}
@ -81,43 +97,59 @@ namespace BBWY.Client.Views.PackTask
cer.Visibility = Visibility.Collapsed;
bar.Visibility = Visibility.Visible;
}
this.DataContext = this;
}
public CertificateModel[] CertificateModel { get; set; }
private CertificateModel[] certificateModel;
public CertificateModel[] CertificateModel { get => certificateModel; set { Set(ref certificateModel, value); } }
public BarCodeModel BarCodeModel { get; set; }
private BarCodeModel barCodeModel;
public BarCodeModel BarCodeModel { get=> barCodeModel; set {Set(ref barCodeModel,value); } }
private void BButton_Click(object sender, RoutedEventArgs e)
{
int printCount = 0;
try
{
printCount = Convert.ToInt32(tbCount.Text);
}
catch
{
new TipsWindow("请输入打印份数", 1).ShowDialog();
return;
}
string printName = cbPrints.Text;//选择的要打印的打印机名称
/// <summary>
/// 打印机列表
/// </summary>
public ObservableCollection<string> PrintList { get; set; }
public string PrintName { get; set; }
public int PrintCount { get => printCount; set { Set(ref printCount, value); } }
private int printCount = 1;
private void BButton_Click(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
if (BarCodeModel != null)
{
PrintData(printCount, printName,BarCodeModel);
PrintData(PrintCount, PrintName,BarCodeModel);
//MyPrintHelper.PrintBarcode(ref args, BarCodeModel, font);
}
if (CertificateModel != null&& CertificateModel.Count()>0)
{
foreach (var cer in CertificateModel)
{
PrintData(printCount, printName,null,cer);
PrintData(PrintCount, PrintName,null,cer);
System.Threading.Thread.Sleep(100);
}
}
var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string printNames = System.IO.Path.Combine(applicationPath, "handPrintBarCerName.init");
try
{
if (File.Exists(printNames))
{
File.Delete(printNames);
}
}
catch
{
}
File.WriteAllText(printNames, PrintName);
});
}

24
BBWY.Client/Views/PackagingTask/PrintPackDetailWindow.xaml.cs

@ -71,7 +71,7 @@ namespace BBWY.Client.Views.PackagingTask
try
{
var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string printNames = System.IO.Path.Combine(applicationPath, "printName.init");
string printNames = System.IO.Path.Combine(applicationPath, "printPackDetailName.init");
if (File.Exists(printNames))
{
PrintName = File.ReadAllText(printNames);
@ -93,13 +93,6 @@ namespace BBWY.Client.Views.PackagingTask
}
private void BButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
if (PrintName.IsNullOrEmpty())
{
MessageBox.Show("请选择打印设备");
@ -121,8 +114,23 @@ namespace BBWY.Client.Views.PackagingTask
for (int i = 0; i < PrintCount; i++)
{
printWindow.PrintBox(PrintName);
}
var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string printNames = System.IO.Path.Combine(applicationPath, "printPackDetailName.init");
try
{
if (File.Exists(printNames))
{
File.Delete(printNames);
}
}
catch
{
}
File.WriteAllText(printNames, PrintName);
this.Close();

10
BBWY.Client/Views/PackagingTask/ShopWaitPackingTaskControl.xaml

@ -267,7 +267,7 @@
</StackPanel>
</StackPanel>
<!--<c:BButton Margin="0 10 0 0" Content="{Binding QualityOverTimeMarkMsg ,Converter={StaticResource objConverter},ConverterParameter=#null:提交备注:修改备注}" Style="{StaticResource LinkButton}"
<!--<c:BButton Margin="0 10 0 0" Content="{Binding PackOverTimeMarkMsg ,Converter={StaticResource objConverter},ConverterParameter=#null:提交备注:修改备注}" Style="{StaticResource LinkButton}"
>
<b:Interaction.Triggers>
<b:EventTrigger EventName="PreviewMouseLeftButtonDown">
@ -275,7 +275,7 @@
<b:InvokeCommandAction.CommandParameter>
<MultiBinding Converter="{StaticResource mptConverter}">
<Binding Path="TaskId"/>
<Binding Path="QualityOverTimeMarkMsg"/>
<Binding Path="PackOverTimeMarkMsg"/>
</MultiBinding>
</b:InvokeCommandAction.CommandParameter>
</b:InvokeCommandAction>
@ -498,15 +498,15 @@ Foreground="{StaticResource Text.Color}">
<TextBlock Grid.Row="1" Grid.Column="4" Grid.ColumnSpan="6"
Visibility="{Binding QualityOverTimeMarkMsg,Converter={StaticResource objConverter},ConverterParameter=#null:Collapsed:Visible}"
Visibility="{Binding PackOverTimeMarkMsg,Converter={StaticResource objConverter},ConverterParameter=#null:Collapsed:Visible}"
HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5 5 0 5" ScrollViewer.VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" >
<TextBlock.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="{Binding QualityOverTimeMarkMsg}"/>
<TextBlock Text="{Binding PackOverTimeMarkMsg}"/>
</ToolTip>
</TextBlock.ToolTip>
<Run Text="超时原因:"/>
<Run Text="{Binding QualityOverTimeMarkMsg}" Foreground="Red" />
<Run Text="{Binding PackOverTimeMarkMsg}" Foreground="Red" />
</TextBlock>

224
BBWY.Client/Views/Ware/WareStock.xaml

@ -29,11 +29,11 @@
<ctr:PurchaseOrderEditBtnConverter x:Key="poEditConverter"/>
<DataTemplate x:Key="purchaseOrderTemplate_normal">
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList}"
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList,Converter={StaticResource widthConverter},ConverterParameter=3}"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
@ -43,9 +43,9 @@
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<!--<ColumnDefinition Width="60"/>-->
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
@ -54,21 +54,21 @@
<TextBlock Text="{Binding PurchaseOrderId}" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleSkuAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SinglePackagingLaborAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleFirstFreight}" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleInStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleOutStorageAmount}" Grid.Column="8" Style="{StaticResource middleTextBlock}"/>
<!--<TextBlock Text="{Binding SingleRefundInStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>-->
<TextBlock Text="{Binding SingleFirstFreight}" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleInStorageAmount}" Grid.Column="5" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleOutStorageAmount}" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleRefundInStorageAmount}" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="8" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleDeliveryFreight}" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding SingleDeliveryFreight}" Grid.Column="9" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay}" Grid.Column="10" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<TextBlock Text="{Binding PurchaseQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="11" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding RemainingQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="12" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="14" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="13" Style="{StaticResource middleTextBlock}"/>
<StackPanel Grid.Column="15" HorizontalAlignment="Center" Orientation="Horizontal">
<StackPanel Grid.Column="14" HorizontalAlignment="Center" Orientation="Horizontal">
<c:BButton Content="编辑" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.EditPurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }">
@ -93,12 +93,11 @@
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="11"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="12"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="13"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="14"/>
<Border Height="1" Grid.ColumnSpan="16" Background="{StaticResource Border.Brush}" VerticalAlignment="Bottom"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="purchaseOrderTemplate_edit">
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList}"
<Grid Width="{Binding ActualWidth,ElementName= listbox_purchaseOrderList,Converter={StaticResource widthConverter},ConverterParameter=3}"
Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
@ -112,9 +111,9 @@
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<!--<ColumnDefinition Width="60"/>-->
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="70"/>
</Grid.ColumnDefinitions>
@ -129,21 +128,23 @@
<c:BTextBox Text="{Binding SingleSkuAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}"
Grid.Column="2" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="3" BorderThickness="0"/>
<c:BTextBox Text="{Binding SinglePackagingLaborAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="4" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="5" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleFirstFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="6" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="7" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleOutStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="8" BorderThickness="0"/>
<!--<c:BTextBox Text="{Binding SingleRefundInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="7" BorderThickness="0"/>-->
<c:BTextBox Text="{Binding SingleFirstFreight,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="4" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="5" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleOutStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="6" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleRefundInStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="7" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleConsumableAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="8" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleStorageAmount,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Converter={StaticResource inputNumberConverter}}" Grid.Column="9" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleDeliveryFreight,Converter={StaticResource inputNumberConverter}}" Grid.Column="10" BorderThickness="0"/>
<c:BTextBox Text="{Binding SingleDeliveryFreight,Converter={StaticResource inputNumberConverter}}" Grid.Column="9" BorderThickness="0"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="10" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<c:BTextBox Text="{Binding PurchaseQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="11" BorderThickness="0"/>
<c:BTextBox Text="{Binding RemainingQuantity,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="12" BorderThickness="0"/>
<TextBlock Text="{Binding UnitCost,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="14" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<StackPanel Grid.Column="15" HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<StackPanel Grid.Column="14" HorizontalAlignment="Center" Orientation="Horizontal">
<c:BButton Content="保存" Style="{StaticResource LinkButton}"
Command="{Binding DataContext.SavePurchaseOrderCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Page}}}"
CommandParameter="{Binding }" />
@ -207,11 +208,11 @@
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<!--<ColumnDefinition Width="60"/>-->
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="60"/>
<ColumnDefinition Width="80"/>
@ -221,32 +222,170 @@
<TextBlock Text="仓储平台" Grid.Column="1" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购平台" Grid.Column="2" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购订单号" Grid.Column="3" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购单价" Grid.Column="4" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="5" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="采购运"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="4">
<TextBlock Style="{StaticResource middleTextBlock}">
<Run Text="采购"/>
<LineBreak/>
<Run Text="单价"/>
</TextBlock>
<TextBlock Text="头程单价" Grid.Column="6" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="入仓单价" Grid.Column="7" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="出仓单价" Grid.Column="8" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="9" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="根据采购时所支付的货款金额除以件数填写单价"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="5">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="采购运"/>
<LineBreak/>
<Run Text="费单价"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="厂家发至齐越的总物流费(包含货拉拉费用)除以件数,厂家包邮的填0"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="6">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="包装人"/>
<LineBreak/>
<Run Text="工单价"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="根据齐库账单填写人工费用单价"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="7">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="包装耗"/>
<LineBreak/>
<Run Text="材单价"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="根据齐库账单填写耗材费用单价,自采购耗材的根据采购费用填写。"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="8">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="入仓头"/>
<LineBreak/>
<Run Text="程单价"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="齐越发至京东仓或云仓的费用;厂家发至京东仓的费用,结合产品重量、合同版本填写对应费用"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="9">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="入库"/>
<LineBreak/>
<Run Text="操作费"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="结合产品重量填写对应入库操作费"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="10">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="出库"/>
<LineBreak/>
<Run Text="操作费"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="结合产品重量填写对应出库操作费"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<!--<TextBlock Grid.Column="9" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="退货"/>
<LineBreak/>
<Run Text="入仓单价"/>
</TextBlock>-->
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="11">
<TextBlock Grid.Column="11" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="尾程"/>
<LineBreak/>
<Run Text="快递费"/>
</TextBlock>
<TextBlock Text="耗材单价" Grid.Column="10" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="仓储单价" Grid.Column="11" Style="{StaticResource middleTextBlock}"/>
<TextBlock Grid.Column="12" Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="销售运"/>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="结合产品重量以及所签合同版本填写对应快递费,入单仓的以跨区费用为准,入多仓的以同区费用为准"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="12">
<TextBlock Style="{StaticResource middleTextBlock}" TextAlignment="Center">
<Run Text="单件"/>
<LineBreak/>
<Run Text="单价"/>
<Run Text="总成本"/>
</TextBlock>
<Path Style="{StaticResource path_question}"
Width="14" Fill="{StaticResource Text.Pink}" ToolTipService.InitialShowDelay="0">
<Path.ToolTip>
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<TextBlock Text="合计前列各项成本"/>
</ToolTip>
</Path.ToolTip>
</Path>
</StackPanel>
<TextBlock Text="库存" Grid.Column="13" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="剩余库存" Grid.Column="14" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="均摊单价" Grid.Column="15" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="采购时间" Grid.Column="16" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="操作" Grid.Column="17" Style="{StaticResource middleTextBlock}"/>
<!--<TextBlock Text="均摊单价" Grid.Column="15" Style="{StaticResource middleTextBlock}"/>-->
<TextBlock Text="采购时间" Grid.Column="15" Style="{StaticResource middleTextBlock}"/>
<TextBlock Text="操作" Grid.Column="16" Style="{StaticResource middleTextBlock}"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}"/>
@ -265,7 +404,6 @@
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="13"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="14"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="15"/>
<Border Width="1" HorizontalAlignment="Right" Background="{StaticResource Border.Brush}" Grid.Column="16"/>
</Grid>
</Border>

2
BBWY.JDSDK/Request/AttrValueAliasJson.cs

@ -9,5 +9,7 @@
public string value { get; set; }
public int? valueId { get; set; }
public bool isReName { get; set; }
}
}

4
BBWY.Server.API/BBWY.Server.API.csproj

@ -6,8 +6,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" Version="2.6.100" />
<PackageReference Include="FreeSql" Version="3.2.805" />
<PackageReference Include="FreeSql.Provider.MySql" Version="3.2.805" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.32" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.21" />
<PackageReference Include="NLog" Version="4.7.12" />

56
BBWY.Server.API/Controllers/OrderEstimateCostSyncController.cs

@ -0,0 +1,56 @@
using BBWY.Server.Business;
using BBWY.Server.Model.Dto;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace BBWY.Server.API.Controllers
{
public class OrderEstimateCostSyncController : BaseApiController
{
private OrderEstimateCostSyncBusiness orderEstimateCostSyncBusiness;
public OrderEstimateCostSyncController(IHttpContextAccessor httpContextAccessor, OrderEstimateCostSyncBusiness orderEstimateCostSyncBusiness) : base(httpContextAccessor)
{
this.orderEstimateCostSyncBusiness = orderEstimateCostSyncBusiness;
}
/// <summary>
/// 同步所有店铺的SKU最近成本
/// </summary>
[HttpPost]
public void SyncAllShopOrderSkuRecentCost()
{
orderEstimateCostSyncBusiness.SyncAllShopOrderSkuRecentCost();
}
/// <summary>
/// 同步指定条件的SKU最近成本
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void SyncOrderSkuRecentCost([FromBody] SkuRecentCostRequest request)
{
orderEstimateCostSyncBusiness.SyncOrderSkuRecentCost(request);
}
/// <summary>
/// 为所有店铺没有成本的订单预估成本和毛利
/// </summary>
[HttpPost]
public void EstimateCostForAllShopNoCostOrder()
{
orderEstimateCostSyncBusiness.EstimateCostForAllShopNoCostOrder();
}
/// <summary>
/// 按指定条件预估成本和毛利
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EstimateCostForNoCostOrder([FromBody] SkuRecentCostRequest request)
{
orderEstimateCostSyncBusiness.EstimateCostForNoCostOrder(request);
}
}
}

12
BBWY.Server.API/Controllers/TestController.cs

@ -42,5 +42,17 @@ namespace BBWY.Server.API.Controllers
{
testBusiness.RepairOrderProfit();
}
[HttpPost]
public void RepairDFOrder()
{
testBusiness.RepairDFOrder();
}
[HttpPost]
public void Test_20231221()
{
testBusiness.Test_20231221();
}
}
}

5
BBWY.Server.API/Startup.cs

@ -19,6 +19,7 @@ using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Text;
using Yitter.IdGenerator;
@ -65,6 +66,10 @@ namespace BBWY.Server.API
services.AddControllers();
services.AddHttpContextAccessor();
services.AddHttpClient();
services.AddHttpClient("gzip").ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler()
{
AutomaticDecompression = System.Net.DecompressionMethods.GZip
});
services.AddCors(options =>
{
options.AddPolicy("cors", p =>

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

@ -170,7 +170,7 @@ namespace BBWY.Server.Business
dbAfterSaleOrder.FirstFreight = dbOrderCostDetail.FirstFreight;
dbAfterSaleOrder.ReissueProductAmount = dbOrderCostDetail.SkuAmount;
dbAfterSaleOrder.ReissueFreight = dbOrderCostDetail.PurchaseFreight;
dbAfterSaleOrder.StorageAmount = dbOrderCostDetail.StorageAmount;
//dbAfterSaleOrder.StorageAmount = dbOrderCostDetail.StorageAmount;
dbAfterSaleOrder.InStorageAmount = dbOrderCostDetail.InStorageAmount;
dbAfterSaleOrder.OutStorageAmount = dbOrderCostDetail.OutStorageAmount;
}

4
BBWY.Server.Business/BBWY.Server.Business.csproj

@ -6,8 +6,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" Version="2.6.100" />
<PackageReference Include="FreeSql" Version="3.2.805" />
<PackageReference Include="FreeSql.Provider.MySql" Version="3.2.805" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageReference Include="NLog" Version="4.7.12" />

6
BBWY.Server.Business/BillCorrection/BillCorrectionBusiness.cs

@ -68,7 +68,8 @@ namespace BBWY.Server.Business
InStorageAmount = g.Sum(g.Value.Item1.InStorageAmount),
OutStorageAmount = g.Sum(g.Value.Item1.OutStorageAmount),
ConsumableAmount = g.Sum(g.Value.Item1.ConsumableAmount),
StorageAmount = g.Sum(g.Value.Item1.StorageAmount)
PackagingLaborAmount = g.Sum(g.Value.Item1.PackagingLaborAmount),
//StorageAmount = g.Sum(g.Value.Item1.StorageAmount)
});
@ -99,7 +100,8 @@ namespace BBWY.Server.Business
order.InStorageAmount = orderCostDetail?.InStorageAmount ?? 0M;
order.OutStorageAmount = orderCostDetail?.OutStorageAmount ?? 0M;
order.ConsumableAmount = orderCostDetail?.ConsumableAmount ?? 0M;
order.StorageAmount = orderCostDetail?.StorageAmount ?? 0M;
order.PackagingLaborAmount = orderCostDetail?.PackagingLaborAmount ?? 0M;
//order.StorageAmount = orderCostDetail?.StorageAmount ?? 0M;
order.AfterTotalCost = afterOrder?.AfterTotalCost ?? 0M;
if (order.StorageType == Model.Enums.StorageType.SD)

12
BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs

@ -148,6 +148,13 @@ namespace BBWY.Server.Business
#region 评价助手任务
public void AddOrEditPromotionTask(AddOrEditPromotionTaskRequest request)
{
var shop = venderBusiness.GetShopList(request.ShopId).FirstOrDefault();
if (shop == null)
throw new BusinessException("缺少店铺Id");
var loggerName = $"评价助手-{shop.ShopName}";
nLogManager.GetLogger(loggerName).Info($"发布任务-{JsonConvert.SerializeObject(request)}");
if (string.IsNullOrEmpty(request.MainProductSpu))
throw new BusinessException("缺少主商品SPU");
@ -160,6 +167,9 @@ namespace BBWY.Server.Business
if (string.IsNullOrEmpty(request.FullTitle))
throw new BusinessException("缺少完整标题");
if (string.IsNullOrEmpty(request.SimpleTitle))
throw new BusinessException("缺少精简标题");
if (string.IsNullOrEmpty(request.ActivityName))
throw new BusinessException("缺少任务名称");
@ -347,7 +357,7 @@ namespace BBWY.Server.Business
if (prpt.Status != Enums.PromitionTaskStatus. && prpt.Status != Enums.PromitionTaskStatus.)
throw new BusinessException("前置任务状态必须为等待或进行中");
var nextPromotionTaskList = fsql.Select<PromotionTask>().Where(pt1 => pt1.PreTaskId == request.PreTaskId).ToList();
var nextPromotionTaskList = fsql.Select<PromotionTask>().Where(pt1 => pt1.PreTaskId == request.PreTaskId && pt1.IsEnabled == true).ToList();
if (nextPromotionTaskList.Count() > 0)
{
CheckSkuRepeat(pt, nextPromotionTaskList);

103
BBWY.Server.Business/Order/OrderBusiness.cs

@ -39,6 +39,8 @@ namespace BBWY.Server.Business
private IMemoryCache memoryCache;
private static TimeSpan sdGroupExpirationTimeSpan = TimeSpan.FromMinutes(20);
private List<Enums.OrderState?> filterExceptionStateList;
public OrderBusiness(RestApiService restApiService,
IFreeSql fsql,
IIdGenerator idGenerator,
@ -52,6 +54,12 @@ namespace BBWY.Server.Business
freeSqlMultiDBManagerLazy = new Lazy<FreeSqlMultiDBManager>(() => serviceProvider.GetService<FreeSqlMultiDBManager>());
productBusinessLazy = new Lazy<ProductBusiness>(() => serviceProvider.GetService<ProductBusiness>());
venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
filterExceptionStateList = new List<Enums.OrderState?>() {
Enums.OrderState.,
Enums.OrderState.,
Enums.OrderState.
};
}
private ISelect<Order, OrderConsignee, OrderCost, Storehouse> GetOrderListQueryConditions(SearchOrderRequest searchOrderRequest)
@ -78,10 +86,12 @@ namespace BBWY.Server.Business
.WhereIf(searchOrderRequest.StartDate != null, (o, ocs, oct, sh) => o.StartTime >= searchOrderRequest.StartDate)
.WhereIf(searchOrderRequest.EndDate != null, (o, ocs, oct, sh) => o.StartTime <= searchOrderRequest.EndDate)
.WhereIf(searchOrderRequest.IncludeExceptionOrder,
(o, ocs, oct, sh) => o.OrderState != Enums.OrderState. &&
((o.StorageType != Enums.StorageType.SD && o.StorageType != null && oct.PurchaseAmount == 0M) ||
(o.StorageType != Enums.StorageType.SD && oct.PurchaseAmount + oct.DeliveryExpressFreight > o.OrderSellerPrice + o.FreightPrice + o.PingTaiChengDanYouHuiQuan) ||
(o.StorageType == null && o.OrderState != Enums.OrderState.)))
(o, ocs, oct, sh) => (o.OrderState != Enums.OrderState. &&
o.StorageType != Enums.StorageType.SD &&
o.StorageType != null &&
(oct.PurchaseAmount == 0M || oct.Profit < 0)) ||
(o.StorageType == null &&
!filterExceptionStateList.Contains(o.OrderState)))
.WhereIf(searchOrderRequest.OnlyDF, (o, ocs, oct, sh) => o.StorageType == Enums.StorageType.)
.WhereIf(searchOrderRequest.ExcludeCanceled, (o, ocs, oct, sh) => o.OrderState != Enums.OrderState.)
.WhereIf(searchOrderRequest.ExcludeSD && !searchOrderRequest.OnlyDF, (o, ocs, oct, sh) => o.StorageType == null || o.StorageType != Enums.StorageType.SD)
@ -150,6 +160,7 @@ namespace BBWY.Server.Business
Profit = oct.Profit,
PurchaseAmount = oct.PurchaseAmount,
IsManualEdited = oct.IsManualEdited,
IsEstimateCost = oct.IsEstimateCost,
SDCommissionAmount = oct.SDCommissionAmount,
SDOrderAmount = oct.SDOrderAmount,
RefundAmount = oct.RefundAmount,
@ -340,7 +351,8 @@ namespace BBWY.Server.Business
OrderId = g.Key,
SkuAmount = g.Sum(g.Value.SkuAmount),
FirstFreight = g.Sum(g.Value.FirstFreight),
StorageAmount = g.Sum(g.Value.StorageAmount),
//StorageAmount = g.Sum(g.Value.StorageAmount),
PackagingLaborAmount = g.Sum(g.Value.PackagingLaborAmount),
PurchaseFreight = g.Sum(g.Value.PurchaseFreight),
ConsumableAmount = g.Sum(g.Value.ConsumableAmount),
InStorageAmount = g.Sum(g.Value.InStorageAmount),
@ -359,7 +371,8 @@ namespace BBWY.Server.Business
OrderId = g.Key,
SkuAmount = g.Sum(g.Value.Item1.SkuAmount),
FirstFreight = g.Sum(g.Value.Item1.FirstFreight),
StorageAmount = g.Sum(g.Value.Item1.StorageAmount),
//StorageAmount = g.Sum(g.Value.Item1.StorageAmount),
PackagingLaborAmount = g.Sum(g.Value.Item1.PackagingLaborAmount),
PurchaseFreight = g.Sum(g.Value.Item1.PurchaseFreight),
ConsumableAmount = g.Sum(g.Value.Item1.ConsumableAmount),
InStorageAmount = g.Sum(g.Value.Item1.InStorageAmount),
@ -376,7 +389,8 @@ namespace BBWY.Server.Business
order.FirstFreight = statistics?.FirstFreight ?? 0M;
order.PurchaseSkuAmount = statistics?.SkuAmount ?? 0M;
order.PurchaseFreight = statistics?.PurchaseFreight ?? 0M;
order.StorageAmount = statistics?.StorageAmount ?? 0M;
//order.StorageAmount = statistics?.StorageAmount ?? 0M;
order.PackagingLaborAmount = statistics?.PackagingLaborAmount ?? 0M;
order.SkuIds = string.Join("|", orderSkuList.Where(osku => osku.OrderId == order.OrderId).Select(osku => osku.SkuId));
order.ProfitRatio = order.TotalCost == 0 ? 0 : Math.Round(order.Profit / order.TotalCost * 100, 2);
order.ConsumableAmount = statistics?.ConsumableAmount ?? 0M;
@ -509,7 +523,9 @@ namespace BBWY.Server.Business
var dbAfterSaleOrderList = fsql.Select<AfterSaleOrder>().Where(aso => aso.OrderId == autoCalculationCostRequest.OrderId).ToList();
var orderCost = fsql.Select<OrderCost>(autoCalculationCostRequest.OrderId).ToOne();
var orderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == autoCalculationCostRequest.OrderId && ocd.IsEnabled == true).ToList();
var orderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == autoCalculationCostRequest.OrderId &&
ocd.IsEnabled == true &&
ocd.IsEstimateCost == false).ToList();
IUpdate<Order> orderUpdate = null;
IUpdate<OrderCost> updateOrderCost = null;
@ -591,19 +607,9 @@ namespace BBWY.Server.Business
//OperationAmount = purchaseOrder.SingleOperationAmount * deductionQuantity,
PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity,
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity
//StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity
PackagingLaborAmount = purchaseOrder.SinglePackagingLaborAmount * deductionQuantity
};
//orderCostDetail.SkuGrossProfit = orderSku.Price.Value * deductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio;
//var shouldPay = orderSku.ShouldPay ?? 0M;
//var pingTaiCoupon = orderSku.PingTaiChengDanYouHuiQuan ?? 0M;
//var venderFee = orderSku.VenderFee ?? 0M;
//var koudian = (shouldPay - venderFee) * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = (shouldPay + pingTaiCoupon) * deductionQuantity -
// orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight -
// koudian;
orderCostDetail.CalculationSkuGrossProfit(orderSku.ShouldPay ?? 0M,
orderSku.PingTaiChengDanYouHuiQuan ?? 0M,
@ -630,7 +636,8 @@ namespace BBWY.Server.Business
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now
CreateTime = DateTime.Now,
IsEstimateCost = false
};
orderCost.CalculationOrderProfitAndCost(dbOrder, dbAfterSaleOrderList);
insertOrderCost = fsql.Insert(orderCost);
@ -638,6 +645,12 @@ namespace BBWY.Server.Business
}
else
{
if (orderCost.IsEstimateCost == true)
{
orderCost.IsEstimateCost = false;
orderCost.PurchaseAmount = 0M;
orderCost.DeliveryExpressFreight = 0M;
}
orderCost.PurchaseAmount += orderCostPurchaseAmount;
orderCost.DeliveryExpressFreight += orderDeliveryExpressFreight;
orderCost.CalculationOrderProfitAndCost(dbOrder, dbAfterSaleOrderList);
@ -654,6 +667,12 @@ namespace BBWY.Server.Business
foreach (var update in updatePurchaseOrderList)
update.ExecuteAffrows();
}
fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false)
.Where(ocd => ocd.OrderId == autoCalculationCostRequest.OrderId &&
ocd.IsEnabled == true &&
ocd.IsEstimateCost == true)
.ExecuteAffrows();
if (insertOrderCostDetailList.Count > 0)
fsql.Insert(insertOrderCostDetailList).ExecuteAffrows();
});
@ -708,7 +727,7 @@ namespace BBWY.Server.Business
orderCostDetail.CreateTime = DateTime.Now;
orderCostDetail.OrderId = manualCalculationCostRequest.OrderId;
orderCostDetail.PurchaseOrderPKId = 0;
orderCostDetail.IsEstimateCost = false;
var osku = orderSkuList.FirstOrDefault(o => o.SkuId == orderCostDetail.SkuId);
if (osku != null)
{
@ -745,7 +764,8 @@ namespace BBWY.Server.Business
PurchaseAmount = totalPurchaseCost,
DeliveryExpressFreight = totalDeliveryExpressFreight,
CreateTime = DateTime.Now,
IsManualEdited = true
IsManualEdited = true,
IsEstimateCost = false
};
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
//orderCost.Profit = dbOrder.OrderSellerPrice +
@ -767,6 +787,7 @@ namespace BBWY.Server.Business
// orderCost.PlatformCommissionAmount;
orderCost.CalculationOrderProfitAndCost(dbOrder, dbAfterSaleOrderList);
orderCost.IsManualEdited = true;
orderCost.IsEstimateCost = false;
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost);
}
@ -855,6 +876,7 @@ namespace BBWY.Server.Business
}
else
{
orderCost.IsEstimateCost = false;
orderCost.SDCommissionAmount = sdCalculationCostRequest.SDCommissionAmount;
orderCost.SDOrderAmount = sdCalculationCostRequest.SDOrderAmount;
orderCost.DeliveryExpressFreight = sdCalculationCostRequest.DeliveryExpressFreight;
@ -866,6 +888,7 @@ namespace BBWY.Server.Business
fsql.Transaction(() =>
{
fsql.Update<OrderCostDetail>().Set(ocd => ocd.IsEnabled, false).Where(ocd => ocd.OrderId == sdCalculationCostRequest.OrderId).ExecuteAffrows();
orderUpdate?.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
insertOrderCost?.ExecuteAffrows();
@ -948,7 +971,8 @@ namespace BBWY.Server.Business
//SingleOperationAmount = 0,
SingleInStorageAmount = 0,
SingleOutStorageAmount = 0,
SingleStorageAmount = 0,
SinglePackagingLaborAmount = 0M,
//SingleStorageAmount = 0,
SingleSkuAmount = relationOrderSku.SingleSkuAmount,
SingleDeliveryFreight = 0
};
@ -972,7 +996,8 @@ namespace BBWY.Server.Business
PurchaseFreight = odsRequest.PurchaseFreight / odsRequest.RelationPurchaseOrderSkuList.Count(),
SkuAmount = relationOrderSku.SingleSkuAmount * relationOrderSku.Quantity,
SkuId = relationOrderSku.SkuId,
StorageAmount = 0,
PackagingLaborAmount = 0,
//StorageAmount = 0,
//TotalCost = relationOrderSku.SingleSkuAmount * relationOrderSku.Quantity + odsRequest.PurchaseFreight / odsRequest.RelationPurchaseOrderSkuList.Count(),
//UnitCost = purchaseOrder.UnitCost,
PurchaseOrderPKId = purchaseOrder.Id
@ -1006,14 +1031,17 @@ namespace BBWY.Server.Business
if (orderCost != null)
{
orderCost.PlatformCommissionRatio = relationPurchaseOrderRequestV2.PlatformCommissionRatio;
orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * relationPurchaseOrderRequestV2.PlatformCommissionRatio;
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * relationPurchaseOrderRequestV2.PlatformCommissionRatio;
orderCost.DeliveryExpressFreight = totalDeliveryFreight;
orderCost.PurchaseAmount = totalPurchaseAmount;
orderCost.Profit = dbOrder.OrderSellerPrice +
dbOrder.FreightPrice -
orderCost.PurchaseAmount -
orderCost.DeliveryExpressFreight -
orderCost.PlatformCommissionAmount;
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
//orderCost.Profit = dbOrder.OrderSellerPrice +
// dbOrder.FreightPrice -
// orderCost.PurchaseAmount -
// orderCost.DeliveryExpressFreight -
// orderCost.PlatformCommissionAmount;
orderCost.IsEstimateCost = false;
orderCost.IsManualEdited = true;
updateOrderCost = fsql.Update<OrderCost>().SetSource(orderCost).IgnoreColumns(oc => new
{
oc.CreateTime,
@ -1036,16 +1064,15 @@ namespace BBWY.Server.Business
SDCommissionAmount = 0,
SDOrderAmount = 0,
PurchaseAmount = totalPurchaseAmount,
PlatformCommissionAmount = dbOrder.OrderSellerPrice * relationPurchaseOrderRequestV2.PlatformCommissionRatio,
PreferentialAmount = preferentialAmount,
IsManualEdited = true
};
orderCost.Profit = dbOrder.OrderSellerPrice +
dbOrder.FreightPrice -
orderCost.PurchaseAmount -
orderCost.DeliveryExpressFreight -
orderCost.PlatformCommissionAmount;
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
//orderCost.Profit = dbOrder.OrderSellerPrice +
// dbOrder.FreightPrice -
// orderCost.PurchaseAmount -
// orderCost.DeliveryExpressFreight -
// orderCost.PlatformCommissionAmount;
insertOrderCost = fsql.Insert(orderCost);
}
#endregion

136
BBWY.Server.Business/PlatformSDK/JDBusiness.cs

@ -125,12 +125,49 @@ namespace BBWY.Server.Business
private string GetSkuTitle(JToken s)
{
var title = s["saleAttrs"] != null ? string.Join("-", s["saleAttrs"].Select(a => a["attrValueAlias"][0].ToString())) : string.Empty;
if (!string.IsNullOrEmpty(title) && title.Contains("id") && title.Contains("value"))
if (s["saleAttrs"] == null)
throw new BusinessException($"{s["skuId"]}没有名字");
StringBuilder titleBuilder = new StringBuilder();
List<string> attrValueAliasList = new List<string>();
attrValueAliasList.AddRange(s["saleAttrs"].Select(a => a["attrValueAlias"][0].ToString()));
/*
[{\"unit\":\"\",\"valueId\":\"1120738\",\"id\":8488,\"value\":\"手动\"},{\"unit\":\"个\",\"id\":8489,\"value\":\"30\"},{\"unit\":\"\",\"id\":8490,\"value\":\"大号M416火焰红\"}]-8+40+AWM软弹枪
*/
foreach (var attrValueAlias in attrValueAliasList)
{
if (attrValueAlias.Contains("{") && attrValueAlias.Contains("}"))
{
titleBuilder.Append(string.Join(string.Empty, JArray.Parse(attrValueAlias).Select(j => $"{j.Value<string>("value")}{j.Value<string>("unit")}")));
}
else
{
title = string.Join("", JArray.Parse(title).Select(j => $"{j.Value<string>("value")}{j.Value<string>("unit")}"));
titleBuilder.Append(attrValueAlias);
}
}
return title;
return titleBuilder.ToString();
//var title = s["saleAttrs"] != null ? string.Join("-", s["saleAttrs"].Select(a => a["attrValueAlias"][0].ToString())) : string.Empty;
//if (!string.IsNullOrEmpty(title) && title.Contains("id") && title.Contains("value"))
//{
// if (title.Contains("]-["))
// {
// title = title.Replace("]-[", "]^[");
// var titleArray = title.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries);
// StringBuilder sb = new StringBuilder();
// foreach (var titleStr in titleArray)
// {
// sb.Append(string.Join("", JArray.Parse(titleStr).Select(j => $"{j.Value<string>("value")}{j.Value<string>("unit")}")));
// }
// title = sb.ToString();
// }
// else
// {
// title = string.Join("", JArray.Parse(title).Select(j => $"{j.Value<string>("value")}{j.Value<string>("unit")}"));
// }
//}
//return title;
}
public override IList<ProductSkuResponse> GetProductSkuList(SearchProductSkuRequest searchProductSkuRequest)
@ -1011,7 +1048,7 @@ namespace BBWY.Server.Business
// }
// colorSaleAttrs = colorProperty["attrValueList"].ToList();
//}
List<AttrValueAliasJson> strutsSaleAttrValueList = new List<AttrValueAliasJson>();
List<List<AttrValueAliasJson>> strutsSaleAttrValueList = new List<List<AttrValueAliasJson>>();
var isStruts = false;
{
var req = new CategoryReadFindSaleAttrTemplatesRequest();
@ -1053,20 +1090,95 @@ namespace BBWY.Server.Business
attrId = tempDataJToken.Value<string>("attrId");
var tempDataValuesJToken = JObject.Parse(tempDataJToken["valueRules"].ToString());
var tempDataValues_Level1_JToken = tempDataValuesJToken["items"][0];
if (tempDataValues_Level1_JToken["properties"]["id"]["type"].ToString() == "model")
if (tempDataValuesJToken["items"].Count() == 3 &&
tempDataValuesJToken["items"][0]["properties"]["id"]["type"].ToString() == "model" &&
tempDataValuesJToken["items"][1]["properties"]["id"]["type"].ToString() == "number" &&
tempDataValuesJToken["items"][1]["properties"]["value"]["type"].ToString() == "number" &&
tempDataValuesJToken["items"][2]["properties"]["id"]["type"].ToString() == "number" &&
tempDataValuesJToken["items"][2]["properties"]["value"]["type"].ToString() == "string")
{
var f_id = int.Parse(tempDataValuesJToken["items"][0]["properties"]["id"]["enum"][0].ToString());
var f_tempJarray = tempDataValuesJToken["items"][0]["properties"]["value"]["enum"][0]["preprocessingSaleAttrValTemplateValueList"] as JArray;
var f_value = f_tempJarray.FirstOrDefault().Value<string>("name");
var f_valueId = f_tempJarray.FirstOrDefault().Value<int>("id");
var s_id = int.Parse(tempDataValuesJToken["items"][1]["properties"]["id"]["enum"][0].ToString());
var s_unit = tempDataValuesJToken["items"][1]["properties"]["unit"]["enum"][0].ToString();
//var s_value = "1";
var t_id = int.Parse(tempDataValuesJToken["items"][2]["properties"]["id"]["enum"][0].ToString());
var t_value = "待替换的备注";
for (var i = 0; i < request.GiftTemplateSkuList.Count(); i++)
{
strutsSaleAttrValueList.Add(new List<AttrValueAliasJson>()
{
new AttrValueAliasJson()
{
id = f_id,
value = f_value,
valueId = f_valueId,
unit = string.Empty
},
new AttrValueAliasJson()
{
id = s_id,
value = "1",
unit = s_unit
},
new AttrValueAliasJson()
{
id = t_id,
value = t_value,
isReName = true
}
});
}
}
else if (tempDataValues_Level1_JToken["properties"]["id"]["type"].ToString() == "model")
{
//[{\"id\":5,\"unit\":\"\",\"value\":\"红色\","valueId":1234567}]
var tempJarray = tempDataValues_Level1_JToken["properties"]["value"]["enum"][0]["preprocessingSaleAttrValTemplateValueList"] as JArray;
strutsSaleAttrValueList.AddRange(tempJarray.Select(j => new AttrValueAliasJson
strutsSaleAttrValueList.AddRange(tempJarray.Select(j => new List<AttrValueAliasJson>()
{
new AttrValueAliasJson
{
id = int.Parse(tempDataValues_Level1_JToken["properties"]["id"]["enum"][0].ToString()),
value = j.Value<string>("name"),
valueId = j.Value<int>("id"),
unit = string.Empty
unit = string.Empty,
isReName = true
}
}));
}
else if (tempDataValues_Level1_JToken["properties"]["id"]["type"].ToString() == "number" &&
tempDataValues_Level1_JToken["properties"]["value"]["type"].ToString() == "number" &&
tempDataValuesJToken["items"][1]["properties"]["id"]["type"].ToString() == "number" &&
tempDataValuesJToken["items"][1]["properties"]["value"]["type"].ToString() == "string")
{
var f_id = int.Parse(tempDataValues_Level1_JToken["properties"]["id"]["enum"][0].ToString());
var f_unit = tempDataValues_Level1_JToken["properties"]["unit"]["enum"][0].ToString();
var s_id = int.Parse(tempDataValuesJToken["items"][1]["properties"]["id"]["enum"][0].ToString());
strutsSaleAttrValueList.AddRange(request.GiftTemplateSkuList.Select(x => new List<AttrValueAliasJson>()
{
new AttrValueAliasJson()
{
id = f_id,
value = "1",
unit = f_unit
},
new AttrValueAliasJson()
{
id = s_id,
value = "待替换的备注",
isReName = true
}
}));
}
else
throw new BusinessException($"不支持的properties.id.type {tempDataValues_Level1_JToken["properties"]["id"]["type"]}");
throw new BusinessException($"不支持的properties.id.type {tempDataValues_Level1_JToken["properties"]["id"]["type"]} 或取其分支情况");
}
}
#endregion
@ -1131,9 +1243,9 @@ namespace BBWY.Server.Business
var attrValueAlias = string.Empty;
if (isStruts)
{
var value = strutsSaleAttrValueList[skuIndex];
value.value = giftSku.Title;
attrValueAlias = JsonConvert.SerializeObject(new object[] { value });
var values = strutsSaleAttrValueList[skuIndex];
values.FirstOrDefault(v => v.isReName).value = giftSku.Title;
attrValueAlias = JsonConvert.SerializeObject(values);
}
else
{

44
BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -94,9 +94,10 @@ namespace BBWY.Server.Business
.Set(po => po.SingleFirstFreight, editPurchaseOrderRequest.SingleFirstFreight)
.Set(po => po.SingleInStorageAmount, editPurchaseOrderRequest.SingleInStorageAmount)
.Set(po => po.SingleOutStorageAmount, editPurchaseOrderRequest.SingleOutStorageAmount)
.Set(po => po.SingleRefundInStorageAmount, editPurchaseOrderRequest.SingleRefundInStorageAmount)
//.Set(po => po.SingleRefundInStorageAmount, editPurchaseOrderRequest.SingleRefundInStorageAmount)
.Set(po => po.SingleConsumableAmount, editPurchaseOrderRequest.SingleConsumableAmount)
.Set(po => po.SingleStorageAmount, editPurchaseOrderRequest.SingleStorageAmount)
//.Set(po => po.SingleStorageAmount, editPurchaseOrderRequest.SingleStorageAmount)
.Set(po => po.SinglePackagingLaborAmount, editPurchaseOrderRequest.SinglePackagingLaborAmount)
.Set(po => po.SingleDeliveryFreight, editPurchaseOrderRequest.SingleDeliveryFreight)
.ExecuteAffrows();
}
@ -131,6 +132,33 @@ namespace BBWY.Server.Business
throw new BusinessException("订单不存在");
if (dbOrder.OrderState != Enums.OrderState. && dbOrder.OrderState != Enums.OrderState.)
throw new BusinessException("只能为等待采购或待出库的订单进行采购");
if (createOnlinePurchaseOrderRequest.CargoParamList == null || createOnlinePurchaseOrderRequest.CargoParamList.Count() == 0)
throw new BusinessException("缺少下单参数");
//拦截不要属于当前订单的请求
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == createOnlinePurchaseOrderRequest.OrderId).ToList();
if (createOnlinePurchaseOrderRequest.CargoParamList.Any(c => !orderSkus.Any(osku => osku.SkuId == c.BelongSkuId)))
{
nLogManager.Default().Info($"NewFastCreateOrder\r\n非法请求\r\n{JsonConvert.SerializeObject(createOnlinePurchaseOrderRequest)}");
//移除不属于当前订单的采购配件
for (var i = 0; i < createOnlinePurchaseOrderRequest.CargoParamList.Count(); i++)
{
var cp = createOnlinePurchaseOrderRequest.CargoParamList[i];
if (!orderSkus.Any(osku => osku.SkuId == cp.BelongSkuId))
{
createOnlinePurchaseOrderRequest.CargoParamList.RemoveAt(i);
i--;
}
}
if (createOnlinePurchaseOrderRequest.CargoParamList.Count() == 0)
throw new BusinessException("经过采购配件的订单sku归属关系过滤之后,剩余采购配件数量为0,请先联系技术人员排查问题之后再手动关联");
//throw new BusinessException("非法sku参数,下单sku中存在不属于该笔订单的sku");
}
var oldPourchaseIdList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id)
.ToList(ocd => ocd.PurchaseOrderPKId);
@ -138,7 +166,6 @@ namespace BBWY.Server.Business
var deletePurchaseOrder = fsql.Delete<PurchaseOrder>().Where(po => oldPourchaseIdList.Contains(po.Id));
var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any();
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == createOnlinePurchaseOrderRequest.OrderId).ToList();
var orderSkuIds = orderSkus.Select(osku => osku.Id).ToList();
#region 合并重复的采购sku
@ -218,7 +245,8 @@ namespace BBWY.Server.Business
SingleConsumableAmount = 0,
SingleDeliveryFreight = 0,
SingleFirstFreight = 0,
SingleStorageAmount = 0,
SinglePackagingLaborAmount = 0,
//SingleStorageAmount = 0,
//SingleOperationAmount = 0,
SingleOutStorageAmount = 0,
SingleInStorageAmount = 0,
@ -259,7 +287,8 @@ namespace BBWY.Server.Business
PurchaseOrderPKId = purchaseOrder.Id,
SkuAmount = currentOrderSkuProductAmount,
SkuId = orderSku.SkuId,
StorageAmount = 0,
//StorageAmount = 0,
IsEstimateCost = false,
//UnitCost = purchaseOrder.UnitCost,
//TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount//purchaseOrder.UnitCost * orderSku.ItemTotal.Value
};
@ -291,7 +320,8 @@ namespace BBWY.Server.Business
PreferentialAmount = dbOrder.PreferentialAmount,
SDCommissionAmount = 0,
SDOrderAmount = 0,
PurchaseAmount = purchaseOrderSimpleInfo.TotalAmount
PurchaseAmount = purchaseOrderSimpleInfo.TotalAmount,
IsEstimateCost = false
};
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
//orderCost.Profit = dbOrder.OrderSellerPrice +
@ -649,7 +679,7 @@ namespace BBWY.Server.Business
#region 查询成本明细
currentProgress = "查询成本明细";
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == orderDropshipping.OrderId).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == orderDropshipping.OrderId && ocd.IsEnabled == true).ToList();
if (orderCostDetailList == null || orderCostDetailList.Count() == 0)
throw new BusinessException("订单成本明细不存在");
#endregion

49
BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs

@ -25,6 +25,9 @@ namespace BBWY.Server.Business
private string qtAppId = "BBWY2023022001";
private string qtAppSecret = "908e131365d5448ca651ba20ed7ddefe";
private List<string> locationIdList;
private List<string> priceIdList;
private TimeSpan purchaseProductCacheTimeSpan;
//private TimeSpan _1688SessionIdTimeSpan;
@ -40,7 +43,7 @@ namespace BBWY.Server.Business
this.restApiService = restApiService;
_1688ProductDetailRequestHeader = new Dictionary<string, string>()
{
{ "Host","detail.1688.com"},
//{ "Host","detail.1688.com"},
{ "User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70"},
{ "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"},
{ "Accept-Encoding","gzip, deflate, br"},
@ -48,6 +51,17 @@ namespace BBWY.Server.Business
};
purchaseProductCacheTimeSpan = TimeSpan.FromDays(1);
this.quanTanProductClient = quanTanProductClient;
locationIdList = new List<string>()
{
"300252630336272",
"1081181309101",
"16347413030323"
};
priceIdList = new List<string>() {
"300252630336263",
"1081181309582",
"16347413030316"
};
}
public PurchaseSkuBasicInfoResponse GetProductInfo(PurchaseSkuBasicInfoRequest request)
@ -193,12 +207,13 @@ namespace BBWY.Server.Business
$"clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={(request.PriceMode == Enums.PurchaseOrderMode.批发 ? "order" : "consign")}",
_1688ProductDetailRequestHeader,
HttpMethod.Get,
httpClientName: "gzip");
httpClientName: "gzip",
getResponseHeader: true);
if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK)
return null;
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*</script>)");
var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA\s?=)(.*)(\r*\n*\s*</script>)");
if (!match.Success)
return null;
@ -209,12 +224,16 @@ namespace BBWY.Server.Business
var purchaser = new Purchaser()
{
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(),
Location = jobject["data"]["1081181309101"] != null ?
jobject["data"]["1081181309101"]["data"]["location"].ToString() :
jobject["data"]["16347413030323"]["data"]["location"].ToString(),
Platform = Enums.Platform.
Name = jobject["globalData"]["tempModel"]["companyName"].ToString()
};
foreach (var lid in locationIdList)
{
if (jobject["data"][lid] != null)
{
purchaser.Location = jobject["data"][lid]["data"]["location"].ToString();
break;
}
}
var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value<int>("fid") == 3216 ||
j.Value<int>("fid") == 1627207 ||
@ -227,9 +246,15 @@ namespace BBWY.Server.Business
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 = 0M;
foreach (var pid in priceIdList)
{
if (jobject["data"][pid] != null)
{
firstPrice = jobject["data"][pid]["data"]["priceModel"]["currentPrices"][0].Value<decimal>("price");
break;
}
}
var list = new List<PurchaseSkuItemBasicInfoResponse>();
@ -246,7 +271,7 @@ namespace BBWY.Server.Business
{
PurchaseProductId = request.PurchaseProductId,
Price = skuPrice == 0M ? firstPrice : skuPrice,
Title = name,
Title = matchName, //name
PurchaseSkuId = value.Value<string>("skuId"),
PurchaseSkuSpecId = value.Value<string>("specId"),
Logo = colorsProperty.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png"

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

@ -148,7 +148,7 @@ namespace BBWY.Server.Business
dbso.FirstFreight = dbOrderCostDetail.FirstFreight;
dbso.ReissueProductAmount = dbOrderCostDetail.SkuAmount;
dbso.ReissueFreight = dbOrderCostDetail.PurchaseFreight;
dbso.StorageAmount = dbOrderCostDetail.StorageAmount;
//dbso.StorageAmount = dbOrderCostDetail.StorageAmount;
dbso.InStorageAmount = dbOrderCostDetail.InStorageAmount;
dbso.OutStorageAmount = dbOrderCostDetail.OutStorageAmount;
}

23
BBWY.Server.Business/Statistics/StatisticsBusiness.cs

@ -9,6 +9,7 @@ using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using Yitter.IdGenerator;
namespace BBWY.Server.Business
@ -19,11 +20,18 @@ namespace BBWY.Server.Business
private FreeSqlMultiDBManager freeSqlMultiDBManager;
private RestApiService restApiService;
private List<Enums.OrderState?> filterExceptionStateList;
public StatisticsBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager freeSqlMultiDBManager, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
{
invalidOrderStateList = new List<Enums.OrderState>() { Enums.OrderState., Enums.OrderState. };
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.restApiService = restApiService;
filterExceptionStateList = new List<Enums.OrderState?>() {
Enums.OrderState.,
Enums.OrderState.,
Enums.OrderState.
};
}
public OrderAchievementResponse GetOrderAchievementStatistics(OrderAchievementRequest request)
@ -364,6 +372,8 @@ namespace BBWY.Server.Business
{
//startDate = startDate.Date;
//endDate = endDate.Date.AddDays(1).AddSeconds(-1);
var dt = DateTime.Parse("2022-05-01");
var afterDt = DateTime.Parse("2022-10-01");
var response = new OrderCountStatisticsResponse();
@ -372,12 +382,15 @@ namespace BBWY.Server.Business
o.OrderState == Enums.OrderState. && o.StartTime >= dt).Count();
response.ExceptionCount = fsql.Select<Order, OrderCost>().LeftJoin((o, oc) => o.Id == oc.OrderId)
.Where((o, oc) => o.ShopId == shopId && o.StartTime >= dt &&
.Where((o, oc) => o.ShopId == shopId &&
o.StartTime >= dt &&
o.IsGift == false &&
o.OrderState != Enums.OrderState. &&
((o.StorageType != Enums.StorageType.SD && o.StorageType != null && oc.PurchaseAmount == 0M) ||
(o.StorageType != Enums.StorageType.SD && oc.PurchaseAmount + oc.DeliveryExpressFreight > o.OrderSellerPrice + o.FreightPrice + o.PingTaiChengDanYouHuiQuan) ||
(o.StorageType == null && o.OrderState != Enums.OrderState.))).Count();
((o.OrderState != Enums.OrderState. &&
o.StorageType != Enums.StorageType.SD &&
o.StorageType != null &&
(oc.PurchaseAmount == 0M || oc.Profit < 0)) ||
(o.StorageType == null &&
!filterExceptionStateList.Contains(o.OrderState)))).Count();
response.WaitOutStoreCount = fsql.Select<Order>().Where(o => o.ShopId == shopId && o.OrderState == Enums.OrderState. && o.StartTime >= dt &&
o.IsGift == false).Count();

38
BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdGroupLevelSyncBusiness.cs

@ -132,6 +132,7 @@ namespace BBWY.Server.Business.Sync
var insertList = new List<JDPopularizeAdGroup>();
foreach (var j in jArray)
{
var r0 = j["retrievalType0"];
insertList.Add(new JDPopularizeAdGroup()
{
Id = idGenerator.NewLong(),
@ -142,11 +143,38 @@ namespace BBWY.Server.Business.Sync
AdGroupId = j.Value<long>("adGroupId"),
AdGroupName = j.Value<string>("adGroupName"),
Date = DateTime.ParseExact(j.Value<string>("date"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Cost = j["retrievalType0"].Value<decimal>("cost"),
Clicks = j["retrievalType0"].Value<int?>("clicks") ?? 0,
Impressions = j["retrievalType0"].Value<int?>("impressions") ?? 0,
TotalCartCnt = j["retrievalType0"].Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = j["retrievalType0"].Value<int?>("totalOrderCnt") ?? 0
Cost = r0.Value<decimal>("cost"),
Clicks = r0.Value<int?>("clicks") ?? 0,
Impressions = r0.Value<int?>("impressions") ?? 0,
TotalCartCnt = r0.Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = r0.Value<int?>("totalOrderCnt") ?? 0,
TotalOrderCVS = r0.Value<decimal?>("totalOrderCVS") ?? 0M,
CouponCnt = r0.Value<int?>("couponCnt") ?? 0,
CPA = r0.Value<decimal?>("CPA") ?? 0.00M,
CPC = r0.Value<decimal?>("CPC") ?? 0.00M,
CPM = r0.Value<decimal?>("CPM") ?? 0.00M,
CTR = r0.Value<decimal?>("CTR") ?? 0.00M,
DepthPassengerCnt = r0.Value<int?>("depthPassengerCnt") ?? 0,
DirectCartCnt = r0.Value<int?>("directCartCnt") ?? 0,
DirectOrderCnt = r0.Value<int?>("directOrderCnt") ?? 0,
DirectOrderSum = r0.Value<decimal?>("directOrderSum") ?? 0M,
GoodsAttentionCnt = r0.Value<int?>("goodsAttentionCnt") ?? 0,
IndirectCartCnt = r0.Value<int?>("indirectCartCnt") ?? 0,
IndirectOrderCnt = r0.Value<int?>("indirectOrderCnt") ?? 0,
IndirectOrderSum = r0.Value<decimal?>("indirectOrderSum") ?? 0,
NewCustomersCnt = r0.Value<int?>("newCustomersCnt") ?? 0,
OrderDate = DateTime.ParseExact(r0.Value<string>("orderDate"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Pin = r0.Value<string>("pin"),
PreorderCnt = r0.Value<int?>("preorderCnt") ?? 0,
ShopAttentionCnt = r0.Value<int?>("shopAttentionCnt") ?? 0,
TotalCartCost = r0.Value<decimal?>("totalCartCost") ?? 0M,
TotalOrderROI = r0.Value<decimal?>("totalOrderROI") ?? 0M,
TotalOrderSum = r0.Value<decimal?>("totalOrderSum") ?? 0M,
TotalPresaleOrderCnt = r0.Value<int?>("totalPresaleOrderCnt") ?? 0,
TotalPresaleOrderSum = r0.Value<decimal?>("totalPresaleOrderSum") ?? 0M,
VisitorCnt = r0.Value<int?>("visitorCnt") ?? 0,
VisitPageCnt = r0.Value<int?>("visitPageCnt") ?? 0,
VisitTimeAverage = r0.Value<decimal?>("visitTimeAverage") ?? 0M
});
}
if (insertList.Count > 0)

47
BBWY.Server.Business/Sync/JD/JDPopularizeReportFormAdLevelSyncBusiness.cs

@ -159,7 +159,7 @@ namespace BBWY.Server.Business.Sync
nLogManager.GetLogger($"创意维度-{shopName}").Info($"创意名称识别失败 adId {adId} adName {adName} 提取的[sku]与创意Id相同");
continue;
}
var r0 = j["retrievalType0"];
insertList.Add(new JDPopularizeAdSku()
{
Id = idGenerator.NewLong(),
@ -170,15 +170,44 @@ namespace BBWY.Server.Business.Sync
AdGroupId = j.Value<long>("adGroupId"),
AdId = long.Parse(adId),
AdName = adName,
Date = DateTime.ParseExact(j.Value<string>("date"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Cost = j["retrievalType0"].Value<decimal>("cost"),
Clicks = j["retrievalType0"].Value<int?>("clicks") ?? 0,
Impressions = j["retrievalType0"].Value<int?>("impressions") ?? 0,
TotalCartCnt = j["retrievalType0"].Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = j["retrievalType0"].Value<int?>("totalOrderCnt") ?? 0,
Date = DateTime.ParseExact(r0.Value<string>("date"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Cost = r0.Value<decimal>("cost"),
Clicks = r0.Value<int?>("clicks") ?? 0,
Impressions = r0.Value<int?>("impressions") ?? 0,
TotalCartCnt = r0.Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = r0.Value<int?>("totalOrderCnt") ?? 0,
Sku = sku,
VisitorCnt = j["retrievalType0"].Value<int?>("visitorCnt") ?? 0,
TotalOrderSum = j["retrievalType0"].Value<decimal>("totalOrderSum")
VisitorCnt = r0.Value<int?>("visitorCnt") ?? 0,
TotalOrderSum = r0.Value<decimal>("totalOrderSum"),
TotalOrderCVS = r0.Value<decimal?>("totalOrderCVS") ?? 0M,
CouponCnt = r0.Value<int?>("couponCnt") ?? 0,
CPA = r0.Value<decimal?>("CPA") ?? 0.00M,
CPC = r0.Value<decimal?>("CPC") ?? 0.00M,
CPM = r0.Value<decimal?>("CPM") ?? 0.00M,
CTR = r0.Value<decimal?>("CTR") ?? 0.00M,
DepthPassengerCnt = r0.Value<int?>("depthPassengerCnt") ?? 0,
DirectCartCnt = r0.Value<int?>("directCartCnt") ?? 0,
DirectOrderCnt = r0.Value<int?>("directOrderCnt") ?? 0,
DirectOrderSum = r0.Value<decimal?>("directOrderSum") ?? 0M,
GoodsAttentionCnt = r0.Value<int?>("goodsAttentionCnt") ?? 0,
IndirectCartCnt = r0.Value<int?>("indirectCartCnt") ?? 0,
IndirectOrderCnt = r0.Value<int?>("indirectOrderCnt") ?? 0,
IndirectOrderSum = r0.Value<decimal?>("indirectOrderSum") ?? 0,
NewCustomersCnt = r0.Value<int?>("newCustomersCnt") ?? 0,
OrderDate = DateTime.ParseExact(r0.Value<string>("orderDate"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Pin = r0.Value<string>("pin"),
PreorderCnt = r0.Value<int?>("preorderCnt") ?? 0,
ShopAttentionCnt = r0.Value<int?>("shopAttentionCnt") ?? 0,
TotalCartCost = r0.Value<decimal?>("totalCartCost") ?? 0M,
TotalOrderROI = r0.Value<decimal?>("totalOrderROI") ?? 0M,
TotalPresaleOrderCnt = r0.Value<int?>("totalPresaleOrderCnt") ?? 0,
TotalPresaleOrderSum = r0.Value<decimal?>("totalPresaleOrderSum") ?? 0M,
VisitPageCnt = r0.Value<int?>("visitPageCnt") ?? 0,
VisitTimeAverage = r0.Value<decimal?>("visitTimeAverage") ?? 0M,
AdCreativeType = r0.Value<string>("adCreativeType"),
AdCustomTitle = r0.Value<string>("adCustomTitle"),
MaterialId = r0.Value<long?>("MaterialId") ?? 0,
MaterialSize = r0.Value<string>("materialSize"),
});
//Console.WriteLine(insertList.Count());
}

33
BBWY.Server.Business/Sync/JD/JDPopularizeReportFormCampaignLevelSyncBusiness.cs

@ -154,7 +154,38 @@ namespace BBWY.Server.Business.Sync
Clicks = j.Value<int?>("clicks") ?? 0,
Impressions = j.Value<int?>("impressions") ?? 0,
TotalCartCnt = j.Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = j.Value<int?>("totalOrderCnt") ?? 0
TotalOrderCnt = j.Value<int?>("totalOrderCnt") ?? 0,
CampaignPutType = j.Value<int?>("campaignPutType"),
CampaignType = j.Value<int?>("campaignType"),
CampaignTypeExpand = j.Value<int?>("campaignTypeExpand"),
CouponCnt = j.Value<int?>("couponCnt") ?? 0,
CPA = j.Value<decimal?>("CPA") ?? 0.00M,
CPC = j.Value<decimal?>("CPC") ?? 0.00M,
CPM = j.Value<decimal?>("CPM") ?? 0.00M,
CTR = j.Value<decimal?>("CTR") ?? 0.00M,
DepthPassengerCnt = j.Value<int?>("depthPassengerCnt") ?? 0,
DirectCartCnt = j.Value<int?>("directCartCnt") ?? 0,
DirectOrderCnt = j.Value<int?>("directOrderCnt") ?? 0,
DirectOrderSum = j.Value<decimal?>("directOrderSum") ?? 0M,
GoodsAttentionCnt = j.Value<int?>("goodsAttentionCnt") ?? 0,
IndirectCartCnt = j.Value<int?>("indirectCartCnt") ?? 0,
IndirectOrderCnt = j.Value<int?>("indirectOrderCnt") ?? 0,
IndirectOrderSum = j.Value<decimal?>("indirectOrderSum") ?? 0,
NewCustomersCnt = j.Value<int?>("newCustomersCnt") ?? 0,
OrderDate = DateTime.ParseExact(j.Value<string>("orderDate"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture),
Pin = j.Value<string>("pin"),
PreorderCnt = j.Value<int?>("preorderCnt") ?? 0,
PutType = j.Value<string>("putType"),
ShopAttentionCnt = j.Value<int?>("shopAttentionCnt") ?? 0,
TotalCartCost = j.Value<decimal?>("totalCartCost") ?? 0M,
TotalOrderCVS = j.Value<decimal?>("totalOrderCVS") ?? 0M,
TotalOrderROI = j.Value<decimal?>("totalOrderROI") ?? 0M,
TotalOrderSum = j.Value<decimal?>("totalOrderSum") ?? 0M,
TotalPresaleOrderCnt = j.Value<int?>("totalPresaleOrderCnt") ?? 0,
TotalPresaleOrderSum = j.Value<decimal?>("totalPresaleOrderSum") ?? 0M,
VisitorCnt = j.Value<int?>("visitorCnt") ?? 0,
VisitPageCnt = j.Value<int?>("visitPageCnt") ?? 0,
VisitTimeAverage = j.Value<decimal?>("visitTimeAverage") ?? 0M
});
}
if (insertList.Count > 0)

28
BBWY.Server.Business/Sync/JD/JDPopularizeReportFormSkuLevelSyncBusiness.cs

@ -149,7 +149,33 @@ namespace BBWY.Server.Business.Sync
TotalCartCnt = j.Value<int?>("totalCartCnt") ?? 0,
TotalOrderCnt = j.Value<int?>("totalOrderCnt") ?? 0,
TotalOrderSum = j.Value<decimal>("totalOrderSum"),
VisitorCnt = 0
VisitorCnt = 0,
CTR = j.Value<decimal?>("CTR") ?? 0.00M,
DepthPassengerCnt = j.Value<int?>("depthPassengerCnt") ?? 0,
CPM = j.Value<decimal?>("CPM") ?? 0.00M,
SkuBrandId = j.Value<string>("skuBrandId"),
PreorderCnt = j.Value<int?>("preorderCnt") ?? 0,
IndirectOrderCnt = j.Value<int?>("indirectOrderCnt") ?? 0,
DirectOrderCnt = j.Value<int?>("directOrderCnt") ?? 0,
IndirectCartCnt = j.Value<int?>("indirectCartCnt") ?? 0,
VisitPageCnt = j.Value<int?>("visitPageCnt") ?? 0,
VisitTimeAverage = j.Value<decimal?>("visitTimeAverage") ?? 0M,
TotalPresaleOrderSum = j.Value<decimal?>("totalPresaleOrderSum") ?? 0M,
TotalCartCost = j.Value<decimal?>("totalCartCost") ?? 0M,
DirectCartCnt = j.Value<int?>("directCartCnt") ?? 0,
SkuCid3 = j.Value<string>("skuCid3"),
CouponCnt = j.Value<int?>("couponCnt") ?? 0,
SkuBrandName = j.Value<string>("skuBrandName"),
NewCustomersCnt = j.Value<int?>("newCustomersCnt") ?? 0,
TotalOrderROI = j.Value<decimal?>("totalOrderROI") ?? 0M,
IndirectOrderSum = j.Value<decimal?>("indirectOrderSum") ?? 0,
DirectOrderSum = j.Value<decimal?>("directOrderSum") ?? 0M,
GoodsAttentionCnt = j.Value<int?>("goodsAttentionCnt") ?? 0,
TotalOrderCVS = j.Value<decimal?>("totalOrderCVS") ?? 0M,
CPC = j.Value<decimal?>("CPC") ?? 0.00M,
TotalPresaleOrderCnt = j.Value<int?>("totalPresaleOrderCnt") ?? 0,
ShopAttentionCnt = j.Value<int?>("shopAttentionCnt") ?? 0,
OrderDate = DateTime.ParseExact(j.Value<string>("orderDate"), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture)
}).ToList();
fsql.Insert(insertList).ExecuteAffrows();
}

397
BBWY.Server.Business/Sync/OrderEstimateCostSyncBusiness.cs

@ -0,0 +1,397 @@
using BBWY.Common.Extensions;
using BBWY.Common.Models;
using BBWY.Server.Business.Extensions;
using BBWY.Server.Model;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using FreeSql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Yitter.IdGenerator;
namespace BBWY.Server.Business
{
public class OrderEstimateCostSyncBusiness : BaseBusiness, IDenpendency
{
private TaskSchedulerManager taskSchedulerManager;
private VenderBusiness venderBusiness;
private List<Enums.OrderState?> invalidOrderStateList;
public OrderEstimateCostSyncBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
TaskSchedulerManager taskSchedulerManager,
VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
{
this.taskSchedulerManager = taskSchedulerManager;
this.venderBusiness = venderBusiness;
invalidOrderStateList = new List<Enums.OrderState?>() {
Enums.OrderState.,
Enums.OrderState.,
Enums.OrderState.
};
}
#region 同步SKU最近成本
public void SyncAllShopOrderSkuRecentCost()
{
var date = DateTime.Now.Date.AddDays(-1);
SyncOrderSkuRecentCost(new SkuRecentCostRequest()
{
ShopId = null,
StartDate = date,
EndDate = date
});
}
/// <summary>
/// 同步昨天SKU的采购成本
/// </summary>
/// <param name="request"></param>
public void SyncOrderSkuRecentCost(SkuRecentCostRequest request)
{
var shopList = venderBusiness.GetShopList(request.ShopId, Model.Enums.Platform.);
request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1);
foreach (var shop in shopList)
{
var _shopId = long.Parse(shop.ShopId);
Task.Factory.StartNew(() => SyncOrderSkuRecentCost(shop, request.StartDate, request.EndDate), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncSkuYesterdayCostTaskScheduler);
}
}
private void SyncOrderSkuRecentCost(ShopResponse shop, DateTime startDate, DateTime endDate)
{
try
{
var shopId = long.Parse(shop.ShopId);
var yesterdaycostDetailist = fsql.Select<OrderCostDetail, Order>()
.InnerJoin((ocd, o) => ocd.OrderId == o.Id)
.Where((ocd, o) => o.ShopId == shopId &&
o.StartTime >= startDate &&
o.StartTime <= endDate &&
!invalidOrderStateList.Contains(o.OrderState) &&
o.IsGift == false &&
o.StorageType != Enums.StorageType.SD &&
ocd.IsEnabled == true &&
ocd.IsEstimateCost == false)
.GroupBy((ocd, o) => ocd.SkuId)
.WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), SkuId = g.Key })
.From<OrderCostDetail>()
.InnerJoin((ocd1, ocd2) => ocd1.MaxId == ocd2.Id)
.ToList((ocd1, ocd2) => ocd2);
Console.WriteLine($"SKU最近成本同步-{shop.ShopName},有销量的订单sku一共{yesterdaycostDetailist.Count()}个");
if (yesterdaycostDetailist.Count() == 0)
return;
var skuIdList = yesterdaycostDetailist.Select(ocd => ocd.SkuId).Distinct().ToList();
var dbSkuRecentCostList = fsql.Select<SkuRecentCost>(skuIdList).ToList();
List<SkuRecentCost> insertSkuRecetCostList = new List<SkuRecentCost>();
List<IUpdate<SkuRecentCost>> updateSkuRecentCostList = new List<IUpdate<SkuRecentCost>>();
foreach (var yesocd in yesterdaycostDetailist)
{
var q = yesocd.DeductionQuantity;
if (q <= 0)
q = 1;
var singleConsumableAmount = yesocd.ConsumableAmount / q;
var singleDeliveryFreight = yesocd.DeliveryExpressFreight / q;
var singleFirstFreight = yesocd.FirstFreight / q;
var singleFreight = yesocd.PurchaseFreight / q;
var singleInStorageAmount = yesocd.InStorageAmount / q;
var singleOutStorageAmount = yesocd.OutStorageAmount / q;
var singleSkuAmount = yesocd.SkuAmount / q;
//var singleStorageAmount = yesocd.StorageAmount / q;
var singlePackagingLaborAmount = yesocd.PackagingLaborAmount / q;
var skuRecentCost = dbSkuRecentCostList.FirstOrDefault(x => x.SkuId == yesocd.SkuId);
if (skuRecentCost != null)
{
if (skuRecentCost.SingleConsumableAmount != singleConsumableAmount ||
skuRecentCost.SingleDeliveryFreight != singleDeliveryFreight ||
skuRecentCost.SingleFirstFreight != singleFirstFreight ||
skuRecentCost.SingleFreight != singleFreight ||
skuRecentCost.SingleInStorageAmount != singleInStorageAmount ||
skuRecentCost.SingleOutStorageAmount != singleOutStorageAmount ||
skuRecentCost.SingleSkuAmount != singleSkuAmount ||
skuRecentCost.SinglePackagingLaborAmount != singlePackagingLaborAmount)
//skuRecentCost.SingleStorageAmount != singleStorageAmount)
{
skuRecentCost.UpdateTime = DateTime.Now;
var update = fsql.Update<SkuRecentCost>(yesocd.SkuId)
.SetIf(skuRecentCost.SingleConsumableAmount != singleConsumableAmount, s => s.SingleConsumableAmount, singleConsumableAmount)
.SetIf(skuRecentCost.SingleDeliveryFreight != singleDeliveryFreight, s => s.SingleDeliveryFreight, singleDeliveryFreight)
.SetIf(skuRecentCost.SingleFirstFreight != singleFirstFreight, s => s.SingleFirstFreight, singleFirstFreight)
.SetIf(skuRecentCost.SingleFreight != singleFreight, s => s.SingleFreight, singleFreight)
.SetIf(skuRecentCost.SingleInStorageAmount != singleInStorageAmount, s => s.SingleInStorageAmount, singleInStorageAmount)
.SetIf(skuRecentCost.SingleOutStorageAmount != singleOutStorageAmount, s => s.SingleOutStorageAmount, singleOutStorageAmount)
.SetIf(skuRecentCost.SingleSkuAmount != singleSkuAmount, s => s.SingleSkuAmount, singleSkuAmount)
//.SetIf(skuRecentCost.SingleStorageAmount != singleStorageAmount, s => s.SingleStorageAmount, singleStorageAmount)
.SetIf(skuRecentCost.SinglePackagingLaborAmount != singlePackagingLaborAmount, s => s.SinglePackagingLaborAmount, singlePackagingLaborAmount)
.Set(s => s.UpdateTime, DateTime.Now);
updateSkuRecentCostList.Add(update);
}
}
else
{
skuRecentCost = new SkuRecentCost()
{
SkuId = yesocd.SkuId,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
ProductId = yesocd.ProductId,
RecentOrderId = yesocd.OrderId,
ShopId = shopId,
SingleConsumableAmount = singleConsumableAmount,
SingleDeliveryFreight = singleDeliveryFreight,
SingleFirstFreight = singleFirstFreight,
SingleFreight = singleFreight,
SingleInStorageAmount = singleInStorageAmount,
SingleOutStorageAmount = singleOutStorageAmount,
SingleSkuAmount = singleSkuAmount,
SinglePackagingLaborAmount = singlePackagingLaborAmount
//SingleStorageAmount = singleStorageAmount
};
insertSkuRecetCostList.Add(skuRecentCost);
}
}
if (insertSkuRecetCostList.Count() > 0)
{
var insertList = new List<SkuRecentCost>();
var index = 0;
foreach (var insert in insertSkuRecetCostList)
{
insertList.Add(insert);
if (insertList.Count() == 50)
{
index++;
Console.WriteLine($"SKU最近成本同步-{shop.ShopName},执行插入{index}");
fsql.Transaction(() =>
{
fsql.Insert(insertList).ExecuteAffrows();
});
insertList.Clear();
}
}
if (insertList.Count() > 0)
{
index++;
Console.WriteLine($"SKU最近成本同步-{shop.ShopName},执行最后插入{index}");
fsql.Transaction(() =>
{
fsql.Insert(insertList).ExecuteAffrows();
});
insertList.Clear();
}
insertSkuRecetCostList.Clear();
}
if (updateSkuRecentCostList.Count() > 0)
{
List<IUpdate<SkuRecentCost>> updateList = new List<IUpdate<SkuRecentCost>>();
var index = 0;
foreach (var update in updateSkuRecentCostList)
{
updateList.Add(update);
if (updateList.Count == 20)
{
index++;
Console.WriteLine($"SKU最近成本同步-{shop.ShopName},执行更新{index}");
fsql.Transaction(() =>
{
foreach (var _update in updateList)
_update.ExecuteAffrows();
});
updateList.Clear();
}
}
if (updateList.Count > 0)
{
index++;
Console.WriteLine($"SKU最近成本同步-{shop.ShopName},执行最后更新{index}");
fsql.Transaction(() =>
{
foreach (var _update in updateList)
_update.ExecuteAffrows();
});
updateList.Clear();
}
updateSkuRecentCostList.Clear();
}
//fsql.Transaction(() =>
//{
// if (insertSkuRecetCostList.Count() > 0)
// fsql.Insert(insertSkuRecetCostList).ExecuteAffrows();
// if (updateSkuRecentCostList.Count() > 0)
// {
// foreach (var update in updateSkuRecentCostList)
// update.ExecuteAffrows();
// }
//});
}
catch (Exception ex)
{
Console.WriteLine($"{shop.ShopName},{ex.Message}");
nLogManager.GetLogger($"SKU最近成本-{shop.ShopName}").Error(ex);
}
}
#endregion
#region 预估成本
public void EstimateCostForAllShopNoCostOrder()
{
EstimateCostForNoCostOrder(new SkuRecentCostRequest()
{
ShopId = null,
StartDate = DateTime.Now.AddHours(-3),
EndDate = DateTime.Now
});
}
public void EstimateCostForNoCostOrder(SkuRecentCostRequest request)
{
var shopList = venderBusiness.GetShopList(request.ShopId, Model.Enums.Platform.);
//request.EndDate = request.EndDate.Date.AddDays(1).AddSeconds(-1);
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => EstimateCostForNoCostOrder(shop, request.StartDate, request.EndDate), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncSkuYesterdayCostTaskScheduler);
}
}
private void EstimateCostForNoCostOrder(ShopResponse shop, DateTime startTime, DateTime endTime)
{
try
{
var jcycStorageTypeList = new List<Enums.StorageType?>() { Enums.StorageType., Enums.StorageType. };
var shopId = long.Parse(shop.ShopId);
var orderList = fsql.Select<Order>().Where(o => o.ShopId == shopId &&
o.ModifyTime >= startTime &&
o.ModifyTime <= endTime &&
!invalidOrderStateList.Contains(o.OrderState) &&
o.IsGift == false &&
(o.StorageType == null || jcycStorageTypeList.Contains(o.StorageType)) &&
!fsql.Select<OrderCost>().Where(oc => oc.OrderId == o.Id).Any())
.ToList();
Console.WriteLine($"预估成本-{shop.ShopName},符合条件且没有成本的订单一共{orderList.Count()}个");
if (orderList.Count() == 0)
return;
var orderIdList = orderList.Select(o => o.Id).ToList();
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>();
List<OrderCost> insertOrderCostList = new List<OrderCost>();
var orderSkuAndRecentList = fsql.Select<OrderSku, SkuRecentCost>()
.LeftJoin((osku, src) => osku.SkuId == src.SkuId)
.Where((osku, src) => orderIdList.Contains(osku.OrderId) && osku.Price > 0)
.ToList((osku, src) => new
{
osku.Id,
osku.OrderId,
osku.SkuId,
osku.ProductId,
osku.ShouldPay,
osku.PingTaiChengDanYouHuiQuan,
osku.SuperRedEnvelope,
osku.XianPinLeiDongQuan,
osku.VenderFee,
osku.JingDou,
osku.DongQuan,
osku.Balance,
osku.ItemTotal,
src.SingleConsumableAmount,
src.SingleSkuAmount,
src.SingleDeliveryFreight,
src.SingleFirstFreight,
src.SingleFreight,
src.SingleInStorageAmount,
src.SingleOutStorageAmount,
src.SinglePackagingLaborAmount
//src.SingleStorageAmount
});
foreach (var order in orderList)
{
var currentOrderSkuList = orderSkuAndRecentList.Where(osku => osku.OrderId == order.Id).ToList();
if (currentOrderSkuList.Any(osku => osku.ShouldPay == null ||
osku.ShouldPay == 0 ||
osku.SingleSkuAmount == null ||
osku.SingleSkuAmount == 0))
continue; //预估成本和毛利,必须订单下的每一笔sku都具备最近成本
List<OrderCostDetail> currentOrderInsertOcdList = new List<OrderCostDetail>();
foreach (var osku in currentOrderSkuList)
{
var ocd = new OrderCostDetail()
{
Id = idGenerator.NewLong(),
ConsumableAmount = (osku.SingleConsumableAmount * osku.ItemTotal) ?? 0M,
DeductionQuantity = osku.ItemTotal ?? 1,
CreateTime = DateTime.Now,
DeliveryExpressFreight = (osku.SingleDeliveryFreight * osku.ItemTotal) ?? 0M,
FirstFreight = (osku.SingleFirstFreight * osku.ItemTotal) ?? 0M,
InStorageAmount = (osku.SingleInStorageAmount * osku.ItemTotal) ?? 0M,
OutStorageAmount = (osku.SingleOutStorageAmount * osku.ItemTotal) ?? 0M,
OrderId = order.Id,
ProductId = osku.ProductId,
PurchaseFreight = (osku.SingleFreight * osku.ItemTotal) ?? 0M,
PurchaseOrderPKId = 0,
SkuAmount = (osku.SingleSkuAmount * osku.ItemTotal) ?? 0M,
SkuId = osku.SkuId,
//StorageAmount = (osku.SingleStorageAmount * osku.ItemTotal) ?? 0M,
PackagingLaborAmount = (osku.SinglePackagingLaborAmount * osku.ItemTotal) ?? 0M,
IsEnabled = true,
IsEstimateCost = true
};
ocd.CalculationSkuGrossProfit(osku.ShouldPay ?? 0M,
osku.PingTaiChengDanYouHuiQuan ?? 0M,
osku.SuperRedEnvelope ?? 0M,
osku.XianPinLeiDongQuan ?? 0M,
osku.VenderFee ?? 0M,
osku.JingDou ?? 0M,
osku.DongQuan ?? 0M,
osku.Balance ?? 0M,
shop.PlatformCommissionRatio ?? 0.05M);
currentOrderInsertOcdList.Add(ocd);
}
var orderCost = new OrderCost()
{
OrderId = order.Id,
CreateTime = DateTime.Now,
AfterTotalCost = 0M,
DeliveryExpressFreight = currentOrderInsertOcdList.Sum(ocd => ocd.DeliveryExpressFreight),
IsEstimateCost = true,
IsManualEdited = false,
PlatformCommissionRatio = shop.PlatformCommissionRatio ?? 0.05M,
PurchaseAmount = currentOrderInsertOcdList.Sum(ocd => ocd.TotalCost),
PreferentialAmount = order.PreferentialAmount
};
orderCost.CalculationOrderProfitAndCost(order, null);
insertOrderCostDetailList.AddRange(currentOrderInsertOcdList);
insertOrderCostList.Add(orderCost);
}
fsql.Transaction(() =>
{
if (insertOrderCostDetailList.Count() > 0)
fsql.Insert(insertOrderCostDetailList).ExecuteAffrows();
if (insertOrderCostList.Count() > 0)
fsql.Insert(insertOrderCostList).ExecuteAffrows();
});
}
catch (Exception ex)
{
nLogManager.GetLogger($"预估成本-{shop.ShopName}").Error(ex);
}
}
#endregion
}
}

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

@ -99,14 +99,16 @@ namespace BBWY.Server.Business
{
try
{
//logger.Info($"订单同步 {shop.ShopName} isAuto {isAuto}");
if (shop.ShopName == "创艺家居日用专营店")
nLogManager.Default().Info($"订单同步 {shop.ShopName} isAuto {isAuto}");
if (!syncOrderMethodDic.ContainsKey(shop.PlatformId))
throw new Exception("不支持的平台");
var shopId = long.Parse(shop.ShopId);
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
var orderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetOrderList", new SearchPlatformOrderRequest()
{
StartDate = startTime ?? DateTime.Now.AddHours(shop.ShopName.Contains("腾奇") ? -0.5 : -3),
StartDate = startTime ?? DateTime.Now.AddHours(-3),
EndDate = endTime ?? DateTime.Now,
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
@ -142,19 +144,19 @@ namespace BBWY.Server.Business
{
//if (fsql.Select<OrderSyncTask>().Where(ost => ost.ShopId == syncOrderByDateRequest.ShopId && ost.State == Enums.OrderSyncState.Running).Any())
// throw new BusinessException("存在未结束的同步任务,请稍后同步");
//syncOrderByDateRequest.EndTime = syncOrderByDateRequest.EndTime.Date.AddDays(1).AddSeconds(-1);
//if ((syncOrderByDateRequest.EndTime - syncOrderByDateRequest.StartTime).Days > 7)
// throw new BusinessException("同步任务时差最长7天");
syncOrderByDateRequest.EndTime = syncOrderByDateRequest.EndTime.Date.AddDays(1).AddSeconds(-1);
if ((syncOrderByDateRequest.EndTime - syncOrderByDateRequest.StartTime).Days > 7)
throw new BusinessException("同步任务时差最长7天");
var orderSyncTask = new OrderSyncTask()
{
Id = idGenerator.NewLong(),
ShopId = syncOrderByDateRequest.ShopId,
State = Enums.OrderSyncState.Running,
SyncStartTime = syncOrderByDateRequest.StartTime,
SyncEndTime = syncOrderByDateRequest.EndTime
};
fsql.Insert(orderSyncTask).ExecuteAffrows();
//var orderSyncTask = new OrderSyncTask()
//{
// Id = idGenerator.NewLong(),
// ShopId = syncOrderByDateRequest.ShopId,
// State = Enums.OrderSyncState.Running,
// SyncStartTime = syncOrderByDateRequest.StartTime,
// SyncEndTime = syncOrderByDateRequest.EndTime
//};
//fsql.Insert(orderSyncTask).ExecuteAffrows();
Task.Factory.StartNew(() =>
{
var currentStartTime = syncOrderByDateRequest.StartTime;
@ -186,11 +188,11 @@ namespace BBWY.Server.Business
}
}
}
try
{
fsql.Update<OrderSyncTask>(orderSyncTask.Id).Set(ost => ost.State, Enums.OrderSyncState.End).ExecuteAffrows();
}
catch (Exception ex) { }
//try
//{
// fsql.Update<OrderSyncTask>(orderSyncTask.Id).Set(ost => ost.State, Enums.OrderSyncState.End).ExecuteAffrows();
//}
//catch (Exception ex) { }
}, System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
}
@ -306,7 +308,13 @@ namespace BBWY.Server.Business
if (orderCouponDetailResponse.Success)
{
var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_queryCouponDetai_responce"]["couponDetailExternal"]["couponDetailVo"];
if (jtoken.Value<decimal>("totalShouldPay") > 0M ||
jtoken.Value<decimal>("totalSuperRedEnvelope") > 0M ||
jtoken.Value<decimal>("totalDongQuan") > 0M ||
jtoken.Value<decimal>("totalJingDou") > 0M ||
jtoken.Value<decimal>("totalXianPinLeiDongQuan") > 0M ||
jtoken.Value<decimal>("totalPingTaiChengDanYouHuiQuan") > 0M )
{
#region 订单合计信息
var orderTotal = new OrderTotalInfo()
{
@ -449,7 +457,7 @@ namespace BBWY.Server.Business
}
}
#endregion
}
}
}
}
@ -629,7 +637,13 @@ namespace BBWY.Server.Business
if (dbOsku != null)
{
var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == dbOsku.SkuId);
var isDetailChanged = (dbOsku.ShouldPay == 0 || dbOsku.ShouldPay == null) && oskuCF != null && oskuCF.ShouldPay != 0;
var isDetailChanged = oskuCF != null && (dbOsku.ShouldPay != oskuCF.ShouldPay ||
dbOsku.Balance != oskuCF.Balance||
dbOsku.PingTaiChengDanYouHuiQuan != oskuCF.PingTaiChengDanYouHuiQuan||
dbOsku.SuperRedEnvelope != oskuCF.SuperRedEnvelope ||
dbOsku.XianPinLeiDongQuan != oskuCF.XianPinLeiDongQuan ||
dbOsku.JingDou != oskuCF.JingDou ||
dbOsku.DongQuan != oskuCF.DongQuan);
if (dbOsku.ProductId != wareId || isDetailChanged)
{
var skuActualAmount = oskuCF?.ShouldPay ?? 0M +
@ -725,6 +739,17 @@ namespace BBWY.Server.Business
orderState != null &&
orderState != Enums.OrderState. &&
orderState != Enums.OrderState.)
{
bool checkOrderTotal = true;
if (dbOrder.StorageType == Enums.StorageType. || dbOrder.StorageType == Enums.StorageType.)
{
var orderTotalInfo = insertOrderTotalInfoList.FirstOrDefault(x => x.Id == dbOrder.Id);
if (orderTotalInfo == null)
orderTotalInfo = dbOrderTotalList.FirstOrDefault(x => x.Id == dbOrder.Id);
if (orderTotalInfo == null || orderTotalInfo.TotalShouldPay == 0M)
checkOrderTotal = false;
}
if (checkOrderTotal)
{
var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id);
if (orderCost == null && orderSellerPrice > 0M)
@ -874,8 +899,10 @@ namespace BBWY.Server.Business
OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity,
PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity,
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
IsEnabled = true
//StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
PackagingLaborAmount = purchaseOrder.SinglePackagingLaborAmount * deductionQuantity,
IsEnabled = true,
IsEstimateCost = false
};
//orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential -
@ -902,6 +929,9 @@ namespace BBWY.Server.Business
#endregion
#region 计算成本
//当具备订单明细成本的时候,才为其创建订单成本
if (insertOrderCostDetailList.Any(iocd => iocd.OrderId == orderId))
{
orderCost = new OrderCost()
{
OrderId = orderId,
@ -910,7 +940,8 @@ namespace BBWY.Server.Business
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now
CreateTime = DateTime.Now,
IsEstimateCost = false
};
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
@ -918,11 +949,13 @@ namespace BBWY.Server.Business
orderCost.CalculationOrderProfitAndCost(actualAmount, null);
insertOrderCostList.Add(orderCost);
}
#endregion
}
}
}
}
}
#endregion
#region 检查订单信息是否变化
@ -1090,6 +1123,7 @@ namespace BBWY.Server.Business
public void SyncAllShopOrder()
{
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
//var a = shopList.FirstOrDefault(s => s.ShopName == "创艺家居日用专营店");
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => SyncOrder(shop, string.Empty, isAuto: true), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);

4
BBWY.Server.Business/TaskSchedulerManager.cs

@ -34,6 +34,8 @@ namespace BBWY.Server.Business
public LimitedConcurrencyLevelTaskScheduler JDPromotionAutoStartTaskScheduler { get; private set; }
public LimitedConcurrencyLevelTaskScheduler SyncSkuYesterdayCostTaskScheduler { get; private set; }
public TaskSchedulerManager()
{
RepairOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(5);
@ -55,6 +57,8 @@ namespace BBWY.Server.Business
JDPromotionAutoStartTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
SyncPauseOrderTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
SyncSkuYesterdayCostTaskScheduler = new LimitedConcurrencyLevelTaskScheduler(10);
}
}
}

231
BBWY.Server.Business/TestBusiness.cs

@ -1,19 +1,20 @@
using BBWY.Common.Http;
using BBWY.Common.Models;
using BBWY.Server.Business.Extensions;
using BBWY.Server.Model;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Db.Mds;
using BBWY.Server.Model.Dto;
using FreeSql;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using BBWY.Server.Business.Extensions;
using Newtonsoft.Json;
using System.Net.Http;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
namespace BBWY.Server.Business
@ -25,6 +26,7 @@ namespace BBWY.Server.Business
private IFreeSql fsql;
private OrderSyncBusiness orderSyncBusiness;
private TaskSchedulerManager taskSchedulerManager;
private PurchaseOrderBusiness purchaseOrderBusiness;
public TestBusiness(RestApiService restApiService,
IOptions<GlobalConfig> options,
FreeSqlMultiDBManager freeSqlMultiDBManager,
@ -32,13 +34,15 @@ namespace BBWY.Server.Business
YunDingBusiness yunDingBusiness,
IFreeSql fsql,
OrderSyncBusiness orderSyncBusiness,
TaskSchedulerManager taskSchedulerManager) : base(restApiService, options, yunDingBusiness)
TaskSchedulerManager taskSchedulerManager,
PurchaseOrderBusiness purchaseOrderBusiness) : base(restApiService, options, yunDingBusiness)
{
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.venderBusiness = venderBusiness;
this.fsql = fsql;
this.orderSyncBusiness = orderSyncBusiness;
this.taskSchedulerManager = taskSchedulerManager;
this.purchaseOrderBusiness = purchaseOrderBusiness;
}
public void SyncVenderId()
@ -274,18 +278,20 @@ namespace BBWY.Server.Business
public void RepairOrderProfit()
{
var startTime = DateTime.Parse("2023-10-16");
var orderList = fsql.Select<Order>().Where(o => o.FreightPrice > 0 &&
o.IsGift == false &&
var startTime = DateTime.Parse("2023-12-12");
var orderList = fsql.Select<Order>().Where(o => o.IsGift == false &&
o.OrderState != Enums.OrderState. &&
o.StorageType != null &&
o.StorageType != Enums.StorageType.SD &&
o.StorageType == Enums.StorageType. &&
o.StartTime >= startTime)
.ToList();
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
var orderIdList = orderList.Select(o => o.Id).ToList();
var orderCostList = fsql.Select<OrderCost>(orderIdList).ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIdList.Contains(osku.OrderId) && osku.Price > 0).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true && ocd.IsEstimateCost == false).ToList();
List<IUpdate<OrderCost>> updateList = new List<IUpdate<OrderCost>>();
List<IUpdate<OrderCostDetail>> updateDetailList = new List<IUpdate<OrderCostDetail>>();
int index = 0;
foreach (var orderCost in orderCostList)
{
@ -294,9 +300,41 @@ namespace BBWY.Server.Business
var order = orderList.FirstOrDefault(o => o.Id == orderCost.OrderId);
if (order == null)
continue;
var shop = shopList.FirstOrDefault(s => s.ShopId == order.ShopId.ToString());
var currentOCDList = orderCostDetailList.Where(ocd => ocd.OrderId == orderCost.OrderId).ToList();
var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == orderCost.OrderId).ToList();
foreach (var ocd in currentOCDList)
{
var osku = currentOrderSkuList.FirstOrDefault(x => x.SkuId == ocd.SkuId);
if (osku == null)
continue;
ocd.CalculationSkuGrossProfit(osku.ShouldPay ?? 0M,
osku.PingTaiChengDanYouHuiQuan ?? 0M,
osku.SuperRedEnvelope ?? 0M,
osku.XianPinLeiDongQuan ?? 0M,
osku.VenderFee ?? 0M,
osku.JingDou ?? 0M,
osku.DongQuan ?? 0M,
osku.Balance ?? 0M,
shop.PlatformCommissionRatio ?? 0.05M);
var update = fsql.Update<OrderCostDetail>().SetSource(ocd);
updateDetailList.Add(update);
}
orderCost.PurchaseAmount = currentOCDList.Sum(ocd => ocd.TotalCost);
orderCost.DeliveryExpressFreight = currentOCDList.Sum(ocd => ocd.DeliveryExpressFreight);
orderCost.CalculationOrderProfitAndCost(order, null);
updateList.Add(fsql.Update<OrderCost>(orderCost.OrderId).Set(oc => oc.Profit, orderCost.Profit)
updateList.Add(fsql.Update<OrderCost>(orderCost.OrderId)
.Set(oc => oc.PurchaseAmount, orderCost.PurchaseAmount)
.Set(oc => oc.DeliveryExpressFreight, orderCost.DeliveryExpressFreight)
.Set(oc => oc.Profit, orderCost.Profit)
.Set(oc => oc.PlatformCommissionAmount, orderCost.PlatformCommissionAmount));
if (updateList.Count() > 10)
{
Console.WriteLine($"{DateTime.Now} 执行数据库更新");
@ -304,8 +342,11 @@ namespace BBWY.Server.Business
{
foreach (var update in updateList)
update.ExecuteAffrows();
foreach (var update in updateDetailList)
update.ExecuteAffrows();
});
updateList.Clear();
updateDetailList.Clear();
}
}
@ -316,8 +357,11 @@ namespace BBWY.Server.Business
{
foreach (var update in updateList)
update.ExecuteAffrows();
foreach (var update in updateDetailList)
update.ExecuteAffrows();
});
updateList.Clear();
updateDetailList.Clear();
}
}
@ -345,6 +389,171 @@ namespace BBWY.Server.Business
if (!response.Success)
throw new BusinessException(response.Msg);
}
public void RepairDFOrder()
{
var st = DateTime.Parse("2023-11-01");
var et = DateTime.Parse("2023-11-30 23:59:59");
var list = fsql.Select<Order, OrderDropShipping, OrderCostDetail>()
.InnerJoin((o, ods, ocd) => o.Id == ods.OrderId)
.InnerJoin((o, ods, ocd) => o.Id == ocd.OrderId)
.Where((o, ods, ocd) => o.ShopId == 12897067 && o.OrderState != Enums.OrderState. && o.StartTime >= st && o.StartTime <= et && o.StorageType == Enums.StorageType. && ocd.IsEnabled == true && ocd.SkuAmount == 0)
.ToList((o, ods, ocd) => ods.PurchaseOrderId).Distinct().ToList();
for (var i = 0; i < list.Count; i++)
{
Console.WriteLine($"{i + 1}/{list.Count()},{list[i]}");
var param = new { type = "ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY", data = new { orderId = list[i] } };
purchaseOrderBusiness.CallbackFrom1688(JsonConvert.SerializeObject(param));
Thread.Sleep(1000);
}
}
public void Test_20231221()
{
var invalidOrderStateList = new List<Enums.OrderState?>() { Enums.OrderState., Enums.OrderState. };
var shopList = venderBusiness.GetShopList(10224131, Enums.Platform.);
var objList = new List<(string id, string shopName, DateTime sjtime, decimal? lastOrderAmount, decimal fto20SearchUv, decimal fto50SearchUv, decimal fto100SearchUv, decimal fto200SearchUv, decimal fto30SearchUv, decimal fto500SearchUv)>();
var result = new List<string>() { "店铺名,SPU,上架时间,最后一单成交价,推荐访客首次到达20时的搜索访客,推荐访客首次到达50时的搜索访客,推荐访客首次到达100时的搜索访客,推荐访客首次到达200时的搜索访客,推荐访客首次到达300时的搜索访客,推荐访客首次到达50时的搜索访客" };
foreach (var shop in shopList)
{
Console.WriteLine(shop.ShopName);
var shopId = long.Parse(shop.ShopId);
var productList = fsql.Select<Product>().Where(p => p.ShopId == shopId).ToList();
var productIdList = productList.Select(p => p.Id).ToList();
var skuList = fsql.Select<OrderSku, Order>()
.InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => o.ShopId == shopId &&
!invalidOrderStateList.Contains(o.OrderState) &&
o.IsGift == false &&
o.StorageType != Enums.StorageType.SD &&
osku.Price > 0)
.GroupBy((osku, o) => osku.ProductId)
.WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), ProductId = g.Key })
.From<OrderSku>()
.InnerJoin((osku, osku1) => osku1.Id == osku.MaxId)
.ToList((osku, osku1) => new { osku1.ProductId, osku1.OrderId });
var orderIdList = skuList.Select(s => s.OrderId).Distinct().ToList();
var orderList = fsql.Select<Order>(orderIdList).ToList(o => new Order() { Id = o.Id, ShopId = o.ShopId, OrderTotalPrice = o.OrderTotalPrice });
#region 20
var _20list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 50)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
#region 50
var _50list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 50)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
#region 100
var _100list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 100)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
#region 200
var _200list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 200)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
#region 300
var _300list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 300)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
#region 500
var _500list = freeSqlMultiDBManager.JDXXfsql.Select<JDXX.Model.Db.Newskus>()
.Where(s => productIdList.Contains(s.Spu))
.GroupBy(s => new { s.Spu, s.CreateTime })
.Having(g => g.Sum(g.Value.StarUv) >= 500)
.OrderBy(g => g.Value.CreateTime)
.ToList(g => new
{
spu = g.Key,
g.Value.CreateTime,
sumSearchUv = g.Sum(g.Value.SearchUv),
sumStarUv = g.Sum(g.Value.StarUv)
});
#endregion
foreach (var product in productList)
{
var orderTotalPrice = orderList.FirstOrDefault(o => o.Id == (skuList.FirstOrDefault(s => s.ProductId == product.Id)?.OrderId))?.OrderTotalPrice ?? 0M;
var shopName = shop.ShopName;
var sjtime = product.CreateTime;
var fto20SearchUv = _20list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
var fto50SearchUv = _50list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
var fto100SearchUv = _100list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
var fto200SearchUv = _200list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
var fto300SearchUv = _300list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
var fto500SearchUv = _500list.FirstOrDefault(s => s.spu.Spu == product.Id)?.sumSearchUv ?? 0M;
result.Add($"{shopName},{product.Id},{sjtime},{orderTotalPrice},{fto20SearchUv},{fto50SearchUv},{fto100SearchUv},{fto200SearchUv},{fto300SearchUv},{fto500SearchUv}");
}
}
System.IO.File.WriteAllLines(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "result.csv"), result, System.Text.Encoding.UTF8);
Console.WriteLine("结束");
}
}
public class JPCount

4
BBWY.Server.Business/Vender/VenderBusiness.cs

@ -293,14 +293,14 @@ namespace BBWY.Server.Business
return departmentList;
}
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false)
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false, bool? isEnabled = true)
{
return freeSqlMultiDBManager.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(filterTurnoverDays, s => s.SkuSafeTurnoverDays != 0)
.WhereIf(filterSiNan, s => !string.IsNullOrEmpty(s.SiNanDingDingWebHook))
.Where(s => s.IsEnabled == true)
.WhereIf(isEnabled != null, s => s.IsEnabled == isEnabled)
.ToList<ShopResponse>();
}

2
BBWY.Server.Model/BBWY.Server.Model.csproj

@ -7,7 +7,7 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="10.1.1" />
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql" Version="3.2.805" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>

187
BBWY.Server.Model/Db/JD/JDPopularizeAdGroup.cs

@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
@ -11,56 +11,149 @@ namespace BBWY.Server.Model.Db
public partial class JDPopularizeAdGroup
{
[Column(IsPrimary = true)]
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 单元Id
/// </summary>
[Column(DbType = "bigint")]
public long? AdGroupId { get; set; }
/// <summary>
/// 单元名称
/// </summary>
[Column(StringLength = 100)]
public string AdGroupName { get; set; }
/// <summary>
/// 业务线(快车:2 京速推:134217728)
/// </summary>
[Column(DbType = "int")]
public int? BusinessType { get; set; }
/// <summary>
/// 计划Id
/// </summary>
[Column(DbType = "bigint")]
public long? CampaignId { get; set; }
/// <summary>
/// 点击数
/// </summary>
[Column(Name = "clicks")]
public int? Clicks { get; set; }
[Column(Name = "clicks", DbType = "int")]
public int? Clicks { get; set; } = 0;
/// <summary>
/// 总花费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? Cost { get; set; }
public decimal? Cost { get; set; } = 0.00M;
/// <summary>
/// 领券数
/// </summary>
[Column(Name = "couponCnt", DbType = "int")]
public int? CouponCnt { get; set; } = 0;
/// <summary>
/// CPA
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPA { get; set; } = 0.00M;
/// <summary>
/// 平均点击成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPC { get; set; } = 0.00M;
/// <summary>
/// 千次展现成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPM { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 点击率
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CTR { get; set; } = 0.00M;
/// <summary>
/// 计费日期
/// </summary>
[Column(DbType = "datetime")]
public DateTime? Date { get; set; }
/// <summary>
/// 深度进店数
/// </summary>
[Column(Name = "depthPassengerCnt", DbType = "int")]
public int? DepthPassengerCnt { get; set; } = 0;
/// <summary>
/// 直接购物车数
/// </summary>
[Column(Name = "directCartCnt", DbType = "int")]
public int? DirectCartCnt { get; set; } = 0;
/// <summary>
/// 直接订单行
/// </summary>
[Column(Name = "directOrderCnt", DbType = "int")]
public int? DirectOrderCnt { get; set; } = 0;
/// <summary>
/// 直接订单金额
/// </summary>
[Column(Name = "directOrderSum", DbType = "decimal(18,2)")]
public decimal? DirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// 商品关注数
/// </summary>
[Column(Name = "goodsAttentionCnt", DbType = "int")]
public int? GoodsAttentionCnt { get; set; } = 0;
/// <summary>
/// 展现次数
/// </summary>
[Column(Name = "impressions")]
public int? Impressions { get; set; }
[Column(Name = "impressions", DbType = "int")]
public int? Impressions { get; set; } = 0;
/// <summary>
/// 间接购物车数
/// </summary>
[Column(Name = "indirectCartCnt", DbType = "int")]
public int? IndirectCartCnt { get; set; } = 0;
/// <summary>
/// 间接订单行
/// </summary>
[Column(Name = "indirectOrderCnt", DbType = "int")]
public int? IndirectOrderCnt { get; set; } = 0;
/// <summary>
/// 间接订单金额
/// </summary>
[Column(Name = "indirectOrderSum", DbType = "decimal(18,2)")]
public decimal? IndirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// 下单新客数
/// </summary>
[Column(Name = "newCustomersCnt", DbType = "int")]
public int? NewCustomersCnt { get; set; } = 0;
/// <summary>
/// 下单日期
/// </summary>
[Column(Name = "orderDate", DbType = "datetime")]
public DateTime? OrderDate { get; set; }
/// <summary>
/// 账号归属
@ -68,20 +161,86 @@ namespace BBWY.Server.Model.Db
[Column(Name = "pin")]
public string Pin { get; set; }
/// <summary>
/// 预约数
/// </summary>
[Column(Name = "preorderCnt", DbType = "int")]
public int? PreorderCnt { get; set; } = 0;
/// <summary>
/// 店铺关注数
/// </summary>
[Column(Name = "shopAttentionCnt", DbType = "int")]
public int? ShopAttentionCnt { get; set; } = 0;
[Column(DbType = "bigint")]
public long? ShopId { get; set; }
/// <summary>
/// 总加购人数
/// </summary>
[Column(Name = "totalCartCnt")]
public int? TotalCartCnt { get; set; }
[Column(Name = "totalCartCnt", DbType = "int")]
public int? TotalCartCnt { get; set; } = 0;
/// <summary>
/// 总加购成本
/// </summary>
[Column(Name = "totalCartCost", DbType = "decimal(18,2)")]
public decimal? TotalCartCost { get; set; } = 0.00M;
/// <summary>
/// 总订单数
/// </summary>
[Column(Name = "totalOrderCnt")]
public int? TotalOrderCnt { get; set; }
[Column(Name = "totalOrderCnt", DbType = "int")]
public int? TotalOrderCnt { get; set; } = 0;
/// <summary>
/// 点击转化率
/// </summary>
[Column(Name = "totalOrderCVS", DbType = "decimal(18,2)")]
public decimal? TotalOrderCVS { get; set; } = 0.00M;
/// <summary>
/// ROI
/// </summary>
[Column(Name = "totalOrderROI", DbType = "decimal(18,2)")]
public decimal? TotalOrderROI { get; set; } = 0.00M;
/// <summary>
/// 总订单金额
/// </summary>
[Column(Name = "totalOrderSum", DbType = "decimal(18,2)")]
public decimal? TotalOrderSum { get; set; } = 0.00M;
/// <summary>
/// 预售订单行
/// </summary>
[Column(Name = "totalPresaleOrderCnt", DbType = "int")]
public int? TotalPresaleOrderCnt { get; set; } = 0;
/// <summary>
/// 预售订单金额
/// </summary>
[Column(Name = "totalPresaleOrderSum", DbType = "decimal(18,2)")]
public decimal? TotalPresaleOrderSum { get; set; } = 0.00M;
/// <summary>
/// 访客数
/// </summary>
[Column(Name = "visitorCnt", DbType = "int")]
public int? VisitorCnt { get; set; } = 0;
/// <summary>
/// 访问页面数
/// </summary>
[Column(Name = "visitPageCnt", DbType = "int")]
public int? VisitPageCnt { get; set; } = 0;
/// <summary>
/// 访问时长
/// </summary>
[Column(Name = "visitTimeAverage", DbType = "decimal(18,2)")]
public decimal? VisitTimeAverage { get; set; } = 0.00M;
}

232
BBWY.Server.Model/Db/JD/JDPopularizeAdSku.cs

@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
@ -11,62 +11,179 @@ namespace BBWY.Server.Model.Db
public partial class JDPopularizeAdSku
{
[Column(IsPrimary = true)]
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 单元Id
/// 文档无解释
/// </summary>
[Column(Name = "adCreativeType", StringLength = 50)]
public string AdCreativeType { get; set; } = "0";
/// <summary>
/// adCustomTitle无文档解释
/// </summary>
[Column(Name = "adCustomTitle")]
public string AdCustomTitle { get; set; }
/// <summary>
/// 单元Id
/// </summary>
[Column(DbType = "bigint")]
public long? AdGroupId { get; set; }
/// <summary>
/// 创意Id
/// </summary>
[Column(DbType = "bigint")]
public long? AdId { get; set; }
/// <summary>
/// 创意名称
/// </summary>
[Column(StringLength = 100)]
public string AdName { get; set; }
/// <summary>
/// 业务线(快车:2 京速推:134217728)
/// </summary>
[Column(DbType = "int")]
public int? BusinessType { get; set; }
/// <summary>
/// 计划Id
/// </summary>
[Column(DbType = "bigint")]
public long? CampaignId { get; set; }
/// <summary>
/// 点击数
/// </summary>
[Column(Name = "clicks")]
public int? Clicks { get; set; }
[Column(Name = "clicks", DbType = "int")]
public int? Clicks { get; set; } = 0;
/// <summary>
/// 总花费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? Cost { get; set; }
public decimal? Cost { get; set; } = 0.00M;
/// <summary>
/// 领券数
/// </summary>
[Column(Name = "couponCnt", DbType = "int")]
public int? CouponCnt { get; set; } = 0;
/// <summary>
/// CPA
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPA { get; set; } = 0.00M;
/// <summary>
/// 平均点击成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPC { get; set; } = 0.00M;
/// <summary>
/// 千次展现成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPM { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 点击率
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CTR { get; set; } = 0.00M;
/// <summary>
/// 计费日期
/// </summary>
[Column(DbType = "datetime")]
public DateTime? Date { get; set; }
/// <summary>
/// 深度进店数
/// </summary>
[Column(Name = "depthPassengerCnt", DbType = "int")]
public int? DepthPassengerCnt { get; set; } = 0;
/// <summary>
/// 直接购物车数
/// </summary>
[Column(Name = "directCartCnt", DbType = "int")]
public int? DirectCartCnt { get; set; } = 0;
/// <summary>
/// 直接订单行
/// </summary>
[Column(Name = "directOrderCnt", DbType = "int")]
public int? DirectOrderCnt { get; set; } = 0;
/// <summary>
/// 直接订单金额
/// </summary>
[Column(Name = "directOrderSum", DbType = "decimal(18,2)")]
public decimal? DirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// 商品关注数
/// </summary>
[Column(Name = "goodsAttentionCnt", DbType = "int")]
public int? GoodsAttentionCnt { get; set; } = 0;
/// <summary>
/// 展现次数
/// </summary>
[Column(Name = "impressions")]
public int? Impressions { get; set; }
[Column(Name = "impressions", DbType = "int")]
public int? Impressions { get; set; } = 0;
/// <summary>
/// 间接购物车数
/// </summary>
[Column(Name = "indirectCartCnt", DbType = "int")]
public int? IndirectCartCnt { get; set; } = 0;
/// <summary>
/// 间接订单行
/// </summary>
[Column(Name = "indirectOrderCnt", DbType = "int")]
public int? IndirectOrderCnt { get; set; } = 0;
/// <summary>
/// 间接订单金额
/// </summary>
[Column(Name = "indirectOrderSum", DbType = "decimal(18,2)")]
public decimal? IndirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// materialId无文档解释
/// </summary>
[Column(Name = "materialId", DbType = "bigint")]
public long? MaterialId { get; set; } = 0;
/// <summary>
/// materialSize文档无解释
/// </summary>
[Column(Name = "materialSize", StringLength = 100)]
public string MaterialSize { get; set; }
/// <summary>
/// 下单新客数
/// </summary>
[Column(Name = "newCustomersCnt", DbType = "int")]
public int? NewCustomersCnt { get; set; } = 0;
/// <summary>
/// 下单日期
/// </summary>
[Column(Name = "orderDate", DbType = "datetime")]
public DateTime? OrderDate { get; set; }
/// <summary>
/// 账号归属
@ -74,38 +191,111 @@ namespace BBWY.Server.Model.Db
[Column(Name = "pin")]
public string Pin { get; set; }
/// <summary>
/// 预约数
/// </summary>
[Column(Name = "preorderCnt", DbType = "int")]
public int? PreorderCnt { get; set; } = 0;
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 店铺关注数
/// </summary>
[Column(Name = "shopAttentionCnt", DbType = "int")]
public int? ShopAttentionCnt { get; set; } = 0;
[Column(DbType = "bigint")]
public long? ShopId { get; set; }
[Column(StringLength = 50)]
public string Sku { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 品牌ID
/// </summary>
[Column(Name = "skuBrandId", StringLength = 50)]
public string SkuBrandId { get; set; }
/// <summary>
/// sku品牌名称
/// </summary>
[Column(Name = "skuBrandName", StringLength = 50)]
public string SkuBrandName { get; set; }
/// <summary>
/// SKU三级类目Id
/// </summary>
[Column(Name = "skuCid3", StringLength = 50)]
public string SkuCid3 { get; set; }
/// <summary>
/// 总加购人数
/// </summary>
[Column(Name = "totalCartCnt")]
public int? TotalCartCnt { get; set; }
[Column(Name = "totalCartCnt", DbType = "int")]
public int? TotalCartCnt { get; set; } = 0;
/// <summary>
/// 总加购成本
/// </summary>
[Column(Name = "totalCartCost", DbType = "decimal(18,2)")]
public decimal? TotalCartCost { get; set; } = 0.00M;
/// <summary>
/// 总订单数
/// </summary>
[Column(Name = "totalOrderCnt")]
public int? TotalOrderCnt { get; set; }
[Column(Name = "totalOrderCnt", DbType = "int")]
public int? TotalOrderCnt { get; set; } = 0;
/// <summary>
/// 点击转化率
/// </summary>
[Column(Name = "totalOrderCVS", DbType = "decimal(18,2)")]
public decimal? TotalOrderCVS { get; set; } = 0.00M;
/// <summary>
/// ROI
/// </summary>
[Column(Name = "totalOrderROI", DbType = "decimal(18,2)")]
public decimal? TotalOrderROI { get; set; } = 0.00M;
/// <summary>
/// 总订单金额
/// </summary>
[Column(Name = "totalOrderSum")]
public decimal TotalOrderSum { get; set; }
[Column(Name = "totalOrderSum", DbType = "decimal(11,2)")]
public decimal? TotalOrderSum { get; set; } = 0.00M;
/// <summary>
/// 预售订单行
/// </summary>
[Column(Name = "totalPresaleOrderCnt", DbType = "int")]
public int? TotalPresaleOrderCnt { get; set; } = 0;
/// <summary>
/// 预售订单金额
/// </summary>
[Column(Name = "totalPresaleOrderSum", DbType = "decimal(18,2)")]
public decimal? TotalPresaleOrderSum { get; set; } = 0.00M;
/// <summary>
/// 访客数
/// </summary>
[Column(Name = "visitorCnt")]
public int VisitorCnt { get; set; }
[Column(Name = "visitorCnt", DbType = "int")]
public int? VisitorCnt { get; set; } = 0;
/// <summary>
/// 访问页面数
/// </summary>
[Column(Name = "visitPageCnt", DbType = "int")]
public int? VisitPageCnt { get; set; } = 0;
/// <summary>
/// 访问时长
/// </summary>
[Column(Name = "visitTimeAverage", DbType = "decimal(18,2)")]
public decimal? VisitTimeAverage { get; set; } = 0.00M;
}
}

206
BBWY.Server.Model/Db/JD/JDPopularizeCampaign.cs

@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
@ -11,28 +11,50 @@ namespace BBWY.Server.Model.Db
public partial class JDPopularizeCampaign
{
[Column(IsPrimary = true)]
[Column(DbType = "bigint", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 业务线(快车:2 京速推:134217728)
/// </summary>
[Column(DbType = "int")]
public int? BusinessType { get; set; }
/// <summary>
/// 计划Id
/// </summary>
[Column(DbType = "bigint")]
public long? CampaignId { get; set; }
/// <summary>
/// 计划名称
/// </summary>
[Column(StringLength = 100)]
public string CampaignName { get; set; }
/// <summary>
/// 文档无解释
/// </summary>
[Column(Name = "campaignPutType", DbType = "int")]
public int? CampaignPutType { get; set; }
/// <summary>
/// 计划类型
/// </summary>
[Column(Name = "campaignType", DbType = "int")]
public int? CampaignType { get; set; } = 0;
/// <summary>
/// 计划类型
/// </summary>
[Column(Name = "campaignTypeExpand", DbType = "int")]
public int? CampaignTypeExpand { get; set; } = 0;
/// <summary>
/// 点击数
/// </summary>
[Column(Name = "clicks")]
public int? Clicks { get; set; }
[Column(Name = "clicks", DbType = "int")]
public int? Clicks { get; set; } = 0;
/// <summary>
/// 总花费
@ -40,20 +62,110 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "decimal(18,2)")]
public decimal? Cost { get; set; }
/// <summary>
/// 领券数
/// </summary>
[Column(Name = "couponCnt", DbType = "int")]
public int? CouponCnt { get; set; } = 0;
/// <summary>
/// CPA
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPA { get; set; } = 0.00M;
/// <summary>
/// 平均点击成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPC { get; set; } = 0.00M;
/// <summary>
/// 千次展现成本
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CPM { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 点击率
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? CTR { get; set; } = 0.00M;
/// <summary>
/// 计费日期
/// </summary>
[Column(DbType = "datetime")]
public DateTime? Date { get; set; }
/// <summary>
/// 深度进店数
/// </summary>
[Column(Name = "depthPassengerCnt", DbType = "int")]
public int? DepthPassengerCnt { get; set; } = 0;
/// <summary>
/// 直接购物车数
/// </summary>
[Column(Name = "directCartCnt", DbType = "int")]
public int? DirectCartCnt { get; set; } = 0;
/// <summary>
/// 直接订单行
/// </summary>
[Column(Name = "directOrderCnt", DbType = "int")]
public int? DirectOrderCnt { get; set; } = 0;
/// <summary>
/// 直接订单金额
/// </summary>
[Column(Name = "directOrderSum", DbType = "decimal(18,2)")]
public decimal? DirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// 商品关注数
/// </summary>
[Column(Name = "goodsAttentionCnt", DbType = "int")]
public int? GoodsAttentionCnt { get; set; } = 0;
/// <summary>
/// 展现次数
/// </summary>
[Column(Name = "impressions")]
public int? Impressions { get; set; }
[Column(Name = "impressions", DbType = "int")]
public int? Impressions { get; set; } = 0;
/// <summary>
/// 间接购物车数
/// </summary>
[Column(Name = "indirectCartCnt", DbType = "int")]
public int? IndirectCartCnt { get; set; } = 0;
/// <summary>
/// 间接订单行
/// </summary>
[Column(Name = "indirectOrderCnt", DbType = "int")]
public int? IndirectOrderCnt { get; set; } = 0;
/// <summary>
/// 间接订单金额
/// </summary>
[Column(Name = "indirectOrderSum", DbType = "decimal(18,2)")]
public decimal? IndirectOrderSum { get; set; } = 0.00M;
/// <summary>
/// 下单新客数
/// </summary>
[Column(Name = "newCustomersCnt", DbType = "int")]
public int? NewCustomersCnt { get; set; } = 0;
/// <summary>
/// 下单日期
/// </summary>
[Column(Name = "orderDate", DbType = "datetime")]
public DateTime? OrderDate { get; set; }
/// <summary>
/// 账号归属
@ -61,20 +173,92 @@ namespace BBWY.Server.Model.Db
[Column(Name = "pin")]
public string Pin { get; set; }
/// <summary>
/// 预约数
/// </summary>
[Column(Name = "preorderCnt", DbType = "int")]
public int? PreorderCnt { get; set; } = 0;
/// <summary>
/// 文档无解释
/// </summary>
[Column(Name = "putType", StringLength = 100)]
public string PutType { get; set; }
/// <summary>
/// 店铺关注数
/// </summary>
[Column(Name = "shopAttentionCnt", DbType = "int")]
public int? ShopAttentionCnt { get; set; } = 0;
[Column(DbType = "bigint")]
public long? ShopId { get; set; }
/// <summary>
/// 总加购人数
/// </summary>
[Column(Name = "totalCartCnt")]
public int? TotalCartCnt { get; set; }
[Column(Name = "totalCartCnt", DbType = "int")]
public int? TotalCartCnt { get; set; } = 0;
/// <summary>
/// 总加购成本
/// </summary>
[Column(Name = "totalCartCost", DbType = "decimal(18,2)")]
public decimal? TotalCartCost { get; set; } = 0.00M;
/// <summary>
/// 总订单数
/// </summary>
[Column(Name = "totalOrderCnt")]
public int? TotalOrderCnt { get; set; }
[Column(Name = "totalOrderCnt", DbType = "int")]
public int? TotalOrderCnt { get; set; } = 0;
/// <summary>
/// 点击转化率
/// </summary>
[Column(Name = "totalOrderCVS", DbType = "decimal(18,2)")]
public decimal? TotalOrderCVS { get; set; } = 0.00M;
/// <summary>
/// ROI
/// </summary>
[Column(Name = "totalOrderROI", DbType = "decimal(18,2)")]
public decimal? TotalOrderROI { get; set; } = 0.00M;
/// <summary>
/// 总订单金额
/// </summary>
[Column(Name = "totalOrderSum", DbType = "decimal(18,2)")]
public decimal? TotalOrderSum { get; set; } = 0.00M;
/// <summary>
/// 预售订单行
/// </summary>
[Column(Name = "totalPresaleOrderCnt", DbType = "int")]
public int? TotalPresaleOrderCnt { get; set; } = 0;
/// <summary>
/// 预售订单金额
/// </summary>
[Column(Name = "totalPresaleOrderSum", DbType = "decimal(18,2)")]
public decimal? TotalPresaleOrderSum { get; set; } = 0.00M;
/// <summary>
/// 访客数
/// </summary>
[Column(Name = "visitorCnt", DbType = "int")]
public int? VisitorCnt { get; set; } = 0;
/// <summary>
/// 访问页面数
/// </summary>
[Column(Name = "visitPageCnt", DbType = "int")]
public int? VisitPageCnt { get; set; } = 0;
/// <summary>
/// 访问时长
/// </summary>
[Column(Name = "visitTimeAverage", DbType = "decimal(18,2)")]
public decimal? VisitTimeAverage { get; set; } = 0.00M;
}

426
BBWY.Server.Model/Db/JDXX/Newskus.cs

@ -0,0 +1,426 @@
using FreeSql.DataAnnotations;
using System;
namespace JDXX.Model.Db
{
[Table(Name = "newskus", DisableSyncStructure = true)]
public partial class Newskus
{
/// <summary>
/// Id
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 加购物车数量
/// </summary>
[Column(DbType = "int")]
public int? AddCardCount { get; set; }
/// <summary>
/// 加购人数
/// </summary>
[Column(DbType = "int")]
public int? AddCardMember { get; set; }
/// <summary>
/// 加购率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? AddCardRate { get; set; }
/// <summary>
/// 点击次数
/// </summary>
[Column(DbType = "int")]
public int? ClickCount { get; set; }
/// <summary>
/// 点击率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ClickRate { get; set; }
/// <summary>
/// 栏目订单
/// </summary>
[Column(DbType = "int")]
public int? ColumnOrder { get; set; }
/// <summary>
/// 转化率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ConversionRate { get; set; }
/// <summary>
/// 收费流量
/// </summary>
[Column(DbType = "int")]
public int? CostUv { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 盈亏小节
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? EarningsPrice { get; set; }
/// <summary>
/// 曝光量
/// </summary>
[Column(DbType = "int")]
public int? Exposure { get; set; }
/// <summary>
/// 快车点击率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ExposureClickRate { get; set; }
/// <summary>
/// 快车点击
/// </summary>
[Column(DbType = "int")]
public int? ExpressClick { get; set; }
/// <summary>
/// 快车花费
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? ExpressCost { get; set; }
/// <summary>
/// 快车展现
/// </summary>
public decimal? ExpressExposure { get; set; }
/// <summary>
/// 快车订单
/// </summary>
[Column(DbType = "int")]
public int? ExpressOrder { get; set; }
/// <summary>
/// 快车成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? ExpressPayPrice { get; set; }
/// <summary>
/// 快车人均点击
/// </summary>
[Column(DbType = "decimal(11,4)")]
public decimal? ExpressPeopleClick { get; set; }
/// <summary>
/// 快车访客
/// </summary>
[Column(DbType = "int")]
public int? ExpressUv { get; set; }
/// <summary>
/// 免费订单
/// </summary>
[Column(DbType = "int")]
public int? FreeOrder { get; set; }
/// <summary>
/// 免费成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? FreePayPrice { get; set; }
/// <summary>
/// 免费流量
/// </summary>
[Column(DbType = "int")]
public int? FreeUv { get; set; }
/// <summary>
/// 首页访客
/// </summary>
[Column(DbType = "int")]
public int? IndexUv { get; set; }
/// <summary>
/// 是否收藏
/// </summary>
[Column(DbType = "tinyint")]
public sbyte? IsStar { get; set; }
/// <summary>
/// 新品交易榜单
/// </summary>
[Column(DbType = "int")]
public int? NewSaleTopIndex { get; set; }
/// <summary>
/// 新品人气榜单
/// </summary>
[Column(DbType = "int")]
public int? NewUvTopIndex { get; set; }
/// <summary>
/// 一级类目
/// </summary>
[Column(StringLength = 50)]
public string OneCatId { get; set; }
/// <summary>
/// 其他订单
/// </summary>
[Column(DbType = "int")]
public int? OtherOrder { get; set; }
/// <summary>
/// 其他成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? OtherPrice { get; set; }
/// <summary>
/// 其他访客
/// </summary>
[Column(DbType = "int")]
public int? OtherUv { get; set; }
/// <summary>
/// 流量路径
/// </summary>
[Column(StringLength = -2)]
public string PathList { get; set; }
/// <summary>
/// 下单商品件数
/// </summary>
[Column(DbType = "int")]
public int? PayItemCount { get; set; }
/// <summary>
/// 下单客户数
/// </summary>
[Column(DbType = "int")]
public int? PayMember { get; set; }
/// <summary>
/// 下单数
/// </summary>
[Column(DbType = "int")]
public int? PayOrder { get; set; }
/// <summary>
/// 下单金额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? PayPrice { get; set; }
/// <summary>
/// 下单转化率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? PayRate { get; set; }
/// <summary>
/// 毛利
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? Profits { get; set; }
/// <summary>
/// 流量
/// </summary>
[Column(DbType = "int")]
public int? Pv { get; set; }
/// <summary>
/// 真实转化率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? RealConversionRate { get; set; }
/// <summary>
/// 真实成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? RealPrice { get; set; }
/// <summary>
/// 成交客户数
/// </summary>
[Column(DbType = "int")]
public int? SaleMember { get; set; }
/// <summary>
/// 成交金额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? SalePrice { get; set; }
/// <summary>
/// 成交转化率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? SaleRate { get; set; }
/// <summary>
/// 成交件数
/// </summary>
[Column(DbType = "int")]
public int? Sales { get; set; }
/// <summary>
/// 交易榜单排名
/// </summary>
[Column(DbType = "int")]
public int? SaleTopIndex { get; set; }
/// <summary>
/// 风向标
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ScoreRank { get; set; }
/// <summary>
/// 刷单花费
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? SdCost { get; set; }
/// <summary>
/// 刷单单量
/// </summary>
[Column(DbType = "int")]
public int? SdOrder { get; set; }
/// <summary>
/// 刷单成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? SdPrice { get; set; }
/// <summary>
/// 搜索访客
/// </summary>
[Column(DbType = "int")]
public int? SearchUv { get; set; }
/// <summary>
/// 二级类目
/// </summary>
[Column(StringLength = 50)]
public string SecondCatId { get; set; }
/// <summary>
/// 自主订单
/// </summary>
[Column(DbType = "int")]
public int? SelfOrder { get; set; }
/// <summary>
/// 店铺ID
/// </summary>
[Column(StringLength = 50)]
public string ShopId { get; set; }
/// <summary>
/// 海投点击
/// </summary>
[Column(DbType = "int")]
public int? ShotgunClick { get; set; }
/// <summary>
/// 海投点击率
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ShotgunClickRate { get; set; }
/// <summary>
/// 海投花费
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? ShotgunCost { get; set; }
/// <summary>
/// 海投展现
/// </summary>
[Column(DbType = "decimal(11,2)")]
public decimal? ShotgunExposure { get; set; }
/// <summary>
/// 海投订单
/// </summary>
[Column(DbType = "int")]
public int? ShotgunOrder { get; set; }
/// <summary>
/// 海投成交额
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? ShotgunPayPrice { get; set; }
/// <summary>
/// 海投人均点击
/// </summary>
[Column(DbType = "decimal(11,4)")]
public decimal? ShotgunPeopleClick { get; set; }
/// <summary>
/// 海投访客
/// </summary>
[Column(DbType = "int")]
public int? ShotgunUv { get; set; }
/// <summary>
/// sku
/// </summary>
[Column(StringLength = 50)]
public string Sku { get; set; }
/// <summary>
/// Spu
/// </summary>
[Column(StringLength = 50)]
public string Spu { get; set; }
/// <summary>
/// 推荐访客
/// </summary>
[Column(DbType = "int")]
public int? StarUv { get; set; }
/// <summary>
/// 三级类目
/// </summary>
[Column(StringLength = 50)]
public string ThirdCatId { get; set; }
/// <summary>
/// 总花费
/// </summary>
[Column(DbType = "decimal(19,4)")]
public decimal? TotalCost { get; set; }
/// <summary>
/// 访客
/// </summary>
[Column(DbType = "int")]
public int? Uv { get; set; }
/// <summary>
/// 人气榜单排名
/// </summary>
[Column(DbType = "int")]
public int? UvTopIndex { get; set; }
}
}

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

@ -246,6 +246,12 @@ namespace BBWY.Server.Model.Db
[Column(IsIgnore = true)]
public bool IsManualEdited { get; set; } = false;
/// <summary>
/// 是否预估成本
/// </summary>
[Column(IsIgnore = true)]
public bool IsEstimateCost { get; set; } = false;
/// <summary>
/// 退款金额
/// </summary>

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

@ -84,6 +84,12 @@ namespace BBWY.Server.Model.Db
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal AfterTotalCost { get; set; } = 0.0M;
/// <summary>
/// 是否为预估成本
/// </summary>
[Column(DbType = "bit")]
public bool IsEstimateCost { get; set; } = false;
}
}

29
BBWY.Server.Model/Db/Order/OrderCostDetail.cs

@ -90,11 +90,11 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal ConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal StorageAmount { get; set; } = 0.00M;
///// <summary>
///// 仓储费
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal StorageAmount { get; set; } = 0.00M;
[Column(DbType = "bit")]
public bool IsEnabled { get; set; } = true;
@ -104,19 +104,30 @@ namespace BBWY.Server.Model.Db
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SkuGrossProfit { get; set; } = 0.00M;
/// <summary>
/// 包装人工费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal PackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
/// 总计
/// 总计(不含发货运费)
/// </summary>
[Column(IsIgnore = true)]
public decimal TotalCost
{
get
{
return SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + StorageAmount + ConsumableAmount;
return SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + PackagingLaborAmount + ConsumableAmount;
}
}
//[Column(DbType = "decimal(20,2)")]
//public decimal TotalCost { get; set; } = 0.00M;
/// <summary>
/// 是否为预估成本
/// </summary>
[Column(DbType = "bit")]
public bool IsEstimateCost { get; set; } = false;
}
}

100
BBWY.Server.Model/Db/Order/SkuRecentCost.cs

@ -0,0 +1,100 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
{
[Table(Name = "skurecentcost", DisableSyncStructure = true)]
public partial class SkuRecentCost
{
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string SkuId { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 最近一笔订单来源
/// </summary>
[Column(StringLength = 50)]
public string RecentOrderId { get; set; }
[Column(DbType = "bigint")]
public long? ShopId { get; set; }
/// <summary>
/// 耗材费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 发货运费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleDeliveryFreight { get; set; } = 0.00M;
/// <summary>
/// 头程运费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleFirstFreight { get; set; }
/// <summary>
/// 采购运费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleFreight { get; set; } = 0.00M;
/// <summary>
/// 入仓操作费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 操作费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleOperationAmount { get; set; } = 0.00M;
/// <summary>
/// 出仓操作费(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleOutStorageAmount { get; set; } = 0.00M;
///// <summary>
///// 退货入仓操作费(单件)
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal? SingleRefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// SKU成本(单件)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SingleSkuAmount { get; set; }
///// <summary>
///// 仓储费(单件)
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal? SingleStorageAmount { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 包装人工单价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
}
}

37
BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrder.cs

@ -17,17 +17,6 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 头程运费
/// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 采购运费
/// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal Freight { get; set; } = 0.00M;
/// <summary>
/// 产品Id
@ -35,11 +24,6 @@ namespace BBWY.Server.Model.Db
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 采购金额
/// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 采购方式
@ -106,11 +90,6 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal SingleFirstFreight { get; set; } = 0.00M;
/// <summary>
/// 单件操作费
/// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal SingleOperationAmount { get; set; } = 0.00M;
/// <summary>
/// 单件入仓操作费
@ -136,17 +115,23 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal SingleConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 单件仓储费
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal SingleStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 单件仓储费
/// 单件销售(尾程)运费(不参与均价计算)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SingleStorageAmount { get; set; } = 0.00M;
public decimal SingleDeliveryFreight { get; set; } = 0.00M;
/// <summary>
/// 单件销售运费(不参与均计算)
/// 包装人工单价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SingleDeliveryFreight { get; set; } = 0.00M;
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
@ -157,7 +142,7 @@ namespace BBWY.Server.Model.Db
{
get
{
return SingleSkuAmount + SingleFreight + SingleFirstFreight + SingleInStorageAmount + SingleOutStorageAmount + SingleConsumableAmount + SingleStorageAmount;
return SingleSkuAmount + SingleFreight + SingleFirstFreight + SingleInStorageAmount + SingleOutStorageAmount + SingleConsumableAmount + SinglePackagingLaborAmount;
}
}
}

10
BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs

@ -63,10 +63,16 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
///// <summary>
///// 仓储费
///// </summary>
//public decimal StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// 打包
/// </summary>
public decimal StorageAmount { get; set; } = 0.00M;
public decimal PackagingLaborAmount { get; set; } = 0.00M;
public decimal TotalCost { get; set; } = 0M;

19
BBWY.Server.Model/Dto/Request/PurchaseOrder/AddPurchaseOrderRequest.cs

@ -60,13 +60,13 @@
/// </summary>
public decimal SingleConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 单件仓储费
/// </summary>
public decimal SingleStorageAmount { get; set; }
///// <summary>
///// 单件仓储费
///// </summary>
//public decimal SingleStorageAmount { get; set; }
/// <summary>
/// 单件销售运费(不参与均价计算)
/// 单件尾程销售运费(不参与均价计算)
/// </summary>
public decimal SingleDeliveryFreight { get; set; }
@ -82,8 +82,13 @@
public decimal SingleOutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓操作
/// 单间包装人工
/// </summary>
public decimal SingleRefundInStorageAmount { get; set; } = 0.00M;
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
///// <summary>
///// 退货入仓操作费
///// </summary>
//public decimal SingleRefundInStorageAmount { get; set; } = 0.00M;
}
}

19
BBWY.Server.Model/Dto/Request/PurchaseOrder/EditPurchaseOrderRequest.cs

@ -34,13 +34,13 @@
/// </summary>
public decimal SingleConsumableAmount { get; set; } = 0.00M;
/// <summary>
/// 单件仓储费
/// </summary>
public decimal SingleStorageAmount { get; set; } = 0.00M;
///// <summary>
///// 单件仓储费
///// </summary>
//public decimal SingleStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 单件销售运费(不参与均价计算)
/// 单件尾程销售运费(不参与均价计算)
/// </summary>
public decimal SingleDeliveryFreight { get; set; } = 0.00M;
@ -56,8 +56,13 @@
public decimal SingleOutStorageAmount { get; set; } = 0.00M;
/// <summary>
/// 退货入仓
/// 单间包装人工
/// </summary>
public decimal SingleRefundInStorageAmount { get; set; } = 0.00M;
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
///// <summary>
///// 退货入仓费
///// </summary>
//public decimal SingleRefundInStorageAmount { get; set; } = 0.00M;
}
}

2
BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs

@ -12,6 +12,6 @@ namespace BBWY.Server.Model.Dto
public ConsigneeRequest Consignee { get; set; }
public IList<CargoParamRequest> CargoParamList { get; set; }
public List<CargoParamRequest> CargoParamList { get; set; }
}
}

15
BBWY.Server.Model/Dto/Request/Sync/SkuRecentCostRequest.cs

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BBWY.Server.Model.Dto
{
public class SkuRecentCostRequest
{
public long? ShopId { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
}

2
BBWY.Server.Model/Dto/Response/BillCorrection/BillCorrectionOrderResponse.cs

@ -61,6 +61,8 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal ConsumableAmount { get; set; } = 0.00M;
public decimal PackagingLaborAmount { get; set; } = 0.00M;
/// <summary>
/// 仓储费
/// </summary>

10
BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs

@ -32,11 +32,6 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal FirstFreight { get; set; }
/// <summary>
/// 仓储费
/// </summary>
public decimal StorageAmount { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
@ -94,6 +89,11 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal ConsumableAmount { get; set; }
/// <summary>
/// 人工打包费
/// </summary>
public decimal PackagingLaborAmount { get; set; }
/// <summary>
/// 入仓操作费
/// </summary>

1
BBWY.Server.Model/MappingProfiles.cs

@ -52,6 +52,7 @@ namespace BBWY.Server.Model
.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.IsEstimateCost, opt => opt.MapFrom(f => f.IsEstimateCost))
.ForPath(t => t.OrderCost.SDCommissionAmount, opt => opt.MapFrom(f => f.SDCommissionAmount))
.ForPath(t => t.OrderCost.SDOrderAmount, opt => opt.MapFrom(f => f.SDOrderAmount))
.ForPath(t => t.OrderCost.RefundAmount, opt => opt.MapFrom(f => f.RefundAmount))

4
BBWY.Test/BBWY.Test.csproj

@ -18,8 +18,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" Version="2.6.100" />
<PackageReference Include="FreeSql" Version="3.2.805" />
<PackageReference Include="FreeSql.Provider.MySql" Version="3.2.805" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.12" />
</ItemGroup>

84
BBWY.Test/Program.cs

@ -68,49 +68,51 @@ namespace BBWY.Test
//var token = "50a4c0f5c55848b5a8a715709e8d6fe0jntb"; //卿卿玩具专营店
var fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwy_test;charset=utf8;sslmode=none;").Build();
var sercvice = new ServiceCollection();
sercvice.AddHttpClient();
var servicePriovder = sercvice.BuildServiceProvider();
var restApiService = new Common.Http.RestApiService(servicePriovder.GetRequiredService<IHttpClientFactory>());
//var sercvice = new ServiceCollection();
//sercvice.AddHttpClient();
//var servicePriovder = sercvice.BuildServiceProvider();
//var restApiService = new Common.Http.RestApiService(servicePriovder.GetRequiredService<IHttpClientFactory>());
//var files = System.IO.Directory.GetFiles(@"C:\Users\pengcong001\Desktop\bbwylog");
//var startTime = DateTime.Parse("2023-10-16");
//var endTime = DateTime.Parse("2023-11-22");
//foreach (var file in files)
//{
// var fileName = file.Substring(file.LastIndexOf("\\") + 1);
// Console.WriteLine(file);
// var lines = System.IO.File.ReadAllLines(file);
// var priceModifyMsgList = lines.Where(l => !string.IsNullOrEmpty(l) && l.Contains("ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY")).ToList();
// var orderIndex = 0;
// foreach (var priceModifyMsg in priceModifyMsgList)
// {
// orderIndex++;
// var poId = JObject.Parse(priceModifyMsg)["data"]["orderId"].ToString();
// var orderDropshipping = fsql.Select<OrderDropShipping>().Where(o => o.PurchaseOrderId == poId).ToOne();
// if (orderDropshipping == null)
// continue;
// var orderId = orderDropshipping.OrderId;
// var shopId = orderDropshipping.ShopId;
// var result = restApiService.SendRequest("http://bbwytest.qiyue666.com/", "api/test/RepairSkuDetailAndSkuGriooProfit", new
// {
// StartTime = startTime,
// EndTime = endTime,
// ShopId = shopId,
// OrderId = orderId,
// OrderIdList = new List<string>()
// }, null, HttpMethod.Post);
// Console.WriteLine($"{DateTime.Now} {fileName} {orderIndex}/{priceModifyMsgList.Count()} HttpResult{result.StatusCode}");
// Thread.Sleep(2000);
// }
// try
// {
// System.IO.File.Delete(file);
// }
// catch { }
//}
var files = System.IO.Directory.GetFiles(@"C:\Users\pengcong001\Desktop\bbwylog");
var startTime = DateTime.Parse("2023-10-16");
var endTime = DateTime.Parse("2023-11-22");
foreach (var file in files)
{
var fileName = file.Substring(file.LastIndexOf("\\") + 1);
Console.WriteLine(file);
var lines = System.IO.File.ReadAllLines(file);
var priceModifyMsgList = lines.Where(l => !string.IsNullOrEmpty(l) && l.Contains("ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY")).ToList();
var orderIndex = 0;
foreach (var priceModifyMsg in priceModifyMsgList)
{
orderIndex++;
var poId = JObject.Parse(priceModifyMsg)["data"]["orderId"].ToString();
var orderDropshipping = fsql.Select<OrderDropShipping>().Where(o => o.PurchaseOrderId == poId).ToOne();
if (orderDropshipping == null)
continue;
var orderId = orderDropshipping.OrderId;
var shopId = orderDropshipping.ShopId;
var result = restApiService.SendRequest("http://bbwytest.qiyue666.com/", "api/test/RepairSkuDetailAndSkuGriooProfit", new
{
StartTime = startTime,
EndTime = endTime,
ShopId = shopId,
OrderId = orderId,
OrderIdList = new List<string>()
}, null, HttpMethod.Post);
Console.WriteLine($"{DateTime.Now} {fileName} {orderIndex}/{priceModifyMsgList.Count()} HttpResult{result.StatusCode}");
Thread.Sleep(2000);
}
try
{
System.IO.File.Delete(file);
}
catch { }
}

4
JD.API/JD.API.csproj

@ -6,8 +6,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FreeSql" Version="2.6.100" />
<PackageReference Include="FreeSql.Provider.MySql" Version="2.6.100" />
<PackageReference Include="FreeSql" Version="3.2.805" />
<PackageReference Include="FreeSql.Provider.MySql" Version="3.2.805" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.21" />
<PackageReference Include="NLog" Version="4.7.12" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />

2
QuanTan.SDK/Model/Response/Product/QuanTanProductResponse.cs

@ -39,7 +39,7 @@ namespace QuanTan.SDK.Model
public string Logo { get; set; }
public decimal Price { get; set; }
//public decimal RetailPrice { get; set; }
public int Stock { get; set; }
public long Stock { get; set; }
//public decimal Volume { get; set; }
//public string weight { get; set; }
public string BarCode { get; set; }

Loading…
Cancel
Save