Browse Source

Merge branch 'master' of http://code.qiyue666.com/pengcong001/bbwy

AddValidOverTime
sanji 2 years ago
parent
commit
3609687eca
  1. 2
      BBWY.Client/GlobalContext.cs
  2. 10
      BBWY.Client/Models/APIModel/Response/Order/OrderResponse.cs
  3. 23
      BBWY.Client/Models/Order/Order.cs
  4. 6
      BBWY.Client/Views/Order/OrderListControl.xaml
  5. 5
      BBWY.Server.API/Controllers/TestController.cs
  6. 53
      BBWY.Server.Business/Extensions/OrderCostExtension.cs
  7. 56
      BBWY.Server.Business/Order/OrderBusiness.cs
  8. 41
      BBWY.Server.Business/PlatformSDK/JDBusiness.cs
  9. 13
      BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  10. 51
      BBWY.Server.Business/Statistics/StatisticsBusiness.cs
  11. 439
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  12. 133
      BBWY.Server.Business/TestBusiness.cs
  13. 16
      BBWY.Server.Model/Db/Order/Order.cs
  14. 6
      BBWY.Server.Model/Db/Order/OrderCoupon_New.cs
  15. 3
      BBWY.Server.Model/Db/Order/OrderPromotion.cs
  16. 15
      BBWY.Server.Model/Dto/Request/Test/RepairSkuDetailAndSkuGriooProfit.cs
  17. 150
      BBWY.Server.Model/Dto/Response/JD/OrderSkuCFDetail.cs
  18. 12
      BBWY.Server.Model/Dto/Response/Order/OrderResponse.cs
  19. 19
      BBWY.Server.Model/Dto/Response/Order/XingXinagSearchResponse.cs
  20. 1
      JD.API/Middlewares/CustomExceptionMiddleWare.cs

2
BBWY.Client/GlobalContext.cs

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

10
BBWY.Client/Models/APIModel/Response/Order/OrderResponse.cs

@ -64,6 +64,16 @@ namespace BBWY.Client.Models
/// </summary>
public decimal OrderSellerPrice { get; set; }
/// <summary>
/// 订单实收货款 (orderSellerPrice)+平台承担优惠券(PingTaiChengDanYouHuiQuan)
/// </summary>
public decimal? ActualProductAmount { get; set; } = 0.00M;
/// <summary>
/// 平台承担优惠券
/// </summary>
public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M;
/// <summary>
/// 用户应付金额
/// </summary>

23
BBWY.Client/Models/Order/Order.cs

@ -82,13 +82,30 @@ namespace BBWY.Client.Models
/// </summary>
public decimal FreightPrice { get; set; }
/// <summary>
/// 订单实收货款 (orderSellerPrice)+平台承担优惠券(PingTaiChengDanYouHuiQuan)
/// </summary>
public decimal? ActualProductAmount { get; set; } = 0.00M;
/// <summary>
/// 平台承担优惠券
/// </summary>
public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M;
/// <summary>
/// 实收金额
/// </summary>
public decimal ActualAmount { get { return OrderSellerPrice + FreightPrice; } }
public decimal ActualAmount
{
get
{
//return OrderSellerPrice + FreightPrice;
return OrderSellerPrice + FreightPrice + (PingTaiChengDanYouHuiQuan ?? 0M);
}
}
/// <summary>
/// 商家优惠金额
/// 平台优惠金额
/// </summary>
public decimal PreferentialAmount { get; set; }
@ -223,7 +240,7 @@ namespace BBWY.Client.Models
var beforeTotalCost = OrderCost?.BeforeTotalCost ?? 0M;
return OrderState != OrderState. && StorageType != Models.StorageType.SD &&
((StorageType != null && beforeTotalCost == 0M) ||
(beforeTotalCost > OrderSellerPrice + FreightPrice) ||
(beforeTotalCost > OrderSellerPrice + FreightPrice + PingTaiChengDanYouHuiQuan) ||
(StorageType == null && OrderState != OrderState. && OrderState != OrderState.));
}
}

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

@ -330,13 +330,17 @@
<ToolTip Style="{StaticResource OrderCouponToolipStyle}">
<StackPanel>
<TextBlock>
<Run Text="货款金额"/>
<Run Text="订单货款金额"/>
<Run Text="{Binding OrderSellerPrice}"/>
</TextBlock>
<TextBlock>
<Run Text="用户支付运费"/>
<Run Text="{Binding FreightPrice}"/>
</TextBlock>
<TextBlock>
<Run Text="平台承担优惠券"/>
<Run Text="{Binding PingTaiChengDanYouHuiQuan}"/>
</TextBlock>
</StackPanel>
</ToolTip>
</Path.ToolTip>

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

@ -1,5 +1,6 @@
using BBWY.Server.Business;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
@ -25,9 +26,9 @@ namespace BBWY.Server.API.Controllers
}
[HttpPost]
public void XiuFu()
public void RepairSkuDetailAndSkuGriooProfit([FromBody] RepairSkuDetailAndSkuGriooProfit request)
{
testBusiness.XiuFu();
testBusiness.RepairSkuDetailAndSkuGriooProfit(request);
}
}
}

53
BBWY.Server.Business/Extensions/OrderCostExtension.cs

@ -13,26 +13,45 @@ namespace BBWY.Server.Business.Extensions
orderCost.RefundPurchaseAmount = afterSaleOrders == null || afterSaleOrders.Count == 0M ? 0M : afterSaleOrders.Sum(aso => aso.RefundPurchaseAmount ?? 0);
//退款之后平台扣点
orderCost.PlatformCommissionAmount = (order.OrderSellerPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio);
//orderCost.PlatformCommissionAmount = (order.OrderPayment - order.FreightPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio);
orderCost.PlatformCommissionAmount = (order.OrderSellerPrice + (order.PingTaiChengDanYouHuiQuan ?? 0M) - orderCost.RefundAmount) * orderCost.PlatformCommissionRatio;
//orderCost.Profit = order.OrderSellerPrice + order.FreightPrice - orderCost.RefundAmount -
// orderCost.PurchaseAmount -
// orderCost.DeliveryExpressFreight -
// orderCost.PlatformCommissionAmount -
// orderCost.AfterTotalCost +
// orderCost.RefundPurchaseAmount;
orderCost.Profit = order.OrderSellerPrice + order.FreightPrice - orderCost.RefundAmount -
orderCost.Profit = (order.ActualProductAmount ?? 0M) -
orderCost.RefundAmount -
orderCost.PurchaseAmount -
orderCost.DeliveryExpressFreight -
orderCost.PlatformCommissionAmount -
orderCost.AfterTotalCost +
orderCost.RefundPurchaseAmount;
}
public static void CalculationOrderProfitAndCost(this OrderCost orderCost, decimal orderSellerPrice,decimal freightPrice, IList<AfterSaleOrder> afterSaleOrders)
public static void CalculationOrderProfitAndCost(this OrderCost orderCost, decimal actualAmountProduct, decimal orderSellerPrice, decimal pingtaichengdanyouhuiquan, IList<AfterSaleOrder> afterSaleOrders)
{
orderCost.AfterTotalCost = afterSaleOrders == null || afterSaleOrders.Count == 0 ? 0M : afterSaleOrders.Sum(aso => aso.AfterTotalCost);
orderCost.RefundAmount = afterSaleOrders == null || afterSaleOrders.Count == 0 ? 0M : afterSaleOrders.Sum(aso => aso.RefundAmount ?? 0M);
orderCost.RefundPurchaseAmount = afterSaleOrders == null || afterSaleOrders.Count == 0M ? 0M : afterSaleOrders.Sum(aso => aso.RefundPurchaseAmount ?? 0);
//退款之后平台扣点
orderCost.PlatformCommissionAmount = (orderSellerPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio);
//orderCost.PlatformCommissionAmount = (orderPayment - freightPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio);
orderCost.PlatformCommissionAmount = (orderSellerPrice + pingtaichengdanyouhuiquan - orderCost.RefundAmount) * orderCost.PlatformCommissionRatio;
//orderCost.Profit = orderSellerPrice + freightPrice - orderCost.RefundAmount -
// orderCost.PurchaseAmount -
// orderCost.DeliveryExpressFreight -
// orderCost.PlatformCommissionAmount -
// orderCost.AfterTotalCost +
// orderCost.RefundPurchaseAmount;
orderCost.Profit = orderSellerPrice + freightPrice - orderCost.RefundAmount -
orderCost.Profit = actualAmountProduct -
orderCost.RefundAmount -
orderCost.PurchaseAmount -
orderCost.DeliveryExpressFreight -
orderCost.PlatformCommissionAmount -
@ -52,5 +71,29 @@ namespace BBWY.Server.Business.Extensions
orderCost.PlatformCommissionAmount = (order.OrderSellerPrice - orderCost.RefundAmount) * (orderCost.PlatformCommissionRatio);
orderCost.Profit = (orderCost.SDCommissionAmount + orderCost.SDOrderAmount + orderCost.DeliveryExpressFreight + orderCost.PlatformCommissionAmount + orderCost.AfterTotalCost) * -1;
}
/// <summary>
/// 计算SKU毛利
/// </summary>
/// <param name="ocd"></param>
/// <param name="skuShouldPay"></param>
/// <param name="pingTaiChengDanYouHuiQuan"></param>
/// <param name="superRedEnvelope"></param>
/// <param name="xianPinLeiDongQuan"></param>
/// <param name="skuVenderFee"></param>
/// <param name="platformCommissionRatio"></param>
public static void CalculationSkuGrossProfit(this OrderCostDetail ocd,
decimal skuShouldPay,
decimal pingTaiChengDanYouHuiQuan,
decimal superRedEnvelope,
decimal xianPinLeiDongQuan,
decimal skuVenderFee,
decimal platformCommissionRatio)
{
var pingTaiBuTie = pingTaiChengDanYouHuiQuan + superRedEnvelope + xianPinLeiDongQuan;
var koudian = (skuShouldPay + pingTaiBuTie - skuVenderFee) * ocd.DeductionQuantity * platformCommissionRatio;
ocd.SkuGrossProfit = (skuShouldPay + pingTaiBuTie) * ocd.DeductionQuantity -
ocd.TotalCost - ocd.DeliveryExpressFreight - koudian;
}
}
}

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

