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#

2 months ago
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;
}
}
}