Browse Source

合并

pjzs_starttask_update
506583276@qq.com 1 year ago
parent
commit
9b85ce15a2
  1. 3
      BBWY.Client/APIServices/OrderService.cs
  2. 9
      BBWY.Client/Models/APIModel/Response/BillCorrection/BillCorrectionOrderResponse.cs
  3. 13
      BBWY.Client/Models/APIModel/Response/Order/ExportOrderResponse.cs
  4. 9
      BBWY.Client/Models/APIModel/Response/Order/OrderCostDetailResponse.cs
  5. 9
      BBWY.Client/Models/APIModel/Response/PurchaseOrder/PurchaseOrderResponse.cs
  6. 9
      BBWY.Client/Models/BillCorrection/BillCorrectionOrder.cs
  7. 59
      BBWY.Client/Models/Order/ManualEditCostOrderSku.cs
  8. 19
      BBWY.Client/Models/Order/Order.cs
  9. 39
      BBWY.Client/Models/PurchaseOrder/PurchaseOrder.cs
  10. 8
      BBWY.Client/ViewModels/Order/OrderListViewModel.cs
  11. 13
      BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs
  12. 10
      BBWY.Client/Views/BillCorrection/BillCorrectionView.xaml
  13. 10
      BBWY.Client/Views/Order/ManualCalculationCost.xaml
  14. 8
      BBWY.Client/Views/Order/OrderListControl.xaml
  15. 242
      BBWY.Client/Views/Ware/WareStock.xaml
  16. 12
      BBWY.Server.API/Controllers/TestController.cs
  17. 2
      BBWY.Server.Business/AfterSaleOrder/AfterSaleOrderBusiness.cs
  18. 6
      BBWY.Server.Business/BillCorrection/BillCorrectionBusiness.cs
  19. 7
      BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs
  20. 38
      BBWY.Server.Business/Order/OrderBusiness.cs
  21. 49
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  22. 12
      BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  23. 2
      BBWY.Server.Business/ServiceOrder/ServiceOrderBusiness.cs
  24. 23
      BBWY.Server.Business/Statistics/StatisticsBusiness.cs
  25. 21
      BBWY.Server.Business/Sync/OrderEstimateCostSyncBusiness.cs
  26. 52
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  27. 177
      BBWY.Server.Business/TestBusiness.cs
  28. 4
      BBWY.Server.Business/Vender/VenderBusiness.cs
  29. 426
      BBWY.Server.Model/Db/JDXX/Newskus.cs
  30. 18
      BBWY.Server.Model/Db/Order/OrderCostDetail.cs
  31. 26
      BBWY.Server.Model/Db/Order/SkuRecentCost.cs
  32. 39
      BBWY.Server.Model/Db/PurchaseOrder/PurchaseOrder.cs
  33. 12
      BBWY.Server.Model/Dto/Request/Order/ManualCalculationCostRequest.cs
  34. 19
      BBWY.Server.Model/Dto/Request/PurchaseOrder/AddPurchaseOrderRequest.cs
  35. 19
      BBWY.Server.Model/Dto/Request/PurchaseOrder/EditPurchaseOrderRequest.cs
  36. 2
      BBWY.Server.Model/Dto/Response/BillCorrection/BillCorrectionOrderResponse.cs
  37. 10
      BBWY.Server.Model/Dto/Response/Order/ExportOrderResponse.cs
  38. 86
      BBWY.Test/Program.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
}),

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

9
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>
/// 总计(不含销售运费 历史遗留)

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

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("导出完成", "导出"));
}

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

@ -76,6 +76,7 @@ namespace BBWY.Client.ViewModels
/// 扩展数据,暂用于拳探
/// </summary>
private string extensions;
private bool isSkuMatchError;
public _1688PreviewPurchaseViewModel(OneBoundAPIService oneBoundAPIService,
PurchaseService purchaseService,
@ -117,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 =>
{
@ -150,7 +151,10 @@ namespace BBWY.Client.ViewModels
else
{
IsLoading = false;
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案商品加载失败,请重新打开预览窗口", "提示"));
if (isSkuMatchError)
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案与当前商品页的数据匹配失败,请删除旧采购方案后重新绑定采购方案", "提示"));
else
App.Current.Dispatcher.Invoke(() => MessageBox.Show("采购方案商品加载失败,请重新打开预览窗口", "提示"));
}
});
}
@ -195,6 +199,11 @@ namespace BBWY.Client.ViewModels
}
}
});
if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => !data.Value.purchaseSchemeProductSkus.Any(s1 => s1.PurchaseSkuId == s)))
{
isSkuMatchError = true;
}
}
ewh.Set();

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>

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

