package com.ruoyi.satisfaction.service.strategy; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; /** * 满意度「站点口径」标识。 *

* 本模块用策略区分两套满意度口径(见 {@link SatisfactionScoreStrategy}): * * * * * * * * * * * * *
站点标识口径
通用(南华使用;同德也复用其中的 4 个通用端点){@link #COMMON}({@code "common"},别名 {@code "nanhua"}){@link CommonSatisfactionScoreStrategy}:按明细的 {@code score} 字段求平均(分母含分值为空的行)
省立同德{@link #SLTD}({@code "sltd"}){@link SltdSatisfactionScoreStrategy}:按选项< b>文案判定五档并加权(1/0.8/0.6/0.4/0.2),百分制
*

* 为什么两套口径必须分开:同德的历史数据里 {@code score} 有 {@code 0}、{@code 0000000001} * 这类脏值,按 {@code score} 求平均会把得分固定成 0 或 100,所以同德只能按选项文案判档; * 而通用口径的南华数据没有这个问题,改用文案判档反而会让结果与迁移前不一致。 * 因此这里不做"统一算法",而是用策略显式区分。 */ public final class SatisfactionSites { /** * 通用口径(南华使用,同德的 4 个通用端点也走它) */ public static final String COMMON = "common"; /** * 省立同德口径 */ public static final String SLTD = "sltd"; /** * 站点别名 → 规范站点标识(南华没有独占口径,归到通用口径) */ private static final Map ALIASES; static { Map aliases = new LinkedHashMap<>(); aliases.put("nanhua", COMMON); aliases.put("通用", COMMON); aliases.put("同德", SLTD); aliases.put("sld", SLTD); ALIASES = Collections.unmodifiableMap(aliases); } private SatisfactionSites() { } /** * 归一化站点标识:去空白、转小写、按别名映射;空值返回 {@link #COMMON} */ public static String normalize(String site) { if (site == null) { return COMMON; } String key = site.trim().toLowerCase(java.util.Locale.ROOT); if (key.isEmpty()) { return COMMON; } String mapped = ALIASES.get(key); return mapped == null ? key : mapped; } }