liusheng
5 天以前 0bbbd746e8c39d91ad7b47a4e36e29ab972dc98c
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
45
46
47
48
49
50
51
52
53
54
package com.ruoyi.satisfaction.domain.row;
 
import lombok.Data;
 
/**
 * 满意度分类只读视图(语音侧与问卷侧共用)。
 * <p>
 * 为什么共用一个类:语音的 {@code ivr_liba_script_assort} 与问卷的
 * {@code svy_lib_script_category} 在满意度统计里语义完全一致——
 * 都是「一个满意度分类:id + 名称 + type」,调用方只用来
 * 「按 {@code type.contains("myd")} 过滤出分类 id、并按名称分组」。
 * <p>
 * 两表的原始列名不同,SQL 里已做别名归一:
 * <ul>
 *   <li>语音:{@code index_assort_name as name}</li>
 *   <li>问卷:{@code name}(列名本来就是 name)</li>
 * </ul>
 * <p>
 * ⚠️ 这是<b>只读</b>视图。
 */
@Data
public class SatisfactionCategoryRow {
 
    /**
     * 分类 id
     */
    private Long id;
 
    /**
     * 分类名称
     * <p>注意:分类口径统计是按「模板上的分类名」({@code script_assortname} /
     * {@code categoryName})分组,而不是用本字段;本字段主要用于建分类 id → 名称的映射。
     */
    private String name;
 
    /**
     * 分类类型(满意度固定为 myd 相关,调用方按 contains("myd") 过滤)
     */
    private String type;
 
    /**
     * 对应列 {@code pid}:父分类 id(顶层为 {@code null} 或 {@code -1})。
     * <p>
     * 用途:{@code /smartor/trace/getSatisfactionExceptConfigQuestion} 走的是
     * 语音分类的<b>服务方法</b> {@code IvrLibaScriptAssortServiceImpl.selectIvrLibaScriptAssortList},
     * 该方法会把分类拼成树、<b>只返回顶层节点</b>({@code pid == null || pid == -1}),
     * 所以调用方必须用本字段做同样的顶层筛选才能与原文一致。
     * <p>
     * 语音侧与问卷侧都取了本列,但<b>只有语音侧</b>需要按它筛顶层——
     * 问卷侧原文直接用 {@code svyLibScriptCategoryMapper} 取全部分类(不拼树),
     * 两侧不一致是原文行为,必须保留。
     */
    private Long pid;
}