|
|
@ -1088,37 +1088,74 @@ namespace BBWYB.Server.Business |
|
|
|
{ |
|
|
|
nLogManager.Default().Info($"EditPurchaseExpressOrder {JsonConvert.SerializeObject(request)}"); |
|
|
|
|
|
|
|
|
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(o => new { o.Id, o.ShopId, o.OrderSn }); |
|
|
|
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne(); |
|
|
|
if (dbOrder == null) |
|
|
|
throw new BusinessException($"订单号{request.OrderId}不存在"); |
|
|
|
|
|
|
|
var shopIds = dbOrder.ShopId.ToString(); |
|
|
|
var shop = fsqlManager.MDSfsql.Select<Shops>().Where(s => s.ShopId == shopIds).ToOne(); |
|
|
|
|
|
|
|
var oldPeo = fsql.Select<PurchaseExpressOrder>(request.OldWaybillNo).ToOne(); |
|
|
|
if (oldPeo == null) |
|
|
|
throw new BusinessException($"旧快递单号{request.OldWaybillNo}不存在"); |
|
|
|
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList(); |
|
|
|
var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId); |
|
|
|
if (purchaseOrder == null) |
|
|
|
throw new BusinessException($"未查询到采购单号{request.PurchaseOrderId}"); |
|
|
|
|
|
|
|
var newPeo = fsql.Select<PurchaseExpressOrder>(request.NewWaybillNo).ToOne(); |
|
|
|
if (newPeo != null && newPeo.PurchaseOrderId == request.PurchaseOrderId) |
|
|
|
throw new BusinessException("不能为同一采购单设置重复的快递单号"); |
|
|
|
|
|
|
|
IInsert<PurchaseExpressOrder> insertPEO = null; |
|
|
|
IInsert<ExpressOrderRelationInfo> insertEORI = null; |
|
|
|
IDelete<ExpressOrderRelationInfo> deleteEORI = null; |
|
|
|
IDelete<PurchaseExpressOrder> deletePEO = null; |
|
|
|
IUpdate<OrderPurchaseSkuInfo> updatePurchaseOrderSku = null; |
|
|
|
IUpdate<OrderPurchaseInfo> updatePurchaseOrder = null; |
|
|
|
IUpdate<Order> updateOrder = null; |
|
|
|
|
|
|
|
var waybillNos = new List<string>() { request.OldWaybillNo, request.NewWaybillNo }; |
|
|
|
var expressOrderRelationList = fsql.Select<ExpressOrderRelationInfo>().Where(eori => waybillNos.Contains(eori.WayBillNo)).ToList(); |
|
|
|
var oldWaybillNoRelationList = expressOrderRelationList.Where(eori => eori.WayBillNo == request.OldWaybillNo).ToList(); |
|
|
|
var newWaybillNoRelationList = expressOrderRelationList.Where(eori => eori.WayBillNo == request.NewWaybillNo).ToList(); |
|
|
|
|
|
|
|
#region 旧快递单号验证
|
|
|
|
if (!oldWaybillNoRelationList.Any()) |
|
|
|
throw new BusinessException("未查询到旧快递单号"); |
|
|
|
if (!oldWaybillNoRelationList.Any(eori => eori.PurchaseOrderId == request.PurchaseOrderId)) |
|
|
|
throw new BusinessException($"旧快递单号{request.OldWaybillNo}不属于采购单{request.PurchaseOrderId},无权修改"); |
|
|
|
|
|
|
|
if (oldWaybillNoRelationList.Count() == oldWaybillNoRelationList.Count(eori => eori.PurchaseOrderId == request.PurchaseOrderId)) |
|
|
|
deletePEO = fsql.Delete<PurchaseExpressOrder>(request.OldWaybillNo); |
|
|
|
deleteEORI = fsql.Delete<ExpressOrderRelationInfo>().Where(eori => eori.PurchaseOrderId == request.PurchaseOrderId && eori.WayBillNo == request.OldWaybillNo); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 新快递单号验证
|
|
|
|
if (!newWaybillNoRelationList.Any(eori => eori.PurchaseOrderId == request.PurchaseOrderId)) |
|
|
|
{ |
|
|
|
var eori = new ExpressOrderRelationInfo() |
|
|
|
{ |
|
|
|
Id = idGenerator.NewLong(), |
|
|
|
OrderId = request.OrderId, |
|
|
|
PurchaseOrderId = request.PurchaseOrderId, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
ShopId = dbOrder.ShopId, |
|
|
|
WayBillNo = request.NewWaybillNo |
|
|
|
}; |
|
|
|
insertEORI = fsql.Insert(eori); |
|
|
|
} |
|
|
|
else |
|
|
|
throw new BusinessException("请勿重复为同一采购单设置相同的快递单号"); |
|
|
|
|
|
|
|
PurchaseExpressOrder newPeo = null; |
|
|
|
if (!newWaybillNoRelationList.Any()) |
|
|
|
{ |
|
|
|
newPeo = new PurchaseExpressOrder() |
|
|
|
{ |
|
|
|
WaybillNo = request.NewWaybillNo, |
|
|
|
TargetExpressId = request.NewExpressId, |
|
|
|
TargetExpressName = request.NewExpressName, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
OrderId = request.OrderId, |
|
|
|
PurchaseOrderId = request.PurchaseOrderId, |
|
|
|
ShopId = oldPeo.ShopId, |
|
|
|
ShopId = dbOrder.ShopId.Value, |
|
|
|
IsSubscribeKD100 = false, |
|
|
|
ExpressState = kuaiDi100Manager.GetExpressState(1) //快递100发货状态值 默认揽收
|
|
|
|
}; |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
kuaiDi100Manager.SubscribeKuaiDi100(request.NewWaybillNo, request.NewExpressId, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); |
|
|
@ -1142,15 +1179,76 @@ namespace BBWYB.Server.Business |
|
|
|
Task.Factory.StartNew(() => SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
insertPEO = fsql.Insert(newPeo); |
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
#region 更新采购sku使用的快递单号
|
|
|
|
IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null; |
|
|
|
if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴) |
|
|
|
{ |
|
|
|
orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => posku.PurchaseOrderId == request.PurchaseOrderId).ToList(); |
|
|
|
foreach (var posku in orderPurchaseSkuList) |
|
|
|
{ |
|
|
|
fsql.Delete<PurchaseExpressOrder>(request.OldWaybillNo).ExecuteAffrows(); |
|
|
|
fsql.Update<OrderPurchaseSkuInfo>().Set(psku => psku.WaybillNo, request.NewWaybillNo) |
|
|
|
if (posku.WaybillNo == request.OldWaybillNo) |
|
|
|
posku.WaybillNo = request.NewWaybillNo; |
|
|
|
} |
|
|
|
updatePurchaseOrderSku = fsql.Update<OrderPurchaseSkuInfo>().Set(psku => psku.WaybillNo, request.NewWaybillNo) |
|
|
|
.Where(psku => psku.PurchaseOrderId == request.PurchaseOrderId) |
|
|
|
.Where(psku => psku.WaybillNo == request.OldWaybillNo) |
|
|
|
.ExecuteAffrows(); |
|
|
|
fsql.Insert(newPeo).ExecuteAffrows(); |
|
|
|
.Where(psku => psku.WaybillNo == request.OldWaybillNo); |
|
|
|
|
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 计算采购单状态
|
|
|
|
var purchaseExpressOrderList = fsql.Select<ExpressOrderRelationInfo, PurchaseExpressOrder>() |
|
|
|
.InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) |
|
|
|
.Where((eori, peo) => eori.PurchaseOrderId == request.PurchaseOrderId).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 |
|
|
|
}); |
|
|
|
if (newPeo != null) |
|
|
|
purchaseExpressOrderList.Add(newPeo); |
|
|
|
var oldPurchaseOrderState = purchaseOrder.OrderState; |
|
|
|
purchaseOrder.CalculationOrderState(fsql, orderPurchaseSkuList, purchaseExpressOrderList); |
|
|
|
if (oldPurchaseOrderState != purchaseOrder.OrderState) |
|
|
|
updatePurchaseOrder = fsql.Update<OrderPurchaseInfo>(purchaseOrder.Id).Set(opi => opi.OrderState, purchaseOrder.OrderState); |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 计算订单状态
|
|
|
|
var oldOrderState = dbOrder.OrderState; |
|
|
|
dbOrder.CalculationOrderState(fsql, null, orderPurchaseInfoList); |
|
|
|
if (oldOrderState != dbOrder.OrderState) |
|
|
|
{ |
|
|
|
updateOrder = fsql.Update<Order>(dbOrder.Id).Set(o => o.OrderState, dbOrder.OrderState); |
|
|
|
|
|
|
|
#region 通知C端状态
|
|
|
|
Task.Factory.StartNew(() => SendPurchaseOrderStateToC(dbOrder.Id, dbOrder.OrderState.Value), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); |
|
|
|
#endregion
|
|
|
|
} |
|
|
|
#endregion
|
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
insertPEO?.ExecuteAffrows(); |
|
|
|
insertEORI?.ExecuteAffrows(); |
|
|
|
deleteEORI?.ExecuteAffrows(); |
|
|
|
deletePEO?.ExecuteAffrows(); |
|
|
|
updatePurchaseOrderSku?.ExecuteAffrows(); |
|
|
|
updatePurchaseOrder?.ExecuteAffrows(); |
|
|
|
updateOrder?.ExecuteAffrows(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|