Browse Source

新增采购方案数量接口

采购方案增加采购配件实际单价
采购方案的采购成本由服务端计算
yijia
shanji 2 years ago
parent
commit
cf380fd6a0
  1. 29
      BBWYB.Server.API/Controllers/PurchaseSchemeController.cs
  2. 32
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  3. 184
      BBWYB.Server.Business/PurchaseScheme/PurchaseSchemeBusiness.cs
  4. 11
      BBWYB.Server.Model/Db/PurchaseScheme/PurchaseScheme.cs
  5. 7
      BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs
  6. 4
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseRatioAndActualPriceRequest.cs
  7. 3
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs
  8. 7
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs
  9. 21
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs
  10. 34
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs
  11. 8
      BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeCountRequest.cs
  12. 9
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeCountResponse.cs
  13. 2
      BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeResponse.cs

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

@ -38,6 +38,17 @@ namespace BBWYB.Server.API.Controllers
return purchaseSchemeBusiness.GetPurchaseSchemeList(querySchemeRequest);
}
/// <summary>
/// 获取Sku采购方案数量
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
public IList<PurchaseSchemeCountResponse> GetPurchaseSchemeCountList([FromBody] QuerySchemeCountRequest request)
{
return purchaseSchemeBusiness.GetPurchaseSchemeCountList(request);
}
///// <summary>
///// 删除采购商
///// </summary>
@ -102,14 +113,14 @@ namespace BBWYB.Server.API.Controllers
return purchaseSchemeBusiness.RefreshPurchaseScheme(request);
}
/// <summary>
/// 修改采购配件比例
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void EditPurchaseRatio([FromBody]EditPurchaseRatioRequest request)
{
purchaseSchemeBusiness.EditPurchaseRatio(request);
}
///// <summary>
///// 修改采购配件比例
///// </summary>
///// <param name="request"></param>
//[HttpPost]
//public void EditPurchaseRatio([FromBody]EditPurchaseRatioAndActualPriceRequest request)
//{
// purchaseSchemeBusiness.EditPurchaseRatio(request);
//}
}
}

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

@ -635,8 +635,8 @@ namespace BBWYB.Server.Business
fsql.Insert(insertOrderPurchaseRelationInfoList).ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
insertOrderCost?.ExecuteAffrows();
//if (updatePurchaseTimeSchemeIdList.Count() > 0)
// fsql.Update<PurchaseScheme>(updatePurchaseTimeSchemeIdList).Set(p => p.LastPurchaseTime, DateTime.Now).ExecuteAffrows();
if (updatePurchaseTimeSchemeIdList.Count() > 0)
fsql.Update<PurchaseScheme>(updatePurchaseTimeSchemeIdList).Set(p => p.LastPurchaseTime, DateTime.Now).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)
@ -650,20 +650,20 @@ namespace BBWYB.Server.Business
}
});
#region 更新采购方案最新价格
Task.Factory.StartNew(() =>
{
try
{
purchaseSchemeBusiness.RefreshPurchaseScheme(new RefreshSchemeRequest()
{
SchemeIdList = updatePurchaseTimeSchemeIdList
});
}
catch { }
//#region 更新采购方案最新价格
//Task.Factory.StartNew(() =>
//{
// try
// {
// purchaseSchemeBusiness.RefreshPurchaseScheme(new RefreshSchemeRequest()
// {
// SchemeIdList = updatePurchaseTimeSchemeIdList
// });
// }
// catch { }
}, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
#endregion
//}, CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
//#endregion
}
/// <summary>
@ -3140,7 +3140,7 @@ namespace BBWYB.Server.Business
SkuId = pss.PurchaseSkuId,
SchemeId = pss.SkuPurchaseSchemeId,
SpecId = pss.PurchaseSkuSpecId,
Quantity = (itemTotal * pss.PurchaseRatio) ?? 1
Quantity = itemTotal * (pss.PurchaseRatio ?? 1)
}));
}
break;

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

