| | |
| | | /** |
| | | * 满意度统计 Mapper 接口。 |
| | | * <p> |
| | | * 迁移说明:方法原本散落在 {@code com.smartor.mapper.ServiceSubtaskMapper} 与 |
| | | * {@code com.smartor.mapper.ServiceSubtaskDetailMapper} 中,满意度模块化后集中到此处。 |
| | | * 迁移说明:方法原本散落在 {@code com.ruoyi.task.mapper.ServiceSubtaskMapper} 与 |
| | | * {@code com.ruoyi.task.mapper.ServiceSubtaskDetailMapper} 中,满意度模块化后集中到此处。 |
| | | * <p> |
| | | * 本模块自带 SQL,<b>直接查询</b> {@code service_subtask} / {@code service_subtask_detail}, |
| | | * 以及模板分类表;不依赖任何其它模块的 Mapper。 |
| | |
| | | */ |
| | | List<String> selectSatisfactionSubtaskTypes(PatSatisfactionReqVO patSatisfactionReqVO); |
| | | |
| | | /** |
| | | * 满意度统计:本次条件下<b>真正下发过任务</b>的模板 id(去重)。 |
| | | * <p> |
| | | * <b>为什么需要它</b>:{@code /statistics} 的题目来源是 |
| | | * {@code SatisfactionScriptMapper.querySvyScriptByCategory} / {@code queryIvrScriptByAssort}, |
| | | * 只按「满意度分类」取库里的全部题目,<b>不看模板、不看时间</b>。 |
| | | * 题库里每多挂进一套历史问卷模板(题目还在、但从来没下发过任务), |
| | | * 统计结果就会多出一整批「得分 0 / 答题人数 0」的行 |
| | | * (实测:满意度分类下 6 套模板 69 道题,本期只有 2 套 25 道题有数据)。 |
| | | * <p> |
| | | * 这里按与 {@link #selectSatisfactionSubtaskTypes} <b>完全相同的条件</b> |
| | | * (orgid、serviceTypes、科室 OR 病区、离院科室 OR 病区、时间兜底口径)取模板 id, |
| | | * 调用方据此把题库题目裁剪成「本期真正在用的模板」, |
| | | * 使返回行数只由当前生效的问卷决定,而不是题库历史积累。 |
| | | * |
| | | * @param query 查询条件(复用 {@link PatSatisfactionReqVO} 的字段) |
| | | * @param type service_subtask.type:1 语音、2 问卷 |
| | | * @return 去重后的 libtemplateid 列表(可能为空) |
| | | */ |
| | | List<Long> selectSatisfactionActiveTemplateIds(@Param("q") PatSatisfactionReqVO query, |
| | | @Param("type") String type); |
| | | |
| | | // ================================================================ 填报量统计 |
| | | |
| | | /** |
| | |
| | | */ |
| | | List<Map<String, Object>> selectSatisfactionFillPersonCount(SatisfactionStatQuery query); |
| | | |
| | | /** |
| | | * 【按 模板 + 问题】统计答题人数({@code count(distinct ssd.sub_id)})。 |
| | | * <p> |
| | | * <b>为什么单独加这一条</b>:{@code /statistics} 的「答题人数 / 未答题人数」必须与 |
| | | * 「发送人数」({@link #selectSatisfactionSendCount},也是人数)同口径。 |
| | | * 原实现误用 {@link #selectSatisfactionFillStatByMatchedtext} 的 {@code count(*)}(明细<b>行数</b>), |
| | | * 而一条 {@code (sub_id, questiontext)} 可能有多行明细(多选项 / 重复明细), |
| | | * 导致「未答题人数 = 发送人数 − 明细行数」出现负数(实测 -120)。 |
| | | * <p> |
| | | * ⚠️ 平均分 / 最高分 / 最低分 / 各选项占比仍使用明细行数(那些口径本来就按行计),未改动。 |
| | | * <p> |
| | | * 除聚合键与 {@code distinct} 外,from/where 与 {@link #selectSatisfactionFillStatByMatchedtext} |
| | | * 完全一致,保证两者统计的是同一批数据。 |
| | | * |
| | | * @param query 聚合查询条件 |
| | | * @return 每行含 libtemplateid、questiontext、cnt(人数) |
| | | */ |
| | | List<Map<String, Object>> selectSatisfactionFillPersonCountByQuestion(SatisfactionStatQuery query); |
| | | |
| | | // ================================================================ 省立同德:趋势与维度 |
| | | |
| | | /** |