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
}
});
}