@ -131,6 +131,7 @@ namespace BBWY.Server.Business
IsAfterSaleOrder = o.IsAfterSaleOrder,
SellerPreferentialAmount = o.SellerPreferentialAmount,
PreferentialAmount = o.PreferentialAmount,
PingTaiChengDanYouHuiQuan = o.PingTaiChengDanYouHuiQuan,
ContactName = ocs.ContactName,
Address = ocs.Address,
@ -592,7 +593,25 @@ namespace BBWY.Server.Business
SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity,
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity
};
orderCostDetail.SkuGrossProfit = orderSku.Price.Value * deductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * deductionQuantity * autoCalculationCostRequest.PlatformCommissionRatio;
//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,
orderSku.SuperRedEnvelope ?? 0M,
orderSku.XianPinLeiDongQuan ?? 0M,
orderSku.VenderFee ?? 0M,
autoCalculationCostRequest.PlatformCommissionRatio);
insertOrderCostDetailList.Add(orderCostDetail);
}
}
@ -660,7 +679,12 @@ namespace BBWY.Server.Business
{
osku.SkuId,
osku.Price,
osku.ItemTotal
osku.ItemTotal,
osku.ShouldPay,
osku.PingTaiChengDanYouHuiQuan,
osku.SuperRedEnvelope,
osku.XianPinLeiDongQuan,
osku.VenderFee
});
var avgPreferential = dbOrder.PreferentialAmount / orderSkuList.Count();
@ -682,9 +706,18 @@ namespace BBWY.Server.Business
var osku = orderSkuList.FirstOrDefault(o => o.SkuId == orderCostDetail.SkuId);
if (osku != null)
{
orderCostDetail.SkuGrossProfit = osku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
(orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
osku.Price.Value * orderCostDetail.DeductionQuantity * manualCalculationCostRequest.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = osku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
// (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
// osku.Price.Value * orderCostDetail.DeductionQuantity * manualCalculationCostRequest.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = ((osku.ShouldPay ?? 0M) + (osku.Coupon ?? 0M)) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight;
orderCostDetail.CalculationSkuGrossProfit(osku.ShouldPay ?? 0M,
osku.PingTaiChengDanYouHuiQuan ?? 0M,
osku.SuperRedEnvelope ?? 0M,
osku.XianPinLeiDongQuan ?? 0M,
osku.VenderFee ?? 0M,
manualCalculationCostRequest.PlatformCommissionRatio);
}
}
@ -940,9 +973,16 @@ namespace BBWY.Server.Business
var dbOrderSku = dbOrderSkuList.FirstOrDefault(dbosku => dbosku.SkuId == relationOrderSku.SkuId);
if (dbOrderSku != null)
{
orderCostDetail.SkuGrossProfit = dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
(orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity * relationPurchaseOrderRequestV2.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential -
// (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
// dbOrderSku.Price.Value * orderCostDetail.DeductionQuantity * relationPurchaseOrderRequestV2.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = ((dbOrderSku.ShouldPay ?? 0M) + dbOrderSku.Coupon ?? 0M) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight;
orderCostDetail.CalculationSkuGrossProfit(dbOrderSku.ShouldPay ?? 0M,
dbOrderSku.PingTaiChengDanYouHuiQuan ?? 0M,
dbOrderSku.SuperRedEnvelope ?? 0M,
dbOrderSku.XianPinLeiDongQuan ?? 0M,
dbOrderSku.VenderFee ?? 0M,
relationPurchaseOrderRequestV2.PlatformCommissionRatio);
}
#endregion
}

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

