内的所有子元素
+// HtmlNodeCollection childNodes = orderDiv.ChildNodes;
+// foreach (HtmlNode node in childNodes)
+// {
+// // 处理每个子元素
+// string innerText = node.InnerText; // 获取元素的文本内容
+// string outerHtml = node.OuterHtml; // 获取元素的HTML代码
+// // 其他操作...
+
+// if (node.Name == "div")
+// {
+// var zone_orders = node.Descendants("div")
+// .Where(div => div.Attributes.Contains("class") && div.GetAttributeValue("class", "").Equals("zone-order", StringComparison.OrdinalIgnoreCase));
+
+// foreach (HtmlNode zone_order in zone_orders)
+// {
+// // 获取 data-source 属性的值
+// string dataSourceValue = zone_order.GetAttributeValue("data-source", "");
+
+// var groupHeaderJson = JsonConvert.DeserializeObject
(dataSourceValue);
+// //sellerMemberId
+// string sellerMemberId = groupHeaderJson.sellerMemberId.ToString();
+// //sellerUserId
+// string sellerUserId = groupHeaderJson.sellerUserId.ToString();
+// ////buyerMemberId
+// //string buyerMemberId = groupHeaderJson.buyerMemberId.ToString();
+// //orderOutId
+// string orderOutId = groupHeaderJson.orderOutId.ToString();
+// //group
+// string group = groupHeaderJson.group.ToString();
+// //belong
+// string belong = groupHeaderJson.belong.ToString();
+// //flow 下单类型
+// flow = groupHeaderJson?.flow?.ToString();
+// //bizType
+// string bizType = groupHeaderJson?.bizType?.ToString();
+
+
+// var groupDiv = zone_order.Descendants("li")
+// .Where(li => li.Attributes.Contains("class") && li.GetAttributeValue("class", "").Equals("step-item step-item-first", StringComparison.OrdinalIgnoreCase));
+// //.SelectSingleNode("//li[@class='step-item step-item-first']");
+
+// if (groupDiv == null)
+// {
+// continue;
+// }
+
+// string stepName = "";
+// foreach (var item in groupDiv)
+// {
+// var groupDivDataSource = item.GetAttributeValue("data-source", "");
+// if (groupDivDataSource != null)
+// {
+
+// var json = JsonConvert.DeserializeObject(groupDivDataSource);
+// group = json.group.ToString();
+// stepName = json.stepName.ToString();
+// }
+// }
+
+
+
+
+// OrderGroupParameter orderGroupParameter = new OrderGroupParameter()
+// {
+// Group = group,
+// StepName = stepName,
+// OrderOutId = orderOutId,
+// MemberId = sellerMemberId,
+// SellerUserId = sellerUserId,
+// Belong = belong,
+
+
+// };
+
+
+
+
+
+// var groupOrders = zone_order.Descendants("tr")
+// .Where(tr => tr.Attributes.Contains("data-group-name"));
+// List productAmountList = new List();
+// List OrderProductParameterList = new List();
+// foreach (var groupOrder in groupOrders)
+// {
+
+// if (groupOrder.Name == "tr")
+// {
+
+// var data_source = groupOrder.GetAttributeValue("data-source", "");
+// string groutOuterHtml = groupOrder.OuterHtml;
+// if (data_source != null)
+// {
+
+// var sumCarriage = GetRegexValue(groutOuterHtml, "\"fee\":([^,]+),");
+// if (sumCarriage == null)
+// {
+// sumCarriage = "0";
+// }
+
+// //"freightId":"18605534"
+// var freightId = GetRegexValue(groutOuterHtml, "\"freightId\":\"([^\"]+)\"");
+// //'freightId':'16850501'
+// if (freightId == null)
+// {
+// freightId = GetRegexValue(groutOuterHtml, "'freightId':'([^\']+)'");
+// }
+
+
+
+// //'outId':'general_705889664759_df9e522ec29afb80a682fcaac1dce50c',
+// var outId = GetRegexValue(data_source, "'outId':'([^']+)'");
+
+
+
+// //"discountFee":"0"
+// var discountFee = decimal.Parse(GetRegexValue(data_source, "\"discountFee\":\"([^\"]+)\"") ?? "0");
+
+
+// var cargoKey = GetRegexValue(data_source, "'cargoKey':'([^']+)'");
+// //'unitPrice':'6.33'
+// var unitPrice = decimal.Parse(GetRegexValue(data_source, "'unitPrice':'([^']+)'"));
+// var payFee = (int)(unitPrice * 100);
+
+// //'quantity':1.0
+// int quantity = (int)(decimal.Parse(GetRegexValue(data_source, "'quantity':([^,]+),")));
+
+// //'offerId':'563883060952',
+// var offerId = GetRegexValue(data_source, "'offerId':'([^']+)'");
+
+// //'skuId':'ea66ab9ceff1fbcc8d0b97d4926e476f',
+// var spectId = GetRegexValue(data_source, "'skuId':'([^']+)'");
+
+// //'tbSkuId':'5408119750040',
+// var skuId = GetRegexValue(data_source, "'tbSkuId':'([^']+)'");
+// //'offerPriceRangeJson':[{"ba":1,"ea":0,"p":2.5}]
+// var offerPriceRangeJson = GetRegexValue(data_source, "'offerPriceRangeJson'\\s*:\\s*\\[(.*?)\\]")?.Replace(""", "\"");
+
+
+// var productAmount = quantity * unitPrice - discountFee;
+// productAmountList.Add(productAmount);
+
+
+// OrderProductParameterList.Add(new OrderProductParameter()
+// {
+// ProductAmount = productAmount,
+// CargoKey = cargoKey,
+// ProductId = offerId,
+// SkuId = skuId,
+// SpectId = spectId,
+// UnitPrice = unitPrice,
+// Quantity = quantity,
+// DiscountFee = discountFee,
+// SumCarriage = decimal.Parse(sumCarriage),
+// FreightId = freightId,
+// OutId = outId,
+// OfferPriceRangeJson = offerPriceRangeJson
+
+// });
+// }
+
+// }
+// }
+
+// var totalProductAmount = OrderProductParameterList.Sum(p => p.ProductAmount);
+
+// var actualPay = OrderProductParameterList.Sum(p => p.ProductAmount + p.SumCarriage);
+
+
+// orderGroupParameter.SumCarriage = OrderProductParameterList.Sum(p => p.SumCarriage);
+// orderGroupParameter.ActualPay = actualPay;
+// orderGroupParameter.ActualPayFee = (int)(actualPay * 100);
+// orderGroupParameter.TotalProductAmount = totalProductAmount;
+// orderGroupParameter.PayFee = (int)(totalProductAmount * 100);
+// orderGroupParameter.OrderProductParameterList = OrderProductParameterList;
+// OrderGroupParameterList.Add(orderGroupParameter);
+// }
+
+
+// }
+// }
+
+// res.OrderGroupParameterList = OrderGroupParameterList;
+
+
+// }
+
+// return res;
+
+// }
+
+
+// ///
+// /// 输入临时收货地址(姓名 手机号 收货地址)或者直接输入地址 (主要获取邮编编码) //feiyu 19959858952 福建省泉州市鲤城区金龙街道古龙路媒人桥2号三文公寓一楼齐越中转仓
+// ///
+// public AddressModel InputAddress(string adress, string _csrf_token)
+// {
+// //callback=jQuery17207000444400310621_1711938052406&address=feiyu+19959858952+%E7%A6%8F%E5%BB%BA%E7%9C%81%E6%B3%89%E5%B7%9E%E5%B8%82%E9%B2%A4%E5%9F%8E%E5%8C%BA%E9%87%91%E9%BE%99%E8%A1%97%E9%81%93%E5%8F%A4%E9%BE%99%E8%B7%AF%E5%AA%92%E4%BA%BA%E6%A1%A52%E5%8F%B7%E4%B8%89%E6%96%87%E5%85%AC%E5%AF%93%E4%B8%80%E6%A5%BC%E9%BD%90%E8%B6%8A%E4%B8%AD%E8%BD%AC%E4%BB%93&_csrf_token=42b5ba743ad1a219f275a0f2b8f13303&_input_charset=utf-8
+// string url = $"https://wuliu.1688.com/address/ajax/address_parse.jsx?callback=jQuery17207000444400310621_1711938052406&address={UrlEncode(adress, "utf-8")}&_csrf_token={_csrf_token}&_input_charset=utf-8";
+
+// /*
+// jQuery17207000444400310621_1711938052406({
+// "data": {
+// "addressDetail": "金龙街道古龙路媒人桥2号三文公寓一楼齐越中转仓",
+// "city": "泉州市",
+// "cityCode": 350500,
+// "district": "鲤城区",
+// "districtCode": 350502,
+// "divisionZip": "362000",
+// "mobileNO": "19959858952",
+// "personalName": "feiyu",
+// "province": "福建省",
+// "provinceCode": 350000
+// },
+// "success": true
+//})
+// */
+
+// using HttpClient http = new HttpClient();
+// http.BaseAddress = new Uri(url);
+// http.DefaultRequestHeaders.Add("Cookie", _1688Cookie);
+// http.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0");
+// var res = http.GetAsync(url).Result;
+// if (res.IsSuccessStatusCode)
+// {
+// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+// var html = res?.Content?.ReadAsStringAsync().Result;
+// if (html.Contains("会话已过期,请刷新页面"))
+// {
+// AddLog?.Invoke("登陆已过期,请刷新页面");
+// return null;
+// }
+
+// var addressCode = GetRegexValue(html, "\"districtCode\":(\\d+)");
+// var divisionZip = GetRegexValue(html, "\"divisionZip\":\"([^\"]+)\"");
+// var mobileNO = GetRegexValue(html, "\"mobileNO\":\"([^\"]+)\"");
+// var personalName = GetRegexValue(html, "\"personalName\":\"([^\"]+)\"");
+// var addressDetail = GetRegexValue(html, "\"addressDetail\":\"([^\"]+)\"");
+// return new AddressModel()
+// {
+// AddressDetail = addressDetail,
+// DivisionZip = divisionZip,
+// MobileNO = mobileNO,
+// PersonalName = personalName,
+// AddressCode = addressCode
+// };
+// }
+
+// return null;
+
+
+
+// }
+
+// //刷新物流列表
+// public OrderParameter ReflashAdress(OrderParameter oldData, AddressModel addressModel, OrderModel orderModel)
+// {
+
+// string url = "https://order.1688.com/order/smart_ajax.jsx?_input_charset=utf-8";
+
+
+
+// List generalOrders_orderGroupKeyList = new List();
+// foreach (var orderGroup in oldData.OrderGroupParameterList)
+// {
+// List orderList = new List();
+// foreach (var orderProduct in orderGroup.OrderProductParameterList)
+// {
+// string freightId = orderProduct.FreightId;
+// string order = $@"{{""offerId"":""{orderProduct.ProductId}"",""skuId"":""{orderProduct.SpectId}"",""tbSkuId"":""{orderProduct.SkuId}"",""hasSkuUmp"":""false"",""outId"":""{orderProduct.OutId}"",""quantity"":{orderProduct.Quantity},""isfreefreight"":0,""marketingScene"":"""",""offerPriceRangeJson"":[{orderProduct.OfferPriceRangeJson}],""unitPrice"":""{orderProduct.UnitPrice}"",""bundle"":"""",""couple"":"""",""freightId"":""{freightId}"",""rebate"":0,""buyerBearServiceFee"":false,""gift"":""0""}}";
+// orderList.Add(order);
+// }
+
+
+// string orderGroupData = $@"""{orderGroup.Group}"":{{""order"":[{string.Join(",", orderList)}] ,""orderOutId"":""{orderGroup.OrderOutId}"",""orderBundle"":"""",""orderCouple"":"""",""type"":""address"",""memberId"":""{orderGroup.MemberId}"",""sellerUserId"":""{orderGroup.SellerUserId}"",""operate"":"""",""countyCode"":""{addressModel.AddressCode}"",""addressCode"":""{addressModel.AddressCode}"",""address"":""-1"",""townCode"":"""",""umpSysAvailble"":""1"",""bizType"":""{orderModel}"",""bizScene"":""{orderModel}"",""transportType"":""multiStep"",""groupId"":""{orderGroup.Group}"",""tplCode"":""assureTrade"",""countryISOCode"":"""",""channelId"":"""",""mobile"":""{addressModel.MobileNO}"",""orderAmount"":""{orderGroup.ActualPayFee}"",""carriage"":""{orderGroup.SumCarriage}"",""belong"":""{orderGroup.Belong}""}}";
+
+// generalOrders_orderGroupKeyList.Add(orderGroupData);
+// }
+
+// string generalOrders_orderGroupKey = string.Join(",", generalOrders_orderGroupKeyList);
+
+
+
+// string data = $"{{\"ordersUmp.0\":{{\"orderBlockAjaxParam\":{{\"{orderModel}Orders..orderGroupKey\":{{{generalOrders_orderGroupKey}}}}},\"changeType\":\"address\",\"selectedCrossPromotionId\":\"\",\"selectedCrossPromotionIdMap\":\"{{}}\",\"bizScene\":\"{orderModel}\"}}}}";
+
+// string postData = $"tasks=ordersUmp.0&data={UrlEncode(data, "UTF-8")}&_csrf_token={oldData.Csrf_token}&lvId={oldData.Lvid}";
+// var response = PostHtml(url, postData, _1688Cookie);
+
+// if (response == null || !response.IsSuccessStatusCode)
+// {
+// AddLog("获取订单参数失败");
+// return null;
+// }
+// // string lvid = response.Headers.Get("Eagleeye-Traceid");
+
+// if (response.Headers.Contains("Eagleeye-Traceid"))
+// {
+// //获取响应头 Resin-Trace的值
+
+// var trace = response.Headers.GetValues("Eagleeye-Traceid");
+// if (trace.Any())
+// {
+// oldData.Lvid = trace.FirstOrDefault();
+// }
+// }
+
+// var html = response.Content.ReadAsStringAsync().Result;
+
+// var json = JsonConvert.DeserializeObject(html);
+
+// dynamic jsonObj = JsonConvert.DeserializeObject(html);
+
+
+// if (jsonObj["success"].ToString() == "true")
+// {
+
+
+// var datawuliu = jsonObj["data"]["ordersUmp.0"]["data"]["orderPromotion"].ToString();
+
+// //获取键值对的方式
+// bool isReflash = false;
+// JObject jbO = JObject.Parse(datawuliu);
+// foreach (var property in jbO.Properties())
+// {
+// var key = property.Name;
+// var groupData = oldData.OrderGroupParameterList.SingleOrDefault(o => o.Group == key);
+
+// var value = property.Value;
+// //获取value下的 freight
+// var freight = (JObject)value["freight"];
+// //获取freight的键值对的key值
+// foreach (var item in freight.Properties())
+// {
+// var freightKey = item.Name;
+// var freightValue = item.Value;
+// //获取freight的键值对的value值
+
+// //totalFreightFee的值
+// var wuliufee = freightValue["totalFreightFee"].ToString();
+
+
+// groupData.OrderProductParameterList.OrderByDescending(s => s.SumCarriage).FirstOrDefault(g => g.FreightId == freightKey).SumCarriage = decimal.Parse(wuliufee) / 100m;
+
+
+
+// isReflash = true;
+// }
+
+
+// var order = (JObject)value["order"];
+
+// foreach (var item in order.Properties())
+// {
+// var outId = item.Name;
+
+// var orderProduct = groupData.OrderProductParameterList.FirstOrDefault(g => g.OutId == outId);
+
+// if (orderProduct != null)
+// {
+// orderProduct.ProductAmount = item.Value["amount"].ToObject();
+
+// //selectedUmpBundle 的couple
+
+// var skuSelectedUmpBundle = item.Value["selectedUmpBundle"];
+
+// if (skuSelectedUmpBundle != null)
+// {
+// var couple = skuSelectedUmpBundle["couple"].ToString();
+
+// var sceneUnitPrice = skuSelectedUmpBundle["sceneUnitPrice"].ToObject();
+
+
+// var discountFee = skuSelectedUmpBundle["price"].ToObject();//折扣价格
+
+// var skuChooseFreeFreight = skuSelectedUmpBundle["isFreeFreight"].ToObject() ? 1 : 0;
+
+
+
+
+// orderProduct.Couple = couple;
+// orderProduct.ChooseFreeFreight = skuChooseFreeFreight;
+
+// orderProduct.ProductAmount = orderProduct.UnitPrice * orderProduct.Quantity - discountFee;
+
+// }
+
+
+// }
+
+
+
+
+
+
+
+// }
+
+// //selectedShopUmpBundle
+
+
+// var selectedShopUmpBundle = value["selectedShopUmpBundle"];
+
+// bool isFreeFreight = false;
+// decimal shopDiscountFee = 0;
+// string shopCouple = "";
+// if (selectedShopUmpBundle != null)
+// {
+// shopCouple = selectedShopUmpBundle["couple"].ToString();//店铺优惠券
+// isFreeFreight = selectedShopUmpBundle["isFreeFreight"].ToObject();//是否包邮
+// shopDiscountFee = selectedShopUmpBundle["price"].ToObject();//店铺优惠金额
+// }
+// groupData.ChooseFreeFreight = isFreeFreight ? 1 : 0;
+// groupData.PromotionId = shopCouple;
+
+
+
+
+// if (isFreeFreight)
+// groupData.SumCarriage = 0;
+// else
+// groupData.SumCarriage = groupData.OrderProductParameterList.Select(s => s.SumCarriage).Sum();
+
+// groupData.TotalProductAmount = groupData.OrderProductParameterList.Select(s => s.ProductAmount).Sum();
+
+// groupData.ActualPay = groupData.TotalProductAmount + groupData.SumCarriage - shopDiscountFee;
+// groupData.ActualPayFee = (int)(groupData.ActualPay * 100);
+
+
+
+
+
+
+
+
+
+// }
+// if (isReflash)
+// {
+// AddLog?.Invoke("刷新地址成功");
+// }
+// else
+// {
+// AddLog?.Invoke("刷新地址失败");
+// }
+
+// }
+// else
+// {
+// AddLog?.Invoke("刷新地址失败");
+// }
+
+// return oldData;
+
+// }
+
+
+
+// public string GetCookieStr(string cookies, string cookieName)
+// {
+// //通过;分割
+// var cookieDatas = cookies.Split(';', StringSplitOptions.RemoveEmptyEntries);
+// foreach (var cookie in cookieDatas)
+// {
+// var cookieParams = cookie.Split('=');
+// if (cookieParams.Count() >= 2)
+// {
+// var key = cookieParams[0]?.Trim();
+// var value = cookieParams[1]?.Trim();
+// if (key == cookieName)
+// {
+// return value;
+// }
+// }
+// }
+// return "";
+// }
+
+// private string GetRegexValue(string html, string patternStr)
+// {
+// //使用正则匹配出值
+
+// var regex = Regex.Match(html, patternStr);
+
+// if (regex.Success)
+// {
+// return regex.Groups[1].Value;
+// }
+// return null;
+
+// }
+
+
+
+// //获取_csrf_token参数
+// public string GetCsrfToken(string cookies)
+// {
+// var csrf_token = GetCookieStr(cookies, "_csrf_token");
+
+// if (csrf_token == null)
+// {
+// return null;
+// }
+// return Md5Helper.Md5_32(csrf_token);
+// }
+
+// //加入购物车
+// public void AddCart(string offerId, string specId, int quantity, string IpvId)
+// {
+// try
+// {
+// //时间戳
+// var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+// string url = "https://cart.1688.com/ajax/safe/add_to_cart_list_new.jsx";
+
+// string ext = $"{{\"sceneCode\":\"offerdetail:pc;ipvId:{IpvId}\"}}";
+
+// string specData = $"[{{\"amount\":{quantity},\"specId\":\"{specId}\",\"selectedTradeServices\":[]}}]";
+// string postData = $"type=offer&cargoIdentity={offerId}&returnType=url&needTotalPrice=false&promotionSwitch=false&_csrf_token={GetCsrfToken(_1688Cookie)}&t={timestamp}&purchaseType=&ext={UrlEncode(ext, "utf-8")}&specData={UrlEncode(specData, "utf-8")}";
+
+
+
+
+// var res = PostHtml(url, postData, _1688Cookie);
+// if (res.IsSuccessStatusCode)
+// {
+// var html = res.Content.ReadAsStringAsync().Result;
+
+// var json = JsonConvert.DeserializeObject(html);
+
+// if (json.success)
+// {
+// AddLog?.Invoke("成功加入购物车");
+// }
+// else
+// {
+// AddLog?.Invoke("加入购物车失败");
+// }
+
+// }
+// }
+// catch (Exception ex)
+// {
+
+// AddLog?.Invoke($"加入购物车失败:{ex.Message}");
+// }
+
+
+// }
+
+
+
+// public ApiResponse CommitOrder(PrewOrderResponse prewOrderResponse, string remarkMesg)
+// {
+// var productParameter = prewOrderResponse.orderParameter;
+// var orderModel = prewOrderResponse.OrderModel;
+
+// var adressModel = prewOrderResponse.AddressModel;
+
+
+// var flow = orderModel.ToString(); //下单类型
+// var ipvId = productParameter.IpvId;
+// var addressDetail = adressModel.AddressDetail;
+// var townCode = productParameter.TownCode;
+// var csrf_token = productParameter.Csrf_token;
+// var orderUrl = productParameter.OrderUrl;
+// var addressCode = adressModel.AddressCode;
+// var lvid = productParameter.Lvid;
+// var personalName = adressModel.PersonalName;
+// var mobileNO = adressModel.MobileNO;
+// var _csrf_token = productParameter.Csrf_token;
+
+// var divisionZip = adressModel.DivisionZip;
+
+
+// // 213e38fa17117750507943145ee537
+// string fromkv = $"offerdetail:pc;ipvId:{productParameter.IpvId}";//24885ba917116953616677208e
+
+// //string remarkMesg = "拖鞋";//备注消息
+
+// string cna = GetCookieStr(_1688Cookie, "cna");
+
+// List _fm_sm_0_iList = new List();
+
+// List _fm_sma_cargoKeyList = new List();
+
+// List _fm_smartin_group_meList = new List();
+
+// List smarts_mList = new List();
+
+// List _fm_smart_group_meList = new List();
+
+
+// List _fm_sma_group_g_fList = new List();
+
+// foreach (var OrderGroupParameter in productParameter.OrderGroupParameterList)
+// {
+// var group = OrderGroupParameter.Group;
+// var discountFee = OrderGroupParameter.DiscountFee;
+// var sumCarriage = OrderGroupParameter.SumCarriage;
+// var stepName = OrderGroupParameter.StepName;
+// var totalProductAmount = OrderGroupParameter.TotalProductAmount.ToString("0.00");
+// var actualPay = OrderGroupParameter.ActualPay;
+// var actualPayFee = OrderGroupParameter.ActualPayFee;
+// var payFee = OrderGroupParameter.PayFee;
+// var shopCouple = OrderGroupParameter.PromotionId;
+// var chooseFreeFreight = OrderGroupParameter.ChooseFreeFreight;
+
+// foreach (var orderProductParameter in OrderGroupParameter.OrderProductParameterList)
+// {
+// var cargoKey = orderProductParameter.CargoKey;
+
+// var unitPrice = orderProductParameter.UnitPrice.ToString("0.00");
+// var productAmount = orderProductParameter.ProductAmount;
+// var quantity = orderProductParameter.Quantity;
+// var offerId = orderProductParameter.ProductId;
+// var specId = orderProductParameter.SpectId;
+// var tbSkuId = orderProductParameter.SkuId;
+
+// var skuChooseFreeFreight = orderProductParameter.ChooseFreeFreight;
+
+// var _fm_sm_0_i_ = @$"{{""cartId"":"""",""offerId"":""{offerId}"",""specId"":""{specId}"",""tbSkuId"":""{tbSkuId}"",""hasSkuUmp"":""false"",""quantity"":{quantity},""tradeMode"":""multiStep"",""tradeWay"":""100"",""templateCode"":""assureTrade"",""flow"":""{flow}"",""subflow"":"""",""ext"":""{{\""sceneCode\"":\""\""}}""}}";
+// _fm_sm_0_iList.Add(_fm_sm_0_i_);
+
+// string _fm_sma_cargoKey = @$"{{""group"":""{group}"",""cargoKey"":""{cargoKey}"",""quantity"":{quantity},""unitPrice"":""{unitPrice}"",""offerId"":""{offerId}"",""specId"":""{specId}"",""tbSkuId"":""{tbSkuId}"",""hasSkuUmp"":""false"",""chooseFreeFreight"":{skuChooseFreeFreight},""productAmount"":""{productAmount}"",""discount"":1,""isVirtual"":""0"",""gift"":"""",""cartId"":"""",""promotionId"":""{orderProductParameter.Couple}"",""ext"":""{{\""sceneCode\"":\""\""}}"",""buyerCharge"":false,""marketingScene"":""""}}";
+// _fm_sma_cargoKeyList.Add($"_fm.smar.{cargoKey}.m={UrlEncode(_fm_sma_cargoKey, "gb2312")}");
+
+
+
+
+// }
+// string smarts_m = @$"[{{""group"":""{group}"",""stepNo"":""1"",""templateId"":""30"",""stepName"":""{UrlEncode(stepName, "GB2312")}"",""instantPay"":""0"",""sellerActionName"":"""",""buyerPayTimeout"":""0"",""buyerConfirmTimeout"":""0"",""needSellerAction"":""0"",""transferAfterConfirm"":""0"",""needSellerCallNext"":""0"",""isStepPayAll"":""0"",""agreement"":"""",""needLogistics"":""1"",""percent"":""1.0"",""deliveryPercent"":""1.0"",""payFee"":""{payFee}"",""actualPayFee"":""{actualPayFee}"",""discountFee"":""{discountFee}"",""itemDiscountFee"":""0"",""price"":""0"",""amount"":""1"",""postFee"":""0"",""mergedJsonVar"":""""}}]";
+// smarts_mList.Add(smarts_m);
+
+// string _fm_smart_group_me = @$"{{""group"":""{group}"",""tplCode"":""assureTrade"",""message"":""{remarkMesg}"",""sumCarriage"":""{sumCarriage}"",""totalAmount"":""{actualPay}"",""totalProductAmount"":""{totalProductAmount}"",""chooseFreeFreight"":{chooseFreeFreight},""mixAmount"":"""",""mixNumber"":""1"",""promotionId"":""{shopCouple}"",""umpSysAvailble"":""1"",""toleranceFreight"":""${{model.toleranceCollection.toleranceFreight}}"",""checkCarriage"":1,""filledCarriage"":""0.00"",""isNeedSellerConfirmFlag"":""0"",""lvid"":""{lvid}"",""fundUsageSelected"":""0"",""hasTaosampleCard"":""0"",""anonymousBuyer"":true,""payEntry"":""multiStep"",""bizType"":""{flow}"",""payWay"":""100"",""orderCodFee"":0,""crossPromotionIds"":[],""crossPromotionIdsMap"":{{}},""crossShopPromotions"":[],""terminal"":""pc_browser_null_0.0.0"",""cna"":""{cna}"",""fromkv"":""{fromkv}""}}";
+// _fm_smart_group_meList.Add($"_fm.smart.{group}.me={UrlEncode(_fm_smart_group_me, "GB2312")}");
+
+
+// string _fm_smartin_group_me = @$"{{ ""invoiceFlag"":false,""invoiceType"":0,""invoiceMode"":"""",""streetAddress"":"""",""registerPhone"":"""",""bank"":"""",""accountId"":"""",""companyName"":"""",""localInvoiceId"":""undefined"",""taxpayerIdentifier"":"""",""extParams"":{{ ""email"":""""}},""group"":""{group}""}}";
+
+// _fm_smartin_group_meList.Add($"_fm.smartin.{group}.me={UrlEncode(_fm_smartin_group_me, "GB2312")}&_fm.smartin.{group}.i=false");
+// _fm_sma_group_g_fList.Add($"_fm.sma.{group}.g={group}&_fm.sma.{group}.f={flow}");
+// }
+
+
+
+// var _fm_smarts_0_m = $"[{string.Join(",", smarts_mList)}]";
+
+
+
+// var _fm_sm_0_i = $"[{string.Join(",", _fm_sm_0_iList)}]";
+
+
+// string cargoKeyStr = string.Join("&", _fm_sma_cargoKeyList);
+
+// string _fm_smart_group_meStr = string.Join("&", _fm_smart_group_meList);
+
+// string _fm_smartin_group_meStr = string.Join("&", _fm_smartin_group_meList);
+
+// string _fm_smart_group_g_fStr = string.Join("&", _fm_sma_group_g_fList);
+
+
+
+
+// string url = orderUrl;
+
+// string key = GetRegexValue(orderUrl, "key=(\\d+)");
+// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+
+// string adress = UrlEncode(addressDetail, "GB2312");//
+// string userName = UrlEncode(personalName, "GB2312");
+// string phoneNumber = UrlEncode(mobileNO, "GB2312");
+
+
+// var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+
+// string postData = $"action=SmartMakeOrderAction&event_submit_execute=Action&fromWhere=confirmOrder&fromType=normal&_fm.smarti._0.me=%7B%7D&_fm.smarti._0.i=false&_csrf_token={_csrf_token}" +
+// $"&_fm.sm._0.f=xxx&_fm.sm._0.i={UrlEncode(_fm_sm_0_i, "GB2312")}&_fm.sm._0.k={key}&_fm.sm._0.a=0&_fm.sm._0.q=&_fm.sm._0.in=&_fm.sm._0.fr=&_fm.sm._0.fro=&_fm.sm._0.s=&_fm.sm._0.se=&_fm.sm._0.p=-1&_fm.sm._0.e=&_fm.sm._0.is=false&_fm.sm._0.null=cart&_fm.sm._0.ex=" +
+// $"&_fm.sm._0.sc=&_fm.smart._PAGE_LEVEL_.me=%7B%22group%22%3A%22_PAGE_LEVEL_%22%7D&{_fm_smart_group_meStr}&{cargoKeyStr}" +
+// $"&{_fm_smart_group_g_fStr}&_fm.smartm._0.m=&_fm.smarta._0.ar={addressCode}&_fm.smarta._0.p={addressCode}&_fm.smarta._0.c={addressCode}&_fm.smarta._0.po={divisionZip}&_fm.smarta._0.ad={adress}&_fm.smarta._0.t=&_fm.smarta._0.to=&_fm.smarta._0.f={userName}" +
+// $"&_fm.smarta._0.ph=&_fm.smarta._0.m={phoneNumber}&_fm.smarta._0.i=false&_fm.smarta._0.is=true&_fm.smarta._0.a=-1&{_fm_smartin_group_meStr}&" +
+// $"_fm.smarts._0.m={_fm_smarts_0_m}&_fm.r._0.w={timestamp}";
+
+// var s = GetOrderId(url, postData, _1688Cookie);
+
+// if (s != null)
+// {
+// AddLog?.Invoke($"下单成功,返回订单号:{s}");
+// return new ApiResponse() { Code = 200, Data = s };
+// }
+// else
+// {
+// AddLog.Invoke("下单失败");
+// return new ApiResponse() { Code = 1000, Msg = "下单失败" };
+// }
+
+// return new ApiResponse() { Code = 1000, Msg = "下单失败" };
+
+
+// }
+
+// private string GetOrderId(string url, string postData, string cookie)
+// {
+// var response = PostHtml(url, postData, cookie);
+// if (response.IsSuccessStatusCode)
+// {
+// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+// var sss = response.Content.ReadAsStringAsync().Result;
+// if (response.Headers.Contains("Resin-Trace"))
+// {
+// //获取响应头 Resin-Trace的值
+
+// var trace = response.Headers.GetValues("Resin-Trace");
+// if (trace.Any())
+// {
+// var traceValue = trace.FirstOrDefault();
+
+// if (traceValue.Contains("biz_order"))
+// {
+// var biz_order = GetRegexValue(traceValue, "biz_order=(\\d+[,]?\\d+)");//获取下单号
+
+
+// return biz_order;
+
+// }
+// }
+// }
+// }
+// return null;
+// }
+
+
+// public HttpResponseMessage PostHtml(string url, string postData, string cookie)
+// {
+// HttpClient client = new HttpClient();
+
+
+// //使用 application/x-www-form-urlencoded post提交
+// client.DefaultRequestHeaders.Add("Cookie", cookie);
+// //postData = "action=SmartMakeOrderAction&event_submit_execute=Action&fromWhere=confirmOrder&fromType=normal&_fm.smarti._0.me=%7B%7D&_fm.smarti._0.i=false&_csrf_token=e107b86e348b5ff07dd1d1e4b0dff58f&_fm.sm._0.f=xxx&_fm.sm._0.i=%5B%7B%22cartId%22%3A%22%22%2C%22offerId%22%3A%22755527819845%22%2C%22specId%22%3A%2248b8df3db448c6bad0e847c317886360%22%2C%22tbSkuId%22%3A%225207346876796%22%2C%22hasSkuUmp%22%3A%22false%22%2C%22quantity%22%3A1%2C%22tradeMode%22%3A%22multiStep%22%2C%22tradeWay%22%3A%22100%22%2C%22templateCode%22%3A%22assureTrade%22%2C%22flow%22%3A%22general%22%2C%22subflow%22%3A%22%22%2C%22ext%22%3A%22%7B%5C%22sceneCode%5C%22%3A%5C%22%5C%22%7D%22%7D%5D&_fm.sm._0.k=171179300009192219&_fm.sm._0.a=0&_fm.sm._0.q=&_fm.sm._0.in=&_fm.sm._0.fr=&_fm.sm._0.fro=&_fm.sm._0.s=&_fm.sm._0.se=&_fm.sm._0.p=-1&_fm.sm._0.e=&_fm.sm._0.is=false&_fm.sm._0.null=detail&_fm.sm._0.ex=&_fm.sm._0.sc=&_fm.smart._PAGE_LEVEL_.me=%7B%22group%22%3A%22_PAGE_LEVEL_%22%7D&_fm.smart.d4d7e431d5b30a44df6a8b2e50a58237.me=%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22tplCode%22%3A%22assureTrade%22%2C%22message%22%3A%22%22%2C%22sumCarriage%22%3A%222.40%22%2C%22totalAmount%22%3A%228.73%22%2C%22totalProductAmount%22%3A%226.33%22%2C%22chooseFreeFreight%22%3A0%2C%22mixAmount%22%3A%22%22%2C%22mixNumber%22%3A%221%22%2C%22promotionId%22%3A%22%22%2C%22umpSysAvailble%22%3A%221%22%2C%22toleranceFreight%22%3A%22%24%7Bmodel.toleranceCollection.toleranceFreight%7D%22%2C%22checkCarriage%22%3A1%2C%22filledCarriage%22%3A%220.00%22%2C%22isNeedSellerConfirmFlag%22%3A%220%22%2C%22lvid%22%3A%2224885bad17117929999545039e%22%2C%22fundUsageSelected%22%3A%220%22%2C%22hasTaosampleCard%22%3A%220%22%2C%22anonymousBuyer%22%3Afalse%2C%22payEntry%22%3A%22multiStep%22%2C%22bizType%22%3A%22general%22%2C%22payWay%22%3A%22100%22%2C%22orderCodFee%22%3A0%2C%22crossPromotionIds%22%3A%5B%5D%2C%22crossPromotionIdsMap%22%3A%7B%7D%2C%22crossShopPromotions%22%3A%5B%5D%2C%22terminal%22%3A%22pc_browser_null_0.0.0%22%2C%22cna%22%3A%224Ha%2FHb9%2B8QEBASQJijR52Awl%22%2C%22fromkv%22%3A%22offerdetail%3Apc%3BipvId%3A213e36ab17117929945421320e75bd%22%7D&_fm.smar.755527819845_48b8df3db448c6bad0e847c317886360.m=%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22cargoKey%22%3A%22755527819845_48b8df3db448c6bad0e847c317886360%22%2C%22quantity%22%3A1%2C%22unitPrice%22%3A%226.33%22%2C%22offerId%22%3A%22755527819845%22%2C%22specId%22%3A%2248b8df3db448c6bad0e847c317886360%22%2C%22tbSkuId%22%3A%225207346876796%22%2C%22hasSkuUmp%22%3A%22false%22%2C%22chooseFreeFreight%22%3A0%2C%22productAmount%22%3A%226.33%22%2C%22discount%22%3A1%2C%22isVirtual%22%3A%220%22%2C%22gift%22%3A%22%22%2C%22cartId%22%3A%22%22%2C%22promotionId%22%3A%22%22%2C%22ext%22%3A%22%7B%5C%22sceneCode%5C%22%3A%5C%22%5C%22%7D%22%2C%22buyerCharge%22%3Afalse%2C%22marketingScene%22%3A%22%22%7D&_fm.sma.d4d7e431d5b30a44df6a8b2e50a58237.g=d4d7e431d5b30a44df6a8b2e50a58237&_fm.sma.d4d7e431d5b30a44df6a8b2e50a58237.f=general&_fm.smartm._0.m=&_fm.smarta._0.ar=350502&_fm.smarta._0.p=350502&_fm.smarta._0.c=350502&_fm.smarta._0.po=362000&_fm.smarta._0.ad=%BD%F0%C1%FA%BD%D6%B5%C0%B9%C5%C1%FA%C2%B7%C3%BD%C8%CB%C7%C52%BA%C5%C8%FD%CE%C4%B9%AB%D4%A2%D2%BB%C2%A5%C6%EB%D4%BD%D6%D0%D7%AA%B2%D6&_fm.smarta._0.t=&_fm.smarta._0.to=&_fm.smarta._0.f=feiyu&_fm.smarta._0.ph=&_fm.smarta._0.m=19959858952&_fm.smarta._0.i=false&_fm.smarta._0.is=true&_fm.smarta._0.a=-1&_fm.smartin.d4d7e431d5b30a44df6a8b2e50a58237.me=%7B%22invoiceFlag%22%3Afalse%2C%22invoiceType%22%3A0%2C%22invoiceMode%22%3A%22%22%2C%22streetAddress%22%3A%22%22%2C%22registerPhone%22%3A%22%22%2C%22bank%22%3A%22%22%2C%22accountId%22%3A%22%22%2C%22companyName%22%3A%22%22%2C%22localInvoiceId%22%3A%22undefined%22%2C%22taxpayerIdentifier%22%3A%22%22%2C%22extParams%22%3A%7B%22email%22%3A%22%22%7D%2C%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%7D&_fm.smartin.d4d7e431d5b30a44df6a8b2e50a58237.i=false&_fm.smarts._0.m=%5B%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22stepNo%22%3A%221%22%2C%22templateId%22%3A%2230%22%2C%22stepName%22%3A%22%C8%AB%BF%EE%BD%BB%D2%D7%22%2C%22instantPay%22%3A%220%22%2C%22sellerActionName%22%3A%22%22%2C%22buyerPayTimeout%22%3A%220%22%2C%22buyerConfirmTimeout%22%3A%220%22%2C%22needSellerAction%22%3A%220%22%2C%22transferAfterConfirm%22%3A%220%22%2C%22needSellerCallNext%22%3A%220%22%2C%22isStepPayAll%22%3A%220%22%2C%22agreement%22%3A%22%22%2C%22needLogistics%22%3A%221%22%2C%22percent%22%3A%221.0%22%2C%22deliveryPercent%22%3A%221.0%22%2C%22payFee%22%3A%22633%22%2C%22actualPayFee%22%3A%22873%22%2C%22discountFee%22%3A%220%22%2C%22itemDiscountFee%22%3A%220%22%2C%22price%22%3A%220%22%2C%22amount%22%3A%221%22%2C%22postFee%22%3A%220%22%2C%22mergedJsonVar%22%3A%22%22%7D%5D&_fm.r._0.u=140%232w2Dve%2FuzzFMcQo2HiuuFpSanxQgLwMah9FA4xt5yifr2OblcBB8%2FtDVlIZFbEvZcpX14c7HBH%2FAuyTRlaOhIoZWFnLe69cgf%2BoiOnbjo3hqzzn7YQqA3VuzzR8ZiahulFzx2DD3VthqzFrLGXY4U6SxzoObV2EqQG3Y2Ac%2Bx%2BmozFdO2XU%2BobTxzIc7VOg%2FlIXx2Dd6%2F61XrQc12XQzlpg7zPnRVr7uljFo2Aw%2B66G7zFrw2XQ%2B5TjqzWXf3YRLMZ2aMXm";
+
+// Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+// HttpContent content = new StringContent(postData, Encoding.GetEncoding("GB2312"), "application/x-www-form-urlencoded");
+
+// var response = client.PostAsync(url, content).Result;
+// return response;
+// }
+
+// public PrewOrderResponse PrewOrder(List orderProducts, string address, OrderModel orderModel)
+// {
+// var flow = orderModel.ToString(); //下单类型
+// //获取时间戳
+// var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+// var ipvId = Md5Helper.Md5_32(timestamp.ToString());
+// var productParameter = GetProductParameter(orderProducts, orderModel, ipvId);
+// var _csrf_token = productParameter.Csrf_token;
+// var lvid = productParameter.Lvid;
+// var orderUrl = productParameter.OrderUrl;
+// var adressModel = InputAddress(address, _csrf_token);
+// if (adressModel == null)
+// {
+// return null;
+// }
+// AddLog?.Invoke($"获取地址信息成功,姓名:{adressModel.PersonalName},手机号:{adressModel.MobileNO},地址:{adressModel.AddressDetail},邮编:{adressModel.DivisionZip}");
+
+// var addressCode = adressModel.AddressCode;
+// var addressDetail = adressModel.AddressDetail;
+// var personalName = adressModel.PersonalName;
+// var mobileNO = adressModel.MobileNO;
+// var divisionZip = adressModel.DivisionZip;
+// //刷新地址
+// productParameter = ReflashAdress(productParameter, adressModel, orderModel);
+
+
+
+// return new PrewOrderResponse
+// {
+// AddressModel = adressModel,
+// orderParameter = productParameter,
+// OrderModel = orderModel,
+// ActualPay = productParameter.OrderGroupParameterList.Select(s => s.ActualPay).Sum(),
+// SumCarriage = productParameter.OrderGroupParameterList.Select(s => s.SumCarriage).Sum(),
+// TotalProductAmount = productParameter.OrderGroupParameterList.Select(s => s.TotalProductAmount).Sum()
+// };
+// }
+// }
+//}
diff --git a/BBWYB.Client/Helpers/1688/Md5Helper.cs b/BBWYB.Client/Helpers/1688/Md5Helper.cs
new file mode 100644
index 0000000..83ed241
--- /dev/null
+++ b/BBWYB.Client/Helpers/1688/Md5Helper.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Helpers
+{
+ public class Md5Helper
+ {
+ //32位小写
+ public static string Md5_32(string str)
+ {
+ string cl = str;
+ string pwd = "";
+ System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();//实例化一个md5对像
+ // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
+ byte[] s = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(cl));
+ // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
+ for (int i = 0; i < s.Length; i++)
+ {
+ //将得到的字符串使用16进制类型格式
+ pwd = pwd + s[i].ToString("X");
+ }
+ return pwd.ToLower();
+ }
+ }
+}
diff --git a/BBWYB.Client/Helpers/CustomWebView2.cs b/BBWYB.Client/Helpers/CustomWebView2.cs
new file mode 100644
index 0000000..71fc1eb
--- /dev/null
+++ b/BBWYB.Client/Helpers/CustomWebView2.cs
@@ -0,0 +1,32 @@
+using Microsoft.Web.WebView2.Core;
+using Microsoft.Web.WebView2.Core.DevToolsProtocolExtension;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Helpers
+{
+ public class CustomWebView2 : Microsoft.Web.WebView2.Wpf.WebView2, IDisposable
+ {
+ public CustomWebView2(string folderName = "WebView2UserData")
+ {
+ //允许跨域
+ var op = new CoreWebView2EnvironmentOptions("--disable-web-security")
+ {
+ // AreBrowserExtensionsEnabled = true
+ };
+ var wb2Setting = CoreWebView2Environment.CreateAsync(userDataFolder: System.IO. Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), folderName)).Result;
+ EnsureCoreWebView2Async(wb2Setting);
+
+ }
+
+
+ public void DisposeWeb()
+ {
+ base.Dispose();
+ GC.Collect();
+ }
+ }
+}
diff --git a/BBWYB.Client/Models/1688/AddressModel.cs b/BBWYB.Client/Models/1688/AddressModel.cs
new file mode 100644
index 0000000..505bfee
--- /dev/null
+++ b/BBWYB.Client/Models/1688/AddressModel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models
+{
+ public class AddressModel
+ {
+ public string AddressDetail { get; internal set; }
+ public string DivisionZip { get; internal set; }
+ public string MobileNO { get; internal set; }
+ public string PersonalName { get; internal set; }
+ public string AddressCode { get; internal set; }
+ }
+}
diff --git a/BBWYB.Client/Models/1688/OrderParameter.cs b/BBWYB.Client/Models/1688/OrderParameter.cs
new file mode 100644
index 0000000..3d7644f
--- /dev/null
+++ b/BBWYB.Client/Models/1688/OrderParameter.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models
+{
+ public class OrderParameter
+ {
+ public string Csrf_token { get; set; }
+
+ public string OrderUrl { get; set; }
+
+ public string Lvid { get; set; }
+
+
+ public List OrderGroupParameterList { get; set; }
+ public string Address { get; set; }
+ public string TownCode { get; set; }
+ public string IpvId { get; set; }
+ }
+
+
+ public class OrderGroupParameter
+ {
+ ///
+ /// 优惠券id
+ ///
+ public string PromotionId { get; set; }
+
+ ///
+ /// 1使用优惠券 0不使用优惠券
+ ///
+ public int ChooseFreeFreight { get; set; }
+
+ public decimal SumCarriage { get; set; }
+
+ public decimal DiscountFee { get; set; }
+ public decimal TotalProductAmount { get; set; }
+
+ public decimal ActualPay { get; set; }
+
+ public int PayFee { get; set; }
+
+ public int ActualPayFee { get; set; }
+ public string Group { get; set; }
+
+ public string StepName { get; set; }
+
+ public string OrderOutId { get; set; }
+
+ public string MemberId { get; set; }
+
+ //sellerUserId
+ public string SellerUserId { get; set; }
+
+
+ ////transportType
+ //public string TransportType { get; set; }
+
+ ////tplCode
+ //public string TplCode { get; set; }
+
+ //belong
+ public string Belong { get; set; }
+
+
+ public List OrderProductParameterList { get; set; }
+ }
+
+
+
+ public class OrderProductParameter
+ {
+ public decimal DiscountFee { get; set; }
+
+ public decimal SumCarriage { get; set; }
+ public string ProductId { get; set; }
+
+ public string SkuId { get; set; }
+
+ public string SpectId { get; set; }
+
+
+ public string CargoKey { get; set; }
+
+ public decimal UnitPrice { get; set; }
+
+ public decimal ProductAmount { get; set; }
+ public int Quantity { get; set; }
+ public string FreightId { get; internal set; }
+
+ //outId
+ public string OutId { get; set; }
+ public string? OfferPriceRangeJson { get; internal set; }
+
+
+ ///
+ /// 优惠券
+ ///
+ public string Couple { get; set; }
+
+ ///
+ /// 1使用优惠券 0不使用优惠券
+ ///
+ public int ChooseFreeFreight { get; set; }
+ }
+}
diff --git a/BBWYB.Client/Models/1688/OrderProduct.cs b/BBWYB.Client/Models/1688/OrderProduct.cs
new file mode 100644
index 0000000..1221af3
--- /dev/null
+++ b/BBWYB.Client/Models/1688/OrderProduct.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models
+{
+ public class OrderProduct
+ {
+ public string ProductId { get; set; }
+
+ public string SkuId { get; set; }
+
+ public string SpectId { get; set; }
+
+ //数量
+ public int Quantity { get; set; }
+
+
+ }
+}
diff --git a/BBWYB.Client/Models/1688/PrewOrderResponse.cs b/BBWYB.Client/Models/1688/PrewOrderResponse.cs
new file mode 100644
index 0000000..b30d27f
--- /dev/null
+++ b/BBWYB.Client/Models/1688/PrewOrderResponse.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models
+{
+ public class PrewOrderResponse
+ {
+ public OrderParameter orderParameter { get; set; }
+
+ public OrderModel OrderModel { get; set; }
+
+ public AddressModel AddressModel { get; set; }
+
+ public decimal TotalProductAmount { get; set; }
+
+ public decimal SumCarriage { get; set; }
+
+ //总订单金额
+ public decimal ActualPay { get; set; }
+
+ }
+}
diff --git a/BBWYB.Client/Models/1688/ProductModel.cs b/BBWYB.Client/Models/1688/ProductModel.cs
new file mode 100644
index 0000000..0d1d85e
--- /dev/null
+++ b/BBWYB.Client/Models/1688/ProductModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models
+{
+ public class ProductModel
+ {
+ public int MixNumber { get; set; }
+
+ public string IpvId { get; set; }
+ }
+}
diff --git a/BBWYB.Client/Models/1688/_1688CookieModel.cs b/BBWYB.Client/Models/1688/_1688CookieModel.cs
new file mode 100644
index 0000000..980f4ec
--- /dev/null
+++ b/BBWYB.Client/Models/1688/_1688CookieModel.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Client.Models._1688
+{
+ public class _1688CookieModel
+ {
+ public string Cookie { get; set; }
+
+ public string UserName { get; set; }
+
+ public string Password { get; set; }
+
+ public DateTime LoginTime { get; set; }
+
+ //是否过期
+ public bool IsExpire { get; set; }
+
+ }
+}
diff --git a/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs
index 574acf8..a7851e8 100644
--- a/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs
+++ b/BBWYB.Client/Models/APIModel/Request/PackPurchaseTask/CerRequest.cs
@@ -70,7 +70,7 @@ namespace BBWYB.Client.Models.APIModel
///
public string ApplyAge { get; set; }
- public int GoodsNumber { get; set; }
+ public long GoodsNumber { get; set; }
public string ProduceDate { get; set; }
diff --git a/BBWYB.Client/Models/Enums.cs b/BBWYB.Client/Models/Enums.cs
index 2e605ac..3fc190d 100644
--- a/BBWYB.Client/Models/Enums.cs
+++ b/BBWYB.Client/Models/Enums.cs
@@ -340,4 +340,14 @@
合格证信息=0,无需合格证=1
}
+
+ ///
+ /// 下单类型(批发(general)=0,代发(fenxiao=1)
+ ///
+ public enum OrderModel
+ {
+ general = 0,//批发
+ fenxiao = 1//代发
+
+ }
}
diff --git a/BBWYB.Client/Models/Shop/PurchaseAccount.cs b/BBWYB.Client/Models/Shop/PurchaseAccount.cs
index d39d804..1ef06dd 100644
--- a/BBWYB.Client/Models/Shop/PurchaseAccount.cs
+++ b/BBWYB.Client/Models/Shop/PurchaseAccount.cs
@@ -20,6 +20,11 @@ namespace BBWYB.Client.Models
public string AppSecret { get => appSecret; set { SetProperty(ref appSecret, value); } }
public string AppToken { get => appToken; set { SetProperty(ref appToken, value); } }
+ ///
+ /// 密码
+ ///
+ public string Password { get; set; }
+
public object Clone()
{
return this.MemberwiseClone();
diff --git a/BBWYB.Client/Views/1688/Login1688Window.xaml b/BBWYB.Client/Views/1688/Login1688Window.xaml
new file mode 100644
index 0000000..28c6b2c
--- /dev/null
+++ b/BBWYB.Client/Views/1688/Login1688Window.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/BBWYB.Client/Views/1688/Login1688Window.xaml.cs b/BBWYB.Client/Views/1688/Login1688Window.xaml.cs
new file mode 100644
index 0000000..87a1452
--- /dev/null
+++ b/BBWYB.Client/Views/1688/Login1688Window.xaml.cs
@@ -0,0 +1,214 @@
+using CommunityToolkit.Mvvm.Messaging;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Web.WebView2.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using WebView2.DevTools.Dom;
+
+namespace BBWYB.Client.Views._1688
+{
+ ///
+ /// Login1688Window.xaml 的交互逻辑
+ ///
+ public partial class Login1688Window : System.Windows.Window
+ {
+ private WebView2Manager w2m;
+ private bool isNavigated;
+ private GlobalContext globalContext;
+
+ public static Login1688Window ShowUrlSearchWindow(string userName, string password)
+ {
+ Login1688Window window = null;
+
+ bool? result = null;
+ if (!App.Current.Dispatcher.CheckAccess())
+ {
+ try
+ {
+ App.Current.Dispatcher.Invoke(() => {
+ window = new Login1688Window(userName, password);
+ window.ShowDialog();
+ });
+ }
+ catch (Exception ex)
+ {
+
+
+ }
+
+ }
+ else
+ {
+ window = new Login1688Window(userName, password);
+ window.ShowDialog();
+ // 在 UI 线程上执行操作
+ }
+ return window;
+
+ }
+
+ public Login1688Window(string userName, string password)
+ {
+ InitializeComponent();
+
+ this.Width = SystemParameters.WorkArea.Size.Width * 0.8;
+ this.Height = SystemParameters.WorkArea.Size.Height * 0.7;
+ var sp = (App.Current as App).ServiceProvider;
+ using (var s = sp.CreateScope())
+ {
+ w2m =new WebView2Manager();
+ globalContext = s.ServiceProvider.GetRequiredService();
+ }
+ UserName = userName;
+ Password = password;
+ initWebView();
+
+
+ }
+
+ public string UserName { get; set; }
+ public string Password { get; set; }
+
+
+ private void initWebView()
+ {
+
+ var url = "https://login.taobao.com/?redirect_url=https%3A%2F%2Flogin.1688.com%2Fmember%2Fjump.htm%3Ftarget%3Dhttps%253A%252F%252Flogin.1688.com%252Fmember%252FmarketSigninJump.htm%253FDone%253Dhttps%25253A%25252F%25252Fwww.1688.com%25252F&style=tao_custom&from=1688web";
+ w2m.Init("bbwyb_web_1688");
+ w2m.wb2.SetValue(Grid.RowProperty, 1);
+ w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
+ //grid.Children.Clear();
+ gd.Children.Add(w2m.wb2);
+
+ w2m.wb2.NavigationCompleted += Wb2_NavigationCompleted;
+
+
+ w2m.CoreWebView2InitializationCompleted += (s) =>
+ {
+ w2m.wb2.CoreWebView2.Navigate(url);
+ };
+
+ }
+
+ private void Wb2_NavigationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
+ {
+ if (sender != null && sender is Microsoft.Web.WebView2.Wpf.WebView2)
+ {
+ var wv2 = sender as Microsoft.Web.WebView2.Wpf.WebView2;
+
+
+ if (wv2.CoreWebView2.Source.StartsWith("https://login.taobao.com/"))
+ {
+
+ App.Current.Dispatcher.Invoke(async () =>
+ {
+ await ExecuteJavaScript($"document.getElementById('fm-login-id').value='{UserName}'",1);
+ Thread.Sleep(100);
+ await ExecuteJavaScript($"document.getElementById('fm-login-password').value='{Password}'",1);
+ Thread.Sleep(100);
+ await ExecuteJavaScript("document.querySelector('.fm-button.fm-submit.password-login').click();", 1);
+ });
+ }
+
+
+
+ if (wv2.CoreWebView2.Source == ("https://www.1688.com/"))//手机端登录 保存账号密码
+ {
+
+ App.Current.Dispatcher.Invoke(async () =>
+ {
+ await GetCookies("https://www.1688.com/");
+ w2m.Close();
+ GC.Collect();
+ this.Close();
+ });
+
+
+ }
+ }
+ }
+ ///
+ /// 执行js函数
+ ///
+ ///
+ /// 0 有返回值 1无返回值
+ ///
+ public async Task<(bool istrue, string res)> ExecuteJavaScript(string js, int type = 0)
+ {
+ try
+ {
+ string script = $"()=>{{ return {js}}}";
+
+ if (type != 0)
+ script = $"()=>{{ {js}}}";
+
+
+ string result = "";
+ await Application.Current.Dispatcher.Invoke(async () =>
+ {
+ await w2m.wb2?.EnsureCoreWebView2Async();
+
+ await using var devToolsContext = await w2m.wb2?.CoreWebView2?.CreateDevToolsContextAsync().WaitAsync((TimeSpan.FromSeconds(5)));//
+
+ result = await devToolsContext.EvaluateFunctionAsync(script).WaitAsync(TimeSpan.FromSeconds(5));
+ });
+ return new(true, result);
+ }
+ catch (Exception ex)
+ {
+ // 处理可能的异常
+ Console.WriteLine(ex.Message);
+
+ return new(false, ex.Message);
+ }
+
+
+
+ }
+
+ public string downCookies { get; set; } = "";
+
+ static object obj { get; set; } = new object();
+ public Dictionary dicCookies { get; set; } = new Dictionary();
+ ///
+ /// 获取cookie
+ ///
+ public async Task GetCookies(string url)
+ {
+
+ if (w2m.wb2.CoreWebView2 != null)
+ {
+ var cookieManager = w2m.wb2.CoreWebView2.CookieManager;
+ List cookies = await cookieManager.GetCookiesAsync(url);
+ foreach (CoreWebView2Cookie cookie in cookies)
+ {
+ if (dicCookies.Keys.Contains(cookie.Name))
+ {
+ dicCookies[cookie.Name] = cookie.Value;
+ continue;
+ }
+ dicCookies.Add(cookie.Name, cookie.Value);
+ }
+ //存本地下次打开植入
+ foreach (var item in dicCookies.Keys)
+ {
+ downCookies += $"{item}={dicCookies[item]}; ";
+ }
+ }
+
+
+ }
+ }
+}
diff --git a/BBWYB.Client/Views/1688/NewLogin1688Window.xaml b/BBWYB.Client/Views/1688/NewLogin1688Window.xaml
new file mode 100644
index 0000000..2752f7c
--- /dev/null
+++ b/BBWYB.Client/Views/1688/NewLogin1688Window.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/BBWYB.Client/Views/1688/NewLogin1688Window.xaml.cs b/BBWYB.Client/Views/1688/NewLogin1688Window.xaml.cs
new file mode 100644
index 0000000..0dd460d
--- /dev/null
+++ b/BBWYB.Client/Views/1688/NewLogin1688Window.xaml.cs
@@ -0,0 +1,184 @@
+using BBWYB.Client.Helpers;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Web.WebView2.Core;
+using SJ.Controls;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace BBWYB.Client.Views._1688
+{
+ ///
+ /// NewLogin1688Window.xaml 的交互逻辑
+ ///
+ public partial class NewLogin1688Window : Window
+ {
+
+ CustomWebView2 webView2;
+ CoreWebView2 web;
+ public NewLogin1688Window(string userName, string password)
+ {
+ InitializeComponent();
+ webView2 = new CustomWebView2("bbwyb_web_1688");
+
+
+
+ webView2.CoreWebView2InitializationCompleted += WebView2_CoreWebView2InitializationCompleted;
+
+ this.Width = SystemParameters.WorkArea.Size.Width * 0.8;
+ this.Height = SystemParameters.WorkArea.Size.Height * 0.7;
+ var sp = (App.Current as App).ServiceProvider;
+ using (var s = sp.CreateScope())
+ {
+
+ globalContext = s.ServiceProvider.GetRequiredService();
+ }
+ UserName = userName;
+ Password = password;
+
+ gd.Children.Add(webView2);
+ }
+
+
+ GlobalContext globalContext;
+ public string UserName { get; set; }
+ public string Password { get; set; }
+
+ private void WebView2_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
+ {
+
+
+
+
+ // webView2.CoreWebView2.DocumentTitleChanged += CoreWebView2_DocumentTitleChanged;
+ web = webView2.CoreWebView2;
+
+
+ var url = "https://login.taobao.com/?redirect_url=https%3A%2F%2Flogin.1688.com%2Fmember%2Fjump.htm%3Ftarget%3Dhttps%253A%252F%252Flogin.1688.com%252Fmember%252FmarketSigninJump.htm%253FDone%253Dhttps%25253A%25252F%25252Fwww.1688.com%25252F&style=tao_custom&from=1688web";
+ webView2.CoreWebView2.Navigate(url);
+ //注册winning脚本c#互操作
+ // webView2.CoreWebView2.AddHostObjectToScript("hyCoreModel", globalContext);
+
+ //注册全局变量winning
+ // webView2.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("let hyCoreModel= window.chrome.webview.hostObjects.hyCoreModel;");
+
+ // web.AddWebResourceRequestedFilter("nacollector://home/img/*", CoreWebView2WebResourceContext.All);
+
+ //web.NavigationCompleted += Web_NavigationCompleted;
+
+ webView2.NavigationCompleted += Web_NavigationCompleted;
+
+ }
+
+ string lastUrl = "";
+ private void Web_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
+ {
+ if (sender != null && sender is Microsoft.Web.WebView2.Wpf.WebView2)
+ {
+ var wv2 = sender as Microsoft.Web.WebView2.Wpf.WebView2;
+
+ var url = wv2.CoreWebView2.Source;
+
+ if (url.StartsWith("https://login.taobao.com/") && lastUrl != url)
+ {
+ lastUrl = url;
+ App.Current.Dispatcher.Invoke(() =>
+ {
+ DoJavaScript($"document.getElementById('fm-login-id').value='{UserName}'",0);
+
+ DoJavaScript($"document.getElementById('fm-login-password').value='{Password}'",0);
+
+ DoJavaScript("document.querySelector('.fm-button.fm-submit.password-login').click();",0);
+ });
+ }
+
+
+
+ if (url.StartsWith("https://www.1688.com/") && lastUrl != url)//手机端登录 保存账号密码
+ {
+ lastUrl = wv2.CoreWebView2.Source;
+ App.Current.Dispatcher.Invoke(async () =>
+ {
+ await GetCookies("https://www.1688.com/");
+ webView2.DisposeWeb();
+ this.Close();
+ });
+
+
+ }
+ }
+
+
+
+ }
+
+
+ public string downCookies { get; set; } = "";
+
+ static object obj { get; set; } = new object();
+ public Dictionary dicCookies { get; set; } = new Dictionary();
+ ///
+ /// 获取cookie
+ ///
+ public async Task GetCookies(string url)
+ {
+
+ if (webView2.CoreWebView2 != null)
+ {
+ var cookieManager = webView2.CoreWebView2.CookieManager;
+ List cookies = await cookieManager.GetCookiesAsync(url);
+ foreach (CoreWebView2Cookie cookie in cookies)
+ {
+ if (dicCookies.Keys.Contains(cookie.Name))
+ {
+ dicCookies[cookie.Name] = cookie.Value;
+ continue;
+ }
+ dicCookies.Add(cookie.Name, cookie.Value);
+ }
+ //存本地下次打开植入
+ foreach (var item in dicCookies.Keys)
+ {
+ downCookies += $"{item}={dicCookies[item]}; ";
+ }
+ }
+
+
+ }
+
+
+
+
+ ///
+ /// 执行js
+ ///
+ public (bool isOk, object result) DoJavaScript(string js, double timeSleep =5)
+ {
+ try
+ {
+ string result = null;
+ string script = $"(()=>{{{js}}})()";
+
+ Application.Current.Dispatcher.Invoke(async () =>
+ {
+ result = await web.ExecuteScriptAsync(script);
+ }).Wait(TimeSpan.FromSeconds(timeSleep));
+
+ if (int.TryParse(result, out var val))
+
+ {
+ return (true, val);
+ }
+
+ return (true, result);
+ }
+ catch (Exception ex)
+ {
+ return (false, null);
+ }
+ }
+ }
+}
diff --git a/BBWYB.Client/Views/Web.xaml.cs b/BBWYB.Client/Views/Web.xaml.cs
index 62e6121..de7075e 100644
--- a/BBWYB.Client/Views/Web.xaml.cs
+++ b/BBWYB.Client/Views/Web.xaml.cs
@@ -2,6 +2,7 @@
using CommunityToolkit.Mvvm.Messaging.Messages;
using Microsoft.Extensions.DependencyInjection;
using SJ.Controls;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@@ -24,16 +25,24 @@ namespace BBWYB.Client.Views
var sp = (App.Current as App).ServiceProvider;
using (var s = sp.CreateScope())
{
- w2m = s.ServiceProvider.GetRequiredService();
+ w2m = new WebView2Manager();
globalContext = s.ServiceProvider.GetRequiredService();
}
+
+
WeakReferenceMessenger.Default.Register(this, (o, x) =>
{
this.Dispatcher.BeginInvoke(initWebView);
});
}
+ //public void InitCookieList()
+ //{
+
+ //}
+
+
private void Web_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
@@ -43,10 +52,10 @@ namespace BBWYB.Client.Views
private void initWebView()
{
#if DEBUG
- var url = "http://qtbbwy.qiyue666.com";
+ //var url = "http://qtbbwy.qiyue666.com";
//var registerName = "webContext";
- //var url = "http://192.168.1.2:8080";
- var registerName = "webTestContext";
+ var url = "http://192.168.1.2:8080";
+ var registerName = "webTestContext";//webTestContext
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com";
@@ -55,6 +64,7 @@ namespace BBWYB.Client.Views
//var url = "http://qtbbwy.qiyue666.com";
w2m.CoreWebView2InitializationCompleted = (e) =>
{
+ globalContext.CurryWindow = this;
w2m.wb2.CoreWebView2.AddHostObjectToScript(registerName, this.globalContext);
isNavigated = true;
w2m.wb2.CoreWebView2.Navigate(url);
diff --git a/BBWYB.Client/WebView2Manager.cs b/BBWYB.Client/WebView2Manager.cs
index 324d982..d38c90e 100644
--- a/BBWYB.Client/WebView2Manager.cs
+++ b/BBWYB.Client/WebView2Manager.cs
@@ -8,7 +8,7 @@ namespace BBWYB.Client
{
public class WebView2Manager : IDenpendency
{
- public WebView2 wb2 { get; private set; }
+ public Microsoft.Web.WebView2.Wpf.WebView2 wb2 { get; private set; }
//public WebView2Manager()
//{
// Init();
@@ -17,7 +17,7 @@ namespace BBWYB.Client
{
if (wb2 == null)
{
- wb2 = new WebView2();
+ wb2 = new Microsoft.Web.WebView2.Wpf.WebView2();
var wb2Setting = CoreWebView2Environment.CreateAsync(userDataFolder: io.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), folderName)).Result;
wb2.EnsureCoreWebView2Async(wb2Setting);
wb2.CoreWebView2InitializationCompleted += Wb2_CoreWebView2InitializationCompleted;
diff --git a/BBWYB.Client/appsettings.json b/BBWYB.Client/appsettings.json
index cce26a2..67f255d 100644
--- a/BBWYB.Client/appsettings.json
+++ b/BBWYB.Client/appsettings.json
@@ -1,6 +1,6 @@
{
- //"BBWYApiHost": "http://localhost:5000",
- "BBWYApiHost": "http://bbwyb.qiyue666.com",
+ "BBWYApiHost": "http://localhost:5000",
+ //"BBWYApiHost": "http://bbwyb.qiyue666.com",
"MDSApiHost": "http://mdsapi.qiyue666.com",
"BBWYCApiHost": "http://bbwytest.qiyue666.com",
"QKApiHost": "http://localhost:8080"
diff --git a/BBWYB.Server.API/BBWYB.Server.API.csproj b/BBWYB.Server.API/BBWYB.Server.API.csproj
index cede918..3bf0eca 100644
--- a/BBWYB.Server.API/BBWYB.Server.API.csproj
+++ b/BBWYB.Server.API/BBWYB.Server.API.csproj
@@ -10,6 +10,7 @@
+
diff --git a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
index 35b8645..ba7683f 100644
--- a/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
+++ b/BBWYB.Server.API/Controllers/PurchaseOrderController.cs
@@ -38,6 +38,17 @@ namespace BBWYB.Server.API.Controllers
{
purchaseOrderBusiness.CreatePurchaseOrder(request);
}
+
+ ///
+ /// 网页创建采购单
+ ///
+ ///
+ [HttpPost]
+ public void WebCreatePurchaseOrder([FromBody] WebCreateOrderRequest request)
+ {
+ purchaseOrderBusiness.WebCreatePurchaseOrder(request);
+ }
+
///
/// 获取关联采购单列表
@@ -185,5 +196,9 @@ namespace BBWYB.Server.API.Controllers
message = "成功"
});
}
+
+
+
+
}
}
diff --git a/BBWYB.Server.Business/BBWYB.Server.Business.csproj b/BBWYB.Server.Business/BBWYB.Server.Business.csproj
index e7e1b0a..fa60834 100644
--- a/BBWYB.Server.Business/BBWYB.Server.Business.csproj
+++ b/BBWYB.Server.Business/BBWYB.Server.Business.csproj
@@ -20,6 +20,7 @@
+
diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
index c0ea9bb..24db7ea 100644
--- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
@@ -1,6 +1,7 @@
using BBWYB.Common.Http;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
+using BBWYB.Server.Business._1688Helper;
using BBWYB.Server.Business.Extensions;
using BBWYB.Server.Business.JD;
using BBWYB.Server.Model;
@@ -21,6 +22,7 @@ using SDKAdapter.PurchasePlatform.Models;
using System.Text;
using System.Text.RegularExpressions;
using Yitter.IdGenerator;
+using static SDKAdapter.AdapterEnums;
namespace BBWYB.Server.Business
{
@@ -3331,5 +3333,607 @@ namespace BBWYB.Server.Business
}
return list;
}
+
+ public void WebCreatePurchaseOrder(WebCreateOrderRequest request)
+ {
+ nLogManager.Default().Info($"CreatePurchaseOrder\r\n{JsonConvert.SerializeObject(request)}");
+
+ var dbOrder = fsql.Select(request.OrderId).ToOne();
+ if (dbOrder == null)
+ throw new BusinessException("订单不存在");
+ if (cantPurchaseOrderStateList.Contains(dbOrder.OrderState.Value))
+ throw new BusinessException($"当前订单状态:{dbOrder.OrderState},不允许采购");
+
+ if (request.Consignee == null ||
+ string.IsNullOrEmpty(request.Consignee.Address) ||
+ string.IsNullOrEmpty(request.Consignee.Mobile) ||
+ string.IsNullOrEmpty(request.Consignee.ContactName))
+ throw new BusinessException("缺少收货人信息");
+ if (request.PurchaseAccountList == null || request.PurchaseAccountList.Count() == 0)
+ throw new BusinessException("缺少采购账号");
+ if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0)
+ throw new BusinessException("缺少下单商品参数");
+ if (request.CargoParamGroupList.Any(g => string.IsNullOrEmpty(g.PurchaserId)))
+ throw new BusinessException("缺少采购商Id");
+ if (request.CargoParamGroupList.GroupBy(c => c.PurchaserId).Any(g => g.Count() > 1))
+ throw new BusinessException("提交采购商包含重复");
+ //if (string.IsNullOrEmpty(request.WaitPayOrderId))
+ // throw new BusinessException("缺少待支付订单号");
+
+ #region 验证同一个批次中,一个订单sku不能同时拥有多个采购方案
+ IDictionary schemeValidationDictionary = new Dictionary();
+ foreach (var purchaseGroup in request.CargoParamGroupList)
+ {
+ foreach (var cargo in purchaseGroup.CargoParamList)
+ {
+ if (!schemeValidationDictionary.ContainsKey(cargo.BelongSkuId))
+ schemeValidationDictionary.TryAdd(cargo.BelongSkuId, cargo.SchemeId);
+
+ if (schemeValidationDictionary.TryGetValue(cargo.BelongSkuId, out long schemeId))
+ {
+ if (cargo.SchemeId != schemeId)
+ {
+ throw new BusinessException($"订单sku{cargo.BelongSkuId}只允许使用一个采购方案进行下单");
+ }
+ }
+ }
+ }
+ schemeValidationDictionary.Clear();
+ #endregion
+
+ string cookies = request.LoginCookies;
+
+ var isRepurchase = fsql.Select(dbOrder.Id).Any();
+ var orderSkus = fsql.Select().Where(osku => osku.OrderId == request.OrderId).ToList();
+ var orderPurchaseInfoList = fsql.Select().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList();
+ var orderCostDetailList = fsql.Select().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
+ var orderSkuCostList = fsql.Select().Where(osc => osc.OrderId == request.OrderId).ToList();
+
+
+ foreach (var cargoParamGroup in request.CargoParamGroupList)
+ {
+ var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaserId == cargoParamGroup.PurchaserId);
+ if (purchaseOrder != null)
+ {
+ foreach (var cargoParam in cargoParamGroup.CargoParamList)
+ {
+ if (purchaseOrder.BelongSkuIds.Contains(cargoParam.BelongSkuId))
+ {
+ //throw new BusinessException($"订单sku[{cargoParam.BelongSkuId}]已经存在同一个商家[{cargoParamGroup.PurchaserId}][{cargoParamGroup.PurchaserName}]的另一笔采购单中[{purchaseOrder.PurchaseOrderId}],请不要为同一笔订单sku进行同商家采购");
+ throw new BusinessException($"提示:请勿为同一个订单中的sku重复向同一个商家下采购单\r\n重复信息:\r\n- 订单sku:{cargoParam.BelongSkuId}\r\n- 商家:{cargoParamGroup.PurchaserName}");
+ }
+ }
+ }
+ }
+
+ var extJArray = JsonConvert.DeserializeObject(request.Extensions);
+
+ List insertOrderCostDetails = new List();
+ List insertOrderPurchaseInfos = new List();
+ List insertOrderPurchaseSkuInfos = new List();
+ List> updatePurchaseSchemeList = new List>();
+ //List> updatePssList = new List>();
+ List insertOrderPurchaseRelationInfoList = new List();
+ List updatePurchaseTimeLimitTaskOrderSkuList = new List();
+ List> updatePurchaserList = new List>();
+ List insertSkuHistoryPurchaserRelationList = new List();
+ List insertSkuOptimizationHistoryList = new List();
+ //List updateSkuOptimizationPurhcasementByIdList = new List();
+
+ List notifyQikuPackSchemeParamList = null;
+ if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越)
+ notifyQikuPackSchemeParamList = new List();
+
+ IInsert insertOrderCost = null;
+ IUpdate updateOrderCost = null;
+ List insertOrderSkuCostList = new List();
+ IList> updateOrderSkuCostList = new List>();
+ List createdPurchaseOrderItemList = new List();
+
+ foreach (var cargoParamGroup in request.CargoParamGroupList)
+ {
+ var purchaseAccount = request.PurchaseAccountList.FirstOrDefault(pa => pa.PurchasePlatformId == cargoParamGroup.PurchasePlatform);
+ if (purchaseAccount == null)
+ throw new BusinessException($"缺少{cargoParamGroup.PurchasePlatform}采购平台账号,请在店铺配置中设置");
+
+ var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)cargoParamGroup.PurchasePlatform);
+ var extJson = extJArray.FirstOrDefault(j => j.Value("PurchaserId") == cargoParamGroup.PurchaserId);
+
+ var orderProductParamList = CombineRepeatPurchaseSku(cargoParamGroup.CargoParamList);
+
+ //var createOrderResponse = client.CreateOrder(new PP_CreateOrderRequest()
+ //{
+ // AppKey = purchaseAccount.AppKey,
+ // AppSecret = purchaseAccount.AppSecret,
+ // AppToken = purchaseAccount.AppToken,
+ // Consignee = new PP_ConsigneeRequest()
+ // {
+ // Address = request.Consignee.Address,
+ // City = request.Consignee.City,
+ // ContactName = request.Consignee.ContactName,
+ // County = request.Consignee.County,
+ // Mobile = request.Consignee.Mobile,
+ // Province = request.Consignee.Province,
+ // TelePhone = request.Consignee.TelePhone,
+ // Town = request.Consignee.Town
+ // },
+ // Platform = (AdapterEnums.PlatformType)purchaseAccount.PurchasePlatformId,
+ // PurchaseMode = (AdapterEnums.PurchaseMode)request.PurchaseOrderMode,
+ // Extensions = extJson.Value("OrderTradeTypeCode"),
+ // Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark,
+ // OrderProductParamList = orderProductParamList
+ //});
+
+
+ Collect1688Helper collect1688Helper = new Collect1688Helper(cookies);
+
+ var adress = request.Consignee.ContactName + " " + request.Consignee.Mobile + " " + request.Consignee.Province + request.Consignee.City + request.Consignee.Town + request.Consignee.Address;
+
+
+ var orderModel = (Model.Enums.OrderModel)request.PurchaseOrderMode;
+
+
+ var prewOrder = collect1688Helper.PrewOrder(orderProductParamList.ToList(), adress, orderModel);
+ if (prewOrder == null)
+ {
+ throw new BusinessException($"登录失效,正在重新登陆,登录后点击下单!");
+ }
+ var remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark;
+ var createOrderResponse = collect1688Helper.CommitOrder(prewOrder, remark);
+
+ if (!createOrderResponse.Success)
+ {
+ throw new BusinessException($"{createOrderResponse.Msg}");
+ }
+
+
+ var purchaseOrderId = createOrderResponse.Data;
+
+ var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
+ {
+ AppKey = purchaseAccount.AppKey,
+ AppSecret = purchaseAccount.AppSecret,
+ AppToken = purchaseAccount.AppToken,
+ OrderId = purchaseOrderId
+ });
+ createdPurchaseOrderItemList.AddRange(purchaseOrderSimpleInfo.ItemList);
+
+ //totalPurchaseProductAmount += purchaseOrderSimpleInfo.ProductAmount;
+ //totalPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount;
+
+ #region 创建订单采购关系
+ foreach (var cargoParam in cargoParamGroup.CargoParamList)
+ {
+ var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == cargoParam.BelongSkuId);
+ insertOrderPurchaseRelationInfoList.Add(new OrderPurchaseRelationInfo()
+ {
+ Id = idGenerator.NewLong(),
+ BelongSkuId = cargoParam.BelongSkuId,
+ CreateTime = DateTime.Now,
+ OrderId = request.OrderId,
+ PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
+ PurchaseProductId = cargoParam.ProductId,
+ PurchaseSkuId = cargoParam.SkuId,
+ PurchaseSpecId = cargoParam.SpecId,
+ Quantity = cargoParam.Quantity,
+ SchemeId = cargoParam.SchemeId,
+ SourceSkuId = orderSku?.BelongSkuId,
+ SchemeVersion = cargoParam.SchemeVersion ?? 1
+ });
+ }
+ #endregion
+
+ #region 等比计算采购成本
+ var proportionalCalculationResultList = ProportionalCalculationCost(cargoParamGroup.CargoParamList, purchaseOrderSimpleInfo);
+ foreach (var proportionalCalculationResult in proportionalCalculationResultList)
+ {
+ var skuId = proportionalCalculationResult.SkuId;
+
+
+ var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId);
+ var orderCostDetail = new OrderCostDetail()
+ {
+ Id = idGenerator.NewLong(),
+ CreateTime = DateTime.Now,
+ DeductionQuantity = orderSku.ItemTotal.Value,
+ OrderId = request.OrderId,
+ ProductId = orderSku.ProductId,
+ PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
+ SkuId = skuId,
+ IsEnabled = true
+ };
+ orderCostDetail.CalculationOrderCostDetailCostAndProfit(proportionalCalculationResult.ProductAmount,
+ proportionalCalculationResult.FreightAmount,
+ 0M,
+ 0M);
+ insertOrderCostDetails.Add(orderCostDetail);
+ }
+ #endregion
+
+ #region 采购订单信息
+ var belongSkuIdList = cargoParamGroup.CargoParamList.Select(c => c.BelongSkuId).Distinct().ToList();
+ var orderPurchaserInfo = new OrderPurchaseInfo()
+ {
+ Id = idGenerator.NewLong(),
+ OrderId = request.OrderId,
+ CreateTime = DateTime.Now,
+ PurchaseAccountId = purchaseAccount.Id,
+ PurchaseAccountName = purchaseAccount.AccountName,
+ PurchaseMethod = Enums.PurchaseMethod.线上采购,
+ OrderState = Enums.PurchaseOrderState.待发货,
+ PurchaseOrderId = purchaseOrderId,
+ PurchasePlatform = cargoParamGroup.PurchasePlatform,
+ PurchaserId = cargoParamGroup.PurchaserId,
+ PurchaserName = cargoParamGroup.PurchaserName,
+ ShopId = request.ShopId,
+ BelongSkuIds = string.Join(",", belongSkuIdList),
+ IsEnabled = true,
+ Remark = !string.IsNullOrEmpty(cargoParamGroup.Remark) ? cargoParamGroup.Remark : request.Remark,
+ UpdateTime = DateTime.Now
+ };
+ insertOrderPurchaseInfos.Add(orderPurchaserInfo);
+ #endregion
+
+ #region 采购订单Sku信息
+ foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList)
+ {
+ var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo()
+ {
+ Id = purchaseOrderSku.OrderSkuId,
+ CreateTime = DateTime.Now,
+ OrderId = request.OrderId,
+ PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
+ PurchaseProductId = purchaseOrderSku.ProductId,
+ PurchaseSkuId = purchaseOrderSku.SkuId,
+ ShopId = request.ShopId,
+ PurchasedPrice = purchaseOrderSku.Price,
+ PurchasedAmount = purchaseOrderSku.ProductAmount,
+ PurchasedItemCount = purchaseOrderSku.Quantity
+ };
+ insertOrderPurchaseSkuInfos.Add(orderPurchaseSkuInfo);
+ }
+ #endregion
+
+ #region 采购限时任务
+ foreach (var belongSkuId in belongSkuIdList)
+ {
+ if (!updatePurchaseTimeLimitTaskOrderSkuList.Any(x => x == belongSkuId))
+ updatePurchaseTimeLimitTaskOrderSkuList.Add(belongSkuId);
+ }
+ #endregion
+
+ #region 封装查询齐库合格证接口参数
+ if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越)
+ {
+ foreach (var belongSkuId in belongSkuIdList) //订单skuId
+ {
+ var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
+ if (orderSku == null)
+ continue;
+ var cargoParam = cargoParamGroup.CargoParamList.FirstOrDefault(c => c.BelongSkuId == belongSkuId);
+ if (cargoParam == null)
+ continue;
+ if (!notifyQikuPackSchemeParamList.Any(x => x.SkuId == orderSku.BelongSkuId))
+ {
+ notifyQikuPackSchemeParamList.Add(new QiKuPackTaskSkuPurchaseSchemeIdRequest()
+ {
+ SkuId = orderSku.BelongSkuId,
+ SkuPurchaseSchemeId = cargoParam.SchemeId.ToString(),
+ SchemeVersion = cargoParam.SchemeVersion ?? 1
+ });
+ }
+ }
+ }
+ #endregion
+ }
+
+ #region 更新采购方案/配件
+ {
+ var allCargoParamList = new List();
+ request.CargoParamGroupList.ForEach(x => allCargoParamList.AddRange(x.CargoParamList));
+
+ #region 更新采购方案
+ {
+ var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId);
+ foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList)
+ {
+ var schemeId = cargoParamGroupsByScheme.Key;
+ var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId;
+ var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0;
+
+ //var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
+ // .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
+ // .DefaultIfEmpty(0M)
+ // .First());
+
+ var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam =>
+ {
+ return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1);
+ });
+
+
+ var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount);
+ var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now)
+ .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost)
+ .Set(ps => ps.PurchasedCount + 1)
+ .Set(ps => ps.PurchasedItemCount + skuItemCount)
+ .Set(ps => ps.PurchasedAmount + purchasedAmount);
+ updatePurchaseSchemeList.Add(update);
+ }
+ }
+ #endregion
+
+ //#region 更新采购配件
+ //{
+ // foreach (var cargoParam in allCargoParamList)
+ // {
+ // var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId);
+ // if (createOrderItem != null)
+ // {
+ // var update = fsql.Update()
+ // .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price)
+ // .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId);
+ // updatePssList.Add(update);
+ // }
+ // }
+ //}
+ //#endregion
+ }
+ #endregion
+
+ #region 更新采购商
+ {
+ var purchaserIdList = new List();
+ var purchaserSkuDictionary = new Dictionary>();
+ request.CargoParamGroupList.ForEach(x =>
+ {
+ purchaserIdList.Add(x.PurchaserId);
+ purchaserSkuDictionary.Add(x.PurchaserId, x.CargoParamList.Select(c => c.BelongSkuId).Distinct().ToList());
+ });
+
+ //采购商的sku采购关系表
+ var dbSkuAndPurchaserRelationList = fsql.Select()
+ .Where(spr => purchaserIdList.Contains(spr.PurchaserId) && spr.ShopId == request.ShopId)
+ .ToList();
+ var dbPurchaserList = fsql.Select(purchaserIdList).ToList();
+ foreach (var purchaserId in purchaserIdList)
+ {
+ purchaserSkuDictionary.TryGetValue(purchaserId, out var fromRequestSkuList);
+ var fromDBSkuList = dbSkuAndPurchaserRelationList.Where(x => x.PurchaserId == purchaserId)
+ .Select(x => x.SkuId)
+ .Distinct()
+ .ToList();
+ var exceptSkuList = fromRequestSkuList.Except(fromDBSkuList);
+ var newSkuRelationCount = exceptSkuList.Count();
+ if (newSkuRelationCount > 0)
+ {
+ insertSkuHistoryPurchaserRelationList.AddRange(exceptSkuList.Select(x => new SkuHistoryPurchaserRelation()
+ {
+ Id = idGenerator.NewLong(),
+ CreateTime = DateTime.Now,
+ PurchaserId = purchaserId,
+ ShopId = request.ShopId,
+ SkuId = x
+ }));
+ }
+
+ #region 更新采购商归属
+ var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == purchaserId);
+ if (purchaser != null && !string.IsNullOrEmpty(purchaser.BelongBargainTeamId) && purchaser.BelongType == Enums.PurchaserBelongType.临时)
+ {
+ var updatePurchaser = fsql.Update(purchaserId).Set(p => p.BelongType, Enums.PurchaserBelongType.永久);
+ updatePurchaserList.Add(updatePurchaser);
+ }
+ #endregion
+ }
+
+ }
+ #endregion
+
+ #region 订单Sku成本
+ var allOrderCostDetail = orderCostDetailList.Union(insertOrderCostDetails).ToList();
+ foreach (var orderSku in orderSkus)
+ {
+ var orderSkuCost = orderSkuCostList.FirstOrDefault(osc => osc.SkuId == orderSku.SkuId);
+ if (orderSkuCost == null)
+ {
+ orderSkuCost = new OrderSkuCost()
+ {
+ Id = idGenerator.NewLong(),
+ CreateTime = DateTime.Now,
+ OrderId = request.OrderId,
+ SkuId = orderSku.SkuId
+ };
+ orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
+ insertOrderSkuCostList.Add(orderSkuCost);
+ }
+ else
+ {
+ orderSkuCost.CalculationOrderSkuCostAndProfit(orderSku, allOrderCostDetail);
+ var update = fsql.Update().SetSource(orderSkuCost);
+ updateOrderSkuCostList.Add(update);
+ }
+ }
+ #endregion
+
+ #region 订单成本
+ var orderCost = new OrderCost()
+ {
+ OrderId = request.OrderId,
+ CreateTime = DateTime.Now,
+ IsManualEdited = false
+ };
+
+ //var totalPurchaseProductAmount = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.SkuAmount);
+ //var totalPurchaseFreight = orderCostDetailList.Union(insertOrderCostDetails).Sum(ocd => ocd.PurchaseFreight);
+ //orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value,
+ // totalPurchaseProductAmount ?? 0M,
+ // totalPurchaseFreight ?? 0M,
+ // 0M,
+ // 0M);
+
+ var allOrderSkuCostList = orderSkuCostList.Union(insertOrderSkuCostList).ToList();
+ orderCost.CalculationOrderCostAndProfit(dbOrder.OrderTotalPrice.Value, allOrderSkuCostList);
+
+
+ if (!isRepurchase)
+ {
+ insertOrderCost = fsql.Insert(orderCost);
+ }
+ else
+ {
+ updateOrderCost = fsql.Update().SetSource(orderCost).IgnoreColumns(a => new { a.CreateTime });
+ }
+ #endregion
+
+ #region 订单状态
+ dbOrder.CalculationOrderState(fsql, orderSkus, orderPurchaseInfoList.Union(insertOrderPurchaseInfos).ToList());
+ #endregion
+
+ #region 通知C端状态
+ Task.Factory.StartNew(() => SendPurchaseOrderStateToC(dbOrder.Id, dbOrder.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ #endregion
+
+ #region 查询齐库合格证
+ if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越 &&
+ notifyQikuPackSchemeParamList != null &&
+ notifyQikuPackSchemeParamList.Count() > 0)
+ {
+ Task.Factory.StartNew(() => qiKuManager.SearchCerConfigured(dbOrder, notifyQikuPackSchemeParamList, orderSkus), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ }
+ #endregion
+
+ //#region 创建优化历史
+ //{
+ // //本批次在线采购的订单sku集合
+ // var allBelongSkuIdList = request.CargoParamGroupList.SelectMany(cg => cg.CargoParamList.Select(c => c.BelongSkuId)).Distinct().ToList();
+ // //var optimizationSkuIdList = orderSkus.Where(osku => osku.IsOptimizationCompleted == 1 && allBelongSkuIdList.Contains(osku.SkuId))
+ // // .Select(osku => osku.SkuId)
+ // // .ToList();
+
+ // var optimizationTaskList = fsql.Select()
+ // .Where(s => allBelongSkuIdList.Contains(s.SkuId) &&
+ // s.IsOptimizationCompleted == true &&
+ // s.IsPurchasementCompleted == false)
+ // .ToList();
+
+ // var optimizationSkuIdList = optimizationTaskList.Select(s => s.SkuId).Distinct().ToList();
+ // if (optimizationSkuIdList.Count() > 0)
+ // {
+ // //优化历史
+ // var optimizationHistoryList = fsql.Select()
+ // .Where(s1 => s1.ShopId == request.ShopId && optimizationSkuIdList.Contains(s1.SkuId))
+ // .GroupBy(s1 => s1.SkuId)
+ // .WithTempQuery(g => new { MaxId = g.Max(g.Value.Id) })
+ // .From()
+ // .InnerJoin((s1, s2) => s1.MaxId == s2.Id)
+ // .ToList((s1, s2) => s2);
+
+
+ // foreach (var optimizationSkuId in optimizationSkuIdList)
+ // {
+ // var orderSkuCost = allOrderSkuCostList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
+ // if (orderSkuCost == null)
+ // continue;
+ // var orderSku = orderSkus.FirstOrDefault(x => x.SkuId == optimizationSkuId);
+ // var lastHistory = optimizationHistoryList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
+
+ // var currentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal;
+ // var ratio = (lastHistory?.LastPurchasePrice ?? 0) == 0 ? 0 : 1 - currentPurchasePrice / lastHistory.LastPurchasePrice;
+
+ // var newOptimizationHistory = new SkuOptimizationHistory()
+ // {
+ // Id = idGenerator.NewLong(),
+ // CreateTime = DateTime.Now,
+ // CurrentPurchasePrice = orderSkuCost.SkuAmount / orderSku.ItemTotal,
+ // ProductId = orderSku.ProductId,
+ // ShopId = request.ShopId,
+ // SkuId = optimizationSkuId,
+ // LastPurchasePrice = lastHistory?.LastPurchasePrice ?? 0,
+ // OptimizationRatio = ratio,
+ // TriggerOptimizationReason = orderSku.TriggerOptimizationReason
+ // };
+ // insertSkuOptimizationHistoryList.Add(newOptimizationHistory);
+
+ // var skuOptimizationTask = optimizationTaskList.FirstOrDefault(x => x.SkuId == optimizationSkuId);
+ // if (skuOptimizationTask != null)
+ // updateSkuOptimizationPurhcasementByIdList.Add(skuOptimizationTask.Id);
+ // }
+ // }
+ //}
+ //#endregion
+
+ fsql.Transaction(() =>
+ {
+ if (updatePurchaseTimeLimitTaskOrderSkuList.Count() > 0)
+ {
+ fsql.Update().Set(t => t.CompletionTime, DateTime.Now)
+ .SetIf(dbOrder.PayTime != null, t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false))
+ .Where(t => t.OrderId == request.OrderId)
+ .Where(t => updatePurchaseTimeLimitTaskOrderSkuList.Contains(t.SkuId))
+ .Where(t => t.CompletionTime == null)
+ .Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务)
+ .ExecuteAffrows();
+ }
+ if (insertOrderCostDetails.Count() > 0)
+ fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
+ if (insertOrderPurchaseInfos.Count() > 0)
+ fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
+ if (insertOrderPurchaseSkuInfos.Count() > 0)
+ fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
+ if (insertOrderPurchaseRelationInfoList.Count() > 0)
+ fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows();
+ if (insertSkuHistoryPurchaserRelationList.Count() > 0)
+ fsql.Insert(insertSkuHistoryPurchaserRelationList).ExecuteAffrows();
+ if (insertSkuOptimizationHistoryList.Count() > 0)
+ fsql.Insert(insertSkuOptimizationHistoryList).ExecuteAffrows();
+ updateOrderCost?.ExecuteAffrows();
+ insertOrderCost?.ExecuteAffrows();
+ if (updatePurchaseSchemeList.Count() > 0)
+ {
+ foreach (var update in updatePurchaseSchemeList)
+ update.ExecuteAffrows();
+ }
+ //if (updatePssList.Count() > 0)
+ //{
+ // foreach (var update in updatePssList)
+ // update.ExecuteAffrows();
+ //}
+ fsql.Update(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState)
+ .SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark)
+ .Set(o => o.IsPurchased, true)
+ .ExecuteAffrows();
+ if (insertOrderSkuCostList.Count() > 0)
+ fsql.Insert(insertOrderSkuCostList).ExecuteAffrows();
+ if (updateOrderSkuCostList.Count() > 0)
+ {
+ foreach (var update in updateOrderSkuCostList)
+ update.ExecuteAffrows();
+ }
+ //if (updateSkuOptimizationPurhcasementByIdList.Count() > 0)
+ // fsql.Update(updateSkuOptimizationPurhcasementByIdList).Set(s => s.IsPurchasementCompleted, true).ExecuteAffrows();
+
+ if (updatePurchaserList.Count() > 0)
+ {
+ foreach (var update in updatePurchaserList)
+ update.ExecuteAffrows();
+ }
+ });
+
+ //#region 更新采购方案最新价格
+ //Task.Factory.StartNew(() =>
+ //{
+ // try
+ // {
+ // purchaseSchemeBusiness.RefreshPurchaseScheme(new RefreshSchemeRequest()
+ // {
+ // SchemeIdList = updatePurchaseTimeSchemeIdList
+ // });
+ // }
+ // catch { }
+
+ //}, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ //#endregion
+ }
}
}
diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
index 1c096f6..a21d3ac 100644
--- a/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
+++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
@@ -326,7 +326,7 @@ namespace BBWYB.Server.Business
{
if (jobject["data"][locationIdList[i]] != null)
{
- location = jobject["data"][locationIdList[i]]["data"]["location"].ToString();
+ location = jobject["data"][locationIdList[i]]["data"]["location"]?.ToString();
if (string.IsNullOrEmpty(location))
continue;
break;
diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs
index 9c54440..6a7925b 100644
--- a/BBWYB.Server.Business/Vender/VenderBusiness.cs
+++ b/BBWYB.Server.Business/Vender/VenderBusiness.cs
@@ -88,6 +88,7 @@ namespace BBWYB.Server.Business
.Set(pa => pa.AppToken, shopSettingRequest.AppToken)
.Set(pa => pa.AccountName, shopSettingRequest.AccountName)
.Set(pa => pa.PurchasePlatformId, ((int)shopSettingRequest.PurchasePlatformId).ToString())
+ .Set(pa => pa.Password, shopSettingRequest.Password)
.ExecuteAffrows();
}
return shopSettingRequest.PurchaseAccountId;
diff --git a/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs b/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs
new file mode 100644
index 0000000..38c44c6
--- /dev/null
+++ b/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs
@@ -0,0 +1,930 @@
+
+using BBWYB.Common.Models;
+using BBWYB.Server.Model._1688;
+using HtmlAgilityPack;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using SDKAdapter.PurchasePlatform.Models;
+using System.Text;
+using System.Text.RegularExpressions;
+using static BBWYB.Server.Model.Enums;
+
+namespace BBWYB.Server.Business._1688Helper
+{
+ ///
+ /// 手动支付采购单业务
+ ///
+ public class Collect1688Helper
+ {
+
+ private string _1688Cookie { get; set; }
+ public Action AddLog { get; set; }
+
+ public Collect1688Helper(string _1688Cookie)
+ {
+ this._1688Cookie = _1688Cookie;
+ }
+
+ private string UrlEncode(string str, string encodingStr)
+ {
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ return System.Web.HttpUtility.UrlEncode(str, Encoding.GetEncoding(encodingStr));
+ }
+
+ /////
+ /////
+ /////
+ /////
+ //public ProductModel GetProductMsg(string offerId)//获取限制条件
+ //{
+ // string url = $"https://detail.1688.com/offer/{offerId}.html";
+ // using HttpClient http = new HttpClient();
+
+ // //添加cookie
+ // http.DefaultRequestHeaders.Add("Cookie", _1688Cookie);
+ // http.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0");
+ // var res = http.GetAsync(url).Result;
+ // if (res.IsSuccessStatusCode)
+ // {
+ // Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ // var html = res?.Content?.ReadAsStringAsync().Result;
+
+ // string ipvId = GetRegexValue(html, "\"ipvId\":\"([^\"]+)\""); //可以不带ipvId
+ // //"sellerUserId":3199397430,
+ // //string sellerUserId = GetRegexValue(html, "\"sellerUserId\":([^,]+),");
+
+ // //"mixNumber": 2,
+ // int mixNumber = int.Parse(GetRegexValue(html, "\"mixNumber\":([^,]+),"));
+ // return new ProductModel() { MixNumber = mixNumber, IpvId = ipvId };
+ // }
+ // AddLog("获取商品信息失败");
+ // return null;
+ //}
+
+
+ public OrderParameter GetProductParameter(List orderProducts, OrderModel orderModel, string ipvId)
+ {
+ var flow = orderModel.ToString(); //下单类型
+ string url = $"https://order.1688.com/order/smart_make_order.htm?p=detail&_input_charset=utf-8&fromkv={UrlEncode($"offerdetail:pc;ipvId:{ipvId}", "utf-8")}";
+
+ List orderProductIds = new List();
+ foreach (var orderProduct in orderProducts)
+ {
+ orderProductIds.Add(@$"{{""specId"":""{orderProduct.SpecId}"",""offerId"":{orderProduct.ProductId},""quantity"":{orderProduct.Quantity},""flow"":""{flow}"",""ext"":{{""sceneCode"":""""}},""selectedTradeServices"":[]}}");
+
+ }
+
+ var id = UrlEncode($"[{string.Join(",", orderProductIds)}]", "gb2312");
+
+ string postData = $"id={id}&flow=xxx";
+
+
+ var response = PostHtml(url, postData, _1688Cookie);
+
+ if (response == null || !response.IsSuccessStatusCode)
+ {
+ AddLog("获取订单参数失败");
+ return null;
+ }
+ // string lvid = response.Headers.Get("Eagleeye-Traceid");
+
+ string lvid = "";
+ if (response.Headers.Contains("Eagleeye-Traceid"))
+ {
+ //获取响应头 Resin-Trace的值
+
+ var trace = response.Headers.GetValues("Eagleeye-Traceid");
+ if (trace.Any())
+ {
+ lvid = trace.FirstOrDefault();
+ }
+ }
+
+ string html = response.Content.ReadAsStringAsync().Result;
+ var orderUrl = GetRegexValue(html, "action=\"([^\"]+)\"").Replace("&", "&");
+
+ //data-default-checked-address-id="6012255930"
+ var address = GetRegexValue(html, "data-default-checked-address-id=\"([^\"]+)\"");
+
+ //name="_fm.smarta._0.t" value="350502005"
+ var townCode = GetRegexValue(html, "name=\"_fm.smarta._0.t\" value=\"([^\"]+)\"");
+
+ var res = new OrderParameter()
+ {
+ Lvid = lvid,
+ OrderUrl = orderUrl,
+ Address = address,
+ TownCode = townCode,
+ IpvId = ipvId
+ };
+ HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
+ htmlDoc.LoadHtml(html);
+
+ HtmlNode csrfInput = htmlDoc.DocumentNode.SelectSingleNode("//input[@name='_csrf_token']");
+
+ if (csrfInput != null)
+ {
+ // 获取 value 属性的值
+ string csrfTokenValue = csrfInput.GetAttributeValue("value", "");
+ res.Csrf_token = csrfTokenValue;
+ }
+
+
+ // 使用XPath选择器获取元素
+ HtmlNode orderDiv = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='order']");
+
+ if (orderDiv != null)
+ {
+ List
OrderGroupParameterList = new List();
+
+ // 获取内的所有子元素
+ HtmlNodeCollection childNodes = orderDiv.ChildNodes;
+ foreach (HtmlNode node in childNodes)
+ {
+ // 处理每个子元素
+ string innerText = node.InnerText; // 获取元素的文本内容
+ string outerHtml = node.OuterHtml; // 获取元素的HTML代码
+ // 其他操作...
+
+ if (node.Name == "div")
+ {
+ var zone_orders = node.Descendants("div")
+ .Where(div => div.Attributes.Contains("class") && div.GetAttributeValue("class", "").Equals("zone-order", StringComparison.OrdinalIgnoreCase));
+
+ foreach (HtmlNode zone_order in zone_orders)
+ {
+ // 获取 data-source 属性的值
+ string dataSourceValue = zone_order.GetAttributeValue("data-source", "");
+
+ var groupHeaderJson = JsonConvert.DeserializeObject
(dataSourceValue);
+ //sellerMemberId
+ string sellerMemberId = groupHeaderJson.sellerMemberId.ToString();
+ //sellerUserId
+ string sellerUserId = groupHeaderJson.sellerUserId.ToString();
+ ////buyerMemberId
+ //string buyerMemberId = groupHeaderJson.buyerMemberId.ToString();
+ //orderOutId
+ string orderOutId = groupHeaderJson.orderOutId.ToString();
+ //group
+ string group = groupHeaderJson.group.ToString();
+ //belong
+ string belong = groupHeaderJson.belong.ToString();
+ //flow 下单类型
+ flow = groupHeaderJson?.flow?.ToString();
+ //bizType
+ string bizType = groupHeaderJson?.bizType?.ToString();
+
+
+ var groupDiv = zone_order.Descendants("li")
+ .Where(li => li.Attributes.Contains("class") && li.GetAttributeValue("class", "").Equals("step-item step-item-first", StringComparison.OrdinalIgnoreCase));
+ //.SelectSingleNode("//li[@class='step-item step-item-first']");
+
+ if (groupDiv == null)
+ {
+ continue;
+ }
+
+ string stepName = "";
+ foreach (var item in groupDiv)
+ {
+ var groupDivDataSource = item.GetAttributeValue("data-source", "");
+ if (groupDivDataSource != null)
+ {
+
+ var json = JsonConvert.DeserializeObject(groupDivDataSource);
+ group = json.group.ToString();
+ stepName = json.stepName.ToString();
+ }
+ }
+
+
+
+
+ OrderGroupParameter orderGroupParameter = new OrderGroupParameter()
+ {
+ Group = group,
+ StepName = stepName,
+ OrderOutId = orderOutId,
+ MemberId = sellerMemberId,
+ SellerUserId = sellerUserId,
+ Belong = belong,
+
+
+ };
+
+
+
+
+
+ var groupOrders = zone_order.Descendants("tr")
+ .Where(tr => tr.Attributes.Contains("data-group-name"));
+ List productAmountList = new List();
+ List OrderProductParameterList = new List();
+ foreach (var groupOrder in groupOrders)
+ {
+
+ if (groupOrder.Name == "tr")
+ {
+
+ var data_source = groupOrder.GetAttributeValue("data-source", "");
+ string groutOuterHtml = groupOrder.OuterHtml;
+ if (data_source != null)
+ {
+
+ var sumCarriage = GetRegexValue(groutOuterHtml, "\"fee\":([^,]+),");
+ if (sumCarriage == null)
+ {
+ sumCarriage = "0";
+ }
+
+ //"freightId":"18605534"
+ var freightId = GetRegexValue(groutOuterHtml, "\"freightId\":\"([^\"]+)\"");
+ //'freightId':'16850501'
+ if (freightId == null)
+ {
+ freightId = GetRegexValue(groutOuterHtml, "'freightId':'([^\']+)'");
+ }
+
+
+
+ //'outId':'general_705889664759_df9e522ec29afb80a682fcaac1dce50c',
+ var outId = GetRegexValue(data_source, "'outId':'([^']+)'");
+
+
+
+ //"discountFee":"0"
+ var discountFee = decimal.Parse(GetRegexValue(data_source, "\"discountFee\":\"([^\"]+)\"") ?? "0");
+
+
+ var cargoKey = GetRegexValue(data_source, "'cargoKey':'([^']+)'");
+ //'unitPrice':'6.33'
+ var unitPrice = decimal.Parse(GetRegexValue(data_source, "'unitPrice':'([^']+)'"));
+ var payFee = (int)(unitPrice * 100);
+
+ //'quantity':1.0
+ int quantity = (int)(decimal.Parse(GetRegexValue(data_source, "'quantity':([^,]+),")));
+
+ //'ext':'{\"detailOrderBizAttributes\":{\"b_cargo_from\":\"offerdetail:pc;ipvId:2150462317125683404374580e106c\"}}',
+ var ext = GetRegexValue(data_source, "'ext':'([^']+)'")?.Replace("\\"","\"");
+
+
+ //'offerId':'563883060952',
+ var offerId = GetRegexValue(data_source, "'offerId':'([^']+)'");
+
+ //'skuId':'ea66ab9ceff1fbcc8d0b97d4926e476f',
+ var spectId = GetRegexValue(data_source, "'skuId':'([^']+)'");
+
+ //'tbSkuId':'5408119750040',
+ var skuId = GetRegexValue(data_source, "'tbSkuId':'([^']+)'");
+ //'offerPriceRangeJson':[{"ba":1,"ea":0,"p":2.5}]
+ var offerPriceRangeJson = GetRegexValue(data_source, "'offerPriceRangeJson'\\s*:\\s*\\[(.*?)\\]")?.Replace(""", "\"");
+
+
+ var productAmount = quantity * unitPrice - discountFee;
+ productAmountList.Add(productAmount);
+
+
+ OrderProductParameterList.Add(new OrderProductParameter()
+ {
+ ProductAmount = productAmount,
+ CargoKey = cargoKey,
+ ProductId = offerId,
+ SkuId = skuId,
+ SpectId = spectId,
+ UnitPrice = unitPrice,
+ Quantity = quantity,
+ DiscountFee = discountFee,
+ SumCarriage = decimal.Parse(sumCarriage),
+ FreightId = freightId,
+ OutId = outId,
+ OfferPriceRangeJson = offerPriceRangeJson,
+ Ext = ext
+
+ });
+ }
+
+ }
+ }
+
+ var totalProductAmount = OrderProductParameterList.Sum(p => p.ProductAmount);
+
+ var actualPay = OrderProductParameterList.Sum(p => p.ProductAmount + p.SumCarriage);
+
+
+ orderGroupParameter.SumCarriage = OrderProductParameterList.Sum(p => p.SumCarriage);
+ orderGroupParameter.ActualPay = actualPay;
+ orderGroupParameter.ActualPayFee = (int)(actualPay * 100);
+ orderGroupParameter.TotalProductAmount = totalProductAmount;
+ orderGroupParameter.PayFee = (int)(totalProductAmount * 100);
+ orderGroupParameter.OrderProductParameterList = OrderProductParameterList;
+ OrderGroupParameterList.Add(orderGroupParameter);
+ }
+
+
+ }
+ }
+
+ res.OrderGroupParameterList = OrderGroupParameterList;
+
+
+ }
+
+ return res;
+
+ }
+
+
+ ///
+ /// 输入临时收货地址(姓名 手机号 收货地址)或者直接输入地址 (主要获取邮编编码) //feiyu 19959858952 福建省泉州市鲤城区金龙街道古龙路媒人桥2号三文公寓一楼齐越中转仓
+ ///
+ public AddressModel InputAddress(string adress, string _csrf_token)
+ {
+ //callback=jQuery17207000444400310621_1711938052406&address=feiyu+19959858952+%E7%A6%8F%E5%BB%BA%E7%9C%81%E6%B3%89%E5%B7%9E%E5%B8%82%E9%B2%A4%E5%9F%8E%E5%8C%BA%E9%87%91%E9%BE%99%E8%A1%97%E9%81%93%E5%8F%A4%E9%BE%99%E8%B7%AF%E5%AA%92%E4%BA%BA%E6%A1%A52%E5%8F%B7%E4%B8%89%E6%96%87%E5%85%AC%E5%AF%93%E4%B8%80%E6%A5%BC%E9%BD%90%E8%B6%8A%E4%B8%AD%E8%BD%AC%E4%BB%93&_csrf_token=42b5ba743ad1a219f275a0f2b8f13303&_input_charset=utf-8
+ string url = $"https://wuliu.1688.com/address/ajax/address_parse.jsx?callback=jQuery17207000444400310621_1711938052406&address={UrlEncode(adress, "utf-8")}&_csrf_token={_csrf_token}&_input_charset=utf-8";
+
+ /*
+ jQuery17207000444400310621_1711938052406({
+ "data": {
+ "addressDetail": "金龙街道古龙路媒人桥2号三文公寓一楼齐越中转仓",
+ "city": "泉州市",
+ "cityCode": 350500,
+ "district": "鲤城区",
+ "districtCode": 350502,
+ "divisionZip": "362000",
+ "mobileNO": "19959858952",
+ "personalName": "feiyu",
+ "province": "福建省",
+ "provinceCode": 350000
+ },
+ "success": true
+})
+ */
+
+ using HttpClient http = new HttpClient();
+ http.BaseAddress = new Uri(url);
+ http.DefaultRequestHeaders.Add("Cookie", _1688Cookie);
+ http.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0");
+ var res = http.GetAsync(url).Result;
+ if (res.IsSuccessStatusCode)
+ {
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ var html = res?.Content?.ReadAsStringAsync().Result;
+ if (html.Contains("会话已过期,请刷新页面"))
+ {
+ AddLog?.Invoke("登陆已过期,请刷新页面");
+ return null;
+ }
+
+ var addressCode = GetRegexValue(html, "\"districtCode\":(\\d+)");
+ var divisionZip = GetRegexValue(html, "\"divisionZip\":\"([^\"]+)\"");
+ var mobileNO = GetRegexValue(html, "\"mobileNO\":\"([^\"]+)\"");
+ var personalName = GetRegexValue(html, "\"personalName\":\"([^\"]+)\"");
+ var addressDetail = GetRegexValue(html, "\"addressDetail\":\"([^\"]+)\"");
+ return new AddressModel()
+ {
+ AddressDetail = addressDetail,
+ DivisionZip = divisionZip,
+ MobileNO = mobileNO,
+ PersonalName = personalName,
+ AddressCode = addressCode
+ };
+ }
+
+ return null;
+
+
+
+ }
+
+ //刷新物流列表
+ public OrderParameter ReflashAdress(OrderParameter oldData, AddressModel addressModel, OrderModel orderModel)
+ {
+
+ string url = "https://order.1688.com/order/smart_ajax.jsx?_input_charset=utf-8";
+
+
+
+ List generalOrders_orderGroupKeyList = new List();
+ foreach (var orderGroup in oldData.OrderGroupParameterList)
+ {
+ List orderList = new List();
+ foreach (var orderProduct in orderGroup.OrderProductParameterList)
+ {
+ string freightId = orderProduct.FreightId;
+ string order = $@"{{""offerId"":""{orderProduct.ProductId}"",""skuId"":""{orderProduct.SpectId}"",""tbSkuId"":""{orderProduct.SkuId}"",""hasSkuUmp"":""false"",""outId"":""{orderProduct.OutId}"",""quantity"":{orderProduct.Quantity},""isfreefreight"":0,""marketingScene"":"""",""offerPriceRangeJson"":[{orderProduct.OfferPriceRangeJson}],""unitPrice"":""{orderProduct.UnitPrice}"",""bundle"":"""",""couple"":"""",""freightId"":""{freightId}"",""rebate"":0,""buyerBearServiceFee"":false,""gift"":""0""}}";
+ orderList.Add(order);
+ }
+
+
+ string orderGroupData = $@"""{orderGroup.Group}"":{{""order"":[{string.Join(",", orderList)}] ,""orderOutId"":""{orderGroup.OrderOutId}"",""orderBundle"":"""",""orderCouple"":"""",""type"":""address"",""memberId"":""{orderGroup.MemberId}"",""sellerUserId"":""{orderGroup.SellerUserId}"",""operate"":"""",""countyCode"":""{addressModel.AddressCode}"",""addressCode"":""{addressModel.AddressCode}"",""address"":""-1"",""townCode"":"""",""umpSysAvailble"":""1"",""bizType"":""{orderModel}"",""bizScene"":""{orderModel}"",""transportType"":""multiStep"",""groupId"":""{orderGroup.Group}"",""tplCode"":""assureTrade"",""countryISOCode"":"""",""channelId"":"""",""mobile"":""{addressModel.MobileNO}"",""orderAmount"":""{orderGroup.ActualPayFee}"",""carriage"":""{orderGroup.SumCarriage}"",""belong"":""{orderGroup.Belong}""}}";
+
+ generalOrders_orderGroupKeyList.Add(orderGroupData);
+ }
+
+ string generalOrders_orderGroupKey = string.Join(",", generalOrders_orderGroupKeyList);
+
+
+
+ string data = $"{{\"ordersUmp.0\":{{\"orderBlockAjaxParam\":{{\"{orderModel}Orders..orderGroupKey\":{{{generalOrders_orderGroupKey}}}}},\"changeType\":\"address\",\"selectedCrossPromotionId\":\"\",\"selectedCrossPromotionIdMap\":\"{{}}\",\"bizScene\":\"{orderModel}\"}}}}";
+
+ string postData = $"tasks=ordersUmp.0&data={UrlEncode(data, "UTF-8")}&_csrf_token={oldData.Csrf_token}&lvId={oldData.Lvid}";
+ var response = PostHtml(url, postData, _1688Cookie);
+
+ if (response == null || !response.IsSuccessStatusCode)
+ {
+ AddLog("获取订单参数失败");
+ return null;
+ }
+ // string lvid = response.Headers.Get("Eagleeye-Traceid");
+
+ if (response.Headers.Contains("Eagleeye-Traceid"))
+ {
+ //获取响应头 Resin-Trace的值
+
+ var trace = response.Headers.GetValues("Eagleeye-Traceid");
+ if (trace.Any())
+ {
+ oldData.Lvid = trace.FirstOrDefault();
+ }
+ }
+
+ var html = response.Content.ReadAsStringAsync().Result;
+
+ var json = JsonConvert.DeserializeObject(html);
+
+ dynamic jsonObj = JsonConvert.DeserializeObject(html);
+
+
+ if (jsonObj["success"].ToString() == "true")
+ {
+
+
+ var datawuliu = jsonObj["data"]["ordersUmp.0"]["data"]["orderPromotion"].ToString();
+
+ //获取键值对的方式
+ bool isReflash = false;
+ JObject jbO = JObject.Parse(datawuliu);
+ foreach (var property in jbO.Properties())
+ {
+ var key = property.Name;
+ var groupData = oldData.OrderGroupParameterList.SingleOrDefault(o => o.Group == key);
+
+ var value = property.Value;
+ //获取value下的 freight
+ var freight = (JObject)value["freight"];
+ //获取freight的键值对的key值
+ foreach (var item in freight.Properties())
+ {
+ var freightKey = item.Name;
+ var freightValue = item.Value;
+ //获取freight的键值对的value值
+
+ //totalFreightFee的值
+ var wuliufee = freightValue["totalFreightFee"].ToString();
+
+
+ groupData.OrderProductParameterList.OrderByDescending(s => s.SumCarriage).FirstOrDefault(g => g.FreightId == freightKey).SumCarriage = decimal.Parse(wuliufee) / 100m;
+
+
+
+ isReflash = true;
+ }
+
+
+ var order = (JObject)value["order"];
+
+ foreach (var item in order.Properties())
+ {
+ var outId = item.Name;
+
+ var orderProduct = groupData.OrderProductParameterList.FirstOrDefault(g => g.OutId == outId);
+
+ if (orderProduct != null)
+ {
+ orderProduct.ProductAmount = item.Value["amount"].ToObject();
+
+ //selectedUmpBundle 的couple
+
+ var skuSelectedUmpBundle = item.Value["selectedUmpBundle"];
+
+ if (skuSelectedUmpBundle != null)
+ {
+ var couple = skuSelectedUmpBundle["couple"].ToString();
+
+ var sceneUnitPrice = skuSelectedUmpBundle["sceneUnitPrice"].ToObject();
+
+
+ var discountFee = skuSelectedUmpBundle["price"].ToObject();//折扣价格
+
+ var skuChooseFreeFreight = skuSelectedUmpBundle["isFreeFreight"].ToObject() ? 1 : 0;
+
+
+
+
+ orderProduct.Couple = couple;
+ orderProduct.ChooseFreeFreight = skuChooseFreeFreight;
+
+ orderProduct.ProductAmount = orderProduct.UnitPrice * orderProduct.Quantity - discountFee;
+
+ }
+
+
+ }
+
+
+
+
+
+
+
+ }
+
+ //selectedShopUmpBundle
+
+
+ var selectedShopUmpBundle = value["selectedShopUmpBundle"];
+
+ bool isFreeFreight = false;
+ decimal shopDiscountFee = 0;
+ string shopCouple = "";
+ if (selectedShopUmpBundle != null)
+ {
+ shopCouple = selectedShopUmpBundle["couple"].ToString();//店铺优惠券
+ isFreeFreight = selectedShopUmpBundle["isFreeFreight"].ToObject();//是否包邮
+ shopDiscountFee = selectedShopUmpBundle["price"].ToObject();//店铺优惠金额
+ }
+ groupData.ChooseFreeFreight = isFreeFreight ? 1 : 0;
+ groupData.PromotionId = shopCouple;
+
+
+
+
+ if (isFreeFreight)
+ groupData.SumCarriage = 0;
+ else
+ groupData.SumCarriage = groupData.OrderProductParameterList.Select(s => s.SumCarriage).Sum();
+
+ groupData.TotalProductAmount = groupData.OrderProductParameterList.Select(s => s.ProductAmount).Sum();
+
+ groupData.ActualPay = groupData.TotalProductAmount + groupData.SumCarriage - shopDiscountFee;
+ groupData.ActualPayFee = (int)(groupData.ActualPay * 100);
+
+
+
+
+
+
+
+
+
+ }
+ if (isReflash)
+ {
+ AddLog?.Invoke("刷新地址成功");
+ }
+ else
+ {
+ AddLog?.Invoke("刷新地址失败");
+ }
+
+ }
+ else
+ {
+ AddLog?.Invoke("刷新地址失败");
+ }
+
+ return oldData;
+
+ }
+
+
+
+ public string GetCookieStr(string cookies, string cookieName)
+ {
+ //通过;分割
+ var cookieDatas = cookies.Split(';', StringSplitOptions.RemoveEmptyEntries);
+ foreach (var cookie in cookieDatas)
+ {
+ var cookieParams = cookie.Split('=');
+ if (cookieParams.Count() >= 2)
+ {
+ var key = cookieParams[0]?.Trim();
+ var value = cookieParams[1]?.Trim();
+ if (key == cookieName)
+ {
+ return value;
+ }
+ }
+ }
+ return "";
+ }
+
+ private string GetRegexValue(string html, string patternStr)
+ {
+ //使用正则匹配出值
+
+ var regex = Regex.Match(html, patternStr);
+
+ if (regex.Success)
+ {
+ return regex.Groups[1].Value;
+ }
+ return null;
+
+ }
+
+
+
+ //获取_csrf_token参数
+ public string GetCsrfToken(string cookies)
+ {
+ var csrf_token = GetCookieStr(cookies, "_csrf_token");
+
+ if (csrf_token == null)
+ {
+ return null;
+ }
+ return Md5Helper.Md5_32(csrf_token);
+ }
+
+ //加入购物车
+ public void AddCart(string offerId, string specId, int quantity, string IpvId)
+ {
+ try
+ {
+ //时间戳
+ var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+ string url = "https://cart.1688.com/ajax/safe/add_to_cart_list_new.jsx";
+
+ string ext = $"{{\"sceneCode\":\"offerdetail:pc;ipvId:{IpvId}\"}}";
+
+ string specData = $"[{{\"amount\":{quantity},\"specId\":\"{specId}\",\"selectedTradeServices\":[]}}]";
+ string postData = $"type=offer&cargoIdentity={offerId}&returnType=url&needTotalPrice=false&promotionSwitch=false&_csrf_token={GetCsrfToken(_1688Cookie)}&t={timestamp}&purchaseType=&ext={UrlEncode(ext, "utf-8")}&specData={UrlEncode(specData, "utf-8")}";
+
+
+
+
+ var res = PostHtml(url, postData, _1688Cookie);
+ if (res.IsSuccessStatusCode)
+ {
+ var html = res.Content.ReadAsStringAsync().Result;
+
+ var json = JsonConvert.DeserializeObject(html);
+
+ if (json.success)
+ {
+ AddLog?.Invoke("成功加入购物车");
+ }
+ else
+ {
+ AddLog?.Invoke("加入购物车失败");
+ }
+
+ }
+ }
+ catch (Exception ex)
+ {
+
+ AddLog?.Invoke($"加入购物车失败:{ex.Message}");
+ }
+
+
+ }
+
+
+
+ public ApiResponse CommitOrder(PrewOrderResponse prewOrderResponse, string remarkMesg)
+ {
+ var productParameter = prewOrderResponse.orderParameter;
+ var orderModel = prewOrderResponse.OrderModel;
+
+ var adressModel = prewOrderResponse.AddressModel;
+
+
+ var flow = orderModel.ToString(); //下单类型
+ var ipvId = productParameter.IpvId;
+ var addressDetail = adressModel.AddressDetail;
+ var townCode = productParameter.TownCode;
+ var csrf_token = productParameter.Csrf_token;
+ var orderUrl = productParameter.OrderUrl;
+ var addressCode = adressModel.AddressCode;
+ var lvid = productParameter.Lvid;
+ var personalName = adressModel.PersonalName;
+ var mobileNO = adressModel.MobileNO;
+ var _csrf_token = productParameter.Csrf_token;
+
+ var divisionZip = adressModel.DivisionZip;
+
+
+ // 213e38fa17117750507943145ee537
+ string fromkv = $"offerdetail:pc;ipvId:{productParameter.IpvId}";//24885ba917116953616677208e
+
+ //string remarkMesg = "拖鞋";//备注消息
+
+ string cna = GetCookieStr(_1688Cookie, "cna");
+
+ List _fm_sm_0_iList = new List();
+
+ List _fm_sma_cargoKeyList = new List();
+
+ List _fm_smartin_group_meList = new List();
+
+ List smarts_mList = new List();
+
+ List _fm_smart_group_meList = new List();
+
+
+ List _fm_sma_group_g_fList = new List();
+
+ foreach (var OrderGroupParameter in productParameter.OrderGroupParameterList)
+ {
+ var group = OrderGroupParameter.Group;
+ var discountFee = OrderGroupParameter.DiscountFee;
+ var sumCarriage = OrderGroupParameter.SumCarriage;
+ var stepName = OrderGroupParameter.StepName;
+ var totalProductAmount = OrderGroupParameter.TotalProductAmount.ToString("0.00");
+ var actualPay = OrderGroupParameter.ActualPay;
+ var actualPayFee = OrderGroupParameter.ActualPayFee;
+ var payFee = OrderGroupParameter.PayFee;
+ var shopCouple = OrderGroupParameter.PromotionId;
+ var chooseFreeFreight = OrderGroupParameter.ChooseFreeFreight;
+
+ foreach (var orderProductParameter in OrderGroupParameter.OrderProductParameterList)
+ {
+ var cargoKey = orderProductParameter.CargoKey;
+
+ var unitPrice = orderProductParameter.UnitPrice.ToString("0.00");
+ var productAmount = orderProductParameter.ProductAmount;
+ var quantity = orderProductParameter.Quantity;
+ var offerId = orderProductParameter.ProductId;
+ var specId = orderProductParameter.SpectId;
+ var tbSkuId = orderProductParameter.SkuId;
+
+ var skuChooseFreeFreight = orderProductParameter.ChooseFreeFreight;
+
+ var _fm_sm_0_i_ = @$"{{""cartId"":"""",""offerId"":""{offerId}"",""specId"":""{specId}"",""tbSkuId"":""{tbSkuId}"",""hasSkuUmp"":""false"",""quantity"":{quantity},""tradeMode"":""multiStep"",""tradeWay"":""100"",""templateCode"":""assureTrade"",""flow"":""{flow}"",""subflow"":"""",""ext"":""{{\""sceneCode\"":\""\""}}""}}";
+ _fm_sm_0_iList.Add(_fm_sm_0_i_);
+
+ string _fm_sma_cargoKey = @$"{{""group"":""{group}"",""cargoKey"":""{cargoKey}"",""quantity"":{quantity},""unitPrice"":""{unitPrice}"",""offerId"":""{offerId}"",""specId"":""{specId}"",""tbSkuId"":""{tbSkuId}"",""hasSkuUmp"":""false"",""chooseFreeFreight"":{skuChooseFreeFreight},""productAmount"":""{productAmount}"",""discount"":1,""isVirtual"":""0"",""gift"":"""",""cartId"":"""",""promotionId"":""{orderProductParameter.Couple}"",""ext"":""{{\""sceneCode\"":\""\""}}"",""buyerCharge"":false,""marketingScene"":""""}}";
+ _fm_sma_cargoKeyList.Add($"_fm.smar.{cargoKey}.m={UrlEncode(_fm_sma_cargoKey, "gb2312")}");
+
+
+
+
+ }
+ string smarts_m = @$"[{{""group"":""{group}"",""stepNo"":""1"",""templateId"":""30"",""stepName"":""{UrlEncode(stepName, "GB2312")}"",""instantPay"":""0"",""sellerActionName"":"""",""buyerPayTimeout"":""0"",""buyerConfirmTimeout"":""0"",""needSellerAction"":""0"",""transferAfterConfirm"":""0"",""needSellerCallNext"":""0"",""isStepPayAll"":""0"",""agreement"":"""",""needLogistics"":""1"",""percent"":""1.0"",""deliveryPercent"":""1.0"",""payFee"":""{payFee}"",""actualPayFee"":""{actualPayFee}"",""discountFee"":""{discountFee}"",""itemDiscountFee"":""0"",""price"":""0"",""amount"":""1"",""postFee"":""0"",""mergedJsonVar"":""""}}]";
+ smarts_mList.Add(smarts_m);
+
+ string _fm_smart_group_me = @$"{{""group"":""{group}"",""tplCode"":""assureTrade"",""message"":""{remarkMesg}"",""sumCarriage"":""{sumCarriage}"",""totalAmount"":""{actualPay}"",""totalProductAmount"":""{totalProductAmount}"",""chooseFreeFreight"":{chooseFreeFreight},""mixAmount"":"""",""mixNumber"":""1"",""promotionId"":""{shopCouple}"",""umpSysAvailble"":""1"",""toleranceFreight"":""${{model.toleranceCollection.toleranceFreight}}"",""checkCarriage"":1,""filledCarriage"":""0.00"",""isNeedSellerConfirmFlag"":""0"",""lvid"":""{lvid}"",""fundUsageSelected"":""0"",""hasTaosampleCard"":""0"",""anonymousBuyer"":true,""payEntry"":""multiStep"",""bizType"":""{flow}"",""payWay"":""100"",""orderCodFee"":0,""crossPromotionIds"":[],""crossPromotionIdsMap"":{{}},""crossShopPromotions"":[],""terminal"":""pc_browser_null_0.0.0"",""cna"":""{cna}"",""fromkv"":""{fromkv}""}}";
+ _fm_smart_group_meList.Add($"_fm.smart.{group}.me={UrlEncode(_fm_smart_group_me, "GB2312")}");
+
+
+ string _fm_smartin_group_me = @$"{{ ""invoiceFlag"":false,""invoiceType"":0,""invoiceMode"":"""",""streetAddress"":"""",""registerPhone"":"""",""bank"":"""",""accountId"":"""",""companyName"":"""",""localInvoiceId"":""undefined"",""taxpayerIdentifier"":"""",""extParams"":{{ ""email"":""""}},""group"":""{group}""}}";
+
+ _fm_smartin_group_meList.Add($"_fm.smartin.{group}.me={UrlEncode(_fm_smartin_group_me, "GB2312")}&_fm.smartin.{group}.i=false");
+ _fm_sma_group_g_fList.Add($"_fm.sma.{group}.g={group}&_fm.sma.{group}.f={flow}");
+ }
+
+
+
+ var _fm_smarts_0_m = $"[{string.Join(",", smarts_mList)}]";
+
+
+
+ var _fm_sm_0_i = $"[{string.Join(",", _fm_sm_0_iList)}]";
+
+
+ string cargoKeyStr = string.Join("&", _fm_sma_cargoKeyList);
+
+ string _fm_smart_group_meStr = string.Join("&", _fm_smart_group_meList);
+
+ string _fm_smartin_group_meStr = string.Join("&", _fm_smartin_group_meList);
+
+ string _fm_smart_group_g_fStr = string.Join("&", _fm_sma_group_g_fList);
+
+
+
+
+ string url = orderUrl;
+
+ string key = GetRegexValue(orderUrl, "key=(\\d+)");
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+
+ string adress = UrlEncode(addressDetail, "GB2312");//
+ string userName = UrlEncode(personalName, "GB2312");
+ string phoneNumber = UrlEncode(mobileNO, "GB2312");
+
+
+ var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+
+ string postData = $"action=SmartMakeOrderAction&event_submit_execute=Action&fromWhere=confirmOrder&fromType=normal&_fm.smarti._0.me=%7B%7D&_fm.smarti._0.i=false&_csrf_token={_csrf_token}" +
+ $"&_fm.sm._0.f=xxx&_fm.sm._0.i={UrlEncode(_fm_sm_0_i, "GB2312")}&_fm.sm._0.k={key}&_fm.sm._0.a=0&_fm.sm._0.q=&_fm.sm._0.in=&_fm.sm._0.fr=&_fm.sm._0.fro=&_fm.sm._0.s=&_fm.sm._0.se=&_fm.sm._0.p=-1&_fm.sm._0.e=&_fm.sm._0.is=false&_fm.sm._0.null=cart&_fm.sm._0.ex=" +
+ $"&_fm.sm._0.sc=&_fm.smart._PAGE_LEVEL_.me=%7B%22group%22%3A%22_PAGE_LEVEL_%22%7D&{_fm_smart_group_meStr}&{cargoKeyStr}" +
+ $"&{_fm_smart_group_g_fStr}&_fm.smartm._0.m=&_fm.smarta._0.ar={addressCode}&_fm.smarta._0.p={addressCode}&_fm.smarta._0.c={addressCode}&_fm.smarta._0.po={divisionZip}&_fm.smarta._0.ad={adress}&_fm.smarta._0.t=&_fm.smarta._0.to=&_fm.smarta._0.f={userName}" +
+ $"&_fm.smarta._0.ph=&_fm.smarta._0.m={phoneNumber}&_fm.smarta._0.i=false&_fm.smarta._0.is=true&_fm.smarta._0.a=-1&{_fm_smartin_group_meStr}&" +
+ $"_fm.smarts._0.m={_fm_smarts_0_m}&_fm.r._0.w={timestamp}";
+
+ var s = GetOrderId(url, postData, _1688Cookie);
+
+ if (s != null)
+ {
+ AddLog?.Invoke($"下单成功,返回订单号:{s}");
+ return new ApiResponse() { Code = 200, Data = s };
+ }
+ else
+ {
+ AddLog?.Invoke("下单失败");
+ return new ApiResponse() { Code = 1000, Msg = "下单失败" };
+ }
+
+ return new ApiResponse() { Code = 1000, Msg = "下单失败" };
+
+
+ }
+
+ private string GetOrderId(string url, string postData, string cookie)
+ {
+ var response = PostHtml(url, postData, cookie);
+ if (response.IsSuccessStatusCode)
+ {
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ var sss = response.Content.ReadAsStringAsync().Result;
+ if (response.Headers.Contains("Resin-Trace"))
+ {
+ //获取响应头 Resin-Trace的值
+
+ var trace = response.Headers.GetValues("Resin-Trace");
+ if (trace.Any())
+ {
+ var traceValue = trace.FirstOrDefault();
+
+ if (traceValue.Contains("biz_order"))
+ {
+ var biz_order = GetRegexValue(traceValue, "biz_order=(\\d+[,]?\\d+)");//获取下单号
+
+
+ return biz_order;
+
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
+ public HttpResponseMessage PostHtml(string url, string postData, string cookie)
+ {
+ HttpClient client = new HttpClient();
+
+
+ //使用 application/x-www-form-urlencoded post提交
+ client.DefaultRequestHeaders.Add("Cookie", cookie);
+ //postData = "action=SmartMakeOrderAction&event_submit_execute=Action&fromWhere=confirmOrder&fromType=normal&_fm.smarti._0.me=%7B%7D&_fm.smarti._0.i=false&_csrf_token=e107b86e348b5ff07dd1d1e4b0dff58f&_fm.sm._0.f=xxx&_fm.sm._0.i=%5B%7B%22cartId%22%3A%22%22%2C%22offerId%22%3A%22755527819845%22%2C%22specId%22%3A%2248b8df3db448c6bad0e847c317886360%22%2C%22tbSkuId%22%3A%225207346876796%22%2C%22hasSkuUmp%22%3A%22false%22%2C%22quantity%22%3A1%2C%22tradeMode%22%3A%22multiStep%22%2C%22tradeWay%22%3A%22100%22%2C%22templateCode%22%3A%22assureTrade%22%2C%22flow%22%3A%22general%22%2C%22subflow%22%3A%22%22%2C%22ext%22%3A%22%7B%5C%22sceneCode%5C%22%3A%5C%22%5C%22%7D%22%7D%5D&_fm.sm._0.k=171179300009192219&_fm.sm._0.a=0&_fm.sm._0.q=&_fm.sm._0.in=&_fm.sm._0.fr=&_fm.sm._0.fro=&_fm.sm._0.s=&_fm.sm._0.se=&_fm.sm._0.p=-1&_fm.sm._0.e=&_fm.sm._0.is=false&_fm.sm._0.null=detail&_fm.sm._0.ex=&_fm.sm._0.sc=&_fm.smart._PAGE_LEVEL_.me=%7B%22group%22%3A%22_PAGE_LEVEL_%22%7D&_fm.smart.d4d7e431d5b30a44df6a8b2e50a58237.me=%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22tplCode%22%3A%22assureTrade%22%2C%22message%22%3A%22%22%2C%22sumCarriage%22%3A%222.40%22%2C%22totalAmount%22%3A%228.73%22%2C%22totalProductAmount%22%3A%226.33%22%2C%22chooseFreeFreight%22%3A0%2C%22mixAmount%22%3A%22%22%2C%22mixNumber%22%3A%221%22%2C%22promotionId%22%3A%22%22%2C%22umpSysAvailble%22%3A%221%22%2C%22toleranceFreight%22%3A%22%24%7Bmodel.toleranceCollection.toleranceFreight%7D%22%2C%22checkCarriage%22%3A1%2C%22filledCarriage%22%3A%220.00%22%2C%22isNeedSellerConfirmFlag%22%3A%220%22%2C%22lvid%22%3A%2224885bad17117929999545039e%22%2C%22fundUsageSelected%22%3A%220%22%2C%22hasTaosampleCard%22%3A%220%22%2C%22anonymousBuyer%22%3Afalse%2C%22payEntry%22%3A%22multiStep%22%2C%22bizType%22%3A%22general%22%2C%22payWay%22%3A%22100%22%2C%22orderCodFee%22%3A0%2C%22crossPromotionIds%22%3A%5B%5D%2C%22crossPromotionIdsMap%22%3A%7B%7D%2C%22crossShopPromotions%22%3A%5B%5D%2C%22terminal%22%3A%22pc_browser_null_0.0.0%22%2C%22cna%22%3A%224Ha%2FHb9%2B8QEBASQJijR52Awl%22%2C%22fromkv%22%3A%22offerdetail%3Apc%3BipvId%3A213e36ab17117929945421320e75bd%22%7D&_fm.smar.755527819845_48b8df3db448c6bad0e847c317886360.m=%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22cargoKey%22%3A%22755527819845_48b8df3db448c6bad0e847c317886360%22%2C%22quantity%22%3A1%2C%22unitPrice%22%3A%226.33%22%2C%22offerId%22%3A%22755527819845%22%2C%22specId%22%3A%2248b8df3db448c6bad0e847c317886360%22%2C%22tbSkuId%22%3A%225207346876796%22%2C%22hasSkuUmp%22%3A%22false%22%2C%22chooseFreeFreight%22%3A0%2C%22productAmount%22%3A%226.33%22%2C%22discount%22%3A1%2C%22isVirtual%22%3A%220%22%2C%22gift%22%3A%22%22%2C%22cartId%22%3A%22%22%2C%22promotionId%22%3A%22%22%2C%22ext%22%3A%22%7B%5C%22sceneCode%5C%22%3A%5C%22%5C%22%7D%22%2C%22buyerCharge%22%3Afalse%2C%22marketingScene%22%3A%22%22%7D&_fm.sma.d4d7e431d5b30a44df6a8b2e50a58237.g=d4d7e431d5b30a44df6a8b2e50a58237&_fm.sma.d4d7e431d5b30a44df6a8b2e50a58237.f=general&_fm.smartm._0.m=&_fm.smarta._0.ar=350502&_fm.smarta._0.p=350502&_fm.smarta._0.c=350502&_fm.smarta._0.po=362000&_fm.smarta._0.ad=%BD%F0%C1%FA%BD%D6%B5%C0%B9%C5%C1%FA%C2%B7%C3%BD%C8%CB%C7%C52%BA%C5%C8%FD%CE%C4%B9%AB%D4%A2%D2%BB%C2%A5%C6%EB%D4%BD%D6%D0%D7%AA%B2%D6&_fm.smarta._0.t=&_fm.smarta._0.to=&_fm.smarta._0.f=feiyu&_fm.smarta._0.ph=&_fm.smarta._0.m=19959858952&_fm.smarta._0.i=false&_fm.smarta._0.is=true&_fm.smarta._0.a=-1&_fm.smartin.d4d7e431d5b30a44df6a8b2e50a58237.me=%7B%22invoiceFlag%22%3Afalse%2C%22invoiceType%22%3A0%2C%22invoiceMode%22%3A%22%22%2C%22streetAddress%22%3A%22%22%2C%22registerPhone%22%3A%22%22%2C%22bank%22%3A%22%22%2C%22accountId%22%3A%22%22%2C%22companyName%22%3A%22%22%2C%22localInvoiceId%22%3A%22undefined%22%2C%22taxpayerIdentifier%22%3A%22%22%2C%22extParams%22%3A%7B%22email%22%3A%22%22%7D%2C%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%7D&_fm.smartin.d4d7e431d5b30a44df6a8b2e50a58237.i=false&_fm.smarts._0.m=%5B%7B%22group%22%3A%22d4d7e431d5b30a44df6a8b2e50a58237%22%2C%22stepNo%22%3A%221%22%2C%22templateId%22%3A%2230%22%2C%22stepName%22%3A%22%C8%AB%BF%EE%BD%BB%D2%D7%22%2C%22instantPay%22%3A%220%22%2C%22sellerActionName%22%3A%22%22%2C%22buyerPayTimeout%22%3A%220%22%2C%22buyerConfirmTimeout%22%3A%220%22%2C%22needSellerAction%22%3A%220%22%2C%22transferAfterConfirm%22%3A%220%22%2C%22needSellerCallNext%22%3A%220%22%2C%22isStepPayAll%22%3A%220%22%2C%22agreement%22%3A%22%22%2C%22needLogistics%22%3A%221%22%2C%22percent%22%3A%221.0%22%2C%22deliveryPercent%22%3A%221.0%22%2C%22payFee%22%3A%22633%22%2C%22actualPayFee%22%3A%22873%22%2C%22discountFee%22%3A%220%22%2C%22itemDiscountFee%22%3A%220%22%2C%22price%22%3A%220%22%2C%22amount%22%3A%221%22%2C%22postFee%22%3A%220%22%2C%22mergedJsonVar%22%3A%22%22%7D%5D&_fm.r._0.u=140%232w2Dve%2FuzzFMcQo2HiuuFpSanxQgLwMah9FA4xt5yifr2OblcBB8%2FtDVlIZFbEvZcpX14c7HBH%2FAuyTRlaOhIoZWFnLe69cgf%2BoiOnbjo3hqzzn7YQqA3VuzzR8ZiahulFzx2DD3VthqzFrLGXY4U6SxzoObV2EqQG3Y2Ac%2Bx%2BmozFdO2XU%2BobTxzIc7VOg%2FlIXx2Dd6%2F61XrQc12XQzlpg7zPnRVr7uljFo2Aw%2B66G7zFrw2XQ%2B5TjqzWXf3YRLMZ2aMXm";
+
+ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
+ HttpContent content = new StringContent(postData, Encoding.GetEncoding("GB2312"), "application/x-www-form-urlencoded");
+
+ var response = client.PostAsync(url, content).Result;
+ return response;
+ }
+
+ public PrewOrderResponse PrewOrder(List orderProducts, string address, OrderModel orderModel)
+ {
+ var flow = orderModel.ToString(); //下单类型
+ //获取时间戳
+ var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
+ var ipvId = Md5Helper.Md5_32(timestamp.ToString());
+ var productParameter = GetProductParameter(orderProducts, orderModel, ipvId);
+ var _csrf_token = productParameter.Csrf_token;
+ var lvid = productParameter.Lvid;
+ var orderUrl = productParameter.OrderUrl;
+ var adressModel = InputAddress(address, _csrf_token);
+ if (adressModel == null)
+ {
+ return null;
+ }
+ AddLog?.Invoke($"获取地址信息成功,姓名:{adressModel.PersonalName},手机号:{adressModel.MobileNO},地址:{adressModel.AddressDetail},邮编:{adressModel.DivisionZip}");
+
+ var addressCode = adressModel.AddressCode;
+ var addressDetail = adressModel.AddressDetail;
+ var personalName = adressModel.PersonalName;
+ var mobileNO = adressModel.MobileNO;
+ var divisionZip = adressModel.DivisionZip;
+ //刷新地址
+ productParameter = ReflashAdress(productParameter, adressModel, orderModel);
+
+
+
+ return new PrewOrderResponse
+ {
+ AddressModel = adressModel,
+ orderParameter = productParameter,
+ OrderModel = orderModel,
+ ActualPay = productParameter.OrderGroupParameterList.Select(s => s.ActualPay).Sum(),
+ SumCarriage = productParameter.OrderGroupParameterList.Select(s => s.SumCarriage).Sum(),
+ TotalProductAmount = productParameter.OrderGroupParameterList.Select(s => s.TotalProductAmount).Sum()
+ };
+ }
+ }
+}
diff --git a/BBWYB.Server.Business/_1688Helper/Md5Helper.cs b/BBWYB.Server.Business/_1688Helper/Md5Helper.cs
new file mode 100644
index 0000000..474e3e8
--- /dev/null
+++ b/BBWYB.Server.Business/_1688Helper/Md5Helper.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Business._1688Helper
+{
+ public class Md5Helper
+ {
+ //32位小写
+ public static string Md5_32(string str)
+ {
+ string cl = str;
+ string pwd = "";
+ System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();//实例化一个md5对像
+ // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
+ byte[] s = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(cl));
+ // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
+ for (int i = 0; i < s.Length; i++)
+ {
+ //将得到的字符串使用16进制类型格式
+ pwd = pwd + s[i].ToString("X");
+ }
+ return pwd.ToLower();
+ }
+ }
+}
diff --git a/BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs b/BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs
index b64c376..69bd7fe 100644
--- a/BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs
+++ b/BBWYB.Server.Model/Db/MDS/Purchaseaccount.cs
@@ -55,6 +55,11 @@ namespace BBWYB.Server.Model.Db.MDS
[Column(StringLength = 50)]
public string ShopId { get; set; }
- }
+ ///
+ /// 采购密码
+ ///
+ public string Password { get; set; }
+
+ }
}
diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs
index 9867925..ca13702 100644
--- a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/CreateOrderRequest.cs
@@ -22,4 +22,13 @@
///
public long ShopId { get; set; }
}
+ public class WebCreateOrderRequest: CreateOrderRequest
+ {
+ //public string WaitPayOrderId { get; set; }
+
+ ///
+ /// 1688登录的Cookies
+ ///
+ public string LoginCookies { get; set; }
+ }
}
diff --git a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs
index a55aff4..c7d0a5f 100644
--- a/BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/PurchaseOrder/PreviewOrderRequest.cs
@@ -22,4 +22,6 @@ namespace BBWYB.Server.Model.Dto
public List CargoParamGroupList { get; set; }
}
+
+
}
diff --git a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs
index 6b93f0d..4f723e8 100644
--- a/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/Vender/ShopSettingRequest.cs
@@ -34,5 +34,7 @@
/// 采购平台
///
public Enums.Platform PurchasePlatformId { get; set; }
+
+ public string Password { get; set; }
}
}
diff --git a/BBWYB.Server.Model/Dto/_1688/AddressModel.cs b/BBWYB.Server.Model/Dto/_1688/AddressModel.cs
new file mode 100644
index 0000000..8e69e16
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/AddressModel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class AddressModel
+ {
+ public string AddressDetail { get; set; }
+ public string DivisionZip { get; set; }
+ public string MobileNO { get; set; }
+ public string PersonalName { get; set; }
+ public string AddressCode { get; set; }
+ }
+}
diff --git a/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs b/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs
new file mode 100644
index 0000000..9704536
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class OrderParameter
+ {
+ public string Csrf_token { get; set; }
+
+ public string OrderUrl { get; set; }
+
+ public string Lvid { get; set; }
+
+
+ public List OrderGroupParameterList { get; set; }
+ public string Address { get; set; }
+ public string TownCode { get; set; }
+ public string IpvId { get; set; }
+ }
+
+
+ public class OrderGroupParameter
+ {
+ ///
+ /// 优惠券id
+ ///
+ public string PromotionId { get; set; }
+
+ ///
+ /// 1使用优惠券 0不使用优惠券
+ ///
+ public int ChooseFreeFreight { get; set; }
+
+ public decimal SumCarriage { get; set; }
+
+ public decimal DiscountFee { get; set; }
+ public decimal TotalProductAmount { get; set; }
+
+ public decimal ActualPay { get; set; }
+
+ public int PayFee { get; set; }
+
+ public int ActualPayFee { get; set; }
+ public string Group { get; set; }
+
+ public string StepName { get; set; }
+
+ public string OrderOutId { get; set; }
+
+ public string MemberId { get; set; }
+
+ //sellerUserId
+ public string SellerUserId { get; set; }
+
+
+ ////transportType
+ //public string TransportType { get; set; }
+
+ ////tplCode
+ //public string TplCode { get; set; }
+
+ //belong
+ public string Belong { get; set; }
+
+
+ public List OrderProductParameterList { get; set; }
+ }
+
+
+
+ public class OrderProductParameter
+ {
+ public decimal DiscountFee { get; set; }
+
+ public decimal SumCarriage { get; set; }
+ public string ProductId { get; set; }
+
+ public string SkuId { get; set; }
+
+ public string SpectId { get; set; }
+
+
+ public string CargoKey { get; set; }
+
+ public decimal UnitPrice { get; set; }
+
+ public decimal ProductAmount { get; set; }
+ public int Quantity { get; set; }
+ public string FreightId { get; set; }
+
+ //outId
+ public string OutId { get; set; }
+ public string? OfferPriceRangeJson { get; set; }
+
+
+ ///
+ /// 优惠券
+ ///
+ public string Couple { get; set; }
+
+ ///
+ /// 1使用优惠券 0不使用优惠券
+ ///
+ public int ChooseFreeFreight { get; set; }
+ public string Ext { get; set; }
+ }
+}
diff --git a/BBWYB.Server.Model/Dto/_1688/OrderProduct.cs b/BBWYB.Server.Model/Dto/_1688/OrderProduct.cs
new file mode 100644
index 0000000..144ba93
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/OrderProduct.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class OrderProduct
+ {
+ public string ProductId { get; set; }
+
+ public string SkuId { get; set; }
+
+ public string SpectId { get; set; }
+
+ //数量
+ public int Quantity { get; set; }
+
+
+ }
+}
diff --git a/BBWYB.Server.Model/Dto/_1688/PrewOrderResponse.cs b/BBWYB.Server.Model/Dto/_1688/PrewOrderResponse.cs
new file mode 100644
index 0000000..9fc1080
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/PrewOrderResponse.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static BBWYB.Server.Model.Enums;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class PrewOrderResponse
+ {
+ public OrderParameter orderParameter { get; set; }
+
+ public OrderModel OrderModel { get; set; }
+
+ public AddressModel AddressModel { get; set; }
+
+ public decimal TotalProductAmount { get; set; }
+
+ public decimal SumCarriage { get; set; }
+
+ //总订单金额
+ public decimal ActualPay { get; set; }
+
+ }
+}
diff --git a/BBWYB.Server.Model/Dto/_1688/ProductModel.cs b/BBWYB.Server.Model/Dto/_1688/ProductModel.cs
new file mode 100644
index 0000000..81f50fb
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/ProductModel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class ProductModel
+ {
+ public int MixNumber { get; set; }
+
+ public string IpvId { get; set; }
+ }
+}
diff --git a/BBWYB.Server.Model/Dto/_1688/_1688CookieModel.cs b/BBWYB.Server.Model/Dto/_1688/_1688CookieModel.cs
new file mode 100644
index 0000000..73dbd7b
--- /dev/null
+++ b/BBWYB.Server.Model/Dto/_1688/_1688CookieModel.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BBWYB.Server.Model._1688
+{
+ public class _1688CookieModel
+ {
+ public string Cookie { get; set; }
+
+ public string UserName { get; set; }
+
+ public string Password { get; set; }
+
+ public DateTime LoginTime { get; set; }
+
+
+ }
+}
diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs
index 3ef2064..17b222d 100644
--- a/BBWYB.Server.Model/Enums.cs
+++ b/BBWYB.Server.Model/Enums.cs
@@ -381,5 +381,15 @@
本组添加过采购方案 = 11,
本组历史采购过该供应商的商品 = 12
}
+
+ ///
+ /// 下单类型(批发(general)=0,代发(fenxiao=1)
+ ///
+ public enum OrderModel
+ {
+ general = 0,//批发
+ fenxiao = 1//代发
+
+ }
}
}
From 949ee57654f157ae7d96e4bbbbfa2942cbcab37a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A3=9E=E9=B1=BC?= <506583276@qq.com>
Date: Tue, 9 Apr 2024 09:21:34 +0800
Subject: [PATCH 4/9] 1
---
BBWYB.Client/BBWYB.Client.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/BBWYB.Client/BBWYB.Client.csproj b/BBWYB.Client/BBWYB.Client.csproj
index 77215bc..b246e1a 100644
--- a/BBWYB.Client/BBWYB.Client.csproj
+++ b/BBWYB.Client/BBWYB.Client.csproj
@@ -37,7 +37,7 @@
-
+
From e025adb9df2698c9a815cdf0f36d3d4139f5c00a Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Tue, 9 Apr 2024 13:51:57 +0800
Subject: [PATCH 5/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=8D=E6=AC=A1?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=87=E6=B3=A8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
BBWYB.Server.API/Controllers/OrderController.cs | 4 +---
BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs | 2 +-
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs
index 8a3b6a6..3ad0b07 100644
--- a/BBWYB.Server.API/Controllers/OrderController.cs
+++ b/BBWYB.Server.API/Controllers/OrderController.cs
@@ -147,9 +147,7 @@ namespace BBWYB.Server.API.Controllers
/// 齐库推送sku配置状态
///
///
- [HttpPost]
- [AllowAnonymous]
- public void QikuPublishOrderSkuPackConfigState([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
+ [Ht([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
{
orderBusiness.QikuPublishOrderSkuPackConfigState(request);
}
diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
index a980dce..a230c5e 100644
--- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
+++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
@@ -318,7 +318,7 @@ namespace BBWYB.Server.Business
//SkuId = waitCheckOrderSku.SkuId,
TaskType = Enums.TimeLimitTaskType.待议价任务,
TaskId = spuOptimizationTask.Id,
- Remark = "首次采购限时任务"
+ Remark = $"{reason}限时任务"
});
}
#endregion
From 6e9be9714b49405ea7a5b06abc942ee95da67b47 Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Tue, 9 Apr 2024 13:54:15 +0800
Subject: [PATCH 6/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=9B=E5=BA=94?=
=?UTF-8?q?=E5=95=86=E5=8D=A0=E7=94=A8=E6=8F=90=E7=A4=BA=E8=AF=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../PurchaseScheme/PurchaseSchemeBusiness.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
index 76daa53..6b2aebd 100644
--- a/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
@@ -369,8 +369,10 @@ namespace BBWYB.Server.Business
});
var noCurrentBargainTeamList = dbPurchaserList.Where(dp => !string.IsNullOrEmpty(dp.BelongBargainTeamId) &&
dp.BelongBargainTeamId != uInfo.bargainTeam.Id).ToList();
+ //if (noCurrentBargainTeamList.Count() > 0)
+ // throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]");
if (noCurrentBargainTeamList.Count() > 0)
- throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]");
+ throw new BusinessException($"该商品的供应商,已归属其他议价组.保存失败~!\r\n{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}");
}
#endregion
From 6051c7478ddf8f127eefeac826b07be32eecda0c Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Tue, 9 Apr 2024 13:56:05 +0800
Subject: [PATCH 7/9] 1
---
BBWYB.Server.API/Controllers/OrderController.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/BBWYB.Server.API/Controllers/OrderController.cs b/BBWYB.Server.API/Controllers/OrderController.cs
index 3ad0b07..8a3b6a6 100644
--- a/BBWYB.Server.API/Controllers/OrderController.cs
+++ b/BBWYB.Server.API/Controllers/OrderController.cs
@@ -147,7 +147,9 @@ namespace BBWYB.Server.API.Controllers
/// 齐库推送sku配置状态
///
///
- [Ht([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
+ [HttpPost]
+ [AllowAnonymous]
+ public void QikuPublishOrderSkuPackConfigState([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
{
orderBusiness.QikuPublishOrderSkuPackConfigState(request);
}
From 18c991b04f0f9c555e93b935359d75fc31bbf22f Mon Sep 17 00:00:00 2001
From: shanj <18996038927@163.com>
Date: Tue, 9 Apr 2024 14:24:06 +0800
Subject: [PATCH 8/9] 10043
---
BBWYB.Client/App.xaml.cs | 5 ++-
BBWYB.Client/GlobalContext.cs | 2 +-
BBWYB.Client/ViewModels/WebVM.cs | 58 ++++++++++++++++++++------------
BBWYB.Client/Views/Web.xaml.cs | 8 ++---
4 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs
index 5c620b5..ecd8de4 100644
--- a/BBWYB.Client/App.xaml.cs
+++ b/BBWYB.Client/App.xaml.cs
@@ -37,7 +37,10 @@ namespace BBWYB.Client
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNTM1MzMwMzI4ODkyMTQ5NzYwIiwidGVhbUlkIjoiMTUxNjk3NDI1MDU0MjUwMTg4OCIsInNvblRlYW1JZHMiOiIxNDM2Mjg4NTAwMjM1MjQzNTIwIiwiZXhwIjoxNzI2MzAwNjY0fQ.hPSbgJEuTt0MLy_7YkSJX4rRG3drJAfso-5IS8ZlOkY";
//议价2组
- userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNzYwOTcxNjg4OTY0NTI2MDgwIiwiZXhwIjoxNzQyNjMwODk0fQ.Vtq2MU1Qd9Oo192udkA01ZAwiQgQxj2m-pkayGZ1d3I";
+ //userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMzk1NzA4MjA4NjU1MzcyMjg4IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNzYwOTcxNjg4OTY0NTI2MDgwIiwiZXhwIjoxNzQyNjMwODk0fQ.Vtq2MU1Qd9Oo192udkA01ZAwiQgQxj2m-pkayGZ1d3I";
+
+ //齐越艾伦
+ userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjg2MTk4MzQzMjcwNjY2MjQwIiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNDU4NzAxNzE4MjI0MTEzNjY0LDE2MjAzNDIwMTQ3MDY5Nzg4MTYiLCJleHAiOjE3NDQxNzg3NjR9.lPHkPwG7inb_08T8aFDnPlSv7EKkWx7Jzp9R56DsAO4";
//拳探店铺 陈默
//userToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNjI0OTUxNjgzNTc2NTAwMjI0IiwidGVhbUlkIjoiMTYyMDM0MjAxNDcwNjk3ODgxNiIsInNvblRlYW1JZHMiOiIxNjIwMzQyMDE0NzA2OTc4ODE2LDE2MjAzNDM4Mjc0NzI1ODQ3MDQsMTYyMDM0NDAzMzczNTg3MjUxMiwxNjIwMzQ0MDkyODI5NDIxNTY4LDE2MjAzNDQxNDA4NTAwMDgwNjQiLCJleHAiOjE3MjA3NjQzMjV9.Q8fiKXCHgvzbm7NDEre-MeoSju_AmC6Ae6eDY22rUAw";
diff --git a/BBWYB.Client/GlobalContext.cs b/BBWYB.Client/GlobalContext.cs
index 2395bbb..5b4e14b 100644
--- a/BBWYB.Client/GlobalContext.cs
+++ b/BBWYB.Client/GlobalContext.cs
@@ -27,7 +27,7 @@ namespace BBWYB.Client
{
public GlobalContext()
{
- BBWYBApiVersion = "10042";
+ BBWYBApiVersion = "10043";
}
public List<_1688CookieModel> _1688CookieList { get; set; } = new List<_1688CookieModel>();
diff --git a/BBWYB.Client/ViewModels/WebVM.cs b/BBWYB.Client/ViewModels/WebVM.cs
index a6eeee8..77e0706 100644
--- a/BBWYB.Client/ViewModels/WebVM.cs
+++ b/BBWYB.Client/ViewModels/WebVM.cs
@@ -51,29 +51,43 @@ namespace BBWYB.Client.ViewModels
IList departmentList = null;
+ var response = mdsApiService.GetShopDetailList();
+ if (!response.Success)
+ throw new Exception(response.Msg);
+ departmentList = response.Data.Where(d => d.Name.Contains("供应链")).ToList();
+
+
+ var res = shopService.GetDepartmentList();
+ if (!res.Success)
+ throw new Exception(res.Msg);
+ var allDepartmentList = res.Data.Map>();
+ var shopList = new List();
+ foreach (var d in allDepartmentList)
+ shopList.AddRange(d.ShopList);
+ GlobalContext.User.ShopList = shopList;
+
+ //if (managerDepartment.Contains(GlobalContext.User.TeamName) ||
+ // managerDepartment.Any(m => GlobalContext.User.SonDepartmentNames.Contains(m)))
+ //{
+ // var res = shopService.GetDepartmentList();
+ // if (!res.Success)
+ // throw new Exception(res.Msg);
+ // var allDepartmentList = res.Data.Map>();
- if (managerDepartment.Contains(GlobalContext.User.TeamName) ||
- managerDepartment.Any(m => GlobalContext.User.SonDepartmentNames.Contains(m)))
- {
- var res = shopService.GetDepartmentList();
- if (!res.Success)
- throw new Exception(res.Msg);
- var allDepartmentList = res.Data.Map>();
-
-
- var shopList = new List();
- foreach (var d in allDepartmentList)
- shopList.AddRange(d.ShopList);
- GlobalContext.User.ShopList = shopList;
- departmentList = allDepartmentList.Where(d => d.Name.Contains("供应链")).ToList();
- }
- else
- {
- var response = mdsApiService.GetShopDetailList();
- if (!response.Success)
- throw new Exception(response.Msg);
- departmentList = response.Data.Where(d => d.Name.Contains("供应链")).ToList();
- }
+
+ // var shopList = new List();
+ // foreach (var d in allDepartmentList)
+ // shopList.AddRange(d.ShopList);
+ // GlobalContext.User.ShopList = shopList;
+ // departmentList = allDepartmentList.Where(d => d.Name.Contains("供应链")).ToList();
+ //}
+ //else
+ //{
+ // var response = mdsApiService.GetShopDetailList();
+ // if (!response.Success)
+ // throw new Exception(response.Msg);
+ // departmentList = response.Data.Where(d => d.Name.Contains("供应链")).ToList();
+ //}
if (departmentList.Count == 0)
throw new Exception("缺少有效的部门数据");
diff --git a/BBWYB.Client/Views/Web.xaml.cs b/BBWYB.Client/Views/Web.xaml.cs
index de7075e..3fac9b6 100644
--- a/BBWYB.Client/Views/Web.xaml.cs
+++ b/BBWYB.Client/Views/Web.xaml.cs
@@ -52,10 +52,10 @@ namespace BBWYB.Client.Views
private void initWebView()
{
#if DEBUG
- //var url = "http://qtbbwy.qiyue666.com";
- //var registerName = "webContext";
- var url = "http://192.168.1.2:8080";
- var registerName = "webTestContext";//webTestContext
+ var url = "http://qtbbwy.qiyue666.com";
+ var registerName = "webContext";
+ //var url = "http://192.168.1.2:8080";
+ //var registerName = "webTestContext";//webTestContext
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com";
From 29f6c9d28a7088edca3432e42edfc3fd78c89221 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A3=9E=E9=B1=BC?= <506583276@qq.com>
Date: Tue, 9 Apr 2024 19:43:06 +0800
Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D1688=E4=B8=8B=E5=8D=95=20?=
=?UTF-8?q?=E6=94=B6=E8=B4=A7=E4=BA=BA=E5=8C=B9=E9=85=8D=E5=A4=B1=E8=B4=A5?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
BBWYB.Client/App.xaml.cs | 2 ++
.../PurchaseOrder/PurchaseOrderBusiness.cs | 4 +--
.../_1688Helper/Collect1688Helper.cs | 27 ++++++++++++-------
.../Dto/_1688/OrderParameter.cs | 1 +
4 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/BBWYB.Client/App.xaml.cs b/BBWYB.Client/App.xaml.cs
index 5c620b5..c69e395 100644
--- a/BBWYB.Client/App.xaml.cs
+++ b/BBWYB.Client/App.xaml.cs
@@ -89,6 +89,8 @@ namespace BBWYB.Client
ServiceProvider = serviceCollection.BuildServiceProvider();
+ gl.Login1688("齐越供应链1号", "jiayou123", true);
+
base.OnStartup(e);
}
diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
index da64734..ac504a4 100644
--- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
@@ -3513,13 +3513,13 @@ namespace BBWYB.Server.Business
Collect1688Helper collect1688Helper = new Collect1688Helper(cookies);
- var adress = request.Consignee.ContactName + " " + request.Consignee.Mobile + " " + request.Consignee.Province + request.Consignee.City + request.Consignee.Town + request.Consignee.Address;
+ var adress = request.Consignee.Province + request.Consignee.City + request.Consignee.Town + request.Consignee.Address;
var orderModel = (Model.Enums.OrderModel)request.PurchaseOrderMode;
- var prewOrder = collect1688Helper.PrewOrder(orderProductParamList.ToList(), adress, orderModel);
+ var prewOrder = collect1688Helper.PrewOrder(orderProductParamList.ToList(), adress, orderModel, request.Consignee.Mobile, request.Consignee.ContactName);
if (prewOrder == null)
{
throw new BusinessException($"登录失效,正在重新登陆,登录后点击下单!");
diff --git a/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs b/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs
index 38c44c6..338b9f9 100644
--- a/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs
+++ b/BBWYB.Server.Business/_1688Helper/Collect1688Helper.cs
@@ -266,7 +266,11 @@ namespace BBWYB.Server.Business._1688Helper
//'ext':'{\"detailOrderBizAttributes\":{\"b_cargo_from\":\"offerdetail:pc;ipvId:2150462317125683404374580e106c\"}}',
var ext = GetRegexValue(data_source, "'ext':'([^']+)'")?.Replace("\\"","\"");
-
+
+ ////'mixAmount':'100'
+
+ var mixAmount = decimal.Parse(GetRegexValue(data_source, "'mixAmount':'([^']+)'"));
+
//'offerId':'563883060952',
var offerId = GetRegexValue(data_source, "'offerId':'([^']+)'");
@@ -298,7 +302,8 @@ namespace BBWYB.Server.Business._1688Helper
FreightId = freightId,
OutId = outId,
OfferPriceRangeJson = offerPriceRangeJson,
- Ext = ext
+ Ext = ext,
+ MixAmount = mixAmount
});
}
@@ -410,6 +415,7 @@ namespace BBWYB.Server.Business._1688Helper
List orderList = new List();
foreach (var orderProduct in orderGroup.OrderProductParameterList)
{
+
string freightId = orderProduct.FreightId;
string order = $@"{{""offerId"":""{orderProduct.ProductId}"",""skuId"":""{orderProduct.SpectId}"",""tbSkuId"":""{orderProduct.SkuId}"",""hasSkuUmp"":""false"",""outId"":""{orderProduct.OutId}"",""quantity"":{orderProduct.Quantity},""isfreefreight"":0,""marketingScene"":"""",""offerPriceRangeJson"":[{orderProduct.OfferPriceRangeJson}],""unitPrice"":""{orderProduct.UnitPrice}"",""bundle"":"""",""couple"":"""",""freightId"":""{freightId}"",""rebate"":0,""buyerBearServiceFee"":false,""gift"":""0""}}";
orderList.Add(order);
@@ -738,23 +744,25 @@ namespace BBWYB.Server.Business._1688Helper
foreach (var OrderGroupParameter in productParameter.OrderGroupParameterList)
{
+ //'mixAmount':'100'
var group = OrderGroupParameter.Group;
var discountFee = OrderGroupParameter.DiscountFee;
- var sumCarriage = OrderGroupParameter.SumCarriage;
+ var sumCarriage = OrderGroupParameter.SumCarriage.ToString("0.00");
var stepName = OrderGroupParameter.StepName;
var totalProductAmount = OrderGroupParameter.TotalProductAmount.ToString("0.00");
- var actualPay = OrderGroupParameter.ActualPay;
+ var actualPay = OrderGroupParameter.ActualPay.ToString("0.00");
var actualPayFee = OrderGroupParameter.ActualPayFee;
var payFee = OrderGroupParameter.PayFee;
var shopCouple = OrderGroupParameter.PromotionId;
var chooseFreeFreight = OrderGroupParameter.ChooseFreeFreight;
+
foreach (var orderProductParameter in OrderGroupParameter.OrderProductParameterList)
{
var cargoKey = orderProductParameter.CargoKey;
var unitPrice = orderProductParameter.UnitPrice.ToString("0.00");
- var productAmount = orderProductParameter.ProductAmount;
+ var productAmount = orderProductParameter.ProductAmount.ToString("0.00");
var quantity = orderProductParameter.Quantity;
var offerId = orderProductParameter.ProductId;
var specId = orderProductParameter.SpectId;
@@ -772,10 +780,11 @@ namespace BBWYB.Server.Business._1688Helper
}
+ string mixAmount = "100";
string smarts_m = @$"[{{""group"":""{group}"",""stepNo"":""1"",""templateId"":""30"",""stepName"":""{UrlEncode(stepName, "GB2312")}"",""instantPay"":""0"",""sellerActionName"":"""",""buyerPayTimeout"":""0"",""buyerConfirmTimeout"":""0"",""needSellerAction"":""0"",""transferAfterConfirm"":""0"",""needSellerCallNext"":""0"",""isStepPayAll"":""0"",""agreement"":"""",""needLogistics"":""1"",""percent"":""1.0"",""deliveryPercent"":""1.0"",""payFee"":""{payFee}"",""actualPayFee"":""{actualPayFee}"",""discountFee"":""{discountFee}"",""itemDiscountFee"":""0"",""price"":""0"",""amount"":""1"",""postFee"":""0"",""mergedJsonVar"":""""}}]";
smarts_mList.Add(smarts_m);
- string _fm_smart_group_me = @$"{{""group"":""{group}"",""tplCode"":""assureTrade"",""message"":""{remarkMesg}"",""sumCarriage"":""{sumCarriage}"",""totalAmount"":""{actualPay}"",""totalProductAmount"":""{totalProductAmount}"",""chooseFreeFreight"":{chooseFreeFreight},""mixAmount"":"""",""mixNumber"":""1"",""promotionId"":""{shopCouple}"",""umpSysAvailble"":""1"",""toleranceFreight"":""${{model.toleranceCollection.toleranceFreight}}"",""checkCarriage"":1,""filledCarriage"":""0.00"",""isNeedSellerConfirmFlag"":""0"",""lvid"":""{lvid}"",""fundUsageSelected"":""0"",""hasTaosampleCard"":""0"",""anonymousBuyer"":true,""payEntry"":""multiStep"",""bizType"":""{flow}"",""payWay"":""100"",""orderCodFee"":0,""crossPromotionIds"":[],""crossPromotionIdsMap"":{{}},""crossShopPromotions"":[],""terminal"":""pc_browser_null_0.0.0"",""cna"":""{cna}"",""fromkv"":""{fromkv}""}}";
+ string _fm_smart_group_me = @$"{{""group"":""{group}"",""tplCode"":""assureTrade"",""message"":""{remarkMesg}"",""sumCarriage"":""{sumCarriage}"",""totalAmount"":""{actualPay}"",""totalProductAmount"":""{totalProductAmount}"",""chooseFreeFreight"":{chooseFreeFreight},""mixAmount"":""{mixAmount}"",""mixNumber"":""1"",""promotionId"":""{shopCouple}"",""umpSysAvailble"":""1"",""toleranceFreight"":""${{model.toleranceCollection.toleranceFreight}}"",""checkCarriage"":1,""filledCarriage"":""0.00"",""isNeedSellerConfirmFlag"":""0"",""lvid"":""{lvid}"",""fundUsageSelected"":""0"",""hasTaosampleCard"":""0"",""anonymousBuyer"":true,""payEntry"":""multiStep"",""bizType"":""{flow}"",""payWay"":""100"",""orderCodFee"":0,""crossPromotionIds"":[],""crossPromotionIdsMap"":{{}},""crossShopPromotions"":[],""terminal"":""pc_browser_null_0.0.0"",""cna"":""{cna}"",""fromkv"":""{fromkv}""}}";
_fm_smart_group_meList.Add($"_fm.smart.{group}.me={UrlEncode(_fm_smart_group_me, "GB2312")}");
@@ -889,7 +898,7 @@ namespace BBWYB.Server.Business._1688Helper
return response;
}
- public PrewOrderResponse PrewOrder(List orderProducts, string address, OrderModel orderModel)
+ public PrewOrderResponse PrewOrder(List orderProducts, string address, OrderModel orderModel,string phoneNumber,string UserName)
{
var flow = orderModel.ToString(); //下单类型
//获取时间戳
@@ -908,8 +917,8 @@ namespace BBWYB.Server.Business._1688Helper
var addressCode = adressModel.AddressCode;
var addressDetail = adressModel.AddressDetail;
- var personalName = adressModel.PersonalName;
- var mobileNO = adressModel.MobileNO;
+ adressModel.PersonalName = UserName;
+ adressModel.MobileNO= phoneNumber;
var divisionZip = adressModel.DivisionZip;
//刷新地址
productParameter = ReflashAdress(productParameter, adressModel, orderModel);
diff --git a/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs b/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs
index 9704536..6ae7c80 100644
--- a/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs
+++ b/BBWYB.Server.Model/Dto/_1688/OrderParameter.cs
@@ -106,5 +106,6 @@ namespace BBWYB.Server.Model._1688
///
public int ChooseFreeFreight { get; set; }
public string Ext { get; set; }
+ public decimal MixAmount { get; set; }
}
}