fixed 完善商品的添加与修改逻辑

This commit is contained in:
lwh 2023-06-26 22:29:40 +08:00
parent a82b7aadfb
commit ebb19f01b7
17 changed files with 413 additions and 129 deletions

View File

@ -39,8 +39,7 @@ namespace ARW.Model.Dto.Business.GoodsManager.GoodsServicess.GoodsServicesRels
/// </summary> /// </summary>
public class GoodsServicesRelQueryDto : PagerInfo public class GoodsServicesRelQueryDto : PagerInfo
{ {
public long GoodsGuid { get; set; }
public string ids { get; set; }
} }

View File

@ -61,7 +61,7 @@ namespace ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus
public class GoodsSkuQueryDto : PagerInfo public class GoodsSkuQueryDto : PagerInfo
{ {
public string ids { get; set; } public long GoodsGuid { get; set; }
} }

View File

@ -127,7 +127,9 @@ namespace ARW.Model.Dto.Business.GoodsManager.Goodss
public class GoodsQueryDto : PagerInfo public class GoodsQueryDto : PagerInfo
{ {
public long? ShopGuid { get; set; } public long ShopGuid { get; set; }
public string ShopName { get; set; }
public long? GoodsCategoryGuid { get; set; } public long? GoodsCategoryGuid { get; set; }

View File

@ -134,7 +134,7 @@ namespace ARW.Model.Models.Business.GoodsManager.Goodss
/// </summary> /// </summary>
[EpplusTableColumn(Header = "商品规格(1单规格 2多规格)")] [EpplusTableColumn(Header = "商品规格(1单规格 2多规格)")]
[SugarColumn(ColumnName = "goods_spec_type")] [SugarColumn(ColumnName = "goods_spec_type")]
public string GoodsSpecType { get; set; } public int GoodsSpecType { get; set; }
/// <summary> /// <summary>

View File

@ -27,11 +27,11 @@ namespace ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus
[JsonConverter(typeof(ValueToStringConverter))] [JsonConverter(typeof(ValueToStringConverter))]
public long GoodsGuid { get; set; } public long GoodsGuid { get; set; }
public string SpecValue { get; set; }
/// <summary> public string SpecSecondValue { get; set; }
/// 描述 :规格值ID
/// </summary> public string SpecThirdValue { get; set; }
public int SpecValueId { get; set; }
/// <summary> /// <summary>
@ -69,11 +69,5 @@ namespace ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus
/// </summary> /// </summary>
public decimal GoodsSkuWeight { get; set; } public decimal GoodsSkuWeight { get; set; }
/// <summary>
/// 描述 :SKU的规格属性(json格式)
/// </summary>
public string GoodsSkuProps { get; set; }
} }
} }

View File

@ -0,0 +1,47 @@
using Newtonsoft.Json;
using OfficeOpenXml.Attributes;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace ARW.Model.Vo.Business.GoodsManager.Goodss
{
/// <summary>
/// 商品规格列表展示对象
///
/// @author lwh
/// @date 2023-06-26
/// </summary>
public class GoodsSpecListVo
{
/// <summary>
/// 描述 :规格组Id
/// </summary>
public int SpecId { get; set; }
/// <summary>
/// 描述 :规格组名称
/// </summary>
public string SpecName { get; set; }
/// <summary>
/// 描述 :规格值列表
/// </summary>
public List<SpecValueItem> Props { get; set; }
}
public class SpecValueItem
{
public int SpecId { get; set; }
public int SpecValueId { get; set; }
public string SpecValueName { get; set; }
}
}

View File

@ -0,0 +1,34 @@
using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using Newtonsoft.Json;
using OfficeOpenXml.Attributes;
using SqlSugar;
using System;
using System.Collections.Generic;
namespace ARW.Model.Vo.Business.GoodsManager.Goodss
{
/// <summary>
/// 商品规格列表展示对象
///
/// @author lwh
/// @date 2023-06-26
/// </summary>
public class GoodsSpecSkutVo
{
/// <summary>
/// 描述 :规格列表
/// </summary>
public List<GoodsSpecListVo> GoodsSpecList { get; set; }
/// <summary>
/// 描述 :Sku列表
/// </summary>
public List<GoodsSkuVo> SkuList { get; set; }
}
}

