|
|
@ -163,11 +163,55 @@ namespace BBWY.Server.Business |
|
|
|
|
|
|
|
private void SyncJDOrder(JArray orderTokenJArray, long shopId, string relayAPIHost, string appKey, string appSecret, string appToken, decimal platformCommissionRatio) |
|
|
|
{ |
|
|
|
var orderTokenList = orderTokenJArray.Where(o => o.Value<decimal>("orderTotalPrice") != 0); |
|
|
|
#region 数据库操作
|
|
|
|
List<Order> insertOrderList = new List<Order>(); |
|
|
|
List<OrderConsignee> insertOrderConsigneeList = new List<OrderConsignee>(); |
|
|
|
List<OrderCost> insertOrderCostList = new List<OrderCost>(); |
|
|
|
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>(); |
|
|
|
List<OrderSku> insertOrderSkuList = new List<OrderSku>(); |
|
|
|
List<OrderCoupon> insertOrderCouponList = new List<OrderCoupon>(); |
|
|
|
List<SkuDailySalesDetail> insertSkuDailySaleDetailList = new List<SkuDailySalesDetail>(); |
|
|
|
|
|
|
|
IList<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>(); |
|
|
|
IList<IUpdate<PurchaseOrder>> updatePurchaseOrderList = new List<IUpdate<PurchaseOrder>>(); |
|
|
|
IList<IUpdate<SkuDailySalesDetail>> updateSkuDailySalesDetailList = new List<IUpdate<SkuDailySalesDetail>>(); |
|
|
|
|
|
|
|
IDictionary<DateTime, List<SkuDailySalesDetail>> skuDailySalesDetailDictionary = new Dictionary<DateTime, List<SkuDailySalesDetail>>(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 赠品
|
|
|
|
var giftOrderJArray = orderTokenJArray.Where(o => o.Value<decimal>("orderTotalPrice") == 0M); |
|
|
|
if (giftOrderJArray.Count() > 0) |
|
|
|
{ |
|
|
|
var giftOrderIds = giftOrderJArray.Select(orderJToken => orderJToken.Value<string>("orderId")).ToArray(); |
|
|
|
var dbGiftOrderIds = fsql.Select<Giftorder>(giftOrderIds).ToList(o => o.Id); |
|
|
|
var exceptIds = giftOrderIds.Except(dbGiftOrderIds); |
|
|
|
if (exceptIds.Count() > 0) |
|
|
|
{ |
|
|
|
var newGiftOrderJArray = giftOrderJArray.Where(o => exceptIds.Contains(o.Value<string>("orderId"))); |
|
|
|
foreach(var orderJToken in newGiftOrderJArray) |
|
|
|
{ |
|
|
|
var orderStartTime = orderJToken.Value<DateTime>("orderStartTime"); |
|
|
|
var itemInfoList = orderJToken["itemInfoList"] as JArray; |
|
|
|
foreach (var orderSkuJToken in itemInfoList) |
|
|
|
{ |
|
|
|
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); |
|
|
|
var jdPrice = orderSkuJToken.Value<decimal>("jdPrice"); |
|
|
|
var wareId = orderSkuJToken.Value<string>("wareId"); |
|
|
|
var skuId = orderSkuJToken.Value<string>("skuId"); |
|
|
|
|
|
|
|
CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, orderStartTime, shopId, skuId, wareId, jdPrice, itemTotal); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
var interfaceOrderIdList = orderTokenList.Select(orderJToken => orderJToken.Value<string>("orderId")); |
|
|
|
var interfaceCanceledOrderIdList = orderTokenList.Where(orderJToken => orderJToken.Value<string>("orderState").Equals("TRADE_CANCELED")) |
|
|
|
.Select(orderJToken => orderJToken.Value<string>("orderId")); //接口查询结果中取消状态的订单Id
|
|
|
|
var noGiftOrderList = orderTokenJArray.Where(o => o.Value<decimal>("orderTotalPrice") != 0M); |
|
|
|
|
|
|
|
var interfaceOrderIdList = noGiftOrderList.Select(orderJToken => orderJToken.Value<string>("orderId")); |
|
|
|
var interfaceCanceledOrderIdList = noGiftOrderList.Where(orderJToken => orderJToken.Value<string>("orderState").Equals("TRADE_CANCELED")) |
|
|
|
.Select(orderJToken => orderJToken.Value<string>("orderId")); //接口查询结果中取消状态的订单Id
|
|
|
|
|
|
|
|
var dbOrderList = fsql.Select<Order>().Where(o => interfaceOrderIdList.Contains(o.Id)).ToList(o => new Order() |
|
|
|
{ |
|
|
@ -187,7 +231,7 @@ namespace BBWY.Server.Business |
|
|
|
} |
|
|
|
|
|
|
|
var orderSkuIds = new List<string>(); |
|
|
|
foreach (var orderJToken in orderTokenList) |
|
|
|
foreach (var orderJToken in noGiftOrderList) |
|
|
|
{ |
|
|
|
var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M); |
|
|
|
foreach (var josku in itemInfoList) |
|
|
@ -200,23 +244,7 @@ namespace BBWY.Server.Business |
|
|
|
var dbPurchaseOrderList = fsql.Select<PurchaseOrder>().Where(po => po.RemainingQuantity != 0 && orderSkuIds.Contains(po.SkuId)).ToList(); //数据库采购单
|
|
|
|
orderSkuIds.Clear(); |
|
|
|
|
|
|
|
#region 数据库操作
|
|
|
|
List<Order> insertOrderList = new List<Order>(); |
|
|
|
List<OrderConsignee> insertOrderConsigneeList = new List<OrderConsignee>(); |
|
|
|
List<OrderCost> insertOrderCostList = new List<OrderCost>(); |
|
|
|
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>(); |
|
|
|
List<OrderSku> insertOrderSkuList = new List<OrderSku>(); |
|
|
|
List<OrderCoupon> insertOrderCouponList = new List<OrderCoupon>(); |
|
|
|
List<SkuDailySalesDetail> insertSkuDailySaleDetailList = new List<SkuDailySalesDetail>(); |
|
|
|
|
|
|
|
IList<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>(); |
|
|
|
IList<IUpdate<PurchaseOrder>> updatePurchaseOrderList = new List<IUpdate<PurchaseOrder>>(); |
|
|
|
IList<IUpdate<SkuDailySalesDetail>> updateSkuDailySalesDetailList = new List<IUpdate<SkuDailySalesDetail>>(); |
|
|
|
|
|
|
|
IDictionary<DateTime, List<SkuDailySalesDetail>> skuDailySalesDetailDictionary = new Dictionary<DateTime, List<SkuDailySalesDetail>>(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
foreach (var orderJToken in orderTokenList) |
|
|
|
foreach (var orderJToken in noGiftOrderList) |
|
|
|
{ |
|
|
|
var orderId = orderJToken.Value<string>("orderId"); |
|
|
|
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId); |
|
|
@ -278,45 +306,33 @@ namespace BBWY.Server.Business |
|
|
|
insertOrderList.Add(dbOrder); |
|
|
|
|
|
|
|
#region OrderSku
|
|
|
|
var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M); |
|
|
|
var itemInfoList = orderJToken["itemInfoList"] as JArray; |
|
|
|
foreach (var orderSkuJToken in itemInfoList) |
|
|
|
{ |
|
|
|
var osku = new OrderSku() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
ItemTotal = orderSkuJToken.Value<int>("itemTotal"), |
|
|
|
Price = orderSkuJToken.Value<decimal>("jdPrice"), |
|
|
|
ProductId = orderSkuJToken.Value<string>("wareId"), |
|
|
|
Title = orderSkuJToken.Value<string>("skuName").SimplifySkuName(), |
|
|
|
ProductNo = orderSkuJToken.Value<string>("productNo"), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
OrderId = orderId, |
|
|
|
SkuId = orderSkuJToken.Value<string>("skuId") |
|
|
|
}; |
|
|
|
insertOrderSkuList.Add(osku); |
|
|
|
|
|
|
|
if (!skuDailySalesDetailDictionary.TryGetValue(dbOrder.StartTime.Value, out List<SkuDailySalesDetail> skuDailySalesDetailList)) |
|
|
|
{ |
|
|
|
skuDailySalesDetailList = new List<SkuDailySalesDetail>(); |
|
|
|
skuDailySalesDetailDictionary.Add(dbOrder.StartTime.Value, skuDailySalesDetailList); |
|
|
|
} |
|
|
|
var skuDailySalesDetail = skuDailySalesDetailList.FirstOrDefault(s => s.Sku == osku.SkuId); |
|
|
|
if (skuDailySalesDetail == null) |
|
|
|
var itemTotal = orderSkuJToken.Value<int>("itemTotal"); |
|
|
|
var jdPrice = orderSkuJToken.Value<decimal>("jdPrice"); |
|
|
|
var wareId = orderSkuJToken.Value<string>("wareId"); |
|
|
|
var skuId = orderSkuJToken.Value<string>("skuId"); |
|
|
|
|
|
|
|
if (orderSkuJToken.Value<decimal>("jdPrice") != 0M) |
|
|
|
{ |
|
|
|
skuDailySalesDetail = new SkuDailySalesDetail() |
|
|
|
var osku = new OrderSku() |
|
|
|
{ |
|
|
|
ShopId = shopId, |
|
|
|
Spu = osku.ProductId, |
|
|
|
Sku = osku.SkuId, |
|
|
|
Platform = Enums.Platform.京东, |
|
|
|
Price = osku.Price, |
|
|
|
Date = dbOrder.StartTime.Value |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
ItemTotal = itemTotal, |
|
|
|
Price = jdPrice, |
|
|
|
ProductId = wareId, |
|
|
|
Title = orderSkuJToken.Value<string>("skuName").SimplifySkuName(), |
|
|
|
ProductNo = orderSkuJToken.Value<string>("productNo"), |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
OrderId = orderId, |
|
|
|
SkuId = skuId |
|
|
|
}; |
|
|
|
skuDailySalesDetailList.Add(skuDailySalesDetail); |
|
|
|
insertOrderSkuList.Add(osku); |
|
|
|
} |
|
|
|
skuDailySalesDetail.Amount += osku.Price.Value * osku.ItemTotal.Value; |
|
|
|
skuDailySalesDetail.ItemTotal += osku.ItemTotal.Value; |
|
|
|
skuDailySalesDetail.OrderCount++; |
|
|
|
|
|
|
|
CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, dbOrder.StartTime.Value, shopId, skuId, wareId, jdPrice, itemTotal); |
|
|
|
|
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
@ -731,5 +747,49 @@ namespace BBWY.Server.Business |
|
|
|
Task.Factory.StartNew(() => SyncOrder(shop, string.Empty, isAuto: true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 累计
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="skuDailySalesDetailDictionary"></param>
|
|
|
|
/// <param name="orderStartTime"></param>
|
|
|
|
/// <param name="shopId"></param>
|
|
|
|
/// <param name="skuId"></param>
|
|
|
|
/// <param name="spuId"></param>
|
|
|
|
/// <param name="price"></param>
|
|
|
|
/// <param name="itemTotal"></param>
|
|
|
|
private void CumulativeSkuDailySalesDetail(IDictionary<DateTime, List<SkuDailySalesDetail>> skuDailySalesDetailDictionary, |
|
|
|
DateTime orderStartTime, |
|
|
|
long shopId, |
|
|
|
string skuId, |
|
|
|
string spuId, |
|
|
|
decimal price, |
|
|
|
int itemTotal) |
|
|
|
{ |
|
|
|
var startDate = orderStartTime.Date; |
|
|
|
if (!skuDailySalesDetailDictionary.TryGetValue(startDate, out List<SkuDailySalesDetail> skuDailySalesDetailList)) |
|
|
|
{ |
|
|
|
skuDailySalesDetailList = new List<SkuDailySalesDetail>(); |
|
|
|
skuDailySalesDetailDictionary.Add(orderStartTime, skuDailySalesDetailList); |
|
|
|
} |
|
|
|
var skuDailySalesDetail = skuDailySalesDetailList.FirstOrDefault(s => s.Sku == skuId); |
|
|
|
if (skuDailySalesDetail == null) |
|
|
|
{ |
|
|
|
skuDailySalesDetail = new SkuDailySalesDetail() |
|
|
|
{ |
|
|
|
ShopId = shopId, |
|
|
|
Spu = spuId, |
|
|
|
Sku = skuId, |
|
|
|
Platform = Enums.Platform.京东, |
|
|
|
Price = price, |
|
|
|
Date = startDate, |
|
|
|
IsGift = price == 0M |
|
|
|
}; |
|
|
|
skuDailySalesDetailList.Add(skuDailySalesDetail); |
|
|
|
} |
|
|
|
skuDailySalesDetail.Amount += price * itemTotal; |
|
|
|
skuDailySalesDetail.ItemTotal += itemTotal; |
|
|
|
skuDailySalesDetail.OrderCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|