步步为盈
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.

166 lines
8.3 KiB

2 years ago
using BBWY.Common.Http;
using BBWY.Common.Models;
using BBWY.Server.Model;
using BBWY.Server.Model.Dto;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
2 years ago
using System.Net.Http;
using System.Threading.Tasks;
using Yitter.IdGenerator;
using System.Linq;
using BBWY.Server.Model.Db;
2 years ago
namespace BBWY.Server.Business.Sync
{
public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency
{
public JDServiceOrderSyncBusiness(RestApiService restApiService, IOptions<GlobalConfig> options, NLogManager nLogManager, IFreeSql fsql, IIdGenerator idGenerator, TaskSchedulerManager taskSchedulerManager, VenderBusiness venderBusiness, YunDingBusiness yunDingBusiness) : base(restApiService, options, nLogManager, fsql, idGenerator, taskSchedulerManager, venderBusiness, yunDingBusiness)
{
}
public void SyncAllShopServiceOrder()
{
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
//SyncAfterOrder(shopList.FirstOrDefault(s => s.ShopName == "布莱特玩具专营店"), string.Empty, isAuto: true);
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => SyncServiceOrder(shop, string.Empty, isAuto: true),
System.Threading.CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.SyncAfterOrderTaskScheduler);
}
}
private void SyncServiceOrder(ShopResponse shop, JArray jArray)
{
}
private void SyncServiceOrder(ShopResponse shop, string orderId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false)
{
/*
:
: 10001
: 10002
: 10012
: 10005
: 10011
: 10004
: 10009
: 10010
:
: 10007
:7060
:7023
线:7090
: 13000
*/
try
{
var shopId = long.Parse(shop.ShopId);
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
var serviceStatusList = new List<int>() { 10005, 10011, 10010 };
#region
var request = new QueryServiceOrderRequest()
2 years ago
{
UpdateTimeBegin = startTime ?? DateTime.Now.Date.AddHours(-1),
2 years ago
UpdateTimeEnd = endTime ?? DateTime.Now,
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = shop.PlatformId,
SaveResponseLog = true,
OrderId = orderId,
VenderId = shop.VenderId
};
2 years ago
List<JToken> jtokenList = new List<JToken>();
foreach (var serviceStatus in serviceStatusList)
{
request.ServiceStatus = serviceStatus;
var serviceOrderListApiResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderList", request, GetYunDingRequestHeader(), HttpMethod.Post);
if (serviceOrderListApiResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取服务单失败 {serviceOrderListApiResult.Content}");
var serviceOrderListResponse = JsonConvert.DeserializeObject<ApiResponse<JArray>>(serviceOrderListApiResult.Content);
if (!serviceOrderListResponse.Success)
throw new Exception($"获取服务单失败 {serviceOrderListResponse.Msg}");
jtokenList.AddRange(serviceOrderListResponse.Data);
}
#endregion
2 years ago
var serviceIdList = jtokenList.Select(j => j.Value<string>("serviceId")).ToList();
2 years ago
var dbServiceOrderList = fsql.Select<ServiceOrder>().Where(s => s.ShopId == shop.ShopId && serviceIdList.Contains(s.ServiceId)).ToList();
var dbServiceIdList = dbServiceOrderList.Select(s => s.ServiceId).ToList();
var exceptServiceIdList = serviceIdList.Except(dbServiceIdList);
2 years ago
var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value<string>("serviceId"))).Select(j => j.Value<string>("orderId")).ToList();
2 years ago
var dbOrderSkuList = fsql.Select<OrderSku, Order>().InnerJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => osku.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId))
.ToList((osku, o) => new
{
Id = osku.Id,
ProductId = osku.ProductId,
SkuId = osku.SkuId,
OrderId = osku.OrderId,
ItemTotal = osku.ItemTotal,
StorageType = o.StorageType
});
2 years ago
foreach (var serviceOrderJToken in jtokenList)
{
var serviceId = serviceOrderJToken.Value<string>("serviceId");
var dbServiceOrder = dbServiceOrderList.FirstOrDefault(s => s.ServiceId == serviceId);
if (dbServiceOrder == null)
{
var serviceOrderId = serviceOrderJToken.Value<string>("orderId");
var skuId = serviceOrderJToken.Value<string>("skuId");
var dbOsku = dbOrderSkuList.FirstOrDefault(osku => osku.OrderId == serviceOrderId && osku.SkuId == skuId);
if (dbOsku == null)
continue;
2 years ago
var isNeedSubscribeKuaiDi100 = false;
if (dbOsku.StorageType == Enums.StorageType.)
isNeedSubscribeKuaiDi100 = true;
else
{
//检查退货城市是否为泉州
}
dbServiceOrder = new ServiceOrder()
{
Id = idGenerator.NewLong(),
ServiceId = serviceId,
OrderId = serviceOrderId,
ShopId = shop.ShopId,
ProductId = dbOsku.ProductId,
SkuItemCount = dbOsku.ItemTotal,
Status = serviceOrderJToken.Value<int>("sserviceOrderJToken"),
CreateTime = DateTime.Now,
SkuId = skuId,
StatusUpdateTime = serviceOrderJToken.Value<DateTime>("updateTime"),
IsSubscribeKuaiDi100 = false,
2 years ago
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100,
WaybillNo = string.Empty,
ExpressName = string.Empty,
ApplyTime = serviceOrderJToken.Value<DateTime>("applyTime")
};
}
}
2 years ago
//SyncServiceOrder(shop, serviceOrderListResponse.Data);
}
catch (Exception ex)
{
var shopData = JsonConvert.SerializeObject(shop);
nLogManager.Default().Error(ex, $"SyncServiceOrder ShopData:{shopData}");
}
}
}
}