View File

@ -2,6 +2,7 @@ using Newtonsoft.Json;
using OfficeOpenXml.Attributes; using OfficeOpenXml.Attributes;
using SqlSugar; using SqlSugar;
using System; using System;
using System.Collections.Generic;
namespace ARW.Model.Vo.Business.GoodsManager.Goodss namespace ARW.Model.Vo.Business.GoodsManager.Goodss
{ {
@ -106,7 +107,7 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss
/// 空值 : false /// 空值 : false
/// </summary> /// </summary>
[EpplusTableColumn(Header = "商品规格")] [EpplusTableColumn(Header = "商品规格")]
public string GoodsSpecType { get; set; } public int GoodsSpecType { get; set; }
/// <summary> /// <summary>
/// 描述 :图片 /// 描述 :图片
@ -239,5 +240,8 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss
[EpplusTableColumn(Header = "排序")] [EpplusTableColumn(Header = "排序")]
public int GoodsSort { get; set; } public int GoodsSort { get; set; }
public List<string> GoodsServicesIds { get; set; }
} }
} }

View File

@ -62,7 +62,18 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsServicess.Goods
return await query.ToPageAsync(parm); return await query.ToPageAsync(parm);
} }
/// <summary>
/// 获取当前商品的服务与承诺Id
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public async Task<List<int>> GetCurrentGoodsServicesRel(GoodsServicesRelQueryDto parm)
{
var idList = new List<int>();
var goodsServiceList = await _GoodsServicesRelRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid);
if (goodsServiceList.Count > 0) idList = goodsServiceList.Select(s => s.ServiceId).ToList();
return idList;
}
/// <summary> /// <summary>
/// 新增商品服务与承诺关系 /// 新增商品服务与承诺关系

View File

@ -14,6 +14,12 @@ using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Vo.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 namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsSpecs.GoodsSkus
{ {
@ -27,71 +33,128 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsSpecs.GoodsSkus
public class GoodsSkuServiceImpl : BaseService<GoodsSku>, IGoodsSkuService public class GoodsSkuServiceImpl : BaseService<GoodsSku>, IGoodsSkuService
{ {
private readonly GoodsSkuRepository _GoodsSkuRepository; private readonly GoodsSkuRepository _GoodsSkuRepository;
private readonly GoodsSpecRelRepository _GoodsSpecRelRepository;
private readonly SpecRepository _SpecRepository;
private readonly SpecValueRepository _SpecValueRepository;
public GoodsSkuServiceImpl(GoodsSkuRepository GoodsSkuRepository) public GoodsSkuServiceImpl(GoodsSkuRepository GoodsSkuRepository, GoodsSpecRelRepository goodsSpecRelRepository, SpecRepository specRepository, SpecValueRepository specValueRepository)
{ {
this._GoodsSkuRepository = GoodsSkuRepository; this._GoodsSkuRepository = GoodsSkuRepository;
_GoodsSpecRelRepository = goodsSpecRelRepository;
_SpecRepository = specRepository;
_SpecValueRepository = specValueRepository;
} }
#region #region
/// <summary>
/// 查询商品规格分页列表
/// </summary>
public async Task<PagedInfo<GoodsSkuVo>> GetGoodsSkuList(GoodsSkuQueryDto parm)
{
//开始拼装查询条件d
var predicate = Expressionable.Create<GoodsSku>();
var query = _GoodsSkuRepository /// <summary>
.Queryable() /// 获取商品Sku
.Where(predicate.ToExpression()) /// </summary>
.OrderBy(s => s.Create_time,OrderByType.Asc) /// <param name="parm"></param>
.Select(s => new GoodsSkuVo /// <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
{ {
GoodsSkuId = s.GoodsSkuId, SpecId = spec.SpecId,
GoodsGuid = s.GoodsGuid, SpecName = spec.SpecName,
SpecValueId = s.SpecValueId, Props = new List<SpecValueItem>()
GoodsSkuImg = s.GoodsSkuImg, };
GoodsSkuSkuCode = s.GoodsSkuSkuCode, goodsSpecListVo.Props.AddRange(specValues.Where(sv => sv.SpecId == spec.SpecId));
GoodsSkuPrice = s.GoodsSkuPrice,
GoodsSkuLinePrice = s.GoodsSkuLinePrice,
GoodsSkuStockNum = s.GoodsSkuStockNum,
GoodsSkuWeight = s.GoodsSkuWeight,
GoodsSkuProps = s.GoodsSkuProps,
});
return await query.ToPageAsync(parm); goodsSpecSkutVo.GoodsSpecList.Add(goodsSpecListVo);
}
// 获取Sku列表
var skuList = await _GoodsSkuRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid);
goodsSpecSkutVo.SkuList = await GetSkuListWithSpecValuesAsync(skuList);
return goodsSpecSkutVo;
} }
/// <summary> private async Task<List<SpecValueItem>> GetSpecValuesAsync(List<int> specValueIds)
/// 添加或修改商品规格
/// </summary>
public async Task<string> AddOrUpdateGoodsSku(GoodsSku model)
{ {
if (model.GoodsSkuId != 0) var specValues = await _SpecValueRepository.GetListAsync(sv => specValueIds.Contains(sv.SpecValueId));
{ return specValues.Select(sv => new SpecValueItem
var response = await _GoodsSkuRepository.UpdateAsync(model);
return "修改成功!";
}
else
{ {
SpecId = sv.SpecId,
SpecValueId = sv.SpecValueId,
SpecValueName = sv.SpecValueName
}).ToList();
}
var response = await _GoodsSkuRepository.InsertReturnSnowflakeIdAsync(model); private async Task<List<GoodsSkuVo>> GetSkuListWithSpecValuesAsync(List<GoodsSku> skuList)
return "添加成功!"; {
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;
} }
#region Excel处理 #region Excel处理
#endregion #endregion
#endregion
#endregion
} }
} }

