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