Browse Source

Merge branch 'yijia'

yijia
shanji 2 years ago
parent
commit
95be489550
  1. 70
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  2. 60
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  3. 8
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  4. 5
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs
  5. 8
      BBWYB.Server.Model/Enums.cs

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

@ -322,6 +322,7 @@ namespace BBWYB.Server.Business
List<OrderPurchaseInfo> insertOrderPurchaseInfos = new List<OrderPurchaseInfo>();
List<OrderPurchaseSkuInfo> insertOrderPurchaseSkuInfos = new List<OrderPurchaseSkuInfo>();
List<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
List<IUpdate<PurchaseSchemeProductSku>> updatePssList = new List<IUpdate<PurchaseSchemeProductSku>>();
List<OrderPurchaseRelationInfo> insertOrderPurchaseRelationInfoList = new List<OrderPurchaseRelationInfo>();
List<string> updatePurchaseTimeLimitTaskOrderSkuList = new List<string>();
List<IUpdate<Purchaser>> updatePurchaserList = new List<IUpdate<Purchaser>>();
@ -506,29 +507,57 @@ namespace BBWYB.Server.Business
#endregion
}
#region 更新采购方案
#region 更新采购方案/配件
{
var allCargoParamList = new List<CargoParamRequest>();
request.CargoParamGroupList.ForEach(x => allCargoParamList.AddRange(x.CargoParamList));
var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId);
foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList)
{
var schemeId = cargoParamGroupsByScheme.Key;
var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId;
var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
.Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
.DefaultIfEmpty(0M)
.First());
var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount);
var update = fsql.Update<PurchaseScheme>(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now)
.Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost)
.Set(ps => ps.PurchasedCount + 1)
.Set(ps => ps.PurchasedAmount + purchasedAmount);
updatePurchaseSchemeList.Add(update);
#region 更新采购方案
{
var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId);
foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList)
{
var schemeId = cargoParamGroupsByScheme.Key;
var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId;
var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0;
//var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
// .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
// .DefaultIfEmpty(0M)
// .First());
var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam =>
{
return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1);
});
var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount);
var update = fsql.Update<PurchaseScheme>(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now)
.Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost)
.Set(ps => ps.PurchasedCount + 1)
.Set(ps => ps.PurchasedItemCount + skuItemCount)
.Set(ps => ps.PurchasedAmount + purchasedAmount);
updatePurchaseSchemeList.Add(update);
}
}
#endregion
#region 更新采购配件
{
foreach (var cargoParam in allCargoParamList)
{
var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId);
if (createOrderItem != null)
{
var update = fsql.Update<PurchaseSchemeProductSku>()
.Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price)
.Where(pss => pss.SkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId);
updatePssList.Add(update);
}
}
}
#endregion
}
#endregion
@ -727,6 +756,11 @@ namespace BBWYB.Server.Business
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
}
if (updatePssList.Count() > 0)
{
foreach (var update in updatePssList)
update.ExecuteAffrows();
}
fsql.Update<Order>(request.OrderId).Set(o => o.OrderState, dbOrder.OrderState)
.SetIf(!string.IsNullOrEmpty(request.Remark), o => o.PurchaseRemark, request.Remark)
.Set(o => o.IsPurchased, true)