@ -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}"/>

242
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 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 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 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"/>
<TextBlock Text="{Binding CreateTime,StringFormat=yyyy-MM-dd}" Grid.Column="13" Style="{StaticResource middleTextBlock}" Foreground="Gray"/>
<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.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="采购运"/>
<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">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center"
Grid.Column="4">
<TextBlock Style="{StaticResource middleTextBlock}">
<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="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>
<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="销售运"/>
<LineBreak/>
<Run Text="单价"/>
</TextBlock>
</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>
<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="总成本"/>
</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>

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

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

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)

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

38
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,9 +54,15 @@ 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)
private ISelect<Order, OrderConsignee, OrderCost, Storehouse> GetOrderListQueryConditions(SearchOrderRequest searchOrderRequest)
{
var select = fsql.Select<Order, OrderConsignee, OrderCost, Storehouse>().LeftJoin((o, ocs, oct, sh) => o.Id == ocs.OrderId)
.LeftJoin((o, ocs, oct, sh) => o.Id == oct.OrderId)
@ -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)
@ -341,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),
@ -360,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),
@ -377,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;
@ -594,7 +607,8 @@ 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.CalculationSkuGrossProfit(orderSku.ShouldPay ?? 0M,
@ -957,7 +971,8 @@ namespace BBWY.Server.Business
//SingleOperationAmount = 0,
SingleInStorageAmount = 0,
SingleOutStorageAmount = 0,
SingleStorageAmount = 0,
SinglePackagingLaborAmount = 0M,
//SingleStorageAmount = 0,
SingleSkuAmount = relationOrderSku.SingleSkuAmount,
SingleDeliveryFreight = 0
};
@ -981,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

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

@ -125,26 +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 (title.Contains("]-["))
if (attrValueAlias.Contains("{") && attrValueAlias.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();
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)

12
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();
}
@ -244,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,
@ -285,8 +287,8 @@ namespace BBWY.Server.Business
PurchaseOrderPKId = purchaseOrder.Id,
SkuAmount = currentOrderSkuProductAmount,
SkuId = orderSku.SkuId,
StorageAmount = 0,
IsEstimateCost = false
//StorageAmount = 0,
IsEstimateCost = false,
//UnitCost = purchaseOrder.UnitCost,
//TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount//purchaseOrder.UnitCost * orderSku.ItemTotal.Value
};

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

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

