Browse Source

订单结构调整

yijia
shanji 2 years ago
parent
commit
f68615777a
  1. 27
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  2. 146
      BBWYB.Server.Business/Order/OrderBusiness.cs
  3. 638
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  4. 66
      BBWYB.Server.Business/QiKuManager.cs
  5. 10
      BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs
  6. 2
      BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs
  7. 6
      BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs

27
BBWYB.Server.API/Controllers/PurchaseOrderController.cs

@ -1,4 +1,6 @@
using BBWYB.Server.Business;
using BBWYB.Common.Models;
using BBWYB.Server.API.Filters;
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
@ -75,7 +77,8 @@ namespace BBWYB.Server.API.Controllers
[HttpPost]
public void SignPurchaseOrder([FromBody] SignPurchaseOrderRequest request)
{
purchaseOrderBusiness.SignPurchaseOrder(request);
throw new BusinessException("SignPurchaseOrder接口已经停用");
//purchaseOrderBusiness.SignPurchaseOrder(request);
}
/// <summary>
@ -109,5 +112,25 @@ namespace BBWYB.Server.API.Controllers
{
purchaseOrderBusiness.CallbackFrom1688(message);
}
[Consumes("application/x-www-form-urlencoded")]
[HttpPost]
public IActionResult KuaiDi100Publish([FromForm] string sign, [FromForm] string param)
{
#region 去掉本次请求的DTO格式
var filters = ControllerContext.ActionDescriptor.FilterDescriptors;
var filterToRemove = filters.FirstOrDefault(f => f.Filter.GetType() == typeof(ResultFilter));
if (filterToRemove != null)
filters.Remove(filterToRemove);
#endregion
purchaseOrderBusiness.KuaiDi100Publish(param);
return new JsonResult(new
{
result = true,
returnCode = "200",
message = "成功"
});
}
}
}

