using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Infrastructure; using ARW.Model; using ARW.Repository; using ARW.Repository.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Dto.Business.GoodsManager.Goodss; using ARW.Model.Vo.Business.GoodsManager.Goodss; using ARW.Repository.Business.GoodsManager.GoodsSpecs.GoodsSpecRels; using ARW.Repository.Business.GoodsManager.GoodsSpecs.Specs; using ARW.Repository.Business.GoodsManager.GoodsSpecs.SpecValues; using Dapper; namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsSpecs.GoodsSkus { /// /// 商品规格接口实现类 /// /// @author lwh /// @date 2023-06-19 /// [AppService(ServiceType = typeof(IGoodsSkuService), ServiceLifetime = LifeTime.Transient)] public class GoodsSkuServiceImpl : BaseService, IGoodsSkuService { private readonly GoodsSkuRepository _GoodsSkuRepository; private readonly GoodsSpecRelRepository _GoodsSpecRelRepository; private readonly SpecRepository _SpecRepository; private readonly SpecValueRepository _SpecValueRepository; public GoodsSkuServiceImpl(GoodsSkuRepository GoodsSkuRepository, GoodsSpecRelRepository goodsSpecRelRepository, SpecRepository specRepository, SpecValueRepository specValueRepository) { this._GoodsSkuRepository = GoodsSkuRepository; _GoodsSpecRelRepository = goodsSpecRelRepository; _SpecRepository = specRepository; _SpecValueRepository = specValueRepository; } #region 业务逻辑代码 /// /// 获取商品Sku /// /// /// public async Task GetGoodsSkuList(GoodsSkuQueryDto parm) { var goodsSpecSkutVo = new GoodsSpecSkutVo(); goodsSpecSkutVo.GoodsSpecList = new List(); // 获取商品的规格组列表 var specIds = (await _GoodsSpecRelRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid)) .Select(item => item.SpecId) .Distinct() .ToList(); var specs = await _SpecRepository.GetListAsync(s => specIds.Contains(s.SpecId)); var specValueIds = (await _GoodsSpecRelRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid)) .Where(item => item.SpecValueId != 0) .Select(item => item.SpecValueId) .Distinct() .ToList(); var specValues = await GetSpecValuesAsync(specValueIds); foreach (var spec in specs) { var goodsSpecListVo = new GoodsSpecListVo { SpecId = spec.SpecId, SpecName = spec.SpecName, Props = new List() }; goodsSpecListVo.Props.AddRange(specValues.Where(sv => sv.SpecId == spec.SpecId)); goodsSpecSkutVo.GoodsSpecList.Add(goodsSpecListVo); } // 获取Sku列表 var skuList = await _GoodsSkuRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid); goodsSpecSkutVo.SkuList = await GetSkuListWithSpecValuesAsync(skuList); return goodsSpecSkutVo; } private async Task> GetSpecValuesAsync(List specValueIds) { var specValues = await _SpecValueRepository.GetListAsync(sv => specValueIds.Contains(sv.SpecValueId)); return specValues.Select(sv => new SpecValueItem { SpecId = sv.SpecId, SpecValueId = sv.SpecValueId, SpecValueName = sv.SpecValueName }).ToList(); } private async Task> GetSkuListWithSpecValuesAsync(List skuList) { var specValueIds = skuList.SelectMany(sku => new[] { sku.SpecValueId, sku.SpecSecondValueId, sku.SpecThirdValueId }) .Distinct() .Where(id => id != 0) .ToList(); var specValues = await GetSpecValuesAsync(specValueIds); return skuList.Select(sku => new GoodsSkuVo { GoodsSkuId = sku.GoodsSkuId, GoodsGuid = sku.GoodsGuid, SpecValue = specValues.FirstOrDefault(sv => sv.SpecValueId == sku.SpecValueId)?.SpecValueName, SpecSecondValue = specValues.FirstOrDefault(sv => sv.SpecValueId == sku.SpecSecondValueId)?.SpecValueName, SpecThirdValue = specValues.FirstOrDefault(sv => sv.SpecValueId == sku.SpecThirdValueId)?.SpecValueName, GoodsSkuImg = sku.GoodsSkuImg, GoodsSkuSkuCode = sku.GoodsSkuSkuCode, GoodsSkuPrice = sku.GoodsSkuPrice, GoodsSkuLinePrice = sku.GoodsSkuLinePrice, GoodsSkuStockNum = sku.GoodsSkuStockNum, GoodsSkuWeight = sku.GoodsSkuWeight }).ToList(); } /// /// 获取规格值名称 /// /// /// public string GetSpecValueName(int specValueId) { // 从数据库中查询规格值名称 var specValue = _SpecValueRepository.GetById(specValueId); if (specValue != null) { return specValue.SpecValueName; } return string.Empty; } /// /// 获取全部规格值名称 /// /// /// public async Task GetSpecValueFullName(int skuId) { var str = ""; // 从数据库中查询规格值名称 var sku = await _GoodsSkuRepository.GetByIdAsync(skuId); if (sku != null) { var specValue = await _SpecValueRepository.GetByIdAsync(sku.SpecValueId); str += specValue.SpecValueName; if (sku.SpecSecondValueId != 0) { var specSecondValue = await _SpecValueRepository.GetByIdAsync(sku.SpecSecondValueId); str += " " + specSecondValue.SpecValueName; } if (sku.SpecThirdValueId != 0) { var specThirdValue = await _SpecValueRepository.GetByIdAsync(sku.SpecThirdValueId); str += " " + specThirdValue.SpecValueName; } } return str; } #region Excel处理 #endregion #endregion } }