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

347 lines
15 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Script.Serialization;
using NetLibrary.OnlineTrade;
using NPOI.HSSF.Model;
using TradeManage;
using NetLibrary.Log;
using System.Security.Policy;
using Aspose.Pdf.Operators;
namespace TradeManageNew
{
/// <summary>
/// 由于192.168.1.16服务器的.net framework4.5版本不支持发送TSL1.3版本request请求所以借192.168.1.187:8866服务器跳转一下
/// </summary>
public class SheinNew
{
public string IP = "http://192.168.1.187:8866";
public string ShopName { get; set; }
public int ShopId { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public DateTime StartTime { get; set; }
JavaScriptSerializer JsonConvert = null;
public SheinNew()
{
JsonConvert = new JavaScriptSerializer();
}
public List<OrderModel> GetOrders(out string errorMessage)
{
var orderModels = new List<OrderModel>();
try
{
if (string.IsNullOrEmpty(AppKey) || string.IsNullOrEmpty(AppSecret))
{
errorMessage = "店铺未授权";
return null;
}
int pageIndex = 1;
int pageCount = 1;
while (pageIndex <= pageCount)
{
var orders = GetSheinOrder(pageIndex, out pageCount, out errorMessage);
if (!string.IsNullOrEmpty(errorMessage))
throw new Exception(errorMessage);
if (orders != null)
{
var orderIds = orders.Select(r => r.orderNo).ToList();
var orderDetails = GetSheinOrderDetail(orderIds);
var orderAddrs = GetSheinOrderBuyerAddress(orderIds);
ErrorFollow.TraceWrite("自动导入Shein订单", " orderDetails:" + JsonConvert.Serialize(orderDetails), " orderAddrs" + JsonConvert.Serialize(orderAddrs));
foreach (var order in orders)
{
//if (order.orderNo != "GSUNJ020M00NV4G")
//{
// continue;
//}
var detail = orderDetails == null ? null : orderDetails.Where(r => r.orderNo == order.orderNo).FirstOrDefault();
var addr = orderAddrs == null ? null : orderAddrs.Where(r => r.orderNo == order.orderNo).FirstOrDefault();
if (detail != null)
{
if (order.orderStatus != "6") //订单状态6为订单中所有商品已退款这种订单不导入
{
var rmodel = ToOrderModel(detail, addr);
ErrorFollow.TraceWrite("自动导入Shein订单rmodel信息", " ", "rmodel" + JsonConvert.Serialize(rmodel));
if (rmodel != null)
orderModels.Add(rmodel);
}
}
}
}
pageIndex++;
}
errorMessage = "";
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("自动导入Shein订单总错", " ", "错误信息:" + ex.Message);
errorMessage = ex.Message;
}
return orderModels;
}
/// <summary>
/// 获取订单列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageCount"></param>
/// <param name="errorMessage"></param>
/// <returns></returns>
public List<SheinOrderListModel> GetSheinOrder(int pageIndex, out int pageCount, out string errorMessage)
{
var rmodel = new List<SheinOrderListModel>();
try
{
string url = IP + "/api/SheinAPi/getSheinOrderList?keyid=" + AppKey + "&secret=" + AppSecret + "&sDate=" + StartTime.Date.ToString("yyyy-MM-dd HH:mm:ss") + "&eDate=" + StartTime.AddDays(2).Date.ToString("yyyy-MM-dd HH:mm:ss") + "&page=" + pageIndex;
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// ErrorFollow.TraceWrite("自动导入Shein订单列表", " URL:"+url, " 返回信息:" + responseContent);
// var obj = JsonConvert.Deserialize<SheinOrderListApiModel>(responseContent);
// if (obj != null && obj.code == "0" && obj.info != null)
// {
// pageCount = (obj.info.count % 30 == 0) ? (obj.info.count / 30) : (obj.info.count / 30 + 1);
// errorMessage = "";
// rmodel = obj.info.orderList;
// }
// else
// {
// rmodel = null;
// pageCount = 0;
// errorMessage="同步Shein订单出错"+responseContent.ToString();
// }
//}
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 设置编码为 UTF-8
string responseContent = client.DownloadString(url);
ErrorFollow.TraceWrite("自动导入Shein订单列表", " URL:" + url, " 返回信息:" + responseContent);
var obj = JsonConvert.Deserialize<SheinOrderListApiModel>(responseContent);
if (obj != null && obj.code == "0" && obj.info != null)
{
pageCount = (obj.info.count % 30 == 0) ? (obj.info.count / 30) : (obj.info.count / 30 + 1);
errorMessage = "";
rmodel = obj.info.orderList;
}
else
{
rmodel = null;
pageCount = 0;
errorMessage = "同步Shein订单出错" + responseContent.ToString();
}
}
}
catch (Exception ex)
{
pageCount = 0;
rmodel = null;
errorMessage = "同步Shein订单出错:" + ex.Message;
}
return rmodel;
}
/// <summary>
/// 获取订单详情信息
/// </summary>
/// <param name="orderIds"></param>
/// <returns></returns>
public List<SheinOrderDetailApiInfoModel> GetSheinOrderDetail(List<string> orderIds)
{
var _orderIds = JsonConvert.Serialize(orderIds);
var rmodel = new List<SheinOrderDetailApiInfoModel>();
string url = IP + "/api/SheinAPi/getSheinOrderDetailList?keyid=" + AppKey + "&secret=" + AppSecret + "&orderIds=" + _orderIds;
try
{
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// ErrorFollow.TraceWrite("自动导入Shein订单详情", " URL:" + url, " 返回信息:" + responseContent);
// var detailObj = JsonConvert.Deserialize<SheinOrderDetailApiModel>(responseContent);
// rmodel = detailObj.info;
//}
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 设置编码为 UTF-8
string responseContent = client.DownloadString(url);
ErrorFollow.TraceWrite("自动导入Shein订单详情", " URL:" + url, " 返回信息:" + responseContent);
var detailObj = JsonConvert.Deserialize<SheinOrderDetailApiModel>(responseContent);
rmodel = detailObj.info;
}
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("自动导入Shein订单详情出错", " " , " 错误信息:" + ex.Message);
rmodel = null;
}
return rmodel;
}
/// <summary>
/// 获取订单收件人地址信息
/// </summary>
/// <param name="orderIds"></param>
/// <returns></returns>
public List<SheinOrderExportAddressInfoReceiveMsg> GetSheinOrderBuyerAddress(List<string> orderIds)
{
var rmodel = new List<SheinOrderExportAddressInfoReceiveMsg>();
foreach (var orderId in orderIds)
{
string url = IP + "/api/SheinAPi/getSheinOrderBuyerAddress?keyid=" + AppKey + "&secret=" + AppSecret + "&orderId=" + orderId;
try
{
//using (HttpClient client = new HttpClient())
//{
// HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
// var response = client.SendAsync(request);
// string responseContent = response.Result.Content.ReadAsStringAsync().GetAwaiter().GetResult();
// ErrorFollow.TraceWrite("自动导入Shein订单地址", " URL:" + url, " 返回信息:" + responseContent);
// var obj = JsonConvert.Deserialize<SheinOrderExportAddressApiModel>(responseContent);
// if (obj != null && obj.info != null && obj.info.receiveMsgList != null)
// {
// rmodel.Add(obj.info.receiveMsgList.FirstOrDefault());
// }
//}
using (WebClient client = new WebClient())
{
client.Encoding = Encoding.UTF8; // 设置编码为 UTF-8
string responseContent = client.DownloadString(url);
ErrorFollow.TraceWrite("自动导入Shein订单地址", " URL:" + url, " 返回信息:" + responseContent);
var obj = JsonConvert.Deserialize<SheinOrderExportAddressApiModel>(responseContent);
if (obj != null && obj.info != null && obj.info.receiveMsgList != null)
{
rmodel.Add(obj.info.receiveMsgList.FirstOrDefault());
}
}
}
catch (Exception ex)
{
ErrorFollow.TraceWrite("自动导入Shein订单地址出错", " ", " 错误信息:" + ex.Message);
continue;
}
}
return rmodel;
}
public OrderModel ToOrderModel(SheinOrderDetailApiInfoModel detail, SheinOrderExportAddressInfoReceiveMsg addr)
{
OrderModel rmodel = new OrderModel();
try
{
rmodel.OrderCode = detail.orderNo;
rmodel.PlatOrderCode = detail.orderNo;
if (ShopId == 95)//Shein半托管店铺的价格
{
rmodel.TotalPrice = detail.estimatedGrossIncome;
}
else
{
rmodel.TotalPrice = detail.productTotalPrice - detail.storeDiscountTotalPrice - detail.promotionDiscountTotalPrice - detail.totalCommission;
}
rmodel.MoneyCode = detail.orderCurrency;
rmodel.OrderDate = detail.orderTime;
rmodel.OrderState = 1;
if (addr != null)
{
rmodel.BuyerName = addr.firstName + " " + (string.IsNullOrEmpty(addr.middleName) ? "" : addr.middleName + "") + addr.lastName;
rmodel.BuyerCountry = addr.country;
rmodel.BuyerAddr = addr.address;
rmodel.BuyerPhone = addr.phone;
rmodel.BuyerZip = addr.postCode;
//rmodel.BuyerProvince=addr.province;
var proviceCode = DataNew.GetProvinceCode(addr.province);
rmodel.BuyerProvince = string.IsNullOrEmpty(proviceCode) ? addr.province : proviceCode;
rmodel.BuyerCity = addr.city;
rmodel.BuyerArea = addr.district;
}
if (detail.paymentTime != null)
rmodel.PayDate = detail.paymentTime;
else
rmodel.PayDate = rmodel.OrderDate;
rmodel.OutOrderDate = DateTime.Now.AddDays(7);
if (rmodel.OrderDate != null && rmodel.OrderDate.Value <= Convert.ToDateTime("1753-01-01"))
{
rmodel.OrderDate = DateTime.Now;
}
if (rmodel.PayDate != null && rmodel.PayDate.Value <= Convert.ToDateTime("1753-01-01"))
{
rmodel.PayDate = DateTime.Now;
}
if (rmodel.OutOrderDate != null && rmodel.OutOrderDate.Value <= Convert.ToDateTime("1753-01-01"))
{
rmodel.OutOrderDate = DateTime.Now.AddDays(7);
}
if (detail.packageWaybillList != null && detail.packageWaybillList.Count > 0)
rmodel.PostInfo = detail.packageWaybillList[0].carrier;
rmodel.ListModel = new List<OrderDetailModel>();
if (detail.orderGoodsInfoList != null && detail.orderGoodsInfoList.Count > 0)
{
foreach (var item2 in detail.orderGoodsInfoList)
{
OrderDetailModel model2 = new OrderDetailModel();
//model2.TypeDesc = item2.newGoodsStatus.ToString();
model2.OrderItemId = item2.goodsId.ToString();
model2.GoodsNum = 1;
model2.GoodsName = item2.goodsTitle;
model2.GoodsSKU = item2.sellerSku;
rmodel.ListModel.Add(model2);
}
}
}
catch (Exception ex)
{
rmodel = null;
ErrorFollow.TraceWrite("自动导入Shein订单ToOrderModel出错", " ", " 错误信息:" + ex.Message);
}
return rmodel;
}
}
}