|
|
@ -30,6 +30,8 @@ namespace BBWYB.Server.Business |
|
|
|
private RestApiService restApiService; |
|
|
|
private IList<Enums.OrderState> cantPurchaseOrderStateList; |
|
|
|
private KuaiDi100Manager kuaiDi100Manager; |
|
|
|
private QiKuManager qiKuManager; |
|
|
|
|
|
|
|
public PurchaseOrderBusiness(IFreeSql fsql, |
|
|
|
NLogManager nLogManager, |
|
|
|
IIdGenerator idGenerator, |
|
|
@ -41,7 +43,8 @@ namespace BBWYB.Server.Business |
|
|
|
PurchaseSchemeBusiness purchaseSchemeBusiness, |
|
|
|
ExpressCompanyNameConverter expressCompanyNameConverter, |
|
|
|
RestApiService restApiService, |
|
|
|
KuaiDi100Manager kuaiDi100Manager) : base(fsql, nLogManager, idGenerator) |
|
|
|
KuaiDi100Manager kuaiDi100Manager, |
|
|
|
QiKuManager qiKuManager) : base(fsql, nLogManager, idGenerator) |
|
|
|
{ |
|
|
|
this.ppPlatformClientFactory = ppPlatformClientFactory; |
|
|
|
this.taskSchedulerManager = taskSchedulerManager; |
|
|
@ -59,6 +62,7 @@ namespace BBWYB.Server.Business |
|
|
|
Enums.OrderState.待完结 |
|
|
|
}; |
|
|
|
this.kuaiDi100Manager = kuaiDi100Manager; |
|
|
|
this.qiKuManager = qiKuManager; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
@ -846,6 +850,10 @@ namespace BBWYB.Server.Business |
|
|
|
.Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId) |
|
|
|
.ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Delete<OrderPurchaseSkuInfo>().Where(opsi => opsi.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); |
|
|
|
fsql.Delete<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); |
|
|
|
fsql.Delete<PurchaseExpressOrder>().Where(peo => peo.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows(); |
|
|
|
|
|
|
|
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
@ -1045,6 +1053,13 @@ namespace BBWYB.Server.Business |
|
|
|
.Set(o => o.OrderState, dbOrder.OrderState); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 通知齐库打包落仓情况
|
|
|
|
Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), |
|
|
|
CancellationToken.None, |
|
|
|
TaskCreationOptions.LongRunning, |
|
|
|
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 通知C端订单状态
|
|
|
|
|
|
|
|
#endregion
|
|
|
@ -1061,44 +1076,44 @@ namespace BBWYB.Server.Business |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 签收采购单
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
public void SignPurchaseOrder(SignPurchaseOrderRequest request) |
|
|
|
{ |
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new BusinessException("无效订单号"); |
|
|
|
if (dbOrder.OrderState == Enums.OrderState.已取消) |
|
|
|
throw new BusinessException("订单已取消"); |
|
|
|
if (dbOrder.OrderState == Enums.OrderState.已完成) |
|
|
|
throw new BusinessException("订单已完成无需签收"); |
|
|
|
|
|
|
|
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); |
|
|
|
|
|
|
|
var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
if (dbOrderPurchaseInfo == null) |
|
|
|
throw new BusinessException("无效采购单号"); |
|
|
|
if (!dbOrderPurchaseInfo.IsEnabled) |
|
|
|
throw new BusinessException("采购单已失效"); |
|
|
|
if (dbOrderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已签收 || |
|
|
|
dbOrderPurchaseInfo.IsSign == true) |
|
|
|
throw new BusinessException("采购单已签收"); |
|
|
|
|
|
|
|
dbOrderPurchaseInfo.IsSign = true; |
|
|
|
dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; |
|
|
|
|
|
|
|
dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList); |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo).ExecuteAffrows(); |
|
|
|
fsql.Update<Order>(dbOrder.Id) |
|
|
|
.Set(o => o.OrderState, dbOrder.OrderState) |
|
|
|
.Set(o => o.IsWaitPack, true).ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
///// <summary>
|
|
|
|
///// 签收采购单
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="request"></param>
|
|
|
|
//public void SignPurchaseOrder(SignPurchaseOrderRequest request)
|
|
|
|
//{
|
|
|
|
// var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
|
|
|
|
// if (dbOrder == null)
|
|
|
|
// throw new BusinessException("无效订单号");
|
|
|
|
// if (dbOrder.OrderState == Enums.OrderState.已取消)
|
|
|
|
// throw new BusinessException("订单已取消");
|
|
|
|
// if (dbOrder.OrderState == Enums.OrderState.已完成)
|
|
|
|
// throw new BusinessException("订单已完成无需签收");
|
|
|
|
|
|
|
|
// var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList();
|
|
|
|
|
|
|
|
// var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
|
|
|
|
// if (dbOrderPurchaseInfo == null)
|
|
|
|
// throw new BusinessException("无效采购单号");
|
|
|
|
// if (!dbOrderPurchaseInfo.IsEnabled)
|
|
|
|
// throw new BusinessException("采购单已失效");
|
|
|
|
// if (dbOrderPurchaseInfo.OrderState == Enums.PurchaseOrderState.已签收 ||
|
|
|
|
// dbOrderPurchaseInfo.IsSign == true)
|
|
|
|
// throw new BusinessException("采购单已签收");
|
|
|
|
|
|
|
|
// dbOrderPurchaseInfo.IsSign = true;
|
|
|
|
// dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收;
|
|
|
|
|
|
|
|
// dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList);
|
|
|
|
|
|
|
|
// fsql.Transaction(() =>
|
|
|
|
// {
|
|
|
|
// fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo).ExecuteAffrows();
|
|
|
|
// fsql.Update<Order>(dbOrder.Id)
|
|
|
|
// .Set(o => o.OrderState, dbOrder.OrderState)
|
|
|
|
// .Set(o => o.IsWaitPack, true).ExecuteAffrows();
|
|
|
|
// });
|
|
|
|
//}
|
|
|
|
|
|
|
|
#region 1688CallBack
|
|
|
|
public void CallbackFrom1688(string jsonStr) |
|
|
@ -1116,7 +1131,7 @@ namespace BBWYB.Server.Business |
|
|
|
OrderPriceModificationCallbackFrom1688(jObject); //订单改价
|
|
|
|
break; |
|
|
|
case "LOGISTICS_BUYER_VIEW_TRACE": |
|
|
|
LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更
|
|
|
|
// LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更
|
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
@ -1290,243 +1305,243 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 采购平台发货回调
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="purchaseOrderId"></param>
|
|
|
|
/// <param name="wayBillNoResponse"></param>
|
|
|
|
/// <param name="callbackPlatform"></param>
|
|
|
|
private void DeliveryCallback(string purchaseOrderId, PP_QueryOrderLogisticsResponse wayBillNoResponse, Enums.Platform callbackPlatform) |
|
|
|
{ |
|
|
|
string currentProgress = string.Empty; |
|
|
|
string wayBillNoResponseInfo = string.Empty; |
|
|
|
string expressCompanyListInfo = string.Empty; |
|
|
|
string expressCompanyInfo = string.Empty; |
|
|
|
string orderId = string.Empty; |
|
|
|
long? shopId = null; |
|
|
|
try |
|
|
|
{ |
|
|
|
#region 查询代发信息
|
|
|
|
currentProgress = "查询代发信息"; |
|
|
|
var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(o => o.PurchaseOrderId == purchaseOrderId && o.IsEnabled == true).ToOne(); |
|
|
|
if (orderPurchaseInfo == null) |
|
|
|
throw new Exception("未查询到代发信息"); |
|
|
|
orderId = orderPurchaseInfo.OrderId; |
|
|
|
shopId = orderPurchaseInfo.ShopId; |
|
|
|
#endregion
|
|
|
|
|
|
|
|
//#region 查询采购账号的归属店铺
|
|
|
|
//currentProgress = "查询采购账号归属店铺";
|
|
|
|
//var shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault();
|
|
|
|
//if (shop == null)
|
|
|
|
// throw new Exception("未查询到店铺信息");
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
#region 查询采购账号
|
|
|
|
currentProgress = "查询采购账号"; |
|
|
|
var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne(); |
|
|
|
if (purchaseAccount == null) |
|
|
|
throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 获取采购单的物流信息
|
|
|
|
currentProgress = "获取采购单的物流信息"; |
|
|
|
if (wayBillNoResponse == null) |
|
|
|
{ |
|
|
|
var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)callbackPlatform); |
|
|
|
var ppQueryOrderLogisticsRequest = new PP_QueryOrderLogisticsRequest() |
|
|
|
{ |
|
|
|
AppKey = purchaseAccount.AppKey, |
|
|
|
AppSecret = purchaseAccount.AppSecret, |
|
|
|
AppToken = purchaseAccount.AppToken, |
|
|
|
OrderId = purchaseOrderId, |
|
|
|
Platform = (AdapterEnums.PlatformType)callbackPlatform |
|
|
|
}; |
|
|
|
wayBillNoResponse = client.QueryOrderLogistics(ppQueryOrderLogisticsRequest); |
|
|
|
wayBillNoResponseInfo = JsonConvert.SerializeObject(new { Request = ppQueryOrderLogisticsRequest, Result = wayBillNoResponse }); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
//#region 获取目标平台的物流公司列表
|
|
|
|
//currentProgress = "获取店铺平台物流公司列表";
|
|
|
|
//var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest()
|
|
|
|
//{
|
|
|
|
// AppKey = shop.AppKey,
|
|
|
|
// AppSecret = shop.AppSecret,
|
|
|
|
// AppToken = shop.AppToken,
|
|
|
|
// Platform = shop.PlatformId
|
|
|
|
//});
|
|
|
|
//if (expressCompanyList != null)
|
|
|
|
// expressCompanyListInfo = JsonConvert.SerializeObject(expressCompanyList);
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#region 物流公司翻译
|
|
|
|
//currentProgress = "物流公司翻译";
|
|
|
|
|
|
|
|
//OP_QueryExpressCompanyResponse convertExpressCompany = null;
|
|
|
|
|
|
|
|
//try
|
|
|
|
//{
|
|
|
|
// convertExpressCompany = expressCompanyNameConverter.Converter(wayBillNoResponse.ExpressName,
|
|
|
|
// (AdapterEnums.PlatformType)callbackPlatform,
|
|
|
|
// (AdapterEnums.PlatformType)shop.PlatformId,
|
|
|
|
// expressCompanyList);
|
|
|
|
// if (convertExpressCompany != null)
|
|
|
|
// expressCompanyInfo = JsonConvert.SerializeObject(convertExpressCompany);
|
|
|
|
//}
|
|
|
|
//catch
|
|
|
|
//{
|
|
|
|
// throw;
|
|
|
|
//}
|
|
|
|
//finally
|
|
|
|
//{
|
|
|
|
// #region 店铺平台订单出库
|
|
|
|
// currentProgress = "店铺平台订单出库";
|
|
|
|
// orderBusiness.OutStock(new OutStockRequest()
|
|
|
|
// {
|
|
|
|
// AppKey = shop.AppKey,
|
|
|
|
// AppSecret = shop.AppSecret,
|
|
|
|
// AppToken = shop.AppToken,
|
|
|
|
// OrderId = orderId,
|
|
|
|
// TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id
|
|
|
|
// TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称
|
|
|
|
// SourceExpressId = wayBillNoResponse.ExpressId,
|
|
|
|
// SourceExpressName = wayBillNoResponse.ExpressName,
|
|
|
|
// PurchaseOrderId = purchaseOrderId,
|
|
|
|
// Platform = shop.PlatformId,
|
|
|
|
// WayBillNo = wayBillNoResponse.WayBillNo
|
|
|
|
// });
|
|
|
|
// #endregion
|
|
|
|
//}
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
#region 店铺平台订单出库
|
|
|
|
currentProgress = "店铺平台订单出库"; |
|
|
|
orderBusiness.OutStock(new OutStockRequest() |
|
|
|
{ |
|
|
|
//AppKey = shop.AppKey,
|
|
|
|
//AppSecret = shop.AppSecret,
|
|
|
|
//AppToken = shop.AppToken,
|
|
|
|
OrderId = orderId, |
|
|
|
//TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id
|
|
|
|
//TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称
|
|
|
|
SourceExpressId = wayBillNoResponse.ExpressId, |
|
|
|
SourceExpressName = wayBillNoResponse.ExpressName, |
|
|
|
PurchaseOrderId = purchaseOrderId, |
|
|
|
//Platform = shop.PlatformId,
|
|
|
|
WayBillNo = wayBillNoResponse.WayBillNo |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 1688物流信息变更回调
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="jObject"></param>
|
|
|
|
private void LogisticsUpdateCallbackFrom1688(JObject jObject) |
|
|
|
{ |
|
|
|
Task.Factory.StartNew(() => |
|
|
|
{ |
|
|
|
IList<IUpdate<OrderPurchaseSkuInfo>> updateOrderPurchaseSkuInfoList = new List<IUpdate<OrderPurchaseSkuInfo>>(); |
|
|
|
IList<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseInfoList = new List<IUpdate<OrderPurchaseInfo>>(); |
|
|
|
|
|
|
|
var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value<string>("statusChanged").ToUpper(); |
|
|
|
var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children(); |
|
|
|
|
|
|
|
var purchaseOrderIds = orderLogsItems.Select(x => x.Value<string>("orderId")).Distinct().ToList(); |
|
|
|
var orderEntryIds = orderLogsItems.Select(x => x.Value<string>("orderEntryId")).Distinct().ToList(); |
|
|
|
|
|
|
|
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList(); |
|
|
|
|
|
|
|
var dbOrderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>() |
|
|
|
.WhereIf(purchaseOrderIds.Count() > 1, ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) |
|
|
|
.WhereIf(purchaseOrderIds.Count() == 1, ops => ops.PurchaseOrderId == purchaseOrderIds[0]) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
var dbOrderPurchaseRelationInfoList = fsql.Select<OrderPurchaseRelationInfo>() |
|
|
|
.WhereIf(purchaseOrderIds.Count() > 1, opr => purchaseOrderIds.Contains(opr.PurchaseOrderId)) |
|
|
|
.WhereIf(purchaseOrderIds.Count() == 1, opr => opr.PurchaseOrderId == purchaseOrderIds[0]) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
foreach (var orderEntryId in orderEntryIds) |
|
|
|
{ |
|
|
|
var dbOrderPurchaseSkuInfo = dbOrderPurchaseSkuInfoList.FirstOrDefault(x => x.Id == orderEntryId); |
|
|
|
if (dbOrderPurchaseSkuInfo.ExpressState != statusChanged) |
|
|
|
{ |
|
|
|
var update = fsql.Update<OrderPurchaseSkuInfo>(orderEntryId).Set(x => x.ExpressState, statusChanged) |
|
|
|
.Set(x => x.ExpressChangeTime, DateTime.Now); |
|
|
|
updateOrderPurchaseSkuInfoList.Add(update); |
|
|
|
dbOrderPurchaseSkuInfo.ExpressState = statusChanged; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (statusChanged == "SIGN") |
|
|
|
{ |
|
|
|
var groupsByPoIds = dbOrderPurchaseSkuInfoList.GroupBy(x => x.PurchaseOrderId); |
|
|
|
foreach (var group in groupsByPoIds) |
|
|
|
{ |
|
|
|
var isSignAll = group.Count() == group.Where(x => x.ExpressState == "SIGN").Count(); |
|
|
|
if (isSignAll) |
|
|
|
{ |
|
|
|
var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(x => x.PurchaseOrderId == group.Key && x.IsEnabled == true); |
|
|
|
if (dbOrderPurchaseInfo != null) |
|
|
|
{ |
|
|
|
dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收; |
|
|
|
updateOrderPurchaseInfoList.Add(fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#region 通知齐库
|
|
|
|
var relationList = dbOrderPurchaseRelationInfoList.Where(x => x.PurchaseOrderId == group.Key).ToList(); |
|
|
|
foreach (var relation in relationList) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
restApiService.SendRequest("http://qiku.qiyue666.com", |
|
|
|
"/Api/PackPurchaseTask/UpdateAvailabilityState", |
|
|
|
new |
|
|
|
{ |
|
|
|
availability = isSignAll ? 0 : 1, |
|
|
|
orderId = relation.OrderId, |
|
|
|
skuId = relation.SourceSkuId |
|
|
|
}, |
|
|
|
null, |
|
|
|
HttpMethod.Post); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0) |
|
|
|
{ |
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderPurchaseSkuInfoList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
foreach (var update in updateOrderPurchaseInfoList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
} |
|
|
|
///// <summary>
|
|
|
|
///// 采购平台发货回调
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="purchaseOrderId"></param>
|
|
|
|
///// <param name="wayBillNoResponse"></param>
|
|
|
|
///// <param name="callbackPlatform"></param>
|
|
|
|
//private void DeliveryCallback(string purchaseOrderId, PP_QueryOrderLogisticsResponse wayBillNoResponse, Enums.Platform callbackPlatform)
|
|
|
|
//{
|
|
|
|
// string currentProgress = string.Empty;
|
|
|
|
// string wayBillNoResponseInfo = string.Empty;
|
|
|
|
// string expressCompanyListInfo = string.Empty;
|
|
|
|
// string expressCompanyInfo = string.Empty;
|
|
|
|
// string orderId = string.Empty;
|
|
|
|
// long? shopId = null;
|
|
|
|
// try
|
|
|
|
// {
|
|
|
|
// #region 查询代发信息
|
|
|
|
// currentProgress = "查询代发信息";
|
|
|
|
// var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(o => o.PurchaseOrderId == purchaseOrderId && o.IsEnabled == true).ToOne();
|
|
|
|
// if (orderPurchaseInfo == null)
|
|
|
|
// throw new Exception("未查询到代发信息");
|
|
|
|
// orderId = orderPurchaseInfo.OrderId;
|
|
|
|
// shopId = orderPurchaseInfo.ShopId;
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// //#region 查询采购账号的归属店铺
|
|
|
|
// //currentProgress = "查询采购账号归属店铺";
|
|
|
|
// //var shop = venderBusiness.GetShopList(shopId: shopId)?.FirstOrDefault();
|
|
|
|
// //if (shop == null)
|
|
|
|
// // throw new Exception("未查询到店铺信息");
|
|
|
|
// //#endregion
|
|
|
|
|
|
|
|
// #region 查询采购账号
|
|
|
|
// currentProgress = "查询采购账号";
|
|
|
|
// var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne();
|
|
|
|
// if (purchaseAccount == null)
|
|
|
|
// throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}");
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 获取采购单的物流信息
|
|
|
|
// currentProgress = "获取采购单的物流信息";
|
|
|
|
// if (wayBillNoResponse == null)
|
|
|
|
// {
|
|
|
|
// var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)callbackPlatform);
|
|
|
|
// var ppQueryOrderLogisticsRequest = new PP_QueryOrderLogisticsRequest()
|
|
|
|
// {
|
|
|
|
// AppKey = purchaseAccount.AppKey,
|
|
|
|
// AppSecret = purchaseAccount.AppSecret,
|
|
|
|
// AppToken = purchaseAccount.AppToken,
|
|
|
|
// OrderId = purchaseOrderId,
|
|
|
|
// Platform = (AdapterEnums.PlatformType)callbackPlatform
|
|
|
|
// };
|
|
|
|
// wayBillNoResponse = client.QueryOrderLogistics(ppQueryOrderLogisticsRequest);
|
|
|
|
// wayBillNoResponseInfo = JsonConvert.SerializeObject(new { Request = ppQueryOrderLogisticsRequest, Result = wayBillNoResponse });
|
|
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// //#region 获取目标平台的物流公司列表
|
|
|
|
// //currentProgress = "获取店铺平台物流公司列表";
|
|
|
|
// //var expressCompanyList = venderBusiness.GetExpressCompanyList(new PlatformRequest()
|
|
|
|
// //{
|
|
|
|
// // AppKey = shop.AppKey,
|
|
|
|
// // AppSecret = shop.AppSecret,
|
|
|
|
// // AppToken = shop.AppToken,
|
|
|
|
// // Platform = shop.PlatformId
|
|
|
|
// //});
|
|
|
|
// //if (expressCompanyList != null)
|
|
|
|
// // expressCompanyListInfo = JsonConvert.SerializeObject(expressCompanyList);
|
|
|
|
// //#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //#region 物流公司翻译
|
|
|
|
// //currentProgress = "物流公司翻译";
|
|
|
|
|
|
|
|
// //OP_QueryExpressCompanyResponse convertExpressCompany = null;
|
|
|
|
|
|
|
|
// //try
|
|
|
|
// //{
|
|
|
|
// // convertExpressCompany = expressCompanyNameConverter.Converter(wayBillNoResponse.ExpressName,
|
|
|
|
// // (AdapterEnums.PlatformType)callbackPlatform,
|
|
|
|
// // (AdapterEnums.PlatformType)shop.PlatformId,
|
|
|
|
// // expressCompanyList);
|
|
|
|
// // if (convertExpressCompany != null)
|
|
|
|
// // expressCompanyInfo = JsonConvert.SerializeObject(convertExpressCompany);
|
|
|
|
// //}
|
|
|
|
// //catch
|
|
|
|
// //{
|
|
|
|
// // throw;
|
|
|
|
// //}
|
|
|
|
// //finally
|
|
|
|
// //{
|
|
|
|
// // #region 店铺平台订单出库
|
|
|
|
// // currentProgress = "店铺平台订单出库";
|
|
|
|
// // orderBusiness.OutStock(new OutStockRequest()
|
|
|
|
// // {
|
|
|
|
// // AppKey = shop.AppKey,
|
|
|
|
// // AppSecret = shop.AppSecret,
|
|
|
|
// // AppToken = shop.AppToken,
|
|
|
|
// // OrderId = orderId,
|
|
|
|
// // TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id
|
|
|
|
// // TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称
|
|
|
|
// // SourceExpressId = wayBillNoResponse.ExpressId,
|
|
|
|
// // SourceExpressName = wayBillNoResponse.ExpressName,
|
|
|
|
// // PurchaseOrderId = purchaseOrderId,
|
|
|
|
// // Platform = shop.PlatformId,
|
|
|
|
// // WayBillNo = wayBillNoResponse.WayBillNo
|
|
|
|
// // });
|
|
|
|
// // #endregion
|
|
|
|
// //}
|
|
|
|
// //#endregion
|
|
|
|
|
|
|
|
|
|
|
|
// //#region 店铺平台订单出库
|
|
|
|
// //currentProgress = "店铺平台订单出库";
|
|
|
|
// //orderBusiness.OutStock(new OutStockRequest()
|
|
|
|
// //{
|
|
|
|
// // //AppKey = shop.AppKey,
|
|
|
|
// // //AppSecret = shop.AppSecret,
|
|
|
|
// // //AppToken = shop.AppToken,
|
|
|
|
// // OrderId = orderId,
|
|
|
|
// // //TargetExpressId = convertExpressCompany?.ExpressId ?? string.Empty, //物流公司Id
|
|
|
|
// // //TargetExpressName = convertExpressCompany?.ExpressName ?? string.Empty, //物流公司名称
|
|
|
|
// // SourceExpressId = wayBillNoResponse.ExpressId,
|
|
|
|
// // SourceExpressName = wayBillNoResponse.ExpressName,
|
|
|
|
// // PurchaseOrderId = purchaseOrderId,
|
|
|
|
// // //Platform = shop.PlatformId,
|
|
|
|
// // WayBillNo = wayBillNoResponse.WayBillNo
|
|
|
|
// //});
|
|
|
|
// //#endregion
|
|
|
|
|
|
|
|
|
|
|
|
// nLogManager.Default().Info($"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}");
|
|
|
|
// }
|
|
|
|
// catch (Exception ex)
|
|
|
|
// {
|
|
|
|
// nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台{callbackPlatform},订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo},店铺平台物流公司列表:{expressCompanyListInfo},翻译后的物流公司:{expressCompanyInfo}");
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
///// 1688物流信息变更回调
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="jObject"></param>
|
|
|
|
//private void LogisticsUpdateCallbackFrom1688(JObject jObject)
|
|
|
|
//{
|
|
|
|
// Task.Factory.StartNew(() =>
|
|
|
|
// {
|
|
|
|
// IList<IUpdate<OrderPurchaseSkuInfo>> updateOrderPurchaseSkuInfoList = new List<IUpdate<OrderPurchaseSkuInfo>>();
|
|
|
|
// IList<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseInfoList = new List<IUpdate<OrderPurchaseInfo>>();
|
|
|
|
|
|
|
|
// var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value<string>("statusChanged").ToUpper();
|
|
|
|
// var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children();
|
|
|
|
|
|
|
|
// var purchaseOrderIds = orderLogsItems.Select(x => x.Value<string>("orderId")).Distinct().ToList();
|
|
|
|
// var orderEntryIds = orderLogsItems.Select(x => x.Value<string>("orderEntryId")).Distinct().ToList();
|
|
|
|
|
|
|
|
// var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList();
|
|
|
|
|
|
|
|
// var dbOrderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>()
|
|
|
|
// .WhereIf(purchaseOrderIds.Count() > 1, ops => purchaseOrderIds.Contains(ops.PurchaseOrderId))
|
|
|
|
// .WhereIf(purchaseOrderIds.Count() == 1, ops => ops.PurchaseOrderId == purchaseOrderIds[0])
|
|
|
|
// .ToList();
|
|
|
|
|
|
|
|
// var dbOrderPurchaseRelationInfoList = fsql.Select<OrderPurchaseRelationInfo>()
|
|
|
|
// .WhereIf(purchaseOrderIds.Count() > 1, opr => purchaseOrderIds.Contains(opr.PurchaseOrderId))
|
|
|
|
// .WhereIf(purchaseOrderIds.Count() == 1, opr => opr.PurchaseOrderId == purchaseOrderIds[0])
|
|
|
|
// .ToList();
|
|
|
|
|
|
|
|
// foreach (var orderEntryId in orderEntryIds)
|
|
|
|
// {
|
|
|
|
// var dbOrderPurchaseSkuInfo = dbOrderPurchaseSkuInfoList.FirstOrDefault(x => x.Id == orderEntryId);
|
|
|
|
// if (dbOrderPurchaseSkuInfo.ExpressState != statusChanged)
|
|
|
|
// {
|
|
|
|
// var update = fsql.Update<OrderPurchaseSkuInfo>(orderEntryId).Set(x => x.ExpressState, statusChanged)
|
|
|
|
// .Set(x => x.ExpressChangeTime, DateTime.Now);
|
|
|
|
// updateOrderPurchaseSkuInfoList.Add(update);
|
|
|
|
// dbOrderPurchaseSkuInfo.ExpressState = statusChanged;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (statusChanged == "SIGN")
|
|
|
|
// {
|
|
|
|
// var groupsByPoIds = dbOrderPurchaseSkuInfoList.GroupBy(x => x.PurchaseOrderId);
|
|
|
|
// foreach (var group in groupsByPoIds)
|
|
|
|
// {
|
|
|
|
// var isSignAll = group.Count() == group.Where(x => x.ExpressState == "SIGN").Count();
|
|
|
|
// if (isSignAll)
|
|
|
|
// {
|
|
|
|
// var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(x => x.PurchaseOrderId == group.Key && x.IsEnabled == true);
|
|
|
|
// if (dbOrderPurchaseInfo != null)
|
|
|
|
// {
|
|
|
|
// dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.已签收;
|
|
|
|
// updateOrderPurchaseInfoList.Add(fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// #region 通知齐库
|
|
|
|
// var relationList = dbOrderPurchaseRelationInfoList.Where(x => x.PurchaseOrderId == group.Key).ToList();
|
|
|
|
// foreach (var relation in relationList)
|
|
|
|
// {
|
|
|
|
// try
|
|
|
|
// {
|
|
|
|
// restApiService.SendRequest("http://qiku.qiyue666.com",
|
|
|
|
// "/Api/PackPurchaseTask/UpdateAvailabilityState",
|
|
|
|
// new
|
|
|
|
// {
|
|
|
|
// availability = isSignAll ? 0 : 1,
|
|
|
|
// orderId = relation.OrderId,
|
|
|
|
// skuId = relation.SourceSkuId
|
|
|
|
// },
|
|
|
|
// null,
|
|
|
|
// HttpMethod.Post);
|
|
|
|
// }
|
|
|
|
// catch (Exception ex)
|
|
|
|
// {
|
|
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0)
|
|
|
|
// {
|
|
|
|
// fsql.Transaction(() =>
|
|
|
|
// {
|
|
|
|
// foreach (var update in updateOrderPurchaseSkuInfoList)
|
|
|
|
// update.ExecuteAffrows();
|
|
|
|
// foreach (var update in updateOrderPurchaseInfoList)
|
|
|
|
// update.ExecuteAffrows();
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
// }, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
|
|
|
|
//}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 采购平台改价回调
|
|
|
@ -1652,5 +1667,108 @@ namespace BBWYB.Server.Business |
|
|
|
nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 回调平台{callbackPlatform},采购单号{purchaseOrderId},执行进度[{currentProgress}]"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public void KuaiDi100Publish(string param) |
|
|
|
{ |
|
|
|
Task.Factory.StartNew(() => KuaiDi100PublishCore(param), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
} |
|
|
|
|
|
|
|
private void KuaiDi100PublishCore(string param) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger("快递100").Info($"KuaiDi100Publish {param}"); |
|
|
|
JObject jobject = JObject.Parse(param); |
|
|
|
var waybillNo = jobject["lastResult"].Value<string>("nu"); |
|
|
|
try |
|
|
|
{ |
|
|
|
var state = jobject["lastResult"].Value<int>("state"); |
|
|
|
var convertState = kuaiDi100Manager.GetExpressState(state); |
|
|
|
if (convertState == "Unknow") |
|
|
|
return; |
|
|
|
|
|
|
|
var dataArray = jobject["lastResult"]["data"].Children().Select(d => new |
|
|
|
{ |
|
|
|
context = d.Value<string>("context"), |
|
|
|
ftime = d.Value<DateTime>("ftime"), |
|
|
|
statusCode = d.Value<int>("statusCode") |
|
|
|
}).OrderByDescending(d => d.ftime).ToList(); |
|
|
|
|
|
|
|
var lastData = dataArray.FirstOrDefault(); |
|
|
|
|
|
|
|
IUpdate<PurchaseExpressOrder> updatePurchaseExpressOrder = null; |
|
|
|
IUpdate<OrderPurchaseInfo> updateOrderPurchase = null; |
|
|
|
IUpdate<Order> updateOrder = null; |
|
|
|
|
|
|
|
#region 查询该笔快递单
|
|
|
|
var tpeo = fsql.Select<PurchaseExpressOrder>(waybillNo).ToOne(); |
|
|
|
if (tpeo == null) |
|
|
|
throw new Exception("未查询到快递单"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询订单/采购单/采购sku/快递单/采购关系
|
|
|
|
var dbOrder = fsql.Select<Order>(tpeo.OrderId).ToOne(o => new Order |
|
|
|
{ |
|
|
|
Id = o.Id, |
|
|
|
ShopId = o.ShopId, |
|
|
|
OrderState = o.OrderState |
|
|
|
}); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new Exception("未查询到订单"); |
|
|
|
|
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == dbOrder.Id && opi.IsEnabled == true).ToList(); |
|
|
|
var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == tpeo.PurchaseOrderId); |
|
|
|
if (orderPurchaseInfo == null) |
|
|
|
throw new Exception("未查询到采购单"); |
|
|
|
|
|
|
|
var orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); |
|
|
|
if (orderPurchaseSkuList.Count() == 0) |
|
|
|
throw new BusinessException("未查询到采购单sku信息"); |
|
|
|
|
|
|
|
var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); |
|
|
|
var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == waybillNo); |
|
|
|
purchaseExpressOrder.ExpressState = convertState; |
|
|
|
purchaseExpressOrder.ExpressChangedTime = lastData.ftime; |
|
|
|
purchaseExpressOrder.ExpressContent = lastData.context; |
|
|
|
updatePurchaseExpressOrder = fsql.Update<PurchaseExpressOrder>().SetSource(purchaseExpressOrder); |
|
|
|
|
|
|
|
var orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == tpeo.PurchaseOrderId).ToList(); |
|
|
|
if (orderPurchaseRelationList.Count() == 0) |
|
|
|
throw new BusinessException("未查询到采购单的关联信息"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 计算采购单状态
|
|
|
|
orderPurchaseInfo.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList); |
|
|
|
updateOrderPurchase = fsql.Update<OrderPurchaseInfo>(orderPurchaseInfo.Id) |
|
|
|
.Set(opi => opi.OrderState, orderPurchaseInfo.OrderState); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 计算订单状态
|
|
|
|
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList); |
|
|
|
updateOrder = fsql.Update<Order>(dbOrder.Id) |
|
|
|
.Set(o => o.OrderState, dbOrder.OrderState); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 通知齐库打包落仓情况
|
|
|
|
Task.Factory.StartNew(() => qiKuManager.PublishQiKu(orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), |
|
|
|
CancellationToken.None, |
|
|
|
TaskCreationOptions.LongRunning, |
|
|
|
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 通知C端状态
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
updatePurchaseExpressOrder?.ExecuteAffrows(); |
|
|
|
updateOrderPurchase?.ExecuteAffrows(); |
|
|
|
updateOrder?.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger("快递100").Error(ex, waybillNo); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|