@ -105,7 +105,8 @@ namespace BBWY.Server.Business
var singleInStorageAmount = yesocd.InStorageAmount / q;
var singleOutStorageAmount = yesocd.OutStorageAmount / q;
var singleSkuAmount = yesocd.SkuAmount / q;
var singleStorageAmount = yesocd.StorageAmount / q;
//var singleStorageAmount = yesocd.StorageAmount / q;
var singlePackagingLaborAmount = yesocd.PackagingLaborAmount / q;
var skuRecentCost = dbSkuRecentCostList.FirstOrDefault(x => x.SkuId == yesocd.SkuId);
if (skuRecentCost != null)
@ -117,7 +118,8 @@ namespace BBWY.Server.Business
skuRecentCost.SingleInStorageAmount != singleInStorageAmount ||
skuRecentCost.SingleOutStorageAmount != singleOutStorageAmount ||
skuRecentCost.SingleSkuAmount != singleSkuAmount ||
skuRecentCost.SingleStorageAmount != singleStorageAmount)
skuRecentCost.SinglePackagingLaborAmount != singlePackagingLaborAmount)
//skuRecentCost.SingleStorageAmount != singleStorageAmount)
{
skuRecentCost.UpdateTime = DateTime.Now;
var update = fsql.Update<SkuRecentCost>(yesocd.SkuId)
@ -128,7 +130,8 @@ namespace BBWY.Server.Business
.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.SingleStorageAmount != singleStorageAmount, s => s.SingleStorageAmount, singleStorageAmount)
.SetIf(skuRecentCost.SinglePackagingLaborAmount != singlePackagingLaborAmount, s => s.SinglePackagingLaborAmount, singlePackagingLaborAmount)
.Set(s => s.UpdateTime, DateTime.Now);
updateSkuRecentCostList.Add(update);
}
@ -150,7 +153,8 @@ namespace BBWY.Server.Business
SingleInStorageAmount = singleInStorageAmount,
SingleOutStorageAmount = singleOutStorageAmount,
SingleSkuAmount = singleSkuAmount,
SingleStorageAmount = singleStorageAmount
SinglePackagingLaborAmount = singlePackagingLaborAmount
//SingleStorageAmount = singleStorageAmount
};
insertSkuRecetCostList.Add(skuRecentCost);
}
@ -267,13 +271,14 @@ namespace BBWY.Server.Business
{
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 &&
(o.StorageType == null || jcycStorageTypeList.Contains(o.StorageType)) &&
!fsql.Select<OrderCost>().Where(oc => oc.OrderId == o.Id).Any())
.ToList();
Console.WriteLine($"预估成本-{shop.ShopName},符合条件且没有成本的订单一共{orderList.Count()}个");
@ -309,7 +314,8 @@ namespace BBWY.Server.Business
src.SingleFreight,
src.SingleInStorageAmount,
src.SingleOutStorageAmount,
src.SingleStorageAmount
src.SinglePackagingLaborAmount
//src.SingleStorageAmount
});
foreach (var order in orderList)
{
@ -339,7 +345,8 @@ namespace BBWY.Server.Business
PurchaseOrderPKId = 0,
SkuAmount = (osku.SingleSkuAmount * osku.ItemTotal) ?? 0M,
SkuId = osku.SkuId,
StorageAmount = (osku.SingleStorageAmount * osku.ItemTotal) ?? 0M,
//StorageAmount = (osku.SingleStorageAmount * osku.ItemTotal) ?? 0M,
PackagingLaborAmount = (osku.SinglePackagingLaborAmount * osku.ItemTotal) ?? 0M,
IsEnabled = true,
IsEstimateCost = true
};

52
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,9 +144,9 @@ 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()
{
@ -886,7 +888,8 @@ namespace BBWY.Server.Business
OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity,
PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity,
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
//StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
PackagingLaborAmount = purchaseOrder.SinglePackagingLaborAmount * deductionQuantity,
IsEnabled = true,
IsEstimateCost = false
};
@ -915,23 +918,27 @@ namespace BBWY.Server.Business
#endregion
#region 计算成本
orderCost = new OrderCost()
//当具备订单明细成本的时候,才为其创建订单成本
if (insertOrderCostDetailList.Any(iocd => iocd.OrderId == orderId))
{
OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now,
IsEstimateCost = false
};
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else
orderCost.CalculationOrderProfitAndCost(actualAmount, null);
insertOrderCostList.Add(orderCost);
orderCost = new OrderCost()
{
OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
CreateTime = DateTime.Now,
IsEstimateCost = false
};
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else
orderCost.CalculationOrderProfitAndCost(actualAmount, null);
insertOrderCostList.Add(orderCost);
}
#endregion
}
}
@ -1105,6 +1112,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);

177
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()
@ -385,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>();
}

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

18
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;
@ -105,6 +105,12 @@ namespace BBWY.Server.Model.Db
[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>
@ -113,7 +119,7 @@ namespace BBWY.Server.Model.Db
{
get
{
return SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + StorageAmount + ConsumableAmount;
return SkuAmount + PurchaseFreight + FirstFreight + InStorageAmount + OutStorageAmount + PackagingLaborAmount + ConsumableAmount;
}
}

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

@ -68,11 +68,11 @@ namespace BBWY.Server.Model.Db
[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>
///// 退货入仓操作费(单件)
///// </summary>
//[Column(DbType = "decimal(20,2)")]
//public decimal? SingleRefundInStorageAmount { get; set; } = 0.00M;
/// <summary>
/// SKU成本(单件)
@ -80,15 +80,21 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal? SingleSkuAmount { get; set; }
/// <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;
[Column(DbType = "datetime")]
public DateTime? UpdateTime { get; set; }
/// <summary>
/// 包装人工单价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SinglePackagingLaborAmount { get; set; } = 0.00M;
}
}

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

@ -17,29 +17,13 @@ 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
/// </summary>
[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;
}
}
}

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

@ -63,12 +63,18 @@ 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;
public decimal TotalCost { get; set; } = 0M;
public decimal UnitCost { 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/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>

86
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 { }
}

Loading…
Cancel
Save