From ebb19f01b73a50731e915940b5b8f26fa585d605 Mon Sep 17 00:00:00 2001 From: lwh <2679599887@qq.com> Date: Mon, 26 Jun 2023 22:29:40 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20=E5=AE=8C=E5=96=84=E5=95=86=E5=93=81?= =?UTF-8?q?=E7=9A=84=E6=B7=BB=E5=8A=A0=E4=B8=8E=E4=BF=AE=E6=94=B9=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GoodsServicesRels/GoodsServicesRelDto.cs | 3 +- .../GoodsSpecs/GoodsSkus/GoodsSkuDto.cs | 2 +- .../Business/GoodsManager/Goodss/GoodsDto.cs | 4 +- .../Business/GoodsManager/Goodss/Goods.cs | 2 +- .../GoodsSpecs/GoodsSkus/GoodsSkuVo.cs | 14 +- .../GoodsManager/Goodss/GoodsSpecListVo.cs | 47 ++++++ .../GoodsManager/Goodss/GoodsSpecSkutVo.cs | 34 ++++ .../Business/GoodsManager/Goodss/GoodsVo.cs | 6 +- .../GoodsServicesRelService.cs | 13 +- .../GoodsSpecs/GoodsSkus/GoodsSkuService.cs | 149 ++++++++++++----- .../GoodsManager/Goodss/GoodsService.cs | 155 ++++++++++++------ .../IGoodsServicesRelService.cs | 9 + .../GoodsSpecs/GoodsSkus/IGoodsSkuService.cs | 19 +-- .../GoodsManager/Goodss/IGoodsService.cs | 4 +- .../GoodsManager/Goodss/GoodsController.cs | 71 +++++++- ARW.WebApi/wwwroot/CodeGenTemplate/Add.txt | 5 +- ARW.WebApi/wwwroot/CodeGenTemplate/Edit.txt | 5 +- 17 files changed, 413 insertions(+), 129 deletions(-) create mode 100644 ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs create mode 100644 ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs diff --git a/ARW.Model/Dto/Business/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelDto.cs b/ARW.Model/Dto/Business/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelDto.cs index 93564f8..a2e0ad1 100644 --- a/ARW.Model/Dto/Business/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelDto.cs +++ b/ARW.Model/Dto/Business/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelDto.cs @@ -39,8 +39,7 @@ namespace ARW.Model.Dto.Business.GoodsManager.GoodsServicess.GoodsServicesRels /// public class GoodsServicesRelQueryDto : PagerInfo { - - public string ids { get; set; } + public long GoodsGuid { get; set; } } diff --git a/ARW.Model/Dto/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuDto.cs b/ARW.Model/Dto/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuDto.cs index 9626eae..cc2db03 100644 --- a/ARW.Model/Dto/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuDto.cs +++ b/ARW.Model/Dto/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuDto.cs @@ -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; } } diff --git a/ARW.Model/Dto/Business/GoodsManager/Goodss/GoodsDto.cs b/ARW.Model/Dto/Business/GoodsManager/Goodss/GoodsDto.cs index 2dada95..12330fc 100644 --- a/ARW.Model/Dto/Business/GoodsManager/Goodss/GoodsDto.cs +++ b/ARW.Model/Dto/Business/GoodsManager/Goodss/GoodsDto.cs @@ -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; } diff --git a/ARW.Model/Models/Business/GoodsManager/Goodss/Goods.cs b/ARW.Model/Models/Business/GoodsManager/Goodss/Goods.cs index 878dbb8..3fb33e9 100644 --- a/ARW.Model/Models/Business/GoodsManager/Goodss/Goods.cs +++ b/ARW.Model/Models/Business/GoodsManager/Goodss/Goods.cs @@ -134,7 +134,7 @@ namespace ARW.Model.Models.Business.GoodsManager.Goodss /// [EpplusTableColumn(Header = "商品规格(1单规格 2多规格)")] [SugarColumn(ColumnName = "goods_spec_type")] - public string GoodsSpecType { get; set; } + public int GoodsSpecType { get; set; } /// diff --git a/ARW.Model/Vo/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuVo.cs b/ARW.Model/Vo/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuVo.cs index c7515e4..12d8e82 100644 --- a/ARW.Model/Vo/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuVo.cs +++ b/ARW.Model/Vo/Business/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuVo.cs @@ -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; } - /// - /// 描述 :规格值ID - /// - public int SpecValueId { get; set; } + public string SpecSecondValue { get; set; } + + public string SpecThirdValue { get; set; } /// @@ -69,11 +69,5 @@ namespace ARW.Model.Vo.Business.GoodsManager.GoodsSpecs.GoodsSkus /// public decimal GoodsSkuWeight { get; set; } - - /// - /// 描述 :SKU的规格属性(json格式) - /// - public string GoodsSkuProps { get; set; } - } } diff --git a/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs new file mode 100644 index 0000000..e82eb63 --- /dev/null +++ b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecListVo.cs @@ -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 +{ + /// + /// 商品规格列表展示对象 + /// + /// @author lwh + /// @date 2023-06-26 + /// + public class GoodsSpecListVo + { + + /// + /// 描述 :规格组Id + /// + public int SpecId { get; set; } + + /// + /// 描述 :规格组名称 + /// + public string SpecName { get; set; } + + /// + /// 描述 :规格值列表 + /// + public List Props { get; set; } + + + } + + + public class SpecValueItem + { + public int SpecId { get; set; } + + public int SpecValueId { get; set; } + + public string SpecValueName { get; set; } + } + + +} diff --git a/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs new file mode 100644 index 0000000..b0948e2 --- /dev/null +++ b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsSpecSkutVo.cs @@ -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 +{ + /// + /// 商品规格列表展示对象 + /// + /// @author lwh + /// @date 2023-06-26 + /// + public class GoodsSpecSkutVo + { + + /// + /// 描述 :规格列表 + /// + public List GoodsSpecList { get; set; } + + + /// + /// 描述 :Sku列表 + /// + public List SkuList { get; set; } + + } + + +} diff --git a/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsVo.cs b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsVo.cs index 4285842..eeb5205 100644 --- a/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsVo.cs +++ b/ARW.Model/Vo/Business/GoodsManager/Goodss/GoodsVo.cs @@ -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 /// [EpplusTableColumn(Header = "商品规格")] - public string GoodsSpecType { get; set; } + public int GoodsSpecType { get; set; } /// /// 描述 :图片 @@ -239,5 +240,8 @@ namespace ARW.Model.Vo.Business.GoodsManager.Goodss [EpplusTableColumn(Header = "排序")] public int GoodsSort { get; set; } + + public List GoodsServicesIds { get; set; } + } } diff --git a/ARW.Service/Business/BusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelService.cs b/ARW.Service/Business/BusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelService.cs index c38133d..812e41c 100644 --- a/ARW.Service/Business/BusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelService.cs +++ b/ARW.Service/Business/BusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/GoodsServicesRelService.cs @@ -62,7 +62,18 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.GoodsServicess.Goods return await query.ToPageAsync(parm); } - + /// + /// 获取当前商品的服务与承诺Id + /// + /// + /// + public async Task> GetCurrentGoodsServicesRel(GoodsServicesRelQueryDto parm) + { + var idList = new List(); + var goodsServiceList = await _GoodsServicesRelRepository.GetListAsync(s => s.GoodsGuid == parm.GoodsGuid); + if (goodsServiceList.Count > 0) idList = goodsServiceList.Select(s => s.ServiceId).ToList(); + return idList; + } /// /// 新增商品服务与承诺关系 diff --git a/ARW.Service/Business/BusinessService/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuService.cs b/ARW.Service/Business/BusinessService/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuService.cs index c69b6c6..0916136 100644 --- a/ARW.Service/Business/BusinessService/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuService.cs +++ b/ARW.Service/Business/BusinessService/GoodsManager/GoodsSpecs/GoodsSkus/GoodsSkuService.cs @@ -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, 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 业务逻辑代码 - - - /// - /// 查询商品规格分页列表 - /// - public async Task> GetGoodsSkuList(GoodsSkuQueryDto parm) - { - //开始拼装查询条件d - var predicate = Expressionable.Create(); + #region 业务逻辑代码 - var query = _GoodsSkuRepository - .Queryable() - .Where(predicate.ToExpression()) - .OrderBy(s => s.Create_time,OrderByType.Asc) - .Select(s => new GoodsSkuVo + /// + /// 获取商品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 { - 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() + }; + 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; } - /// - /// 添加或修改商品规格 - /// - public async Task AddOrUpdateGoodsSku(GoodsSku model) + private async Task> GetSpecValuesAsync(List 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> 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; } #region Excel处理 #endregion - -#endregion + + #endregion } } diff --git a/ARW.Service/Business/BusinessService/GoodsManager/Goodss/GoodsService.cs b/ARW.Service/Business/BusinessService/GoodsManager/Goodss/GoodsService.cs index 627363e..4bb8c0a 100644 --- a/ARW.Service/Business/BusinessService/GoodsManager/Goodss/GoodsService.cs +++ b/ARW.Service/Business/BusinessService/GoodsManager/Goodss/GoodsService.cs @@ -69,10 +69,11 @@ namespace ARW.Service.Business.BusinessService.GoodsManager.Goodss /// public async Task> GetGoodsList(GoodsQueryDto parm) { + //开始拼装查询条件d var predicate = Expressionable.Create(); - 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((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); } + + /// /// 添加或修改商品 /// public async Task 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处理 /// /// 数据导入处理 @@ -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 修改处理 + /// - /// 找出改规格组的所有规格值 + /// 商品修改前处理 /// - /// - /// - /// + /// 商品Model /// - public async Task GetSpecValueId(SkuDto sku, Spec spec, int level) + public async Task 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 公共方法 + /// - /// 添加商品单规格处理 + /// 商品单规格处理 /// /// 商品Model /// 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 /// - /// 添加商品计算多规格处理 + /// 商品计算多规格处理 /// /// 商品Model /// 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 + /// + /// 找出改规格组的所有规格值 + /// + /// + /// + /// + /// + public async Task 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 diff --git a/ARW.Service/Business/IBusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/IGoodsServicesRelService.cs b/ARW.Service/Business/IBusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/IGoodsServicesRelService.cs index c2fde3f..83129ce 100644 --- a/ARW.Service/Business/IBusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/IGoodsServicesRelService.cs +++ b/ARW.Service/Business/IBusinessService/GoodsManager/GoodsServicess/GoodsServicesRels/IGoodsServicesRelService.cs @@ -23,6 +23,15 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.GoodsServicess.Good Task> GetGoodsServicesRelList(GoodsServicesRelQueryDto parm); + /// + /// 获取当前商品的服务与承诺Id + /// + /// + /// + Task> GetCurrentGoodsServicesRel(GoodsServicesRelQueryDto parm); + + + /// /// 新增商品服务与承诺关系 /// diff --git a/ARW.Service/Business/IBusinessService/GoodsManager/GoodsSpecs/GoodsSkus/IGoodsSkuService.cs b/ARW.Service/Business/IBusinessService/GoodsManager/GoodsSpecs/GoodsSkus/IGoodsSkuService.cs index 04ca667..6f044f8 100644 --- a/ARW.Service/Business/IBusinessService/GoodsManager/GoodsSpecs/GoodsSkus/IGoodsSkuService.cs +++ b/ARW.Service/Business/IBusinessService/GoodsManager/GoodsSpecs/GoodsSkus/IGoodsSkuService.cs @@ -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 /// public interface IGoodsSkuService : IBaseService { - /// - /// 获取商品规格分页列表 + /// + /// 获取商品Sku /// /// /// - Task> GetGoodsSkuList(GoodsSkuQueryDto parm); - - - /// - /// 添加或修改商品规格 - /// - /// - /// - Task AddOrUpdateGoodsSku(GoodsSku parm); - - - + Task GetGoodsSkuList(GoodsSkuQueryDto parm); } diff --git a/ARW.Service/Business/IBusinessService/GoodsManager/Goodss/IGoodsService.cs b/ARW.Service/Business/IBusinessService/GoodsManager/Goodss/IGoodsService.cs index f77486f..e9c56a2 100644 --- a/ARW.Service/Business/IBusinessService/GoodsManager/Goodss/IGoodsService.cs +++ b/ARW.Service/Business/IBusinessService/GoodsManager/Goodss/IGoodsService.cs @@ -25,8 +25,8 @@ namespace ARW.Service.Business.IBusinessService.GoodsManager.Goodss /// Task> GetGoodsList(GoodsQueryDto parm); - - /// + + /// /// 添加或修改商品 /// /// diff --git a/ARW.WebApi/Controllers/Business/GoodsManager/Goodss/GoodsController.cs b/ARW.WebApi/Controllers/Business/GoodsManager/Goodss/GoodsController.cs index f9440b0..71ed916 100644 --- a/ARW.WebApi/Controllers/Business/GoodsManager/Goodss/GoodsController.cs +++ b/ARW.WebApi/Controllers/Business/GoodsManager/Goodss/GoodsController.cs @@ -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; + /// /// 依赖注入 /// /// 商品服务 - public GoodsController(IGoodsService GoodsService) + /// 商品Sku服务 + /// 商品服务与承诺服务 + /// 规格组服务 + /// 规格值服务 + /// 商品规格关系服务 + 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); } + + /// + /// 获取商品Sku + /// + /// 查询参数 + /// + [HttpGet("getGoodsSkuList")] + public async Task GetGoodsSkuList([FromQuery] GoodsSkuQueryDto parm) + { + var res = await _GoodsSkuService.GetGoodsSkuList(parm); + return SUCCESS(res); + } + + /// + /// 获取商品服务与承诺 + /// + /// 查询参数 + /// + [HttpGet("getCurrentGoodsServiceList")] + public async Task GetCurrentGoodsServiceList([FromQuery] GoodsServicesRelQueryDto parm) + { + var res = await _GoodsServicesRelService.GetCurrentGoodsServicesRel(parm); + return SUCCESS(res); + } + /// /// 添加或修改商品 /// @@ -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 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("删除成功!"); } + /// /// 导入商品 /// diff --git a/ARW.WebApi/wwwroot/CodeGenTemplate/Add.txt b/ARW.WebApi/wwwroot/CodeGenTemplate/Add.txt index 9ca1d72..b94eacf 100644 --- a/ARW.WebApi/wwwroot/CodeGenTemplate/Add.txt +++ b/ARW.WebApi/wwwroot/CodeGenTemplate/Add.txt @@ -125,7 +125,7 @@ $end @@ -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 } }); }; diff --git a/ARW.WebApi/wwwroot/CodeGenTemplate/Edit.txt b/ARW.WebApi/wwwroot/CodeGenTemplate/Edit.txt index 492ff61..a05ccae 100644 --- a/ARW.WebApi/wwwroot/CodeGenTemplate/Edit.txt +++ b/ARW.WebApi/wwwroot/CodeGenTemplate/Edit.txt @@ -126,7 +126,7 @@ $end @@ -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 } }); }