@ -61,67 +61,101 @@ namespace BBWYB.Server.Business
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 = null;
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>>();
#region 新增采购方案
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
{
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
addPurchaseSchemeList = batchCURDSchemeRequest.AddPurchaseSchemeList.Map<List<PurchaseScheme>>();
foreach (var scheme in addPurchaseSchemeList)
foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList)
{
scheme.Id = idGenerator.NewLong();
scheme.CreateTime = DateTime.Now;
foreach (var purchaseProduct in scheme.PurchaseSchemeProductList)
var ps = new PurchaseScheme()
{
purchaseProduct.Id = idGenerator.NewLong();
purchaseProduct.CreateTime = DateTime.Now;
purchaseProduct.SkuPurchaseSchemeId = scheme.Id;
foreach (var purchaseProductSku in purchaseProduct.PurchaseSchemeProductSkuList)
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)
{
purchaseProductSku.Id = idGenerator.NewLong();
purchaseProductSku.CreateTime = DateTime.Now;
purchaseProductSku.SkuPurchaseSchemeId = scheme.Id;
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);
}
addPurchaseSchemeProductSkuList.AddRange(purchaseProduct.PurchaseSchemeProductSkuList);
}
addPurchaseSchemeProductList.AddRange(scheme.PurchaseSchemeProductList);
}
}
#endregion
#region 更新采购方案
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
{
//ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList);
deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map<List<PurchaseScheme>>();
foreach (var scheme in editPurchaseSchemeList)
foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
{
foreach (var purchaseProduct in scheme.PurchaseSchemeProductList)
var schemeId = psReq.Id;
var defaultCost = 0M;
foreach (var pspReq in psReq.PurchaseSchemeProductList)
{
purchaseProduct.Id = idGenerator.NewLong();
purchaseProduct.CreateTime = DateTime.Now;
purchaseProduct.SkuPurchaseSchemeId = scheme.Id;
foreach (var purchaseProductSku in purchaseProduct.PurchaseSchemeProductSkuList)
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)
{
purchaseProductSku.Id = idGenerator.NewLong();
purchaseProductSku.CreateTime = DateTime.Now;
purchaseProductSku.SkuPurchaseSchemeId = scheme.Id;
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);
}
addPurchaseSchemeProductSkuList.AddRange(purchaseProduct.PurchaseSchemeProductSkuList);
}
addPurchaseSchemeProductList.AddRange(scheme.PurchaseSchemeProductList);
var psupdate = fsql.Update<PurchaseScheme>(schemeId)
.Set(ps => ps.DefaultCost, defaultCost);
updatePurchaseSchemeList.Add(psupdate);
}
//var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map<List<PurchaseScheme>>();
//foreach (var scheme in editPurchaseSchemeList)
//{
// foreach (var purchaseProduct in scheme.PurchaseSchemeProductList)
// {
// purchaseProduct.Id = idGenerator.NewLong();
// purchaseProduct.CreateTime = DateTime.Now;
// purchaseProduct.SkuPurchaseSchemeId = scheme.Id;
// foreach (var purchaseProductSku in purchaseProduct.PurchaseSchemeProductSkuList)
// {
// purchaseProductSku.Id = idGenerator.NewLong();
// purchaseProductSku.CreateTime = DateTime.Now;
// purchaseProductSku.SkuPurchaseSchemeId = scheme.Id;
// }
// addPurchaseSchemeProductSkuList.AddRange(purchaseProduct.PurchaseSchemeProductSkuList);
// }
// addPurchaseSchemeProductList.AddRange(scheme.PurchaseSchemeProductList);
//}
}
#endregion
@ -150,7 +184,11 @@ namespace BBWYB.Server.Business
fsql.Insert(addPurchaseSchemeProductList).ExecuteAffrows();
if (addPurchaseSchemeProductSkuList.Count > 0)
fsql.Insert(addPurchaseSchemeProductSkuList).ExecuteAffrows();
if (updatePurchaseSchemeList.Count() > 0)
{
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
}
});
}
@ -284,49 +322,40 @@ namespace BBWYB.Server.Business
return purchaseSchemeList;
}
public IList<PurchaseSchemeCountResponse> GetPurchaseSchemeCountList(QuerySchemeCountRequest request)
{
var list = fsql.Select<PurchaseScheme>().Where(ps => ps.ShopId == request.ShopId &&
request.SkuIdList.Contains(ps.SkuId))
.GroupBy(ps => ps.SkuId)
.ToList(g => new PurchaseSchemeCountResponse()
{
SkuId = g.Key,
SchemeCount = g.Count()
});
return list;
}
public IList<PurchaseSchemeResponse> RefreshPurchaseScheme(RefreshSchemeRequest request)
{
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{
SchemeIdList = request.SchemeIdList
SchemeIdList = request.SchemeIdList,
IncludePurchaseSkuBasicInfo = 1
});
List<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
foreach (var purchaseScheme in purchaseSchemeList)
foreach (var ps in purchaseSchemeList)
{
var amount = 0M;
var purchasePlatformGroups = purchaseScheme.PurchaseSchemeProductList.GroupBy(p => p.PurchasePlatform);
foreach (var purchasePlatformGroup in purchasePlatformGroups)
var defaultCost = 0M;
foreach (var psp in ps.PurchaseSchemeProductList)
{
var purchaseProductIds = purchasePlatformGroup.Select(p => p.PurchaseProductId).ToArray();
var purchaseSkuIds = new List<string>();
foreach (var purchaseProduct in purchaseScheme.PurchaseSchemeProductList)
{
purchaseSkuIds.AddRange(purchaseProduct.PurchaseSchemeProductSkuList.Select(ps => ps.PurchaseSkuId));
}
var purchaseSkuBasicInfoList = BatchGetPurchaseSkuBasicInfo(new BatchPurchaseSkuBasicInfoRequest()
{
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
PriceMode = Enums.PurchaseOrderMode.,
Params = new List<BatchPurchaseSkuBasicInfoParamRequest>()
foreach (var pss in psp.PurchaseSchemeProductSkuList)
{
new BatchPurchaseSkuBasicInfoParamRequest()
{
Platform = purchasePlatformGroup.Key.Value,
PurchaseProductIds = purchaseProductIds,
PurchaseSkuIds = purchaseSkuIds
}
defaultCost += ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1);
}
});
amount += purchaseSkuBasicInfoList.Sum(p => p.ItemList.Sum(s => s.Price));
}
if (purchaseScheme.RealCost != amount ||
purchaseScheme.DefaultCost != amount)
if (ps.DefaultCost != defaultCost)
{
purchaseScheme.RealCost = amount;
purchaseScheme.DefaultCost = amount;
var update = fsql.Update<PurchaseScheme>(purchaseScheme.Id).Set(p => p.RealCost, amount)
.Set(p => p.DefaultCost, amount);
var update = fsql.Update<PurchaseScheme>(ps.Id).Set(p => p.DefaultCost, defaultCost);
updatePurchaseSchemeList.Add(update);
}
}
@ -440,15 +469,20 @@ namespace BBWYB.Server.Business
return list;
}
public void EditPurchaseRatio(EditPurchaseRatioRequest request)
{
if (request.Ratio < 1)
request.Ratio = 1;
fsql.Update<PurchaseSchemeProductSku>().Set(pss => pss.PurchaseRatio, request.Ratio)
.Where(pss => pss.SkuPurchaseSchemeId == request.SchemeId &&
pss.SkuId == request.SkuId &&
pss.PurchaseSkuId == request.PurchaseSkuId)
.ExecuteAffrows();
}
//public void EditPurchaseRatio(EditPurchaseRatioAndActualPriceRequest request)
//{
// if (request.Ratio < 1)
// request.Ratio = 1;
// fsql.Update<PurchaseSchemeProductSku>().Set(pss => pss.PurchaseRatio, request.Ratio)
// .Set(pss => pss.ActualPrice, request.ActualPrice)
// .Where(pss => pss.SkuPurchaseSchemeId == request.SchemeId &&
// pss.SkuId == request.SkuId &&
// pss.PurchaseSkuId == request.PurchaseSkuId)
// .ExecuteAffrows();
//}
}
}

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

