Browse Source

更新齐库推送算法,万邦支持id2和memberid

yijia
shanji 2 years ago
parent
commit
320f473394
  1. 126
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  2. 22
      BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs
  3. 127
      BBWYB.Server.Business/QiKuManager.cs

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

@ -398,51 +398,6 @@ namespace BBWYB.Server.Business
#endregion #endregion
} }
////采购单总件数,由于1688运费只存在订单层,sku层没有运费,所以需要以订单总件数为基础等比计算采购运费
//var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Sum(x => x.Quantity);
//var belongSkuGroups = cargoParamGroup.CargoParamList.GroupBy(p => p.BelongSkuId);
//var belongSkuIdList = belongSkuGroups.Select(bsg => bsg.Key).ToList();
//foreach (var belongSkuGroup in belongSkuGroups)
//{
// var belongSkuId = belongSkuGroup.Key;
// //var currentOrderSkuCargoParamList = cargoParamGroup.CargoParamList.Where(p => p.BelongSkuId == belongSkuId); //找当前skuId的采购skuId
// var currentOrderSkuCargoParamList = belongSkuGroup.ToList();
// var currentSkuAmount = 0M; //采购成本
// var currentSkuTotalPurchaseQuantity = currentOrderSkuCargoParamList.Sum(x => x.Quantity); //当前skuId的采购数量总和
// var currentPurchaseFreight = purchaseOrderSimpleInfo.FreightAmount *
// (1.0M * currentSkuTotalPurchaseQuantity / purchaseSkuTotalQuantity); //采购运费
// foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList)
// {
// var currentPurchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId)
// .Sum(p => p.ProductAmount);
// var currentPurchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.SkuId)
// .Sum(p => p.Quantity);
// currentSkuAmount += currentPurchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity / currentPurchaseSkuTotalQuantity);
// //currentPurchaseFreight += purchaseOrderSimpleInfo.FreightAmount * (1.0M * currentOrderSkuCargo.Quantity / purchaseSkuTotalQuantity);
// }
// #region 成本明细
// var orderSku = orderSkus.FirstOrDefault(osku => osku.SkuId == belongSkuId);
// var orderCostDetail = new OrderCostDetail()
// {
// Id = idGenerator.NewLong(),
// CreateTime = DateTime.Now,
// DeductionQuantity = orderSku.ItemTotal.Value,
// OrderId = request.OrderId,
// ProductId = orderSku.ProductId,
// PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
// SkuId = belongSkuId,
// IsEnabled = true
// };
// orderCostDetail.CalculationOrderCostDetailCostAndProfit(currentSkuAmount,
// currentPurchaseFreight,
// 0M,
// 0M);
// insertOrderCostDetails.Add(orderCostDetail);
// #endregion
//}
#region 等比计算采购成本 #region 等比计算采购成本
var proportionalCalculationResultList = ProportionalCalculationCost(cargoParamGroup.CargoParamList, purchaseOrderSimpleInfo); var proportionalCalculationResultList = ProportionalCalculationCost(cargoParamGroup.CargoParamList, purchaseOrderSimpleInfo);
foreach (var proportionalCalculationResult in proportionalCalculationResultList) foreach (var proportionalCalculationResult in proportionalCalculationResultList)
@ -2646,56 +2601,43 @@ namespace BBWYB.Server.Business
{ {
var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList(); var currentOrderSkuList = orderSkuList.Where(osku => osku.OrderId == order.Id).ToList();
var currentPurchaseOrderList = purchaseOrderList.Where(po => po.OrderId == order.Id).ToList(); var currentPurchaseOrderList = purchaseOrderList.Where(po => po.OrderId == order.Id).ToList();
foreach (var purchaseOrder in currentPurchaseOrderList)
#region 计算采购单状态
foreach (var po in currentPurchaseOrderList)
{ {
var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); var currentPoSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == po.PurchaseOrderId).ToList();
var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); var currentPeoList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == po.PurchaseOrderId).ToList();
var temp = currentPurchaseExpressOrderList.FirstOrDefault(p => p.WaybillNo == wayBillNo); var peo = currentPeoList.FirstOrDefault(p => p.WaybillNo == wayBillNo);
if (temp != null) if (peo != null)
temp.ExpressState = state; peo.ExpressState = state;
var oldPurchaseOrderState = purchaseOrder.OrderState; var oldPurchaseOrderState = po.OrderState;
purchaseOrder.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList); po.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPoSkuList, currentPeoList);
if (purchaseOrder.OrderState != oldPurchaseOrderState) if (po.OrderState != oldPurchaseOrderState)
{ {
var update = fsql.Update<OrderPurchaseInfo>(purchaseOrder.Id).Set(po => po.OrderState, purchaseOrder.OrderState); var update = fsql.Update<OrderPurchaseInfo>(po.Id).Set(po => po.OrderState, po.OrderState);
updateOrderPurchaseList.Add(update); updateOrderPurchaseList.Add(update);
}
}
#endregion
#region 通知齐库打包落仓情况 #region 推送齐库到货情况
if (order.IntoStoreType == Enums.IntoStoreType. && state == "QianShou") if (order.IntoStoreType == Enums.IntoStoreType. && state == "QianShou")
{ {
var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); Task.Factory.StartNew(() => qiKuManager.PublishQikuReceiveInfo(order.Id,
wayBillNo,
Task.Factory.StartNew(() => qiKuManager.PublishQiKuReceiveInfo(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList), currentPurchaseOrderList,
CancellationToken.None, currentOrderSkuList,
TaskCreationOptions.LongRunning, purchaseExpressOrderList,
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); orderPurchaseRelationList,
orderPurchaseSkuList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
} }
#endregion #endregion
}
} #region 计算订单状态
var oldOrderState = order.OrderState; var oldOrderState = order.OrderState;
order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList); order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList);
if (order.IntoStoreType == Enums.IntoStoreType. &&
state == "QianShou" &&
order.OrderState == Enums.OrderState. &&
inStoreOrderCheckTaskList != null &&
!inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id))
{
insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
IsChecked = false,
OrderId = order.Id,
ShopId = order.ShopId,
OrderSn = order.OrderSn
});
}
if (order.OrderState != oldOrderState) if (order.OrderState != oldOrderState)
{ {
var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, order.OrderState); var update = fsql.Update<Order>(order.Id).Set(o => o.OrderState, order.OrderState);
@ -2728,6 +2670,26 @@ namespace BBWYB.Server.Business
} }
#endregion #endregion
} }
#endregion
#region 创建入仓单检查任务
if (order.IntoStoreType == Enums.IntoStoreType. &&
state == "QianShou" &&
order.OrderState == Enums.OrderState. &&
inStoreOrderCheckTaskList != null &&
!inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id))
{
insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
IsChecked = false,
OrderId = order.Id,
ShopId = order.ShopId,
OrderSn = order.OrderSn
});
}
#endregion
} }
#endregion #endregion

