fixed 完善商品的添加与修改逻辑
This commit is contained in:
parent
a82b7aadfb
commit
ebb19f01b7
@ -39,8 +39,7 @@ namespace ARW.Model.Dto.Business.GoodsManager.GoodsServicess.GoodsServicesRels
|
||||
/// </summary>
|
||||
public class GoodsServicesRelQueryDto : PagerInfo
|
||||
{
|
||||
|
||||
public string ids { get; set; }
|
||||
public long GoodsGuid { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,7 +61,7 @@ namespace ARW.Model.Dto.Business.GoodsManager.GoodsSpecs.GoodsSkus
|
||||
public class GoodsSkuQueryDto : PagerInfo
|
||||
{
|
||||
|
||||
public string ids { get; set; }
|
||||
public long GoodsGuid { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
@ -127,7 +127,9 @@ namespace ARW.Model.Dto.Business.GoodsManager.Goodss
|
||||
public class GoodsQueryDto : PagerInfo
|
||||
{
|
||||
|
||||
public long? ShopGuid { get; set; }
|
||||
public long ShopGuid { get; set; }
|
||||
|
||||
public string ShopName { get; set; }
|
||||
|
||||
public long? GoodsCategoryGuid { get; set; }
|
||||
|
||||
|
@ -134,7 +134,7 @@ namespace ARW.Model.Models.Business.GoodsManager.Goodss
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "商品规格(1单规格 2多规格)")]
|
||||
[SugarColumn(ColumnName = "goods_spec_type")]
|
||||
public string GoodsSpecType { get; set; }
|
||||
public int GoodsSpecType { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -27,11 +27,11 @@ namespace ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus
|
||||
[JsonConverter(typeof(ValueToStringConverter))]
|
||||
public long GoodsGuid { get; set; }
|
||||
|
||||
public string SpecValue { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :规格值ID
|
||||
/// </summary>
|
||||
public int SpecValueId { get; set; }
|
||||
public string SpecSecondValue { get; set; }
|
||||
|
||||
public string SpecThirdValue { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
@ -69,11 +69,5 @@ namespace ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus
|
||||
/// </summary>
|
||||
public decimal GoodsSkuWeight { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :SKU的规格属性(json格式)
|
||||
/// </summary>
|
||||
public string GoodsSkuProps { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
47
ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs
Normal file
47
ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs
Normal 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; }
|
||||
}
|
||||
|
||||
|
||||
}
|
34
ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs
Normal file
34
ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs
Normal 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; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -2,6 +2,7 @@ using Newtonsoft.Json;
|
||||
using OfficeOpenXml.Attributes;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ARW.Model.Vo.Business.GoodsManager.Goodss
|
||||
{
|
||||
@ -106,7 +107,7 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "商品规格")]
|
||||
public string GoodsSpecType { get; set; }
|
||||
public int GoodsSpecType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 :图片
|
||||
@ -239,5 +240,8 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss
|
||||
[EpplusTableColumn(Header = "排序")]
|
||||
public int GoodsSort { get; set; }
|
||||
|
||||
|
||||
public List<string> GoodsServicesIds { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -62,7 +62,18 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsServicess.Goods
|
||||
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>
|
||||
/// 新增商品服务与承诺关系
|
||||
|
@ -14,6 +14,12 @@ 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
|
||||
{
|
||||
@ -27,71 +33,128 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsSpecs.GoodsSkus
|
||||
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)
|
||||
public GoodsSkuServiceImpl(GoodsSkuRepository GoodsSkuRepository, GoodsSpecRelRepository goodsSpecRelRepository, SpecRepository specRepository, SpecValueRepository specValueRepository)
|
||||
{
|
||||
this._GoodsSkuRepository = GoodsSkuRepository;
|
||||
_GoodsSpecRelRepository = goodsSpecRelRepository;
|
||||
_SpecRepository = specRepository;
|
||||
_SpecValueRepository = specValueRepository;
|
||||
}
|
||||
|
||||
#region 业务逻辑代码
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询商品规格分页列表
|
||||
/// </summary>
|
||||
public async Task<PagedInfo<GoodsSkuVo>> GetGoodsSkuList(GoodsSkuQueryDto parm)
|
||||
{
|
||||
//开始拼装查询条件d
|
||||
var predicate = Expressionable.Create<GoodsSku>();
|
||||
#region 业务逻辑代码
|
||||
|
||||
var query = _GoodsSkuRepository
|
||||
.Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.OrderBy(s => s.Create_time,OrderByType.Asc)
|
||||
.Select(s => new GoodsSkuVo
|
||||
/// <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
|
||||
{
|
||||
GoodsSkuId = s.GoodsSkuId,
|
||||
GoodsGuid = s.GoodsGuid,
|
||||
SpecValueId = s.SpecValueId,
|
||||
GoodsSkuImg = s.GoodsSkuImg,
|
||||
GoodsSkuSkuCode = s.GoodsSkuSkuCode,
|
||||
GoodsSkuPrice = s.GoodsSkuPrice,
|
||||
GoodsSkuLinePrice = s.GoodsSkuLinePrice,
|
||||
GoodsSkuStockNum = s.GoodsSkuStockNum,
|
||||
GoodsSkuWeight = s.GoodsSkuWeight,
|
||||
GoodsSkuProps = s.GoodsSkuProps,
|
||||
});
|
||||
|
||||
SpecId = spec.SpecId,
|
||||
SpecName = spec.SpecName,
|
||||
Props = new List<SpecValueItem>()
|
||||
};
|
||||
goodsSpecListVo.Props.AddRange(specValues.Where(sv => sv.SpecId == spec.SpecId));
|
||||
|
||||
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>
|
||||
/// 添加或修改商品规格
|
||||
/// </summary>
|
||||
public async Task<string> AddOrUpdateGoodsSku(GoodsSku model)
|
||||
private async Task<List<SpecValueItem>> GetSpecValuesAsync(List<int> specValueIds)
|
||||
{
|
||||
if (model.GoodsSkuId != 0)
|
||||
{
|
||||
var response = await _GoodsSkuRepository.UpdateAsync(model);
|
||||
return "修改成功!";
|
||||
}
|
||||
else
|
||||
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();
|
||||
}
|
||||
|
||||
var response = await _GoodsSkuRepository.InsertReturnSnowflakeIdAsync(model);
|
||||
return "添加成功!";
|
||||
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;
|
||||
}
|
||||
|
||||
#region Excel处理
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -69,10 +69,11 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
/// </summary>
|
||||
public async Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm)
|
||||
{
|
||||
|
||||
//开始拼装查询条件d
|
||||
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(!string.IsNullOrEmpty(parm.GoodsName), s => s.GoodsName.Contains(parm.GoodsName));
|
||||
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()
|
||||
.LeftJoin<Shop>((s, c) => s.ShopGuid == c.ShopGuid)
|
||||
.Where(predicate.ToExpression())
|
||||
.WhereIF(!string.IsNullOrEmpty(parm.ShopName), (s, c) => c.ShopName.Contains(parm.ShopName))
|
||||
.OrderBy(s => s.GoodsSort, OrderByType.Asc)
|
||||
.Select((s, c) => new GoodsVo
|
||||
{
|
||||
@ -114,26 +116,32 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
GoodsAloneGradeEquity = s.GoodsAloneGradeEquity,
|
||||
GoodsShelfStatus = s.GoodsShelfStatus,
|
||||
GoodsSort = s.GoodsSort,
|
||||
|
||||
});
|
||||
|
||||
|
||||
return await query.ToPageAsync(parm);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改商品
|
||||
/// </summary>
|
||||
public async Task<string> AddOrUpdateGoods(Goods model)
|
||||
{
|
||||
|
||||
if (model.GoodsId != 0)
|
||||
try
|
||||
{
|
||||
var response = await _GoodsRepository.UpdateAsync(model);
|
||||
return "修改成功!";
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
if (model.GoodsId != 0)
|
||||
{
|
||||
await UseTranAsync(async () =>
|
||||
{
|
||||
await HandleBeforeUpdate(model);
|
||||
var response = await _GoodsRepository.UpdateAsync(model);
|
||||
});
|
||||
return "修改成功!";
|
||||
}
|
||||
else
|
||||
{
|
||||
await UseTranAsync(async () =>
|
||||
{
|
||||
@ -142,18 +150,19 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
model.GoodsGuid = response;
|
||||
await HandleAfterAdd(model);
|
||||
});
|
||||
|
||||
return "添加成功!";
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
throw;
|
||||
}
|
||||
|
||||
|
||||
return "添加成功!";
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Excel处理
|
||||
/// <summary>
|
||||
/// 数据导入处理
|
||||
@ -255,6 +264,8 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
{
|
||||
// 单规格(最高价格 最高划线价格 = 最低价格 最低划线价格)
|
||||
model = HandleSingleSpec(model);
|
||||
|
||||
// 计算价格和库存总量
|
||||
model = HandlMultipleSpecCompute(model);
|
||||
|
||||
return model;
|
||||
@ -271,7 +282,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
// 服务与承诺处理
|
||||
await HandleAddGoodsService(model);
|
||||
|
||||
// 多规格
|
||||
// 多规格处理
|
||||
await HandleAddMultiSpec(model);
|
||||
|
||||
}
|
||||
@ -315,7 +326,7 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
public async Task HandleAddMultiSpec(Goods model)
|
||||
{
|
||||
// 多规格
|
||||
if (model.GoodsSpecType == "2")
|
||||
if (model.GoodsSpecType == 2)
|
||||
{
|
||||
// 添加规格组和规格值
|
||||
var index = 1;
|
||||
@ -402,59 +413,73 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region 修改处理
|
||||
|
||||
/// <summary>
|
||||
/// 找出改规格组的所有规格值
|
||||
/// 商品修改前处理
|
||||
/// </summary>
|
||||
/// <param name="sku"></param>
|
||||
/// <param name="spec"></param>
|
||||
/// <param name="level"></param>
|
||||
/// <param name="model">商品Model</param>
|
||||
/// <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,
|
||||
3 => sku.SpecThirdValue,
|
||||
_ => null
|
||||
};
|
||||
|
||||
if (specValueName != null)
|
||||
{
|
||||
var specValue = await _SpecValueIService.GetFirstAsync(s => s.SpecId == spec.SpecId && s.SpecValueName == specValueName);
|
||||
if (specValue != null)
|
||||
// 删除所有关于该商品的规格
|
||||
var specList = await _GoodsSpecRelService.GetListAsync(s => s.GoodsGuid == model.GoodsGuid);
|
||||
foreach (var item in specList)
|
||||
{
|
||||
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>
|
||||
/// <param name="model">商品Model</param>
|
||||
/// <returns></returns>
|
||||
public Goods HandleSingleSpec(Goods model)
|
||||
{
|
||||
// 单规格
|
||||
if (model.GoodsSpecType == "1")
|
||||
if (model.GoodsSpecType == 1)
|
||||
{
|
||||
// 价格
|
||||
model.GoodsPriceLowest = model.GoodsPriceHighest;
|
||||
|
||||
// 划线价格
|
||||
if (model.GoodsDashedPriceHighest != 0)
|
||||
{
|
||||
model.GoodsDashedPriceLowest = model.GoodsDashedPriceHighest;
|
||||
}
|
||||
model.GoodsDashedPriceLowest = model.GoodsDashedPriceHighest;
|
||||
}
|
||||
|
||||
return model;
|
||||
@ -462,14 +487,14 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加商品计算多规格处理
|
||||
/// 商品计算多规格处理
|
||||
/// </summary>
|
||||
/// <param name="model">商品Model</param>
|
||||
/// <returns></returns>
|
||||
public Goods HandlMultipleSpecCompute(Goods model)
|
||||
{
|
||||
// 单规格
|
||||
if (model.GoodsSpecType == "2")
|
||||
if (model.GoodsSpecType == 2)
|
||||
{
|
||||
decimal lowestPrice = decimal.MaxValue;
|
||||
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
|
||||
|
@ -23,6 +23,15 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsServicess.Good
|
||||
Task<PagedInfo<GoodsServicesRelVo>> GetGoodsServicesRelList(GoodsServicesRelQueryDto parm);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前商品的服务与承诺Id
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<int>> GetCurrentGoodsServicesRel(GoodsServicesRelQueryDto parm);
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 新增商品服务与承诺关系
|
||||
/// </summary>
|
||||
|
@ -4,8 +4,10 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ARW.Model;
|
||||
using ARW.Model.Dto.Business.GoodsManager.Goodss;
|
||||
using ARW.Model.Dto.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;
|
||||
|
||||
namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSkus
|
||||
@ -18,23 +20,12 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsSpecs.GoodsSku
|
||||
/// </summary>
|
||||
public interface IGoodsSkuService : IBaseService<GoodsSku>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取商品规格分页列表
|
||||
/// <summary>
|
||||
/// 获取商品Sku
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedInfo<GoodsSkuVo>> GetGoodsSkuList(GoodsSkuQueryDto parm);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改商品规格
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
Task<string> AddOrUpdateGoodsSku(GoodsSku parm);
|
||||
|
||||
|
||||
|
||||
Task<GoodsSpecSkutVo> GetGoodsSkuList(GoodsSkuQueryDto parm);
|
||||
|
||||
|
||||
}
|
||||
|
@ -25,8 +25,8 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.Goodss
|
||||
/// <returns></returns>
|
||||
Task<PagedInfo<GoodsVo>> GetGoodsList(GoodsQueryDto parm);
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
/// <summary>
|
||||
/// 添加或修改商品
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
|
@ -15,7 +15,13 @@ using ARW.Model.Models.Business.GoodsManager.Goodss;
|
||||
using ARW.Model.Vo.Business.GoodsManager.Goodss;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
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
|
||||
{
|
||||
@ -30,14 +36,30 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
|
||||
public class GoodsController : BaseController
|
||||
{
|
||||
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>
|
||||
/// <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;
|
||||
_GoodsSkuService = goodsSkuService;
|
||||
_GoodsServicesRelService = goodsServicesRelService;
|
||||
_SepcIService = sepcIService;
|
||||
_SpecValueIService = specValueIService;
|
||||
_GoodsSpecRelService = goodsSpecRelService;
|
||||
}
|
||||
|
||||
|
||||
@ -54,6 +76,31 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
|
||||
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>
|
||||
@ -81,14 +128,30 @@ namespace ARW.WebApi.Controllers.Business.GoodsManager.Goodss
|
||||
[HttpDelete("{ids}")]
|
||||
[ActionPermissionFilter(Permission = "business:goods: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 不能为空")); }
|
||||
|
||||
// 删除关于该商品的关联
|
||||
//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);
|
||||
return SUCCESS("删除成功!");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 导入商品
|
||||
/// </summary>
|
||||
|
@ -125,7 +125,7 @@ $end
|
||||
|
||||
<template #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>
|
||||
</div>
|
||||
</template>
|
||||
@ -195,6 +195,7 @@ $end
|
||||
|
||||
|
||||
// -基础参数
|
||||
const loadingStatus = ref(false)
|
||||
const labelWidth = 100;
|
||||
const formRef = ref();
|
||||
const { proxy } = getCurrentInstance()
|
||||
@ -240,6 +241,7 @@ const handleAddClick = async (formEl) => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
loadingStatus.value = true
|
||||
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "map")
|
||||
@ -259,6 +261,7 @@ $end
|
||||
if (code == 200) {
|
||||
modal.msgSuccess('添加成功')
|
||||
closeDialog();
|
||||
loadingStatus.value = false
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -126,7 +126,7 @@ $end
|
||||
|
||||
<template #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>
|
||||
</div>
|
||||
</template>
|
||||
@ -216,6 +216,7 @@ const props = defineProps({
|
||||
done: Function,
|
||||
});
|
||||
|
||||
const loadingStatus = ref(false)
|
||||
const labelWidth = 100;
|
||||
const formRef = ref();
|
||||
const { proxy } = getCurrentInstance()
|
||||
@ -251,6 +252,7 @@ const handleEditClick = async (formEl) => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
loadingStatus.value = true
|
||||
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "map")
|
||||
@ -270,6 +272,7 @@ $end
|
||||
if (code == 200) {
|
||||
modal.msgSuccess('修改成功')
|
||||
closeDialog();
|
||||
loadingStatus.value = false
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user