@ -26,6 +26,11 @@ namespace BBWYB.Server.Model
public decimal DefaultCost { get; set; } = 0.0M;
/// <summary>
/// 上次采购成本
/// </summary>
public decimal LastPurchasePriceCost { get; set; } = 0.0M;
[Column(StringLength = 50, IsNullable = false)]
public string ProductId { get; set; }
@ -35,12 +40,6 @@ namespace BBWYB.Server.Model
//[Column(StringLength = 20)]
//public string PurchaserId { get; set; }
/// <summary>
/// 采购实际成本
/// </summary>
public decimal RealCost { get; set; } = 0.0M;
[Column(StringLength = 50, IsNullable = false)]
public string SkuId { get; set; }

7
BBWYB.Server.Model/Db/PurchaseScheme/Purchaseschemeproductsku.cs

@ -50,7 +50,12 @@ namespace BBWYB.Server.Model.Db
/// 采购比例
/// </summary>
[Column(DbType = "int(1)", IsNullable = true)]
public int? PurchaseRatio { get; set; }
public int? PurchaseRatio { get; set; } = 1;
/// <summary>
/// 实际单价
/// </summary>
public decimal? ActualPrice { get; set; } = 0.00M;
}

4
BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseRatioRequest.cs → BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseRatioAndActualPriceRequest.cs

