2025-10-21 13:38:23 +08:00

95 lines
3.1 KiB
C#

using RIZO.Mall.Model;
using RIZO.Mall.Model.Dto;
using RIZO.Mall.Service.IService;
namespace RIZO.Mall.Service
{
/// <summary>
/// 商品规格Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IProductSpecService))]
public class ProductSpecService : BaseService<ProductSpec>, IProductSpecService
{
/// <summary>
/// 查询商品规格列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<ProductSpecDto> GetList(ShoppingProductSpecQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<ProductSpec, ProductSpecDto>(parm);
return response;
}
/// <summary>
/// 添加商品规格
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public ProductSpec AddShoppingProductspec(ProductSpec model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改商品规格
/// </summary>
/// <param name="productId"></param>
/// <param name="newSpecs"></param>
/// <returns></returns>
public long UpdateProductSpec(long productId, List<ProductSpec> newSpecs)
{
var result = 0;
// 获取数据库中旧数据
var oldSpecs = GetList(f => f.ProductId == productId);
// 提取 ID 列表
var newIds = newSpecs.Where(x => x.Id > 0).Select(x => x.Id).ToList();
var oldIds = oldSpecs.Select(x => x.Id).ToList();
// ➤ 更新:有 ID 且在数据库中
var updateSpecs = newSpecs.Where(x => x.Id > 0 && oldIds.Contains(x.Id)).ToList();
foreach (var spec in updateSpecs)
{
result = Update(spec, true, "数据修改"); // 可带日志记录
}
// ➤ 插入:没有 ID 的新增项
var insertSpecs = newSpecs.Where(x => x.Id <= 0).ToList();
if (insertSpecs.Count != 0)
InsertRange(insertSpecs);
// ➤ 删除:数据库有但前端没传的
var deleteIds = oldSpecs
.Where(x => !newIds.Contains(x.Id)) // 不在新 ID 列表中
.Select(x => x.Id)
.ToList();
if (deleteIds.Count != 0)
Delete(deleteIds);
return result;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<ProductSpec> QueryExp(ShoppingProductSpecQueryDto parm)
{
var predicate = Expressionable.Create<ProductSpec>();
return predicate;
}
public long DeleteSpecByProductId(long productId)
{
return Deleteable()
.Where(f => f.ProductId == productId)
.EnableDiffLogEvent("删除商品规格")
.ExecuteCommand();
}
}
}