View File

@ -69,10 +69,11 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
/// </summary> /// </summary>
public async Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm) public async Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm)
{ {
//开始拼装查询条件d //开始拼装查询条件d
var predicate = Expressionable.Create<Goods>(); var predicate = Expressionable.Create<Goods>();
predicate = predicate.AndIF(parm.ShopGuid != null, s => s.ShopGuid == parm.ShopGuid); predicate = predicate.AndIF(parm.ShopGuid != 0, s => s.ShopGuid == parm.ShopGuid);
predicate = predicate.AndIF(parm.GoodsCategoryGuid != null, s => s.GoodsCategoryGuid == parm.GoodsCategoryGuid); predicate = predicate.AndIF(parm.GoodsCategoryGuid != null, s => s.GoodsCategoryGuid == parm.GoodsCategoryGuid);
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.GoodsName), s => s.GoodsName.Contains(parm.GoodsName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.GoodsName), s => s.GoodsName.Contains(parm.GoodsName));
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.GoodsCoding), s => s.GoodsCoding.Contains(parm.GoodsCoding)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.GoodsCoding), s => s.GoodsCoding.Contains(parm.GoodsCoding));
@ -80,6 +81,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
.Queryable() .Queryable()
.LeftJoin<Shop>((s, c) => s.ShopGuid == c.ShopGuid) .LeftJoin<Shop>((s, c) => s.ShopGuid == c.ShopGuid)
.Where(predicate.ToExpression()) .Where(predicate.ToExpression())
.WhereIF(!string.IsNullOrEmpty(parm.ShopName), (s, c) => c.ShopName.Contains(parm.ShopName))
.OrderBy(s => s.GoodsSort, OrderByType.Asc) .OrderBy(s => s.GoodsSort, OrderByType.Asc)
.Select((s, c) => new GoodsVo .Select((s, c) => new GoodsVo
{ {
@ -114,26 +116,32 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
GoodsAloneGradeEquity = s.GoodsAloneGradeEquity, GoodsAloneGradeEquity = s.GoodsAloneGradeEquity,
GoodsShelfStatus = s.GoodsShelfStatus, GoodsShelfStatus = s.GoodsShelfStatus,
GoodsSort = s.GoodsSort, GoodsSort = s.GoodsSort,
}); });
return await query.ToPageAsync(parm); return await query.ToPageAsync(parm);
} }
/// <summary> /// <summary>
/// 添加或修改商品 /// 添加或修改商品
/// </summary> /// </summary>
public async Task<string> AddOrUpdateGoods(Goods model) public async Task<string> AddOrUpdateGoods(Goods model)
{ {
try
if (model.GoodsId != 0)
{ {
var response = await _GoodsRepository.UpdateAsync(model); if (model.GoodsId != 0)
return "修改成功!"; {
} await UseTranAsync(async () =>
else {
{ await HandleBeforeUpdate(model);
try var response = await _GoodsRepository.UpdateAsync(model);
});
return "修改成功!";
}
else
{ {
await UseTranAsync(async () => await UseTranAsync(async () =>
{ {
@ -142,18 +150,19 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
model.GoodsGuid = response; model.GoodsGuid = response;
await HandleAfterAdd(model); await HandleAfterAdd(model);
}); });
return "添加成功!";
} }
catch (Exception) }
{ catch (Exception)
{
throw; throw;
}
return "添加成功!";
} }
} }
#region Excel处理 #region Excel处理
/// <summary> /// <summary>
/// 数据导入处理 /// 数据导入处理
@ -255,6 +264,8 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
{ {
// 单规格(最高价格 最高划线价格 = 最低价格 最低划线价格) // 单规格(最高价格 最高划线价格 = 最低价格 最低划线价格)
model = HandleSingleSpec(model); model = HandleSingleSpec(model);
// 计算价格和库存总量
model = HandlMultipleSpecCompute(model); model = HandlMultipleSpecCompute(model);
return model; return model;
@ -271,7 +282,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
// 服务与承诺处理 // 服务与承诺处理
await HandleAddGoodsService(model); await HandleAddGoodsService(model);
// 多规格 // 多规格处理
await HandleAddMultiSpec(model); await HandleAddMultiSpec(model);
} }
@ -315,7 +326,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
public async Task HandleAddMultiSpec(Goods model) public async Task HandleAddMultiSpec(Goods model)
{ {
// 多规格 // 多规格
if (model.GoodsSpecType == "2") if (model.GoodsSpecType == 2)
{ {
// 添加规格组和规格值 // 添加规格组和规格值
var index = 1; var index = 1;
@ -402,59 +413,73 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
} }
#endregion
#region
/// <summary> /// <summary>
/// 找出改规格组的所有规格值 /// 商品修改前处理
/// </summary> /// </summary>
/// <param name="sku"></param> /// <param name="model">商品Model</param>
/// <param name="spec"></param>
/// <param name="level"></param>
/// <returns></returns> /// <returns></returns>
public async Task<int> GetSpecValueId(SkuDto sku, Spec spec, int level) public async Task<Goods> HandleBeforeUpdate(Goods model)
{ {
if (spec == null) if (model.GoodsSpecType == 1)
{ {
return 0; // 单规格(最高价格 最高划线价格 = 最低价格 最低划线价格)
model = HandleSingleSpec(model);
} }
var specValueName = level switch if (model.GoodsSpecType == 2)
{ {
1 => sku.SpecValue, // 删除所有关于该商品的规格
2 => sku.SpecSecondValue, var specList = await _GoodsSpecRelService.GetListAsync(s => s.GoodsGuid == model.GoodsGuid);
3 => sku.SpecThirdValue, foreach (var item in specList)
_ => null
};
if (specValueName != null)
{
var specValue = await _SpecValueIService.GetFirstAsync(s => s.SpecId == spec.SpecId && s.SpecValueName == specValueName);
if (specValue != null)
{ {
return specValue.SpecValueId; await _SepcIService.DeleteAsync(s => s.SpecId == item.SpecId);
await _SpecValueIService.DeleteAsync(s => s.SpecId == item.SpecId);
} }
await _GoodsSpecRelService.DeleteAsync(s => s.GoodsGuid == model.GoodsGuid);
await _GoodsSkuService.DeleteAsync(s => s.GoodsGuid == model.GoodsGuid);
// 再重新添加该商品的规格
await HandleAddMultiSpec(model);
// 计算价格和库存总量
model = HandlMultipleSpecCompute(model);
} }
return 0; // 删除所有关于该商品的服务与承诺
await _GoodsServicesRelIService.DeleteAsync(s => s.GoodsGuid == model.GoodsGuid);
// 再重新添加该商品的服务与承诺
await HandleAddGoodsService(model);
return model;
} }
#endregion
#region
/// <summary> /// <summary>
/// 添加商品单规格处理 /// 商品单规格处理
/// </summary> /// </summary>
/// <param name="model">商品Model</param> /// <param name="model">商品Model</param>
/// <returns></returns> /// <returns></returns>
public Goods HandleSingleSpec(Goods model) public Goods HandleSingleSpec(Goods model)
{ {
// 单规格 // 单规格
if (model.GoodsSpecType == "1") if (model.GoodsSpecType == 1)
{ {
// 价格 // 价格
model.GoodsPriceLowest = model.GoodsPriceHighest; model.GoodsPriceLowest = model.GoodsPriceHighest;
// 划线价格 // 划线价格
if (model.GoodsDashedPriceHighest != 0) model.GoodsDashedPriceLowest = model.GoodsDashedPriceHighest;
{
model.GoodsDashedPriceLowest = model.GoodsDashedPriceHighest;
}
} }
return model; return model;
@ -462,14 +487,14 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
/// <summary> /// <summary>
/// 添加商品计算多规格处理 /// 商品计算多规格处理
/// </summary> /// </summary>
/// <param name="model">商品Model</param> /// <param name="model">商品Model</param>
/// <returns></returns> /// <returns></returns>
public Goods HandlMultipleSpecCompute(Goods model) public Goods HandlMultipleSpecCompute(Goods model)
{ {
// 单规格 // 单规格
if (model.GoodsSpecType == "2") if (model.GoodsSpecType == 2)
{ {
decimal lowestPrice = decimal.MaxValue; decimal lowestPrice = decimal.MaxValue;
decimal highestPrice = decimal.MinValue; decimal highestPrice = decimal.MinValue;
@ -513,8 +538,44 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
} }
#endregion /// <summary>
/// 找出改规格组的所有规格值
/// </summary>
/// <param name="sku"></param>
/// <param name="spec"></param>
/// <param name="level"></param>
/// <returns></returns>
public async Task<int> GetSpecValueId(SkuDto sku, Spec spec, int level)
{
if (spec == null)
{
return 0;
}
var specValueName = level switch
{
1 => sku.SpecValue,
2 => sku.SpecSecondValue,
3 => sku.SpecThirdValue,
_ => null
};
if (specValueName != null)
{
var specValue = await _SpecValueIService.GetFirstAsync(s => s.SpecId == spec.SpecId && s.SpecValueName == specValueName);
if (specValue != null)
{
return specValue.SpecValueId;
}
}
return 0;
}
#endregion
#endregion #endregion

View File

@ -23,6 +23,15 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsServicess.Good
Task<PagedInfo<GoodsServicesRelVo>> GetGoodsServicesRelList(GoodsServicesRelQueryDto parm); Task<PagedInfo<GoodsServicesRelVo>> GetGoodsServicesRelList(GoodsServicesRelQueryDto parm);
/// <summary>
/// 获取当前商品的服务与承诺Id
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<List<int>> GetCurrentGoodsServicesRel(GoodsServicesRelQueryDto parm);
/// <summary> /// <summary>
/// 新增商品服务与承诺关系 /// 新增商品服务与承诺关系
/// </summary> /// </summary>

View File

@ -4,8 +4,10 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ARW.Model; using ARW.Model;
using ARW.Model.Dto.Business.GoodsManager.Goodss;
using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Models.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Vo.Business.GoodsManager.Goodss;
using ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus; using ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus;
namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus
@ -18,23 +20,12 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSku
/// </summary> /// </summary>
public interface IGoodsSkuService : IBaseService<GoodsSku> public interface IGoodsSkuService : IBaseService<GoodsSku>
{ {
/// <summary> /// <summary>
/// 获取商品规格分页列表 /// 获取商品Sku
/// </summary> /// </summary>
/// <param name="parm"></param> /// <param name="parm"></param>
/// <returns></returns> /// <returns></returns>
Task<PagedInfo<GoodsSkuVo>> GetGoodsSkuList(GoodsSkuQueryDto parm); Task<GoodsSpecSkutVo> GetGoodsSkuList(GoodsSkuQueryDto parm);
/// <summary>
/// 添加或修改商品规格
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
Task<string> AddOrUpdateGoodsSku(GoodsSku parm);
} }

View File

@ -25,8 +25,8 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.Goodss
/// <returns></returns> /// <returns></returns>
Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm); Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm);
/// <summary> /// <summary>
/// 添加或修改商品 /// 添加或修改商品
/// </summary> /// </summary>
/// <param name="parm"></param> /// <param name="parm"></param>

View File

@ -15,7 +15,13 @@ using ARW.Model.Models.Business.GoodsManager.Goodss;
using ARW.Model.Vo.Business.GoodsManager.Goodss; using ARW.Model.Vo.Business.GoodsManager.Goodss;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using ARW.Admin.WebApi.Framework; using ARW.Admin.WebApi.Framework;
using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus;
using ARW.Service.Business.IBusinessService.GoodsManager.GoodsServicess.GoodsServicesRels;
using ARW.Model.Dto.Business.GoodsManager.GoodsServicess.GoodsServicesRels;
using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSpecRels;
using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.Specs;
using ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.SpecValues;
namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
{ {
@ -30,14 +36,30 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
public class GoodsController : BaseController public class GoodsController : BaseController
{ {
private readonly IGoodsService _GoodsService; private readonly IGoodsService _GoodsService;
private readonly IGoodsSkuService _GoodsSkuService;
private readonly IGoodsServicesRelService _GoodsServicesRelService;
private readonly ISpecService _SepcIService;
private readonly ISpecValueService _SpecValueIService;
private readonly IGoodsSpecRelService _GoodsSpecRelService;
/// <summary> /// <summary>
/// 依赖注入 /// 依赖注入
/// </summary> /// </summary>
/// <param name="GoodsService">商品服务</param> /// <param name="GoodsService">商品服务</param>
public GoodsController(IGoodsService GoodsService) /// <param name="goodsSkuService">商品Sku服务</param>
/// <param name="goodsServicesRelService">商品服务与承诺服务</param>
/// <param name="sepcIService">规格组服务</param>
/// <param name="specValueIService">规格值服务</param>
/// <param name="goodsSpecRelService">商品规格关系服务</param>
public GoodsController(IGoodsService GoodsService, IGoodsSkuService goodsSkuService, IGoodsServicesRelService goodsServicesRelService, ISpecService sepcIService, ISpecValueService specValueIService, IGoodsSpecRelService goodsSpecRelService)
{ {
_GoodsService = GoodsService; _GoodsService = GoodsService;
_GoodsSkuService = goodsSkuService;
_GoodsServicesRelService = goodsServicesRelService;
_SepcIService = sepcIService;
_SpecValueIService = specValueIService;
_GoodsSpecRelService = goodsSpecRelService;
} }
@ -54,6 +76,31 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
return SUCCESS(res); return SUCCESS(res);
} }
/// <summary>
/// 获取商品Sku
/// </summary>
/// <param name="parm">查询参数</param>
/// <returns></returns>
[HttpGet("getGoodsSkuList")]
public async Task<IActionResult> GetGoodsSkuList([FromQuery] GoodsSkuQueryDto parm)
{
var res = await _GoodsSkuService.GetGoodsSkuList(parm);
return SUCCESS(res);
}
/// <summary>
/// 获取商品服务与承诺
/// </summary>
/// <param name="parm">查询参数</param>
/// <returns></returns>
[HttpGet("getCurrentGoodsServiceList")]
public async Task<IActionResult> GetCurrentGoodsServiceList([FromQuery] GoodsServicesRelQueryDto parm)
{
var res = await _GoodsServicesRelService.GetCurrentGoodsServicesRel(parm);
return SUCCESS(res);
}
/// <summary> /// <summary>
/// 添加或修改商品 /// 添加或修改商品
/// </summary> /// </summary>
@ -81,14 +128,30 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
[HttpDelete("{ids}")] [HttpDelete("{ids}")]
[ActionPermissionFilter(Permission = "business:goods:delete")] [ActionPermissionFilter(Permission = "business:goods:delete")]
[Log(Title = "商品删除", BusinessType = BusinessType.DELETE)] [Log(Title = "商品删除", BusinessType = BusinessType.DELETE)]
public IActionResult Delete(string ids) public async Task<IActionResult> Delete(string ids)
{ {
long[] idsArr = Tools.SpitLongArrary(ids); int[] idsArr = Tools.SpitIntArrary(ids);
if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
// 删除关于该商品的关联
//var goodsList = await _GoodsService.GetListAsync(s => idsArr.Contains(s.GoodsId));
//var goodsGuids = goodsList.Select(s => s.GoodsGuid).ToList();
//var specList = await _GoodsSpecRelService.GetListAsync(s => goodsGuids.Contains(s.GoodsGuid));
//var specIds = specList.Select(s => s.SpecId).ToList();
//await _SepcIService.DeleteAsync(s => specIds.Contains(s.SpecId));
//await _SpecValueIService.DeleteAsync(s => specIds.Contains(s.SpecId));
//await _GoodsSpecRelService.DeleteAsync(s => goodsGuids.Contains(s.GoodsGuid));
//await _GoodsSkuService.DeleteAsync(s => goodsGuids.Contains(s.GoodsGuid));
//await _GoodsServicesRelService.DeleteAsync(s => goodsGuids.Contains(s.GoodsGuid));
var response = _GoodsService.Delete(idsArr); var response = _GoodsService.Delete(idsArr);
return SUCCESS("删除成功!"); return SUCCESS("删除成功!");
} }
/// <summary> /// <summary>
/// 导入商品 /// 导入商品
/// </summary> /// </summary>

View File

@ -125,7 +125,7 @@ $end
<template #footer> <template #footer>
<div key="dialog-footer"> <div key="dialog-footer">
<el-button type="primary" @click="handleAddClick(formRef)">添加</el-button> <el-button type="primary" @click="handleAddClick(formRef)" :loading="loadingStatus">添加</el-button>
<el-button @click="handleResetClick(formRef)">重置</el-button> <el-button @click="handleResetClick(formRef)">重置</el-button>
</div> </div>
</template> </template>
@ -195,6 +195,7 @@ $end
// -基础参数 // -基础参数
const loadingStatus = ref(false)
const labelWidth = 100; const labelWidth = 100;
const formRef = ref(); const formRef = ref();
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
@ -240,6 +241,7 @@ const handleAddClick = async (formEl) => {
if (!valid) { if (!valid) {
return; return;
} }
loadingStatus.value = true
$foreach(item in genTable.Columns) $foreach(item in genTable.Columns)
$if(item.HtmlType == "map") $if(item.HtmlType == "map")
@ -259,6 +261,7 @@ $end
if (code == 200) { if (code == 200) {
modal.msgSuccess('添加成功') modal.msgSuccess('添加成功')
closeDialog(); closeDialog();
loadingStatus.value = false
} }
}); });
}; };

View File

@ -126,7 +126,7 @@ $end
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="handleEditClick(formRef)">编辑</el-button> <el-button type="primary" @click="handleEditClick(formRef)" :loading="loadingStatus">编辑</el-button>
<el-button @click="handleResetClick(formRef)">重置</el-button> <el-button @click="handleResetClick(formRef)">重置</el-button>
</div> </div>
</template> </template>
@ -216,6 +216,7 @@ const props = defineProps({
done: Function, done: Function,
}); });
const loadingStatus = ref(false)
const labelWidth = 100; const labelWidth = 100;
const formRef = ref(); const formRef = ref();
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
@ -251,6 +252,7 @@ const handleEditClick = async (formEl) => {
if (!valid) { if (!valid) {
return; return;
} }
loadingStatus.value = true
$foreach(item in genTable.Columns) $foreach(item in genTable.Columns)
$if(item.HtmlType == "map") $if(item.HtmlType == "map")
@ -270,6 +272,7 @@ $end
if (code == 200) { if (code == 200) {
modal.msgSuccess('修改成功') modal.msgSuccess('修改成功')
closeDialog(); closeDialog();
loadingStatus.value = false
} }
}); });
} }