22
BBWYB.Server.Business/PurchaseScheme/PurchaseProductAPIService.cs

@ -31,8 +31,11 @@ namespace BBWYB.Server.Business
private List<string> locationIdList; private List<string> locationIdList;
private List<string> priceIdList; private List<string> priceIdList;
private IList<string> invalidPurchaserNameList;
public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache) public PurchaseProductAPIService(RestApiService restApiService, IMemoryCache memoryCache)
{ {
invalidPurchaserNameList = new List<string>() { "超级工厂", "实力工厂", "实力供应商" };
this.memoryCache = memoryCache; this.memoryCache = memoryCache;
this.restApiService = restApiService; this.restApiService = restApiService;
_1688ProductDetailRequestHeader = new Dictionary<string, string>() _1688ProductDetailRequestHeader = new Dictionary<string, string>()
@ -129,15 +132,19 @@ namespace BBWYB.Server.Business
if (string.IsNullOrEmpty(purchaserName)) if (string.IsNullOrEmpty(purchaserName))
purchaserName = jobject["item"]["seller_info"].Value<string>("shop_name"); purchaserName = jobject["item"]["seller_info"].Value<string>("shop_name");
var purchaserLocation = jobject["item"].Value<string>("location"); var purchaserLocation = jobject["item"].Value<string>("location");
var memberId = jobject["item"]["seller_info"].Value<string>("sid");
var purchaserId2 = jobject["item"]["seller_info"].Value<string>("shop_name");
return new PurchaseSkuBasicInfoResponse() return new PurchaseSkuBasicInfoResponse()
{ {
Purchaser = new Model.Db.Purchaser() Purchaser = new Purchaser()
{ {
Id = purchaserId, Id = purchaserId,
Location = purchaserLocation, Location = purchaserLocation,
Name = purchaserName, Name = purchaserName,
Platform = request.Platform Platform = request.Platform,
Id2 = purchaserId2,
MemberId = memberId
}, },
ItemList = list, ItemList = list,
PurchasePlatform = request.Platform, PurchasePlatform = request.Platform,
@ -208,6 +215,14 @@ namespace BBWYB.Server.Business
var jsonStr = match.Groups[2].Value; var jsonStr = match.Groups[2].Value;
var jobject = JObject.Parse(jsonStr); var jobject = JObject.Parse(jsonStr);
#region 验证purchaserName
var purchaserName = jobject["globalData"]["tempModel"]["companyName"].ToString();
if (invalidPurchaserNameList.Contains(purchaserName))
{
//取
}
#endregion
var location = ""; var location = "";
for (var i = 0; i < locationIdList.Count(); i++) for (var i = 0; i < locationIdList.Count(); i++)
{ {
@ -217,11 +232,12 @@ namespace BBWYB.Server.Business
break; break;
} }
} }
var purchaser = new Purchaser() var purchaser = new Purchaser()
{ {
Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(), Id = jobject["globalData"]["tempModel"]["sellerUserId"].ToString(),
Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(), Id2 = jobject["globalData"]["tempModel"]["sellerLoginId"]?.ToString(),
Name = jobject["globalData"]["tempModel"]["companyName"].ToString(), Name = purchaserName,
MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(), MemberId = jobject["globalData"]?["tempModel"]?["sellerMemberId"]?.ToString(),
Location = location, Location = location,
Platform = Enums.Platform. Platform = Enums.Platform.

127
BBWYB.Server.Business/QiKuManager.cs

@ -35,104 +35,91 @@ namespace BBWYB.Server.Business
this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>()); this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
} }
/// <summary> public void PublishQikuReceiveInfo(string orderId,
/// 通知齐库到货情况 string wayBillNo,
/// <para>支持关联的采购平台以来源SKU为单位通知齐库</para> IList<OrderPurchaseInfo> currentPurchaseOrderList,
/// <para>不支持关联的采购平台以采购单为单位通知齐库</para> IList<OrderSku> currentOrderSkuList,
/// </summary> IList<PurchaseExpressOrder> purchaseExpressOrderList_all,
/// <param name="orderPurchaseInfo"></param> IList<OrderPurchaseRelationInfo> orderPurchaseRelationList_all,
/// <param name="orderPurchaseRelationInfoList"></param> IList<OrderPurchaseSkuInfo> orderPurchaseSkuList_all)
/// <param name="orderPurchaseSkuInfoList"></param>
/// <param name="purchaseExpressOrderList"></param>
public void PublishQiKuReceiveInfo(OrderPurchaseInfo orderPurchaseInfo,
IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{
if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.)
PublishQiKuByRelation(orderPurchaseRelationInfoList, orderPurchaseSkuInfoList, purchaseExpressOrderList);
else
PublishQiKuPurchaseExpressOrder(orderPurchaseInfo, purchaseExpressOrderList);
}
private void PublishQiKuByRelation(IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
IList<OrderPurchaseSkuInfo> orderPurchaseSkuInfoList,
IList<PurchaseExpressOrder> purchaseExpressOrderList)
{ {
try try
{ {
var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId); //查询跟此快递单有关的当前订单的采购单
foreach (var relationGroup in relationGroups) var relationByWaybillNoPurchaseOrderIds = purchaseExpressOrderList_all.Where(peo => peo.OrderId == orderId && peo.WaybillNo == wayBillNo)
.Select(peo => peo.PurchaseOrderId)
.ToList();
var relationByWaybillNoPurchaseOrderList = currentPurchaseOrderList.Where(po => relationByWaybillNoPurchaseOrderIds.Contains(po.PurchaseOrderId)).ToList();
//查询跟采购单有关联的订单sku
var relationOrderSkuList = currentOrderSkuList.Where(osku => relationByWaybillNoPurchaseOrderList.Any(po => po.BelongSkuIds.Contains(osku.SkuId))).ToList();
foreach (var osku in relationOrderSkuList)
{
//查询跟此订单sku有关的采购单
var relationByOrderSkuPurchaseOrderList = currentPurchaseOrderList.Where(po => po.BelongSkuIds.Contains(osku.SkuId)).ToList();
var isSignAll = true;
foreach (var po in relationByOrderSkuPurchaseOrderList)
{ {
bool isSignAll = true; if (po.PurchasePlatform == Enums.Platform.)
foreach (var relation in relationGroup)
{ {
var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId); //查询跟此sku有关的关联信息
if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo)) var oriRelationList = orderPurchaseRelationList_all.Where(ori => ori.OrderId == osku.OrderId &&
ori.PurchaseOrderId == po.PurchaseOrderId &&
ori.BelongSkuId == osku.SkuId).ToList();
if (oriRelationList.Count() == 0)
{ {
isSignAll = false; isSignAll = false;
continue; break;
} }
var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo); foreach (var relation in oriRelationList)
if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou") {
var pos = orderPurchaseSkuList_all.FirstOrDefault(pos => pos.OrderId == relation.OrderId &&
pos.PurchaseOrderId == relation.PurchaseOrderId &&
pos.PurchaseSkuId == relation.PurchaseSkuId);
if (pos == null || string.IsNullOrEmpty(pos.WaybillNo))
{ {
isSignAll = false; isSignAll = false;
continue; break;
}
} }
var peo = purchaseExpressOrderList_all.FirstOrDefault(x => x.WaybillNo == pos.WaybillNo);
restApiService.SendRequest("http://qiku.qiyue666.com", if (peo == null || peo.ExpressState != "QianShou")
"/Api/PackPurchaseTask/UpdateAvailabilityState",
new
{ {
availability = isSignAll ? 0 : 1, isSignAll = false;
orderId = relationGroup.FirstOrDefault().OrderId, break;
skuId = relationGroup.Key
},
null,
HttpMethod.Post);
} }
} }
catch (Exception ex) if (!isSignAll)
{ break;
}
} }
else
private void PublishQiKuPurchaseExpressOrder(OrderPurchaseInfo orderPurchaseInfo, IList<PurchaseExpressOrder> purchaseExpressOrderList)
{ {
try var peoList = purchaseExpressOrderList_all.Where(x => x.OrderId == osku.OrderId && x.PurchaseOrderId == po.PurchaseOrderId);
if (peoList.Count() == 0 || peoList.Any(peo => peo.ExpressState != "QianShou"))
{ {
if (string.IsNullOrEmpty(orderPurchaseInfo.BelongSkuIds)) isSignAll = false;
return; break;
}
var orderId = purchaseExpressOrderList.FirstOrDefault().OrderId; }
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderId).ToList(); }
//推送齐库
var isSignAll = !purchaseExpressOrderList.Any(x => x.ExpressState != "QianShou");
var notifyList = orderSkuList.Where(osku => orderPurchaseInfo.BelongSkuIds.Contains(osku.SkuId)).ToList(); var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com",
if (notifyList.Count() == 0)
return;
foreach (var notifySku in notifyList)
{
restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState", "/Api/PackPurchaseTask/UpdateAvailabilityState",
new new
{ {
availability = isSignAll ? 0 : 1, availability = isSignAll ? 0 : 1,
orderId = notifySku.OrderId, orderId = osku.OrderId,
skuId = notifySku.BelongSkuId skuId = osku.BelongSkuId
}, }, null, HttpMethod.Post);
null, if (publishResult.StatusCode != System.Net.HttpStatusCode.OK)
HttpMethod.Post); throw new Exception(publishResult.Content);
} }
} }
catch catch
{ {
} }
} }

Loading…
Cancel
Save