buff_selection_request_item,并参与「每日选品条数」与「本次选品数量」限制,直到达到用户配置的选品数量或所有 ID 处理完毕。对每个饰品 ID 依次执行:
buffPriceMin/buffPriceMax),不满足直接不入选并记日志。assistantLevel 做智能选品判断(low/standard/high)。buff_selection_request_item。buff_selection_request_log 写入一条记录,记录该饰品的判断结果、判断时间等,供前端展示「后台在逐个判断」的过程感(详见第 9 节)。SELECT DISTINCT `当前在售最低价格`
FROM buff_goods_filtered_view
WHERE `BUFF饰品ID` = :goods_id;
得到该饰品的当前在售最低价格(下称「最低价」)。
buffPriceMin/buffPriceMax 过滤候选 ID,但第二步仍会在单饰品判断时再次校验当前在售最低价格:
buffPriceMin:直接判定不入选并记录原因。buffPriceMax:直接判定不入选并记录原因。low:不做均价波动判断,直接进入后续计算。standard:读取 7天在售最低价格平均价,并校验是否在以下区间内:
当前在售最低价格 * (1 + buff_ai_standard_range_max_increase_ratio)当前在售最低价格 * (1 - buff_ai_standard_range_max_decrease_ratio)high:读取 30天在售最低价格平均价,并校验是否在以下区间内:
当前在售最低价格 * (1 + buff_ai_high_range_max_increase_ratio)当前在售最低价格 * (1 - buff_ai_high_range_max_decrease_ratio)配置项来源:system_config,app_name = 'backend-selection'。
SELECT `最小磨损值`, `最大磨损值`, `区间底价`
FROM buff_goods_filtered_view
WHERE `BUFF饰品ID` = :goods_id
ORDER BY `最小磨损值` ASC;
得到多行:每行一个磨损区间(最小磨损值、最大磨损值、区间底价),按最小磨损值升序。
示例(最小磨损值升序):
| 区间 | 区间底价 |
|---|---|
| 0.00-0.01 | 215 |
| 0.01-0.02 | 210 |
| 0.02-0.03 | 178 |
| 0.03-0.04 | 200 |
| 0.04-0.05 | 130 |
接上例(正常区间 215、210、178,比较价 192.5):
当某饰品被选中时,写入明细表的数据来源与计算方式如下。
| 字段说明 | 来源/计算方式 |
|---|---|
| 饰品 ID | buff_goods_filtered_view.BUFF饰品ID |
| 饰品名称 | buff_goods_filtered_view.BUFF饰品名称 |
| 饰品图片 URL | buff_goods_filtered_view.饰品图片URL地址 |
| 饰品 Steam 链接 | buff_goods_filtered_view.饰品STEAM链接 |
| 价格(人民币) | 比较价 × (1 + 扫货价格系数)。系数由智能扫货助手等级决定:低→buff_sweep_price_factor_min,标准→buff_sweep_price_factor_mid,高→buff_sweep_price_factor_max(来自 system_config)。 |
| 价格(美元) | 先算 价格(人民币)/ Steam 卡价汇率,保留 2 位小数,再 +0.01。 |
| 区间 | 满足要求的区间:取这些区间的最小磨损值的最小值 到 最大磨损值的最大值。例:仅 0.00-0.01、0.01-0.02 满足 → 区间为「0.00-0.02」。 |
| 选品时间 | 写入时的服务器时间(即明细行的 created_at)。 |
steamCardRatio)。buff_selection_config.config_json),例如字段名:assistantLevel 或 sweepAssistantLevel,值与第一步「智能选品助手」一致时可复用同一字段(low/standard/high)。system_config 读取(app_name = 'backend-selection'):| 选项 | config_key | 用途 |
|---|---|---|
| 低 | buff_sweep_price_factor_min | 价格(人民币)= 比较价 × (1 + 该值) |
| 标准 | buff_sweep_price_factor_mid | 同上 |
| 高 | buff_sweep_price_factor_max | 同上 |
满足其一即结束本次选品请求:
buff_selection_daily_times_limit_per_user(如 3),即每个用户每天最多发起 N 次选品(按请求单条数计)。buff_selection_daily_items_limit_per_user(如 900),即每个用户每天累计入选的饰品条数上限(跨多次选品累计);超过后当日不再接受新选品或不再写入新明细,以产品规则为准。选品逻辑需在创建/执行选品前校验上述两项,不满足则直接拒绝并提示。
user_id、config_id、status、created_at/updated_at 等,满足需求,无需改动。config_id 关联本次使用的 buff_selection_config,可拿到选品数量、利润率、Steam 卡价、智能扫货助手等级等。id、request_id、user_id、goods_id、created_at 基础上,通过迁移 20260228_buff_selection_request_item_columns.sql 增加:goods_name、icon_url、steam_link、price_cny、price_usd、wear_range,用于列表展示与扫货。assistantLevel 做智能选品判断(7天/30天均价区间);buff_selection_request_item;buff_selection_request_log 写入一条日志(见第 9 节)。request_id 分页或滚动拉取日志,按 sequence_no 或 created_at 排序展示。| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint, PK | 主键 |
| request_id | bigint, NOT NULL | 选品请求单 ID |
| user_id | int, NOT NULL | 用户 ID,按用户隔离 |
| goods_id | varchar(64), NOT NULL | BUFF 饰品 ID |
| goods_name | varchar(256), NULL | 饰品名称,便于日志展示 |
| sequence_no | int, NOT NULL | 判断序号:本次选品中第几个被判断(从 1 递增) |
| result | varchar(20), NOT NULL | 判断结果:selected-已入选,not_selected-未入选 |
| message | varchar(256), NULL | 简短说明,如「无满足利润的磨损区间」「已入选」等,可为空 |
| created_at | datetime | 判断时间 |
索引:request_id、idx_request_sequence、idx_request_created,便于按请求单查日志并排序。
result = 'selected':该饰品已入选并写入 buff_selection_request_item;message 可填「已入选」或为空。result = 'not_selected':未入选;message 可填简短原因,如「当前在售最低价低于设置下限」「7天均价不在智能选品标准范围」「无满足利润的磨损区间」等。goods_name 可从 buff_goods_filtered_view 取当前名称,便于前端展示;可为空。sequence_no 为本次选品中该饰品的判断顺序号(从 1 递增),便于前端展示「第 N 个判断」。