@ -138,7 +138,10 @@ namespace BBWY.Server.Business
var pageSize = 20;
var totalPageSize = 1;
if (!string.IsNullOrEmpty(searchProductSkuRequest.Spu))
{
totalPageSize = 1;
searchProductSkuRequest.IsCheckSkuCount = false;
}
else if (!string.IsNullOrEmpty(searchProductSkuRequest.Sku))
{
skuIdList = searchProductSkuRequest.Sku.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
@ -182,7 +185,9 @@ namespace BBWY.Server.Business
{
var targetSkuIdList = skuList.Select(s => s.Id);
var exceptSkuIdList = skuIdList.Except(targetSkuIdList);
throw new BusinessException($"{searchProductSkuRequest.CheckStep}-sku条件数量和查询结果数量不一致\r\n{string.Join(",", exceptSkuIdList)}");
// throw new BusinessException($"{searchProductSkuRequest.CheckStep}-sku条件数量和查询结果数量不一致\r\n{string.Join(",", exceptSkuIdList)}");
//throw new BusinessException($"{JsonConvert.SerializeObject(skuIdList)} 以上SKU可能已下架,请修改任务将该SKU移除奶妈列表");
throw new BusinessException($"以上{searchProductSkuRequest.CheckStep}状态异常,可能被系统自动下架,请检查任务的精简标题是否正确\r\n{string.Join(",", exceptSkuIdList)}");
}
return skuList;
@ -852,6 +857,15 @@ namespace BBWY.Server.Business
}
}
private string SkuShangJiaFanYi(string errorMsg)
{
if (errorMsg.Contains("销售属性值组合重复") && errorMsg.Contains("业务要求唯一性"))
errorMsg = "该任务已上架赠品,请手动下架赠品,系统10分钟后将自动重新启动该任务";
if (errorMsg.Contains("属性[产品尺寸]扩展值数量与值数量不一致"))
errorMsg = "上架赠品失败,评价助手暂无法上架带有[产品尺寸]的商品,请手动上架赠品后在评价助手创建已上架赠品模式";
return errorMsg;
}
public override StartPromotionTaskResponse StartJDPromotionTask(StartPromotionTaskRequest2 request)
{
var stepText = string.Empty;
@ -886,7 +900,7 @@ namespace BBWY.Server.Business
{
stepText = "查询奶妈模板SKU";
searchProductSkuRequest.Sku = request.MotherTemplateSku;
searchProductSkuRequest.CheckStep = "奶妈模板";
searchProductSkuRequest.CheckStep = "奶妈模板SKU";
motherTemplateSkuList = GetProductSkuList(searchProductSkuRequest);
}
#endregion
@ -896,7 +910,7 @@ namespace BBWY.Server.Business
{
stepText = "查询自定义奶妈SKU";
searchProductSkuRequest.Sku = request.CustomMotherSku;
searchProductSkuRequest.CheckStep = "自定义奶妈";
searchProductSkuRequest.CheckStep = "自定义奶妈SKU";
customerMotherSkuList = GetProductSkuList(searchProductSkuRequest);
}
#endregion
@ -906,7 +920,7 @@ namespace BBWY.Server.Business
{
stepText = "查询主商品SKU";
searchProductSkuRequest.Sku = request.MainProductSku;
searchProductSkuRequest.CheckStep = "主商品";
searchProductSkuRequest.CheckStep = "主商品SKU";
mainProductSkuList = GetProductSkuList(searchProductSkuRequest);
if (mainProductSkuList != null && mainProductSkuList.Any(s => s.ProductId != request.MainProductSpu))
throw new BusinessException("主商品SKU归属有误");
@ -918,7 +932,7 @@ namespace BBWY.Server.Business
{
stepText = "查询主商品赠品SKU";
searchProductSkuRequest.Sku = request.MainProductGiftSku;
searchProductSkuRequest.CheckStep = "主商品赠品";
searchProductSkuRequest.CheckStep = "赠品SKU";
giftSkuList = GetProductSkuList(searchProductSkuRequest);
giftSkuIdList = giftSkuList.Select(gs => gs.Id).ToList();
@ -1137,12 +1151,14 @@ namespace BBWY.Server.Business
errorMsg = res.Body.Contains("en_desc") ?
res.Json["error_response"].Value<string>("en_desc") :
(string.IsNullOrEmpty(res.ErrorMsg) ? res.ErrMsg : res.ErrorMsg);
errorMsg = SkuShangJiaFanYi(errorMsg);
RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false);
throw new BusinessException($"上架sku失败-{errorMsg}");
}
}
else
{
errorMsg = SkuShangJiaFanYi(errorMsg);
RollBackWhenStartPromotionError(request.AppKey, request.AppSecret, request.AppToken, null, request.MainProductSpu, request.FullTitle, brandName, false);
throw new BusinessException($"上架sku失败-{errorMsg}");
}
@ -1424,6 +1440,9 @@ namespace BBWY.Server.Business
ddMsg.AppendLine($"任务奶妈数:{request.JoinSkuCount}");
ddMsg.AppendLine($"参与奶妈数:{lastQueryJoinCount}");
ddMsg.AppendLine("参与任务的奶妈数异常请检查");
//ddMsg.AppendLine("以上SKU可能已下架或同时参与多个赠品促销活动");
//ddMsg.AppendLine("1.如已下架请将对应的SKU移除奶妈列表");
//ddMsg.AppendLine("2.系统会自动剔除同时参与多个赠品促销的SKU,请检查以上SKU是否在失效的促销活动,请及时删除,已暂停或已停止的促销活动");
}
if (!string.IsNullOrEmpty(request.PJZSDingDingKey) && !string.IsNullOrEmpty(request.PJZSDingDingWebHook))
dingDingBusiness.SendDingDingBotMessage(request.PJZSDingDingKey, request.PJZSDingDingWebHook, ddMsg.ToString());
@ -1693,10 +1712,10 @@ namespace BBWY.Server.Business
public override JToken GetOrderCouponDetail(QueryOrderCouponDetailRequest request)
{
var jdClient = GetJdClient(request.AppKey, request.AppSecret);
var req = new PopOrderCoupondetailRequest();
req.orderId = Convert.ToInt64(request.OrderId);
//var req = new PopOrderCoupondetailRequest();
var req = new PopOrderQueryCouponDetaiRequest();
req.orderId = request.OrderId;
var res = jdClient.Execute(req, request.AppToken, DateTime.Now.ToLocalTime());
if (res.Json == null)
@ -1762,7 +1781,7 @@ namespace BBWY.Server.Business
public override JToken GetProductById(GetProductByIdRequest request)
{
var jdClient = GetJdClient(request.AppKey, request.AppSecret);
var req = new WareReadFindWareByIdRequest() { wareId = request.SpuId};
var req = new WareReadFindWareByIdRequest() { wareId = request.SpuId };
if (request.Field != null)
req.field = request.Field;
@ -1777,9 +1796,9 @@ namespace BBWY.Server.Business
public override JToken GetAttrsByCategoryId(GetAttrsByCategoryIdRequest request)
{
var jdClient = GetJdClient(request.AppKey, request.AppSecret);
var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest() { cid=request.CatId};
var req = new CategoryReadFindAttrsByCategoryIdUnlimitCateRequest() { cid = request.CatId };
if(request.AttributeType!=null)
if (request.AttributeType != null)
req.attributeType = request.AttributeType;
if (request.Field != null)
req.field = request.Field;

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

@ -13,7 +13,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Yitter.IdGenerator;
using BBWY.Server.Business.Extensions;
namespace BBWY.Server.Business
{
public class PurchaseOrderBusiness : BaseBusiness, IDenpendency
@ -263,7 +263,16 @@ namespace BBWY.Server.Business
//UnitCost = purchaseOrder.UnitCost,
//TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount//purchaseOrder.UnitCost * orderSku.ItemTotal.Value
};
orderCostDetail.SkuGrossProfit = orderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * orderCostDetail.DeductionQuantity * createOnlinePurchaseOrderRequest.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = orderSku.Price.Value * orderCostDetail.DeductionQuantity - avgPreferential - (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) - orderSku.Price.Value * orderCostDetail.DeductionQuantity * createOnlinePurchaseOrderRequest.PlatformCommissionRatio;
//orderCostDetail.SkuGrossProfit = ((orderSku.ShouldPay ?? 0M) + orderSku.Coupon ?? 0M) * orderCostDetail.DeductionQuantity - orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight;
orderCostDetail.CalculationSkuGrossProfit(orderSku.ShouldPay ?? 0M,
orderSku.PingTaiChengDanYouHuiQuan ?? 0M,
orderSku.SuperRedEnvelope ?? 0M,
orderSku.XianPinLeiDongQuan ?? 0M,
orderSku.VenderFee ?? 0M,
createOnlinePurchaseOrderRequest.PlatformCommissionRatio);
insertOrderCostDetails.Add(orderCostDetail);
#endregion
}

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

@ -144,7 +144,8 @@ namespace BBWY.Server.Business
return list;
}
private void XingXiangCumulative(IList<XingXiangItemResponse> detailList, string spuId, bool isSD, decimal profit, decimal spuProductAmount, decimal sdProductAmount, decimal sdCost)
private void XingXiangCumulative(IList<XingXiangItemResponse> detailList,
string spuId, bool isSD, decimal profit, decimal actualAmount, decimal sdCost)
{
var xxRespose = detailList.FirstOrDefault(xx => xx.Spu == spuId);
if (xxRespose == null)
@ -153,11 +154,11 @@ namespace BBWY.Server.Business
detailList.Add(xxRespose);
}
xxRespose.Profit += profit;
xxRespose.ActualAmount += spuProductAmount;
xxRespose.ActualAmount += actualAmount;
if (isSD)
{
xxRespose.SDOrderCount++;
xxRespose.SDOrderAmount += sdProductAmount;
xxRespose.SDOrderAmount += actualAmount;
xxRespose.SDOrderCost += sdCost;
}
}
@ -207,6 +208,7 @@ namespace BBWY.Server.Business
var spuIdList = orderSkuList.Select(osku => osku.ProductId).Distinct().ToList();
List<GOIBySpu> spuGoiList = null;
GOIByShop shopGoi = null;
#region spu goi
{
var httpResult = restApiService.SendRequest("http://snapi.qiyue666.com/", "Api/GOI/QueryPopularizeLevelGOIBySpuId", new
@ -246,45 +248,49 @@ namespace BBWY.Server.Business
if (order.StorageType == Enums.StorageType.SD)
{
XingXiangCumulative(detailList, currentOrderSkuList[0].ProductId, true, order.Profit ?? 0M, order.OrderSellerPrice, order.OrderSellerPrice + order.FreightPrice, Math.Abs(order.Profit ?? 0M));
//XingXiangCumulative(detailList, currentOrderSkuList[0].ProductId, true, order.Profit ?? 0M, order.OrderSellerPrice, order.OrderSellerPrice + order.FreightPrice, Math.Abs(order.Profit ?? 0M));
XingXiangCumulative(detailList, currentOrderSkuList[0].ProductId, true, order.Profit ?? 0M, order.OrderSellerPrice + order.FreightPrice, Math.Abs(order.Profit ?? 0M));
continue;
}
var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id);
var spuGroups = currentOrderSkuList.GroupBy(osku => osku.ProductId);
var tempOrderProdcutAmount = currentOrderSkuList.Sum(osku => osku.ItemTotal * osku.Price) ?? 0M;
var tempOrderCost = currentOrderCostDetailList.Count() > 0 ? currentOrderCostDetailList.Sum(ocd => ocd.TotalCost) : 0M;
var tempOrderProfit = tempOrderProdcutAmount - tempOrderCost;
//var tempOrderProdcutAmount = currentOrderSkuList.Sum(osku => osku.ItemTotal * osku.Price) ?? 0M;
//var tempOrderCost = currentOrderCostDetailList.Count() > 0 ? currentOrderCostDetailList.Sum(ocd => ocd.TotalCost) : 0M;
//var tempOrderProfit = tempOrderProdcutAmount - tempOrderCost;
foreach (var spuGroup in spuGroups)
{
var currentSpuCostDetailList = currentOrderCostDetailList.Where(ocd => ocd.ProductId == spuGroup.Key);
var currentSkuOrderSkuList = currentOrderSkuList.Where(osku => osku.ProductId == spuGroup.Key);
var totalActualAmount = currentSkuOrderSkuList.Sum(osku => osku.ShouldPay ?? 0M);
var totalProfit = currentSpuCostDetailList.Sum(ocd => ocd.SkuGrossProfit);
var tempSpuProductAmount = spuGroup.Sum(osku => osku.Price * osku.ItemTotal) ?? 0M;
var tempSpuCost = currentSpuCostDetailList.Count() > 0 ? currentSpuCostDetailList.Sum(ocd => ocd.TotalCost) : 0M;
var tempSpuProfit = tempSpuProductAmount - tempSpuCost;
var spuProfitPercent = tempOrderProfit == 0M ? 0M : tempSpuProfit / tempOrderProfit;
XingXiangCumulative(detailList, spuGroup.Key, false, totalProfit, totalActualAmount, 0);
var realSpuProfit = (order.Profit ?? 0M) * spuProfitPercent;
XingXiangCumulative(detailList, spuGroup.Key, false, realSpuProfit, tempSpuProductAmount, 0, 0);
//var tempSpuProductAmount = spuGroup.Sum(osku => osku.Price * osku.ItemTotal) ?? 0M;
//var tempSpuCost = currentSpuCostDetailList.Count() > 0 ? currentSpuCostDetailList.Sum(ocd => ocd.TotalCost) : 0M;
//var tempSpuProfit = tempSpuProductAmount - tempSpuCost;
//var spuProfitPercent = tempOrderProfit == 0M ? 0M : tempSpuProfit / tempOrderProfit;
//var realSpuProfit = (order.Profit ?? 0M) * spuProfitPercent;
//XingXiangCumulative(detailList, spuGroup.Key, false, realSpuProfit, tempSpuProductAmount, 0, 0);
}
}
var shopProductAmount = orderSkuList.Sum(osku => osku.ItemTotal * osku.Price);
//var shopProductAmount = orderSkuList.Sum(osku => osku.ItemTotal * osku.Price);
var shopActualAmount = orderSkuList.Sum(osku => osku.ShouldPay ?? 0M);
foreach (var d in detailList)
{
var spuGoi = spuGoiList?.FirstOrDefault(x => x.Spu == d.Spu);
if (spuGoi != null)
{
var productAmount = orderSkuList.Where(osku => osku.ProductId == d.Spu).Sum(osku => osku.ItemTotal * osku.Price);
d.SpuYingLiRatio = Math.Round((spuGoi.Profit - spuGoi.Cost) / productAmount.Value, 2);
//d.SpuYingLiRatio = Math.Round((d.Profit - spuGoi.Cost) / productAmount.Value, 2);
//var spuActualAmount = orderSkuList.Where(osku => osku.ProductId == d.Spu).Sum(osku => osku.ShouldPay ?? 0M);
d.SpuYingLiRatio = d.ActualAmount == 0 ? 0 : Math.Round((spuGoi.Profit - spuGoi.Cost) / d.ActualAmount, 2);
}
d.ShopYingLiRatio = shopProductAmount == 0 ? 0 : Math.Round((shopGoi.Profit - shopGoi.Cost) / shopProductAmount.Value, 2);
d.ShopProfitRatio = shopProductAmount == 0 ? 0 : Math.Round(shopGoi.Profit / shopProductAmount.Value, 2);
}
@ -297,8 +303,9 @@ namespace BBWY.Server.Business
TotalSDOrderCount = sdOrderList.Count(),
TotalSDOrderCost = detailList.Sum(xx => xx.SDOrderCost),
TotalProfit = detailList.Sum(xx => xx.Profit),
ShopYingLiRatio = detailList.FirstOrDefault()?.ShopYingLiRatio,
ShopProfitRatio = detailList.FirstOrDefault()?.ShopProfitRatio
ShopYingLiRatio = shopActualAmount == 0 ? 0 : Math.Round((shopGoi.Profit - shopGoi.Cost) / shopActualAmount, 2),
ShopProfitRatio = shopActualAmount == 0 ? 0 : Math.Round(shopGoi.Profit / shopActualAmount, 2),
ShopActualAmount = shopActualAmount
};
}

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