@ -1,6 +1,6 @@
namespace BBWYB.Server.Model.Dto
{
public class EditPurchaseRatioRequest
public class EditPurchaseRatioAndActualPriceRequest
{
public long SchemeId { get; set; }
@ -9,5 +9,7 @@
public string PurchaseSkuId { get; set; }
public int Ratio { get; set; }
public decimal ActualPrice { get; set; }
}
}

3
BBWYB.Server.Model/Dto/Request/PurchaseScheme/EditPurchaseSchemeRequest.cs

@ -2,6 +2,9 @@
{
public class EditPurchaseSchemeRequest: InputPurchaseSchemeRequest
{
/// <summary>
/// 采购方案Id
/// </summary>
public long Id { get; set; }
}
}

7
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductRequest.cs

@ -2,13 +2,8 @@
{
public class InputPurchaseSchemeProductRequest
{
/// <summary>
/// 店铺商品Id
/// </summary>
public string ProductId { get; set; }
/// <summary>
/// 店铺商品SkuId
/// </summary>
public string SkuId { get; set; }
/// <summary>
/// 采购商品Id

21
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeProductSkuRequest.cs

@ -1,13 +1,10 @@
namespace BBWYB.Server.Model.Dto
{
public class InputPurchaseSchemeProductSkuRequest
{/// <summary>
/// 店铺商品Id
/// </summary>
{
public string ProductId { get; set; }
/// <summary>
/// 店铺商品Sku
/// </summary>
public string SkuId { get; set; }
/// <summary>
/// 采购商品Id
@ -18,7 +15,7 @@
/// </summary>
public string PurchaseSkuId { get; set; }
/// <summary>
/// 采购Ske SpecId (1688独有)
/// 采购SpecId (1688独有)
/// </summary>
public string PurchaseSkuSpecId { get; set; }
@ -26,5 +23,15 @@
/// 采购配比
/// </summary>
public int? PurchaseRatio { get; set; }
/// <summary>
/// 实际单价(人工填写的单价,未填写传0或null)
/// </summary>
public decimal? ActualPrice { get; set; }
/// <summary>
/// 默认单价(采购配件基本信息接口里的单价)
/// </summary>
public decimal? DefaultPrice { get; set; }
}
}

34
BBWYB.Server.Model/Dto/Request/PurchaseScheme/InputPurchaseSchemeRequest.cs

@ -4,40 +4,10 @@ namespace BBWYB.Server.Model.Dto
{
public class InputPurchaseSchemeRequest
{
public string ShopId { get; set; }
public long ShopId { get; set; }
public string ProductId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 采购默认成本
/// </summary>
public decimal? DefaultCost { get; set; }
/// <summary>
/// 采购实际成本
/// </summary>
public decimal? RealCost { get; set; }
///// <summary>
///// 采购商Id
///// </summary>
//public string PurchaserId { get; set; }
///// <summary>
///// 采购商Id
///// </summary>
//public string PurchaserId2 { get; set; }
///// <summary>
///// 采购商名称
///// </summary>
//public string PurchaserName { get; set; }
///// <summary>
///// 采购商发货地
///// </summary>
//public string PurchaserLocation { get; set; }
///// <summary>
///// 采购平台
///// </summary>
//public Enums.Platform PurchasePlatform { get; set; } = Enums.Platform.阿里巴巴;
public IList<InputPurchaseSchemeProductRequest> PurchaseSchemeProductList { get; set; }
}
}

8
BBWYB.Server.Model/Dto/Request/PurchaseScheme/QuerySchemeCountRequest.cs

@ -0,0 +1,8 @@
namespace BBWYB.Server.Model.Dto
{
public class QuerySchemeCountRequest
{
public long? ShopId { get; set; }
public IList<string> SkuIdList { get; set; }
}
}

9
BBWYB.Server.Model/Dto/Response/PurchaseScheme/PurchaseSchemeCountResponse.cs

@ -0,0 +1,9 @@
namespace BBWYB.Server.Model.Dto
{
public class PurchaseSchemeCountResponse
{
public string SkuId { get; set; }
public int SchemeCount { get; set; }
}
}

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

@ -12,8 +12,6 @@ namespace BBWYB.Server.Model.Dto
//public string PurchaserLocation { get; set; }
public decimal LastPurchasePriceCost { get => RealCost; }
public new List<PurchaseSchemeProductResponse> PurchaseSchemeProductList { get; set; }
public List<Purchaser> PurchaserList { get; set; }

Loading…
Cancel
Save