shanji 3 years ago
parent
commit
4afcc07886
  1. 170
      BBWY.Server.Business/Sync/OrderSyncBusiness.cs
  2. 27
      BBWY.Server.Model/Db/Order/GiftOrder.cs
  3. 3
      BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs

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

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

27
BBWY.Server.Model/Db/Order/GiftOrder.cs

@ -0,0 +1,27 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db
{
[Table(Name = "giftorder", DisableSyncStructure = true)]
public partial class Giftorder {
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
public int? Platform { get; set; }
public long ShopId { get; set; }
[Column(DbType = "datetime")]
public DateTime? StartTime { get; set; }
}
}

3
BBWY.Server.Model/Db/Statistics/SkuDailySalesDetails.cs

@ -56,6 +56,9 @@ namespace BBWY.Server.Model.Db
[Column(StringLength = 50)]
public string Spu { get; set; }
[Column(DbType = "bit")]
public bool IsGift { get; set; }
}
}

Loading…
Cancel
Save