diff --git a/BBWY.Client/APIServices/PurchaseOrderService.cs b/BBWY.Client/APIServices/PurchaseOrderService.cs index cfda899b..27893f6f 100644 --- a/BBWY.Client/APIServices/PurchaseOrderService.cs +++ b/BBWY.Client/APIServices/PurchaseOrderService.cs @@ -57,20 +57,13 @@ namespace BBWY.Client.APIServices /// /// /// - public ApiResponse PreviewPurchaseOrder(Consignee consignee, IList purchaseSchemeProductSkuList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode) + public ApiResponse PreviewPurchaseOrder(Consignee consignee, List cargoParamList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode) { return SendRequest(globalContext.BBYWApiHost, "api/purchaseOrder/PreviewPurchaseOrder", new { purchaseOrderMode, consignee, - CargoParamList = purchaseSchemeProductSkuList.Select(sku => new - { - ProductId = sku.PurchaseProductId, - SkuId = sku.PurchaseSkuId, - SpecId = sku.PurchaseSkuSpecId, - Quantity = sku.ItemTotal, - BelongSkuId = sku.SkuId - }), + CargoParamList = cargoParamList, Platform = purchasePlatform, AppKey = purchaseAccount.AppKey, AppSecret = purchaseAccount.AppSecret, @@ -99,7 +92,7 @@ namespace BBWY.Client.APIServices /// /// public ApiResponse FastCreateOrder(Consignee consignee, - IList purchaseSchemeProductSkuList, + List cargoParamList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode, @@ -118,15 +111,7 @@ namespace BBWY.Client.APIServices { purchaseOrderMode, consignee, - CargoParamList = purchaseSchemeProductSkuList.Select(sku => new - { - ProductId = sku.PurchaseProductId, - SkuId = sku.PurchaseSkuId, - SpecId = sku.PurchaseSkuSpecId, - Quantity = sku.ItemTotal, - BelongSkuId = sku.SkuId, - SchemeId = sku.SkuPurchaseSchemeId - }), + CargoParamList = cargoParamList, Platform = purchasePlatform, purchaseAccount.AppKey, purchaseAccount.AppSecret, diff --git a/BBWY.Client/APIServices/PurchaseProductAPIService.cs b/BBWY.Client/APIServices/PurchaseProductAPIService.cs index ab80e86d..e6aa0925 100644 --- a/BBWY.Client/APIServices/PurchaseProductAPIService.cs +++ b/BBWY.Client/APIServices/PurchaseProductAPIService.cs @@ -25,6 +25,9 @@ namespace BBWY.Client.APIServices private string qtAppId = "BBWY2023022001"; private string qtAppSecret = "908e131365d5448ca651ba20ed7ddefe"; + private List locationIdList; + private List priceIdList; + private TimeSpan purchaseProductCacheTimeSpan; //private TimeSpan _1688SessionIdTimeSpan; @@ -48,6 +51,17 @@ namespace BBWY.Client.APIServices }; purchaseProductCacheTimeSpan = TimeSpan.FromDays(1); this.quanTanProductClient = quanTanProductClient; + locationIdList = new List() + { + "300252630336272", + "1081181309101", + "16347413030323" + }; + priceIdList = new List() { + "300252630336263", + "1081181309582", + "16347413030316" + }; } public (Purchaser purchaser, IList purchaseSchemeProductSkus)? GetProductInfo(Platform platform, string productId, string skuId, string purchaseProductId, PurchaseOrderMode priceMode, PurchaseProductAPIMode apiMode) @@ -189,7 +203,7 @@ namespace BBWY.Client.APIServices if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK) return null; - var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*)"); + var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA\s?=)(.*)(\r*\n*\s*)"); if (!match.Success) return null; @@ -200,11 +214,18 @@ namespace BBWY.Client.APIServices var purchaser = new Purchaser() { Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), - Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), - Location = jobject["data"]["1081181309101"] != null ? - jobject["data"]["1081181309101"]["data"]["location"].ToString() : - jobject["data"]["16347413030323"]["data"]["location"].ToString() + Name = jobject["globalData"]["tempModel"]["companyName"].ToString() }; + foreach (var lid in locationIdList) + { + if (jobject["data"][lid] != null) + { + purchaser.Location = jobject["data"][lid]["data"]["location"].ToString(); + break; + } + } + + var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value("fid") == 3216 || j.Value("fid") == 1627207 || @@ -217,9 +238,18 @@ namespace BBWY.Client.APIServices imageUrl = j.Value("imageUrl") }).ToList(); - var firstPrice = jobject["data"]["1081181309582"] != null ? - jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value("price") : - jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value("price"); + //var firstPrice = jobject["data"]["1081181309582"] != null ? + // jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value("price") : + // jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value("price"); + var firstPrice = 0M; + foreach (var pid in priceIdList) + { + if (jobject["data"][pid] != null) + { + firstPrice = jobject["data"][pid]["data"]["priceModel"]["currentPrices"][0].Value("price"); + break; + } + } var purchaseSchemeProductSkus = new List(); @@ -238,7 +268,7 @@ namespace BBWY.Client.APIServices SkuId = skuId, PurchaseProductId = purchaseProductId, Price = skuPrice == 0M ? firstPrice : skuPrice, - Title = name, + Title = matchName, PurchaseSkuId = value.Value("skuId"), PurchaseSkuSpecId = value.Value("specId"), Logo = colorsProperty.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png" diff --git a/BBWY.Client/Converters/InputNumberConverter.cs b/BBWY.Client/Converters/InputNumberConverter.cs index ce9c2890..3c7e2f50 100644 --- a/BBWY.Client/Converters/InputNumberConverter.cs +++ b/BBWY.Client/Converters/InputNumberConverter.cs @@ -1,4 +1,5 @@ -using System; +using MathNet.Numerics; +using System; using System.Globalization; using System.Windows; using System.Windows.Data; @@ -16,14 +17,44 @@ namespace BBWY.Client.Converters { string strValue = value as string; if (string.IsNullOrEmpty(strValue)) + { return null; + } decimal result; - var dotIndex = strValue.IndexOf('.'); - if (dotIndex == strValue.Length - 1 || - (dotIndex != -1 && strValue.EndsWith("0")) || - !decimal.TryParse(strValue, out result)) + if (strValue.IndexOf('.') == strValue.Length - 1 || (strValue.IndexOf('0') == strValue.Length - 1 && strValue.IndexOf('.') != -1) || !decimal.TryParse(strValue, out result)) + { return DependencyProperty.UnsetValue; + } return result; + + //if (string.IsNullOrEmpty(strValue)) + // return DependencyProperty.UnsetValue; + //if (strValue.EndsWith(".")) + // return DependencyProperty.UnsetValue; + //decimal result = 0M; + //var dotIndex = strValue.IndexOf('.'); + //if (dotIndex == -1) + // decimal.TryParse(strValue, out result); + //else + //{ + // //var intValueStr = strValue.Substring(0, dotIndex); + // var decimalValueStr = strValue.Substring(dotIndex + 1); + + // var n = 1M; + // if (decimalValueStr.Length == 1) + // n = 1.0M; + // if (decimalValueStr.Length == 2) + // n = 1.00M; + // if (decimalValueStr.Length == 3) + // n = 1.000M; + // if (decimalValueStr.Length == 4) + // n = 1.0000M; + // if (decimal.TryParse(strValue, out result)) + // result = decimal.Round(result * n, decimalValueStr.Length); + // else + // return DependencyProperty.UnsetValue; + //} + //return result; } } } diff --git a/BBWY.Client/GlobalContext.cs b/BBWY.Client/GlobalContext.cs index 0b2bd463..2f6a278e 100644 --- a/BBWY.Client/GlobalContext.cs +++ b/BBWY.Client/GlobalContext.cs @@ -13,7 +13,7 @@ namespace BBWY.Client { ShopServiceGroupList = new List(); ShopServiceGroupLowerList = new List(); - ClientVersion = "10212"; + ClientVersion = "10217"; } diff --git a/BBWY.Client/Models/PurchaseOrder/CargoParam.cs b/BBWY.Client/Models/PurchaseOrder/CargoParam.cs new file mode 100644 index 00000000..7d07f421 --- /dev/null +++ b/BBWY.Client/Models/PurchaseOrder/CargoParam.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BBWY.Client.Models +{ + public class CargoParam + { + public string ProductId { get; set; } + public string SkuId { get; set; } + public string SpecId { get; set; } + public int Quantity { get; set; } + public string BelongSkuId { get; set; } + + public long SchemeId { get; set; } + } +} diff --git a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs index fef1fb33..f9022b7d 100644 --- a/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs +++ b/BBWY.Client/ViewModels/Purchase/1688PreviewPurchaseViewModel.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; +using Newtonsoft.Json; namespace BBWY.Client.ViewModels { @@ -182,12 +183,15 @@ namespace BBWY.Client.ViewModels { foreach (var purchaseSchemeProductSku in data.Value.purchaseSchemeProductSkus) { - purchaseSchemeProductSku.SkuPurchaseSchemeId = purchaseSchemeProduct.SkuPurchaseSchemeId; - if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) + if (orderSku != null && purchaseSchemeProductSku.SkuId == orderSku.Id) { - PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku); - purchaseSchemeProductSku.ItemTotal = orderSku.ItemTotal; - purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged; + purchaseSchemeProductSku.SkuPurchaseSchemeId = purchaseSchemeProduct.SkuPurchaseSchemeId; + if (purchaseSchemeProduct.SelectedSkuIdList.Any(s => s == purchaseSchemeProductSku.PurchaseSkuId)) + { + PurchaseSchemeProductSkuList.Add(purchaseSchemeProductSku); + purchaseSchemeProductSku.ItemTotal = orderSku.ItemTotal; + purchaseSchemeProductSku.OnItemTotalChanged = OnItemTotalChanged; + } } } }); @@ -224,6 +228,33 @@ namespace BBWY.Client.ViewModels return; } + #region 由于未知原因,会存在不属于当前订单的配件sku,预览时清理一次 + for (var i = 0; i < PurchaseSchemeProductSkuList.Count(); i++) + { + var pss = PurchaseSchemeProductSkuList[i]; + if (!order.ItemList.Any(osku => osku.Id == pss.SkuId)) + { + //这个采购配件不属于这笔订单 + PurchaseSchemeProductSkuList.RemoveAt(i); + i--; + } + } + if (PurchaseSchemeProductSkuList.Count() == 0) + { + MessageBox.Show("采购配件数量为0"); + return; + } + #endregion + + var cargoParamList = PurchaseSchemeProductSkuList.Select(sku => new CargoParam + { + ProductId = sku.PurchaseProductId, + SkuId = sku.PurchaseSkuId, + SpecId = sku.PurchaseSkuSpecId, + Quantity = sku.ItemTotal, + BelongSkuId = sku.SkuId + }).ToList(); + IsLoading = true; Task.Factory.StartNew(() => purchaseOrderService.PreviewPurchaseOrder(new Consignee() { @@ -235,7 +266,7 @@ namespace BBWY.Client.ViewModels Province = Province, TelePhone = Mobile, Town = Town - }, PurchaseSchemeProductSkuList, purchaseAccount.PurchasePlatformId, purchaseAccount, PurchaseOrderMode)) + }, cargoParamList, purchaseAccount.PurchasePlatformId, purchaseAccount, PurchaseOrderMode)) .ContinueWith(t => { IsLoading = false; @@ -275,6 +306,15 @@ namespace BBWY.Client.ViewModels MessageBox.Show("收货人信息不全", "下单"); return; } + var cargoParamList = PurchaseSchemeProductSkuList.Select(sku => new CargoParam + { + ProductId = sku.PurchaseProductId, + SkuId = sku.PurchaseSkuId, + SpecId = sku.PurchaseSkuSpecId, + Quantity = sku.ItemTotal, + BelongSkuId = sku.SkuId, + SchemeId = sku.SkuPurchaseSchemeId + }).ToList(); IsLoading = true; Task.Factory.StartNew(() => purchaseOrderService.FastCreateOrder(new Consignee() @@ -287,7 +327,7 @@ namespace BBWY.Client.ViewModels Province = Province, TelePhone = Mobile, Town = Town - }, PurchaseSchemeProductSkuList, + }, cargoParamList, purchaseAccount.PurchasePlatformId, purchaseAccount, PurchaseOrderMode, diff --git a/BBWY.Server.API/Startup.cs b/BBWY.Server.API/Startup.cs index 84746551..ccdcc052 100644 --- a/BBWY.Server.API/Startup.cs +++ b/BBWY.Server.API/Startup.cs @@ -19,6 +19,7 @@ using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Text; using Yitter.IdGenerator; @@ -65,6 +66,10 @@ namespace BBWY.Server.API services.AddControllers(); services.AddHttpContextAccessor(); services.AddHttpClient(); + services.AddHttpClient("gzip").ConfigurePrimaryHttpMessageHandler(handler => new HttpClientHandler() + { + AutomaticDecompression = System.Net.DecompressionMethods.GZip + }); services.AddCors(options => { options.AddPolicy("cors", p => diff --git a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs index 05bc4b7e..6e9250b3 100644 --- a/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs +++ b/BBWY.Server.Business/EvaluationAssistant/EvaluationAssistantBusiness.cs @@ -160,6 +160,9 @@ namespace BBWY.Server.Business if (string.IsNullOrEmpty(request.FullTitle)) throw new BusinessException("缺少完整标题"); + if (string.IsNullOrEmpty(request.SimpleTitle)) + throw new BusinessException("缺少精简标题"); + if (string.IsNullOrEmpty(request.ActivityName)) throw new BusinessException("缺少任务名称"); diff --git a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs index 705dc6f7..b71fe9a1 100644 --- a/BBWY.Server.Business/PlatformSDK/JDBusiness.cs +++ b/BBWY.Server.Business/PlatformSDK/JDBusiness.cs @@ -1053,7 +1053,52 @@ namespace BBWY.Server.Business attrId = tempDataJToken.Value("attrId"); var tempDataValuesJToken = JObject.Parse(tempDataJToken["valueRules"].ToString()); var tempDataValues_Level1_JToken = tempDataValuesJToken["items"][0]; - if (tempDataValues_Level1_JToken["properties"]["id"]["type"].ToString() == "model") + if (tempDataValuesJToken["items"].Count() == 3 && + tempDataValuesJToken["items"][0]["properties"]["id"]["type"].ToString() == "model" && + tempDataValuesJToken["items"][1]["properties"]["id"]["type"].ToString() == "number" && + tempDataValuesJToken["items"][1]["properties"]["value"]["type"].ToString() == "number" && + tempDataValuesJToken["items"][2]["properties"]["id"]["type"].ToString() == "number" && + tempDataValuesJToken["items"][2]["properties"]["value"]["type"].ToString() == "string") + { + var f_id = int.Parse(tempDataValuesJToken["items"][0]["properties"]["id"]["enum"][0].ToString()); + var f_tempJarray = tempDataValuesJToken["items"][0]["properties"]["value"]["enum"][0]["preprocessingSaleAttrValTemplateValueList"] as JArray; + var f_value = f_tempJarray.FirstOrDefault().Value("name"); + var f_valueId = f_tempJarray.FirstOrDefault().Value("id"); + + var s_id = int.Parse(tempDataValuesJToken["items"][1]["properties"]["id"]["enum"][0].ToString()); + var s_unit = tempDataValuesJToken["items"][1]["properties"]["unit"]["enum"][0].ToString(); + //var s_value = "1"; + + var t_id = int.Parse(tempDataValuesJToken["items"][2]["properties"]["id"]["enum"][0].ToString()); + var t_value = "待替换的备注"; + + for (var i = 0; i < request.GiftTemplateSkuList.Count(); i++) + { + strutsSaleAttrValueList.Add(new List() + { + new AttrValueAliasJson() + { + id = f_id, + value = f_value, + valueId = f_valueId, + unit = string.Empty + }, + new AttrValueAliasJson() + { + id = s_id, + value = "1", + unit = s_unit + }, + new AttrValueAliasJson() + { + id = t_id, + value = t_value, + isReName = true + } + }); + } + } + else if (tempDataValues_Level1_JToken["properties"]["id"]["type"].ToString() == "model") { //[{\"id\":5,\"unit\":\"\",\"value\":\"红色\","valueId":1234567}] var tempJarray = tempDataValues_Level1_JToken["properties"]["value"]["enum"][0]["preprocessingSaleAttrValTemplateValueList"] as JArray; diff --git a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index ca2b873d..344da0f2 100644 --- a/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWY.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -131,6 +131,33 @@ namespace BBWY.Server.Business throw new BusinessException("订单不存在"); if (dbOrder.OrderState != Enums.OrderState.等待采购 && dbOrder.OrderState != Enums.OrderState.待出库) throw new BusinessException("只能为等待采购或待出库的订单进行采购"); + if (createOnlinePurchaseOrderRequest.CargoParamList == null || createOnlinePurchaseOrderRequest.CargoParamList.Count() == 0) + throw new BusinessException("缺少下单参数"); + + //拦截不要属于当前订单的请求 + var orderSkus = fsql.Select().Where(osku => osku.Price != 0 && osku.OrderId == createOnlinePurchaseOrderRequest.OrderId).ToList(); + + if (createOnlinePurchaseOrderRequest.CargoParamList.Any(c => !orderSkus.Any(osku => osku.SkuId == c.BelongSkuId))) + { + nLogManager.Default().Info($"NewFastCreateOrder\r\n非法请求\r\n{JsonConvert.SerializeObject(createOnlinePurchaseOrderRequest)}"); + //移除不属于当前订单的采购配件 + for (var i = 0; i < createOnlinePurchaseOrderRequest.CargoParamList.Count(); i++) + { + var cp = createOnlinePurchaseOrderRequest.CargoParamList[i]; + if (!orderSkus.Any(osku => osku.SkuId == cp.BelongSkuId)) + { + createOnlinePurchaseOrderRequest.CargoParamList.RemoveAt(i); + i--; + } + } + + if (createOnlinePurchaseOrderRequest.CargoParamList.Count() == 0) + throw new BusinessException("经过采购配件的订单sku归属关系过滤之后,剩余采购配件数量为0,请先联系技术人员排查问题之后再手动关联"); + + //throw new BusinessException("非法sku参数,下单sku中存在不属于该笔订单的sku"); + } + + var oldPourchaseIdList = fsql.Select().Where(ocd => ocd.OrderId == dbOrder.Id) .ToList(ocd => ocd.PurchaseOrderPKId); @@ -138,7 +165,6 @@ namespace BBWY.Server.Business var deletePurchaseOrder = fsql.Delete().Where(po => oldPourchaseIdList.Contains(po.Id)); var deleteOrderCostDetail = fsql.Delete().Where(ocd => ocd.OrderId == dbOrder.Id); var isRepurchase = fsql.Select(dbOrder.Id).Any(); - var orderSkus = fsql.Select().Where(osku => osku.Price != 0 && osku.OrderId == createOnlinePurchaseOrderRequest.OrderId).ToList(); var orderSkuIds = orderSkus.Select(osku => osku.Id).ToList(); #region 合并重复的采购sku diff --git a/BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs index 3387715b..51b8c2ee 100644 --- a/BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs +++ b/BBWY.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs @@ -25,6 +25,9 @@ namespace BBWY.Server.Business private string qtAppId = "BBWY2023022001"; private string qtAppSecret = "908e131365d5448ca651ba20ed7ddefe"; + private List locationIdList; + private List priceIdList; + private TimeSpan purchaseProductCacheTimeSpan; //private TimeSpan _1688SessionIdTimeSpan; @@ -40,7 +43,7 @@ namespace BBWY.Server.Business this.restApiService = restApiService; _1688ProductDetailRequestHeader = new Dictionary() { - { "Host","detail.1688.com"}, + //{ "Host","detail.1688.com"}, { "User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.70"}, { "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}, { "Accept-Encoding","gzip, deflate, br"}, @@ -48,6 +51,17 @@ namespace BBWY.Server.Business }; purchaseProductCacheTimeSpan = TimeSpan.FromDays(1); this.quanTanProductClient = quanTanProductClient; + locationIdList = new List() + { + "300252630336272", + "1081181309101", + "16347413030323" + }; + priceIdList = new List() { + "300252630336263", + "1081181309582", + "16347413030316" + }; } public PurchaseSkuBasicInfoResponse GetProductInfo(PurchaseSkuBasicInfoRequest request) @@ -193,12 +207,13 @@ namespace BBWY.Server.Business $"clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={(request.PriceMode == Enums.PurchaseOrderMode.批发 ? "order" : "consign")}", _1688ProductDetailRequestHeader, HttpMethod.Get, - httpClientName: "gzip"); + httpClientName: "gzip", + getResponseHeader: true); if (_1688pageResult.StatusCode != System.Net.HttpStatusCode.OK) return null; - var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA=)(.*)(\r*\n*\s*)"); + var match = Regex.Match(_1688pageResult.Content, @"(window\.__INIT_DATA\s?=)(.*)(\r*\n*\s*)"); if (!match.Success) return null; @@ -209,12 +224,16 @@ namespace BBWY.Server.Business var purchaser = new Purchaser() { Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), - Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), - Location = jobject["data"]["1081181309101"] != null ? - jobject["data"]["1081181309101"]["data"]["location"].ToString() : - jobject["data"]["16347413030323"]["data"]["location"].ToString(), - Platform = Enums.Platform.阿里巴巴 + Name = jobject["globalData"]["tempModel"]["companyName"].ToString() }; + foreach (var lid in locationIdList) + { + if (jobject["data"][lid] != null) + { + purchaser.Location = jobject["data"][lid]["data"]["location"].ToString(); + break; + } + } var colorsProperty = jobject["globalData"]["skuModel"]["skuProps"].FirstOrDefault(j => j.Value("fid") == 3216 || j.Value("fid") == 1627207 || @@ -227,9 +246,15 @@ namespace BBWY.Server.Business imageUrl = j.Value("imageUrl") }).ToList(); - var firstPrice = jobject["data"]["1081181309582"] != null ? - jobject["data"]["1081181309582"]["data"]["priceModel"]["currentPrices"][0].Value("price") : - jobject["data"]["16347413030316"]["data"]["priceModel"]["currentPrices"][0].Value("price"); + var firstPrice = 0M; + foreach (var pid in priceIdList) + { + if (jobject["data"][pid] != null) + { + firstPrice = jobject["data"][pid]["data"]["priceModel"]["currentPrices"][0].Value("price"); + break; + } + } var list = new List(); @@ -246,7 +271,7 @@ namespace BBWY.Server.Business { PurchaseProductId = request.PurchaseProductId, Price = skuPrice == 0M ? firstPrice : skuPrice, - Title = name, + Title = matchName, //name PurchaseSkuId = value.Value("skuId"), PurchaseSkuSpecId = value.Value("specId"), Logo = colorsProperty.FirstOrDefault(c => c.name == matchName)?.imageUrl ?? "pack://application:,,,/Resources/Images/defaultItem.png" diff --git a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs index bedc4441..75379381 100644 --- a/BBWY.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWY.Server.Business/Sync/OrderSyncBusiness.cs @@ -306,150 +306,151 @@ namespace BBWY.Server.Business 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("totalBalance"), - TotalBaseDiscount = jtoken.Value("TotalBaseDiscount"), - TotalBaseFee = jtoken.Value("totalBaseFee"), - TotalCoupon = jtoken.Value("totalCoupon"), - TotalDongQuan = jtoken.Value("totalDongQuan"), - TotalExpiryGiftDiscount = jtoken.Value("totalExpiryGiftDiscount"), - TotalGlobalGeneralIncludeTax = jtoken.Value("totalGlobalGeneralIncludeTax"), - TotalGlobalGeneralTax = jtoken.Value("totalGlobalGeneralTax"), - TotalItemPrice = jtoken.Value("totalItemPrice"), - TotalJdZhiFuYouHui = jtoken.Value("totalJdZhiFuYouHui"), - TotalJingDou = jtoken.Value("totalJingDou"), - TotalJingQuan = jtoken.Value("totalJingQuan"), - TotalJingXiangLiJin = jtoken.Value("totalJingXiangLiJin"), - TotalLiJinYouHui = jtoken.Value("totalLiJinYouHui"), - TotalLuoDiPeiService = jtoken.Value("totalLuoDiPeiService"), - TotalManJian = jtoken.Value("totalManJian"), - TotalPingTaiChengDanYouHuiQuan = jtoken.Value("totalPingTaiChengDanYouHuiQuan"), - TotalPlus95 = jtoken.Value("totalPlus95"), - TotalPromotionDiscount = jtoken.Value("totalPromotionDiscount"), - TotalRemoteFee = jtoken.Value("totalRemoteFee"), - TotalShouldPay = jtoken.Value("totalShouldPay"), - TotalSuperRedEnvelope = jtoken.Value("totalSuperRedEnvelope"), - TotalTaxFee = jtoken.Value("totalTaxFee"), - TotalTuiHuanHuoWuYou = jtoken.Value("totalTuiHuanHuoWuYou"), - TotalVenderFee = jtoken.Value("totalVenderFee"), - TotalXianPinLeiDongQuan = jtoken.Value("totalXianPinLeiDongQuan"), - TotalXianPinLeiJingQuan = jtoken.Value("totalXianPinLeiJingQuan"), - TotalZhiFuYingXiaoYouHui = jtoken.Value("totalZhiFuYingXiaoYouHui") - }; - insertOrderTotalInfoList.Add(orderTotal); - #endregion - - #region 订单优惠券信息 - var couponJArray = jtoken["couponList"] as JArray; - if (couponJArray != null && couponJArray.Count() > 0) + if (jtoken.Value("totalShouldPay") > 0M) { - insertOrderCouponNewList.AddRange(couponJArray.Select(j => new OrderCoupon_New() + #region 订单合计信息 + var orderTotal = new OrderTotalInfo() { - Id = idGenerator.NewLong(), - CouponId = j.Value("couponId"), - CouponName = j.Value("couponName"), - CouponNum = j.Value("couponNum"), - CouponPrice = j.Value("couponPrice"), - CouponTypeDesc = j.Value("couponTypeDesc"), CreateTime = DateTime.Now, - JdCouponId = j.Value("jdCouponId"), - JdDivideMoney = j.Value("jdDivideMoney"), - OrderId = orderId, - PriceDivide = j.Value("priceDivide"), - VenderDivideMoney = j.Value("venderDivideMoney") - })); - } + Id = orderId, + TotalBalance = jtoken.Value("totalBalance"), + TotalBaseDiscount = jtoken.Value("TotalBaseDiscount"), + TotalBaseFee = jtoken.Value("totalBaseFee"), + TotalCoupon = jtoken.Value("totalCoupon"), + TotalDongQuan = jtoken.Value("totalDongQuan"), + TotalExpiryGiftDiscount = jtoken.Value("totalExpiryGiftDiscount"), + TotalGlobalGeneralIncludeTax = jtoken.Value("totalGlobalGeneralIncludeTax"), + TotalGlobalGeneralTax = jtoken.Value("totalGlobalGeneralTax"), + TotalItemPrice = jtoken.Value("totalItemPrice"), + TotalJdZhiFuYouHui = jtoken.Value("totalJdZhiFuYouHui"), + TotalJingDou = jtoken.Value("totalJingDou"), + TotalJingQuan = jtoken.Value("totalJingQuan"), + TotalJingXiangLiJin = jtoken.Value("totalJingXiangLiJin"), + TotalLiJinYouHui = jtoken.Value("totalLiJinYouHui"), + TotalLuoDiPeiService = jtoken.Value("totalLuoDiPeiService"), + TotalManJian = jtoken.Value("totalManJian"), + TotalPingTaiChengDanYouHuiQuan = jtoken.Value("totalPingTaiChengDanYouHuiQuan"), + TotalPlus95 = jtoken.Value("totalPlus95"), + TotalPromotionDiscount = jtoken.Value("totalPromotionDiscount"), + TotalRemoteFee = jtoken.Value("totalRemoteFee"), + TotalShouldPay = jtoken.Value("totalShouldPay"), + TotalSuperRedEnvelope = jtoken.Value("totalSuperRedEnvelope"), + TotalTaxFee = jtoken.Value("totalTaxFee"), + TotalTuiHuanHuoWuYou = jtoken.Value("totalTuiHuanHuoWuYou"), + TotalVenderFee = jtoken.Value("totalVenderFee"), + TotalXianPinLeiDongQuan = jtoken.Value("totalXianPinLeiDongQuan"), + TotalXianPinLeiJingQuan = jtoken.Value("totalXianPinLeiJingQuan"), + TotalZhiFuYingXiaoYouHui = jtoken.Value("totalZhiFuYingXiaoYouHui") + }; + insertOrderTotalInfoList.Add(orderTotal); + #endregion - #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("couponId"), + CouponName = j.Value("couponName"), + CouponNum = j.Value("couponNum"), + CouponPrice = j.Value("couponPrice"), + CouponTypeDesc = j.Value("couponTypeDesc"), + CreateTime = DateTime.Now, + JdCouponId = j.Value("jdCouponId"), + JdDivideMoney = j.Value("jdDivideMoney"), + OrderId = orderId, + PriceDivide = j.Value("priceDivide"), + VenderDivideMoney = j.Value("venderDivideMoney") + })); + } - #region 订单活动信息 - var promotionJArray = jtoken["promotionList"] as JArray; - if (promotionJArray != null && promotionJArray.Count() > 0) - { - insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion() + #endregion + + #region 订单活动信息 + var promotionJArray = jtoken["promotionList"] as JArray; + if (promotionJArray != null && promotionJArray.Count() > 0) { - Id = idGenerator.NewLong(), - BeginTime = j.Value("beginTime"), - EndTime = j.Value("endTime"), - CreateTime = DateTime.Now, - OrderId = orderId, - PromotionId = j.Value("promotionId"), - PromotionName = j.Value("promotionName"), - SalePrice = j.Value("salePrice"), - SaleTypeDesc = j.Value("saleTypeDesc") - })); - } - #endregion + insertOrderPromotionList.AddRange(promotionJArray.Select(j => new OrderPromotion() + { + Id = idGenerator.NewLong(), + BeginTime = j.Value("beginTime"), + EndTime = j.Value("endTime"), + CreateTime = DateTime.Now, + OrderId = orderId, + PromotionId = j.Value("promotionId"), + PromotionName = j.Value("promotionName"), + SalePrice = j.Value("salePrice"), + SaleTypeDesc = j.Value("saleTypeDesc") + })); + } + #endregion - #region 订单sku金额明细 - var skuJArray = jtoken["skuList"] as JArray; - if (skuJArray != null && skuJArray.Count() > 0) - { - foreach (var oskuJtoken in skuJArray) + #region 订单sku金额明细 + var skuJArray = jtoken["skuList"] as JArray; + if (skuJArray != null && skuJArray.Count() > 0) { - var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray; - decimal? xianPinLeiDongQuan = 0M; - if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0) + foreach (var oskuJtoken in skuJArray) { - foreach (var item1 in skuDiscountInfoList) + var skuDiscountInfoList = oskuJtoken["skuDiscountInfoList"] as JArray; + decimal? xianPinLeiDongQuan = 0M; + if (skuDiscountInfoList != null && skuDiscountInfoList.Count > 0) { - var discountTypeList = item1["discountTypeList"] as JArray; - if (discountTypeList != null && discountTypeList.Count() > 0) + foreach (var item1 in skuDiscountInfoList) { - foreach (var discountType in discountTypeList) + var discountTypeList = item1["discountTypeList"] as JArray; + if (discountTypeList != null && discountTypeList.Count() > 0) { - if (discountType.Value("type") == 6) - xianPinLeiDongQuan += discountType.Value("amount"); + foreach (var discountType in discountTypeList) + { + if (discountType.Value("type") == 6) + xianPinLeiDongQuan += discountType.Value("amount"); + } } } } - } - if (xianPinLeiDongQuan == 0M) - xianPinLeiDongQuan = oskuJtoken.Value("xianPinLeiDongQuan"); + if (xianPinLeiDongQuan == 0M) + xianPinLeiDongQuan = oskuJtoken.Value("xianPinLeiDongQuan"); - var oskuCF = new OrderSkuCFDetail() - { - OrderId = orderId, - SkuId = oskuJtoken.Value("skuCode"), - Balance = oskuJtoken.Value("balance"), - BaseDiscount = oskuJtoken.Value("baseDiscount"), - BaseFee = oskuJtoken.Value("baseFee"), - Coupon = oskuJtoken.Value("coupon"), - DongQuan = oskuJtoken.Value("dongQuan"), - ExpiryGiftDiscount = oskuJtoken.Value("expiryGiftDiscount"), - GlobalGeneralIncludeTax = oskuJtoken.Value("globalGeneralIncludeTax"), - GlobalGeneralTax = oskuJtoken.Value("globalGeneralTax"), - JdZhiFuYouHui = oskuJtoken.Value("jdZhiFuYouHui"), - JingDou = oskuJtoken.Value("jingDou"), - JingQuan = oskuJtoken.Value("jingQuan"), - JingXiangLiJin = oskuJtoken.Value("jingXiangLiJin"), - LiJinYouHui = oskuJtoken.Value("liJinYouHui"), - LuoDiPeiService = oskuJtoken.Value("luoDiPeiService"), - ManJian = oskuJtoken.Value("manJian"), - PingTaiChengDanYouHuiQuan = oskuJtoken.Value("pingTaiChengDanYouHuiQuan"), - Plus95 = oskuJtoken.Value("plus95"), - PromotionDiscount = oskuJtoken.Value("promotionDiscount"), - RemoteFee = oskuJtoken.Value("remoteFee"), - ShouldPay = oskuJtoken.Value("shouldPay"), - SuperRedEnvelope = oskuJtoken.Value("superRedEnvelope"), - TaxFee = oskuJtoken.Value("taxFee"), - TuiHuanHuoWuYou = oskuJtoken.Value("tuiHuanHuoWuYou"), - VenderFee = oskuJtoken.Value("venderFee"), - XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐 - XianPinLeiJingQuan = oskuJtoken.Value("xianPinLeiJingQuan"), - ZhiFuYingXiaoYouHui = oskuJtoken.Value("zhiFuYingXiaoYouHui") - }; - orderSkuCFDetailList.Add(oskuCF); + var oskuCF = new OrderSkuCFDetail() + { + OrderId = orderId, + SkuId = oskuJtoken.Value("skuCode"), + Balance = oskuJtoken.Value("balance"), + BaseDiscount = oskuJtoken.Value("baseDiscount"), + BaseFee = oskuJtoken.Value("baseFee"), + Coupon = oskuJtoken.Value("coupon"), + DongQuan = oskuJtoken.Value("dongQuan"), + ExpiryGiftDiscount = oskuJtoken.Value("expiryGiftDiscount"), + GlobalGeneralIncludeTax = oskuJtoken.Value("globalGeneralIncludeTax"), + GlobalGeneralTax = oskuJtoken.Value("globalGeneralTax"), + JdZhiFuYouHui = oskuJtoken.Value("jdZhiFuYouHui"), + JingDou = oskuJtoken.Value("jingDou"), + JingQuan = oskuJtoken.Value("jingQuan"), + JingXiangLiJin = oskuJtoken.Value("jingXiangLiJin"), + LiJinYouHui = oskuJtoken.Value("liJinYouHui"), + LuoDiPeiService = oskuJtoken.Value("luoDiPeiService"), + ManJian = oskuJtoken.Value("manJian"), + PingTaiChengDanYouHuiQuan = oskuJtoken.Value("pingTaiChengDanYouHuiQuan"), + Plus95 = oskuJtoken.Value("plus95"), + PromotionDiscount = oskuJtoken.Value("promotionDiscount"), + RemoteFee = oskuJtoken.Value("remoteFee"), + ShouldPay = oskuJtoken.Value("shouldPay"), + SuperRedEnvelope = oskuJtoken.Value("superRedEnvelope"), + TaxFee = oskuJtoken.Value("taxFee"), + TuiHuanHuoWuYou = oskuJtoken.Value("tuiHuanHuoWuYou"), + VenderFee = oskuJtoken.Value("venderFee"), + XianPinLeiDongQuan = xianPinLeiDongQuan, //数据不齐 + XianPinLeiJingQuan = oskuJtoken.Value("xianPinLeiJingQuan"), + ZhiFuYingXiaoYouHui = oskuJtoken.Value("zhiFuYingXiaoYouHui") + }; + orderSkuCFDetailList.Add(oskuCF); + } } + #endregion } - #endregion - } } } @@ -726,199 +727,211 @@ namespace BBWY.Server.Business orderState != Enums.OrderState.待付款 && orderState != Enums.OrderState.已取消) { - var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id); - if (orderCost == null && orderSellerPrice > 0M) + bool checkOrderTotal = true; + if (dbOrder.StorageType == Enums.StorageType.京仓 || dbOrder.StorageType == Enums.StorageType.云仓) { - if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null) + var orderTotalInfo = insertOrderTotalInfoList.FirstOrDefault(x => x.Id == dbOrder.Id); + if (orderTotalInfo == null) + orderTotalInfo = dbOrderTotalList.FirstOrDefault(x => x.Id == dbOrder.Id); + if (orderTotalInfo == null || orderTotalInfo.TotalShouldPay == 0M) + checkOrderTotal = false; + } + if (checkOrderTotal) + { + var orderCost = dbOrderCostList.FirstOrDefault(oc => oc.OrderId == dbOrder.Id); + if (orderCost == null && orderSellerPrice > 0M) { - //检查SD埋点 - if (sDCalculationCostRequest.PlatformCommissionRatio == 0M) - sDCalculationCostRequest.PlatformCommissionRatio = 0.05M; - orderCost = new OrderCost() + if (isNewOrder && dbOrder.StorageType == Enums.StorageType.SD && sDCalculationCostRequest != null) { - OrderId = sDCalculationCostRequest.OrderId, - PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio, - PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, - Profit = 0, - DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight, - CreateTime = DateTime.Now, - IsManualEdited = true, - SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount, - SDOrderAmount = sDCalculationCostRequest.SDOrderAmount - }; - orderCost.CalculationSDOrderProfitAndCost(dbOrder, null); - insertOrderCostList.Add(orderCost); - } - else if (!fsql.Select(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存 - { - var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("jdPrice") != 0M); - if (orderSkuJArray != null && orderSkuJArray.Count() > 0) + //检查SD埋点 + if (sDCalculationCostRequest.PlatformCommissionRatio == 0M) + sDCalculationCostRequest.PlatformCommissionRatio = 0.05M; + orderCost = new OrderCost() + { + OrderId = sDCalculationCostRequest.OrderId, + PlatformCommissionRatio = sDCalculationCostRequest.PlatformCommissionRatio, + PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, + Profit = 0, + DeliveryExpressFreight = sDCalculationCostRequest.DeliveryExpressFreight, + CreateTime = DateTime.Now, + IsManualEdited = true, + SDCommissionAmount = sDCalculationCostRequest.SDCommissionAmount, + SDOrderAmount = sDCalculationCostRequest.SDOrderAmount + }; + orderCost.CalculationSDOrderProfitAndCost(dbOrder, null); + insertOrderCostList.Add(orderCost); + } + else if (!fsql.Select(dbOrder.Id).Any()) //再查询一次数据库,以防同步开始执行后被人为操作扣减库存,造成重复扣减库存 { - var orderCostPurchaseAmount = 0M; - var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 - - //var avgPreferential = preferentialAmount / orderSkuJArray.Count(); - - #region 扣减库存 - foreach (var orderSkuJToken in orderSkuJArray) + var orderSkuJArray = orderJToken["itemInfoList"].Where(skuJToken => skuJToken.Value("jdPrice") != 0M); + if (orderSkuJArray != null && orderSkuJArray.Count() > 0) { - var orderSkuId = orderSkuJToken.Value("skuId"); - var itemTotal = orderSkuJToken.Value("itemTotal"); //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; - - decimal? skuJingDou = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && - x.SkuId == orderSkuId)?.JingDou; - if (skuJingDou == null) - skuJingDou = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou; - if (skuJingDou == null) - skuJingDou = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou; - - decimal? skuDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && - x.SkuId == orderSkuId)?.DongQuan; - if (skuDongQuan == null) - skuDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan; - if (skuDongQuan == null) - skuDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan; - - decimal? skuBalnace = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && - x.SkuId == orderSkuId)?.Balance; - if (skuBalnace == null) - skuBalnace = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance; - if (skuBalnace == null) - skuBalnace = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance; - #endregion + var orderCostPurchaseAmount = 0M; + var orderDeliveryExpressFreight = 0M; //发货总运费,sku购买数量第二个开始半价 + + //var avgPreferential = preferentialAmount / orderSkuJArray.Count(); - //var itemPrice = orderSkuJToken.Value("jdPrice"); //sku单价 - var isReduceMultiTimes = false; //是否多次扣减库存 - while (itemTotal != 0) + #region 扣减库存 + foreach (var orderSkuJToken in orderSkuJArray) { - var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType && - po.RemainingQuantity != 0 && - po.SkuId == orderSkuId); - if (purchaseOrder == null) - break; //没有库存了 - - //本次扣减量 - var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity; - //var deductionQuantity = itemTotal; - //本次扣减量的采购成本 - var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity; - //本次扣减量的发货运费 - var currentSkuDeliveryFreight = isReduceMultiTimes ? - (purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) : - (purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1)); - - purchaseOrder.RemainingQuantity -= deductionQuantity; - itemTotal -= deductionQuantity; - - //累计采购成本 - orderCostPurchaseAmount += currentPurchaseAmount; - //累计发货运费(销售运费) - orderDeliveryExpressFreight += currentSkuDeliveryFreight; - isReduceMultiTimes = true; - - var updateSql = fsql.Update(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity); - updatePurchaseOrderList.Add(updateSql); - - var orderCostDetail = new OrderCostDetail() + var orderSkuId = orderSkuJToken.Value("skuId"); + var itemTotal = orderSkuJToken.Value("itemTotal"); //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; + + decimal? skuJingDou = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && + x.SkuId == orderSkuId)?.JingDou; + if (skuJingDou == null) + skuJingDou = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou; + if (skuJingDou == null) + skuJingDou = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.JingDou; + + decimal? skuDongQuan = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && + x.SkuId == orderSkuId)?.DongQuan; + if (skuDongQuan == null) + skuDongQuan = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan; + if (skuDongQuan == null) + skuDongQuan = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.DongQuan; + + decimal? skuBalnace = orderSkuCFDetailList.FirstOrDefault(x => x.OrderId == orderId && + x.SkuId == orderSkuId)?.Balance; + if (skuBalnace == null) + skuBalnace = insertOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance; + if (skuBalnace == null) + skuBalnace = dbOrderSkuList.FirstOrDefault(x => x.OrderId == orderId && x.SkuId == orderSkuId)?.Balance; + #endregion + + //var itemPrice = orderSkuJToken.Value("jdPrice"); //sku单价 + var isReduceMultiTimes = false; //是否多次扣减库存 + while (itemTotal != 0) { - Id = idGenerator.NewLong(), - OrderId = orderId, - ProductId = orderSkuJToken.Value("wareId"), - SkuId = orderSkuId, - CreateTime = DateTime.Now, - PurchaseOrderPKId = purchaseOrder.Id, - //UnitCost = purchaseOrder.UnitCost, - DeductionQuantity = deductionQuantity, - DeliveryExpressFreight = currentSkuDeliveryFreight, - //TotalCost = currentPurchaseAmount, - ConsumableAmount = purchaseOrder.SingleConsumableAmount * deductionQuantity, - FirstFreight = purchaseOrder.SingleFirstFreight * deductionQuantity, - //OperationAmount = purchaseOrder.SingleOperationAmount * deductionQuantity, - InStorageAmount = purchaseOrder.SingleInStorageAmount * deductionQuantity, - OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity, - PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity, - SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity, - StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity, - IsEnabled = true - }; - - //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, - skuJingDou ?? 0M, - skuDongQuan ?? 0M, - skuBalnace ?? 0M, - platformCommissionRatio); - insertOrderCostDetailList.Add(orderCostDetail); + var purchaseOrder = dbPurchaseOrderList.FirstOrDefault(po => po.StorageType == dbOrder.StorageType && + po.RemainingQuantity != 0 && + po.SkuId == orderSkuId); + if (purchaseOrder == null) + break; //没有库存了 + + //本次扣减量 + var deductionQuantity = purchaseOrder.RemainingQuantity >= itemTotal ? itemTotal : purchaseOrder.RemainingQuantity; + //var deductionQuantity = itemTotal; + //本次扣减量的采购成本 + var currentPurchaseAmount = purchaseOrder.UnitCost * deductionQuantity; + //本次扣减量的发货运费 + var currentSkuDeliveryFreight = isReduceMultiTimes ? + (purchaseOrder.SingleDeliveryFreight / 2 * deductionQuantity) : + (purchaseOrder.SingleDeliveryFreight + purchaseOrder.SingleDeliveryFreight / 2 * (deductionQuantity - 1)); + + purchaseOrder.RemainingQuantity -= deductionQuantity; + itemTotal -= deductionQuantity; + + //累计采购成本 + orderCostPurchaseAmount += currentPurchaseAmount; + //累计发货运费(销售运费) + orderDeliveryExpressFreight += currentSkuDeliveryFreight; + isReduceMultiTimes = true; + + var updateSql = fsql.Update(purchaseOrder.Id).Set(po => po.RemainingQuantity - deductionQuantity); + updatePurchaseOrderList.Add(updateSql); + + var orderCostDetail = new OrderCostDetail() + { + Id = idGenerator.NewLong(), + OrderId = orderId, + ProductId = orderSkuJToken.Value("wareId"), + SkuId = orderSkuId, + CreateTime = DateTime.Now, + PurchaseOrderPKId = purchaseOrder.Id, + //UnitCost = purchaseOrder.UnitCost, + DeductionQuantity = deductionQuantity, + DeliveryExpressFreight = currentSkuDeliveryFreight, + //TotalCost = currentPurchaseAmount, + ConsumableAmount = purchaseOrder.SingleConsumableAmount * deductionQuantity, + FirstFreight = purchaseOrder.SingleFirstFreight * deductionQuantity, + //OperationAmount = purchaseOrder.SingleOperationAmount * deductionQuantity, + InStorageAmount = purchaseOrder.SingleInStorageAmount * deductionQuantity, + OutStorageAmount = purchaseOrder.SingleOutStorageAmount * deductionQuantity, + PurchaseFreight = purchaseOrder.SingleFreight * deductionQuantity, + SkuAmount = purchaseOrder.SingleSkuAmount * deductionQuantity, + StorageAmount = purchaseOrder.SingleStorageAmount * deductionQuantity, + IsEnabled = true + }; + + //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, + skuJingDou ?? 0M, + skuDongQuan ?? 0M, + skuBalnace ?? 0M, + platformCommissionRatio); + insertOrderCostDetailList.Add(orderCostDetail); + } } - } - #endregion + #endregion - #region 计算成本 - orderCost = new OrderCost() - { - OrderId = orderId, - PlatformCommissionRatio = platformCommissionRatio, - PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, - Profit = 0, - PurchaseAmount = orderCostPurchaseAmount, - DeliveryExpressFreight = orderDeliveryExpressFreight, - CreateTime = DateTime.Now - }; - if (dbOrder.OrderTotalPrice != 0) - orderCost.CalculationOrderProfitAndCost(dbOrder, null); - else - orderCost.CalculationOrderProfitAndCost(actualAmount, null); + #region 计算成本 + orderCost = new OrderCost() + { + OrderId = orderId, + PlatformCommissionRatio = platformCommissionRatio, + PreferentialAmount = (dbOrderTotal?.TotalPingTaiChengDanYouHuiQuan) ?? dbOrder.PreferentialAmount, + Profit = 0, + PurchaseAmount = orderCostPurchaseAmount, + DeliveryExpressFreight = orderDeliveryExpressFreight, + CreateTime = DateTime.Now + }; + if (dbOrder.OrderTotalPrice != 0) + orderCost.CalculationOrderProfitAndCost(dbOrder, null); + else + orderCost.CalculationOrderProfitAndCost(actualAmount, null); - insertOrderCostList.Add(orderCost); - #endregion + insertOrderCostList.Add(orderCost); + #endregion + } } } } diff --git a/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs b/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs index 23d13394..c0d0a210 100644 --- a/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs +++ b/BBWY.Server.Model/Dto/Request/PurchaseOrder/OnlinePurchase/PreviewOrderReuqest.cs @@ -12,6 +12,6 @@ namespace BBWY.Server.Model.Dto public ConsigneeRequest Consignee { get; set; } - public IList CargoParamList { get; set; } + public List CargoParamList { get; set; } } }