|
|
|
using BBWYB.Common.Extensions;
|
|
|
|
using BBWYB.Common.Http;
|
|
|
|
using BBWYB.Common.Log;
|
|
|
|
using BBWYB.Common.Models;
|
|
|
|
using BBWYB.Server.Model;
|
|
|
|
using BBWYB.Server.Model.Db;
|
|
|
|
using BBWYB.Server.Model.Dto;
|
|
|
|
using FreeSql;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using System.Linq;
|
|
|
|
using Yitter.IdGenerator;
|
|
|
|
|
|
|
|
namespace BBWYB.Server.Business
|
|
|
|
{
|
|
|
|
public class PurchaseSchemeBusiness : BaseBusiness, IDenpendency
|
|
|
|
{
|
|
|
|
private PurchaseProductAPIService purchaseProductAPIService;
|
|
|
|
private RestApiService restApiService;
|
|
|
|
private AggregionPurchaserBusiness aggregionPurchaserBusiness;
|
|
|
|
private UserBusiness userBusiness;
|
|
|
|
|
|
|
|
|
|
|
|
private IList<Enums.OrderState?> invalidOrderStateList;
|
|
|
|
|
|
|
|
public PurchaseSchemeBusiness(IFreeSql fsql,
|
|
|
|
NLogManager nLogManager,
|
|
|
|
IIdGenerator idGenerator,
|
|
|
|
PurchaseProductAPIService purchaseProductAPIService,
|
|
|
|
RestApiService restApiService,
|
|
|
|
AggregionPurchaserBusiness aggregionPurchaserBusiness,
|
|
|
|
UserBusiness userBusiness) : base(fsql, nLogManager, idGenerator)
|
|
|
|
{
|
|
|
|
this.purchaseProductAPIService = purchaseProductAPIService;
|
|
|
|
this.restApiService = restApiService;
|
|
|
|
this.invalidOrderStateList = new List<Enums.OrderState?>()
|
|
|
|
{
|
|
|
|
Enums.OrderState.待付款,
|
|
|
|
Enums.OrderState.已取消,
|
|
|
|
Enums.OrderState.等待采购,
|
|
|
|
Enums.OrderState.部分采购
|
|
|
|
};
|
|
|
|
this.aggregionPurchaserBusiness = aggregionPurchaserBusiness;
|
|
|
|
this.userBusiness = userBusiness;
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
if (newPurchaserIdList.Any(p => p == ps.PurchaserId) && !addPurchaserList.Any(p => p.Id == ps.PurchaserId))
|
|
|
|
{
|
|
|
|
addPurchaserList.Add(new Purchaser()
|
|
|
|
{
|
|
|
|
Id = ps.PurchaserId,
|
|
|
|
Id2 = ps.PurchaserId2,
|
|
|
|
Name = ps.PurchaserName,
|
|
|
|
Location = ps.PurchaserLocation,
|
|
|
|
Platform = ps.PurchasePlatform ?? Enums.Platform.阿里巴巴,
|
|
|
|
MemberId = ps.PurchaserMemberId,
|
|
|
|
Tag = ps.PurchaserTag
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EditPurchaseScheme(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 != null && 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 != null && 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
//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
|
|
|
|
|
|
|
|
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, string userId)
|
|
|
|
{
|
|
|
|
//nLogManager.Default().Info($"EditPurchaseSchemeV2 {JsonConvert.SerializeObject(batchCURDSchemeRequest)}");
|
|
|
|
|
|
|
|
List<PurchaseSchemeGroup> dbSchemeGroupList = null;
|
|
|
|
List<PurchaseScheme> dbPurchaseSchemeList = null;
|
|
|
|
List<long> deleteSchemeIdList = new List<long>();
|
|
|
|
List<string> aggregationPurchaserIdList = new List<string>();
|
|
|
|
|
|
|
|
#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)
|
|
|
|
{
|
|
|
|
var groupCount = batchCURDSchemeRequest.EditPurchaseSchemeList.GroupBy(ps => ps.ProductId).Count();
|
|
|
|
if (groupCount > 1)
|
|
|
|
throw new BusinessException("只能对同一个spu的方案进行编辑");
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.Id == 0))
|
|
|
|
throw new BusinessException("更新方案中采购方案缺少Id");
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(ps.SkuId) ||
|
|
|
|
ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(psp.SkuId) ||
|
|
|
|
psp.PurchaseSchemeProductSkuList.Any(pss => string.IsNullOrEmpty(pss.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(pss.SkuId)))))
|
|
|
|
{
|
|
|
|
throw new BusinessException("更新方案缺少ProductId/SkuId");
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 验证是否存在数据残缺的采购方案
|
|
|
|
for (var i = 0; i < batchCURDSchemeRequest.EditPurchaseSchemeList.Count(); i++)
|
|
|
|
{
|
|
|
|
var editScheme = batchCURDSchemeRequest.EditPurchaseSchemeList[i];
|
|
|
|
if (editScheme.PurchaseSchemeProductList != null && editScheme.PurchaseSchemeProductList.Count() > 0)
|
|
|
|
{
|
|
|
|
for (var j = 0; j < editScheme.PurchaseSchemeProductList.Count(); j++)
|
|
|
|
{
|
|
|
|
var editSchemeProduct = editScheme.PurchaseSchemeProductList[j];
|
|
|
|
if (editSchemeProduct.PurchaseSchemeProductSkuList == null || editSchemeProduct.PurchaseSchemeProductSkuList.Count() == 0)
|
|
|
|
{
|
|
|
|
//如果采购商品不具备配件,则移除该采购商品
|
|
|
|
editScheme.PurchaseSchemeProductList.RemoveAt(j);
|
|
|
|
j--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (editScheme.PurchaseSchemeProductList == null || editScheme.PurchaseSchemeProductList.Count() == 0)
|
|
|
|
{
|
|
|
|
//采购方案不再具备采购商品,则移除该采购方案
|
|
|
|
batchCURDSchemeRequest.EditPurchaseSchemeList.RemoveAt(i);
|
|
|
|
i--;
|
|
|
|
deleteSchemeIdList.Add(editScheme.Id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
|
|
|
|
string.IsNullOrEmpty(pp.PurchaserId2) ||
|
|
|
|
string.IsNullOrEmpty(pp.PurchaserName))))
|
|
|
|
throw new BusinessException("更新方案中有采购商Id/Id2/Name/Location为空");
|
|
|
|
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.EditPurchaseSchemeList.Any(ps => ps.SchemeGroupId == null || ps.SchemeGroupId == 0))
|
|
|
|
throw new BusinessException("更新方案中采购方案缺少分组Id");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0)
|
|
|
|
{
|
|
|
|
var groupCount = batchCURDSchemeRequest.AddPurchaseSchemeList.GroupBy(ps => ps.ProductId).Count();
|
|
|
|
if (groupCount > 1)
|
|
|
|
throw new BusinessException("只能对同一个spu的方案进行编辑");
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => string.IsNullOrEmpty(ps.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(ps.SkuId) ||
|
|
|
|
ps.PurchaseSchemeProductList.Any(psp => string.IsNullOrEmpty(psp.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(psp.SkuId) ||
|
|
|
|
psp.PurchaseSchemeProductSkuList.Any(pss => string.IsNullOrEmpty(pss.ProductId) ||
|
|
|
|
string.IsNullOrEmpty(pss.SkuId)))))
|
|
|
|
{
|
|
|
|
throw new BusinessException("新增方案缺少ProductId/SkuId");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList == null ||
|
|
|
|
ps.PurchaseSchemeProductList.Count() == 0 ||
|
|
|
|
ps.PurchaseSchemeProductList.Any(psp => psp.PurchaseSchemeProductSkuList == null ||
|
|
|
|
psp.PurchaseSchemeProductSkuList.Count() == 0)))
|
|
|
|
{
|
|
|
|
throw new BusinessException("新增方案缺少商品信息");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.PurchaseSchemeProductList.Any(pp => string.IsNullOrEmpty(pp.PurchaserId) ||
|
|
|
|
string.IsNullOrEmpty(pp.PurchaserId2) ||
|
|
|
|
string.IsNullOrEmpty(pp.PurchaserName))))
|
|
|
|
throw new BusinessException("新增方案中有采购商Id/Id2/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}的采购方案");
|
|
|
|
if (!string.IsNullOrEmpty(addPurchaseScheme.HYSchemeId))
|
|
|
|
{
|
|
|
|
if (dbPurchaseSchemeList.Any(ps => ps.HYSchemeId == addPurchaseScheme.HYSchemeId))
|
|
|
|
throw new BusinessException($"慧眼方案Id{addPurchaseScheme.HYSchemeId}已被其他采购方案使用");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var uInfo = userBusiness.GetisBargainTeamByUserId(userId);
|
|
|
|
if (uInfo.isBargainTeam)
|
|
|
|
{
|
|
|
|
#region 检测是否存在被其他议价组分配的采购商
|
|
|
|
{
|
|
|
|
var tempPurchaseScmemeList = (batchCURDSchemeRequest.AddPurchaseSchemeList ?? new List<InputPurchaseSchemeRequest>()).Union(batchCURDSchemeRequest.EditPurchaseSchemeList ?? new List<EditPurchaseSchemeRequest>()).ToList();
|
|
|
|
var allPurchaserList = tempPurchaseScmemeList.SelectMany(ps => ps.PurchaseSchemeProductList.Select(psp => new { psp.PurchaserId, psp.PurchaserName })).ToList();
|
|
|
|
|
|
|
|
var allPurchaserIdList = allPurchaserList.Select(p => p.PurchaserId).Distinct().ToList();
|
|
|
|
var dbPurchaserList = fsql.Select<Purchaser>(allPurchaserIdList).ToList(p => new Purchaser()
|
|
|
|
{
|
|
|
|
Id = p.Id,
|
|
|
|
Name = p.Name,
|
|
|
|
BelongBargainTeamId = p.BelongBargainTeamId,
|
|
|
|
BelongType = p.BelongType
|
|
|
|
});
|
|
|
|
var noCurrentBargainTeamList = dbPurchaserList.Where(dp => !string.IsNullOrEmpty(dp.BelongBargainTeamId) &&
|
|
|
|
dp.BelongBargainTeamId != uInfo.user.DepartmentId).ToList();
|
|
|
|
if (noCurrentBargainTeamList.Count() > 0)
|
|
|
|
throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]");
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 检测同sku在该议价组下的数量是否超过3个
|
|
|
|
{
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count() > 0)
|
|
|
|
{
|
|
|
|
var addSchemeSkuList = batchCURDSchemeRequest.AddPurchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList();
|
|
|
|
var dbSkuSchemeCountList = fsql.Select<PurchaseScheme>().Where(ps => ps.BelongBargainTeamId == uInfo.user.DepartmentId &&
|
|
|
|
addSchemeSkuList.Contains(ps.SkuId))
|
|
|
|
.GroupBy(ps => ps.SkuId)
|
|
|
|
.ToList(g => new
|
|
|
|
{
|
|
|
|
SkuId = g.Key,
|
|
|
|
Count = g.Count()
|
|
|
|
});
|
|
|
|
var skuCountList = dbSkuSchemeCountList.Select(x => new
|
|
|
|
{
|
|
|
|
x.SkuId,
|
|
|
|
Count = x.Count + batchCURDSchemeRequest.AddPurchaseSchemeList.Count(ps => ps.SkuId == x.SkuId)
|
|
|
|
}).ToList();
|
|
|
|
|
|
|
|
var over3CountList = skuCountList.Where(x => x.Count > 3).ToList();
|
|
|
|
if (over3CountList.Count() > 0)
|
|
|
|
throw new BusinessException($"sku在同一个议价组内不能超过3个采购方案 [{string.Join(",", over3CountList.Select(x => x.SkuId))}]");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
#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> deletePartsSchemeIdList = new List<long>();
|
|
|
|
List<IUpdate<PurchaseScheme>> updatePurchaseSchemeList = new List<IUpdate<PurchaseScheme>>();
|
|
|
|
|
|
|
|
List<PurchaseSchemeGroup> insertPurchaseSchemeGroupsList = new List<PurchaseSchemeGroup>();
|
|
|
|
IInsert<PurchaseSchemeGroupIndex>? insertPurchaseSchemeGroupIndex = null;
|
|
|
|
IUpdate<PurchaseSchemeGroupIndex>? updatePurchaseSchemeGroupIndex = null;
|
|
|
|
|
|
|
|
List<HistoryPurchaseScheme> insertHistoryPSList = new List<HistoryPurchaseScheme>();
|
|
|
|
List<HistoryPurchaseSchemeProduct> insertHistoryPSPList = new List<HistoryPurchaseSchemeProduct>();
|
|
|
|
List<HistoryPurchaseSchemeProductSku> insertHistoryPSSList = new List<HistoryPurchaseSchemeProductSku>();
|
|
|
|
|
|
|
|
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
|
|
|
|
{
|
|
|
|
aggregationPurchaserIdList.AddRange(batchCURDSchemeRequest.AddPurchaseSchemeList.SelectMany(s => s.PurchaseSchemeProductList.Select(psp => psp.PurchaserId)).ToList());
|
|
|
|
|
|
|
|
var firstScheme = batchCURDSchemeRequest.AddPurchaseSchemeList.First();
|
|
|
|
|
|
|
|
ExtractNewPurchaser(batchCURDSchemeRequest.AddPurchaseSchemeList, newPurchaserList);
|
|
|
|
|
|
|
|
#region 新建分组
|
|
|
|
long? newPurchaseGroupId = null;
|
|
|
|
if (batchCURDSchemeRequest.AddPurchaseSchemeList.Any(ps => ps.SchemeGroupId == 0 || ps.SchemeGroupId == null))
|
|
|
|
{
|
|
|
|
var dbPurchaseSchemeGroupIndex = fsql.Select<PurchaseSchemeGroupIndex>().Where(psgi => psgi.ProductId == firstScheme.ProductId).ToOne();
|
|
|
|
if (dbPurchaseSchemeGroupIndex == null)
|
|
|
|
{
|
|
|
|
dbPurchaseSchemeGroupIndex = new PurchaseSchemeGroupIndex()
|
|
|
|
{
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
Index = 1,
|
|
|
|
ProductId = firstScheme.ProductId,
|
|
|
|
ShopId = firstScheme.ShopId
|
|
|
|
};
|
|
|
|
insertPurchaseSchemeGroupIndex = fsql.Insert(dbPurchaseSchemeGroupIndex);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
dbPurchaseSchemeGroupIndex.Index++;
|
|
|
|
updatePurchaseSchemeGroupIndex = fsql.Update<PurchaseSchemeGroupIndex>(dbPurchaseSchemeGroupIndex.ProductId)
|
|
|
|
.Set(x => x.Index, dbPurchaseSchemeGroupIndex.Index);
|
|
|
|
}
|
|
|
|
|
|
|
|
var insertSchemeGroup = new PurchaseSchemeGroup()
|
|
|
|
{
|
|
|
|
Id = idGenerator.NewLong(),
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
GroupName = $"{firstScheme.ProductId}-{dbPurchaseSchemeGroupIndex.Index}",
|
|
|
|
ProductId = firstScheme.ProductId,
|
|
|
|
ShopId = firstScheme.ShopId
|
|
|
|
};
|
|
|
|
insertPurchaseSchemeGroupsList.Add(insertSchemeGroup);
|
|
|
|
newPurchaseGroupId = insertSchemeGroup.Id;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
foreach (var psReq in batchCURDSchemeRequest.AddPurchaseSchemeList)
|
|
|
|
{
|
|
|
|
if (psReq.SchemeGroupId == null || psReq.SchemeGroupId == 0)
|
|
|
|
psReq.SchemeGroupId = newPurchaseGroupId;
|
|
|
|
var defaultCost = 0M;
|
|
|
|
decimal? bargainingCost = null;
|
|
|
|
var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
|
|
|
|
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,
|
|
|
|
Version = 1,
|
|
|
|
BelongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty,
|
|
|
|
BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty,
|
|
|
|
UpdateTeamId = uInfo.department.Id,
|
|
|
|
UpdateUserId = userId,
|
|
|
|
IsBargainTeamUpdate = uInfo.isBargainTeam
|
|
|
|
};
|
|
|
|
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);
|
|
|
|
|
|
|
|
defaultCost += pssReq.DefaultPrice ?? 0;
|
|
|
|
if (isContainsActualPrice)
|
|
|
|
{
|
|
|
|
if (bargainingCost == null)
|
|
|
|
bargainingCost = 0M;
|
|
|
|
bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
|
|
|
|
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0)
|
|
|
|
pss.LastBargainingTime = DateTime.Now;
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
var historyPss = pss.Map<HistoryPurchaseSchemeProductSku>();
|
|
|
|
historyPss.HistoryId = idGenerator.NewLong();
|
|
|
|
historyPss.Version = 1;
|
|
|
|
insertHistoryPSSList.Add(historyPss);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
var historyPsp = psp.Map<HistoryPurchaseSchemeProduct>();
|
|
|
|
historyPsp.HistoryId = idGenerator.NewLong();
|
|
|
|
historyPsp.Version = 1;
|
|
|
|
insertHistoryPSPList.Add(historyPsp);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
|
|
|
|
ps.DefaultCost = defaultCost;
|
|
|
|
ps.BargainingCost = bargainingCost;
|
|
|
|
if (bargainingCost != null)
|
|
|
|
ps.LastBargainingTime = DateTime.Now;
|
|
|
|
var historyPs = ps.Map<HistoryPurchaseScheme>();
|
|
|
|
historyPs.HistoryId = idGenerator.NewLong();
|
|
|
|
insertHistoryPSList.Add(historyPs);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 更新采购方案
|
|
|
|
if (batchCURDSchemeRequest.EditPurchaseSchemeList != null && batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
|
|
|
|
{
|
|
|
|
aggregationPurchaserIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.SelectMany(s => s.PurchaseSchemeProductList.Select(psp => psp.PurchaserId)).ToList());
|
|
|
|
|
|
|
|
ExtractNewPurchaser(batchCURDSchemeRequest.EditPurchaseSchemeList, newPurchaserList);
|
|
|
|
var editSchemeIdList = batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id).ToList();
|
|
|
|
var dbPurchaseSchemes = GetPurchaseSchemeList(new QuerySchemeRequest()
|
|
|
|
{
|
|
|
|
SchemeIdList = editSchemeIdList,
|
|
|
|
IncludePurchaseSkuBasicInfo = 0,
|
|
|
|
IncludeSkuStatisticsInfo = 0
|
|
|
|
});
|
|
|
|
var dbPssList = dbPurchaseSchemes.SelectMany(ps => ps.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList));
|
|
|
|
|
|
|
|
//List<PurchaseScheme> dbPurchaseSchemes = fsql.Select<PurchaseScheme>().Where(ps => editSchemeIdList.Contains(ps.Id)).ToList();
|
|
|
|
|
|
|
|
deletePartsSchemeIdList.AddRange(batchCURDSchemeRequest.EditPurchaseSchemeList.Select(ps => ps.Id));
|
|
|
|
foreach (var psReq in batchCURDSchemeRequest.EditPurchaseSchemeList)
|
|
|
|
{
|
|
|
|
var schemeId = psReq.Id;
|
|
|
|
var dbps = dbPurchaseSchemes.FirstOrDefault(x => x.Id == schemeId);
|
|
|
|
if (dbps == null)
|
|
|
|
throw new BusinessException($"未找到编辑方案{schemeId}");
|
|
|
|
var newVersion = dbps.Version + 1; //采购方案版本
|
|
|
|
var defaultCost = 0M;
|
|
|
|
decimal? bargainingCost = null; //只有当任意配件包含议价成本时才具备此值
|
|
|
|
var isContainsActualPrice = psReq.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
|
|
|
|
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;
|
|
|
|
var dbPss = dbPssList.FirstOrDefault(x => x.SkuId == pssReq.SkuId && x.PurchaseSkuId == pssReq.PurchaseSkuId && x.SkuPurchaseSchemeId == schemeId);
|
|
|
|
pss.LastBargainingTime = dbPss?.LastBargainingTime;
|
|
|
|
addPurchaseSchemeProductSkuList.Add(pss);
|
|
|
|
|
|
|
|
defaultCost += pssReq.DefaultPrice ?? 0;
|
|
|
|
if (isContainsActualPrice)
|
|
|
|
{
|
|
|
|
if (bargainingCost == null)
|
|
|
|
bargainingCost = 0M;
|
|
|
|
bargainingCost += ((pssReq.ActualPrice ?? pssReq.DefaultPrice) ?? 0) * (pssReq.PurchaseRatio ?? 1);
|
|
|
|
|
|
|
|
if (pssReq.ActualPrice != null && pssReq.ActualPrice > 0M && dbPss != null && dbPss.ActualPrice != pssReq.ActualPrice)
|
|
|
|
pss.LastBargainingTime = DateTime.Now;
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
var historyPss = pssReq.Map<HistoryPurchaseSchemeProductSku>();
|
|
|
|
historyPss.HistoryId = idGenerator.NewLong();
|
|
|
|
historyPss.CreateTime = DateTime.Now;
|
|
|
|
historyPss.SkuPurchaseSchemeId = schemeId;
|
|
|
|
historyPss.Version = newVersion;
|
|
|
|
insertHistoryPSSList.Add(historyPss);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
var historyPsp = pspReq.Map<HistoryPurchaseSchemeProduct>();
|
|
|
|
historyPsp.HistoryId = idGenerator.NewLong();
|
|
|
|
historyPsp.CreateTime = DateTime.Now;
|
|
|
|
historyPsp.SkuPurchaseSchemeId = schemeId;
|
|
|
|
historyPsp.Version = newVersion;
|
|
|
|
insertHistoryPSPList.Add(historyPsp);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
var belongBargainTeamId = uInfo.isBargainTeam ? uInfo.department.Id : string.Empty;
|
|
|
|
var belongBargainTeamName = uInfo.isBargainTeam ? uInfo.department.DepartmentName : string.Empty;
|
|
|
|
|
|
|
|
var psupdate = fsql.Update<PurchaseScheme>(schemeId)
|
|
|
|
.Set(ps => ps.DefaultCost, defaultCost)
|
|
|
|
.Set(ps => ps.BargainingCost, bargainingCost)
|
|
|
|
.SetIf(bargainingCost != null && bargainingCost != dbps.BargainingCost, ps => ps.LastBargainingTime, DateTime.Now)
|
|
|
|
.Set(ps => ps.HYSchemeId, psReq.HYSchemeId)
|
|
|
|
.Set(ps => ps.HYBDId, psReq.HYBDId)
|
|
|
|
.Set(ps => ps.Version, newVersion)
|
|
|
|
.Set(ps => ps.BelongBargainTeamId, belongBargainTeamId)
|
|
|
|
.Set(ps => ps.BelongBargainTeamName, belongBargainTeamName)
|
|
|
|
.Set(ps => ps.UpdateUserId, userId)
|
|
|
|
.Set(ps => ps.UpdateTeamId, uInfo.department.Id)
|
|
|
|
.Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam);
|
|
|
|
updatePurchaseSchemeList.Add(psupdate);
|
|
|
|
|
|
|
|
#region 处理历史版本
|
|
|
|
var historyPs = psReq.Map<HistoryPurchaseScheme>();
|
|
|
|
historyPs.LastPurchaseTime = dbps.LastPurchaseTime;
|
|
|
|
historyPs.LastPurchasePriceCost = dbps.LastPurchasePriceCost;
|
|
|
|
historyPs.DefaultCost = defaultCost;
|
|
|
|
historyPs.BargainingCost = bargainingCost;
|
|
|
|
historyPs.PurchasedCount = dbps.PurchasedCount;
|
|
|
|
historyPs.PurchasedAmount = dbps.PurchasedAmount;
|
|
|
|
historyPs.CreateTime = DateTime.Now;
|
|
|
|
historyPs.Version = newVersion;
|
|
|
|
historyPs.HistoryId = idGenerator.NewLong();
|
|
|
|
insertHistoryPSList.Add(historyPs);
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
foreach (var purchaseProductSku in addPurchaseSchemeProductSkuList)
|
|
|
|
{
|
|
|
|
if (purchaseProductSku.PurchaseRatio == null)
|
|
|
|
purchaseProductSku.PurchaseRatio = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (uInfo.isBargainTeam)
|
|
|
|
{
|
|
|
|
if (newPurchaserList.Count() > 0)
|
|
|
|
{
|
|
|
|
foreach (var p in newPurchaserList)
|
|
|
|
{
|
|
|
|
p.BelongBargainTeamId = uInfo.department.Id;
|
|
|
|
p.BelongBargainTeamName = uInfo.department.DepartmentName;
|
|
|
|
p.BelongType = Enums.PurchaserBelongType.临时;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fsql.Transaction(() =>
|
|
|
|
{
|
|
|
|
if (newPurchaserList.Count > 0)
|
|
|
|
fsql.Insert(newPurchaserList).ExecuteAffrows();
|
|
|
|
|
|
|
|
//更新,删除已存在的采购方案商品和Sku
|
|
|
|
if (deletePartsSchemeIdList.Count > 0)
|
|
|
|
{
|
|
|
|
fsql.Delete<PurchaseSchemeProduct>().Where(p => deletePartsSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<PurchaseSchemeProductSku>().Where(p => deletePartsSchemeIdList.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();
|
|
|
|
}
|
|
|
|
insertPurchaseSchemeGroupIndex?.ExecuteAffrows();
|
|
|
|
updatePurchaseSchemeGroupIndex?.ExecuteAffrows();
|
|
|
|
|
|
|
|
if (insertHistoryPSList.Count() > 0)
|
|
|
|
fsql.Insert(insertHistoryPSList).ExecuteAffrows();
|
|
|
|
if (insertHistoryPSPList.Count() > 0)
|
|
|
|
fsql.Insert(insertHistoryPSPList).ExecuteAffrows();
|
|
|
|
if (insertHistoryPSSList.Count() > 0)
|
|
|
|
fsql.Insert(insertHistoryPSSList).ExecuteAffrows();
|
|
|
|
});
|
|
|
|
|
|
|
|
//删除信息残缺的采购方案
|
|
|
|
if (deleteSchemeIdList.Count() > 0)
|
|
|
|
DeletePurchaseScheme(deleteSchemeIdList);
|
|
|
|
|
|
|
|
aggregationPurchaserIdList = aggregationPurchaserIdList.Distinct().ToList();
|
|
|
|
aggregionPurchaserBusiness.AggregionByPurchaserIdList(aggregationPurchaserIdList);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 获取采购方案
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="querySchemeRequest"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public IList<PurchaseSchemeResponse> GetPurchaseSchemeList(QuerySchemeRequest request)
|
|
|
|
{
|
|
|
|
#region 处理条件优先级
|
|
|
|
if (request.SchemeId != null)
|
|
|
|
{
|
|
|
|
request.SchemeIdList?.Clear();
|
|
|
|
request.SchemeGroupIdList?.Clear();
|
|
|
|
request.SkuIdList?.Clear();
|
|
|
|
request.ProductIdList?.Clear();
|
|
|
|
}
|
|
|
|
else if (request.SchemeIdList != null && request.SchemeIdList.Count() > 0)
|
|
|
|
{
|
|
|
|
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
|
|
|
|
|
|
|
|
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))
|
|
|
|
.WhereIf(request.BargainTeamIdList != null && request.BargainTeamIdList.Count() > 0, ps => request.BargainTeamIdList.Contains(ps.BelongBargainTeamId));
|
|
|
|
|
|
|
|
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());
|
|
|
|
}
|
|
|
|
//var sql = select.ToSql();
|
|
|
|
var purchaseSchemeList = select.OrderByDescending(ps => ps.IsFirst).OrderByDescending(ps => ps.CreateTime).ToList<PurchaseSchemeResponse>();
|
|
|
|
|
|
|
|
|
|
|
|
if (purchaseSchemeList.Count > 0)
|
|
|
|
{
|
|
|
|
var purchaseSchemeIdList = purchaseSchemeList.Select(p => p.Id).ToList();
|
|
|
|
var spuIdList = purchaseSchemeList.Select(ps => ps.ProductId).Distinct().ToList();
|
|
|
|
var skuIdList = purchaseSchemeList.Select(ps => ps.SkuId).Distinct().ToList();
|
|
|
|
var recentDate = DateTime.Now.Date.AddDays(-30);
|
|
|
|
|
|
|
|
var purchaseSchemeProductList = fsql.Select<PurchaseSchemeProduct>()
|
|
|
|
.Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId))
|
|
|
|
.ToList<PurchaseSchemeProductResponse>();
|
|
|
|
|
|
|
|
var purchaseSchemeProductSkuList = fsql.Select<PurchaseSchemeProductSku>().Where(p => purchaseSchemeIdList.Contains(p.SkuPurchaseSchemeId))
|
|
|
|
.ToList().Map<List<PurchaseSchemeProductSkuResponse>>();
|
|
|
|
|
|
|
|
if (request.IncludeSkuStatisticsInfo == 1)
|
|
|
|
{
|
|
|
|
var recent30daySpuItemCountGroups = fsql.Select<OrderSku, Order>()
|
|
|
|
.LeftJoin((osku, o) => osku.OrderId == o.Id)
|
|
|
|
.Where((osku, o) => spuIdList.Contains(osku.ProductId) &&
|
|
|
|
!invalidOrderStateList.Contains(o.OrderState) &&
|
|
|
|
o.StartTime >= recentDate)
|
|
|
|
.GroupBy((osku, o) => osku.ProductId)
|
|
|
|
.ToList(g => new
|
|
|
|
{
|
|
|
|
ProductId = g.Key,
|
|
|
|
ItemTotal = g.Sum(g.Value.Item1.ItemTotal)
|
|
|
|
});
|
|
|
|
|
|
|
|
var recent30daySkuItemCountGroups = fsql.Select<OrderSku, Order>()
|
|
|
|
.LeftJoin((osku, o) => osku.OrderId == o.Id)
|
|
|
|
.Where((osku, o) => skuIdList.Contains(osku.SkuId) &&
|
|
|
|
!invalidOrderStateList.Contains(o.OrderState) &&
|
|
|
|
o.StartTime >= recentDate)
|
|
|
|
.GroupBy((osku, o) => osku.SkuId)
|
|
|
|
.ToList(g => new
|
|
|
|
{
|
|
|
|
SkuId = g.Key,
|
|
|
|
ItemTotal = g.Sum(g.Value.Item1.ItemTotal)
|
|
|
|
});
|
|
|
|
|
|
|
|
//sku最近使用的采购方案
|
|
|
|
var skuRecentPurchaseList = fsql.Select<PurchaseScheme>()
|
|
|
|
.Where(ps => skuIdList.Contains(ps.SkuId))
|
|
|
|
.GroupBy(ps => ps.SkuId)
|
|
|
|
.WithTempQuery(g => new { SkuId = g.Key, MaxTime = g.Max(g.Value.LastPurchaseTime) })
|
|
|
|
.From<PurchaseScheme>()
|
|
|
|
.InnerJoin((ps1, ps2) => ps1.SkuId == ps2.SkuId && ps1.MaxTime == ps2.LastPurchaseTime)
|
|
|
|
.ToList((ps1, ps2) => new
|
|
|
|
{
|
|
|
|
SkuId = ps2.SkuId,
|
|
|
|
LastPurchaseTime = ps2.LastPurchaseTime,
|
|
|
|
LastPurchasePriceCost = ps2.LastPurchasePriceCost
|
|
|
|
});
|
|
|
|
|
|
|
|
foreach (var scheme in purchaseSchemeList)
|
|
|
|
{
|
|
|
|
#region 近30天spu/sku销量
|
|
|
|
scheme.Recent30DaySpuItemCount = Convert.ToInt64(recent30daySpuItemCountGroups.FirstOrDefault(x => x.ProductId == scheme.ProductId)?.ItemTotal ?? 0);
|
|
|
|
scheme.Recent30DaySkuItemCount = Convert.ToInt64(recent30daySkuItemCountGroups.FirstOrDefault(x => x.SkuId == scheme.SkuId)?.ItemTotal ?? 0);
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region sku最近采购价和最近采购时间
|
|
|
|
var recentScheme = skuRecentPurchaseList.FirstOrDefault(x => x.SkuId == scheme.SkuId);
|
|
|
|
scheme.SkuLastPurchasePriceCost = recentScheme?.LastPurchasePriceCost;
|
|
|
|
scheme.SkuLastPurchaseTime = recentScheme?.LastPurchaseTime;
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
List<PurchaseSchemeProductSkuStatistic> purchaseSkuStatisticList = null;
|
|
|
|
if (request.IncludePurchaseSkuStatisticsInfo == 1)
|
|
|
|
{
|
|
|
|
var purchaseSkuIdList = purchaseSchemeList.SelectMany(ps => ps.PurchaseSchemeProductList.SelectMany(psp => psp.PurchaseSchemeProductSkuList))
|
|
|
|
.Select(pss => pss.PurchaseSkuId)
|
|
|
|
.Distinct()
|
|
|
|
.ToList();
|
|
|
|
purchaseSkuStatisticList = fsql.Select<PurchaseSchemeProductSkuStatistic>(purchaseSkuIdList)
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
List<string> purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList();
|
|
|
|
var dbPurchaserList = fsql.Select<Purchaser>(purchaserIdList).ToList<PurchaserResponse>();
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == schemeProduct.PurchaserId);
|
|
|
|
if (purchaser != null)
|
|
|
|
{
|
|
|
|
schemeProduct.PurchaserId = purchaser.Id;
|
|
|
|
schemeProduct.PurchaserId2 = purchaser.Id2;
|
|
|
|
schemeProduct.PurchaserLocation = purchaser.Location;
|
|
|
|
schemeProduct.PurchaserMemberId = purchaser.MemberId;
|
|
|
|
schemeProduct.PurchaserName = purchaser.Name;
|
|
|
|
//schemeProduct.PurchaserPurchasedCount = purchaser.PurchasedCount;
|
|
|
|
//schemeProduct.PurchaserPurchasedSkuCount = purchaser.PurchasedSkuCount;
|
|
|
|
schemeProduct.PurchasePlatform = purchaser.Platform;
|
|
|
|
schemeProduct.PurchaserTag = purchaser.Tag;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (request.IncludePurchaseSkuStatisticsInfo == 1)
|
|
|
|
{
|
|
|
|
foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList)
|
|
|
|
{
|
|
|
|
var pssStatistic = purchaseSkuStatisticList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId);
|
|
|
|
schemeProductSku.PurchasedAmount = pssStatistic?.PurchasedAmount ?? 0M;
|
|
|
|
schemeProductSku.PurchasedItemCount = pssStatistic?.PurchasedItemCount ?? 0;
|
|
|
|
schemeProductSku.LastPurchasedPrice = pssStatistic?.LastPurchasedPrice ?? 0;
|
|
|
|
schemeProductSku.LastPurchasedTime = pssStatistic?.LastPurchasedTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#region 封装采购商
|
|
|
|
foreach (var schemeProduct in schemeProductList)
|
|
|
|
{
|
|
|
|
if (!scheme.PurchaserList.Any(p => p.Id == schemeProduct.PurchaserId))
|
|
|
|
{
|
|
|
|
var purchaser = dbPurchaserList.FirstOrDefault(p => p.Id == schemeProduct.PurchaserId);
|
|
|
|
if (purchaser != null)
|
|
|
|
scheme.PurchaserList.Add(purchaser);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 获取采购方案基本信息
|
|
|
|
if (request.IncludePurchaseSkuBasicInfo == 1)
|
|
|
|
{
|
|
|
|
scheme.DefaultCost = 0;
|
|
|
|
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 && !basicInfo.IsInvalid)
|
|
|
|
{
|
|
|
|
schemeProduct.PurchaseProductLogo = basicInfo.ProductLogo;
|
|
|
|
schemeProduct.PurchaseProductName = basicInfo.ProductName;
|
|
|
|
|
|
|
|
foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList)
|
|
|
|
{
|
|
|
|
schemeProductSku.IsInvalid = 1;
|
|
|
|
var basicSku = basicInfo.ItemList.FirstOrDefault(x => x.PurchaseSkuId == schemeProductSku.PurchaseSkuId);
|
|
|
|
if (basicSku != null)
|
|
|
|
{
|
|
|
|
schemeProductSku.IsInvalid = 0;
|
|
|
|
schemeProductSku.PurchaseSkuTitle = basicSku.Title;
|
|
|
|
schemeProductSku.PurchaseSkuPrice = basicSku.Price;
|
|
|
|
schemeProductSku.PurchaseSkuLogo = basicSku.Logo;
|
|
|
|
scheme.DefaultCost += schemeProductSku.PurchaseSkuPrice.Value * (schemeProductSku.PurchaseRatio ?? 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
schemeProduct.IsInvalid = (basicInfo == null || basicInfo.IsInvalid) ? 1 : 0;
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
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();
|
|
|
|
//}
|
|
|
|
|
|
|
|
//public void DeletePurchaser(DeletePurchaseSchemeRequest deletePurchaseSchemeRequest)
|
|
|
|
//{
|
|
|
|
// var purchaseSchemeIdList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == deletePurchaseSchemeRequest.ProductId &&
|
|
|
|
// 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)
|
|
|
|
{
|
|
|
|
DeletePurchaseScheme(new List<long>() { schemeId }, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void DeletePurchaseScheme(List<long> schemeIdList, bool isAggregationPurchaser = false)
|
|
|
|
{
|
|
|
|
IList<long> deleteSchemeGroupIdList = new List<long>();
|
|
|
|
var purchaseSchemeList = fsql.Select<PurchaseScheme>(schemeIdList).ToList();
|
|
|
|
if (purchaseSchemeList.Count() == 0)
|
|
|
|
return;
|
|
|
|
var purchaserIdList = isAggregationPurchaser ?
|
|
|
|
fsql.Select<PurchaseSchemeProduct>().Where(psp => schemeIdList.Contains(psp.SkuPurchaseSchemeId))
|
|
|
|
.Distinct()
|
|
|
|
.ToList(psp => psp.PurchaserId) : null;
|
|
|
|
var schemeGroupIdList = purchaseSchemeList.Where(ps => ps.SchemeGroupId != 0).Select(ps => ps.SchemeGroupId).ToList();
|
|
|
|
var sameSchemeGroupCountGroups = fsql.Select<PurchaseScheme>().Where(ps => ps.SchemeGroupId != 0 &&
|
|
|
|
schemeGroupIdList.Contains(ps.SchemeGroupId) &&
|
|
|
|
!schemeIdList.Contains(ps.Id))
|
|
|
|
.GroupBy(ps => ps.SchemeGroupId)
|
|
|
|
.ToList(g => new
|
|
|
|
{
|
|
|
|
SchemeGroupId = g.Key,
|
|
|
|
SchemeCount = g.Count()
|
|
|
|
});
|
|
|
|
|
|
|
|
foreach (var purchaseScheme in purchaseSchemeList)
|
|
|
|
{
|
|
|
|
if (purchaseScheme.SchemeGroupId != 0)
|
|
|
|
{
|
|
|
|
var sameSchemeGroupCount = sameSchemeGroupCountGroups.FirstOrDefault(g => g.SchemeGroupId == purchaseScheme.SchemeGroupId);
|
|
|
|
if (sameSchemeGroupCount != null && sameSchemeGroupCount.SchemeCount == 0)
|
|
|
|
deleteSchemeGroupIdList.Add(purchaseScheme.SchemeGroupId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fsql.Transaction(() =>
|
|
|
|
{
|
|
|
|
if (deleteSchemeGroupIdList.Count() > 0)
|
|
|
|
fsql.Delete<PurchaseSchemeGroup>(deleteSchemeGroupIdList).ExecuteAffrows();
|
|
|
|
fsql.Delete<PurchaseScheme>(schemeIdList).ExecuteAffrows();
|
|
|
|
fsql.Delete<PurchaseSchemeProduct>().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<PurchaseSchemeProductSku>().Where(p => schemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
|
|
|
|
});
|
|
|
|
|
|
|
|
if (purchaserIdList != null && purchaserIdList.Count() > 0 && isAggregationPurchaser)
|
|
|
|
{
|
|
|
|
aggregionPurchaserBusiness.AggregionByPurchaserIdList(purchaserIdList);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <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 pId in param.PurchaseProductIds)
|
|
|
|
{
|
|
|
|
var response = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
|
|
|
|
{
|
|
|
|
FirstApiMode = request.FirstApiMode,
|
|
|
|
PriceMode = request.PriceMode,
|
|
|
|
Platform = param.Platform,
|
|
|
|
PurchaseProductId = pId
|
|
|
|
});
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据慧眼标的Id获取采购方案(含全部配件基本信息)
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
/// <exception cref="BusinessException"></exception>
|
|
|
|
public IList<HYPurchaseSchemeResponse> GetPurchaseSchemeByHYBDId(QueryHYSchemeRequest request)
|
|
|
|
{
|
|
|
|
if (request.ShopId == 0)
|
|
|
|
throw new BusinessException("缺少店铺Id");
|
|
|
|
if (string.IsNullOrEmpty(request.ProductId))
|
|
|
|
throw new BusinessException("缺少商品Id");
|
|
|
|
if (string.IsNullOrEmpty(request.HYBDId))
|
|
|
|
throw new BusinessException("缺少标的Id");
|
|
|
|
|
|
|
|
var hyHttpResult = restApiService.SendRequest("http://hyapi.qiyue666.com", "/HuiYan/ItemPlan/GetPlanByOrderId", $"orderId={request.HYBDId}", null, HttpMethod.Get);
|
|
|
|
if (hyHttpResult.StatusCode != System.Net.HttpStatusCode.OK)
|
|
|
|
throw new BusinessException(hyHttpResult.Content);
|
|
|
|
var hyResponse = JsonConvert.DeserializeObject<ApiResponse<IList<HYPurchaseScheme>>>(hyHttpResult.Content);
|
|
|
|
if (!hyResponse.Success)
|
|
|
|
throw new BusinessException(hyResponse.Msg);
|
|
|
|
if (hyResponse.Data == null || hyResponse.Data.Count() == 0)
|
|
|
|
throw new BusinessException("该标的Id缺少采购方案");
|
|
|
|
var hySchemeList = hyResponse.Data;
|
|
|
|
var hySchemeIdList = hySchemeList.Select(x => x.Id.ToString()).ToList();
|
|
|
|
var dbSchemeList = fsql.Select<PurchaseScheme>().Where(ps => ps.ProductId == request.ProductId &&
|
|
|
|
!string.IsNullOrEmpty(ps.HYSchemeId) &&
|
|
|
|
hySchemeIdList.Contains(ps.HYSchemeId)).ToList();
|
|
|
|
|
|
|
|
var resultList = new List<HYPurchaseSchemeResponse>();
|
|
|
|
foreach (var hyScheme in hySchemeList)
|
|
|
|
{
|
|
|
|
if (hyScheme.PlanItems == null || hyScheme.PlanItems.Count() == 0)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
var hySchemeResponse = new HYPurchaseSchemeResponse()
|
|
|
|
{
|
|
|
|
Id = 0,
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
HYBDId = request.HYBDId,
|
|
|
|
IsAdded = dbSchemeList.Any(ps => ps.HYBDId == request.HYBDId && ps.HYSchemeId == hyScheme.Id.ToString()),
|
|
|
|
HYSchemeId = hyScheme.Id.ToString(),
|
|
|
|
ProductId = request.ProductId,
|
|
|
|
ShopId = request.ShopId
|
|
|
|
};
|
|
|
|
resultList.Add(hySchemeResponse);
|
|
|
|
|
|
|
|
foreach (var hySchemeProduct in hyScheme.PlanItems)
|
|
|
|
{
|
|
|
|
var basicInfo = GetPurchaseSkuBasicInfo(new PurchaseSkuBasicInfoRequest()
|
|
|
|
{
|
|
|
|
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
|
|
|
|
PriceMode = Enums.PurchaseOrderMode.批发,
|
|
|
|
Platform = Enums.Platform.阿里巴巴,
|
|
|
|
PurchaseProductId = hySchemeProduct.ItemId
|
|
|
|
});
|
|
|
|
|
|
|
|
var hySchemeProductResponse = new PurchaseSchemeProductResponse()
|
|
|
|
{
|
|
|
|
Id = 0,
|
|
|
|
ProductId = request.ProductId,
|
|
|
|
PurchasePlatform = Enums.Platform.阿里巴巴,
|
|
|
|
PurchaseProductId = hySchemeProduct.ItemId,
|
|
|
|
PurchaseProductLogo = basicInfo.ProductLogo,
|
|
|
|
PurchaseProductName = basicInfo.ProductName,
|
|
|
|
PurchaserId = basicInfo.Purchaser?.Id,
|
|
|
|
PurchaserId2 = basicInfo.Purchaser?.Id2,
|
|
|
|
PurchaserMemberId = basicInfo.Purchaser?.MemberId,
|
|
|
|
PurchaserLocation = basicInfo.Purchaser?.Location,
|
|
|
|
PurchaserName = basicInfo.Purchaser?.Name,
|
|
|
|
PurchaseUrl = $"https://detail.1688.com/offer/{hySchemeProduct.ItemId}.html"
|
|
|
|
};
|
|
|
|
hySchemeResponse.PurchaseSchemeProductList.Add(hySchemeProductResponse);
|
|
|
|
|
|
|
|
if (!hySchemeResponse.PurchaserList.Any(p => p.Id == hySchemeProductResponse.PurchaserId))
|
|
|
|
{
|
|
|
|
hySchemeResponse.PurchaserList.Add(new PurchaserResponse()
|
|
|
|
{
|
|
|
|
Id = hySchemeProductResponse.PurchaserId,
|
|
|
|
Id2 = hySchemeProductResponse.PurchaserId2,
|
|
|
|
Location = hySchemeProductResponse.PurchaserLocation,
|
|
|
|
Name = hySchemeProductResponse.PurchaserName,
|
|
|
|
Platform = hySchemeProductResponse.PurchasePlatform,
|
|
|
|
MemberId = hySchemeProductResponse.PurchaserMemberId
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach (var skuBasicInfo in basicInfo.ItemList)
|
|
|
|
{
|
|
|
|
var hySchemeProductSkuResponse = new PurchaseSchemeProductSkuResponse()
|
|
|
|
{
|
|
|
|
Id = 0,
|
|
|
|
ActualPrice = skuBasicInfo.Price,
|
|
|
|
ProductId = request.ProductId,
|
|
|
|
PurchaseProductId = skuBasicInfo.PurchaseProductId,
|
|
|
|
PurchaseRatio = 1,
|
|
|
|
PurchaseSkuId = skuBasicInfo.PurchaseSkuId,
|
|
|
|
PurchaseSkuLogo = skuBasicInfo.Logo,
|
|
|
|
PurchaseSkuPrice = skuBasicInfo.Price,
|
|
|
|
PurchaseSkuSpecId = skuBasicInfo.PurchaseSkuSpecId,
|
|
|
|
PurchaseSkuTitle = skuBasicInfo.Title
|
|
|
|
};
|
|
|
|
hySchemeProductResponse.PurchaseSchemeProductSkuList.Add(hySchemeProductSkuResponse);
|
|
|
|
hySchemeResponse.DefaultCost += skuBasicInfo.Price;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return resultList;
|
|
|
|
}
|
|
|
|
|
|
|
|
public decimal EditPurchaseRatio(EditPurchaseRatioRequest request)
|
|
|
|
{
|
|
|
|
if (request.SchemeId == 0 || string.IsNullOrEmpty(request.SkuId) || string.IsNullOrEmpty(request.PurchaseSkuId))
|
|
|
|
throw new BusinessException("参数不完整");
|
|
|
|
if (request.Ratio < 1)
|
|
|
|
request.Ratio = 1;
|
|
|
|
var schemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
|
|
|
|
{
|
|
|
|
IncludePurchaseSkuBasicInfo = 1,
|
|
|
|
SchemeId = request.SchemeId
|
|
|
|
});
|
|
|
|
if (schemeList.Count() == 0)
|
|
|
|
throw new BusinessException("采购方案不存在");
|
|
|
|
var scheme = schemeList[0];
|
|
|
|
var isContainsActualPrice = scheme.PurchaseSchemeProductList.Any(pspReq => pspReq.PurchaseSchemeProductSkuList.Any(pssReq => pssReq.ActualPrice != null));
|
|
|
|
var defaultCost = 0M;
|
|
|
|
decimal? bargainingCost = null;
|
|
|
|
long? pssId = null;
|
|
|
|
foreach (var schemeProduct in scheme.PurchaseSchemeProductList)
|
|
|
|
{
|
|
|
|
var tartegtPurchaseProductSku = schemeProduct.PurchaseSchemeProductSkuList.FirstOrDefault(pss => pss.SkuId == request.SkuId &&
|
|
|
|
pss.PurchaseSkuId == request.PurchaseSkuId);
|
|
|
|
|
|
|
|
if (tartegtPurchaseProductSku != null)
|
|
|
|
{
|
|
|
|
tartegtPurchaseProductSku.PurchaseRatio = request.Ratio;
|
|
|
|
pssId = tartegtPurchaseProductSku.Id;
|
|
|
|
}
|
|
|
|
if (pssId == null)
|
|
|
|
throw new BusinessException("未找到需要更新的采购配件");
|
|
|
|
|
|
|
|
defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => (pss.PurchaseSkuPrice ?? 0) * (pss.PurchaseRatio ?? 1));
|
|
|
|
if (isContainsActualPrice)
|
|
|
|
{
|
|
|
|
if (bargainingCost == null)
|
|
|
|
bargainingCost = 0M;
|
|
|
|
bargainingCost += schemeProduct.PurchaseSchemeProductSkuList.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fsql.Transaction(() =>
|
|
|
|
{
|
|
|
|
fsql.Update<PurchaseScheme>(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost)
|
|
|
|
.SetIf(bargainingCost != null, ps => ps.BargainingCost, bargainingCost)
|
|
|
|
.ExecuteAffrows();
|
|
|
|
fsql.Update<PurchaseSchemeProductSku>(pssId.Value).Set(pss => pss.PurchaseRatio, request.Ratio).ExecuteAffrows();
|
|
|
|
});
|
|
|
|
return defaultCost;
|
|
|
|
}
|
|
|
|
|
|
|
|
public decimal DeletePurchaseSku(DeletePurchaseSkuRequest request)
|
|
|
|
{
|
|
|
|
if (request.SchemeId == 0 || string.IsNullOrEmpty(request.SkuId) || string.IsNullOrEmpty(request.PurchaseSkuId))
|
|
|
|
throw new BusinessException("参数不完整");
|
|
|
|
var schemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
|
|
|
|
{
|
|
|
|
IncludePurchaseSkuBasicInfo = 1,
|
|
|
|
SchemeId = request.SchemeId
|
|
|
|
});
|
|
|
|
if (schemeList.Count() == 0)
|
|
|
|
throw new BusinessException("采购方案不存在");
|
|
|
|
var scheme = schemeList[0];
|
|
|
|
|
|
|
|
if (scheme.PurchaseSchemeProductList.Count() == 1)
|
|
|
|
{
|
|
|
|
var lastProduct = scheme.PurchaseSchemeProductList.FirstOrDefault();
|
|
|
|
if (lastProduct.PurchaseSchemeProductSkuList.Count() == 1)
|
|
|
|
{
|
|
|
|
var lastSku = lastProduct.PurchaseSchemeProductSkuList.FirstOrDefault();
|
|
|
|
if (lastSku.PurchaseSkuId == request.PurchaseSkuId &&
|
|
|
|
lastSku.SkuId == request.SkuId)
|
|
|
|
{
|
|
|
|
DeletePurchaseScheme(request.SchemeId);
|
|
|
|
return 0M;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
throw new BusinessException("未找到需要移除的采购sku");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var defaultCost = 0M;
|
|
|
|
long? pssId = null;
|
|
|
|
|
|
|
|
IDelete<PurchaseSchemeProductSku> deletePss = null;
|
|
|
|
IDelete<PurchaseSchemeProduct> deletePsp = null;
|
|
|
|
IUpdate<PurchaseScheme> updatePs = null;
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var schemeProduct in scheme.PurchaseSchemeProductList)
|
|
|
|
{
|
|
|
|
var tartegtPurchaseProductSku = schemeProduct.PurchaseSchemeProductSkuList.FirstOrDefault(pss => pss.SkuId == request.SkuId &&
|
|
|
|
pss.PurchaseSkuId == request.PurchaseSkuId);
|
|
|
|
if (tartegtPurchaseProductSku != null)
|
|
|
|
{
|
|
|
|
if (schemeProduct.PurchaseSchemeProductSkuList.Count() == 1)
|
|
|
|
deletePsp = fsql.Delete<PurchaseSchemeProduct>(schemeProduct.Id);
|
|
|
|
pssId = tartegtPurchaseProductSku.Id;
|
|
|
|
deletePss = fsql.Delete<PurchaseSchemeProductSku>(pssId);
|
|
|
|
}
|
|
|
|
|
|
|
|
defaultCost += schemeProduct.PurchaseSchemeProductSkuList.Where(pss => !(pss.SkuId == request.SkuId && pss.PurchaseSkuId == request.PurchaseSkuId))
|
|
|
|
.Sum(pss => ((pss.ActualPrice ?? pss.PurchaseSkuPrice) ?? 0) * (pss.PurchaseRatio ?? 1));
|
|
|
|
}
|
|
|
|
if (pssId == null)
|
|
|
|
throw new BusinessException("未找到需要移除的采购sku");
|
|
|
|
updatePs = fsql.Update<PurchaseScheme>(request.SchemeId).Set(ps => ps.DefaultCost, defaultCost);
|
|
|
|
fsql.Transaction(() =>
|
|
|
|
{
|
|
|
|
updatePs?.ExecuteAffrows();
|
|
|
|
deletePsp?.ExecuteAffrows();
|
|
|
|
deletePss?.ExecuteAffrows();
|
|
|
|
});
|
|
|
|
return defaultCost;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 设置首选采购方案
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="schemeId"></param>
|
|
|
|
public void SetFirstPurchaseScheme(long schemeId)
|
|
|
|
{
|
|
|
|
var scheme = fsql.Select<PurchaseScheme>(schemeId).ToOne(s => new
|
|
|
|
{
|
|
|
|
s.Id,
|
|
|
|
s.SkuId
|
|
|
|
});
|
|
|
|
if (scheme == null)
|
|
|
|
new BusinessException("采购方案不存在");
|
|
|
|
fsql.Transaction(() =>
|
|
|
|
{
|
|
|
|
fsql.Update<PurchaseScheme>().Set(s => s.IsFirst, 0).Where(s => s.SkuId == scheme.SkuId && s.Id != schemeId).ExecuteAffrows();
|
|
|
|
fsql.Update<PurchaseScheme>(schemeId).Set(s => s.IsFirst, 1).ExecuteAffrows();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 查询同spu同采购商的其他配件接口,排除失效和重复配件
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public IList<PurchaseSchemeProductSkuResponse> QuerySameSpuAndSamePurchaserOtherPurchaseSkuList(QuerySameSpuAndSamePurchaserOtherPurchaseSkuRequest request)
|
|
|
|
{
|
|
|
|
var purchaseSchemeProductSkuList = new List<PurchaseSchemeProductSkuResponse>();
|
|
|
|
|
|
|
|
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
|
|
|
|
{
|
|
|
|
IncludePurchaseSkuBasicInfo = 0,
|
|
|
|
PurchasePlatform = Enums.Platform.阿里巴巴,
|
|
|
|
ProductIdList = new List<string>() { request.ProductId },
|
|
|
|
PurchaserId = request.PurchaserId,
|
|
|
|
ShopId = request.ShopId
|
|
|
|
});
|
|
|
|
if (purchaseSchemeList != null && purchaseSchemeList.Count() > 0)
|
|
|
|
{
|
|
|
|
var purchaseProductIdList = new List<string>();
|
|
|
|
|
|
|
|
foreach (var scheme in purchaseSchemeList)
|
|
|
|
{
|
|
|
|
var samePspList = scheme.PurchaseSchemeProductList.Where(psp => psp.PurchaserId == request.PurchaserId);
|
|
|
|
if (samePspList.Any())
|
|
|
|
{
|
|
|
|
purchaseProductIdList.AddRange(samePspList.Select(psp => psp.PurchaseProductId));
|
|
|
|
var currentPssList = samePspList.SelectMany(psp => psp.PurchaseSchemeProductSkuList);
|
|
|
|
foreach (var currentPss in currentPssList)
|
|
|
|
{
|
|
|
|
if (purchaseSchemeProductSkuList.Any(x => x.PurchaseSkuId == currentPss.PurchaseSkuId))
|
|
|
|
continue;
|
|
|
|
purchaseSchemeProductSkuList.Add(currentPss);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
purchaseProductIdList = purchaseProductIdList.Distinct().ToList();
|
|
|
|
var purchaseProductSkuIdList = purchaseSchemeProductSkuList.Select(pss => pss.PurchaseSkuId).Distinct().ToList();
|
|
|
|
|
|
|
|
var skuBasicInfoList = BatchGetPurchaseSkuBasicInfo(new BatchPurchaseSkuBasicInfoRequest()
|
|
|
|
{
|
|
|
|
FirstApiMode = Enums.PurchaseProductAPIMode.Spider,
|
|
|
|
PriceMode = Enums.PurchaseOrderMode.批发,
|
|
|
|
Params = new List<BatchPurchaseSkuBasicInfoParamRequest>()
|
|
|
|
{
|
|
|
|
new BatchPurchaseSkuBasicInfoParamRequest()
|
|
|
|
{
|
|
|
|
Platform = Enums.Platform.阿里巴巴,
|
|
|
|
PurchaseProductIds = purchaseProductIdList,
|
|
|
|
PurchaseSkuIds = purchaseProductSkuIdList
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
for (var i = 0; i < purchaseSchemeProductSkuList.Count(); i++)
|
|
|
|
{
|
|
|
|
var pss = purchaseSchemeProductSkuList[i];
|
|
|
|
pss.IsInvalid = 0;
|
|
|
|
var basicInfo = skuBasicInfoList.FirstOrDefault(x => x.PurchaseProductId == pss.PurchaseProductId);
|
|
|
|
if (basicInfo == null || basicInfo.IsInvalid)
|
|
|
|
{
|
|
|
|
//排除失效配件
|
|
|
|
purchaseSchemeProductSkuList.RemoveAt(i);
|
|
|
|
i--;
|
|
|
|
}
|
|
|
|
|
|
|
|
var skuBasicInfo = basicInfo.ItemList?.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId);
|
|
|
|
if (skuBasicInfo == null)
|
|
|
|
{
|
|
|
|
//排除失效配件
|
|
|
|
purchaseSchemeProductSkuList.RemoveAt(i);
|
|
|
|
i--;
|
|
|
|
}
|
|
|
|
|
|
|
|
pss.PurchaseSkuLogo = skuBasicInfo.Logo;
|
|
|
|
pss.PurchaseSkuPrice = skuBasicInfo.Price;
|
|
|
|
pss.PurchaseSkuTitle = skuBasicInfo.Title;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return purchaseSchemeProductSkuList;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 批量修改采购配件实际单价
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="request"></param>
|
|
|
|
/// <param name="schemeIdList"></param>
|
|
|
|
/// <param name="userId"></param>
|
|
|
|
/// <exception cref="BusinessException"></exception>
|
|
|
|
public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, List<long>? schemeIdList, string userId)
|
|
|
|
{
|
|
|
|
if (request.ItemList == null || request.ItemList.Count() == 0)
|
|
|
|
throw new BusinessException("缺少参数");
|
|
|
|
//var schemeIdList = request.ItemList.Select(x => x.SchemeId).Distinct().ToList();
|
|
|
|
|
|
|
|
var purchseSkuIdList = request.ItemList.Select(x => x.PurchaseSkuId).Distinct().ToList();
|
|
|
|
|
|
|
|
if (schemeIdList == null || schemeIdList.Count() == 0)
|
|
|
|
schemeIdList = fsql.Select<PurchaseSchemeProductSku>()
|
|
|
|
.Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId))
|
|
|
|
.Distinct()
|
|
|
|
.ToList(pss => pss.SkuPurchaseSchemeId);
|
|
|
|
|
|
|
|
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
|
|
|
|
{
|
|
|
|
IncludePurchaseSkuBasicInfo = 1,
|
|
|
|
IncludeSkuStatisticsInfo = 0,
|
|
|
|
SchemeIdList = schemeIdList
|
|
|
|
});
|
|
|
|
|
|
|
|
if (purchaseSchemeList.Count() == 0)
|
|
|
|
return;
|
|
|
|
foreach (var ps in purchaseSchemeList)
|
|
|
|
{
|
|
|
|
foreach (var psp in ps.PurchaseSchemeProductList)
|
|
|
|
{
|
|
|
|
if (psp.IsInvalid == 1)
|
|
|
|
throw new BusinessException($"采购商品{psp.PurchaseProductId}已失效");
|
|
|
|
foreach (var pss in psp.PurchaseSchemeProductSkuList)
|
|
|
|
{
|
|
|
|
if (pss.IsInvalid == 1)
|
|
|
|
throw new BusinessException($"采购配件{pss.PurchaseSkuId}已失效");
|
|
|
|
var requestSku = request.ItemList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); //x.SkuId == pss.SkuId
|
|
|
|
if (requestSku != null)
|
|
|
|
pss.ActualPrice = requestSku.ActualPrice;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
EditPurchaseSchemeV2(new BatchCURDSchemeRequest()
|
|
|
|
{
|
|
|
|
EditPurchaseSchemeList = purchaseSchemeList.Select(ps => new EditPurchaseSchemeRequest()
|
|
|
|
{
|
|
|
|
HYBDId = ps.HYBDId,
|
|
|
|
HYSchemeId = ps.HYSchemeId,
|
|
|
|
Id = ps.Id,
|
|
|
|
ProductId = ps.ProductId,
|
|
|
|
SkuId = ps.SkuId,
|
|
|
|
ShopId = ps.ShopId,
|
|
|
|
SchemeGroupId = ps.SchemeGroupId,
|
|
|
|
PurchaseSchemeProductList = ps.PurchaseSchemeProductList.Select(psp => new InputPurchaseSchemeProductRequest()
|
|
|
|
{
|
|
|
|
ProductId = psp.ProductId,
|
|
|
|
PurchasePlatform = psp.PurchasePlatform,
|
|
|
|
PurchaseProductId = psp.PurchaseProductId,
|
|
|
|
PurchaserId = psp.PurchaserId,
|
|
|
|
PurchaserId2 = psp.PurchaserId2,
|
|
|
|
PurchaserLocation = psp.PurchaserLocation,
|
|
|
|
PurchaserMemberId = psp.PurchaserMemberId,
|
|
|
|
PurchaserName = psp.PurchaserName,
|
|
|
|
PurchaseUrl = psp.PurchaseUrl,
|
|
|
|
SkuId = psp.SkuId,
|
|
|
|
PurchaseSchemeProductSkuList = psp.PurchaseSchemeProductSkuList.Select(pss => new InputPurchaseSchemeProductSkuRequest()
|
|
|
|
{
|
|
|
|
ActualPrice = pss.ActualPrice,
|
|
|
|
DefaultPrice = pss.PurchaseSkuPrice,
|
|
|
|
ProductId = pss.ProductId,
|
|
|
|
SkuId = pss.SkuId,
|
|
|
|
PurchaseProductId = pss.PurchaseProductId,
|
|
|
|
PurchaseRatio = pss.PurchaseRatio,
|
|
|
|
PurchaseSkuId = pss.PurchaseSkuId,
|
|
|
|
PurchaseSkuSpecId = pss.PurchaseSkuSpecId
|
|
|
|
}).ToList()
|
|
|
|
}).ToList()
|
|
|
|
}).ToList()
|
|
|
|
}, userId);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|