|
|
@ -568,7 +568,7 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
foreach (var apo in request.AssociationPurchaseOrderList) |
|
|
|
{ |
|
|
|
if (Math.Abs(apo.PurchaseAmount - apo.AssocationOrderCostDetailList.Sum(aocd => aocd.SkuAmount)) > 1) |
|
|
|
if (Math.Abs(apo.PurchaseAmount - apo.AssocationOrderCostDetailList.Sum(aocd => aocd.SkuAmount * aocd.PurchaseQuantity)) > 1) |
|
|
|
throw new BusinessException($"采购单{apo.PurchaseOrderId}的采购货款与明细采购货款总和误差不能超过1"); |
|
|
|
} |
|
|
|
#endregion
|
|
|
@ -1020,6 +1020,26 @@ namespace BBWYB.Server.Business |
|
|
|
var historyPurchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
if (historyPurchaseOrder == null) |
|
|
|
throw new BusinessException("未查询到采购单"); |
|
|
|
|
|
|
|
#region 找出失效的快递单
|
|
|
|
List<string> deleteWaybillNoList = new List<string>(); |
|
|
|
|
|
|
|
//查询该采购单所使用的快递单号
|
|
|
|
var useWaybillNos = fsql.Select<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == historyPurchaseOrder.PurchaseOrderId).ToList(eori => eori.WayBillNo); |
|
|
|
|
|
|
|
//查询使用上述快递单号的快递单关系
|
|
|
|
var expressOrderRelationList = fsql.Select<ExpressOrderRelationInfo>().Where(eori => useWaybillNos.Contains(eori.WayBillNo)).ToList(); |
|
|
|
|
|
|
|
//以快递单号进行分组
|
|
|
|
var expressOrderRelationGroups = expressOrderRelationList.GroupBy(eori => eori.WayBillNo); |
|
|
|
foreach (var group in expressOrderRelationGroups) |
|
|
|
{ |
|
|
|
if (group.Count() == group.Count(eori => eori.PurchaseOrderId == historyPurchaseOrder.PurchaseOrderId)) |
|
|
|
deleteWaybillNoList.Add(group.Key); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
orderPurchaseInfoList.Remove(historyPurchaseOrder); |
|
|
|
dbOrder.CalculationOrderState(fsql, orderPurchaseInfoList: orderPurchaseInfoList); |
|
|
|
|
|
|
@ -1038,7 +1058,12 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
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.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == historyPurchaseOrder.PurchaseOrderId).ExecuteAffrows(); |
|
|
|
if (deleteWaybillNoList.Count() > 0) |
|
|
|
fsql.Delete<PurchaseExpressOrder>(deleteWaybillNoList).ExecuteAffrows(); |
|
|
|
|
|
|
|
//fsql.Delete<PurchaseExpressOrder>().Where(peo => peo.PurchaseOrderId == request.PurchaseOrderId).ExecuteAffrows();
|
|
|
|
|
|
|
|
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows(); |
|
|
|
fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows(); |
|
|
@ -1143,8 +1168,8 @@ namespace BBWYB.Server.Business |
|
|
|
ExpressChangedTime = peo.ExpressChangedTime, |
|
|
|
ExpressState = peo.ExpressState, |
|
|
|
IsSubscribeKD100 = peo.IsSubscribeKD100, |
|
|
|
OrderId = eori.OrderId, |
|
|
|
PurchaseOrderId = eori.PurchaseOrderId, |
|
|
|
//OrderId = eori.OrderId,
|
|
|
|
//PurchaseOrderId = eori.PurchaseOrderId,
|
|
|
|
ShopId = eori.ShopId.Value, |
|
|
|
SourceExpressId = peo.SourceExpressId, |
|
|
|
SourceExpressName = peo.SourceExpressName, |
|
|
@ -1153,8 +1178,6 @@ namespace BBWYB.Server.Business |
|
|
|
WaybillNo = peo.WaybillNo |
|
|
|
}); |
|
|
|
bool isExists = purchaseExpressOrderList.Any(exo => exo.WaybillNo == request.WaybillNo); |
|
|
|
if (isExists) |
|
|
|
return; |
|
|
|
bool isDbExists = fsql.Select<PurchaseExpressOrder>(request.WaybillNo).Any(); |
|
|
|
#endregion
|
|
|
|
|
|
|
@ -1314,131 +1337,139 @@ namespace BBWYB.Server.Business |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 手动收货
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
public void ManualSign(ManualSignRequest request) |
|
|
|
{ |
|
|
|
IList<IUpdate<PurchaseExpressOrder>> updatePurchaseExpressOrderList = new List<IUpdate<PurchaseExpressOrder>>(); |
|
|
|
IUpdate<OrderPurchaseInfo> updateOrderPurchase = null; |
|
|
|
IUpdate<Order> updateOrder = null; |
|
|
|
|
|
|
|
#region 查询该笔采购单的快递单信息
|
|
|
|
var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询当前采购单的订单信息
|
|
|
|
var dbOrder = fsql.Select<OrderPurchaseInfo, Order>().InnerJoin((opi, o) => opi.OrderId == o.Id) |
|
|
|
.Where((opi, o) => opi.PurchaseOrderId == request.PurchaseOrderId && opi.IsEnabled == true) |
|
|
|
.ToOne((opi, o) => new Order |
|
|
|
{ |
|
|
|
Id = o.Id, |
|
|
|
OrderState = o.OrderState, |
|
|
|
ShopId = o.ShopId |
|
|
|
}); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new BusinessException("未查询到采购单的订单信息"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询订单的全部采购单信息
|
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == dbOrder.Id && opi.IsEnabled == true).ToList(); |
|
|
|
var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
if (orderPurchaseInfo == null) |
|
|
|
throw new BusinessException("未查询到采购单信息"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null; |
|
|
|
IList<OrderPurchaseRelationInfo> orderPurchaseRelationList = null; |
|
|
|
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) |
|
|
|
{ |
|
|
|
#region 查询采购关联信息
|
|
|
|
orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId && |
|
|
|
opri.BelongSkuId == request.SkuId).ToList(); |
|
|
|
if (orderPurchaseRelationList.Count() == 0) |
|
|
|
throw new BusinessException("未查询到采购单的关联信息"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询该笔采购单的采购sku信息
|
|
|
|
orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList(); |
|
|
|
if (orderPurchaseSkuList.Count() == 0) |
|
|
|
throw new BusinessException("未查询到采购单sku信息"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 更新采购sku的快递单状态为签收
|
|
|
|
foreach (var relation in orderPurchaseRelationList) |
|
|
|
{ |
|
|
|
var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId); |
|
|
|
if (orderPurchaseSku == null) |
|
|
|
throw new BusinessException("未查询到采购单sku信息"); |
|
|
|
if (!string.IsNullOrEmpty(orderPurchaseSku.WaybillNo)) |
|
|
|
{ |
|
|
|
var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == orderPurchaseSku.WaybillNo); |
|
|
|
if (purchaseExpressOrder == null) |
|
|
|
throw new BusinessException("未查询到采购sku的快递信息"); |
|
|
|
var expressState = kuaiDi100Manager.GetExpressState(3); |
|
|
|
if (purchaseExpressOrder.ExpressState != expressState) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.ExpressState = expressState; |
|
|
|
updatePurchaseExpressOrderList.Add(fsql.Update<PurchaseExpressOrder>(purchaseExpressOrder.WaybillNo) |
|
|
|
.Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState) |
|
|
|
.Set(exo => exo.ExpressChangedTime, DateTime.Now) |
|
|
|
.Set(exo => exo.ExpressContent, "手动签收")); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
foreach (var purchaseExpressOrder in purchaseExpressOrderList) |
|
|
|
{ |
|
|
|
var expressState = kuaiDi100Manager.GetExpressState(3); |
|
|
|
if (purchaseExpressOrder.ExpressState != expressState) |
|
|
|
{ |
|
|
|
purchaseExpressOrder.ExpressState = expressState; |
|
|
|
updatePurchaseExpressOrderList.Add(fsql.Update<PurchaseExpressOrder>(purchaseExpressOrder.WaybillNo) |
|
|
|
.Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState) |
|
|
|
.Set(exo => exo.ExpressChangedTime, DateTime.Now) |
|
|
|
.Set(exo => exo.ExpressContent, "手动签收")); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#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(orderPurchaseInfo, orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList), |
|
|
|
Task.Factory.StartNew(() => OnExpressOrderChange(request.WayBillNo, "QianShou", DateTime.Now, "手动签收"), |
|
|
|
CancellationToken.None, |
|
|
|
TaskCreationOptions.LongRunning, |
|
|
|
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
#region 通知C端状态
|
|
|
|
Task.Factory.StartNew(() => SendPurchaseOrderStateToC(dbOrder.Id, dbOrder.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
///// <summary>
|
|
|
|
///// 手动收货
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="request"></param>
|
|
|
|
//public void ManualSign(ManualSignRequest request)
|
|
|
|
//{
|
|
|
|
// IList<IUpdate<PurchaseExpressOrder>> updatePurchaseExpressOrderList = new List<IUpdate<PurchaseExpressOrder>>();
|
|
|
|
// IUpdate<OrderPurchaseInfo> updateOrderPurchase = null;
|
|
|
|
// IUpdate<Order> updateOrder = null;
|
|
|
|
|
|
|
|
// #region 查询该笔采购单的快递单信息
|
|
|
|
// var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList();
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 查询当前采购单的订单信息
|
|
|
|
// var dbOrder = fsql.Select<OrderPurchaseInfo, Order>().InnerJoin((opi, o) => opi.OrderId == o.Id)
|
|
|
|
// .Where((opi, o) => opi.PurchaseOrderId == request.PurchaseOrderId && opi.IsEnabled == true)
|
|
|
|
// .ToOne((opi, o) => new Order
|
|
|
|
// {
|
|
|
|
// Id = o.Id,
|
|
|
|
// OrderState = o.OrderState,
|
|
|
|
// ShopId = o.ShopId
|
|
|
|
// });
|
|
|
|
// if (dbOrder == null)
|
|
|
|
// throw new BusinessException("未查询到采购单的订单信息");
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 查询订单的全部采购单信息
|
|
|
|
// var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == dbOrder.Id && opi.IsEnabled == true).ToList();
|
|
|
|
// var orderPurchaseInfo = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
|
|
|
|
// if (orderPurchaseInfo == null)
|
|
|
|
// throw new BusinessException("未查询到采购单信息");
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null;
|
|
|
|
// IList<OrderPurchaseRelationInfo> orderPurchaseRelationList = null;
|
|
|
|
// if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴)
|
|
|
|
// {
|
|
|
|
// #region 查询采购关联信息
|
|
|
|
// orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>().Where(opri => opri.PurchaseOrderId == request.PurchaseOrderId &&
|
|
|
|
// opri.BelongSkuId == request.SkuId).ToList();
|
|
|
|
// if (orderPurchaseRelationList.Count() == 0)
|
|
|
|
// throw new BusinessException("未查询到采购单的关联信息");
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
if (updatePurchaseExpressOrderList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updatePurchaseExpressOrderList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
updateOrderPurchase?.ExecuteAffrows(); |
|
|
|
updateOrder?.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
// #region 查询该笔采购单的采购sku信息
|
|
|
|
// orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(x => x.PurchaseOrderId == request.PurchaseOrderId).ToList();
|
|
|
|
// if (orderPurchaseSkuList.Count() == 0)
|
|
|
|
// throw new BusinessException("未查询到采购单sku信息");
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 更新采购sku的快递单状态为签收
|
|
|
|
// foreach (var relation in orderPurchaseRelationList)
|
|
|
|
// {
|
|
|
|
// var orderPurchaseSku = orderPurchaseSkuList.FirstOrDefault(posku => posku.PurchaseSkuId == relation.PurchaseSkuId);
|
|
|
|
// if (orderPurchaseSku == null)
|
|
|
|
// throw new BusinessException("未查询到采购单sku信息");
|
|
|
|
// if (!string.IsNullOrEmpty(orderPurchaseSku.WaybillNo))
|
|
|
|
// {
|
|
|
|
// var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(exo => exo.WaybillNo == orderPurchaseSku.WaybillNo);
|
|
|
|
// if (purchaseExpressOrder == null)
|
|
|
|
// throw new BusinessException("未查询到采购sku的快递信息");
|
|
|
|
// var expressState = kuaiDi100Manager.GetExpressState(3);
|
|
|
|
// if (purchaseExpressOrder.ExpressState != expressState)
|
|
|
|
// {
|
|
|
|
// purchaseExpressOrder.ExpressState = expressState;
|
|
|
|
// updatePurchaseExpressOrderList.Add(fsql.Update<PurchaseExpressOrder>(purchaseExpressOrder.WaybillNo)
|
|
|
|
// .Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState)
|
|
|
|
// .Set(exo => exo.ExpressChangedTime, DateTime.Now)
|
|
|
|
// .Set(exo => exo.ExpressContent, "手动签收"));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// foreach (var purchaseExpressOrder in purchaseExpressOrderList)
|
|
|
|
// {
|
|
|
|
// var expressState = kuaiDi100Manager.GetExpressState(3);
|
|
|
|
// if (purchaseExpressOrder.ExpressState != expressState)
|
|
|
|
// {
|
|
|
|
// purchaseExpressOrder.ExpressState = expressState;
|
|
|
|
// updatePurchaseExpressOrderList.Add(fsql.Update<PurchaseExpressOrder>(purchaseExpressOrder.WaybillNo)
|
|
|
|
// .Set(exo => exo.ExpressState, purchaseExpressOrder.ExpressState)
|
|
|
|
// .Set(exo => exo.ExpressChangedTime, DateTime.Now)
|
|
|
|
// .Set(exo => exo.ExpressContent, "手动签收"));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// #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(orderPurchaseInfo, orderPurchaseRelationList, orderPurchaseSkuList, purchaseExpressOrderList),
|
|
|
|
// CancellationToken.None,
|
|
|
|
// TaskCreationOptions.LongRunning,
|
|
|
|
// taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// #region 通知C端状态
|
|
|
|
// Task.Factory.StartNew(() => SendPurchaseOrderStateToC(dbOrder.Id, dbOrder.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
|
|
|
|
// #endregion
|
|
|
|
|
|
|
|
// fsql.Transaction(() =>
|
|
|
|
// {
|
|
|
|
// if (updatePurchaseExpressOrderList.Count() > 0)
|
|
|
|
// {
|
|
|
|
// foreach (var update in updatePurchaseExpressOrderList)
|
|
|
|
// update.ExecuteAffrows();
|
|
|
|
// }
|
|
|
|
// updateOrderPurchase?.ExecuteAffrows();
|
|
|
|
// updateOrder?.ExecuteAffrows();
|
|
|
|
// });
|
|
|
|
//}
|
|
|
|
|
|
|
|
///// <summary>
|
|
|
|
///// 签收采购单
|
|
|
@ -2113,12 +2144,38 @@ namespace BBWYB.Server.Business |
|
|
|
|
|
|
|
public void KuaiDi100Publish(string param) |
|
|
|
{ |
|
|
|
Task.Factory.StartNew(() => KuaiDi100PublishCore(param), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
nLogManager.GetLogger("快递100").Info($"KuaiDi100Publish {param}"); |
|
|
|
try |
|
|
|
{ |
|
|
|
JObject jobject = JObject.Parse(param); |
|
|
|
var waybillNo = jobject["lastResult"].Value<string>("nu"); |
|
|
|
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(); |
|
|
|
|
|
|
|
Task.Factory.StartNew(() => OnExpressOrderChange(waybillNo, convertState, lastData.ftime, lastData.context), |
|
|
|
CancellationToken.None, |
|
|
|
TaskCreationOptions.LongRunning, |
|
|
|
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger("快递100").Error(ex, $"KuaiDi100Publish-{param}"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void KuaiDi100PublishCore(string param) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger("快递100").Info($"KuaiDi100Publish {param}"); |
|
|
|
JObject jobject = JObject.Parse(param); |
|
|
|
var waybillNo = jobject["lastResult"].Value<string>("nu"); |
|
|
|
try |
|
|
@ -2222,6 +2279,170 @@ namespace BBWYB.Server.Business |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 快递单信息变更
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="wayBillNo"></param>
|
|
|
|
/// <param name="state"></param>
|
|
|
|
/// <param name="expressChangeTime"></param>
|
|
|
|
/// <param name="expressContent"></param>
|
|
|
|
private void OnExpressOrderChange(string wayBillNo, string state, DateTime expressChangeTime, string expressContent) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
IUpdate<PurchaseExpressOrder> updatePurchaseExpressOrder = null; |
|
|
|
List<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseList = new List<IUpdate<OrderPurchaseInfo>>(); |
|
|
|
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>(); |
|
|
|
|
|
|
|
#region 查询该笔快递单
|
|
|
|
var tpeo = fsql.Select<PurchaseExpressOrder>(wayBillNo).ToOne(); |
|
|
|
if (tpeo == null) |
|
|
|
throw new Exception("未查询到快递单"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询和该快递单有关的订单 (多笔订单)
|
|
|
|
var orderIds = fsql.Select<ExpressOrderRelationInfo, PurchaseExpressOrder>() |
|
|
|
.InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) |
|
|
|
.Where((eori, peo) => eori.WayBillNo == wayBillNo) |
|
|
|
.GroupBy((eori, peo) => eori.OrderId) |
|
|
|
.ToList(g => g.Key); |
|
|
|
if (orderIds.Count() == 0) |
|
|
|
throw new Exception("未查询到任何订单号"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询订单
|
|
|
|
var orderList = fsql.Select<Order>(orderIds).ToList(o => new Order |
|
|
|
{ |
|
|
|
Id = o.Id, |
|
|
|
ShopId = o.ShopId, |
|
|
|
OrderState = o.OrderState |
|
|
|
}); |
|
|
|
if (orderList.Count() == 0) |
|
|
|
throw new Exception("未查询到任何订单"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询订单sku
|
|
|
|
var orderSkuList = fsql.Select<OrderSku>().Where(osku => orderIds.Contains(osku.OrderId)).ToList(); |
|
|
|
if (orderSkuList.Count() == 0) |
|
|
|
throw new Exception("未查询到任何订单sku"); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购单
|
|
|
|
var purchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(ori => ori.IsEnabled == true && orderIds.Contains(ori.OrderId)).ToList(); |
|
|
|
if (purchaseOrderList.Count() == 0) |
|
|
|
throw new Exception("未查询到任何采购单"); |
|
|
|
var purchaseOrderIds = purchaseOrderList.Select(po => po.PurchaseOrderId).ToList(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购SKU
|
|
|
|
IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>() |
|
|
|
.Where(posku => purchaseOrderIds.Contains(posku.PurchaseOrderId)) |
|
|
|
.ToList(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购sku关联信息
|
|
|
|
IList<OrderPurchaseRelationInfo> orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>() |
|
|
|
.Where(ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) |
|
|
|
.ToList(); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购单关联的快递单
|
|
|
|
var purchaseExpressOrderList = fsql.Select<ExpressOrderRelationInfo, PurchaseExpressOrder>() |
|
|
|
.InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) |
|
|
|
.Where((eori, peo) => orderIds.Contains(eori.OrderId)).ToList((eori, peo) => new PurchaseExpressOrder |
|
|
|
{ |
|
|
|
CreateTime = peo.CreateTime, |
|
|
|
ExpressContent = peo.ExpressContent, |
|
|
|
ExpressChangedTime = peo.ExpressChangedTime, |
|
|
|
ExpressState = peo.ExpressState, |
|
|
|
IsSubscribeKD100 = peo.IsSubscribeKD100, |
|
|
|
OrderId = eori.OrderId, |
|
|
|
PurchaseOrderId = eori.PurchaseOrderId, |
|
|
|
ShopId = eori.ShopId.Value, |
|
|
|
SourceExpressId = peo.SourceExpressId, |
|
|
|
SourceExpressName = peo.SourceExpressName, |
|
|
|
TargetExpressId = peo.TargetExpressId, |
|
|
|
TargetExpressName = peo.TargetExpressName, |
|
|
|
WaybillNo = peo.WaybillNo |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 更新采购单信息
|
|
|
|
tpeo.ExpressState = state; |
|
|
|
tpeo.ExpressChangedTime = expressChangeTime; |
|
|
|
tpeo.ExpressContent = expressContent; |
|
|
|
updatePurchaseExpressOrder = fsql.Update<PurchaseExpressOrder>().SetSource(tpeo); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 计算订单状态和采购单状态
|
|
|
|
foreach (var order in orderList) |
|
|
|
{ |
|
|
|
var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); |
|
|
|
var currentPurchaseOrderList = purchaseOrderList.Where(po => po.OrderId == order.Id).ToList(); |
|
|
|
foreach (var purchaseOrder in currentPurchaseOrderList) |
|
|
|
{ |
|
|
|
var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); |
|
|
|
|
|
|
|
var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); |
|
|
|
var temp = currentPurchaseExpressOrderList.FirstOrDefault(p => p.WaybillNo == wayBillNo); |
|
|
|
if (temp != null) |
|
|
|
temp.ExpressState = state; |
|
|
|
|
|
|
|
var oldPurchaseOrderState = purchaseOrder.OrderState; |
|
|
|
purchaseOrder.CalculationOrderState(fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList); |
|
|
|
if (purchaseOrder.OrderState != oldPurchaseOrderState) |
|
|
|
{ |
|
|
|
var update = fsql.Update<OrderPurchaseInfo>(purchaseOrder.Id).Set(po => po.OrderState, purchaseOrder.OrderState); |
|
|
|
updateOrderPurchaseList.Add(update); |
|
|
|
|
|
|
|
#region 通知齐库打包落仓情况
|
|
|
|
var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); |
|
|
|
|
|
|
|
Task.Factory.StartNew(() => qiKuManager.PublishQiKu(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList), |
|
|
|
CancellationToken.None, |
|
|
|
TaskCreationOptions.LongRunning, |
|
|
|
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
var oldOrderState = order.OrderState; |
|
|
|
order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList); |
|
|
|
if (order.OrderState != oldOrderState) |
|
|
|
{ |
|
|
|
var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, order.OrderState); |
|
|
|
updateOrderList.Add(update); |
|
|
|
|
|
|
|
#region 通知C端状态
|
|
|
|
Task.Factory.StartNew(() => SendPurchaseOrderStateToC(order.Id, order.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 更新数据库
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
updatePurchaseExpressOrder?.ExecuteAffrows(); |
|
|
|
if (updateOrderPurchaseList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderPurchaseList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
if (updateOrderList.Count() > 0) |
|
|
|
{ |
|
|
|
foreach (var update in updateOrderList) |
|
|
|
update.ExecuteAffrows(); |
|
|
|
} |
|
|
|
}); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
nLogManager.GetLogger("快递100").Error(ex, wayBillNo); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void SendDingDingOnKD100SubscribeFail(string content) |
|
|
|
{ |
|
|
|
try |
|
|
|