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.

693 lines
37 KiB

2 years ago
using BBWYB.Common.Extensions;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
2 years ago
using BBWYB.Server.Model;
2 years ago
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
2 years ago
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class PurchaseSchemeBusiness : BaseBusiness, IDenpendency
{
private PurchaseProductAPIService purchaseProductAPIService;
public PurchaseSchemeBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, PurchaseProductAPIService purchaseProductAPIService) : base(fsql, nLogManager, idGenerator)
{
this.purchaseProductAPIService = purchaseProductAPIService;
}
2 years ago
private void ExtractNewPurchaser<T>(IList<T> purchaserSchemeList, IList<Purchaser> addPurchaserList) where T : InputPurchaseSchemeRequest
{
List<string> reqeustPurchaserIdList = new List<string>();
foreach (var scheme in purchaserSchemeList)
reqeustPurchaserIdList.AddRange(scheme.PurchaseSchemeProductList.Select(p => p.PurchaserId));
reqeustPurchaserIdList = reqeustPurchaserIdList.Distinct().ToList();
//var reqeustPurchaserIdList = purchaserSchemeList.Select(s => s.PurchaserId).Distinct().ToList();
2 years ago
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)
{
foreach (var ps in scheme.PurchaseSchemeProductList)
2 years ago
{
if (newPurchaserIdList.Any(p => p == ps.PurchaserId) && !addPurchaserList.Any(p => p.Id == ps.PurchaserId))
2 years ago
{
addPurchaserList.Add(new Purchaser()
{
Id = ps.PurchaserId,
Id2 = ps.PurchaserId2,
Name = ps.PurchaserName,
Location = ps.PurchaserLocation,
Platform = ps.PurchasePlatform ?? Enums.Platform.,
MemberId = ps.PurchaserMemberId
});
}
2 years ago
}
2 years ago
}
}
public void EditPurchaseScheme(BatchCURDSchemeRequest batchCURDSchemeRequest)
{
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0 &&
batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0)
2 years ago
throw new BusinessException("非法参数");
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
string.IsNullOrEmpty(pp.PurchaserName))))
2 years ago
throw new BusinessException("新增方案中有采购商Id/Name/Location为空");
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
string.IsNullOrEmpty(pp.PurchaserName))))
2 years ago
throw new BusinessException("编辑方案中有采购商Id/Name/Location为空");
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count() > 0 && batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0))
throw new BusinessException("编辑方案中采购方案缺少Id");
2 years ago
List<PurchaseScheme> addPurchaseSchemeList = new List<PurchaseScheme>();
2 years ago
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>>();
2 years ago
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
{
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList)
2 years ago
{
var ps = new PurchaseScheme()
2 years ago
{
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)
2 years ago
{
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);
2 years ago
}
}
}
}
#region 更新采购方案
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
{
deletePurchaseSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
2 years ago
{
var schemeId = psReq.Id;
var defaultCost = 0M;
foreach (var pspReq in psReq.PurchaseSchemeProductList)
2 years ago
{
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)
2 years ago
{
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);
2 years ago
}
}
var psupdate = fsql.Update<PurchaseScheme>(schemeId)
.Set(ps => ps.DefaultCost, defaultCost);
updatePurchaseSchemeList.Add(psupdate);
2 years ago
}
//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);
//}
2 years ago
}
#endregion
2 years ago
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();
}
});
}
public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest)
{
List<PurchaseSchemeGroup> dbSchemeGroupList = null;
List<PurchaseScheme> dbPurchaseSchemeList = null;
#region 数据验证
if ((batchCURDSchemeRequest.EditPurchaseSchemeList == null || batchCURDSchemeRequest.EditPurchaseSchemeList.Count == 0) &&
(batchCURDSchemeRequest.AddPurchaseSchemeList == null || batchCURDSchemeRequest.AddPurchaseSchemeList.Count == 0))
throw new BusinessException("更新方案和新增方案参数不能同时为空");
if (batchCURDSchemeRequest.EditPurchaseSchemeList != null && batchCURDSchemeRequest.EditPurchaseSchemeList.Count() > 0)
{
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.Any(ps => ps.Id == 0))
throw new BusinessException("更新方案中采购方案缺少Id");
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.SchemeGroupId == null || ps.SchemeGroupId == 0))
throw new BusinessException("更新方案中采购方案缺少分组Id");
}
if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0)
{
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
string.IsNullOrEmpty(pp.PurchaserName))))
throw new BusinessException("新增方案中有采购商Id/Name/Location为空");
var productIds = batchCURDSchemeRequest.AddPurchaseSchemeList.Select(ps => ps.ProductId).ToList();
dbSchemeGroupList = fsql.Select<PurchaseSchemeGroup>().Where(psg => productIds.Contains(psg.ProductId)).ToList();
var dbSchemeGroupIds = dbSchemeGroupList.Select(psg => psg.Id).ToList();
dbPurchaseSchemeList = fsql.Select<PurchaseScheme>().Where(ps => dbSchemeGroupIds.Contains(ps.SchemeGroupId)).ToList();
foreach (var addPurchaseScheme in batchCURDSchemeRequest.AddPurchaseSchemeList)
{
if (addPurchaseScheme.SchemeGroupId == null || addPurchaseScheme.SchemeGroupId == 0)
continue;
var dbSchemeGroup = dbSchemeGroupList.FirstOrDefault(g => g.Id == addPurchaseScheme.SchemeGroupId);
if (dbSchemeGroup == null)
throw new BusinessException($"新增方案中指定了不存在的分组{addPurchaseScheme.SchemeGroupId}");
var dbPurchaseSchemeList_sameGroup = dbPurchaseSchemeList.Where(ps => ps.SchemeGroupId == addPurchaseScheme.SchemeGroupId).ToList();
if (dbPurchaseSchemeList_sameGroup.Any(ps => ps.SkuId == addPurchaseScheme.SkuId))
throw new BusinessException($"采购方案分组中Sku不允许重复,{dbSchemeGroup.GroupName}已存在{addPurchaseScheme.SkuId}的采购方案");
}
}
#endregion
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>>();
List<PurchaseSchemeGroup> insertPurchaseSchemeGroupsList = new List<PurchaseSchemeGroup>();
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
{
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList)
{
if (psReq.SchemeGroupId == null || psReq.SchemeGroupId == 0)
{
//新增分组
var saemSpuSchemeGroupList = dbSchemeGroupList.Where(psg => psg.ProductId == psReq.ProductId).ToList();
var insertSchemeGroup = new PurchaseSchemeGroup()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
GroupName = $"{psReq.ProductId}_第{saemSpuSchemeGroupList.Count() + 1}组",
ProductId = psReq.ProductId,
ShopId = psReq.ShopId
};
insertPurchaseSchemeGroupsList.Add(insertSchemeGroup);
}
var ps = new PurchaseScheme()
{
CreateTime = DateTime.Now,
Id = idGenerator.NewLong(),
ProductId = psReq.ProductId,
SkuId = psReq.SkuId,
ShopId = psReq.ShopId,
HYBDId = psReq.HYBDId,
HYSchemeId = psReq.HYSchemeId,
SchemeGroupId = psReq.SchemeGroupId ?? 0
};
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)
2 years ago
{
if (purchaseProductSku.PurchaseRatio == null)
purchaseProductSku.PurchaseRatio = 1;
}
2 years ago
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 (insertPurchaseSchemeGroupsList.Count() > 0)
fsql.Insert(insertPurchaseSchemeGroupsList).ExecuteAffrows();
if (updatePurchaseSchemeList.Count() > 0)
{
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
}
2 years ago
});
}
/// <summary>
/// 获取采购方案
2 years ago
/// </summary>
/// <param name="querySchemeRequest"></param>
/// <returns></returns>
2 years ago
public IList<PurchaseSchemeResponse> GetPurchaseSchemeList(QuerySchemeRequest request)
2 years ago
{
#region 处理条件优先级
if (request.SchemeId != null)
{
request.SchemeIdList?.Clear();
request.SchemeGroupIdList?.Clear();
request.SkuIdList?.Clear();
request.ProductIdList?.Clear();
}
2 years ago
else if (request.SchemeIdList != null && request.SchemeIdList.Count() > 0)
2 years ago
{
request.SchemeGroupIdList?.Clear();
request.SkuIdList?.Clear();
request.ProductIdList?.Clear();
}
else if (request.SchemeGroupIdList != null && request.SchemeGroupIdList.Count() > 0)
{
request.SkuIdList?.Clear();
request.ProductIdList?.Clear();
}
else if (request.SkuIdList != null && request.SkuIdList.Count() > 0)
{
request.ProductIdList?.Clear();
}
#endregion
2 years ago
var select = fsql.Select<PurchaseScheme>()
.WhereIf(request.ShopId != null && request.ShopId != 0, ps => ps.ShopId == request.ShopId)
.WhereIf(request.SchemeId != null && request.SchemeId != 0, ps => ps.Id == request.SchemeId)
.WhereIf(request.SchemeIdList != null && request.SchemeIdList.Count() > 0, ps => request.SchemeIdList.Contains(ps.Id))
.WhereIf(request.SchemeGroupIdList != null && request.SchemeGroupIdList.Count() > 0, ps => request.SchemeGroupIdList.Contains(ps.SchemeGroupId))
.WhereIf(request.SkuIdList != null && request.SkuIdList.Count() > 0, ps => request.SkuIdList.Contains(ps.SkuId))
.WhereIf(request.ProductIdList != null && request.ProductIdList.Count() > 0, ps => request.ProductIdList.Contains(ps.ProductId));
if (request.PurchasePlatform != null || !string.IsNullOrEmpty(request.PurchaserId))
{
select = select.Where(ps => fsql.Select<PurchaseSchemeProduct, Purchaser>()
.InnerJoin((psp, p) => psp.PurchaserId == p.Id)
.WhereIf(request.PurchasePlatform != null, (psp, p) => p.Platform == request.PurchasePlatform)
.WhereIf(!string.IsNullOrEmpty(request.PurchaserId), (psp, p) => psp.PurchaserId == request.PurchaserId)
.Where((psp, p) => psp.SkuPurchaseSchemeId == ps.Id).Any());
2 years ago
}
2 years ago
var sql = select.ToSql();
var purchaseSchemeList = select.OrderByDescending(ps => ps.CreateTime).ToList<PurchaseSchemeResponse>();
2 years ago
if (purchaseSchemeList.Count > 0)
{
var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList();
var purchaseSchemeProductList = fsql.Select<PurchaseSchemeProduct, Purchaser>()
.InnerJoin((psp, p) => psp.PurchaserId == p.Id)
.Where((psp, p) => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId))
.ToList((psp, p) => new PurchaseSchemeProductResponse
{
CreateTime = psp.CreateTime,
Id = psp.Id,
ProductId = psp.ProductId,
PurchaseProductId = psp.PurchaseProductId,
PurchaseUrl = psp.PurchaseUrl,
SkuId = psp.SkuId,
SkuPurchaseSchemeId = psp.SkuPurchaseSchemeId,
PurchaserId = p.Id,
PurchaserId2 = p.Id2,
PurchaserLocation = p.Location,
PurchaserName = p.Name,
PurchasePlatform = p.Platform,
PurchaserMemberId = p.MemberId
});
2 years ago
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);
}
}
#region 封装采购商
foreach (var schemeProduct in schemeProductList)
{
if (!scheme.PurchaserList.Any(p => p.Id == schemeProduct.PurchaserId))
{
scheme.PurchaserList.Add(new Purchaser()
{
Id = schemeProduct.PurchaserId,
Id2 = schemeProduct.PurchaserId2,
Location = schemeProduct.PurchaserLocation,
Name = schemeProduct.PurchaserName,
Platform = schemeProduct.PurchasePlatform,
MemberId = schemeProduct.PurchaserMemberId
});
}
}
#endregion
#region 获取采购方案基本信息
if (request.IncludePurchaseSkuBasicInfo == 1)
{
foreach (var schemeProduct in schemeProductList)
{
try
{
var basicInfo = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
{
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
PriceMode = Enums.PurchaseOrderMode.,
Platform = schemeProduct.PurchasePlatform ?? Enums.Platform.,
PurchaseProductId = schemeProduct.PurchaseProductId
});
if (basicInfo != null)
{
foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList)
{
var basicSku = basicInfo.ItemList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId);
if (basicSku != null)
{
schemeProductSku.PurchaseSkuTitle = basicSku.Title;
schemeProductSku.PurchaseSkuPrice = basicSku.Price;
schemeProductSku.PurchaseSkuLogo = basicSku.Logo;
}
}
}
}
catch
{
}
}
}
#endregion
2 years ago
}
}
return purchaseSchemeList;
}
public IList<PurchaseSchemeGroupResponse> GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request)
{
var purchaseSchemeGroupsList = fsql.Select<PurchaseSchemeGroup>()
.Where(psg => psg.ShopId == request.ShopId &&
request.ProductIdList.Contains(psg.ProductId))
.ToList<PurchaseSchemeGroupResponse>();
if (purchaseSchemeGroupsList.Count() > 0)
{
var groupIds = purchaseSchemeGroupsList.Select(g => g.Id).ToList();
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{
IncludePurchaseSkuBasicInfo = request.IncludePurchaseSkuBasicInfo,
SchemeGroupIdList = groupIds
});
foreach (var psg in purchaseSchemeGroupsList)
psg.PurchaseSchemeList = purchaseSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList();
}
return purchaseSchemeGroupsList;
}
public IList<PurchaseSchemeCountResponse> GetPurchaseSchemeCountList(QuerySchemeCountRequest request)
{
var list = fsql.Select<PurchaseScheme>().Where(ps => 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,
IncludePurchaseSkuBasicInfo = 1
});
List<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
foreach (var ps in purchaseSchemeList)
{
var defaultCost = 0M;
foreach (var psp in ps.PurchaseSchemeProductList)
{
foreach (var pss in psp.PurchaseSchemeProductSkuList)
{
defaultCost += ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1);
}
}
if (ps.DefaultCost != defaultCost)
{
var update = fsql.Update<PurchaseScheme>(ps.Id).Set(p => p.DefaultCost, defaultCost);
updatePurchaseSchemeList.Add(update);
}
}
if (updatePurchaseSchemeList.Count() > 0)
{
fsql.Transaction(() =>
{
foreach (var update in updatePurchaseSchemeList)
update.ExecuteAffrows();
});
}
return purchaseSchemeList;
}
///// <summary>
///// 获取共同拥有的采购商
///// </summary>
///// <param name="querySchemeRequest"></param>
///// <returns></returns>
//public IList<Purchaser> GetSharePurchaser(QuerySchemeRequest querySchemeRequest)
//{
// var skuCount = querySchemeRequest.SkuIdList.Count();
// var purchaseSchemeList = fsql.Select<PurchaseScheme, Purchaser>().InnerJoin((ps, p) => ps.PurchaserId == p.Id)
// .Where((ps, p) => ps.ShopId == querySchemeRequest.ShopId)
// .Where((ps, p) => querySchemeRequest.SkuIdList.Contains(ps.SkuId))
// .ToList();
// if (purchaseSchemeList.Count() == 0)
// return null;
// var group = purchaseSchemeList.GroupBy(p => p.PurchaserId);
// var sharePurchaserIdList = new List<string>();
// foreach (var g in group)
// {
// if (g.Count() == skuCount)
// sharePurchaserIdList.Add(g.Key);
// }
// if (sharePurchaserIdList.Count == 0)
// return null;
// return fsql.Select<Purchaser>().Where(p => sharePurchaserIdList.Contains(p.Id)).ToList();
//}
2 years ago
//public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
//{
// var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
// ps.PurchaserId == deletePurchaseSchemeRequest.PurchaserId).ToList(ps => ps.Id);
2 years ago
// 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();
// });
//}
2 years ago
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();
});
}
/// <summary>
/// 获取采购Sku的基本信息
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public PurchaseSkuBasicInfoResponse GetPurchaseSkuBasicInfo(PurchaseSkuBasicInfoRequest request)
{
return purchaseProductAPIService.GetProductInfo(request);
}
public IList<PurchaseSkuBasicInfoResponse> BatchGetPurchaseSkuBasicInfo(BatchPurchaseSkuBasicInfoRequest request)
{
var list = new List<PurchaseSkuBasicInfoResponse>();
foreach (var param in request.Params)
{
foreach (var purchaseId in param.PurchaseProductIds)
{
var response = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
{
FirstApiMode = request.FirstApiMode,
PriceMode = request.PriceMode,
Platform = param.Platform,
PurchaseProductId = purchaseId
});
if (response != null)
{
if (param.PurchaseSkuIds != null && param.PurchaseSkuIds.Count() > 0)
{
for (var i = 0; i < response.ItemList.Count(); i++)
{
var skuInfo = response.ItemList[i];
if (!param.PurchaseSkuIds.Any(s => s == skuInfo.PurchaseSkuId))
{
response.ItemList.RemoveAt(i);
i--;
}
}
}
list.Add(response);
}
}
}
return list;
}
2 years ago
}
}