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

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

@ -163,10 +163,54 @@ namespace BBWY.Server.Business
private void SyncJDOrder(JArray orderTokenJArray, long shopId, string relayAPIHost, string appKey, string appSecret, string appToken, decimal platformCommissionRatio) 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>();
var interfaceOrderIdList = orderTokenList.Select(orderJToken => orderJToken.Value<string>("orderId")); IList<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
var interfaceCanceledOrderIdList = orderTokenList.Where(orderJToken => orderJToken.Value<string>("orderState").Equals("TRADE_CANCELED")) 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 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 .Select(orderJToken => orderJToken.Value<string>("orderId")); //接口查询结果中取消状态的订单Id
var dbOrderList = fsql.Select<Order>().Where(o => interfaceOrderIdList.Contains(o.Id)).ToList(o => new Order() 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>(); 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); var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M);
foreach (var josku in itemInfoList) 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(); //数据库采购单 var dbPurchaseOrderList = fsql.Select<PurchaseOrder>().Where(po => po.RemainingQuantity != 0 && orderSkuIds.Contains(po.SkuId)).ToList(); //数据库采购单
orderSkuIds.Clear(); orderSkuIds.Clear();
#region 数据库操作 foreach (var orderJToken in noGiftOrderList)
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)
{ {
var orderId = orderJToken.Value<string>("orderId"); var orderId = orderJToken.Value<string>("orderId");
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId); var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == orderId);
@ -278,45 +306,33 @@ namespace BBWY.Server.Business
insertOrderList.Add(dbOrder); insertOrderList.Add(dbOrder);
#region OrderSku #region OrderSku
var itemInfoList = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value<decimal>("jdPrice") != 0M); var itemInfoList = orderJToken["itemInfoList"] as JArray;
foreach (var orderSkuJToken in itemInfoList) 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");
if (orderSkuJToken.Value<decimal>("jdPrice") != 0M)
{ {
var osku = new OrderSku() var osku = new OrderSku()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
ItemTotal = orderSkuJToken.Value<int>("itemTotal"), ItemTotal = itemTotal,
Price = orderSkuJToken.Value<decimal>("jdPrice"), Price = jdPrice,
ProductId = orderSkuJToken.Value<string>("wareId"), ProductId = wareId,
Title = orderSkuJToken.Value<string>("skuName").SimplifySkuName(), Title = orderSkuJToken.Value<string>("skuName").SimplifySkuName(),
ProductNo = orderSkuJToken.Value<string>("productNo"), ProductNo = orderSkuJToken.Value<string>("productNo"),
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
OrderId = orderId, OrderId = orderId,
SkuId = orderSkuJToken.Value<string>("skuId") SkuId = skuId
}; };
insertOrderSkuList.Add(osku); 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) CumulativeSkuDailySalesDetail(skuDailySalesDetailDictionary, dbOrder.StartTime.Value, shopId, skuId, wareId, jdPrice, itemTotal);
{
skuDailySalesDetail = new SkuDailySalesDetail()
{
ShopId = shopId,
Spu = osku.ProductId,
Sku = osku.SkuId,
Platform = Enums.Platform.,
Price = osku.Price,
Date = dbOrder.StartTime.Value
};
skuDailySalesDetailList.Add(skuDailySalesDetail);
}
skuDailySalesDetail.Amount += osku.Price.Value * osku.ItemTotal.Value;
skuDailySalesDetail.ItemTotal += osku.ItemTotal.Value;
skuDailySalesDetail.OrderCount++;
} }
#endregion #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); 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)] [Column(StringLength = 50)]
public string Spu { get; set; } public string Spu { get; set; }
[Column(DbType = "bit")]
public bool IsGift { get; set; }
} }
} }

Loading…
Cancel
Save