Files

262 lines
8.3 KiB
C#

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; }
/// <summary>
/// 请求关闭窗口
/// </summary>
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<WXBuyMapSkusInfo> BuyMapSkus
{
get { return this.GetValue(x => x.BuyMapSkus); }
set { this.SetValue(x => x.BuyMapSkus, value); }
}
public ObservableCollection<frontSkuInfo3> 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<WXBuyMapSkusInfo>(orderItem.PddBuyMapSkus);
SetCurrentFrontSkuInfo3(BuyMapSkus?.FirstOrDefault());
}
}
else if (GlobalConfig.CurrentBuyPlatform == "tb")
{
if (orderItem?.TbBuyMapSkus != null && orderItem?.TbBuyMapSkus.Count > 0)
{
BuyMapSkus = new ObservableCollection<WXBuyMapSkusInfo>(orderItem.TbBuyMapSkus);
SetCurrentFrontSkuInfo3(BuyMapSkus?.FirstOrDefault());
}
}
}
public void SetCurrentFrontSkuInfo3(WXBuyMapSkusInfo skuInfo)
{
foreach (var info in BuyMapSkus)
{
info.IsChecked = false;
}
skuInfo.IsChecked = true;
FrontSkuInfos = new ObservableCollection<frontSkuInfo3>(skuInfo?.pdd_front_goods3_Lite.skus);
// 把名称给附上
foreach (var sku in FrontSkuInfos)
{
sku.GoodsNameStr = skuInfo?.pdd_front_goods3_Lite.goodsName;
}
}
/// <summary>
/// 窗口加载完成时调用
/// </summary>
public void Start()
{
_isWindowLoaded = true;
Task.Run(() =>
{
// todo get skus
});
}
/// <summary>
/// 窗口关闭时调用,停止后台任务
/// </summary>
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<bool> 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<WXBuyMapInfo> buyMapList = new List<WXBuyMapInfo>();
try
{
buyMapList = JsonHelper.DeserializeJsonToList<WXBuyMapInfo>(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;
}
}
}