146
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -153,15 +153,17 @@ namespace BBWYB.Server.Business
#region 处理采购信息
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList();
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList<OrderPurchaseSkuInfoResponse>();
var purchaseExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(peo => orderIdList.Contains(peo.OrderId)).ToList<PurchaseExpressOrderResponse>();
foreach (var order in orderList)
{
order.OrderPurchaseInfoList = orderPurchaseInfoList.Where(op => op.OrderId == order.Id).ToList();
foreach (var purchaseOrder in order.OrderPurchaseInfoList)
foreach (var orderPurchaseInfo in order.OrderPurchaseInfoList)
{
purchaseOrder.ExpressState = orderPurchaseSkuInfoList.FirstOrDefault(x => !string.IsNullOrEmpty(x.ExpressState) &&
x.PurchaseOrderId == purchaseOrder.PurchaseOrderId)?.ExpressState;
orderPurchaseInfo.OrderPurchaseSkuInfoList = orderPurchaseSkuInfoList.Where(opsi => opsi.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
orderPurchaseInfo.PurchaseExpressOrderList = purchaseExpressOrderList.Where(peo=>peo.PurchaseOrderId == orderPurchaseInfo.PurchaseOrderId).ToList();
}
}
@ -174,81 +176,81 @@ namespace BBWYB.Server.Business
};
}
public void OutStock(OutStockRequest request)
{
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
if (dbOrder == null)
throw new BusinessException($"订单{request.OrderId}不存在");
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList();
var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
dbOrderPurchaseInfo.WaybillNo = request.WayBillNo;
dbOrderPurchaseInfo.SourceExpressId = request.SourceExpressId;
dbOrderPurchaseInfo.SourceExpressName = request.SourceExpressName;
dbOrderPurchaseInfo.TargetExpressId = request.TargetExpressId;
dbOrderPurchaseInfo.TargetExpressName = request.TargetExpressName;
dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.;
#region 订单状态
dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList);
#endregion
//public void OutStock(OutStockRequest request)
//{
// var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
// if (dbOrder == null)
// throw new BusinessException($"订单{request.OrderId}不存在");
if (!string.IsNullOrEmpty(request.TargetExpressId))
{
#region 订阅快递100
// var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true).ToList();
// var dbOrderPurchaseInfo = dbOrderPurchaseInfoList.FirstOrDefault(opi => opi.PurchaseOrderId == request.PurchaseOrderId);
#endregion
// dbOrderPurchaseInfo.WaybillNo = request.WayBillNo;
// dbOrderPurchaseInfo.SourceExpressId = request.SourceExpressId;
// dbOrderPurchaseInfo.SourceExpressName = request.SourceExpressName;
// dbOrderPurchaseInfo.TargetExpressId = request.TargetExpressId;
// dbOrderPurchaseInfo.TargetExpressName = request.TargetExpressName;
// dbOrderPurchaseInfo.OrderState = Enums.PurchaseOrderState.待收货;
//try
//{
// opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform)
// .OutStock(new OP_OutStockRequest()
// #region 订单状态
// dbOrder.CalculationOrderState(fsql, null, dbOrderPurchaseInfoList);
// #endregion
// if (!string.IsNullOrEmpty(request.TargetExpressId))
// {
// #region 订阅快递100
// #endregion
// //try
// //{
// // opPlatformClientFactory.GetClient((AdapterEnums.PlatformType)request.Platform)
// // .OutStock(new OP_OutStockRequest()
// // {
// // AppKey = request.AppKey,
// // AppSecret = request.AppSecret,
// // AppToken = request.AppToken,
// // ExpressId = request.TargetExpressId,
// // ExpressName = request.TargetExpressName,
// // OrderId = request.OrderId,
// // Platform = (AdapterEnums.PlatformType)request.Platform,
// // WayBillNo = request.WayBillNo
// // });
// //}
// //catch (Exception ex)
// //{
// // nLogManager.Default().Error(ex, $"OutStock Request {JsonConvert.SerializeObject(request)}");
// //}
// }
// #region 通知C端出库
// //通知C端
// try
// {
// restApiService.SendRequest("https://bbwy.qiyue666.com",
// "/Api/PurchaseOrder/QuanTanSendGoodsCallback",
// new
// {
// AppKey = request.AppKey,
// AppSecret = request.AppSecret,
// AppToken = request.AppToken,
// ExpressId = request.TargetExpressId,
// ExpressName = request.TargetExpressName,
// OrderId = request.OrderId,
// Platform = (AdapterEnums.PlatformType)request.Platform,
// WayBillNo = request.WayBillNo
// });
//}
//catch (Exception ex)
//{
// nLogManager.Default().Error(ex, $"OutStock Request {JsonConvert.SerializeObject(request)}");
//}
}
#region 通知C端出库
//通知C端
try
{
restApiService.SendRequest("https://bbwy.qiyue666.com",
"/Api/PurchaseOrder/QuanTanSendGoodsCallback",
new
{
OrderId = request.OrderId,
ExpressId = request.SourceExpressId,
ExpressName = request.SourceExpressName,
request.WayBillNo
},
null,
HttpMethod.Post);
}
catch (Exception ex)
{
// ExpressId = request.SourceExpressId,
// ExpressName = request.SourceExpressName,
// request.WayBillNo
// },
// null,
// HttpMethod.Post);
// }
// catch (Exception ex)
// {
}
#endregion
// }
// #endregion
fsql.Transaction(() =>
{
fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo).ExecuteAffrows();
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
});
}
// fsql.Transaction(() =>
// {
// fsql.Update<OrderPurchaseInfo>().SetSource(dbOrderPurchaseInfo).ExecuteAffrows();
// fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState).ExecuteAffrows();
// });
//}
public void CancelOrder(CancelOrderRequest request, string mdsToken)
{

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

@ -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
///// <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)
//{
// 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()
// string currentProgress = string.Empty;
// string wayBillNoResponseInfo = string.Empty;
// string expressCompanyListInfo = string.Empty;
// string expressCompanyInfo = string.Empty;
// string orderId = string.Empty;
// long? shopId = null;
// try
// {
// 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
// });
// #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
//}
//#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
// //#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
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}");
}
}
// #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
/// <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>>();
// //#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}");
// }
//}
var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value<string>("statusChanged").ToUpper();
var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children();
///// <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 purchaseOrderIds = orderLogsItems.Select(x => x.Value<string>("orderId")).Distinct().ToList();
var orderEntryIds = orderLogsItems.Select(x => x.Value<string>("orderEntryId")).Distinct().ToList();
// var statusChanged = jObject["data"]["OrderLogisticsTracingModel"].Value<string>("statusChanged").ToUpper();
// var orderLogsItems = jObject["data"]["OrderLogisticsTracingModel"]["orderLogsItems"].Children();
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).ToList();
// var purchaseOrderIds = orderLogsItems.Select(x => x.Value<string>("orderId")).Distinct().ToList();
// var orderEntryIds = orderLogsItems.Select(x => x.Value<string>("orderEntryId")).Distinct().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 dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => purchaseOrderIds.Contains(opi.PurchaseOrderId) && opi.IsEnabled == true).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();
// var dbOrderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>()
// .WhereIf(purchaseOrderIds.Count() > 1, ops => purchaseOrderIds.Contains(ops.PurchaseOrderId))
// .WhereIf(purchaseOrderIds.Count() == 1, ops => ops.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;
}
}
// var dbOrderPurchaseRelationInfoList = fsql.Select<OrderPurchaseRelationInfo>()
// .WhereIf(purchaseOrderIds.Count() > 1, opr => purchaseOrderIds.Contains(opr.PurchaseOrderId))
// .WhereIf(purchaseOrderIds.Count() == 1, opr => opr.PurchaseOrderId == purchaseOrderIds[0])
// .ToList();
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)
{
// 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
}
}
// }
// }
// #endregion
// }
// }
if (updateOrderPurchaseSkuInfoList.Count() > 0 || updateOrderPurchaseInfoList.Count() > 0)
{
fsql.Transaction(() =>
{
foreach (var update in updateOrderPurchaseSkuInfoList)
update.ExecuteAffrows();
foreach (var update in updateOrderPurchaseInfoList)
update.ExecuteAffrows();
});
}
// 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);
}
// }, 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);
}
}
}
}