@ -10,13 +10,10 @@ using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
using Yitter.IdGenerator;
@ -98,7 +95,7 @@ namespace BBWY.Server.Business
}
private void SyncOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false, Enums.SortTimeType? sortTimeType = null)
public void SyncOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false, Enums.SortTimeType? sortTimeType = null)
{
try
{
@ -211,6 +208,8 @@ namespace BBWY.Server.Business
List<OrderSku> insertOrderSkuList = new List<OrderSku>();
List<OrderCoupon> insertOrderCouponList = new List<OrderCoupon>();
List<OrderTotalInfo> insertOrderTotalInfoList = new List<OrderTotalInfo>();
List<OrderCoupon_New> insertOrderCouponNewList = new List<OrderCoupon_New>();
List<OrderPromotion> insertOrderPromotionList = new List<OrderPromotion>();
IList<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
Dictionary<string, IUpdate<OrderSku>> updateOrderSkuDictionary = new Dictionary<string, IUpdate<OrderSku>>();
@ -259,6 +258,8 @@ namespace BBWY.Server.Business
//var dbOrderCouponNewList = fsql.Select<OrderCoupon_New>().Where(ocn => interfaceOrderIdList.Contains(ocn.OrderId)).ToList();
//var dbOrderPromotionList = fsql.Select<OrderPromotion>().Where(op => interfaceOrderIdList.Contains(op.OrderId)).ToList();
var dbOrderTotalList = fsql.Select<OrderTotalInfo>().Where(ot => interfaceOrderIdList.Contains(ot.Id)).ToList();
var orderSkuCFDetailList = new List<OrderSkuCFDetail>();
#endregion
var orderSkuIds = new List<string>();
@ -278,12 +279,182 @@ namespace BBWY.Server.Business
foreach (var orderJToken in validOrders)
{
var orderId = orderJToken.Value<string>("orderId");
try
{
if (insertOrderList.Any(o => o.Id == orderId))
continue;
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId);
var dbOrderTotal = dbOrderTotalList.FirstOrDefault(o => o.Id == orderId);
var isNewOrder = dbOrder == null;
SDCalculationCostRequest sDCalculationCostRequest = null; //SD信息埋点
#region 优惠券/促销/拆分明细
if (!dbOrderTotalList.Any(ot => ot.Id == orderId))
{
Thread.Sleep(2000);
var orderCouponDetailHttpResult = restApiService.SendRequest("http://yunding.qiyue666.com", "api/PlatformSDK/GetOrderCouponDetail", new
{
OrderId = orderId,
AppKey = appKey,
AppSecret = appSecret,
AppToken = appToken,
Platform = Enums.Platform.
}, null, HttpMethod.Post);
if (orderCouponDetailHttpResult.StatusCode == System.Net.HttpStatusCode.OK)
{
var orderCouponDetailResponse = JsonConvert.DeserializeObject<ApiResponse<JToken>>(orderCouponDetailHttpResult.Content);
if (orderCouponDetailResponse.Success)
{
var jtoken = orderCouponDetailResponse.Data["jingdong_pop_order_queryCouponDetai_responce"]["couponDetailExternal"]["couponDetailVo"];
#region 订单合计信息
var orderTotal = new OrderTotalInfo()
{
CreateTime = DateTime.Now,
Id = orderId,
TotalBalance = jtoken.Value<decimal>("totalBalance"),
TotalBaseDiscount = jtoken.Value<decimal>("TotalBaseDiscount"),
TotalBaseFee = jtoken.Value<decimal>("totalBaseFee"),
TotalCoupon = jtoken.Value<decimal>("totalCoupon"),
TotalDongQuan = jtoken.Value<decimal>("totalDongQuan"),
TotalExpiryGiftDiscount = jtoken.Value<decimal>("totalExpiryGiftDiscount"),
TotalGlobalGeneralIncludeTax = jtoken.Value<decimal>("totalGlobalGeneralIncludeTax"),
TotalGlobalGeneralTax = jtoken.Value<decimal>("totalGlobalGeneralTax"),
TotalItemPrice = jtoken.Value<decimal>("totalItemPrice"),
TotalJdZhiFuYouHui = jtoken.Value<decimal>("totalJdZhiFuYouHui"),
TotalJingDou = jtoken.Value<decimal>("totalJingDou"),
TotalJingQuan = jtoken.Value<decimal>("totalJingQuan"),
TotalJingXiangLiJin = jtoken.Value<decimal>("totalJingXiangLiJin"),
TotalLiJinYouHui = jtoken.Value<decimal>("totalLiJinYouHui"),
TotalLuoDiPeiService = jtoken.Value<decimal>("totalLuoDiPeiService"),
TotalManJian = jtoken.Value<decimal>("totalManJian"),
TotalPingTaiChengDanYouHuiQuan = jtoken.Value<decimal>("totalPingTaiChengDanYouHuiQuan"),
TotalPlus95 = jtoken.Value<decimal>("totalPlus95"),
TotalPromotionDiscount = jtoken.Value<decimal>("totalPromotionDiscount"),
TotalRemoteFee = jtoken.Value<decimal>("totalRemoteFee"),
TotalShouldPay = jtoken.Value<decimal>("totalShouldPay"),
TotalSuperRedEnvelope = jtoken.Value<decimal>("totalSuperRedEnvelope"),
TotalTaxFee = jtoken.Value<decimal>("totalTaxFee"),
TotalTuiHuanHuoWuYou = jtoken.Value<decimal>("totalTuiHuanHuoWuYou"),
TotalVenderFee = jtoken.Value<decimal>("totalVenderFee"),
TotalXianPinLeiDongQuan = jtoken.Value<decimal>("totalXianPinLeiDongQuan"),
TotalXianPinLeiJingQuan = jtoken.Value<decimal>("totalXianPinLeiJingQuan"),
TotalZhiFuYingXiaoYouHui = jtoken.Value<decimal>("totalZhiFuYingXiaoYouHui")
};
insertOrderTotalInfoList.Add(orderTotal);
#endregion
#region 订单优惠券信息
var couponJArray = jtoken["couponList"] as JArray;
if (couponJArray != null && couponJArray.Count() > 0)
{
insertOrderCouponNewList.AddRange(couponJArray.Select(j => new OrderCoupon_New()
{
Id = idGenerator.NewLong(),
CouponId = j.Value<int>("couponId"),
CouponName = j.Value<string>("couponName"),
CouponNum = j.Value<int>("couponNum"),
CouponPrice = j.Value<decimal>("couponPrice"),
CouponTypeDesc = j.Value<string>("couponTypeDesc"),
CreateTime = DateTime.Now,
JdCouponId = j.Value<string>("jdCouponId"),
JdDivideMoney = j.Value<decimal>("jdDivideMoney"),
OrderId = orderId,
PriceDivide = j.Value<bool>("priceDivide"),
VenderDivideMoney = j.Value<decimal>("venderDivideMoney")
}));
}
#endregion
#region 订单活动信息
var promotionJArray = jtoken["promotionList"] as JArray;
if (promotionJArray != null && promotionJArray.Count() > 0)
{
insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion()
{
Id = idGenerator.NewLong(),
BeginTime = j.Value<DateTime>("beginTime"),
EndTime = j.Value<DateTime>("endTime"),
CreateTime = DateTime.Now,
OrderId = orderId,
PromotionId = j.Value<long>("promotionId"),
PromotionName = j.Value<string>("promotionName"),
SalePrice = j.Value<decimal>("salePrice"),
SaleTypeDesc = j.Value<string>("saleTypeDesc")
}));
}
#endregion
#region 订单sku金额明细
var skuJArray = jtoken["skuList"] as JArray;
if (skuJArray != null && skuJArray.Count() > 0)
{
foreach (var oskuJtoken in skuJArray)
{
var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray;
decimal? xianPinLeiDongQuan = 0M;
if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0)
{
foreach (var item1 in skuDiscountInfoList)
{
var discountTypeList = item1["discountTypeList"] as JArray;
if (discountTypeList != null && discountTypeList.Count() > 0)
{
foreach (var discountType in discountTypeList)
{
if (discountType.Value<int>("type") == 6)
xianPinLeiDongQuan += discountType.Value<decimal>("amount");
}
}
}
}
if (xianPinLeiDongQuan == 0M)
xianPinLeiDongQuan = oskuJtoken.Value<decimal>("xianPinLeiDongQuan");
var oskuCF = new OrderSkuCFDetail()
{
OrderId = orderId,
SkuId = oskuJtoken.Value<string>("skuCode"),
Balance = oskuJtoken.Value<decimal>("balance"),
BaseDiscount = oskuJtoken.Value<decimal>("baseDiscount"),
BaseFee = oskuJtoken.Value<decimal>("baseFee"),
Coupon = oskuJtoken.Value<decimal>("coupon"),
DongQuan = oskuJtoken.Value<decimal>("dongQuan"),
ExpiryGiftDiscount = oskuJtoken.Value<decimal>("expiryGiftDiscount"),
GlobalGeneralIncludeTax = oskuJtoken.Value<decimal>("globalGeneralIncludeTax"),
GlobalGeneralTax = oskuJtoken.Value<decimal>("globalGeneralTax"),
JdZhiFuYouHui = oskuJtoken.Value<decimal>("jdZhiFuYouHui"),
JingDou = oskuJtoken.Value<decimal>("jingDou"),
JingQuan = oskuJtoken.Value<decimal>("jingQuan"),
JingXiangLiJin = oskuJtoken.Value<decimal>("jingXiangLiJin"),
LiJinYouHui = oskuJtoken.Value<decimal>("liJinYouHui"),
LuoDiPeiService = oskuJtoken.Value<decimal>("luoDiPeiService"),
ManJian = oskuJtoken.Value<decimal>("manJian"),
PingTaiChengDanYouHuiQuan = oskuJtoken.Value<decimal>("pingTaiChengDanYouHuiQuan"),
Plus95 = oskuJtoken.Value<decimal>("plus95"),
PromotionDiscount = oskuJtoken.Value<decimal>("promotionDiscount"),
RemoteFee = oskuJtoken.Value<decimal>("remoteFee"),
ShouldPay = oskuJtoken.Value<decimal>("shouldPay"),
SuperRedEnvelope = oskuJtoken.Value<decimal>("superRedEnvelope"),
TaxFee = oskuJtoken.Value<decimal>("taxFee"),
TuiHuanHuoWuYou = oskuJtoken.Value<decimal>("tuiHuanHuoWuYou"),
VenderFee = oskuJtoken.Value<decimal>("venderFee"),
XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐
XianPinLeiJingQuan = oskuJtoken.Value<decimal>("xianPinLeiJingQuan"),
ZhiFuYingXiaoYouHui = oskuJtoken.Value<decimal>("zhiFuYingXiaoYouHui")
};
orderSkuCFDetailList.Add(oskuCF);
}
}
#endregion
}
}
}
#endregion
#region 订单基本信息
var buyerRemark = orderJToken.Value<string>("orderRemark");
var venderRemark = orderJToken.Value<string>("venderRemark");
@ -298,9 +469,19 @@ namespace BBWY.Server.Business
var storeOrder = orderJToken.Value<string>("storeOrder") ?? string.Empty;
var storeId = orderJToken.Value<string>("storeId");
var storageType = ConvertStoreOrder(storeOrder);
var preferentialAmount = 0M;
decimal? actualProductAmount = 0M;
decimal? preferentialAmount = 0M;
decimal? pingtaiChengDanYouHuiQuan = 0M;
if (dbOrder == null)
{
var orderTotalInfo = insertOrderTotalInfoList.FirstOrDefault(x => x.Id == orderId);
//actualProductAmount = orderPayment - freightPrice + pingtaibutie;
pingtaiChengDanYouHuiQuan = (orderTotalInfo?.TotalPingTaiChengDanYouHuiQuan ?? 0M);
actualProductAmount = orderSellerPrice + pingtaiChengDanYouHuiQuan;
//preferentialAmount = orderTotalPrice - (actualProductAmount ?? 0M) - freightPrice;
preferentialAmount = orderTotalPrice - (actualProductAmount ?? 0M);
dbOrder = new Order()
{
Id = orderId,
@ -310,7 +491,7 @@ namespace BBWY.Server.Business
EndTime = endTime,
StartTime = orderJToken.Value<DateTime>("orderStartTime"),
ModifyTime = modifyTime,
OrderPayment = orderPayment,
OrderPayment = orderPayment, //(orderTotalInfo?.TotalShouldPay) ?? orderPayment,
SellerPreferentialAmount = sellerPreferentialAmount,
OrderSellerPrice = orderSellerPrice,
OrderTotalPrice = orderTotalPrice,
@ -322,7 +503,11 @@ namespace BBWY.Server.Business
StoreOrder = storeOrder,
StoreId = storeId,
IsGift = orderSellerPrice == 0M,
StorageType = storageType
StorageType = storageType,
//PreferentialAmount = (orderTotalInfo?.TotalPingTaiChengDanYouHuiQuan) ?? 0M,
ActualProductAmount = actualProductAmount ?? 0M,
PreferentialAmount = preferentialAmount ?? 0M,
PingTaiChengDanYouHuiQuan = pingtaiChengDanYouHuiQuan ?? 0M
};
if (memoryCache.TryGetValue(orderId, out sDCalculationCostRequest))
@ -355,6 +540,8 @@ namespace BBWY.Server.Business
//if (orderSkuJToken.Value<decimal>("jdPrice") != 0M)
//{
var oskuCF = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == skuId);
var osku = new OrderSku()
{
Id = idGenerator.NewLong(),
@ -365,7 +552,34 @@ namespace BBWY.Server.Business
ProductNo = orderSkuJToken.Value<string>("productNo"),
CreateTime = DateTime.Now,
OrderId = orderId,
SkuId = skuId
SkuId = skuId,
Balance = oskuCF?.Balance ?? 0M,
BaseDiscount = oskuCF?.BaseFee ?? 0M,
BaseFee = oskuCF?.BaseFee ?? 0M,
Coupon = oskuCF?.Coupon ?? 0M,
DongQuan = oskuCF?.DongQuan ?? 0M,
ExpiryGiftDiscount = oskuCF?.ExpiryGiftDiscount ?? 0M,
GlobalGeneralIncludeTax = oskuCF?.GlobalGeneralIncludeTax ?? 0M,
GlobalGeneralTax = oskuCF?.GlobalGeneralTax ?? 0M,
JdZhiFuYouHui = oskuCF?.JdZhiFuYouHui ?? 0M,
JingDou = oskuCF?.JingDou ?? 0M,
JingQuan = oskuCF?.JingQuan ?? 0M,
JingXiangLiJin = oskuCF?.JingXiangLiJin ?? 0M,
LiJinYouHui = oskuCF?.LiJinYouHui ?? 0M,
LuoDiPeiService = oskuCF?.LuoDiPeiService ?? 0M,
ManJian = oskuCF?.ManJian ?? 0M,
PingTaiChengDanYouHuiQuan = oskuCF?.PingTaiChengDanYouHuiQuan ?? 0M,
Plus95 = oskuCF?.Plus95 ?? 0M,
PromotionDiscount = oskuCF?.PromotionDiscount ?? 0M,
RemoteFee = oskuCF?.RemoteFee ?? 0M,
ShouldPay = oskuCF?.ShouldPay ?? 0M,
SuperRedEnvelope = oskuCF?.SuperRedEnvelope ?? 0M,
TaxFee = oskuCF?.TaxFee ?? 0M,
TuiHuanHuoWuYou = oskuCF?.TuiHuanHuoWuYou ?? 0M,
VenderFee = oskuCF?.VenderFee ?? 0M,
XianPinLeiDongQuan = oskuCF?.XianPinLeiDongQuan ?? 0M,
XianPinLeiJingQuan = oskuCF?.XianPinLeiJingQuan ?? 0M,
ZhiFuYingXiaoYouHui = oskuCF?.ZhiFuYingXiaoYouHui ?? 0M
};
insertOrderSkuList.Add(osku);
//}
@ -376,6 +590,15 @@ namespace BBWY.Server.Business
}
else
{
var orderTotalInfo = insertOrderTotalInfoList.FirstOrDefault(x => x.Id == orderId);
if (orderTotalInfo == null)
orderTotalInfo = dbOrderTotalList.FirstOrDefault(x => x.Id == orderId);
pingtaiChengDanYouHuiQuan = (orderTotalInfo?.TotalPingTaiChengDanYouHuiQuan ?? 0M);
actualProductAmount = orderSellerPrice + pingtaiChengDanYouHuiQuan;
//preferentialAmount = orderTotalPrice - (actualProductAmount ?? 0M) - freightPrice;
preferentialAmount = orderTotalPrice - (actualProductAmount ?? 0M);
//preferentialAmount = dbOrder.PreferentialAmount;
if (storageType != null && dbOrder.StorageType != storageType)
dbOrder.StorageType = storageType;
@ -391,14 +614,48 @@ namespace BBWY.Server.Business
var wareId = orderSkuJToken.Value<string>("wareId");
var skuId = orderSkuJToken.Value<string>("skuId");
var dbOsku = currentDbOrderSkuList.FirstOrDefault(osku => osku.SkuId == skuId);
var skuUpdateKey = $"";
if (dbOsku != null && dbOsku.ProductId != wareId && !updateOrderSkuDictionary.ContainsKey(skuUpdateKey))
{
var update = fsql.Update<OrderSku>(dbOsku.Id).Set(osku => osku.ProductId, wareId);
var skuUpdateKey = $"{orderId}_{skuId}";
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;
if (dbOsku.ProductId != wareId || isDetailChanged)
{
var update = fsql.Update<OrderSku>(dbOsku.Id)
.SetIf(dbOsku.ProductId != wareId, osku => osku.ProductId, wareId)
.SetIf(isDetailChanged, osku => osku.ShouldPay, oskuCF?.ShouldPay)
.SetIf(isDetailChanged, osku => osku.Balance, oskuCF?.Balance)
.SetIf(isDetailChanged, osku => osku.BaseDiscount, oskuCF?.BaseDiscount)
.SetIf(isDetailChanged, osku => osku.BaseFee, oskuCF?.BaseFee)
.SetIf(isDetailChanged, osku => osku.Coupon, oskuCF?.Coupon)
.SetIf(isDetailChanged, osku => osku.DongQuan, oskuCF?.DongQuan)
.SetIf(isDetailChanged, osku => osku.ExpiryGiftDiscount, oskuCF?.ExpiryGiftDiscount)
.SetIf(isDetailChanged, osku => osku.GlobalGeneralIncludeTax, oskuCF?.GlobalGeneralIncludeTax)
.SetIf(isDetailChanged, osku => osku.GlobalGeneralTax, oskuCF?.GlobalGeneralTax)
.SetIf(isDetailChanged, osku => osku.JdZhiFuYouHui, oskuCF?.JdZhiFuYouHui)
.SetIf(isDetailChanged, osku => osku.JingDou, oskuCF?.JingDou)
.SetIf(isDetailChanged, osku => osku.JingQuan, oskuCF?.JingQuan)
.SetIf(isDetailChanged, osku => osku.JingXiangLiJin, oskuCF?.JingXiangLiJin)
.SetIf(isDetailChanged, osku => osku.LiJinYouHui, oskuCF?.LiJinYouHui)
.SetIf(isDetailChanged, osku => osku.LuoDiPeiService, oskuCF?.LuoDiPeiService)
.SetIf(isDetailChanged, osku => osku.ManJian, oskuCF?.ManJian)
.SetIf(isDetailChanged, osku => osku.PingTaiChengDanYouHuiQuan, oskuCF?.PingTaiChengDanYouHuiQuan)
.SetIf(isDetailChanged, osku => osku.Plus95, oskuCF?.Plus95)
.SetIf(isDetailChanged, osku => osku.PromotionDiscount, oskuCF?.PromotionDiscount)
.SetIf(isDetailChanged, osku => osku.RemoteFee, oskuCF?.RemoteFee)
.SetIf(isDetailChanged, osku => osku.SuperRedEnvelope, oskuCF?.SuperRedEnvelope)
.SetIf(isDetailChanged, osku => osku.TaxFee, oskuCF?.TaxFee)
.SetIf(isDetailChanged, osku => osku.TuiHuanHuoWuYou, oskuCF?.TuiHuanHuoWuYou)
.SetIf(isDetailChanged, osku => osku.VenderFee, oskuCF?.VenderFee)
.SetIf(isDetailChanged, osku => osku.XianPinLeiDongQuan, oskuCF?.XianPinLeiDongQuan)
.SetIf(isDetailChanged, osku => osku.XianPinLeiJingQuan, oskuCF?.XianPinLeiJingQuan)
.SetIf(isDetailChanged, osku => osku.ZhiFuYingXiaoYouHui, oskuCF?.ZhiFuYingXiaoYouHui);
;
updateOrderSkuDictionary.Add(skuUpdateKey, update);
}
}
}
}
#endregion
#region 收货人信息
@ -418,33 +675,33 @@ namespace BBWY.Server.Business
}
#endregion
#region 订单优惠
//#region 订单优惠
var orderCouponJArray = (JArray)orderJToken["couponDetailList"];
if (orderCouponJArray.HasValues)
{
foreach (var orderCouponJToken in orderCouponJArray)
{
var couponType = orderCouponJToken.Value<string>("couponType");
if (string.IsNullOrEmpty(couponType))
continue;
//dbOrder.PreferentialAmount += orderCouponJToken.Value<decimal>("couponPrice");
preferentialAmount += orderCouponJToken.Value<decimal>("couponPrice");
if (!dbOrderCouponList.Any(oc => oc.OrderId == orderId))
{
insertOrderCouponList.Add(new OrderCoupon()
{
Id = idGenerator.NewLong(),
SkuId = orderCouponJToken.Value<string>("skuId"),
OrderId = orderId,
CreateTime = DateTime.Now,
CouponType = couponType,
CouponPrice = orderCouponJToken.Value<decimal>("couponPrice")
});
}
}
}
#endregion
//var orderCouponJArray = (JArray)orderJToken["couponDetailList"];
//if (orderCouponJArray.HasValues)
//{
// foreach (var orderCouponJToken in orderCouponJArray)
// {
// var couponType = orderCouponJToken.Value<string>("couponType");
// if (string.IsNullOrEmpty(couponType))
// continue;
// //dbOrder.PreferentialAmount += orderCouponJToken.Value<decimal>("couponPrice");
// preferentialAmount += orderCouponJToken.Value<decimal>("couponPrice");
// if (!dbOrderCouponList.Any(oc => oc.OrderId == orderId))
// {
// insertOrderCouponList.Add(new OrderCoupon()
// {
// Id = idGenerator.NewLong(),
// SkuId = orderCouponJToken.Value<string>("skuId"),
// OrderId = orderId,
// CreateTime = DateTime.Now,
// CouponType = couponType,
// CouponPrice = orderCouponJToken.Value<decimal>("couponPrice")
// });
// }
// }
//}
//#endregion
#region 订单状态转换
var orderState = ConvertOrderState(orderJToken, dbOrder.StorageType);
@ -489,7 +746,7 @@ namespace BBWY.Server.Business
{
OrderId = sDCalculationCostRequest.OrderId,
PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio,
PreferentialAmount = preferentialAmount,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight,
CreateTime = DateTime.Now,
@ -508,14 +765,52 @@ namespace BBWY.Server.Business
var orderCostPurchaseAmount = 0M;
var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价
var avgPreferential = preferentialAmount / orderSkuJArray.Count();
//var avgPreferential = preferentialAmount / orderSkuJArray.Count();
#region 扣减库存
foreach (var orderSkuJToken in orderSkuJArray)
{
var orderSkuId = orderSkuJToken.Value<string>("skuId");
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); //sku购买数量
var itemPrice = orderSkuJToken.Value<decimal>("jdPrice"); //sku单价
#region sku拆分明细
decimal? skuShouldPay = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
if (skuShouldPay == null)
skuShouldPay = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
if (skuShouldPay == null)
skuShouldPay = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.ShouldPay;
decimal? skuPingTaiChengDanYouHuiQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
if (skuPingTaiChengDanYouHuiQuan == null)
skuPingTaiChengDanYouHuiQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
if (skuPingTaiChengDanYouHuiQuan == null)
skuPingTaiChengDanYouHuiQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.PingTaiChengDanYouHuiQuan;
decimal? skuSuperRedEnvelope = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.SuperRedEnvelope;
if (skuSuperRedEnvelope == null)
skuSuperRedEnvelope = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
if (skuSuperRedEnvelope == null)
skuSuperRedEnvelope = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.SuperRedEnvelope;
decimal? skuXianPinLeiDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
skuXianPinLeiDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
if (skuXianPinLeiDongQuan == null)
skuXianPinLeiDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.XianPinLeiDongQuan;
decimal? skuVenderFee = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId &&
x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
if (skuVenderFee == null)
skuVenderFee = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.VenderFee;
#endregion
//var itemPrice = orderSkuJToken.Value<decimal>("jdPrice"); //sku单价
var isReduceMultiTimes = false; //是否多次扣减库存
while (itemTotal != 0)
{
@ -527,6 +822,7 @@ namespace BBWY.Server.Business
//本次扣减量
var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity;
//var deductionQuantity = itemTotal;
//本次扣减量的采购成本
var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity;
//本次扣减量的发货运费
@ -568,9 +864,21 @@ namespace BBWY.Server.Business
StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity,
IsEnabled = true
};
orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential -
(orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
itemPrice * deductionQuantity * platformCommissionRatio;
//orderCostDetail.SkuGrossProfit = itemPrice * deductionQuantity - avgPreferential -
// (orderCostDetail.TotalCost + orderCostDetail.DeliveryExpressFreight) -
// itemPrice * deductionQuantity * platformCommissionRatio;
//var koudian = (skuShouldPay.Value - venderFee.Value) * deductionQuantity * platformCommissionRatio;
//orderCostDetail.SkuGrossProfit = (skuShouldPay.Value + pingtaiCoupon.Value) * deductionQuantity -
// orderCostDetail.TotalCost - orderCostDetail.DeliveryExpressFreight -
// koudian;
orderCostDetail.CalculationSkuGrossProfit(skuShouldPay ?? 0M,
skuPingTaiChengDanYouHuiQuan ?? 0M,
skuSuperRedEnvelope ?? 0M,
skuXianPinLeiDongQuan ?? 0M,
skuVenderFee ?? 0M, platformCommissionRatio);
insertOrderCostDetailList.Add(orderCostDetail);
}
}
@ -581,7 +889,7 @@ namespace BBWY.Server.Business
{
OrderId = orderId,
PlatformCommissionRatio = platformCommissionRatio,
PreferentialAmount = preferentialAmount,
PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount,
Profit = 0,
PurchaseAmount = orderCostPurchaseAmount,
DeliveryExpressFreight = orderDeliveryExpressFreight,
@ -590,7 +898,7 @@ namespace BBWY.Server.Business
if (dbOrder.OrderTotalPrice != 0)
orderCost.CalculationOrderProfitAndCost(dbOrder, null);
else
orderCost.CalculationOrderProfitAndCost(orderSellerPrice, freightPrice, null);
orderCost.CalculationOrderProfitAndCost(actualProductAmount ?? 0M, orderSellerPrice, pingtaiChengDanYouHuiQuan ?? 0M, null);
insertOrderCostList.Add(orderCost);
#endregion
@ -604,7 +912,7 @@ namespace BBWY.Server.Business
if (isNewOrder)
{
dbOrder.OrderState = orderState;
dbOrder.PreferentialAmount = preferentialAmount;
//dbOrder.PreferentialAmount = preferentialAmount;
}
else if ((orderState != null && orderState != dbOrder.OrderState) ||
buyerRemark != dbOrder.BuyerRemark ||
@ -619,8 +927,10 @@ namespace BBWY.Server.Business
(orderSellerPrice > 0M && dbOrder.IsGift) ||
orderTotalPrice != dbOrder.OrderTotalPrice ||
storeOrder != dbOrder.StoreOrder ||
storeId != dbOrder.StoreId ||
actualProductAmount != dbOrder.ActualProductAmount ||
preferentialAmount != dbOrder.PreferentialAmount ||
storeId != dbOrder.StoreId)
pingtaiChengDanYouHuiQuan != dbOrder.PingTaiChengDanYouHuiQuan)
{
var updateSql = fsql.Update<Order>(orderId).SetIf(orderState != null && orderState != dbOrder.OrderState, o => o.OrderState, orderState)
.SetIf(buyerRemark != dbOrder.BuyerRemark, o => o.BuyerRemark, buyerRemark)
@ -636,8 +946,10 @@ namespace BBWY.Server.Business
.SetIf(orderSellerPrice > 0M && dbOrder.IsGift == true, o => o.IsGift, false)
.SetIf(storeOrder != dbOrder.StoreOrder, o => o.StoreOrder, storeOrder)
.SetIf(storeOrder != dbOrder.StoreOrder, o => o.StorageType, storageType)
.SetIf(storeId != dbOrder.StoreId, o => o.StoreId, storeId)
.SetIf(actualProductAmount != dbOrder.ActualProductAmount, o => o.ActualProductAmount, actualProductAmount)
.SetIf(preferentialAmount != dbOrder.PreferentialAmount, o => o.PreferentialAmount, preferentialAmount)
.SetIf(storeId != dbOrder.StoreId, o => o.StoreId, storeId);
.SetIf(pingtaiChengDanYouHuiQuan != dbOrder.PingTaiChengDanYouHuiQuan, o => o.PingTaiChengDanYouHuiQuan, pingtaiChengDanYouHuiQuan);
updateOrderList.Add(updateSql);
}
#endregion
@ -650,15 +962,11 @@ namespace BBWY.Server.Business
}
catch { }
#endregion
#region 优惠券/促销/拆分明细
if (orderState != Enums.OrderState. &&
orderState != Enums.OrderState. &&
!dbOrderTotalList.Any(ot => ot.Id == orderId))
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"SyncOrder OrderLevel Error, OrderId:{orderId}, ShopId:{shopId}");
}
#endregion
}
#region 补齐sku logo
@ -696,8 +1004,25 @@ namespace BBWY.Server.Business
}
#endregion
#region 需要清理的数据
var orderCouponDetailOrderIdList = insertOrderTotalInfoList.Select(x => x.Id).ToList();
#endregion
fsql.Transaction(() =>
{
if (orderCouponDetailOrderIdList.Count() > 0)
{
fsql.Delete<OrderTotalInfo>(orderCouponDetailOrderIdList).ExecuteAffrows();
fsql.Delete<OrderCoupon_New>().Where(on => orderCouponDetailOrderIdList.Contains(on.OrderId)).ExecuteAffrows();
fsql.Delete<OrderPromotion>().Where(op => orderCouponDetailOrderIdList.Contains(op.OrderId)).ExecuteAffrows();
}
if (insertOrderTotalInfoList.Count() > 0)
fsql.Insert(insertOrderTotalInfoList).ExecuteAffrows();
if (insertOrderCouponNewList.Count() > 0)
fsql.Insert(insertOrderCouponNewList).ExecuteAffrows();
if (insertOrderPromotionList.Count() > 0)
fsql.Insert(insertOrderPromotionList).ExecuteAffrows();
if (insertOrderList.Count() > 0)
fsql.Insert(insertOrderList).ExecuteAffrows();
if (insertOrderSkuList.Count() > 0)
@ -946,6 +1271,7 @@ namespace BBWY.Server.Business
deleteJdPublishOrder?.ExecuteAffrows();
});
}
#endregion
/// <summary>
/// 修复订单Sku缺少的spu
@ -977,6 +1303,5 @@ namespace BBWY.Server.Business
}
});
}
#endregion
}
}

