Browse Source

修改采购单接口

yijia
shanji 2 years ago
parent
commit
5b13f33057
  1. 182
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

182
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -1088,69 +1088,167 @@ 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
newPeo = new PurchaseExpressOrder()
#region 新快递单号验证
if (!newWaybillNoRelationList.Any(eori => eori.PurchaseOrderId == request.PurchaseOrderId))
{
WaybillNo = request.NewWaybillNo,
TargetExpressId = request.NewExpressId,
TargetExpressName = request.NewExpressName,
CreateTime = DateTime.Now,
OrderId = request.OrderId,
PurchaseOrderId = request.PurchaseOrderId,
ShopId = oldPeo.ShopId,
ExpressState = kuaiDi100Manager.GetExpressState(1) //快递100发货状态值 默认揽收
};
try
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,
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");
newPeo.IsSubscribeKD100 = true;
}
catch (Exception ex)
{
nLogManager.Default().Error(ex, $"EditPurchaseExpressOrder,Request:{JsonConvert.SerializeObject(request)}");
#region 订阅失败发送钉钉通知
var dingdingMsg = new StringBuilder();
dingdingMsg.AppendLine($"错误:{ex.Message}");
dingdingMsg.AppendLine($"采购订单号:{request.PurchaseOrderId}");
dingdingMsg.AppendLine($"拳探订单号:{request.OrderId}");
dingdingMsg.AppendLine($"拳探订单Sn:{dbOrder.OrderSn}");
dingdingMsg.AppendLine($"源物流公司:无");
dingdingMsg.AppendLine($"目标物流公司:{request.NewExpressName} {request.NewExpressId}");
dingdingMsg.AppendLine($"快递单号:{request.NewWaybillNo}");
dingdingMsg.AppendLine("触发环节:修改物流单号");
dingdingMsg.Append($"店铺名:{shop.ShopName}");
Task.Factory.StartNew(() => SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
#endregion
}
insertPEO = fsql.Insert(newPeo);
}
#endregion
#region 更新采购sku使用的快递单号
IList<OrderPurchaseSkuInfo> orderPurchaseSkuList = null;
if (purchaseOrder.PurchasePlatform == Enums.Platform.)
{
kuaiDi100Manager.SubscribeKuaiDi100(request.NewWaybillNo, request.NewExpressId, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish");
newPeo.IsSubscribeKD100 = true;
orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>().Where(posku => posku.PurchaseOrderId == request.PurchaseOrderId).ToList();
foreach (var posku in orderPurchaseSkuList)
{
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);
}
catch (Exception ex)
#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)
{
nLogManager.Default().Error(ex, $"EditPurchaseExpressOrder,Request:{JsonConvert.SerializeObject(request)}");
#region 订阅失败发送钉钉通知
var dingdingMsg = new StringBuilder();
dingdingMsg.AppendLine($"错误:{ex.Message}");
dingdingMsg.AppendLine($"采购订单号:{request.PurchaseOrderId}");
dingdingMsg.AppendLine($"拳探订单号:{request.OrderId}");
dingdingMsg.AppendLine($"拳探订单Sn:{dbOrder.OrderSn}");
dingdingMsg.AppendLine($"源物流公司:无");
dingdingMsg.AppendLine($"目标物流公司:{request.NewExpressName} {request.NewExpressId}");
dingdingMsg.AppendLine($"快递单号:{request.NewWaybillNo}");
dingdingMsg.AppendLine("触发环节:修改物流单号");
dingdingMsg.Append($"店铺名:{shop.ShopName}");
Task.Factory.StartNew(() => SendDingDingOnKD100SubscribeFail(dingdingMsg.ToString()), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
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(() =>
{
fsql.Delete<PurchaseExpressOrder>(request.OldWaybillNo).ExecuteAffrows();
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();
insertPEO?.ExecuteAffrows();
insertEORI?.ExecuteAffrows();
deleteEORI?.ExecuteAffrows();
deletePEO?.ExecuteAffrows();
updatePurchaseOrderSku?.ExecuteAffrows();
updatePurchaseOrder?.ExecuteAffrows();
updateOrder?.ExecuteAffrows();
});
}

Loading…
Cancel
Save