66
BBWYB.Server.Business/QiKuManager.cs

@ -0,0 +1,66 @@
using BBWYB.Common.Http;
using BBWYB.Common.Models;
using BBWYB.Server.Model.Db;
namespace BBWYB.Server.Business
{
public class QiKuManager : IDenpendency
{
private RestApiService restApiService;
public QiKuManager(RestApiService restApiService)
{
this.restApiService = restApiService;
}
/// <summary>
/// 通知齐库
/// </summary>
/// <param name="orderPurchaseRelationInfoList"></param>
/// <param name="orderPurchaseSkuInfoList"></param>
/// <param name="purchaseExpressOrderList"></param>
public void PublishQiKu(IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{
try
{
var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId);
foreach (var relationGroup in relationGroups)
{
bool isSignAll = true;
foreach (var relation in relationGroup)
{
var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId);
if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo))
{
isSignAll = false;
continue;
}
var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo);
if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou")
{
isSignAll = false;
continue;
}
}
restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState",
new
{
availability = isSignAll ? 0 : 1,
orderId = relationGroup.FirstOrDefault().OrderId,
skuId = relationGroup.Key
},
null,
HttpMethod.Post);
}
}
catch (Exception ex)
{
}
}
}
}

10
BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs

@ -101,11 +101,11 @@ namespace BBWYB.Server.Model.Db
[Column(StringLength = 500)]
public string Remark { get; set; }
/// <summary>
/// 是否签收
/// </summary>
[Column(DbType = "bit")]
public bool? IsSign { get; set; } = false;
///// <summary>
///// 是否签收
///// </summary>
//[Column(DbType = "bit")]
//public bool? IsSign { get; set; } = false;
/// <summary>
/// 꽃뭔데榴檄

2
BBWYB.Server.Model/Db/Order/PurchaseExpressOrder.cs

@ -35,7 +35,7 @@ namespace BBWYB.Server.Model.Db
public string ExpressContent { get; set; }
/// <summary>
/// 物流状态
/// 物流状态 (ZaiTu,LanShou,QianShou,PaiJian,Unknow)
/// </summary>
[Column(StringLength = 100)]
public string ExpressState { get; set; }

6
BBWYB.Server.Model/Dto/Response/Order/OrderPurchaseInfoResponse.cs

@ -4,12 +4,6 @@ namespace BBWYB.Server.Model.Dto
{
public class OrderPurchaseInfoResponse : OrderPurchaseInfo
{
///// <summary>
///// 物流状态
///// <para>1688物流状态: 发货(CONSIGN)、揽收(ACCEPT)、运输(TRANSPORT)、派送(DELIVERING)、签收(SIGN)</para>
///// </summary>
//public string ExpressState { get; set; }
/// <summary>
/// 采购sku列表
/// </summary>

Loading…
Cancel
Save