Browse Source

关联预览,关联采购支持匹配多采购商的采购方案

yijia
shanji 2 years ago
parent
commit
85f762c8ef
  1. 9
      BBWYB.Server.API/Controllers/DataRepairController.cs
  2. 38
      BBWYB.Server.API/Controllers/PurchaseSchemeController.cs
  3. 67
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  4. 198
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  5. 22
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs

9
BBWYB.Server.API/Controllers/DataRepairController.cs

@ -25,15 +25,6 @@ namespace BBWYB.Server.API.Controllers
dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode);
}
/// <summary>
/// 修复采购商信息
/// </summary>
[HttpPost]
public void SupplementPurchaserInfo()
{
dataRepairBusiness.SupplementPurchaserInfo();
}
/// <summary>
/// 修复订单Sku成本
/// </summary>

38
BBWYB.Server.API/Controllers/PurchaseSchemeController.cs

@ -38,15 +38,15 @@ namespace BBWYB.Server.API.Controllers
return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest);
}
/// <summary>
/// 删除采购商
/// </summary>
/// <param name="deletePurchaseSchemeRequest"></param>
[HttpDelete]
public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{
purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest);
}
///// <summary>
///// 删除采购商
///// </summary>
///// <param name="deletePurchaseSchemeRequest"></param>
//[HttpDelete]
//public void DeletePurchaser([FromBody] DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
//{
// purchaseSchemeBusiness.DeletePurchaser(deletePurchaseSchemeRequest);
//}
/// <summary>
/// 删除采购方案
@ -58,16 +58,16 @@ namespace BBWYB.Server.API.Controllers
purchaseSchemeBusiness.DeletePurchaseScheme(schemeId);
}
/// <summary>
/// 查询共有采购商
/// </summary>
/// <param name="querySchemeRequest"></param>
/// <returns></returns>
[HttpPost]
public IList<Purchaser> GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest)
{
return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest);
}
///// <summary>
///// 查询共有采购商
///// </summary>
///// <param name="querySchemeRequest"></param>
///// <returns></returns>
//[HttpPost]
//public IList<Purchaser> GetSharePurchaser([FromBody] QuerySchemeRequest querySchemeRequest)
//{
// return purchaseSchemeBusiness.GetSharePurchaser(querySchemeRequest);
//}
/// <summary>
/// 查询采购方案中采购Sku的基本信息

67
BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

