package com.ruoyi.satisfaction.service;
|
|
import com.ruoyi.satisfaction.domain.ServiceSubtaskDetailRatioExport;
|
import com.ruoyi.satisfaction.domain.dto.MydTrendReqDTO;
|
import com.ruoyi.satisfaction.domain.dto.MzMydScoreRankDTO;
|
import com.ruoyi.satisfaction.domain.dto.QuestionCountKsOrBqDTO;
|
import com.ruoyi.satisfaction.domain.vo.MydTrendReqVO;
|
import com.ruoyi.satisfaction.domain.vo.MzMydScoreRankVO;
|
import com.ruoyi.satisfaction.domain.vo.QuestionCountKsOrBqVO;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionCategoryRow;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionIvrScriptRow;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionScriptQuery;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionSubtaskQuery;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionSubtaskRef;
|
import com.ruoyi.satisfaction.domain.row.SatisfactionSvyScriptRow;
|
import com.ruoyi.satisfaction.domain.vo.SatisfactionExceptConfigQuestionReqVO;
|
import com.ruoyi.satisfaction.domain.vo.SltdMydTotalVO;
|
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 满意度「子任务维度」统计服务。
|
* <p>
|
* 迁移说明:这些方法原属 {@code com.ruoyi.task.service.IServiceSubtaskService},
|
* 但只有满意度相关入口在用(已逐个核实无其它调用方),故整批搬入满意度模块。
|
* 方法签名除 {@link #getDetailRatio} 外均<b>一字未改</b>。
|
* <p>
|
* ⚠️ 本接口只应在满意度模块内部使用;其它模块需要满意度数据请用
|
* {@code com.ruoyi.satisfaction.api} 下的门面接口。
|
*/
|
public interface SatisfactionSubtaskService {
|
|
// ================================================================ 选项占比
|
|
/**
|
* 统计满意度选项的百分比。
|
* <p>
|
* 注意:本方法开头会先清理重复明细({@code selectRepeatDetailIds} / {@code deleteRepeatDetailByIds}),
|
* 这是原实现就有的行为。
|
*/
|
List<ServiceSubtaskDetailRatioExport> statQuestionOption(
|
List<Long> taskIds, Date startFinishTime, Date endFinishTime,
|
Date startOutHospTime, Date endOutHospTime, String scriptContent,
|
Double scoreStart, Double scoreEnd, String valueType, List<Long> subtaskIds);
|
|
/**
|
* 满意度导出:选项占比。
|
*/
|
List<ServiceSubtaskDetailRatioExport> statMydQuestionOptionForExport(
|
List<Long> subtaskIds, String questiontext);
|
|
/**
|
* 根据子任务 ID 统计满意度选项的百分比(满意度 serviceType=6/14 用)。
|
*/
|
List<ServiceSubtaskDetailRatioExport> statQuestionOptionBySubtaskIds(
|
List<Long> subtaskIds, Date startOutHospTime, Date endOutHospTime,
|
Date startFinishTime, Date endFinishTime, String scriptContent,
|
Double scoreStart, Double scoreEnd, String valueType);
|
|
/**
|
* 按科室/病区对满意度题目做归类统计。
|
*/
|
Map<String, Map<String, List<QuestionCountKsOrBqDTO>>> statQuestionOptionByKsOrBq(QuestionCountKsOrBqVO vo);
|
|
/**
|
* 问题结果占比(省立同德满意度统计用)。
|
* <p>
|
* <b>与原文的差异(仅签名)</b>:原文入参是 {@code List<ServiceSubtaskRes>},
|
* 方法内部从中抽出 taskIds 与 subtaskIds。为让满意度模块不依赖 smartor 的实体,
|
* 改为直接接收这两个 id 列表;<b>口径与分支判断完全不变</b>:
|
* <ul>
|
* <li>serviceTypeList 同时含 2 与 6/14 → 返回 {@code null}(原文即如此,调用方据此提示"暂不支持");</li>
|
* <li>含 2 → 走 {@link #statQuestionOption}(按 taskid 统计);</li>
|
* <li>含 6/14 → 走 {@link #statQuestionOptionBySubtaskIds}(按 subtask id 统计)。</li>
|
* </ul>
|
*
|
* @param taskIds 任务 id 列表(随访分支用;由调用方从查询结果抽出)
|
* @param subtaskIds 子任务 id 列表(满意度分支用;由调用方从查询结果抽出)
|
*/
|
List<ServiceSubtaskDetailRatioExport> getDetailRatio(
|
SltdMydTotalVO sltdMydTotalVO, List<SatisfactionSubtaskRef> subtaskRefs);
|
|
// ================================================================ 省立同德:趋势与维度
|
|
/**
|
* 省立同德患者满意度趋势(按周/月/年/日补零)。
|
*/
|
List<MydTrendReqDTO> mydTrend(MydTrendReqVO mydTrendReqVO);
|
|
/**
|
* 省立同德患者满意度——按维度(科室/院区)统计。
|
*/
|
List<MydTrendReqDTO> sltdMydTotalByDimension(MydTrendReqVO mydTrendReqVO);
|
|
// ================================================================ 门诊得分排名
|
|
/**
|
* 门诊满意度综合得分排名(按科室或病区)。
|
* <p>
|
* 入参缺省处理保留原实现:{@code dimensionType} 为空则置 {@code "1"};
|
* {@code serviceTypes} 为空则置 {@code ["14"]}(门诊满意度)。
|
*/
|
List<MzMydScoreRankDTO> mzMydScoreRank(MzMydScoreRankVO mzMydScoreRankVO);
|
/**
|
* 按机构/院区/服务类型/出院时间/科室病区取子任务引用(只含 id、taskid)。
|
* <p>
|
* 供 {@code /sltdMydTotalByScore} 使用:原实现逐个 serviceType 调用
|
* {@code getServiceSubtasks} 再转成 {@code ServiceSubtaskRes},现改为本方法。
|
*/
|
List<SatisfactionSubtaskRef> getMydSubtaskRefs(SatisfactionSubtaskQuery query);
|
/**
|
* 获取满意度问题分类(语音 + 问卷),带缓存。
|
* <p>
|
* 供登录链路使用(原 {@code smartor.UserExtInfoServiceImpl.getSatisfactionCategories})。
|
*/
|
Map<String, Object> getSatisfactionCategories(String orgid);
|
|
/**
|
* 获取满意度异常配置题目(语音 + 问卷),用于「满意度异常配置」页面。
|
* <p>
|
* 迁移说明:原为 {@code com.ruoyi.task.service.IServiceSubtaskDetailTraceService#getSatisfactionExceptConfigQuestion},
|
* 服务实现落在随访异常跟踪 Service 里,但逻辑完全是满意度分类/题目的查询,
|
* 故按模块化要求搬入本模块。<b>返回结构、字段名、筛选条件均与原文一致</b>:
|
* <pre>
|
* {
|
* "voiceDataList": [ {questionId, libtemplateid, questionContent, questionTopic, questionType, categoryName, categoryId}, ... ],
|
* "questionnaireDataList": [ 同上 ]
|
* }
|
* </pre>
|
* <b>保留的原文不对称行为</b>(不要"统一"):
|
* <ul>
|
* <li>{@code scriptType} 为空时,语音与问卷<b>两段都执行</b>,两个 key 都会出现;</li>
|
* <li>语音侧的分类取的是服务方法(拼树后<b>只返回顶层分类</b>),问卷侧用的是 Mapper(取<b>全部</b>分类);</li>
|
* <li>{@code type} 为空时按 {@code "myd"} 过滤,入参有值时覆盖。</li>
|
* </ul>
|
*
|
* @param questionReqVO 入参(scriptType:1 语音 / 2 问卷,为空取两者;type:满意度类型,默认 myd)
|
* @return 语音与问卷的题目列表
|
*/
|
Map<String, Object> getSatisfactionExceptConfigQuestion(SatisfactionExceptConfigQuestionReqVO questionReqVO);
|
|
/**
|
* 随访统计页的「满意度指数」:满意度题目总量 / 填报量 / 完成比例。
|
* <p>
|
* 迁移说明:原为 {@code com.ruoyi.task.service.impl.ServiceSubtaskServiceImpl#getSatisfactionIndex}
|
* (私有方法,被 {@code getSfStatisticsJoy} 调用)。
|
* <p>
|
* ⚠️ <b>原实现缺陷已原样保留</b>:由于 {@code BigDecimal.add(...)} 的返回值被丢弃,
|
* 本方法实际上恒定返回 {@code {mydtmzl:0, mydtbl:0, wcbl:0.0}}(但查询照旧执行)。
|
* 详见实现类上的注释。
|
*
|
* @param type "1"=按科室,"2"=按病区
|
* @param code 科室/病区编码
|
* @param orgid 机构 id
|
* @param ivrCategoryid 语音满意度分类 id(可为 null)
|
* @param svyCategoryid 问卷满意度分类 id(可为 null)
|
* @return {@code mydtmzl}(Integer) / {@code mydtbl}(Integer) / {@code wcbl}(Double)
|
*/
|
Map<String, Object> getSatisfactionIndex(String type, String code, String orgid,
|
Long ivrCategoryid, Long svyCategoryid);
|
}
|