133
BBWY.Server.Business/TestBusiness.cs

@ -3,12 +3,15 @@ using BBWY.Common.Models;
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 System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using BBWY.Server.Business.Extensions;
namespace BBWY.Server.Business
{
@ -17,14 +20,19 @@ namespace BBWY.Server.Business
private FreeSqlMultiDBManager freeSqlMultiDBManager;
private VenderBusiness venderBusiness;
private IFreeSql fsql;
private OrderSyncBusiness orderSyncBusiness;
public TestBusiness(RestApiService restApiService,
IOptions<GlobalConfig> options,
FreeSqlMultiDBManager freeSqlMultiDBManager,
VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness, IFreeSql fsql) : base(restApiService, options, yunDingBusiness)
VenderBusiness venderBusiness,
YunDingBusiness yunDingBusiness,
IFreeSql fsql,
OrderSyncBusiness orderSyncBusiness) : base(restApiService, options, yunDingBusiness)
{
this.freeSqlMultiDBManager = freeSqlMultiDBManager;
this.venderBusiness = venderBusiness;
this.fsql = fsql;
this.orderSyncBusiness = orderSyncBusiness;
}
public void SyncVenderId()
@ -129,6 +137,129 @@ namespace BBWY.Server.Business
}
Console.WriteLine("更新完毕");
}
public void RepairSkuDetailAndSkuGriooProfit(RepairSkuDetailAndSkuGriooProfit request)
{
request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1);
var banedList = new List<string>()
{
"森王汽车用品专营店",
"森王玩具专营店",
"广发玩具专营店",
"广发汽车用品专营店",
"言义汽车用品专营店",
"杰博玩具专营店",
"安吉玩具专营店",
"布莱特玩具专营店",
"畅阳汽车用品专营店",
"熊猴汽车用品专营店",
"布莱特汽车用品专营店",
"越驭玩具专营店",
"言义玩具专营店",
"瑞源汽车用品专营店",
"熊猴玩具专营店",
"奥德汽车用品专营店",
"创天户外专营店",
"桑妮玩具专营店",
"瑞源玩具专营店"
};
var shopList = venderBusiness.GetShopList(request.ShopId, Enums.Platform.);
var shopIndex = 0;
foreach (var shop in shopList)
{
shopIndex++;
Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()}");
var shopId = long.Parse(shop.ShopId);
if (banedList.Contains(shop.ShopName))
continue;
var orderIdList = fsql.Select<Order>()
.Where(o => o.ShopId == shopId &&
o.OrderState != Enums.OrderState. &&
o.StorageType != Enums.StorageType.SD &&
o.StartTime >= request.StartTime &&
o.StartTime <= request.EndTime)
.WhereIf(!string.IsNullOrEmpty(request.OrderId), o => o.Id == request.OrderId)
.ToList(o => o.Id);
fsql.Transaction(() =>
{
fsql.Delete<OrderTotalInfo>(orderIdList).ExecuteAffrows();
fsql.Delete<OrderCoupon_New>().Where(on => orderIdList.Contains(on.OrderId)).ExecuteAffrows();
fsql.Delete<OrderPromotion>().Where(op => orderIdList.Contains(op.OrderId)).ExecuteAffrows();
fsql.Update<OrderSku>().Set(osku => osku.ShouldPay, 0).Where(osku => orderIdList.Contains(osku.OrderId)).ExecuteAffrows();
});
for (var i = 0; i < orderIdList.Count(); i++)
{
var orderId = orderIdList[i];
orderSyncBusiness.SyncOrder(shop, orderId);
Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()} {shop.ShopName},orderProgress {i + 1}/{orderIdList.Count()}");
}
// foreach (var orderId in orderIdList)
// {
// orderSyncBusiness.SyncOrder(shop, orderId);
// Thread.Sleep(1000);
// }
var orderList = fsql.Select<Order>(orderIdList).ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.Price > 0 && orderIdList.Contains(osku.OrderId)).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => orderIdList.Contains(ocd.OrderId) && ocd.IsEnabled == true).ToList();
var orderCostList = fsql.Select<OrderCost>(orderIdList).ToList();
var afterOrderList = fsql.Select<AfterSaleOrder>().Where(af => orderIdList.Contains(af.OrderId)).ToList();
var orderTotalList = fsql.Select<OrderTotalInfo>().Where(on => orderIdList.Contains(on.Id)).ToList();
var orderIndex = 0;
foreach (var order in orderList)
{
orderIndex++;
Console.WriteLine($"shopProgress {shopIndex}/{shopList.Count()}, orderProgress {orderIndex}/{orderList.Count()}");
var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.OrderId == order.Id).ToList();
if (currentOrderCostDetailList.Count() > 0)
{
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList();
foreach (var orderSku in currentOrderSkuList)
{
var ocd = currentOrderCostDetailList.FirstOrDefault(x => x.SkuId == orderSku.SkuId);
if (ocd != null)
{
ocd.CalculationSkuGrossProfit(orderSku.ShouldPay ?? 0M,
orderSku.PingTaiChengDanYouHuiQuan ?? 0M,
orderSku.SuperRedEnvelope ?? 0M,
orderSku.XianPinLeiDongQuan ?? 0M,
orderSku.VenderFee ?? 0M,
shop.PlatformCommissionRatio ?? 0.05M);
var update = fsql.Update<OrderCostDetail>(ocd.Id).Set(x => x.SkuGrossProfit, ocd.SkuGrossProfit);
updateOrderCostDetailList.Add(update);
}
}
var currentAfterOrderList = afterOrderList.Where(af => af.OrderId == order.Id).ToList();
var orderTotal = orderTotalList.FirstOrDefault(on => on.Id == order.Id);
var orderCost = orderCostList.FirstOrDefault(oc => oc.OrderId == order.Id);
if (orderCost != null && orderTotal != null)
{
orderCost.CalculationOrderProfitAndCost(order.ActualProductAmount ?? 0M,
orderTotal.TotalPingTaiChengDanYouHuiQuan ?? 0M,
orderTotal.TotalVenderFee ?? 0M,
currentAfterOrderList);
if (updateOrderCostDetailList.Count() > 0)
{
fsql.Transaction(() =>
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
fsql.Update<OrderCost>(orderCost.OrderId).Set(oc => oc.Profit, orderCost.Profit)
.Set(oc => oc.PlatformCommissionAmount, orderCost.PlatformCommissionAmount).ExecuteAffrows();
});
}
}
}
}
}
}
}
public class JPCount

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

