Browse Source

以分组形式返回采购方案列表, 按sku采购方案同位顺序补齐采购方案分组

yijia
shanji 2 years ago
parent
commit
0288470b0a
  1. 46
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  2. 124
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  3. 2
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs

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

@ -141,17 +141,19 @@ namespace BBWYB.Server.Business
public void SupplementPurchaseSchemeGroup()
{
List<PurchaseSchemeGroup> insertSchemeGroups = new List<PurchaseSchemeGroup>();
IList<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
Queue<IUpdate<PurchaseScheme>> updatePurchaseSchemeQueue = new Queue<IUpdate<PurchaseScheme>>();
var purchaseSchemeList = fsql.Select<PurchaseScheme>().ToList().OrderByDescending(ps => ps.CreateTime);
var purchaseSchemeList = fsql.Select<PurchaseScheme>().OrderBy(ps => ps.Id).ToList();
var purchaseSchemeSpuGroups = purchaseSchemeList.GroupBy(ps => ps.ProductId);
foreach (var purchaseSchemeSpuGroup in purchaseSchemeSpuGroups)
{
Console.WriteLine($"正在处理spu {purchaseSchemeSpuGroup.Key}");
var purchaseSchemeSkuGroups = purchaseSchemeSpuGroup.GroupBy(ps => ps.SkuId);
var maxPsGroupCount = purchaseSchemeSkuGroups.Max(g => g.Count()); //该spu最大的采购分组数
for (var i = 0; i < maxPsGroupCount; i++)
{
Console.WriteLine($"正在处理第{i}组");
IList<PurchaseScheme> currentIndexSchemeList = new List<PurchaseScheme>();
//取每个sku的第i个方案
foreach (var purchaseSchemeSkuGroup in purchaseSchemeSkuGroups)
@ -165,14 +167,15 @@ namespace BBWYB.Server.Business
}
}
var schemeGroupId = currentIndexSchemeList.FirstOrDefault(ps => ps.SchemeGroupId != null)?.SchemeGroupId;
if (schemeGroupId == null)
if (schemeGroupId == null || schemeGroupId == 0)
{
schemeGroupId = idGenerator.NewLong();
//同位中没有分组
var insertSchemeGroup = new PurchaseSchemeGroup()
{
Id = schemeGroupId.Value,
GroupName = schemeGroupId.Value.ToString(),
//GroupName = schemeGroupId.Value.ToString(),
GroupName = $"{purchaseSchemeSpuGroup.Key}_第{i + 1}组",
CreateTime = DateTime.Now,
ProductId = currentIndexSchemeList.First().ProductId,
ShopId = currentIndexSchemeList.First().ShopId
@ -184,22 +187,45 @@ namespace BBWYB.Server.Business
if (purchaseScheme.SchemeGroupId != schemeGroupId)
{
var update = fsql.Update<PurchaseScheme>(purchaseScheme.Id).Set(ps => ps.SchemeGroupId, schemeGroupId);
updatePurchaseSchemeList.Add(update);
updatePurchaseSchemeQueue.Enqueue(update);
}
}
}
}
Console.WriteLine("数据库处理中");
fsql.Transaction(() =>
{
if (insertSchemeGroups.Count() > 0)
fsql.Insert(insertSchemeGroups).ExecuteAffrows();
if (updatePurchaseSchemeList.Count() > 0)
});
var updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
while (true)
{
if (updatePurchaseSchemeQueue.TryDequeue(out var update))
updatePurchaseSchemeList.Add(update);
else
break;
if (updatePurchaseSchemeList.Count() == 10)
{
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
Console.WriteLine($"执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var _update in updatePurchaseSchemeList)
_update.ExecuteAffrows();
});
updatePurchaseSchemeList.Clear();
}
});
}
if (updatePurchaseSchemeList.Count() > 0)
{
Console.WriteLine($"最后执行数据库 {DateTime.Now}");
fsql.Transaction(() =>
{
foreach (var _update in updatePurchaseSchemeList)
_update.ExecuteAffrows();
});
}
}
}
}

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

