191 lines
7.1 KiB
C#
191 lines
7.1 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 商品规格接口实现类
|
|
///
|
|
/// @author lwh
|
|
/// @date 2023-06-19
|
|
/// </summary>
|
|
[AppService(ServiceType = typeof(IGoodsSkuService), ServiceLifetime = LifeTime.Transient)]
|
|
public class GoodsSkuServiceImpl : BaseService<GoodsSku>, 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 业务逻辑代码
|
|
|
|
/// <summary>
|
|
/// 获取商品Sku
|
|
/// </summary>
|
|
/// <param name="parm"></param>
|
|
/// <returns></returns>
|
|
public async Task<GoodsSpecSkutVo> GetGoodsSkuList(GoodsSkuQueryDto parm)
|
|
{
|
|
var goodsSpecSkutVo = new GoodsSpecSkutVo();
|
|
goodsSpecSkutVo.GoodsSpecList = new List<GoodsSpecListVo>();
|
|
|
|
// 获取商品的规格组列表
|
|
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<SpecValueItem>()
|
|
};
|
|
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<List<SpecValueItem>> GetSpecValuesAsync(List<int> 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<List<GoodsSkuVo>> GetSkuListWithSpecValuesAsync(List<GoodsSku> 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();
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取规格值名称
|
|
/// </summary>
|
|
/// <param name="specValueId"></param>
|
|
/// <returns></returns>
|
|
public string GetSpecValueName(int specValueId)
|
|
{
|
|
// 从数据库中查询规格值名称
|
|
var specValue = _SpecValueRepository.GetById(specValueId);
|
|
if (specValue != null)
|
|
{
|
|
return specValue.SpecValueName;
|
|
}
|
|
|
|
return string.Empty;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取全部规格值名称
|
|
/// </summary>
|
|
/// <param name="skuId"></param>
|
|
/// <returns></returns>
|
|
public async Task<string> 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
|
|
|
|
}
|
|
}
|