@ -52,13 +52,13 @@ namespace BBWY.Server.Model.Db
public decimal OrderSellerPrice { get; set; } = 0.00M;
/// <summary>
/// 平台补贴
/// 优惠金额(订单总价-订单实收货款-用户支付运费)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal PreferentialAmount { get; set; } = 0.00M;
/// <summary>
/// 商家优惠金额(商家承担)
/// 商家优惠金额(商家承担)(废弃)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal SellerPreferentialAmount { get; set; } = 0.00M;
@ -185,6 +185,18 @@ namespace BBWY.Server.Model.Db
[Column(DbType = "bit")]
public bool IsGift { get; set; } = false;
/// <summary>
/// 订单实收货款 (orderSellerPrice)+平台承担优惠券(PingTaiChengDanYouHuiQuan)
/// </summary>
[Column(DbType = "decimal(18, 2)")]
public decimal? ActualProductAmount { get; set; } = 0.00M;
/// <summary>
/// 平台承担优惠券
/// </summary>
[Column(DbType = "decimal(18, 2)")]
public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M;
#region 订单成本
/// <summary>
/// 平台扣点金额

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

@ -14,14 +14,12 @@ namespace BBWY.Server.Model.Db
/// <summary>
/// 优惠券数量/发行量
/// </summary>
[Column(DbType = "int")]
public int? CouponNum { get; set; } = 0;
public long? CouponNum { get; set; } = 0;
/// <summary>
/// POP优惠券ID
/// </summary>
[Column(DbType = "int")]
public int? CouponId { get; set; }
public long? CouponId { get; set; }
/// <summary>
/// 活动名称

