From 6590fb4d8482a7c2115dff63360358171bd3cb1d Mon Sep 17 00:00:00 2001 From: wufan Date: Wed, 15 Jan 2025 14:12:42 +0800 Subject: [PATCH] :ambulance: --- TradeManageNew/DD_OrderServiceNew.asmx.cs | 217 ++++++++++++++++-- .../CancelShopifyUsedSaleOrderDto.cs | 16 ++ .../ShopifyUsedSaleOrderDto.cs | 28 --- TradeManageNew/TradeManageNew.csproj | 1 + .../Models/DT_ShopifyUsedSaleOrder.cs | 17 +- 5 files changed, 230 insertions(+), 49 deletions(-) create mode 100644 TradeManageNew/Models/ShopifyUsedSale/CancelShopifyUsedSaleOrderDto.cs diff --git a/TradeManageNew/DD_OrderServiceNew.asmx.cs b/TradeManageNew/DD_OrderServiceNew.asmx.cs index 8c04d27..7a3a73c 100644 --- a/TradeManageNew/DD_OrderServiceNew.asmx.cs +++ b/TradeManageNew/DD_OrderServiceNew.asmx.cs @@ -28994,7 +28994,7 @@ namespace TradeManageNew }; } - var originJsonData = ShopifyUsedSaleOrderDto.FromJson(originJson); + var originJsonData = JsonConvert.DeserializeObject(originJson); using (var db = new TradeUsedSale.Repositories.ErpDbContext()) { @@ -29038,25 +29038,6 @@ namespace TradeManageNew { foreach (var item in originJsonData.Items) { - var newDtShopifyUsedSaleOrderItem = - new TradeUsedSale.Repositories.Models.DT_ShopifyUsedSaleOrderItem - { - DtShopifyUsedSaleOrderId = dtShopifyUsedSaleOrderId, - OriginSku = item.OriginSku, - Sku = item.Sku, - ProductCode = item.ProductCode, - Quantity = item.Quantity, - Price = item.Price, - Title = item.Title, - VariantTitle = item.VariantTitle, - ProductId = item.ProductId, - VariantId = item.VariantId, - Image = item.Image, - ShippingMethod = item.ShippingMethod - }; - - db.InsertWithInt32Identity(newDtShopifyUsedSaleOrderItem); - //ERP二手商品信息 var orderUsedSalePlatform = db.DT_OrderUsedSalePlatform.FirstOrDefault(x => x.BarCode == item.ProductCode); if (orderUsedSalePlatform is null) @@ -29107,6 +29088,26 @@ namespace TradeManageNew .Set(x => x.IsPlaceOrderSuccess, true) .Set(x => x.PlaceOrderMessage, "更新二手订单信息成功") .Update(); + + //添加Shopify订单明细 + var newDtShopifyUsedSaleOrderItem = + new TradeUsedSale.Repositories.Models.DT_ShopifyUsedSaleOrderItem + { + DtShopifyUsedSaleOrderId = dtShopifyUsedSaleOrderId, + OriginSku = item.OriginSku, + Sku = item.Sku, + ProductCode = item.ProductCode, + Quantity = item.Quantity, + Price = item.Price, + Title = item.Title, + VariantTitle = item.VariantTitle, + ProductId = item.ProductId, + VariantId = item.VariantId, + Image = item.Image, + ShippingMethod = item.ShippingMethod + }; + + db.InsertWithInt32Identity(newDtShopifyUsedSaleOrderItem); } db.CommitTransaction(); @@ -29129,6 +29130,182 @@ namespace TradeManageNew }; } + [WebMethod(EnableSession = true)] + public APIReturnModel CancelShopifyUsedSaleOrderCallback(string originJson) + { + if (string.IsNullOrWhiteSpace(originJson)) + { + return new APIReturnModel + { + Code = 0, + Message = "下单Json数据为空,请检查", + Datas = null + }; + } + + var originJsonData = JsonConvert.DeserializeObject(originJson); + + using (var db = new TradeUsedSale.Repositories.ErpDbContext()) + { + var shopifyUsedSaleOrder = db.DT_ShopifyUsedSaleOrder.FirstOrDefault(x => x.OrderId == originJsonData.OrderId); + if (shopifyUsedSaleOrder is null) + { + PagesNew.SaveLog(0, "Shopify二手商品取消", $"未找到ShopifyOrderId为{originJsonData.OrderId}Shopify二手订单,原始Json为:{originJson}", 0); + } + + try + { + db.BeginTransaction(); + + db.DT_ShopifyUsedSaleOrder.Where(x => x.OrderId == originJsonData.OrderId) + .Set(x => x.IsCancelled, true) + .Set(x => x.CancelReason, originJsonData.CancelReason) + .Set(x => x.CancelDate, originJsonData.CancelDate.DateTime) + .Update(); + + var shopifyUsedSaleOrderItems = db.DT_ShopifyUsedSaleOrderItem + .Where(x => x.DtShopifyUsedSaleOrderId == shopifyUsedSaleOrder.Id) + .ToList(); + + foreach (var saleOrderItem in shopifyUsedSaleOrderItems) + { + //ERP二手商品 + var orderUsedSalePlatform = db.DT_OrderUsedSalePlatform.FirstOrDefault(x => x.BarCode == saleOrderItem.ProductCode); + if (orderUsedSalePlatform is null) + { + throw new Exception($"不存在打印条码为[{saleOrderItem.ProductCode}]的二手商品"); + } + + #region 重新上传Shopify变体 + + //系统产品信息 + var product = db.HW_GoodsInfo.FirstOrDefault(x => x.GoodsId == orderUsedSalePlatform.ProductId); + if (product is null) + { + var message = $"系统中不存在编码为[{orderUsedSalePlatform.ProductCode}]的产品信息,无法推送至Shopify"; + throw new Exception(message); + } + + //毛重 + if (product.Weight is null || product.Weight <= 0) + { + var message = $"产品[{product.GoodsCode}]无毛重信息,无法推送至Shopify"; + throw new Exception(message); + } + + //建议售价 + if (product.JYPrice is null || product.JYPrice <= 0) + { + var message = $"产品[{product.GoodsCode}]无建议售价,无法推送至Shopify"; + throw new Exception(message); + } + + //预估运费 + var postFee = db.HW_PostFee.FirstOrDefault(x => x.GoodsId == orderUsedSalePlatform.ProductId); + if (postFee is null) + { + throw new Exception( $"产品[{product.GoodsCode}]无预估运费,无法推送至Shopify"); + } + var fees = new List() + { + postFee.Fee1, + //postFee.Fee2, + postFee.Fee3, + postFee.Fee4, + postFee.Fee5, + //postFee.Fee6, + postFee.Fee7, + postFee.Fee8, + }.Where(x => x != null).ToList(); + var feeCost = fees.Any() ? fees.Min() : 0; + + if (feeCost <= 0) + { + throw new Exception( $"产品[{product.GoodsCode}]预估运费小于0,无法推送至Shopify"); + } + + //Shopify商品映射 + var shopifyProductGoodsMap = db.DT_ShopifyProductGoodsMap.FirstOrDefault(x => x.SkuId == orderUsedSalePlatform.SkuId); + if (shopifyProductGoodsMap is null) + { + throw new Exception($"未获取到SKU[{orderUsedSalePlatform.SkuCode}]对应的Shopify产品信息"); + } + + //获取SKU的资料信息 + var shopifyProductProfile = + db.DT_ShopifyUsedSaleProduct.FirstOrDefault(x => x.Sku == orderUsedSalePlatform.SkuCode); + + //Shopify客户端 + var shopifyApiClient = new ShopifyAPIClient(); + + var imageUrls = JsonConvert.DeserializeObject>(orderUsedSalePlatform.ImageUrls); + //在Shopify创建产品变体信息 + var createShopifyVariantParameter = new AddVariantRequest + { + ProductBaseData = new ProductBaseData2 + { + ShoifyGoodsId = shopifyProductGoodsMap.ShopifyProductId, + SKU = shopifyProductProfile?.Sku ?? orderUsedSalePlatform.SkuCode, + Title = shopifyProductProfile?.Title ?? product.GoodsEnglisgName, + ImagePath = shopifyProductProfile?.ImagePath ?? product.FirstImgUrl, + ProductType = shopifyProductProfile?.Category, + Tags = shopifyProductProfile?.Tags, + Weight = product.Weight.Value, + JYPrice = product.JYPrice.Value, + ShippingFee = feeCost.Value + }, + Variants = new Variants + { + Return_quantity = 1, + ImgUrl = imageUrls.Count > 0 ? imageUrls[0] : null, + ImgUrl2 = imageUrls.Count > 1 ? imageUrls[1] : null, + ImgUrl3 = imageUrls.Count > 2 ? imageUrls[2] : null, + ImgUrl4 = imageUrls.Count > 3 ? imageUrls[3] : null, + ImgUrl5 = imageUrls.Count > 4 ? imageUrls[4] : null, + StoreName = orderUsedSalePlatform.WarehouseLocation == + TradeUsedSale.Enums.WarehouseLocation.East + ? "E" + : "W", + Code = orderUsedSalePlatform.BarCode, + }, + }; + + var productVariantRes = shopifyApiClient.AddProductVariantAsync(createShopifyVariantParameter).ConfigureAwait(false) + .GetAwaiter() + .GetResult(); + + if (productVariantRes.Success != true) + { + var message = $"产品[{product.GoodsCode}]推送Shopify变体失败,原因:{productVariantRes.Message}"; + throw new Exception(message); + } + + db.DT_OrderUsedSalePlatform.Where(x => x.Id == orderUsedSalePlatform.Id) + .Set(x => x.Status, TradeUsedSale.Enums.UsedSalePlatformStatus.Listed) + .Set(x => x.ShippingMethod, value: null) + .Update(); + + #endregion + } + + db.CommitTransaction(); + } + catch (Exception ex) + { + db.RollbackTransaction(); + + PagesNew.SaveLog(0, "Shopify二手商品取消", $"执行失败,原始Json为:{originJson},原因:{ex.Message}", 0); + } + } + + return new APIReturnModel + { + Code = 1, + Message = "Success", + Datas = null + }; + } + #endregion diff --git a/TradeManageNew/Models/ShopifyUsedSale/CancelShopifyUsedSaleOrderDto.cs b/TradeManageNew/Models/ShopifyUsedSale/CancelShopifyUsedSaleOrderDto.cs new file mode 100644 index 0000000..e15c92b --- /dev/null +++ b/TradeManageNew/Models/ShopifyUsedSale/CancelShopifyUsedSaleOrderDto.cs @@ -0,0 +1,16 @@ +using System; +using Newtonsoft.Json; + +namespace TradeManageNew.Models.ShopifyUsedSale +{ + public partial class CancelShopifyUsedSaleOrderDto + { + [JsonProperty("orderId")] public string OrderId { get; set; } + + [JsonProperty("orderNumber")] public string OrderNumber { get; set; } + + [JsonProperty("cancelDate")] public DateTimeOffset CancelDate { get; set; } + + [JsonProperty("cancelReason")] public string CancelReason { get; set; } + } +} \ No newline at end of file diff --git a/TradeManageNew/Models/ShopifyUsedSale/ShopifyUsedSaleOrderDto.cs b/TradeManageNew/Models/ShopifyUsedSale/ShopifyUsedSaleOrderDto.cs index 243f71c..5156378 100644 --- a/TradeManageNew/Models/ShopifyUsedSale/ShopifyUsedSaleOrderDto.cs +++ b/TradeManageNew/Models/ShopifyUsedSale/ShopifyUsedSaleOrderDto.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Globalization; using Newtonsoft.Json; -using Newtonsoft.Json.Converters; namespace TradeManageNew.Models.ShopifyUsedSale { @@ -133,30 +131,4 @@ namespace TradeManageNew.Models.ShopifyUsedSale [JsonProperty("tags")] public string Tags { get; set; } } - - public partial class ShopifyUsedSaleOrderDto - { - public static ShopifyUsedSaleOrderDto FromJson(string json) => - JsonConvert.DeserializeObject(json, - TradeManageNew.Models.ShopifyUsedSale.Converter.Settings); - } - - public static class Serialize - { - public static string ToJson(this ShopifyUsedSaleOrderDto self) => - JsonConvert.SerializeObject(self, TradeManageNew.Models.ShopifyUsedSale.Converter.Settings); - } - - internal static class Converter - { - public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings - { - MetadataPropertyHandling = MetadataPropertyHandling.Ignore, - DateParseHandling = DateParseHandling.None, - Converters = - { - new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } - }, - }; - } } \ No newline at end of file diff --git a/TradeManageNew/TradeManageNew.csproj b/TradeManageNew/TradeManageNew.csproj index 30b8669..f0ed0a7 100644 --- a/TradeManageNew/TradeManageNew.csproj +++ b/TradeManageNew/TradeManageNew.csproj @@ -2920,6 +2920,7 @@ + OrderAPI.ashx diff --git a/TradeUsedSale/Repositories/Models/DT_ShopifyUsedSaleOrder.cs b/TradeUsedSale/Repositories/Models/DT_ShopifyUsedSaleOrder.cs index ceae844..7e9d09b 100644 --- a/TradeUsedSale/Repositories/Models/DT_ShopifyUsedSaleOrder.cs +++ b/TradeUsedSale/Repositories/Models/DT_ShopifyUsedSaleOrder.cs @@ -99,7 +99,7 @@ namespace TradeUsedSale.Repositories.Models /// 原始Json /// public string OriginJson { get; set; } - + /// /// 是否同步下单信息成功 /// @@ -109,5 +109,20 @@ namespace TradeUsedSale.Repositories.Models /// 下单同步信息 /// public string PlaceOrderMessage { get; set; } + + /// + /// 是否已取消 + /// + public bool? IsCancelled { get; set; } + + /// + /// 取消原因 + /// + public string CancelReason { get; set; } + + /// + /// 取消时间 + /// + public DateTime? CancelDate { get; set; } } } \ No newline at end of file