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.

1821 lines
103 KiB

2 years ago
using BBWYB.Common.Extensions;
using BBWYB.Common.Http;
2 years ago
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;
using Newtonsoft.Json;
using System.Linq;
2 years ago
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;
}
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,
Tag = ps.PurchaserTag
});
}
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 != null && batchCURDSchemeRequest.AddPurchaseSchemeList.Count > 0)
2 years ago
{
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 != null && batchCURDSchemeRequest.EditPurchaseSchemeList.Count > 0)
2 years ago
{
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, string userId)
{
1 year ago
var uInfo = userBusiness.GetisBargainTeamByUserId(userId);
EditPurchaseSchemeV2(batchCURDSchemeRequest, uInfo);
}
public void EditPurchaseSchemeV2(BatchCURDSchemeRequest batchCURDSchemeRequest, (User user, Userdepartment mainTeam, bool isBargainTeam, Userdepartment? bargainTeam) uInfo)
1 year ago
{
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 => ps.ShopId == 0 ||
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("新增方案缺少ShopId/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}已被其他采购方案使用");
}
}
}
1 year ago
//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.bargainTeam.Id).ToList();
//if (noCurrentBargainTeamList.Count() > 0)
// throw new BusinessException($"不能包含被其他议价组使用的采购商 [{string.Join(",", noCurrentBargainTeamList.Select(x => x.Name))}]");
if (noCurrentBargainTeamList.Count() > 0)
throw new BusinessException($"该商品的供应商,已归属其他议价组.保存失败~!\r\n{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.bargainTeam.Id &&
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,
BelongBargainTeamId = uInfo.bargainTeam?.Id
};
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.bargainTeam?.Id : string.Empty,
BelongBargainTeamName = uInfo.isBargainTeam ? uInfo.bargainTeam?.DepartmentName : string.Empty,
UpdateTeamId = uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : uInfo.mainTeam.Id,
1 year ago
UpdateUserId = uInfo.user.Id,
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.bargainTeam?.Id : string.Empty;
var belongBargainTeamName = uInfo.isBargainTeam ? uInfo.bargainTeam?.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)
1 year ago
.SetIf(uInfo.isBargainTeam, ps => ps.BelongBargainTeamId, belongBargainTeamId)
.SetIf(uInfo.isBargainTeam, ps => ps.BelongBargainTeamName, belongBargainTeamName)
1 year ago
.Set(ps => ps.UpdateUserId, uInfo.user.Id)
.Set(ps => ps.UpdateTeamId, uInfo.isBargainTeam ? uInfo.bargainTeam?.Id : uInfo.mainTeam.Id)
1 year ago
.Set(ps => ps.IsBargainTeamUpdate, uInfo.isBargainTeam)
.Set(ps => ps.IsFreeFreight, psReq.IsFreeFreight);
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)
2 years ago
{
if (purchaseProductSku.PurchaseRatio == null)
purchaseProductSku.PurchaseRatio = 1;
}
if (uInfo.isBargainTeam)
{
if (newPurchaserList.Count() > 0)
{
foreach (var p in newPurchaserList)
{
p.BelongBargainTeamId = uInfo.bargainTeam?.Id;
p.BelongBargainTeamName = uInfo.bargainTeam?.DepartmentName;
p.BelongType = Enums.PurchaserBelongType.;
}
}
}
2 years ago
fsql.Transaction(() =>
{
if (newPurchaserList.Count > 0)
fsql.Insert(newPurchaserList).ExecuteAffrows();
//更新,删除已存在的采购方案商品和Sku
if (deletePartsSchemeIdList.Count > 0)
2 years ago
{
fsql.Delete<PurchaseSchemeProduct>().Where(p => deletePartsSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
fsql.Delete<PurchaseSchemeProductSku>().Where(p => deletePartsSchemeIdList.Contains(p.SkuPurchaseSchemeId)).ExecuteAffrows();
2 years ago
}
//新增
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();
2 years ago
});
//删除信息残缺的采购方案
if (deleteSchemeIdList.Count() > 0)
DeletePurchaseScheme(deleteSchemeIdList);
aggregationPurchaserIdList = aggregationPurchaserIdList.Distinct().ToList();
aggregionPurchaserBusiness.AggregionByPurchaserIdList(aggregationPurchaserIdList);
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))
.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());
2 years ago
}
//var sql = select.ToSql();
var purchaseSchemeList = select.OrderByDescending(ps => ps.IsFirst).OrderByDescending(ps => ps.CreateTime).ToList<PurchaseSchemeResponse>();
2 years ago
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);
2 years ago
2 years ago
var purchaseSchemeProductList = fsql.Select<PurchaseSchemeProduct>()
.Where(psp => purchaseSchemeIdList.Contains(psp.SkuPurchaseSchemeId))
.ToList<PurchaseSchemeProductResponse>();
2 years ago
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();
}
#region 采购商/标签/主营类目
2 years ago
List<string> purchaserIdList = purchaseSchemeProductList.Select(x => x.PurchaserId).Distinct().ToList();
var dbPurchaserList = fsql.Select<Purchaser>(purchaserIdList).ToList<PurchaserResponse>();
var purchaserExtendInfoList = fsql.Select<PurchaserExtendedInfo, Purchaser_ExtendedInfo_Relation>()
.InnerJoin((pei, per) => pei.Id == per.ExtendedInfoId)
.Where((pei, per) => purchaserIdList.Contains(per.PurchaserId))
.ToList((pei, per) => new
{
pei.Id,
pei.Name,
pei.Type,
per.PurchaserId,
pei.ExtendInfo
});
foreach (var purchaser in dbPurchaserList)
{
1 year ago
purchaser.TagList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id &&
pei.Type == Enums.PurchaserBasicInfoType.).Select(pei => new PurchaserExtendedInfoResponse()
{
Id = pei.Id,
ExtendInfo = pei.ExtendInfo,
Name = pei.Name,
Type = pei.Type
}).ToList();
1 year ago
purchaser.CategoryList = purchaserExtendInfoList.Where(pei => pei.PurchaserId == purchaser.Id &&
pei.Type == Enums.PurchaserBasicInfoType.)
.Select(pei => new PurchaserExtendedInfoResponse()
{
Id = pei.Id,
ExtendInfo = pei.ExtendInfo,
Name = pei.Name,
Type = pei.Type
}).ToList();
}
#endregion
2 years ago
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);
2 years ago
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;
2 years ago
schemeProduct.PurchasePlatform = purchaser.Platform;
schemeProduct.PurchaserTag = purchaser.Tag;
2 years ago
}
1 year ago
foreach (var schemeProductSku in schemeProduct.PurchaseSchemeProductSkuList)
{
1 year ago
schemeProductSku.IsFreeFreight = scheme.IsFreeFreight;
if (request.IncludePurchaseSkuStatisticsInfo == 1)
{
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;
}
}
2 years ago
}
}
#region 封装采购商
foreach (var schemeProduct in schemeProductList)
{
if (!scheme.PurchaserList.Any(p => p.Id == schemeProduct.PurchaserId))
{
2 years ago
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
2 years ago
}
2 years ago
}
return purchaseSchemeList;
}
public IList<PurchaseSchemeGroupResponse> GetPurchaseSchemeAndGroupList(QuerySchemeAndGroupRequest request, string userId)
{
var user = userBusiness.GetisBargainTeamByUserId(userId);
var bargainTeamId = user.bargainTeam?.Id;
var purchaseSchemeGroupsList = fsql.Select<PurchaseSchemeGroup>()
.Where(psg => psg.ShopId == request.ShopId &&
request.ProductIdList.Contains(psg.ProductId))
.WhereIf(user.isBargainTeam, psg => psg.BelongBargainTeamId == bargainTeamId)
.ToList<PurchaseSchemeGroupResponse>();
if (purchaseSchemeGroupsList.Count() > 0)
{
var groupIds = purchaseSchemeGroupsList.Select(g => g.Id).ToList();
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{
IncludePurchaseSkuBasicInfo = request.IncludePurchaseSkuBasicInfo,
1 year ago
SchemeGroupIdList = groupIds,
BargainTeamIdList = user.isBargainTeam ? new List<string>() { user.bargainTeam.Id } : null,
});
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;
}
public IList<MergePurchaseSchemeProductSkuResponse> GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaser(GetMergePurchaseSchemeProductSkuBySameSpuAndPurchaserRequest request, string userId)
{
var user = userBusiness.GetisBargainTeamByUserId(userId);
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{
ProductIdList = new List<string>() { request.ProductId },
PurchaserId = request.PurchaserId,
BargainTeamIdList = user.isBargainTeam ? new List<string>() { user.bargainTeam.Id } : null,
IncludePurchaseSkuBasicInfo = 1
});
//List<SpuOptimizationCompetitiveTenderTask> competitiveTenderTaskList = null;
List<SpuOptimizationProductSkuUpdateQuotedPriceRecord> updatePriceList = null;
if (user.isBargainTeam && request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0)
{
//competitiveTenderTaskList = fsql.Select<SpuOptimizationCompetitiveTenderTask>()
// .Where(ct => ct.SpuOptimizationTaskId == request.SpuOptimizationTaskId &&
// ct.BargainTeamId == user.bargainTeam.Id)
// .ToList();
updatePriceList = fsql.Select<SpuOptimizationProductSkuUpdateQuotedPriceRecord>()
.Where(x => x.SpuOptimizationTaskId == request.SpuOptimizationTaskId &&
x.BargainTeamId == user.bargainTeam.Id)
.ToList();
}
var mergePssList = new List<MergePurchaseSchemeProductSkuResponse>();
foreach (var scheme in purchaseSchemeList)
{
foreach (var psp in scheme.PurchaseSchemeProductList)
{
if (psp.PurchaserId != request.PurchaserId)
continue;
foreach (var pss in psp.PurchaseSchemeProductSkuList)
{
var mergePss = mergePssList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId);
if (mergePss == null)
{
mergePss = pss.Map<MergePurchaseSchemeProductSkuResponse>();
mergePssList.Add(mergePss);
1 year ago
}
if (updatePriceList != null && updatePriceList.Any(x => x.PurchaseSkuId == mergePss.PurchaseSkuId))
mergePss.IsUpdateQuotedPrice = true;
mergePss.BelongSkuIdList.Add(pss.SkuId);
}
}
}
return mergePssList;
}
///// <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)
{
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);
}
}
2 years ago
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();
2 years ago
});
if (purchaserIdList != null && purchaserIdList.Count() > 0 && isAggregationPurchaser)
{
aggregionPurchaserBusiness.AggregionByPurchaserIdList(purchaserIdList);
}
2 years ago
}
/// <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))
{
2 years ago
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="userId"></param>
/// <exception cref="BusinessException"></exception>
1 year ago
public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, string userId)
{
var user = userBusiness.GetisBargainTeamByUserId(userId);
BatchEditPurchaseSkuActualPrice(request, user);
}
/// <summary>
/// 批量修改采购配件实际单价
/// </summary>
/// <param name="request"></param>
/// <param name="uInfo"></param>
/// <exception cref="BusinessException"></exception>
public void BatchEditPurchaseSkuActualPrice(BatchEditPurchaseSkuActualPriceRequest request, (User user, Userdepartment mainTeam, bool isBargainTeam, Userdepartment? bargainTeam) uInfo)
{
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();
1 year ago
var schemeRelationList = fsql.Select<PurchaseSchemeProductSku>()
.WhereIf(!string.IsNullOrEmpty(request.ProductId), pss => pss.ProductId == request.ProductId)
1 year ago
.Where(pss => purchseSkuIdList.Contains(pss.PurchaseSkuId))
.Distinct()
.ToList(pss => new
{
pss.SkuPurchaseSchemeId,
pss.PurchaseSkuId
});
1 year ago
var schemeIdList = schemeRelationList.Select(x => x.SkuPurchaseSchemeId).Distinct().ToList();
var purchaseSchemeList = GetPurchaseSchemeList(new QuerySchemeRequest()
{
IncludePurchaseSkuBasicInfo = 1,
IncludeSkuStatisticsInfo = 0,
1 year ago
SchemeIdList = schemeIdList,
BargainTeamIdList = uInfo.isBargainTeam ? new List<string>() { uInfo.bargainTeam.Id } : null,
});
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}已失效");
1 year ago
var requestSku = request.ItemList.FirstOrDefault(x => x.PurchaseSkuId == pss.PurchaseSkuId); //x.SkuId == pss.SkuId
if (requestSku != null)
1 year ago
{
pss.ActualPrice = requestSku.ActualPrice;
1 year ago
if (requestSku.IsFreeFreight != null)
ps.IsFreeFreight = requestSku.IsFreeFreight;
}
}
}
}
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()
1 year ago
}).ToList(),
IsFreeFreight = ps.IsFreeFreight
}).ToList()
1 year ago
}, uInfo);
}
1 year ago
public IList<GoodsSourceTagResponse> GetGoodsSourceTagsInfo(List<QueryGoodsSourceTagRequest> requestList, string userId)
{
var uInfo = userBusiness.GetisBargainTeamByUserId(userId, true);
1 year ago
var list = new List<GoodsSourceTagResponse>();
var purchaseSkuIdList = requestList.Select(x => x.PurchaseSkuId).ToList();
var purchaserIdList = requestList.Select(x => x.PurchaserId).ToList();
#region 查询淘汰供应商
#endregion
#region 查询采购过的sku
var purchasedSkuList = fsql.Select<OrderPurchaseInfo, OrderPurchaseRelationInfo, PurchaseScheme>()
.InnerJoin((opi, opri, ps) => opi.OrderId == opri.OrderId && opi.PurchaseOrderId == opri.PurchaseOrderId)
.InnerJoin((opi, opri, ps) => opri.SchemeId == ps.Id)
.Where((opi, opri, ps) => opi.IsEnabled == true &&
purchaseSkuIdList.Contains(opri.PurchaseSkuId))
.GroupBy((opi, opri, ps) => new { opri.PurchaseSkuId, opri.SchemeId, ps.BelongBargainTeamId })
.ToList(g => new
{
g.Key.PurchaseSkuId,
g.Key.SchemeId,
g.Key.BelongBargainTeamId
});
foreach (var purchasedSku in purchasedSkuList)
{
1 year ago
if (list.Any(x => x.PurchaseSku == purchasedSku.PurchaseSkuId))
continue;
1 year ago
var goodsSourceTag = new GoodsSourceTagResponse()
{
PurchaseSku = purchasedSku.PurchaseSkuId,
GoodsSourceTagType = purchasedSku.BelongBargainTeamId != uInfo.bargainTeam.Id ?
1 year ago
Enums.GoodsSourceTagType. :
Enums.GoodsSourceTagType.
};
list.Add(goodsSourceTag);
purchaseSkuIdList.Remove(purchasedSku.PurchaseSkuId); //排除采购过的sku
}
#endregion
#region 查询添加为采购方案的sku
if (purchaseSkuIdList.Count() > 0)
1 year ago
{
var schemeUsedSkuList = fsql.Select<PurchaseScheme, PurchaseSchemeProductSku>()
.InnerJoin((ps, pss) => ps.Id == pss.SkuPurchaseSchemeId)
.Where((ps, pss) => purchaseSkuIdList.Contains(pss.PurchaseSkuId))
.GroupBy((ps, pss) => new { pss.SkuPurchaseSchemeId, pss.PurchaseSkuId, ps.BelongBargainTeamId })
.ToList(g => new
{
g.Key.PurchaseSkuId,
g.Key.SkuPurchaseSchemeId,
g.Key.BelongBargainTeamId
});
foreach (var usedSku in schemeUsedSkuList)
{
if (list.Any(x => x.PurchaseSku == usedSku.PurchaseSkuId))
continue;
var goodsSourceTag = new GoodsSourceTagResponse()
{
PurchaseSku = usedSku.PurchaseSkuId,
GoodsSourceTagType = usedSku.BelongBargainTeamId != uInfo.bargainTeam.Id ?
1 year ago
Enums.GoodsSourceTagType. :
Enums.GoodsSourceTagType.
};
list.Add(goodsSourceTag);
purchaseSkuIdList.Remove(usedSku.PurchaseSkuId); //排除绑定过采购方案的sku
}
}
#endregion
#region 历史采购过相同供应商的商品
if (purchaseSkuIdList.Count() > 0)
{
purchaserIdList.Clear();
var goodsSourceList = requestList.Where(x => purchaseSkuIdList.Contains(x.PurchaseSkuId)).ToList();
purchaserIdList.AddRange(goodsSourceList.Select(x => x.PurchaserId).Distinct().ToList());
var purchasedBySamePurchaserList = fsql.Select<OrderPurchaseInfo, OrderPurchaseRelationInfo, PurchaseScheme>()
.InnerJoin((opi, opri, ps) => opi.OrderId == opri.OrderId &&
opi.PurchaseOrderId == opri.PurchaseOrderId)
.InnerJoin((opi, opri, ps) => opri.SchemeId == ps.Id)
.Where((opi, opri, ps) => opi.IsEnabled == true &&
purchaserIdList.Contains(opi.PurchaserId))
.GroupBy((opi, opri, ps) => new { opi.PurchaserId, opri.SchemeId, ps.BelongBargainTeamId })
.ToList(g => new
{
g.Key.PurchaserId,
g.Key.SchemeId,
g.Key.BelongBargainTeamId
});
if (purchasedBySamePurchaserList.Count() > 0)
{
foreach (var purchaserBySame in purchasedBySamePurchaserList)
{
var item = goodsSourceList.FirstOrDefault(x => x.PurchaserId == purchaserBySame.PurchaserId);
if (item != null && list.Any(x => x.PurchaseSku == item.PurchaseSkuId))
continue;
list.Add(new GoodsSourceTagResponse()
{
PurchaseSku = item.PurchaseSkuId,
GoodsSourceTagType = purchaserBySame.BelongBargainTeamId != uInfo.bargainTeam.Id ?
1 year ago
Enums.GoodsSourceTagType. :
Enums.GoodsSourceTagType.
});
}
}
1 year ago
}
#endregion
return list;
}
2 years ago
}
}