Browse Source

1.新增1688付款通知,处理订单平价

2.1688改价通知,处理订单平价
3.平价触发条件修改
   1)所有采购单为1688平台
   2)所有采购单为在线采购
   3)订单不处于取消/部分采购
yijia
shanji 2 years ago
parent
commit
67ed4491d9
  1. 373
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

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

@ -2112,6 +2112,9 @@ namespace BBWYB.Server.Business
case "LOGISTICS_BUYER_VIEW_TRACE":
// LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更
break;
case "ORDER_BUYER_VIEW_ORDER_PAY":
OrderPayFrom1688(jObject);
break;
default:
break;
}
@ -2370,6 +2373,12 @@ namespace BBWYB.Server.Business
var purchaseOrderId = jObject["data"].Value<string>("orderId");
Task.Factory.StartNew(() => OrderPriceModificationCallback(purchaseOrderId, Enums.Platform.), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
private void OrderPayFrom1688(JObject jObject)
{
var purchaseOrderId = jObject["data"].Value<string>("orderId");
Task.Factory.StartNew(() => OrderPayCallback(purchaseOrderId, Enums.Platform.), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
#endregion
@ -2380,179 +2389,12 @@ namespace BBWYB.Server.Business
/// <param name="callbackPlatform"></param>
private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform)
{
bool isEditOrderPrice = true;
try
{
var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne();
if (orderPurchaseInfo == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单");
var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne();
if (purchaseAccount == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}");
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne();
var dbOrderCost = fsql.Select<OrderCost>(orderPurchaseInfo.OrderId).ToOne();
if (dbOrderCost == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的成本");
var shop = fsqlManager.MDSfsql.Select<Shops>().Where(s => s.ShopId == dbOrder.ShopId.ToString()).ToOne();
var dbOrderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList();
if (dbOrderCostDetails.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本");
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId && opi.IsEnabled == true).ToList();
if (dbOrderPurchaseInfoList.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合");
isEditOrderPrice = dbOrderPurchaseInfoList.Count() == dbOrderPurchaseInfoList.Count(opi => opi.PurchasePlatform == Enums.Platform. &&
opi.PurchaseMethod == Enums.PurchaseMethod.线);
var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList();
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList();
if (dbOrderPurchaseRelationInfos.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细");
var dbOrderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList();
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IUpdate<OrderCost> updateOrderCost = null;
IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>();
IUpdate<Order> updateOrder = null;
IList<OP_EditPriceSkuRequest> op_EditPriceSkuRequests = new List<OP_EditPriceSkuRequest>();
var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
var totalPurchaseProductAmount = 0M;
var totalPurchaseFreight = 0M;
foreach (var opi in dbOrderPurchaseInfoList)
{
if (opi.PurchasePlatform != Enums.Platform.)
continue;
var purchaseOrderSimpleInfo = ppclient.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{
AppKey = purchaseAccount.AppKey,
AppSecret = purchaseAccount.AppSecret,
AppToken = purchaseAccount.AppToken,
OrderId = opi.PurchaseOrderId
});
totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount;
totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount;
var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity);
var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList();
var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId);
foreach (var belongSkuGroup in belongSkuGroups)
{
var belongSkuId = belongSkuGroup.Key;
var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId
var currentOrderSkuProductAmount = 0M; //采购成本
var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和
var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount *
(1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费
foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList)
{
var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.ProductAmount);
var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.Quantity);
currentOrderSkuProductAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / currentPurchaseSkuTotalQuantity);
}
#region 订单sku平价
var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
//if (isEditOrderPrice)
//{
// orderSku.Price = currentOrderSkuProductAmount / orderSku.ItemTotal;
// orderSku.BuyerPayFreight = currentPurchaseFreight;
// op_EditPriceSkuRequests.Add(new OP_EditPriceSkuRequest()
// {
// Freight = currentPurchaseFreight ?? 0M,
// InPackAmountPrice = orderSku.InPackAmount ?? 0M,
// OrderSkuId = orderSku.Id.ToString(),
// Price = orderSku.Price ?? 0M,
// SkuId = orderSku.SkuId
// });
// updateOrderSkuList.Add(fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.Price, orderSku.Price)
// .Set(osku => osku.BuyerPayFreight, orderSku.BuyerPayFreight));
//}
#endregion
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId);
dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentOrderSkuProductAmount,
currentPurchaseFreight ?? 0M,
dbOrderSkuDetail.OutPackAmount ?? 0M,
dbOrderSkuDetail.DeliveryExpressFreight ?? 0M);
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderSkuDetail));
}
}
//if (isEditOrderPrice)
//{
// dbOrder.OrderTotalPrice = totalPurchaseProductAmount + totalPurchaseFreight;
// dbOrder.OrderSellerPrice = totalPurchaseProductAmount;
// dbOrder.FreightPrice = totalPurchaseFreight;
// updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderTotalPrice, dbOrder.OrderTotalPrice)
// .Set(o => o.OrderSellerPrice, dbOrder.OrderSellerPrice)
// .Set(o => o.FreightPrice, dbOrder.FreightPrice);
//}
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M,
totalPurchaseProductAmount,
totalPurchaseFreight,
dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M),
dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M));
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
fsql.Transaction(() =>
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
//foreach (var update in updateOrderSkuList)
// update.ExecuteAffrows();
//updateOrder?.ExecuteAffrows();
});
OnSomeOnePurchaseOrderChanged(purchaseOrderId, true);
}
//if (isEditOrderPrice)
//{
// #region 通知拳探改价
// var opclient = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.拳探);
// opclient.EditPrice(new OP_EditPriceRequest()
// {
// AppKey = shop.AppKey,
// AppSecret = shop.AppSecret,
// AppToken = shop.AppToken,
// OrderId = dbOrder.Id,
// EditItems = op_EditPriceSkuRequests
// });
// #endregion
// #region 通知C端改价
// restApiService.SendRequest("https://bbwy.qiyue666.com",
// "/Api/PurchaseOrder/QuanTanEditPriceCallback",
// new { orderId = dbOrder.Id },
// null,
// HttpMethod.Post);
// #endregion
//}
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId}");
}
private void OrderPayCallback(string purchaseOrderId, Enums.Platform callbackPlatform)
{
OnSomeOnePurchaseOrderChanged(purchaseOrderId, false);
}
public void KuaiDi100Publish(string param)
@ -2874,6 +2716,193 @@ namespace BBWYB.Server.Business
}
}
/// <summary>
/// 采购单信息变更(改价,付款)
/// </summary>
/// <param name="purchaseOrderId">采购单Id</param>
/// <param name="keepRunWhenNoEditOrderPirce">当不需要触发订单改价时是否继续走流程</param>
private void OnSomeOnePurchaseOrderChanged(string purchaseOrderId, bool keepRunWhenNoEditOrderPirce)
{
bool isEditOrderPrice = true;
try
{
var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne();
if (orderPurchaseInfo == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单");
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne();
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId && opi.IsEnabled == true).ToList();
if (dbOrderPurchaseInfoList.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合");
isEditOrderPrice = dbOrderPurchaseInfoList.Count() == dbOrderPurchaseInfoList.Count(opi => opi.PurchasePlatform == Enums.Platform. &&
opi.PurchaseMethod == Enums.PurchaseMethod.线) &&
dbOrder.OrderState != Enums.OrderState. &&
dbOrder.OrderState != Enums.OrderState.;
if (!keepRunWhenNoEditOrderPirce && !isEditOrderPrice)
return;
var dbOrderCost = fsql.Select<OrderCost>(dbOrder.Id).ToOne();
if (dbOrderCost == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{dbOrder.Id}的成本");
var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne();
if (purchaseAccount == null)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}");
var shop = fsqlManager.MDSfsql.Select<Shops>().Where(s => s.ShopId == dbOrder.ShopId.ToString()).ToOne();
var dbOrderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList();
if (dbOrderCostDetails.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本");
var dbPurchaseOrderIdList = dbOrderPurchaseInfoList.Select(x => x.PurchaseOrderId).ToList();
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => dbPurchaseOrderIdList.Contains(x.PurchaseOrderId)).ToList();
if (dbOrderPurchaseRelationInfos.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细");
var dbOrderSkus = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderPurchaseInfo.OrderId).ToList();
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IUpdate<OrderCost> updateOrderCost = null;
IList<IUpdate<OrderSku>> updateOrderSkuList = new List<IUpdate<OrderSku>>();
IUpdate<Order> updateOrder = null;
IList<OP_EditPriceSkuRequest> op_EditPriceSkuRequests = new List<OP_EditPriceSkuRequest>();
var ppclient = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
var totalPurchaseProductAmount = 0M;
var totalPurchaseFreight = 0M;
foreach (var opi in dbOrderPurchaseInfoList)
{
if (opi.PurchasePlatform != Enums.Platform.)
continue;
var purchaseOrderSimpleInfo = ppclient.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{
AppKey = purchaseAccount.AppKey,
AppSecret = purchaseAccount.AppSecret,
AppToken = purchaseAccount.AppToken,
OrderId = opi.PurchaseOrderId
});
totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount;
totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount;
var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity);
var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList();
var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId);
foreach (var belongSkuGroup in belongSkuGroups)
{
var belongSkuId = belongSkuGroup.Key;
var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId
var currentOrderSkuProductAmount = 0M; //采购成本
var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和
var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount *
(1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费
foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList)
{
var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.ProductAmount);
var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.Quantity);
currentOrderSkuProductAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / currentPurchaseSkuTotalQuantity);
}
#region 订单sku平价
var orderSku = dbOrderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
if (isEditOrderPrice)
{
orderSku.Price = currentOrderSkuProductAmount / orderSku.ItemTotal;
orderSku.BuyerPayFreight = currentPurchaseFreight;
op_EditPriceSkuRequests.Add(new OP_EditPriceSkuRequest()
{
Freight = currentPurchaseFreight ?? 0M,
InPackAmountPrice = orderSku.InPackAmount ?? 0M,
OrderSkuId = orderSku.Id.ToString(),
Price = orderSku.Price ?? 0M,
SkuId = orderSku.SkuId
});
updateOrderSkuList.Add(fsql.Update<OrderSku>(orderSku.Id).Set(osku => osku.Price, orderSku.Price)
.Set(osku => osku.BuyerPayFreight, orderSku.BuyerPayFreight));
}
#endregion
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId && ocd.PurchaseOrderId == opi.PurchaseOrderId);
dbOrderSkuDetail.CalculationOrderCostDetailCostAndProfit(orderSku.Price.Value * orderSku.ItemTotal.Value,
orderSku.BuyerPayFreight ?? 0M,
orderSku.InPackAmount ?? 0M,
currentOrderSkuProductAmount,
currentPurchaseFreight ?? 0M,
dbOrderSkuDetail.OutPackAmount ?? 0M,
dbOrderSkuDetail.DeliveryExpressFreight ?? 0M);
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderSkuDetail));
}
}
if (isEditOrderPrice)
{
dbOrder.OrderTotalPrice = totalPurchaseProductAmount + totalPurchaseFreight;
dbOrder.OrderSellerPrice = totalPurchaseProductAmount;
dbOrder.FreightPrice = totalPurchaseFreight;
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderTotalPrice, dbOrder.OrderTotalPrice)
.Set(o => o.OrderSellerPrice, dbOrder.OrderSellerPrice)
.Set(o => o.FreightPrice, dbOrder.FreightPrice);
}
dbOrderCost.CalculationOrderCostCostAndProfit(dbOrder.OrderTotalPrice ?? 0M,
totalPurchaseProductAmount,
totalPurchaseFreight,
dbOrderCostDetails.Sum(ocd => ocd.OutPackAmount ?? 0M),
dbOrderCostDetails.Sum(ocd => ocd.DeliveryExpressFreight ?? 0M));
updateOrderCost = fsql.Update<OrderCost>().SetSource(dbOrderCost);
fsql.Transaction(() =>
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
foreach (var update in updateOrderSkuList)
update.ExecuteAffrows();
updateOrder?.ExecuteAffrows();
});
if (isEditOrderPrice)
{
#region 通知拳探改价
var opclient = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
opclient.EditPrice(new OP_EditPriceRequest()
{
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
OrderId = dbOrder.Id,
EditItems = op_EditPriceSkuRequests
});
#endregion
#region 通知C端改价
restApiService.SendRequest("https://bbwy.qiyue666.com",
"/Api/PurchaseOrder/QuanTanEditPriceCallback",
new { orderId = dbOrder.Id },
null,
HttpMethod.Post);
#endregion
}
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 采购单号{purchaseOrderId}");
}
}
private void SendDingDing(string content)
{
try

Loading…
Cancel
Save