using ZR.Mall.Model;
using ZR.Mall.Model.Dto;
using ZR.Mall.Service.IService;
namespace ZR.Mall.Service
{
///
/// 商品规格Service业务层处理
///
[AppService(ServiceType = typeof(IProductSpecService))]
public class ProductSpecService : BaseService, IProductSpecService
{
///
/// 查询商品规格列表
///
///
///
public PagedInfo GetList(ShoppingProductSpecQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage(parm);
return response;
}
///
/// 添加商品规格
///
///
///
public ProductSpec AddShoppingProductspec(ProductSpec model)
{
return Insertable(model).ExecuteReturnEntity();
}
///
/// 修改商品规格
///
///
///
///
public long UpdateProductSpec(long productId, List 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;
}
///
/// 查询导出表达式
///
///
///
private static Expressionable QueryExp(ShoppingProductSpecQueryDto parm)
{
var predicate = Expressionable.Create();
return predicate;
}
public long DeleteSpecByProductId(long productId)
{
return Deleteable()
.Where(f => f.ProductId == productId)
.EnableDiffLogEvent("删除商品规格")
.ExecuteCommand();
}
}
}