3
BBWY.Server.Model/Db/Order/OrderPromotion.cs

@ -35,8 +35,7 @@ namespace BBWY.Server.Model.Db
/// <summary>
/// pop促销ID
/// </summary>
[Column(DbType = "int")]
public int? PromotionId { get; set; }
public long? PromotionId { get; set; }
/// <summary>
/// 活动名称

15
BBWY.Server.Model/Dto/Request/Test/RepairSkuDetailAndSkuGriooProfit.cs

@ -0,0 +1,15 @@
using System;
namespace BBWY.Server.Model.Dto
{
public class RepairSkuDetailAndSkuGriooProfit
{
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public long? ShopId { get; set; }
public string OrderId { get; set; }
}
}

150
BBWY.Server.Model/Dto/Response/JD/OrderSkuCFDetail.cs

@ -0,0 +1,150 @@
namespace BBWY.Server.Model.Dto
{
/// <summary>
/// 订单Sku拆分明细对象
/// </summary>
public class OrderSkuCFDetail
{
public string OrderId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 京东支付优惠,计价单位:元
/// </summary>
public decimal? JdZhiFuYouHui { get; set; } = 0.00M;
/// <summary>
/// plus会员95折优惠,计价单位:元
/// </summary>
public decimal? Plus95 { get; set; } = 0.00M;
/// <summary>
/// 余额,计价单位:元
/// </summary>
public decimal? Balance { get; set; } = 0.00M;
/// <summary>
/// 基础优惠,计价单位:元
/// </summary>
public decimal? BaseDiscount { get; set; } = 0.00M;
/// <summary>
/// 基础运费,计价单位:元
/// </summary>
public decimal? BaseFee { get; set; } = 0.00M;
/// <summary>
/// 优惠券,计价单位:元
/// </summary>
public decimal? Coupon { get; set; } = 0.00M;
/// <summary>
/// 东券,计价单位:元
/// </summary>
public decimal? DongQuan { get; set; } = 0.00M;
/// <summary>
/// 满期赠促销
/// </summary>
public decimal? ExpiryGiftDiscount { get; set; } = 0.00M;
/// <summary>
/// 全球购一般贸易税(包税),计价单位:元
/// </summary>
public decimal? GlobalGeneralIncludeTax { get; set; } = 0.00M;
/// <summary>
/// 全球购一般贸易税,计价单位:元
/// </summary>
public decimal? GlobalGeneralTax { get; set; } = 0.00M;
/// <summary>
/// 京豆,计价单位:元
/// </summary>
public decimal? JingDou { get; set; } = 0.00M;
/// <summary>
/// 京券,计价单位:元
/// </summary>
public decimal? JingQuan { get; set; } = 0.00M;
/// <summary>
/// 京享礼金(首单礼金或重逢礼金),计价单位:元
/// </summary>
public decimal? JingXiangLiJin { get; set; } = 0.00M;
/// <summary>
/// 礼金优惠,计价单位:元
/// </summary>
public decimal? LiJinYouHui { get; set; } = 0.00M;
/// <summary>
/// 落地配服务,计价单位:元
/// </summary>
public decimal? LuoDiPeiService { get; set; } = 0.00M;
/// <summary>
/// 满减,计价单位:元
/// </summary>
public decimal? ManJian { get; set; } = 0.00M;
/// <summary>
/// 按比例平台承担优惠券,计价单位:元
/// </summary>
public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M;
/// <summary>
/// 跨店满减促销
/// </summary>
public decimal? PromotionDiscount { get; set; } = 0.00M;
/// <summary>
/// 偏远运费,计价单位:元
/// </summary>
public decimal? RemoteFee { get; set; } = 0.00M;
/// <summary>
/// 应付金额,计价单位:元
/// </summary>
public decimal? ShouldPay { get; set; } = 0.00M;
/// <summary>
/// 超级红包,计价单位:元
/// </summary>
public decimal? SuperRedEnvelope { get; set; } = 0.00M;
/// <summary>
/// 全球购税费,计价单位:元
/// </summary>
public decimal? TaxFee { get; set; } = 0.00M;
/// <summary>
/// 退换货无忧,计价单位:元
/// </summary>
public decimal? TuiHuanHuoWuYou { get; set; } = 0.00M;
/// <summary>
/// 商家运费,计价单位:元
/// </summary>
public decimal? VenderFee { get; set; } = 0.00M;
/// <summary>
/// 限品类东券,计价单位:元
/// </summary>
public decimal? XianPinLeiDongQuan { get; set; } = 0.00M;
/// <summary>
/// 限品类京券,计价单位:元
/// </summary>
public decimal? XianPinLeiJingQuan { get; set; } = 0.00M;
/// <summary>
/// 支付营销优惠,计价单位:元
/// </summary>
public decimal? ZhiFuYingXiaoYouHui { get; set; } = 0.00M;
}
}

