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