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

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

@ -123,7 +123,8 @@ namespace BBWYB.Server.Business.Sync
#region DB Operation #region DB Operation
List<Model.Db.Order> insertOrderList = new List<Model.Db.Order>(); List<Model.Db.Order> insertOrderList = new List<Model.Db.Order>();
List<OrderSku> insertOrderSkuList = new List<OrderSku>(); 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<OrderConsignee> insertOrderConsigneeList = new List<OrderConsignee>();
List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>(); List<TimeLimitTask> insertTimeLimitTaskList = new List<TimeLimitTask>();
List<string> deleteTimeLimitTaskOrderIdList = new List<string>(); List<string> deleteTimeLimitTaskOrderIdList = new List<string>();
@ -375,11 +376,14 @@ namespace BBWYB.Server.Business.Sync
{ {
var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s => var optimizationSpuSaleList = dbSpuTotalSaleInfoList.Union(insertSpuTotalSaleInfoList).Where(s =>
{ {
if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20) //if (insertSpuTotalSaleInfoList.Any(x => x.ProductId == s.ProductId))
return true; // return true; //首次触发
if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2) //if (s.LastOptimizationItemCount == 0 && s.ItemCount >= 20)
return true; // return true; //销量大于20
return false; //if (s.LastOptimizationItemCount != 0 && s.ItemCount * 1.0 / s.LastOptimizationItemCount >= 2)
// return true;
//return false;
return GetOptimizationReason(s, insertSpuTotalSaleInfoList) != null;
}); });
if (optimizationSpuSaleList.Count() > 0) if (optimizationSpuSaleList.Count() > 0)
{ {
@ -393,13 +397,27 @@ namespace BBWYB.Server.Business.Sync
if (osku.ProductId != spuSale.ProductId) if (osku.ProductId != spuSale.ProductId)
continue; continue;
var triggerOptimizationReason = GetOptimizationReason(spuSale, insertSpuTotalSaleInfoList);
#region 更新sku优化标记 #region 更新sku优化标记
var oskuId = long.Parse(osku.Id); var oskuId = long.Parse(osku.Id);
var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId); var insertOrderSku = insertOrderSkuList.FirstOrDefault(s => s.Id == oskuId);
if (insertOrderSku != null) if (insertOrderSku != null)
{
insertOrderSku.IsNeedOptimization = 1; insertOrderSku.IsNeedOptimization = 1;
insertOrderSku.TriggerOptimizationReason = triggerOptimizationReason;
}
else 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 #endregion
#region 创建待议价任务 #region 创建待议价任务
@ -474,8 +492,21 @@ namespace BBWYB.Server.Business.Sync
.ExecuteAffrows(); .ExecuteAffrows();
} }
if (updateOrderSkuIdList_OptimizationFlag.Count() > 0) //if (updateOrderSkuIdList_OptimizationFlag.Count() > 0)
fsql.Update<OrderSku>(updateOrderSkuIdList_OptimizationFlag).Set(osku => osku.IsNeedOptimization, 1).ExecuteAffrows(); // 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) foreach (var key in deductionSkuCountDictionary.Keys)
fsql.Update<SkuTotalSaleInfo>(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows(); fsql.Update<SkuTotalSaleInfo>(key).Set(s => s.ItemCount - deductionSkuCountDictionary[key]).ExecuteAffrows();
@ -576,5 +607,16 @@ namespace BBWYB.Server.Business.Sync
return Enums.OrderState.; return Enums.OrderState.;
return null; 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> /// <summary>
/// 是否需要优化 是=1 否=0 /// 是否需要优化 是=1 否=0
/// </summary> /// </summary>
[Column(DbType = "int(1)", IsNullable = true)] [Column(DbType = "int(1)", IsNullable = true)]
public int? IsNeedOptimization { get; set; } = 0; public int? IsNeedOptimization { get; set; } = 0;
/// <summary> /// <summary>
@ -114,6 +114,12 @@ namespace BBWYB.Server.Model.Db
/// </summary> /// </summary>
[Column(DbType = "int(1)", IsNullable = true)] [Column(DbType = "int(1)", IsNullable = true)]
public int? IsOptimizationCompleted { get; set; } = 0; 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> /// </summary>
[Column(DbType = "datetime")] [Column(DbType = "datetime")]
public DateTime? LastBargainingTime { get; set; } 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 = 0, = 1, = 2
} }
/// <summary>
/// 触发优化原因 首次采购 = 0, 首次优化 = 1, 再次优化 = 2
/// </summary>
public enum TriggerOptimizationReason
{
= 0, = 1, = 2
}
} }
} }

Loading…
Cancel
Save