60
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -123,7 +123,8 @@ namespace BBWYB.Server.Business.Sync
#region DB Operation
List<Model.Db.Order> insertOrderList = new List<Model.Db.Order>();
List<OrderSku> insertOrderSkuList = new List<OrderSku>();
List<long> updateOrderSkuIdList_OptimizationFlag = new List<long>();
//List<long> updateOrderSkuIdList_OptimizationFlag = new List<long>();
Dictionary<Enums.TriggerOptimizationReason, List<long>> updateOSkuOptimizationFlagByReasonGroups = new Dictionary<Enums.TriggerOptimizationReason, List<long>>();
List<OrderConsignee> insertOrderConsigneeList = new List<OrderConsignee>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
List<string> deleteTimeLimitTaskOrderIdList = new List<string>();
@ -375,11 +376,14 @@ namespace BBWYB.Server.Business.Sync
{
var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s =>
{
if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20)
return true;
if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2)
return true;
return false;
//if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId))
// return true; //首次触发
//if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20)
// return true; //销量大于20
//if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2)
// return true;
//return false;
return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null;
});
if (optimizationSpuSaleList.Count() > 0)
{
@ -393,13 +397,27 @@ namespace BBWYB.Server.Business.Sync
if (osku.ProductId != spuSale.ProductId)
continue;
var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList);
#region 更新sku优化标记
var oskuId = long.Parse(osku.Id);
var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId);
if (insertOrderSku != null)
{
insertOrderSku.IsNeedOptimization = 1;
insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason;
}
else
updateOrderSkuIdList_OptimizationFlag.Add(oskuId);
{
//updateOrderSkuIdList_OptimizationFlag.Add(oskuId);
if (!updateOSkuOptimizationFlagByReasonGroups.TryGetValue(triggerOptimizationReason.Value, out var updateOSkuOptimizationFlagByReasonList))
{
updateOSkuOptimizationFlagByReasonList = new List<long>();
updateOSkuOptimizationFlagByReasonGroups.Add(triggerOptimizationReason.Value, updateOSkuOptimizationFlagByReasonList);
}
updateOSkuOptimizationFlagByReasonList.Add(oskuId);
}
#endregion
#region 创建待议价任务
@ -474,8 +492,21 @@ namespace BBWYB.Server.Business.Sync
.ExecuteAffrows();
}
if (updateOrderSkuIdList_OptimizationFlag.Count() > 0)
fsql.Update<OrderSku>(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows();
//if (updateOrderSkuIdList_OptimizationFlag.Count() > 0)
// fsql.Update<OrderSku>(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows();
if (updateOSkuOptimizationFlagByReasonGroups.Keys.Count() > 0)
{
foreach (var triggerOptimizationReason in updateOSkuOptimizationFlagByReasonGroups.Keys)
{
var updateOSkuListOptimizationFlagList = updateOSkuOptimizationFlagByReasonGroups[triggerOptimizationReason];
if (updateOSkuListOptimizationFlagList != null && updateOSkuListOptimizationFlagList.Count > 0)
{
fsql.Update<OrderSku>(updateOSkuListOptimizationFlagList).Set(osku => osku.IsNeedOptimization, 1)
.Set(osku => osku.TriggerOptimizationReason, triggerOptimizationReason)
.ExecuteAffrows();
}
}
}
foreach (var key in deductionSkuCountDictionary.Keys)
fsql.Update<SkuTotalSaleInfo>(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows();
@ -576,5 +607,16 @@ namespace BBWYB.Server.Business.Sync
return Enums.OrderState.;
return null;
}
public Enums.TriggerOptimizationReason? GetOptimizationReason(SpuTotalSaleInfo s, List<SpuTotalSaleInfo> insertSpuTotalSaleInfoList)
{
if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId))
return Enums.TriggerOptimizationReason.; //首次触发
if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20)
return Enums.TriggerOptimizationReason.; //销量大于20
if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2)
return Enums.TriggerOptimizationReason.;
return null;
}
}
}

8
BBWYB.Server.Model/Db/Order/OrderSku.cs

@ -106,7 +106,7 @@ namespace BBWYB.Server.Model.Db
/// <summary>
/// 是否需要优化 是=1 否=0
/// </summary>
[Column(DbType = "int(1)", IsNullable = true)]
[Column(DbType = "int(1)", IsNullable = true)]
public int? IsNeedOptimization { get; set; } = 0;
/// <summary>
@ -114,6 +114,12 @@ namespace BBWYB.Server.Model.Db
/// </summary>
[Column(DbType = "int(1)", IsNullable = true)]
public int? IsOptimizationCompleted { get; set; } = 0;
/// <summary>
/// 触发优化原因
/// </summary>
[Column(DbType = "int(1)", MapType = typeof(int?), IsNullable = true)]
public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; }
}
}

5
BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs

@ -105,6 +105,11 @@ namespace BBWYB.Server.Model
/// </summary>
[Column(DbType = "datetime")]
public DateTime? LastBargainingTime { get; set; }
/// <summary>
/// 采购件数
/// </summary>
public int? PurchasedItemCount { get; set; } = 0;
}
}

8
BBWYB.Server.Model/Enums.cs

@ -322,5 +322,13 @@
{
= 0, = 1, = 2
}
/// <summary>
/// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2
/// </summary>
public enum TriggerOptimizationReason
{
= 0, = 1, = 2
}
}
}

Loading…
Cancel
Save