You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

481 lines
17 KiB

using BBWYB.Client.APIServices;
using BBWYB.Client.Helpers;
using BBWYB.Client.Models;
using BBWYB.Client.Models._1688;
using BBWYB.Client.Views;
using BBWYB.Client.Views._1688;
using BBWYB.Client.Views.PackPurchaseTaska;
using BBWYB.Common.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
namespace BBWYB.Client
{
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class GlobalContext : ObservableObject
{
public GlobalContext()
{
BBWYBApiVersion = "10043";
}
public List<_1688CookieModel> _1688CookieList { get; set; } = new List<_1688CookieModel>();
private User user;
public User User { get => user; set { SetProperty(ref user, value); } }
public string UserToken { get; set; }
public IList<LogisticsResponse> LogisticsResponseList { get; set; }
/// <summary>
/// JD客户端
/// </summary>
//public IJdClient JdClient { get; set; }
#region APIHost
public string BBWYApiHost { get; set; }
public string MDSApiHost { get; set; }
public string BBWYCApiHost { get; set; }
public string QKApiHost { get; set; }
public string BBWYBApiVersion { get; set; }
public Window CurryWindow { get; set; }
#endregion
#region Web
public string GetUserString()
{
return JsonConvert.SerializeObject(User);
}
public string GetClientApiVersion()
{
return BBWYBApiVersion;
}
public void CallALiWangWang(string sellerLoginId)
{
var url = $"aliim:sendmsg?siteid=cnalichn&portalId=&gid=&itemsId=&touid=cnalichn{sellerLoginId}&status=1";
try
{
//Process.Start("explorer.exe", url);
ShellExecuteHelper.ShellExecute(IntPtr.Zero, "open", url, string.Empty, string.Empty, ShellExecuteHelper.ShowCommands.SW_SHOWNORMAL);
}
catch (Exception ex)
{
try
{
Clipboard.SetText(url);
}
catch { }
MessageBox.Show($"{ex.Message}\r\n唤醒旺旺失败,唤醒链接已复制到剪切板,请手动打开浏览器唤醒", "提示");
}
}
/// <summary>
/// 对web版提供的修改打包任务方法
/// </summary>
/// <param name="belongSkuId">订单sku归属的来源sku(JD)</param>
/// <param name="orderId">订单Id</param>
/// <param name="skuLogo">sku图片</param>
/// <param name="skuTitle">sku标题</param>
/// <param name="originShopName">订单来源店铺名称</param>
public void OpenUpdatePurchaseTask(string belongSkuId, string orderId, string skuLogo, string skuTitle, string originShopName)
{
var app = App.Current as App;
var sp = app.ServiceProvider;
PackPurchaseTaskService packPurchaseTaskService = null;
using (var s = sp.CreateScope())
{
packPurchaseTaskService = s.ServiceProvider.GetRequiredService<PackPurchaseTaskService>();
}
var orderSku = new OrderSku()
{
OrderId = orderId,
BelongSkuId = belongSkuId,
Title = skuTitle,
Logo = skuLogo,
};
var res = packPurchaseTaskService.GetOrderTask(orderSku.BelongSkuId, orderSku.OrderId);
if (res == null || !res.Success)
{
MessageBox.Show("网络异常!查不到任务");
return;
}
if (res.Data == null)
{
MessageBox.Show("打包任务,不存在或已被删除,请重新发起任务!");
return;
}
UpdatePurchaseTaskWindow packTask = new(res.Data, originShopName, orderSku);
if (!packTask.IsClosed)
packTask.Show();
//
}
/// <summary>
///
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="IsNeedLogin">是否必须登陆</param>
/// <returns></returns>
public async Task<string> Login1688_(string userName, string password, bool IsNeedLogin)
{
return await Task.Factory.StartNew<string>(() =>
{
if (!IsNeedLogin)
{
if (_1688CookieList.Any(c => c.UserName == userName))
{
return _1688CookieList.FirstOrDefault(c => c.UserName == userName).Cookie;
}
}
string cookie = string.Empty;
try
{
//检查是否跨线程
if (!App.Current.Dispatcher.CheckAccess())
{
App.Current.Dispatcher.Invoke(new Action(() =>
{
var loginWindow = new Login1688Window(userName, password);
loginWindow.ShowDialog();
var newCookie = loginWindow.downCookies;
if (!string.IsNullOrEmpty(newCookie))
//更新或者添加
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
oldCookie.Cookie = newCookie;
}
else
{
_1688CookieList.Add(new _1688CookieModel() { UserName = userName, Cookie = newCookie });
}
cookie = loginWindow.downCookies;
}));
}
}
catch (Exception ex)
{
}
return cookie;
});
}
/// <summary>
///
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="IsNeedLogin">是否必须登陆</param>
/// <returns></returns>
public async Task<string> Login1688123(string userName, string password, bool IsNeedLogin)
{
return await Task.Factory.StartNew<string>(() =>
{
if (!IsNeedLogin)
{
if (_1688CookieList.Any(c => c.UserName == userName))
{
return _1688CookieList.FirstOrDefault(c => c.UserName == userName).Cookie;
}
}
string cookie = string.Empty;
try
{
//检查是否跨线程
if (!App.Current.Dispatcher.CheckAccess())
{
App.Current.Dispatcher.Invoke(new Action(() =>
{
var loginWindow = new NewLogin1688Window(userName, password);
loginWindow.ShowDialog();
var newCookie = loginWindow.downCookies;
//更新或者添加
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
oldCookie.Cookie = newCookie;
}
else
{
_1688CookieList.Add(new _1688CookieModel() { UserName = userName, Cookie = newCookie });
}
cookie = loginWindow.downCookies;
}));
}
//else
//{
// var loginWindow = new NewLogin1688Window(userName, password);
// loginWindow.ShowDialog();
// var newCookie = loginWindow.downCookies;
// //更新或者添加
// if (_1688CookieList.Any(c => c.UserName == userName))
// {
// var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
// oldCookie.Cookie = newCookie;
// }
// else
// {
// _1688CookieList.Add(new _1688CookieModel() { UserName = userName, Cookie = newCookie });
// }
// cookie = loginWindow.downCookies;
//}
}
catch (Exception ex)
{
}
return cookie;
});
}
/// <summary>
/// 客户端登陆 不获取cookie
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <param name="IsNeedLogin">是否必须登陆</param>
/// <returns></returns>
public string Login1688(string userName, string password, bool IsNeedLogin)
{
if (!IsNeedLogin)
{
if (_1688CookieList.Any(c => c.UserName == userName&&!c.IsExpire))
{
return JsonConvert.SerializeObject(_1688CookieList.FirstOrDefault(c => c.UserName == userName));
}
}
Task.Factory.StartNew(() =>
{
try
{
//检查是否跨线程
if (!App.Current.Dispatcher.CheckAccess())
{
App.Current.Dispatcher.Invoke(new Action(() =>
{
var loginWindow = new NewLogin1688Window(userName, password);
loginWindow.ShowDialog();
var newCookie = loginWindow.downCookies;
if (!string.IsNullOrEmpty(newCookie))
//更新或者添加
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
oldCookie.Cookie = newCookie;
}
else
{
_1688CookieList.Add(new _1688CookieModel() { UserName = userName, Cookie = newCookie, Password = password, LoginTime = DateTime.Now });
}
//SaveLocalFile?.Invoke(_1688LogunPath, JsonConvert.SerializeObject(_1688CookieList));
}));
}
//else
//{
// var loginWindow = new NewLogin1688Window(userName, password);
// loginWindow.ShowDialog();
// var newCookie = loginWindow.downCookies;
// //更新或者添加
// if (_1688CookieList.Any(c => c.UserName == userName))
// {
// var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
// oldCookie.Cookie = newCookie;
// }
// else
// {
// _1688CookieList.Add(new _1688CookieModel() { UserName = userName, Cookie = newCookie });
// }
// cookie = loginWindow.downCookies;
//}
}
catch (Exception ex)
{
}
});
return null;
}
//public Action<string ,string> SaveLocalFile { get; set; }
//public const string _1688LogunPath = "1688LoginCookies";
public void SetCookieExpire(string userName)
{
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
oldCookie.IsExpire = true;
//SaveLocalFile?.Invoke(_1688LogunPath, JsonConvert.SerializeObject(_1688CookieList));
}
}
/*
public string CreatePurchaseOrderByWeb(string orderProductListJson, string adress, int _orderModel, string remark, string userName, string password)
{
OrderModel orderModel = (OrderModel)_orderModel;
List<OrderProduct> models = JsonConvert.DeserializeObject<List<OrderProduct>>(orderProductListJson);
List<OrderProduct> distinModels = new List<OrderProduct>();
//合并相同的sku商品 叠加数量
foreach (var item in models)
{
//判断是否存在
if (distinModels.Any(m => m.SkuId == item.SkuId && m.SpectId == item.SpectId && m.ProductId == item.ProductId))
{
var oldModel = distinModels.FirstOrDefault(m => m.SkuId == item.SkuId);
oldModel.Quantity += item.Quantity;
}
else
{
distinModels.Add(item);
}
}
models = distinModels;
string cookie = "";
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
cookie = oldCookie.Cookie;
}
else
{
Login1688(userName, password, true);
return JsonConvert.SerializeObject(new ApiResponse<string>
{
Code = 1000,
Msg = "登录失效,请重新登陆后下单",
});
}
Collect1688Helper collect1688Helper = new Collect1688Helper(cookie);
var prewOrder = collect1688Helper.PrewOrder(models, adress, orderModel);
if (prewOrder == null)
{
Login1688(userName, password, true);
return JsonConvert.SerializeObject(new ApiResponse<string>
{
Code = 1000,
Msg = "登录失效,正在重新登陆,登录后点击下单!",
});
}
return JsonConvert.SerializeObject(collect1688Helper.CommitOrder(prewOrder, remark));
}
public async Task<string> CreatePurchaseOrderByWeb_olf(string orderProductListJson, string adress, int _orderModel, string remark, string userName, string password)
{
OrderModel orderModel = (OrderModel)_orderModel;
List<OrderProduct> models = JsonConvert.DeserializeObject<List<OrderProduct>>(orderProductListJson);
string cookie = "";
if (_1688CookieList.Any(c => c.UserName == userName))
{
var oldCookie = _1688CookieList.FirstOrDefault(c => c.UserName == userName);
cookie = oldCookie.Cookie;
}
else
{
Login1688(userName, password, true);
return JsonConvert.SerializeObject(new ApiResponse<string>
{
Code = 1000,
Msg = "登录失效,请重新登陆后下单",
});
}
return await Task.Factory.StartNew<string>(() =>
{
Collect1688Helper collect1688Helper = new Collect1688Helper(cookie);
var prewOrder = collect1688Helper.PrewOrder(models, adress, orderModel);
if (prewOrder == null)
{
return JsonConvert.SerializeObject(new ApiResponse<string>
{
Code = 1000,
Msg = "预览订单失败,登录失效",
});
}
return JsonConvert.SerializeObject(collect1688Helper.CommitOrder(prewOrder, remark));
});
}
*/
#endregion
}
}