fix(material): rankAndPaginate 尊重 sort_val 方向, 保留 null 末位与分档顺序; 删无用 import
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCShKevM5prWZhp1kk1iGh
This commit is contained in:
parent
f5ec58031a
commit
d065ec21fa
|
|
@ -9,7 +9,7 @@ import { ID_PREFIX, DATA_TYPE, ERR_CODE } from '../common/constants'
|
|||
import authz from '../middlewares/authz'
|
||||
import Service from '../common/service'
|
||||
import moment from 'moment'
|
||||
import { annotate, buildTierClassifier, computeYpt, Tier } from '../common/material-ranking'
|
||||
import { annotate, buildTierClassifier, Tier } from '../common/material-ranking'
|
||||
|
||||
// const PREDICT_FIELD: ((keyof PublicMaterial) | (keyof SelfMaterial))[] = [
|
||||
// 'methanal', 'methanal_min_be', 'methanal_be_area', 'methanal_be_roc',
|
||||
|
|
@ -35,7 +35,7 @@ async function loadTierClassifier(): Promise<(ypt: number | null) => Tier | null
|
|||
return buildTierClassifier([...pub, ...self])
|
||||
}
|
||||
|
||||
// 注解 + 排序(ypt / *_be_area, 恒升序; group_by_tier 时先按档) + 分页
|
||||
// 注解 + 排序(ypt / *_be_area, 方向随 sort_val; group_by_tier 时先按档,档序固定不随方向翻转) + 分页
|
||||
const TIER_ORDER: Record<string, number> = { A: 0, B: 1, C: 2 }
|
||||
function rankAndPaginate(materials: AnyObj[], query: AnyObj, classify: (ypt: number | null) => Tier | null): AnyObj[] {
|
||||
let list: AnyObj[] = annotate(materials as never, classify)
|
||||
|
|
@ -43,6 +43,7 @@ function rankAndPaginate(materials: AnyObj[], query: AnyObj, classify: (ypt: num
|
|||
const group = query.group_by_tier == 1 || query.group_by_tier === true
|
||||
if (sk || group) {
|
||||
const tierRank = (t: Tier | null) => (t === null ? 3 : TIER_ORDER[t])
|
||||
const dir = query.sort_val === 'desc' ? -1 : 1
|
||||
list.sort((a, b) => {
|
||||
if (group) {
|
||||
const d = tierRank(a.health_tier) - tierRank(b.health_tier)
|
||||
|
|
@ -50,10 +51,10 @@ function rankAndPaginate(materials: AnyObj[], query: AnyObj, classify: (ypt: num
|
|||
}
|
||||
const k = sk ?? 'ypt'
|
||||
const av = a[k], bv = b[k]
|
||||
// 升序;null 排最后
|
||||
// null 恒排最后,不随方向翻转
|
||||
if (av === null || av === undefined) return bv === null || bv === undefined ? 0 : 1
|
||||
if (bv === null || bv === undefined) return -1
|
||||
return av === bv ? 0 : av > bv ? 1 : -1
|
||||
return av === bv ? 0 : (av > bv ? 1 : -1) * dir
|
||||
})
|
||||
}
|
||||
if (query.size) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue