步步为盈
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

216 lines
12 KiB

3 years ago
using BBWY.Common.Extensions;
using BBWY.Common.Models;
using BBWY.Server.Model.Db;
using BBWY.Server.Model.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using Yitter.IdGenerator;
namespace BBWY.Server.Business
{
public class PurchaseSchemeBusiness : BaseBusiness, IDenpendency
{
public PurchaseSchemeBusiness(IFreeSql fsql, NLog.ILogger logger, IIdGenerator idGenerator) : base(fsql, logger, idGenerator) { }
private void ExtractNewPurchaser<T>(IList<T> purchaserSchemeList, IList<Purchaser> addPurchaserList) where T : InputPurchaseSchemeRequest
{
var reqeustPurchaserIdList = purchaserSchemeList.Select(s => s.PurchaserId).Distinct().ToList();
var existPurchaserIdList = fsql.Select<Purchaser>().Where(p => reqeustPurchaserIdList.Contains(p.Id)).ToList(p => p.Id);
var newPurchaserIdList = reqeustPurchaserIdList.Except(existPurchaserIdList);
foreach (var scheme in purchaserSchemeList)
{
if (newPurchaserIdList.Any(p => p == scheme.PurchaserId) && !addPurchaserList.Any(p => p.Id == scheme.PurchaserId))
addPurchaserList.Add(new Purchaser() { Id = scheme.PurchaserId, Name = scheme.PurchaserName, Location = scheme.PurchaserLocation });
3 years ago
}
}
public void EditPurchaseScheme(BatchCURDSchemeRequest batchCURDSchemeRequest)
{
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0 && batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0)
throw new BusinessException("非法参数");
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(p => string.IsNullOrEmpty(p.PurchaserId) ||
string.IsNullOrEmpty(p.PurchaserName) ||
string.IsNullOrEmpty(p.PurchaserLocation)))
throw new BusinessException("新增方案中有采购商Id/Name/Location为空");
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(p => string.IsNullOrEmpty(p.PurchaserId) ||
string.IsNullOrEmpty(p.PurchaserName) ||
string.IsNullOrEmpty(p.PurchaserLocation)))
throw new BusinessException("编辑方案中有采购商Id/Name/Location为空");
3 years ago
List<PurchaseScheme> addPurchaseSchemeList = null;
List<PurchaseSchemeProduct> addPurchaseSchemeProductList = new List<PurchaseSchemeProduct>();
List<PurchaseSchemeProductSku> addPurchaseSchemeProductSkuList = new List<PurchaseSchemeProductSku>();
List<Purchaser> newPurchaserList = new List<Purchaser>();
List<long> deletePurchaseSchemeIdList = new List<long>();
#region 新增采购方案
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
{
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
addPurchaseSchemeList = batchCURDSchemeRequest.AddPurchaseSchemeList.Map<List<Model.Db.PurchaseScheme>>();
foreach (var scheme in addPurchaseSchemeList)
{
scheme.Id = idGenerator.NewLong();
scheme.CreateTime = DateTime.Now;
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
#region 更新采购方案
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
{
//ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList);
deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
var editPurchaseSchemeList = batchCURDSchemeRequest.EditPurchaseSchemeList.Map<List<Model.Db.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
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();
});
}
/// <summary>
/// 获取采购方案
/// </summary>
/// <param name="querySchemeRequest"></param>
/// <returns></returns>
3 years ago
public IList<PurchaseSchemeResponse> GetPurchaseSchemeList(QuerySchemeRequest querySchemeRequest)
{
var purchaseSchemeList = fsql.Select<PurchaseScheme, Purchaser>().InnerJoin((ps, p) => ps.PurchaserId == p.Id)
.Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId)
.WhereIf(querySchemeRequest.SkuIdList != null && querySchemeRequest.SkuIdList.Count() > 0, (ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId))
3 years ago
.WhereIf(!string.IsNullOrEmpty(querySchemeRequest.PurchaserId), (ps, p) => ps.PurchaserId == querySchemeRequest.PurchaserId)
.ToList((ps, p) => new PurchaseSchemeResponse()
{
Id = ps.Id,
ProductId = ps.ProductId,
SkuId = ps.SkuId,
ShopId = ps.ShopId,
PurchaserId = p.Id,
PurchaserName = p.Name,
PurchaserLocation = p.Location,
3 years ago
DefaultCost = ps.DefaultCost,
RealCost = ps.RealCost,
CreateTime = ps.CreateTime,
PurchasePlatform = ps.PurchasePlatform
3 years ago
});
if (purchaseSchemeList.Count > 0)
{
var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList();
var purchaseSchemeProductList = fsql.Select<PurchaseSchemeProduct>().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId))
.ToList().Map<List<PurchaseSchemeProductResponse>>();
var purchaseSchemeProductSkuList = fsql.Select<PurchaseSchemeProductSku>().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId))
.ToList().Map<List<PurchaseSchemeProductSkuResponse>>();
foreach (var scheme in purchaseSchemeList)
{
var schemeProductList = purchaseSchemeProductList.Where(ps => ps.SkuPurchaseSchemeId == scheme.Id);
if (schemeProductList.Count() > 0)
{
scheme.PurchaseSchemeProductList.AddRange(schemeProductList);
foreach (var schemeProduct in schemeProductList)
{
var schemeProductSkuList = purchaseSchemeProductSkuList.Where(psk => psk.SkuPurchaseSchemeId == scheme.Id &&
psk.PurchaseProductId == schemeProduct.PurchaseProductId);
if (schemeProductSkuList.Count() > 0)
schemeProduct.PurchaseSchemeProductSkuList.AddRange(schemeProductSkuList);
}
}
}
}
return purchaseSchemeList;
}
/// <summary>
/// 获取共有采购商
/// </summary>
/// <param name="querySchemeRequest"></param>
/// <returns></returns>
public IList<Purchaser> GetSharePurchaser(QuerySchemeRequest querySchemeRequest)
{
}
3 years ago
public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
{
var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
3 years ago
ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
fsql.Transaction(() =>
{
fsql.Delete<PurchaseScheme>(purchaseSchemeIdList).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProduct>().Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(psps => purchaseSchemeIdList.Contains(psps.SkuPurchaseSchemeId)).ExecuteAffrows();
});
}
public void DeletePurchaseScheme(long schemeId)
{
fsql.Transaction(() =>
{
fsql.Delete<PurchaseScheme>(schemeId).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProduct>().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(p => p.SkuPurchaseSchemeId == schemeId).ExecuteAffrows();
});
}
3 years ago
}
}