Browse Source

采购方案增加各统计字段

yijia
shanji 2 years ago
parent
commit
02a55d1ec9
  1. 131
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  2. 5
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs
  3. 5
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs

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

@ -395,6 +395,7 @@ namespace BBWYB.Server.Business
psReq.SchemeGroupId = newPurchaseGroupId; psReq.SchemeGroupId = newPurchaseGroupId;
var defaultCost = 0M; var defaultCost = 0M;
decimal? bargainingCost = null; decimal? bargainingCost = null;
var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
var ps = new PurchaseScheme() var ps = new PurchaseScheme()
{ {
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
@ -426,11 +427,13 @@ namespace BBWYB.Server.Business
//ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); //ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
defaultCost += pssReq.DefaultPrice ?? 0; defaultCost += pssReq.DefaultPrice ?? 0;
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) if (isContainsActualPrice)
{ {
if (bargainingCost == null) if (bargainingCost == null)
bargainingCost = 0M; bargainingCost = 0M;
bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0)
pss.LastBargainingTime = DateTime.Now;
} }
#region 处理历史版本 #region 处理历史版本
@ -453,6 +456,8 @@ namespace BBWYB.Server.Business
ps.DefaultCost = defaultCost; ps.DefaultCost = defaultCost;
ps.BargainingCost = bargainingCost; ps.BargainingCost = bargainingCost;
if (bargainingCost != null)
ps.LastBargainingTime = DateTime.Now;
var historyPs = ps.Map<HistoryPurchaseScheme>(); var historyPs = ps.Map<HistoryPurchaseScheme>();
historyPs.HistoryId = idGenerator.NewLong(); historyPs.HistoryId = idGenerator.NewLong();
insertHistoryPSList.Add(historyPs); insertHistoryPSList.Add(historyPs);
@ -465,7 +470,15 @@ namespace BBWYB.Server.Business
{ {
ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList); ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList);
var editSchemeIdList = batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id).ToList(); var editSchemeIdList = batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id).ToList();
List<PurchaseScheme> dbPurchaseSchemes = fsql.Select<PurchaseScheme>().Where(ps => editSchemeIdList.Contains(ps.Id)).ToList(); var dbPurchaseSchemes = GetPurchaseSchemeList(new QuerySchemeRequest()
{
SchemeIdList = editSchemeIdList,
IncludePurchaseSkuBasicInfo = 0,
IncludeSkuStatisticsInfo = 0
});
var dbPssList = dbPurchaseSchemes.SelectMany(ps => ps.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList));
//List<PurchaseScheme> dbPurchaseSchemes = fsql.Select<PurchaseScheme>().Where(ps => editSchemeIdList.Contains(ps.Id)).ToList();
deletePartsSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id)); deletePartsSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList) foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
@ -477,6 +490,7 @@ namespace BBWYB.Server.Business
var newVersion = dbps.Version + 1; //采购方案版本 var newVersion = dbps.Version + 1; //采购方案版本
var defaultCost = 0M; var defaultCost = 0M;
decimal? bargainingCost = null; //只有当任意配件包含议价成本时才具备此值 decimal? bargainingCost = null; //只有当任意配件包含议价成本时才具备此值
var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
foreach (var pspReq in psReq.PurchaseSchemeProductList) foreach (var pspReq in psReq.PurchaseSchemeProductList)
{ {
var psp = pspReq.Map<PurchaseSchemeProduct>(); var psp = pspReq.Map<PurchaseSchemeProduct>();
@ -491,14 +505,19 @@ namespace BBWYB.Server.Business
pss.Id = idGenerator.NewLong(); pss.Id = idGenerator.NewLong();
pss.CreateTime = DateTime.Now; pss.CreateTime = DateTime.Now;
pss.SkuPurchaseSchemeId = schemeId; pss.SkuPurchaseSchemeId = schemeId;
var dbPss = dbPssList.FirstOrDefault(x => x.SkuId == pssReq.SkuId && x.PurchaseSkuId == pssReq.PurchaseSkuId && x.SkuPurchaseSchemeId == schemeId);
pss.LastBargainingTime = dbPss?.LastBargainingTime;
addPurchaseSchemeProductSkuList.Add(pss); addPurchaseSchemeProductSkuList.Add(pss);
//defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
defaultCost += pssReq.DefaultPrice ?? 0; defaultCost += pssReq.DefaultPrice ?? 0;
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M) if (isContainsActualPrice)
{ {
if (bargainingCost == null) if (bargainingCost == null)
bargainingCost = 0M; bargainingCost = 0M;
bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1); bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M && dbPss != null && dbPss.ActualPrice != pssReq.ActualPrice)
pss.LastBargainingTime = DateTime.Now;
} }
#region 处理历史版本 #region 处理历史版本
@ -523,6 +542,7 @@ namespace BBWYB.Server.Business
var psupdate = fsql.Update<PurchaseScheme>(schemeId) var psupdate = fsql.Update<PurchaseScheme>(schemeId)
.Set(ps => ps.DefaultCost, defaultCost) .Set(ps => ps.DefaultCost, defaultCost)
.Set(ps => ps.BargainingCost, bargainingCost) .Set(ps => ps.BargainingCost, bargainingCost)
.SetIf(bargainingCost != null && bargainingCost != dbps.BargainingCost, ps => ps.LastBargainingTime, DateTime.Now)
.Set(ps => ps.HYSchemeId, psReq.HYSchemeId) .Set(ps => ps.HYSchemeId, psReq.HYSchemeId)
.Set(ps => ps.HYBDId, psReq.HYBDId) .Set(ps => ps.HYBDId, psReq.HYBDId)
.Set(ps => ps.Version, newVersion); .Set(ps => ps.Version, newVersion);
@ -677,29 +697,61 @@ namespace BBWYB.Server.Business
var purchaseSchemeProductSkuList = fsql.Select<PurchaseSchemeProductSku>().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)) var purchaseSchemeProductSkuList = fsql.Select<PurchaseSchemeProductSku>().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId))
.ToList().Map<List<PurchaseSchemeProductSkuResponse>>(); .ToList().Map<List<PurchaseSchemeProductSkuResponse>>();
var recent30daySpuItemCountGroups = fsql.Select<OrderSku, Order>() if (request.IncludeSkuStatisticsInfo == 1)
.LeftJoin((osku, o) => osku.OrderId == o.Id) {
.Where((osku, o) => spuIdList.Contains(osku.ProductId) && var recent30daySpuItemCountGroups = fsql.Select<OrderSku, Order>()
!invalidOrderStateList.Contains(o.OrderState) && .LeftJoin((osku, o) => osku.OrderId == o.Id)
o.StartTime >= recentDate) .Where((osku, o) => spuIdList.Contains(osku.ProductId) &&
.GroupBy((osku, o) => osku.ProductId) !invalidOrderStateList.Contains(o.OrderState) &&
.ToList(g => new o.StartTime >= recentDate)
{ .GroupBy((osku, o) => osku.ProductId)
ProductId = g.Key, .ToList(g => new
ItemTotal = g.Sum(g.Value.Item1.ItemTotal) {
}); ProductId = g.Key,
ItemTotal = g.Sum(g.Value.Item1.ItemTotal)
var recent30daySkuItemCountGroups = fsql.Select<OrderSku, Order>() });
.LeftJoin((osku, o) => osku.OrderId == o.Id)
.Where((osku, o) => skuIdList.Contains(osku.SkuId) && var recent30daySkuItemCountGroups = fsql.Select<OrderSku, Order>()
!invalidOrderStateList.Contains(o.OrderState) && .LeftJoin((osku, o) => osku.OrderId == o.Id)
o.StartTime >= recentDate) .Where((osku, o) => skuIdList.Contains(osku.SkuId) &&
.GroupBy((osku, o) => osku.SkuId) !invalidOrderStateList.Contains(o.OrderState) &&
.ToList(g => new o.StartTime >= recentDate)
{ .GroupBy((osku, o) => osku.SkuId)
SkuId = g.Key, .ToList(g => new
ItemTotal = g.Sum(g.Value.Item1.ItemTotal) {
}); SkuId = g.Key,
ItemTotal = g.Sum(g.Value.Item1.ItemTotal)
});
//sku最近使用的采购方案
var skuRecentPurchaseList = fsql.Select<PurchaseScheme>()
.Where(ps => skuIdList.Contains(ps.SkuId))
.GroupBy(ps => ps.SkuId)
.WithTempQuery(g => new { SkuId = g.Key, MaxTime = g.Max(g.Value.LastPurchaseTime) })
.From<PurchaseScheme>()
.InnerJoin((ps1, ps2) => ps1.SkuId == ps2.SkuId && ps1.MaxTime == ps2.LastPurchaseTime)
.ToList((ps1, ps2) => new
{
SkuId = ps2.SkuId,
LastPurchaseTime = ps2.LastPurchaseTime,
LastPurchasePriceCost = ps2.LastPurchasePriceCost
});
foreach (var scheme in purchaseSchemeList)
{
#region 近30天spu/sku销量
scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0);
scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0);
#endregion
#region sku最近采购价和最近采购时间
var recentScheme = skuRecentPurchaseList.FirstOrDefault(x => x.SkuId == scheme.SkuId);
scheme.SkuLastPurchasePriceCost = recentScheme?.LastPurchasePriceCost;
scheme.SkuLastPurchaseTime = recentScheme?.LastPurchaseTime;
#endregion
}
}
foreach (var scheme in purchaseSchemeList) foreach (var scheme in purchaseSchemeList)
{ {
@ -777,11 +829,6 @@ namespace BBWYB.Server.Business
} }
} }
#endregion #endregion
#region 近30天spu/sku销量
scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0);
scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0);
#endregion
} }
} }
return purchaseSchemeList; return purchaseSchemeList;
@ -1127,7 +1174,9 @@ namespace BBWYB.Server.Business
if (schemeList.Count() == 0) if (schemeList.Count() == 0)
throw new BusinessException("采购方案不存在"); throw new BusinessException("采购方案不存在");
var scheme = schemeList[0]; var scheme = schemeList[0];
var isContainsActualPrice = scheme.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
var defaultCost = 0M; var defaultCost = 0M;
decimal? bargainingCost = null;
long? pssId = null; long? pssId = null;
foreach (var schemeProduct in scheme.PurchaseSchemeProductList) foreach (var schemeProduct in scheme.PurchaseSchemeProductList)
{ {
@ -1139,14 +1188,23 @@ namespace BBWYB.Server.Business
tartegtPurchaseProductSku.PurchaseRatio = request.Ratio; tartegtPurchaseProductSku.PurchaseRatio = request.Ratio;
pssId = tartegtPurchaseProductSku.Id; pssId = tartegtPurchaseProductSku.Id;
} }
if (pssId == null)
throw new BusinessException("未找到需要更新的采购配件");
defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1)); defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => (pss.PurchaseSkuPrice ?? 0) * (pss.PurchaseRatio ?? 1));
if (isContainsActualPrice)
{
if (bargainingCost == null)
bargainingCost = 0M;
bargainingCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1));
}
} }
if (pssId == null)
throw new BusinessException("未找到需要更新的采购配件");
fsql.Transaction(() => fsql.Transaction(() =>
{ {
fsql.Update<PurchaseScheme>(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost).ExecuteAffrows(); fsql.Update<PurchaseScheme>(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost)
.SetIf(bargainingCost != null, ps => ps.BargainingCost, bargainingCost)
.ExecuteAffrows();
fsql.Update<PurchaseSchemeProductSku>(pssId.Value).Set(pss => pss.PurchaseRatio, request.Ratio).ExecuteAffrows(); fsql.Update<PurchaseSchemeProductSku>(pssId.Value).Set(pss => pss.PurchaseRatio, request.Ratio).ExecuteAffrows();
}); });
return defaultCost; return defaultCost;
@ -1329,6 +1387,7 @@ namespace BBWYB.Server.Business
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest() var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{ {
IncludePurchaseSkuBasicInfo = 1, IncludePurchaseSkuBasicInfo = 1,
IncludeSkuStatisticsInfo = 0,
SchemeIdList = schemeIdList SchemeIdList = schemeIdList
}); });

5
BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeRequest.cs

@ -47,5 +47,10 @@ namespace BBWYB.Server.Model.Dto
/// </summary> /// </summary>
public int? IncludePurchaseSkuBasicInfo { get; set; } public int? IncludePurchaseSkuBasicInfo { get; set; }
/// <summary>
/// 是否包含店铺Sku统计信息 (最近采购时间/最近采购价/最近30天销量) 是=1 否=0或null
/// </summary>
public int? IncludeSkuStatisticsInfo { get; set; }
} }
} }

5
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs

@ -17,6 +17,11 @@ namespace BBWYB.Server.Model.Dto
/// </summary> /// </summary>
public decimal? SkuLastPurchasePriceCost { get; set; } public decimal? SkuLastPurchasePriceCost { get; set; }
/// <summary>
/// 店铺SKU的最近采购时间
/// </summary>
public DateTime? SkuLastPurchaseTime { get; set; }
/// <summary> /// <summary>
/// 近30天Spu销量 /// 近30天Spu销量
/// </summary> /// </summary>

Loading…
Cancel
Save