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); dataRepairBusiness.SubscribeKD100(waybillNo, targetCompanyCode);
} }
/// <summary>
/// 修复采购商信息
/// </summary>
[HttpPost]
public void SupplementPurchaserInfo()
{
dataRepairBusiness.SupplementPurchaserInfo();
}
/// <summary> /// <summary>
/// 修复订单Sku成本 /// 修复订单Sku成本
/// </summary> /// </summary>

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

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

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

@ -38,73 +38,6 @@ namespace BBWYB.Server.Business
purchaseOrderBusiness.OnSomeOnePurchaseOrderChanged(pid, false); 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() public void SupplementOrderSkuCost()
{ {

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

@ -749,12 +749,13 @@ namespace BBWYB.Server.Business
{ {
if (purchaseOrder.PurchasePlatform == Enums.Platform.) if (purchaseOrder.PurchasePlatform == Enums.Platform.)
{ {
#region 补齐采购SKU #region 补齐采购SKU和采购关系
var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId || var purchaseAccount = dbPurchaseAccountList.FirstOrDefault(pa => pa.Id == purchaseOrder.PurchaseAccountId ||
pa.AccountName == purchaseOrder.PurchaseAccountName); pa.AccountName == purchaseOrder.PurchaseAccountName);
if (purchaseAccount == null) if (purchaseAccount == null)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号"); throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId}缺少有效的采购账号");
#region 查询1688采购单
var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform); var client = ppPlatformClientFactory.GetClient((AdapterEnums.PlatformType)purchaseOrder.PurchasePlatform);
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest() var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{ {
@ -763,6 +764,7 @@ namespace BBWYB.Server.Business
AppToken = purchaseAccount.AppToken, AppToken = purchaseAccount.AppToken,
OrderId = purchaseOrder.PurchaseOrderId OrderId = purchaseOrder.PurchaseOrderId
}); });
#endregion
#region 处理采购商Id #region 处理采购商Id
var purchaserId = purchaseOrderSimpleInfo.PurchaserId; var purchaserId = purchaseOrderSimpleInfo.PurchaserId;
@ -782,58 +784,29 @@ namespace BBWYB.Server.Business
#region 匹配采购方案 #region 匹配采购方案
var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList(); var skuIds = purchaseOrder.AssocationOrderCostDetailList.Select(ocd => ocd.SkuId).ToList();
var purchaseSchemeSkuList = fsql.Select<Purchaser, PurchaseScheme, PurchaseSchemeProductSku>() var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
.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 orderPurchaseSkuInfo = new OrderPurchaseSkuInfo() ShopId = dbOrder.ShopId,
{ SkuIdList = skuIds
Id = purchaseOrderSku.OrderSkuId, });
CreateTime = DateTime.Now, if (purchaseSchemeList.Count() == 0)
OrderId = request.OrderId, throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id{purchaserId} 未匹配到采购方案");
PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseProductId = purchaseOrderSku.ProductId,
PurchaseSkuId = purchaseOrderSku.SkuId,
ShopId = request.ShopId
};
insertOrderPurchaseSkuInfoList.Add(orderPurchaseSkuInfo);
}
#endregion #endregion
#region 补齐采购关系 #region 补齐采购关系
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList) foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{ {
var currentPurchaseSchemeSkuList = purchaseSchemeSkuList.Where(x => x.SkuId == assOrderCostDetail.SkuId).ToList(); var matchResultList = MatchPurchaseScheme(assOrderCostDetail.SkuId,
if (currentPurchaseSchemeSkuList == null || currentPurchaseSchemeSkuList.Count() == 0) assOrderCostDetail.PurchaseQuantity,
purchaserId,
purchaseSchemeList,
purchaseOrderSimpleInfo);
if (matchResultList.Count() == 0)
throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案"); throw new BusinessException($"采购单{purchaseOrder.PurchaseOrderId} 采购商Id {purchaserId} Sku{assOrderCostDetail.SkuId}缺少采购方案");
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId); foreach (var cargoParam in matchResultList)
foreach (var currentPurchaseSchemeSku in currentPurchaseSchemeSkuList)
{ {
var purchaseSkuFromApi = purchaseOrderSimpleInfo.ItemList.FirstOrDefault(x => x.SkuId == currentPurchaseSchemeSku.PurchaseSkuId); var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
if (purchaseSkuFromApi == null)
{
throw new BusinessException($"Sku{assOrderCostDetail.SkuId}使用了采购方案{currentPurchaseSchemeSku.SkuPurchaseSchemeId}下的采购Sku{currentPurchaseSchemeSku.PurchaseSkuId},而且在采购单{purchaseOrder.PurchaseOrderId}的商品明细中没有找到该采购sku");
}
var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo() var orderPurchaseRelationInfo = new OrderPurchaseRelationInfo()
{ {
Id = idGenerator.NewLong(), Id = idGenerator.NewLong(),
@ -841,16 +814,37 @@ namespace BBWYB.Server.Business
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
OrderId = assOrderCostDetail.OrderId, OrderId = assOrderCostDetail.OrderId,
PurchaseOrderId = purchaseOrder.PurchaseOrderId, PurchaseOrderId = purchaseOrder.PurchaseOrderId,
PurchaseSkuId = currentPurchaseSchemeSku.PurchaseSkuId, PurchaseSkuId = cargoParam.SkuId,
PurchaseProductId = currentPurchaseSchemeSku.PurchaseProductId, PurchaseProductId = cargoParam.ProductId,
PurchaseSpecId = currentPurchaseSchemeSku.PurchaseSkuSpecId, PurchaseSpecId = cargoParam.SpecId,
SchemeId = currentPurchaseSchemeSku.SkuPurchaseSchemeId, SchemeId = cargoParam.SchemeId,
Quantity = assOrderCostDetail.PurchaseQuantity, Quantity = assOrderCostDetail.PurchaseQuantity,
SourceSkuId = dbOrderSku.BelongSkuId SourceSkuId = dbOrderSku.BelongSkuId
}; };
insertOrderPurchaseRelationInfoList.Add(orderPurchaseRelationInfo); 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 #endregion
} }
@ -1151,27 +1145,6 @@ namespace BBWYB.Server.Business
#region 查询订单sku所有采购方案 #region 查询订单sku所有采购方案
var skuIds = dbOrderSkuList.Select(osku => osku.SkuId).ToList(); 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() var purchaseSchemeList = purchaseSchemeBusiness.GetPurchaseSchemeList(new QuerySchemeRequest()
{ {
ShopId = order.ShopId, ShopId = order.ShopId,
@ -1183,41 +1156,17 @@ namespace BBWYB.Server.Business
#region 匹配采购单所使用到的采购方案 #region 匹配采购单所使用到的采购方案
var cargoParamList = new List<CargoParamRequest>(); 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(); var matchResultList = MatchPurchaseScheme(orderSku.SkuId, orderSku.ItemTotal ?? 1, purchaserId, purchaseSchemeList, purchaseOrderSimpleInfo);
if (samePurchaserProductList.Count() == 0) if (matchResultList.Count() > 0)
continue; cargoParamList.AddRange(matchResultList);
foreach (var schemeProduct in samePurchaserProductList)
{
}
} }
if (cargoParamList.Count() == 0) if (cargoParamList.Count() == 0)
throw new BusinessException("未匹配到采购方案"); throw new BusinessException("未匹配到采购方案");
var assocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>(); 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 belongSkuGroups = cargoParamList.GroupBy(p => p.BelongSkuId);
var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity); var purchaseSkuTotalQuantity = cargoParamList.Sum(x => x.Quantity);
foreach (var belongSkuGroup in belongSkuGroups) 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(); // return fsql.Select<Purchaser>().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList();
//} //}
public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest) //public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{ //{
var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId && // var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id); // ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
fsql.Transaction(() => // fsql.Transaction(() =>
{ // {
fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows(); // fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows(); // fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows(); // fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows();
}); // });
} //}
public void DeletePurchaseScheme(long schemeId) public void DeletePurchaseScheme(long schemeId)
{ {

Loading…
Cancel
Save