diff --git a/internal/infra/repository/raw_material_repository.go b/internal/infra/repository/raw_material_repository.go index 96da7b0..2c00b5e 100644 --- a/internal/infra/repository/raw_material_repository.go +++ b/internal/infra/repository/raw_material_repository.go @@ -132,18 +132,18 @@ func (r *gormRawMaterialRepository) ListRawMaterials(ctx context.Context, opts R // 外部子查询:从 ranked_logs 中筛选 rn=1 的 raw_material_id latestStockLogSubQuery := r.db.Table("(?) as ranked_logs", rankedLogsQuery). Select("raw_material_id"). - Where("rn = 1") + Where("rn = 1"). + Where("after_quantity > 0") if *opts.HasStock { - // 筛选有库存的原料 (after_quantity > 0) - latestStockLogSubQuery = latestStockLogSubQuery.Where("after_quantity > 0") + // 筛选有库存的原料 (ID 在有正库存的集合中) + db = db.Where("id IN (?)", latestStockLogSubQuery) } else { - // 筛选没有库存的原料 (after_quantity = 0) - latestStockLogSubQuery = latestStockLogSubQuery.Where("after_quantity = 0") + // 筛选无库存的原料 (ID 不在有正库存的集合中) + // 包含了最新库存为0 和 没有库存日志的原料。 + db = db.Where("id NOT IN (?)", latestStockLogSubQuery) } - // 将这个子查询直接应用到主查询的 WHERE id IN (?) 条件中 - db = db.Where("id IN (?)", latestStockLogSubQuery) } // 首先计算总数