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

593 lines
32 KiB

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;
using System.Net.Http;
using System.Threading.Tasks;
using Yitter.IdGenerator;
using System.Linq;
using BBWY.Server.Model.Db;
using FreeSql;
using BBWY.Common.Extensions;
namespace BBWY.Server.Business.Sync
{
public class JDServiceOrderSyncBusiness : BaseSyncBusiness, IDenpendency
{
private IList<LogisticsCompanyRelationship> jd_kd100_logisticsCompanyDictionary;
private IList<int> kuaiDi100PushStateList_zaitu;
private IList<int> kuaiDi100PushStateList_lanshou;
private IList<int> kuaiDi100PushStateList_qianshou;
private IList<int> kuaiDi100PushStateList_paijian;
private Dictionary<int, Enums.ServiceResult> processResultDic;
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)
{
/*
yuantong 圆通速递
yunda 韵达快递
zhongtong 中通快递
shentong 申通快递
jtexpress 极兔速递
youzhengguonei 邮政快递包裹
shunfeng 顺丰速运
ems EMS
jd 京东物流
youzhengbk 邮政标准快递
fengwang 丰网速运
debangkuaidi 德邦快递
debangwuliu 德邦
zhongtongkuaiyun 中通快运
danniao 丹鸟
subida 速必达
lianhaowuliu 联昊通
yundakuaiyun 韵达快运
annengwuliu 安能快运
kuayue 跨越速运
jingdongkuaiyun 京东快运
huitongkuaidi 百世快递
*/
kuaiDi100PushStateList_zaitu = new List<int>() { 0, 1001, 1002, 1003 };
kuaiDi100PushStateList_lanshou = new List<int>() { 1, 101, 102, 103 };
kuaiDi100PushStateList_qianshou = new List<int>() { 3, 301, 302, 303, 304 };
kuaiDi100PushStateList_paijian = new List<int>() { 5, 501 };
jd_kd100_logisticsCompanyDictionary = new List<LogisticsCompanyRelationship>()
{
new LogisticsCompanyRelationship(){ SourceName="圆通速递",TargetName="圆通速递",TargetCode="yuantong"},
new LogisticsCompanyRelationship(){ SourceName="圆通快递",TargetName="圆通速递",TargetCode="yuantong"},
new LogisticsCompanyRelationship(){ SourceName="韵达快递",TargetName="韵达快递",TargetCode="yunda"},
new LogisticsCompanyRelationship(){ SourceName="韵达快运",TargetName="韵达快运",TargetCode="yundakuaiyun"},
new LogisticsCompanyRelationship(){ SourceName="中通快递",TargetName="中通快递",TargetCode="zhongtong"},
new LogisticsCompanyRelationship(){ SourceName="中通速递",TargetName="中通快递",TargetCode="zhongtong"},
new LogisticsCompanyRelationship(){ SourceName="中通快运",TargetName="中通快运",TargetCode="zhongtongkuaiyun"},
new LogisticsCompanyRelationship(){ SourceName="极兔速递",TargetName="极兔速递",TargetCode="jtexpress"},
new LogisticsCompanyRelationship(){ SourceName="极兔快递",TargetName="极兔速递",TargetCode="jtexpress"},
new LogisticsCompanyRelationship(){ SourceName="邮政快递包裹",TargetName="邮政快递包裹",TargetCode="youzhengguonei"},
new LogisticsCompanyRelationship(){ SourceName="顺丰速运",TargetName="顺丰速运",TargetCode="shunfeng"},
new LogisticsCompanyRelationship(){ SourceName="顺丰快递",TargetName="顺丰速运",TargetCode="shunfeng"},
new LogisticsCompanyRelationship(){ SourceName="EMS",TargetName="EMS",TargetCode="ems"},
new LogisticsCompanyRelationship(){ SourceName="京东物流",TargetName="京东物流",TargetCode="jd"},
new LogisticsCompanyRelationship(){ SourceName="京东快递",TargetName="京东快运",TargetCode="jingdongkuaiyun"},
new LogisticsCompanyRelationship(){ SourceName="德邦快递",TargetName="德邦快递",TargetCode="debangkuaidi"},
new LogisticsCompanyRelationship(){ SourceName="德邦",TargetName="德邦",TargetCode="debangwuliu"},
new LogisticsCompanyRelationship(){ SourceName="丹鸟",TargetName="丹鸟",TargetCode="danniao"},
new LogisticsCompanyRelationship(){ SourceName="其他-丹鸟KD",TargetName="丹鸟",TargetCode="danniao"},
new LogisticsCompanyRelationship(){ SourceName="百世快递",TargetName="百世快递",TargetCode="huitongkuaidi"},
new LogisticsCompanyRelationship(){ SourceName="百世快运",TargetName="百世快递",TargetCode="huitongkuaidi"},
};
processResultDic = new Dictionary<int, Enums.ServiceResult>()
{
{ 23,Enums.ServiceResult.},
{ 40,Enums.ServiceResult.退},
{ 60,Enums.ServiceResult.},
{ 90,Enums.ServiceResult.线},
{ 110,Enums.ServiceResult.}
};
}
public void SyncServiceOrder()
{
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.SyncServiceOrderTaskScheduler);
}
}
public void SyncServiceOrder(long shopId, string serviceId)
{
var shopList = venderBusiness.GetShopList(shopId);
Task.Factory.StartNew(() => SyncServiceOrder(shopList[0], serviceId, isAuto: true),
System.Threading.CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.SyncServiceOrderTaskScheduler);
}
private void SyncServiceOrder(ShopResponse shop, long shopId, IList<JToken> jtokenList, string relayAPIHost, string appKey, string appSecret, string token)
{
var serviceIdList = jtokenList.Select(j => j.Value<string>("serviceId")).ToList();
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);
var apiOrderIdList = jtokenList.Where(j => exceptServiceIdList.Contains(j.Value<string>("serviceId"))).Select(j => j.Value<string>("orderId")).ToList();
var dbOrderSkuList = fsql.Select<OrderSku, Order, OrderCostDetail, PurchaseOrder>()
.InnerJoin((osku, o, ocd, po) => osku.OrderId == o.Id)
.LeftJoin((osku, o, ocd, po) => osku.OrderId == ocd.OrderId && osku.SkuId == ocd.SkuId)
.LeftJoin((osku, o, ocd, po) => ocd.PurchaseOrderPKId == po.Id)
.Where((osku, o, ocd, po) => o.ShopId == shopId && apiOrderIdList.Contains(osku.OrderId) && osku.Price != 0)
.ToList((osku, o, ocd, po) => new
{
osku.Id,
osku.ProductId,
osku.SkuId,
osku.OrderId,
osku.ItemTotal,
o.StorageType,
po.PurchasePlatform,
po.PurchaseMethod,
po.PurchaseOrderId,
ocd.PurchaseOrderPKId
});
List<ServiceOrder> insertServiceOrderList = new List<ServiceOrder>();
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
foreach (var serviceOrderJToken in jtokenList)
{
var serviceId = serviceOrderJToken.Value<string>("serviceId");
var status = (Enums.ServiceOrderState)serviceOrderJToken.Value<int>("serviceStatus");
var statusUpdateTime = serviceOrderJToken.Value<long>("updateTime").StampToDateTime();
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;
var isNeedSubscribeKuaiDi100 = false;
var isTuiHuoCang = false;
Enums.ServiceResult? serviceResult = null;
#region 待收货服务单,检查是否需要订阅快递100
if (status == Enums.ServiceOrderState.)
{
try
{
var serviceOrderDetailResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderDetail", new QueryServiceOrderDetailRequest()
{
AppKey = appKey,
AppSecret = appSecret,
AppToken = token,
OrderId = serviceOrderId,
ServiceId = serviceId,
Platform = Enums.Platform.,
VenderId = shop.VenderId
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (serviceOrderDetailResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResult.Content}");
var serviceOrderDetailResponse = JsonConvert.DeserializeObject<ApiResponse<JToken>>(serviceOrderDetailResult.Content);
if (!serviceOrderDetailResponse.Success)
throw new Exception($"获取服务单详情失败 {serviceOrderDetailResponse.Msg}");
var processResult = serviceOrderDetailResponse.Data.Value<int>("processResult");
if (processResultDic.ContainsKey(processResult))
serviceResult = processResultDic[processResult];
//检查退货城市是否为泉州鲤城区
isNeedSubscribeKuaiDi100 = (serviceOrderDetailResponse.Data["afsContactInfo"]?.Value<int>("cityCode") ?? 0) == 1332 &&
(serviceOrderDetailResponse.Data["afsContactInfo"]?.Value<int>("countyCode") ?? 0) == 42930;
isTuiHuoCang = isNeedSubscribeKuaiDi100;
}
catch { }
if (dbOsku.StorageType == Enums.StorageType.)
isNeedSubscribeKuaiDi100 = true;
}
#endregion
dbServiceOrder = new ServiceOrder()
{
Id = idGenerator.NewLong(),
ServiceId = serviceId,
OrderId = serviceOrderId,
ShopId = shop.ShopId,
ProductId = dbOsku.ProductId,
SkuItemCount = dbOsku.ItemTotal,
Status = status,
CreateTime = DateTime.Now,
SkuId = skuId,
StatusUpdateTime = statusUpdateTime,
IsSubscribeKuaiDi100 = false,
IsNeedSubscribeKuaiDi100 = isNeedSubscribeKuaiDi100,
ApplyTime = serviceOrderJToken.Value<long>("applyTime").StampToDateTime(),
ServiceResult = serviceResult,
PurchaseMethod = dbOsku.PurchaseMethod,
PurchasePlatform = dbOsku.PurchasePlatform,
PurchaseOrderId = dbOsku.PurchaseOrderId,
PurchaseOrderPKId = dbOsku.PurchaseOrderPKId
};
if (isTuiHuoCang)
dbServiceOrder.ReturnDirection = 0;
insertServiceOrderList.Add(dbServiceOrder);
}
else if (dbServiceOrder.Status != status)
{
var update = fsql.Update<ServiceOrder>(dbServiceOrder.Id).Set(s => s.Status, status)
.Set(s => s.StatusUpdateTime, statusUpdateTime);
updateServiceOrderList.Add(update);
}
}
fsql.Transaction(() =>
{
if (insertServiceOrderList.Count() > 0)
fsql.Insert(insertServiceOrderList).ExecuteAffrows();
if (updateServiceOrderList.Count() > 0)
foreach (var update in updateServiceOrderList)
update.ExecuteAffrows();
});
}
private void SyncServiceOrder(ShopResponse shop, string serviceId, DateTime? startTime = null, DateTime? endTime = null, bool isAuto = false)
{
/*
审核阶段:
待审核: 10001
待用户反馈: 10002
用户已反馈: 10012
【待收货: 10005】
【取消: 10011】
审核关闭: 10004
待用户确认: 10009
【完成: 10010】
处理阶段:
已收货,待处理 : 10007
原返取消,待处理:7060
换新取消,待处理:7023
线下换新取消,待处理:7090
商家催收: 13000
*/
var loggerName = $"新服务单同步-{shop.ShopName}";
try
{
var shopId = long.Parse(shop.ShopId);
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
var serviceStatusList = new List<int>() { 10005, 10011, 10010 };
var request = new QueryServiceOrderRequest()
{
UpdateTimeBegin = startTime ?? DateTime.Now.Date.AddHours(-1),
UpdateTimeEnd = endTime ?? DateTime.Now,
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
PageIndex = 1,
PageSize = 50,
Platform = shop.PlatformId,
SaveResponseLog = true,
ServiceId = serviceId,
VenderId = shop.VenderId
};
List<JToken> jtokenList = new List<JToken>();
foreach (var serviceStatus in serviceStatusList)
{
if (string.IsNullOrEmpty(serviceId))
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}");
if (serviceOrderListResponse.Data != null && serviceOrderListResponse.Data.Count() > 0)
jtokenList.AddRange(serviceOrderListResponse.Data);
if (!string.IsNullOrEmpty(serviceId))
break;
}
if (jtokenList.Count() > 0)
SyncServiceOrder(shop, shopId, jtokenList, relayAPIHost, request.AppKey, request.AppSecret, request.AppToken);
}
catch (Exception ex)
{
nLogManager.GetLogger(loggerName).Error(ex, $"SyncServiceOrder ShopName:{shop.ShopName} ShopId:{shop.ShopId}");
}
}
public void SubscribeKuaiDi100()
{
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => SubscribeKuaiDi100(shop),
System.Threading.CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.SyncServiceOrderTaskScheduler);
}
}
public void SubscribeKuaiDi100(long shopId)
{
var shop = venderBusiness.GetShopList(shopId).FirstOrDefault();
Task.Factory.StartNew(() => SubscribeKuaiDi100(shop),
System.Threading.CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.SyncServiceOrderTaskScheduler);
}
private void SubscribeKuaiDi100(ShopResponse shop)
{
var loggerName = $"订阅快递100-{shop.ShopName}";
try
{
var relayAPIHost = GetPlatformRelayAPIHost(shop.PlatformId);
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.ShopId == shop.ShopId &&
s.IsNeedSubscribeKuaiDi100 == true &&
s.IsSubscribeKuaiDi100 == false)
.OrderByDescending(s => s.StatusUpdateTime)
.Page(1, 50)
.ToList();
List<IUpdate<ServiceOrder>> updateSerivceOrderList = new List<IUpdate<ServiceOrder>>();
List<ExpressOrder> insertExpressOrderList = new List<ExpressOrder>();
foreach (var serviceOrder in serviceOrderList)
{
bool isUpdateDelivery = false, isUpdateSubscribe = false;
if (string.IsNullOrEmpty(serviceOrder.WayBillNo) || string.IsNullOrEmpty(serviceOrder.ExpressName))
{
try
{
#region 查询服务单运单详情
var serviceOrderDeliveryResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetServiceOrderDeliveryDetail", new QueryServiceOrderDetailRequest()
{
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
OrderId = serviceOrder.OrderId,
ServiceId = serviceOrder.ServiceId,
Platform = Enums.Platform.,
VenderId = shop.VenderId
}, GetYunDingRequestHeader(), HttpMethod.Post);
if (serviceOrderDeliveryResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception($"获取服务单运单详情失败 {serviceOrderDeliveryResult.Content}");
var serviceOrderDeliveryResponse = JsonConvert.DeserializeObject<ApiResponse<JToken>>(serviceOrderDeliveryResult.Content);
if (!serviceOrderDeliveryResponse.Success)
throw new Exception($"获取服务单运单详情失败 {serviceOrderDeliveryResponse.Msg}");
if (serviceOrderDeliveryResponse.Data != null)
{
serviceOrder.WayBillNo = serviceOrderDeliveryResponse.Data.Value<string>("expressCode");
serviceOrder.ExpressName = serviceOrderDeliveryResponse.Data.Value<string>("expressCompany");
if (!string.IsNullOrEmpty(serviceOrder.WayBillNo) && serviceOrder.WayBillNo.StartsWith("JD") && string.IsNullOrEmpty(serviceOrder.ExpressName))
{
serviceOrder.ExpressName = "京东快递";
}
isUpdateDelivery = !string.IsNullOrEmpty(serviceOrder.WayBillNo) && !string.IsNullOrEmpty(serviceOrder.ExpressName);
}
#endregion
}
catch (Exception ex)
{
nLogManager.GetLogger(loggerName).Error(ex, $"SubscribeKuaiDi100 ShopName:{shop.ShopName} ShopId:{shop.ShopId} ServiceId:{serviceOrder.ServiceId}");
}
}
if (!string.IsNullOrEmpty(serviceOrder.WayBillNo) && !string.IsNullOrEmpty(serviceOrder.ExpressName))
{
#region 订阅快递100
isUpdateSubscribe = true;
//try
//{
// var kuaidi100CompanyCode = ConvertToKuaiDi100CompanyCode(serviceOrder.ExpressName);
// var paramStr = JsonConvert.SerializeObject(new
// {
// company = kuaidi100CompanyCode,
// number = serviceOrder.WayBillNo,
// key = "SdcRPzxo8802",
// parameters = new
// {
// callbackurl = "https://bbwy.qiyue666.com/api/ServiceOrderSync/ReceiveKuaiDi100Push",
// salt = Guid.NewGuid(),
// resultv2 = "4"
// }
// });
// var subscribeResult = restApiService.SendRequest("https://poll.kuaidi100.com", "poll", $"schema=json&param=/{paramStr}", /null, HttpMethod.Post, RestApiService.ContentType_Form);
// if (subscribeResult.StatusCode != System.Net.HttpStatusCode.OK)
// throw new Exception($"订阅快递100失败 {subscribeResult.Content}");
// var subscribeResponse = JsonConvert.DeserializeObject<KuaiDi100Response>(subscribeResult.Content);
// if (!subscribeResponse.result)
// throw new Exception($"订阅快递100失败 {subscribeResponse.message}");
//
// isUpdateSubscribe = true;
//}
//catch (Exception ex)
//{
// nLogManager.GetLogger(loggerName).Error(ex, $"SubscribeKuaiDi100 ShopName:{shop.ShopName} ShopId:{shop.ShopId} /ServiceId:/{serviceOrder.ServiceId}");
//}
#endregion
}
if (isUpdateSubscribe || isUpdateDelivery)
{
var update = fsql.Update<ServiceOrder>(serviceOrder.Id)
.SetIf(isUpdateDelivery, e => e.WayBillNo, serviceOrder.WayBillNo)
.SetIf(isUpdateDelivery, e => e.ExpressName, serviceOrder.ExpressName)
.SetIf(isUpdateSubscribe, s => s.IsSubscribeKuaiDi100, true);
updateSerivceOrderList.Add(update);
if (isUpdateDelivery && insertExpressOrderList.Count(e => e.WayBillNo == serviceOrder.WayBillNo) == 0)
{
insertExpressOrderList.Add(new ExpressOrder()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
ExpressName = serviceOrder.ExpressName,
WayBillNo = serviceOrder.WayBillNo,
OrderId = serviceOrder.OrderId,
PackageType = 1,
UpdateTime = DateTime.Now
});
}
}
}
if (insertExpressOrderList.Count() > 0)
{
var insertExpressOrderWayBillNoList = insertExpressOrderList.Select(e => e.WayBillNo).ToList();
var dbWayBillNoList = fsql.Select<ExpressOrder>().Where(e => insertExpressOrderWayBillNoList.Contains(e.WayBillNo)).ToList(e => e.WayBillNo);
if (dbWayBillNoList.Count() > 0)
{
for (var i = 0; i < insertExpressOrderList.Count(); i++)
{
if (dbWayBillNoList.Any(w => w == insertExpressOrderList[i].WayBillNo))
{
insertExpressOrderList.Remove(insertExpressOrderList[i]);
i--;
}
}
}
}
fsql.Transaction(() =>
{
if (insertExpressOrderList.Count() > 0)
fsql.Insert(insertExpressOrderList).ExecuteAffrows();
if (updateSerivceOrderList.Count() > 0)
foreach (var update in updateSerivceOrderList)
update.ExecuteAffrows();
});
}
catch (Exception ex)
{
nLogManager.GetLogger(loggerName).Error(ex, $"SubscribeKuaiDi100 ShopName:{shop.ShopName} ShopId:{shop.ShopId}");
}
}
private string ConvertToKuaiDi100CompanyCode(string sourceExpressName)
{
var result = jd_kd100_logisticsCompanyDictionary.FirstOrDefault(l => l.SourceName == sourceExpressName);
if (result == null)
throw new Exception($"匹配快递100公司失败,原快递名称 {sourceExpressName}");
return result.TargetCode;
}
public void ReceiveKuaiDi100Push(string param)
{
nLogManager.Default().Info($"收到快递100推送 {param}");
JObject jobject = JObject.Parse(param);
var waybillNo = jobject["lastResult"].Value<string>("nu");
var state = jobject["lastResult"].Value<int>("state");
if (!kuaiDi100PushStateList_lanshou.Contains(state) &&
!kuaiDi100PushStateList_zaitu.Contains(state) &&
!kuaiDi100PushStateList_paijian.Contains(state) &&
!kuaiDi100PushStateList_qianshou.Contains(state))
return;
var serviceOrderList = fsql.Select<ServiceOrder>().Where(s => s.WayBillNo == waybillNo).ToList();
if (serviceOrderList.Count() == 0)
throw new Exception($"快递单号{waybillNo} 未找到对应的服务单");
var expressOrder = fsql.Select<ExpressOrder>().Where(e => e.WayBillNo == waybillNo).ToOne();
if (expressOrder == null)
throw new Exception($"快递单号{waybillNo} 未找到对应的快递单");
DateTime? signTime = null;
if (expressOrder.TransportStatus == Enums.TransportState.)
{
if (kuaiDi100PushStateList_qianshou.Contains(state) && expressOrder.SignTime == null)
{
signTime = GetSignTime(jobject);
fsql.Update<ExpressOrder>(expressOrder.Id).Set(e => e.SignTime, signTime)
.Set(e => e.UpdateTime, DateTime.Now)
.ExecuteAffrows();
}
return;
}
var isUpdate = false;
Enums.TransportState? newStatus = null;
IUpdate<ExpressOrder> updateExpressOrder = null;
List<IUpdate<ServiceOrder>> updateServiceOrderList = new List<IUpdate<ServiceOrder>>();
if (kuaiDi100PushStateList_zaitu.Contains(state) || kuaiDi100PushStateList_lanshou.Contains(state))
{
//在途 //揽收
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = Enums.TransportState.;
}
}
else if (kuaiDi100PushStateList_qianshou.Contains(state))
{
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = Enums.TransportState.;
signTime = GetSignTime(jobject);
}
}
else if (kuaiDi100PushStateList_paijian.Contains(state))
{
if (expressOrder.TransportStatus != Enums.TransportState.)
{
isUpdate = true;
newStatus = Enums.TransportState.;
}
}
if (isUpdate)
{
fsql.Transaction(() =>
{
fsql.Update<ExpressOrder>(expressOrder.Id).Set(e => e.TransportStatus, newStatus)
.SetIf(kuaiDi100PushStateList_qianshou.Contains(state), e => e.SignTime, signTime)
.Set(e => e.UpdateTime, DateTime.Now)
.ExecuteAffrows(); //签收
foreach (var serviceOrder in serviceOrderList)
{
if (serviceOrder.TransportDetails == Enums.TransportState.)
continue;
fsql.Update<ServiceOrder>(serviceOrder.Id).Set(s => s.TransportDetails, newStatus)
.ExecuteAffrows();
}
});
}
}
public DateTime? GetSignTime(JObject jobject)
{
DateTime? signTime = null;
var data = jobject["lastResult"]["data"].Children().FirstOrDefault(d => kuaiDi100PushStateList_qianshou.Contains(d.Value<int>("statusCode")));
if (data != null)
signTime = DateTime.Parse(data.Value<string>("ftime"));
return signTime;
}
}
}