using _29WxOrderWpf.BaseWindows; using WxOrder.Framework.Commons; using AllBase; using AllBase.Helper; using AllBase.Model.DBModel; using AllBase.Model.MvvmBaseClasses; using AllBase.Model.Result; using NaiBa.Util.Extension; using Newtonsoft.Json.Linq; using NPOI.HSSF.Record; using Org.BouncyCastle.Crypto.Paddings; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Work; using Work.BaseForms; using Work.SearchSame; using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; namespace _29WxOrderWpf.ViewModels; public class BuyMapSkuViewModel : PropertyNotifyObject { public static BuyMapSkuViewModel BuyMapSkuInstance { get; set; } /// /// 请求关闭窗口 /// public event Action RequestClose; private volatile bool _isWindowLoaded = false; public oms_wei_order_item_info OrderItem { get { return this.GetValue(x => x.OrderItem); } set { this.SetValue(x => x.OrderItem, value); } } public ObservableCollection BuyMapSkus { get { return this.GetValue(x => x.BuyMapSkus); } set { this.SetValue(x => x.BuyMapSkus, value); } } public ObservableCollection FrontSkuInfos { get { return this.GetValue(x => x.FrontSkuInfos); } set { this.SetValue(x => x.FrontSkuInfos, value); } } public string ShopGoodsName { get { return this.GetValue(x => x.ShopGoodsName); } set { this.SetValue(x => x.ShopGoodsName, value); } } public string ShopSkuName { get { return this.GetValue(x => x.ShopSkuName); } set { this.SetValue(x => x.ShopSkuName, value); } } public string ShopSkuPrice { get { return this.GetValue(x => x.ShopSkuPrice); } set { this.SetValue(x => x.ShopSkuPrice, value); } } //pddFrontGoods3Lite public BuyMapSkuViewModel(oms_wei_order_item_info orderItem) { if (BuyMapSkuInstance != null) BuyMapSkuInstance.RequestClose.Invoke(); BuyMapSkuInstance = this; OrderItem = orderItem; if (orderItem != null) { this.ShopGoodsName = orderItem.title; this.ShopSkuName = orderItem.SkuAttrStr; this.ShopSkuPrice = (orderItem.real_price * 0.01m).ParseToString(); } if (GlobalConfig.CurrentBuyPlatform == "pdd") { if (orderItem?.PddBuyMapSkus != null && orderItem?.PddBuyMapSkus.Count > 0) { BuyMapSkus = new ObservableCollection(orderItem.PddBuyMapSkus); SetCurrentFrontSkuInfo3(BuyMapSkus?.FirstOrDefault()); } } else if (GlobalConfig.CurrentBuyPlatform == "tb") { if (orderItem?.TbBuyMapSkus != null && orderItem?.TbBuyMapSkus.Count > 0) { BuyMapSkus = new ObservableCollection(orderItem.TbBuyMapSkus); SetCurrentFrontSkuInfo3(BuyMapSkus?.FirstOrDefault()); } } } public void SetCurrentFrontSkuInfo3(WXBuyMapSkusInfo skuInfo) { foreach (var info in BuyMapSkus) { info.IsChecked = false; } skuInfo.IsChecked = true; FrontSkuInfos = new ObservableCollection(skuInfo?.pdd_front_goods3_Lite.skus); // 把名称给附上 foreach (var sku in FrontSkuInfos) { sku.GoodsNameStr = skuInfo?.pdd_front_goods3_Lite.goodsName; } } /// /// 窗口加载完成时调用 /// public void Start() { _isWindowLoaded = true; Task.Run(() => { // todo get skus }); } /// /// 窗口关闭时调用,停止后台任务 /// public void Stop() { _isWindowLoaded = false; } public async Task SetOrderMapSku(frontSkuInfo3 upSku) { WXBuyMapSkusInfo mapSkuProd = null; if (GlobalConfig.CurrentBuyPlatform == "pdd") mapSkuProd = OrderItem.PddBuyMapSkus.FirstOrDefault(s => s.map_goods_id == upSku.goodsId.ParseToString()); if (GlobalConfig.CurrentBuyPlatform == "tb") mapSkuProd = OrderItem.TbBuyMapSkus.FirstOrDefault(s => s.map_goods_id == upSku.goodsId.ParseToString()); if (mapSkuProd == null) return; var mapSku = mapSkuProd.pdd_front_goods3_Lite.skus.FirstOrDefault(s => string.Join(",", s.specs.Select(sp => sp.spec_value)) == upSku.SpecNameStr); if (mapSku == null) return; var mapGoodsName = mapSkuProd.map_goods_name; var mapSkuName = string.Join(",", mapSku.specs.Select(sp => sp.spec_value)); var mapGoodsId = mapSkuProd.map_goods_id; var mapSkuId = mapSku.skuId.ParseToString(); var sendProvince = mapSkuProd.map_send_address; var platform = mapSkuProd.platform; string cmbTransitWarehouse = ""; string txtBuyTransitWarehouse = ""; var transitWarehouse = TransitWarehouseData.TransitWarehouseList.FirstOrDefault(t => t.TransId == mapSkuProd.transit_warehouse_id); if (transitWarehouse != null) { cmbTransitWarehouse = transitWarehouse?.TransName + " " + transitWarehouse?.TransFullAddress; txtBuyTransitWarehouse = transitWarehouse?.TransFullAddress; } var spuCode = OrderItem.out_product_id.IsNullOrEmpty() ? OrderItem.product_id : OrderItem.out_product_id; var skuCode = OrderItem.out_sku_id.IsNullOrEmpty() ? OrderItem.SkuAttrStr : OrderItem.out_sku_id; if (spuCode.IsNullOrEmpty()) spuCode = OrderItem.product_id; if (await SaveSkuMap(spuCode, skuCode, mapGoodsName, mapSkuName, mapGoodsId, mapSkuId, transitWarehouse, sendProvince, platform)) RequestClose?.Invoke(); } public async Task SaveSkuMap(string spuCode, string skuCode, string mapGoodsName, string mapSkuName, string mapGoodsId, string mapSkuId, TransitWarehouseParam transitWarehouse, string sendProvince, string platform) { if (transitWarehouse == null) { BaseMsgForm.ShowError("仓库不能为空"); return false; } string url; string upSpuCode = spuCode; string upSkuCode = skuCode; var data = UserLogin.GetSignaturex() + "&spu_code=" + GetHtml.UrlEncodeUtf8(upSpuCode) + "&sku_code=" + GetHtml.UrlEncodeUtf8(upSkuCode) + "&main_user_name=" + BaseClass.MainUserName + "&map_goods_name=" + mapGoodsName + "&map_spec_name=" + mapSkuName + "&map_goods_id=" + mapGoodsId + "&map_sku_id=" + mapSkuId + "&map_send_address=" + sendProvince + "&transit_warehouse_id=" + transitWarehouse?.TransId; data += "&platform=" + platform; url = BaseClass.Build29WxObjString("order/wx_add_mdy_buy_prod_map"); var result = await GetHtml.PostUtf8Async(url, data); if (!result.Contains("\"code\":200")) result = await GetHtml.PostUtf8Async(url, data); if (!result.Contains("\"code\":200")) { BaseMsgForm.ShowError("保存失败" + BaseRegex.GetStringJson(ref result, "msg") + ",请稍后重试"); return false; } else { var urlMap = BaseClass.Build29WxObjString("order/wx_get_buy_prod_map"); var dataMap = UserLogin.GetSignaturex() + "&spu_codes=" + upSpuCode; //dataMap += "&sku_codes=" + upSkuCode; dataMap += "&main_user_name=" + BaseClass.MainUserName; var resultMap = await GetHtml.PostUtf8Async(urlMap, dataMap); if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200")) resultMap = await GetHtml.PostUtf8Async(urlMap, dataMap); if (string.IsNullOrEmpty(resultMap) || !resultMap.Contains("\"code\":200")) { } else { List buyMapList = new List(); try { buyMapList = JsonHelper.DeserializeJsonToList(JObject.Parse(resultMap)["data"].ParseToString()); GlobalConfig.BuyMapList.RemoveAll(b => buyMapList.Any(map => b.spu_code == map.spu_code && b.sku_code == map.sku_code)); GlobalConfig.BuyMapList.AddRange(buyMapList); } catch { } var map = buyMapList.FirstOrDefault(b => b.spu_code == upSpuCode && b.sku_code == upSkuCode); if (map != null) { foreach (var order in GlobalConfig.lstOrder) { if (order.IsWaitBuy) { foreach (var item in order.orderItems) { if ((item.out_product_id == map.spu_code && item.out_sku_id == map.sku_code) || (item.out_product_id == map.spu_code && item.SkuAttrStr == map.sku_code) || (item.product_id == map.spu_code && item.out_sku_id == map.sku_code) || (item.product_id == map.spu_code && item.SkuAttrStr == map.sku_code)) { item.PddBuyMap = map; item.SetOrderItemTextProperty(); // todo 此处刷新一条可能不够 MainWindow.Instance.orderListCtrl.FilterOneOrder(order, false); } } } } } } BaseMsgWindow.ShowInfo("保存成功!"); return true; } } }