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