@ -192,6 +192,130 @@ namespace BBWYB.Server.Business
});
}
public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest)
{
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0 &&
batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0)
throw new BusinessException("非法参数");
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
string.IsNullOrEmpty(pp.PurchaserName))))
throw new BusinessException("新增方案中有采购商Id/Name/Location为空");
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
string.IsNullOrEmpty(pp.PurchaserName))))
throw new BusinessException("编辑方案中有采购商Id/Name/Location为空");
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count() > 0 && batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0))
throw new BusinessException("编辑方案中采购方案缺少Id");
List<PurchaseScheme> addPurchaseSchemeList = new List<PurchaseScheme>();
List<PurchaseSchemeProduct> addPurchaseSchemeProductList = new List<PurchaseSchemeProduct>();
List<PurchaseSchemeProductSku> addPurchaseSchemeProductSkuList = new List<PurchaseSchemeProductSku>();
List<Purchaser> newPurchaserList = new List<Purchaser>();
List<long> deletePurchaseSchemeIdList = new List<long>();
List<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
{
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList)
{
var ps = new PurchaseScheme()
{
CreateTime = DateTime.Now,
Id = idGenerator.NewLong(),
ProductId = psReq.ProductId,
SkuId = psReq.SkuId,
ShopId = psReq.ShopId
};
addPurchaseSchemeList.Add(ps);
foreach (var pspReq in psReq.PurchaseSchemeProductList)
{
var psp = pspReq.Map<PurchaseSchemeProduct>();
psp.Id = idGenerator.NewLong();
psp.CreateTime = DateTime.Now;
psp.SkuPurchaseSchemeId = ps.Id;
addPurchaseSchemeProductList.Add(psp);
foreach (var pssReq in pspReq.PurchaseSchemeProductSkuList)
{
var pss = pssReq.Map<PurchaseSchemeProductSku>();
pss.Id = idGenerator.NewLong();
pss.CreateTime = DateTime.Now;
pss.SkuPurchaseSchemeId = ps.Id;
addPurchaseSchemeProductSkuList.Add(pss);
ps.DefaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
}
}
}
}
#region 更新采购方案
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
{
deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
{
var schemeId = psReq.Id;
var defaultCost = 0M;
foreach (var pspReq in psReq.PurchaseSchemeProductList)
{
var psp = pspReq.Map<PurchaseSchemeProduct>();
psp.Id = idGenerator.NewLong();
psp.CreateTime = DateTime.Now;
psp.SkuPurchaseSchemeId = schemeId;
addPurchaseSchemeProductList.Add(psp);
foreach (var pssReq in pspReq.PurchaseSchemeProductSkuList)
{
var pss = pssReq.Map<PurchaseSchemeProductSku>();
pss.Id = idGenerator.NewLong();
pss.CreateTime = DateTime.Now;
pss.SkuPurchaseSchemeId = schemeId;
addPurchaseSchemeProductSkuList.Add(pss);
defaultCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
}
}
var psupdate = fsql.Update<PurchaseScheme>(schemeId)
.Set(ps => ps.DefaultCost, defaultCost);
updatePurchaseSchemeList.Add(psupdate);
}
}
#endregion
foreach (var purchaseProductSku in addPurchaseSchemeProductSkuList)
{
if (purchaseProductSku.PurchaseRatio == null)
purchaseProductSku.PurchaseRatio = 1;
}
fsql.Transaction(() =>
{
if (newPurchaserList.Count > 0)
fsql.Insert(newPurchaserList).ExecuteAffrows();
//更新,删除已存在的采购方案商品和Sku
if (deletePurchaseSchemeIdList.Count > 0)
{
fsql.Delete<PurchaseSchemeProduct>().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(p => deletePurchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
}
//新增
if (addPurchaseSchemeList != null && addPurchaseSchemeList.Count > 0)
fsql.Insert(addPurchaseSchemeList).ExecuteAffrows();
if (addPurchaseSchemeProductList.Count > 0)
fsql.Insert(addPurchaseSchemeProductList).ExecuteAffrows();
if (addPurchaseSchemeProductSkuList.Count > 0)
fsql.Insert(addPurchaseSchemeProductSkuList).ExecuteAffrows();
if (updatePurchaseSchemeList.Count() > 0)
{
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
}
});
}
/// <summary>
/// 获取采购方案
/// </summary>

2
BBWYB.Server.Model/Dto/Request/PurchaseScheme/BatchCURDSchemeRequest.cs

@ -13,5 +13,7 @@ namespace BBWYB.Server.Model.Dto
/// 需要新增的采购方案
/// </summary>
public IList<InputPurchaseSchemeRequest> AddPurchaseSchemeList { get; set; }
}
}

Loading…
Cancel
Save