Browse Source

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

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

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

@ -398,51 +398,6 @@ namespace BBWYB.Server.Business
#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 等比计算采购成本
var proportionalCalculationResultList = ProportionalCalculationCost(cargoParamGroup.CargoParamList, purchaseOrderSimpleInfo);
foreach (var proportionalCalculationResult in proportionalCalculationResultList)
@ -2646,56 +2601,43 @@ namespace BBWYB.Server.Business
{
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)
#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 temp = currentPurchaseExpressOrderList.FirstOrDefault(p => p.WaybillNo == wayBillNo);
if (temp != null)
temp.ExpressState = state;
var currentPeoList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == po.PurchaseOrderId).ToList();
var peo = currentPeoList.FirstOrDefault(p => p.WaybillNo == wayBillNo);
if (peo != null)
peo.ExpressState = state;
var oldPurchaseOrderState = purchaseOrder.OrderState;
purchaseOrder.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList);
if (purchaseOrder.OrderState != oldPurchaseOrderState)
var oldPurchaseOrderState = po.OrderState;
po.CalculationOrderState(order.IntoStoreType.Value, fsql, currentPoSkuList, currentPeoList);
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);
#region 通知齐库打包落仓情况
if (order.IntoStoreType == Enums.IntoStoreType. && state == "QianShou")
{
var currentOrderPurchaseRelationList = orderPurchaseRelationList.Where(opri => opri.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
Task.Factory.StartNew(() => qiKuManager.PublishQiKuReceiveInfo(purchaseOrder, currentOrderPurchaseRelationList, currentPurchaseOrderSkuList, purchaseExpressOrderList),
CancellationToken.None,
TaskCreationOptions.LongRunning,
taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
#endregion
}
}
var oldOrderState = order.OrderState;
order.CalculationOrderState(fsql, currentOrderSkuList, currentPurchaseOrderList);
#endregion
if (order.IntoStoreType == Enums.IntoStoreType. &&
state == "QianShou" &&
order.OrderState == Enums.OrderState. &&
inStoreOrderCheckTaskList != null &&
!inStoreOrderCheckTaskList.Any(x => x.OrderId == order.Id))
#region 推送齐库到货情况
if (order.IntoStoreType == Enums.IntoStoreType. && state == "QianShou")
{
insertInStoreOrderCheckTaskList.Add(new InStoreOrderCheckTask()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
IsChecked = false,
OrderId = order.Id,
ShopId = order.ShopId,
OrderSn = order.OrderSn
});
Task.Factory.StartNew(() => qiKuManager.PublishQikuReceiveInfo(order.Id,
wayBillNo,
currentPurchaseOrderList,
currentOrderSkuList,
purchaseExpressOrderList,
orderPurchaseRelationList,
orderPurchaseSkuList), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
#endregion
#region 计算订单状态
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);
@ -2728,6 +2670,26 @@ namespace BBWYB.Server.Business
}
#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

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

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

151
BBWYB.Server.Business/QiKuManager.cs

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

Loading…
Cancel
Save