@ -38,73 +38,6 @@ namespace BBWYB.Server.Business
purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false);
}
public void SupplementPurchaserInfo()
{
var purlList = fsql.Select<PurchaseSchemeProduct, PurchaseScheme, Purchaser>()
.InnerJoin((psp, ps, p) => psp.SkuPurchaseSchemeId == ps.Id)
.InnerJoin((psp, ps, p) => ps.PurchaserId == p.Id)
.Where((psp, ps, p) => ps.PurchasePlatform == Enums.Platform. && string.IsNullOrEmpty(p.Id2))
.ToList((psp, ps, p) => new
{
//psp.PurchaseUrl,
psp.PurchaseProductId,
p.Id
});
var groups = purlList.GroupBy(p => p.Id);
Console.WriteLine(groups.Count());
IList<IUpdate<Purchaser>> updatePurchaserList = new List<IUpdate<Purchaser>>();
int i = 1;
foreach (var group in groups)
{
var purchaseId = group.Key;
var productId = group.Max(p => p.PurchaseProductId);
Thread.Sleep(1000);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"index {i}");
Console.ResetColor();
Console.WriteLine();
var response = purchaseSchemeBusiness.GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
{
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
Platform = Enums.Platform.,
PriceMode = Enums.PurchaseOrderMode.,
PurchaseProductId = productId
});
if (!string.IsNullOrEmpty(response?.Purchaser?.Id2))
{
if (response.Purchaser.Id2.Length > 20)
Console.WriteLine(response.Purchaser.Id2);
var update = fsql.Update<Purchaser>(purchaseId).Set(p => p.Id2, response.Purchaser.Id2);
updatePurchaserList.Add(update);
}
i++;
if (updatePurchaserList.Count >= 10)
{
fsql.Transaction(() =>
{
foreach (var update in updatePurchaserList)
update.ExecuteAffrows();
});
updatePurchaserList.Clear();
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("更新数据库更新");
Console.ResetColor();
Console.WriteLine();
}
}
if (updatePurchaserList.Count() > 0)
{
fsql.Transaction(() =>
{
foreach (var update in updatePurchaserList)
update.ExecuteAffrows();
});
}
}
public void SupplementOrderSkuCost()
{

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

@ -749,12 +749,13 @@ namespace BBWYB.Server.Business
{
if (purchaseOrder.PurchasePlatform == Enums.Platform.)
{
#region 补齐采购SKU
#region 补齐采购SKU和采购关系
var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId ||
pa.AccountName == purchaseOrder.PurchaseAccountName);
if (purchaseAccount == null)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号");
#region 查询1688采购单
var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform);
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{
@ -763,6 +764,7 @@ namespace BBWYB.Server.Business
AppToken = purchaseAccount.AppToken,
OrderId = purchaseOrder.PurchaseOrderId
});
#endregion
#region 处理采购商Id
var purchaserId = purchaseOrderSimpleInfo.PurchaserId;
@ -782,58 +784,29 @@ namespace BBWYB.Server.Business
#region 匹配采购方案
var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList();
var purchaseSchemeSkuList = fsql.Select<Purchaser, PurchaseScheme, PurchaseSchemeProductSku>()
.InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId)
.InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId)
.Where((p, ps, pss) => p.Id == purchaserId)
.Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.)
.Where((p, ps, pss) => skuIds.Contains(pss.SkuId))
.ToList((p, ps, pss) => new
{
pss.Id,
pss.SkuId,
pss.ProductId,
pss.PurchaseProductId,
pss.PurchaseSkuId,
pss.PurchaseSkuSpecId,
pss.SkuPurchaseSchemeId
});
if (purchaseSchemeSkuList.Count() == 0)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案");
#endregion
foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList)
var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
{
var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo()
{
Id = purchaseOrderSku.OrderSkuId,
CreateTime = DateTime.Now,
OrderId = request.OrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseProductId = purchaseOrderSku.ProductId,
PurchaseSkuId = purchaseOrderSku.SkuId,
ShopId = request.ShopId
};
insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo);
}
ShopId = dbOrder.ShopId,
SkuIdList = skuIds
});
if (purchaseSchemeList.Count() == 0)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案");
#endregion
#region 补齐采购关系
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{
var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList();
if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0)
var matchResultList = MatchPurchaseScheme(assOrderCostDetail.SkuId,
assOrderCostDetail.PurchaseQuantity,
purchaserId,
purchaseSchemeList,
purchaseOrderSimpleInfo);
if (matchResultList.Count() == 0)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案");
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList)
foreach (var cargoParam in matchResultList)
{
var purchaseSkuFromApi = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == currentPurchaseSchemeSku.PurchaseSkuId);
if (purchaseSkuFromApi == null)
{
throw new BusinessException($"Sku{assOrderCostDetail.SkuId}使用了采购方案{currentPurchaseSchemeSku.SkuPurchaseSchemeId}下的采购Sku{currentPurchaseSchemeSku.PurchaseSkuId},而且在采购单{purchaseOrder.PurchaseOrderId}的商品明细中没有找到该采购sku");
}
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo()
{
Id = idGenerator.NewLong(),
@ -841,16 +814,37 @@ namespace BBWYB.Server.Business
CreateTime = DateTime.Now,
OrderId = assOrderCostDetail.OrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId,
PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId,
PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId,
SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId,
PurchaseSkuId = cargoParam.SkuId,
PurchaseProductId = cargoParam.ProductId,
PurchaseSpecId = cargoParam.SpecId,
SchemeId = cargoParam.SchemeId,
Quantity = assOrderCostDetail.PurchaseQuantity,
SourceSkuId = dbOrderSku.BelongSkuId
};
insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo);
}
}
#region 补齐采购SKU
foreach (var purchaseOrderSku in purchaseOrderSimpleInfo.ItemList)
{
var orderPurchaseSkuInfo = new OrderPurchaseSkuInfo()
{
Id = purchaseOrderSku.OrderSkuId,
CreateTime = DateTime.Now,
OrderId = request.OrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseProductId = purchaseOrderSku.ProductId,
PurchaseSkuId = purchaseOrderSku.SkuId,
ShopId = request.ShopId
};
insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo);
}
#endregion
#endregion
#endregion
}
@ -1151,27 +1145,6 @@ namespace BBWYB.Server.Business
#region 查询订单sku所有采购方案
var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList();
//var purchaseSchemeSkuList = fsql.Select<Purchaser, PurchaseScheme, PurchaseSchemeProductSku>()
// .InnerJoin((p, ps, pss) => p.Id == ps.PurchaserId)
// .InnerJoin((p, ps, pss) => ps.Id == pss.SkuPurchaseSchemeId)
// .Where((p, ps, pss) => p.Id == purchaserId)
// .Where((p, ps, pss) => ps.PurchasePlatform == Enums.Platform.阿里巴巴)
// .Where((p, ps, pss) => skuIds.Contains(pss.SkuId))
// .ToList((p, ps, pss) => new
// {
// pss.Id,
// pss.SkuId,
// pss.ProductId,
// pss.PurchaseProductId,
// pss.PurchaseSkuId,
// pss.PurchaseSkuSpecId,
// pss.SkuPurchaseSchemeId
// });
//if (purchaseSchemeSkuList.Count() == 0)
// throw new BusinessException($"采购单{request.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案");
var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
{
ShopId = order.ShopId,
@ -1183,41 +1156,17 @@ namespace BBWYB.Server.Business
#region 匹配采购单所使用到的采购方案
var cargoParamList = new List<CargoParamRequest>();
foreach (var scheme in purchaseSchemeList)
foreach (var orderSku in dbOrderSkuList)
{
var samePurchaserProductList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == purchaserId).ToList();
if (samePurchaserProductList.Count() == 0)
continue;
foreach (var schemeProduct in samePurchaserProductList)
{
}
var matchResultList = MatchPurchaseScheme(orderSku.SkuId, orderSku.ItemTotal ?? 1, purchaserId, purchaseSchemeList, purchaseOrderSimpleInfo);
if (matchResultList.Count() > 0)
cargoParamList.AddRange(matchResultList);
}
if (cargoParamList.Count() == 0)
throw new BusinessException("未匹配到采购方案");
var assocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>();
//var purchaseSchemeGroups = purchaseSchemeSkuList.GroupBy(s => s.SkuPurchaseSchemeId);
//foreach (var schemeGroup in purchaseSchemeGroups)
//{
// var schemePurchaseSkuList = schemeGroup.ToList();
// if (schemePurchaseSkuList.Any(psku => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == psku.PurchaseSkuId) == 0))
// continue;
// cargoParamList.AddRange(schemePurchaseSkuList.Select(x => new CargoParamRequest()
// {
// BelongSkuId = x.SkuId,
// ProductId = x.PurchaseProductId,
// SkuId = x.PurchaseSkuId,
// Quantity = dbOrderSkuList.FirstOrDefault(s => s.SkuId == x.SkuId)?.ItemTotal ?? 1,
// SchemeId = x.SkuPurchaseSchemeId,
// SpecId = x.PurchaseSkuSpecId
// }));
//}
var belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId);
var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity);
foreach (var belongSkuGroup in belongSkuGroups)
@ -3011,5 +2960,60 @@ namespace BBWYB.Server.Business
}
}
/// <summary>
/// 匹配采购方案
/// </summary>
/// <param name="skuId"></param>
/// <param name="itemTotal"></param>
/// <param name="purchaserId"></param>
/// <param name="purchaseSchemeList"></param>
/// <param name="purchaseOrderSimpleInfo"></param>
/// <returns></returns>
private IList<CargoParamRequest> MatchPurchaseScheme(string skuId,
int itemTotal,
string purchaserId,
IList<PurchaseSchemeResponse> purchaseSchemeList,
PP_QueryOrderDetailResponse purchaseOrderSimpleInfo)
{
List<CargoParamRequest> cargoParamList = new List<CargoParamRequest>();
var currentSkuSchemeList = purchaseSchemeList.Where(ps => ps.SkuId == skuId).ToList();
if (currentSkuSchemeList.Count() > 0)
{
foreach (var scheme in currentSkuSchemeList)
{
var samePurchaserProductList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == purchaserId).ToList();
if (samePurchaserProductList.Count() == 0)
continue;
bool isMatch = true;
foreach (var schemeProduct in samePurchaserProductList)
{
if (schemeProduct.PurchaseSchemeProductSkuList.Any(pss => purchaseOrderSimpleInfo.ItemList.Count(x => x.SkuId == pss.PurchaseSkuId) == 0))
{
isMatch = false;
break;
}
}
if (isMatch)
{
foreach (var schemeProduct in samePurchaserProductList)
{
cargoParamList.AddRange(schemeProduct.PurchaseSchemeProductSkuList.Select(pss => new CargoParamRequest()
{
BelongSkuId = pss.SkuId,
ProductId = pss.PurchaseProductId,
SkuId = pss.PurchaseSkuId,
SchemeId = pss.SkuPurchaseSchemeId,
SpecId = pss.PurchaseSkuSpecId,
Quantity = (itemTotal * pss.PurchaseRatio) ?? 1
}));
}
break;
}
}
}
return cargoParamList;
}
}
}

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

@ -316,18 +316,18 @@ namespace BBWYB.Server.Business
// return fsql.Select<Purchaser>().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList();
//}
public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{
var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
//public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
//{
// var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
// ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
fsql.Transaction(() =>
{
fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows();
});
}
// fsql.Transaction(() =>
// {
// fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows();
// fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows();
// fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows();
// });
//}
public void DeletePurchaseScheme(long schemeId)
{

Loading…
Cancel
Save