12
BBWY.Server.Model/Dto/Response/Order/OrderResponse.cs

@ -72,13 +72,23 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal OrderPayment { get; set; }
/// <summary>
/// 订单实收货款 (orderSellerPrice)+平台承担优惠券(PingTaiChengDanYouHuiQuan)
/// </summary>
public decimal? ActualProductAmount { get; set; } = 0.00M;
/// <summary>
/// 平台承担优惠券
/// </summary>
public decimal? PingTaiChengDanYouHuiQuan { get; set; } = 0.00M;
/// <summary>
/// 商品运费(用户付)
/// </summary>
public decimal FreightPrice { get; set; }
/// <summary>
/// 平台补贴
/// 优惠金额 订单总价-订单实收货款-用户支付运费
/// </summary>
public decimal PreferentialAmount { get; set; }

19
BBWY.Server.Model/Dto/Response/Order/XingXinagSearchResponse.cs

@ -39,6 +39,11 @@ namespace BBWY.Server.Model.Dto
/// 店铺盈利率
/// </summary>
public decimal? ShopYingLiRatio { get; set; }
/// <summary>
/// 店铺实收金额
/// </summary>
public decimal ShopActualAmount { get; set; }
}
public class XingXiangItemResponse
@ -64,7 +69,7 @@ namespace BBWY.Server.Model.Dto
{
get
{
return ActualAmount == 0 ? 0 : Math.Round(Profit / ActualAmount * 100, 2);
return ActualAmount == 0 ? 0 : Math.Round(Profit / ActualAmount, 2); //*100
}
}
@ -83,19 +88,11 @@ namespace BBWY.Server.Model.Dto
/// </summary>
public decimal SDOrderAmount { get; set; }
/// <summary>
/// 店铺毛利率
/// </summary>
public decimal? ShopProfitRatio { get; set; }
/// <summary>
/// 店铺盈利率
/// </summary>
public decimal? ShopYingLiRatio { get; set; }
/// <summary>
/// SPU盈利率
/// </summary>
public decimal? SpuYingLiRatio { get; set; }
}
}

1
JD.API/Middlewares/CustomExceptionMiddleWare.cs

@ -59,6 +59,7 @@ namespace JD.API.Middlewares
context.Response.Clear();
context.Response.StatusCode = 500; //发生未捕获的异常,手动设置状态码
nLogManager.Default().Error(ex); //记录错误
//await ErrorHandle(context, context.Response.StatusCode, ex.Message);
}
}
finally

Loading…
Cancel
Save