liusheng
2026-10-12 b25c3b5188e402695f3792ad7da53e452682cd80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.ruoyi.satisfaction.service.strategy;
 
import com.ruoyi.satisfaction.domain.ServiceSubtaskDetailRatioExport;
 
import java.math.BigDecimal;
import java.util.List;
 
/**
 * 满意度「站点口径」策略:<b>一个站点一套综合满意度得分口径</b>。
 * <p>
 * 这是本模块用来区分「南华」与「省立同德」两套满意度口径的<b>策略接口</b>:
 * <ul>
 *   <li>{@link CommonSatisfactionScoreStrategy}({@link SatisfactionSites#COMMON})—— 通用/南华口径;</li>
 *   <li>{@link SltdSatisfactionScoreStrategy}({@link SatisfactionSites#SLTD})—— 省立同德口径。</li>
 * </ul>
 * 由 {@link SatisfactionScoreStrategyResolver} 按站点标识选择实现;调用方(Controller / Service)
 * 只依赖本接口 + 解析器,不再自己写站点分支 —— 以后新增站点只需新增一个实现类。
 * <p>
 * <b>入参统一为</b>{@code List<ServiceSubtaskDetailRatioExport>}("问题详情占比"行:选项 + 数量 + 分值),
 * 因为两个站点的综评入口拿到的都是这个结构。
 */
public interface SatisfactionScoreStrategy {
 
    /**
     * 站点标识(规范值,取自 {@link SatisfactionSites})
     */
    String site();
 
    /**
     * 站点名称(中文,用于文档与日志)
     */
    String siteName();
 
    /**
     * 计算「综合满意度得分」。
     * <p>
     * 返回值语义由各站点口径自行定义(通用口径是<b>平均分</b>保留 1 位;
     * 同德口径是<b>百分制加权得分</b>保留 2 位),调用方按站点既有约定呈现。
     *
     * @param rows 同一道题(或同一批)的选项占比行
     * @return 得分;<b>无法计算时返回 {@code null}</b>(调用方按站点既有约定回退,例如同德回退为 "0.00")
     */
    BigDecimal comprehensiveScore(List<ServiceSubtaskDetailRatioExport> rows);
}