陈昶聿
10 天以前 350813e3cd0a2c89baee42d602c2bf6ddd33d564
smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -3,6 +3,7 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.smartor.domain.*;
import com.smartor.domain.DTO.MydTrendReqDTO;
import com.smartor.domain.DTO.MzMydScoreRankDTO;
import com.smartor.domain.DTO.QuestionCountKsOrBqDTO;
import com.smartor.domain.DTO.QuestionResultDTO;
import com.smartor.domain.ServiceSubtask;
@@ -21,6 +22,12 @@
 * @date 2024-02-02
 */
public interface IServiceSubtaskService {
    /**
     * 丽水中医院 orgid。
     * 微信公众号已领取未填写按默认选项完成,暂时只对该机构生效,其他医院仍走原补偿逻辑。
     */
    String WECHAT_DEFAULT_COMPLETE_ORGID = "47231022633110211A2101";
    /**
     * 查询单一任务(随访)
     *
@@ -68,6 +75,8 @@
    public Map<String, Object> patItemCount(ServiceSubtaskEntity serviceSubtaskEntity);
    public Map<String, Object> countByCondition(ServiceSubtaskEntity serviceSubtaskEntity);
    /**
     * 新增单一任务(随访)
     *
@@ -83,6 +92,16 @@
     * @return 结果
     */
    public String addSubTaskAgain(ServiceSubtask ServiceSubtask);
    /**
     * 首次随访任务超时后,按下一任务自动生成再次随访任务(随访中心)。
     * <p>
     * 与手动入口的差异:随访中心科室未配置时回退原任务科室;同一原任务只生成一条(锁 + 条件更新幂等)。
     *
     * @param serviceSubtask 已超时的首次随访子任务
     * @return 结果描述
     */
    public String addSubTaskAgainByDeadline(ServiceSubtask serviceSubtask);
    /**
     * 修改单一任务(随访)
@@ -187,12 +206,27 @@
    public List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq);
    public Map<String, ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
    public Map<String, Object> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
    /**
     * 问题选项数字下钻:查询选择了指定选项的 service_subtask 列表
     *
     * @param serviceSubtaskCountReq 统计维度、科室/病区、任务、题目及选项条件
     * @return service_subtask 列表
     */
    public List<ServiceSubtask> getSfStatisticsScriptDetailsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
    public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
    public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList);
    /**
     * 统计任务各种状态的数量 -【随访工作台】
     *
     * @param entity 查询条件(科室/病区权限、soonTimeoutHours 即将超时小时数等)
     * @return 含 pendingVisitCount、failedVisitCount、abnormalVisitCount、warnningVisitCount、
     * allVisitCount、soonTimeoutCount 的统计结果
     */
    public Map<String, Object> getCurrentUserServiceSubtaskCount(ServiceSubtaskEntity entity);
    /**
@@ -213,19 +247,46 @@
     */
    public void setFailSubTaskDefalutVal(Long failDay);
    /**
     * 微信公众号已领取未填写:按题目默认选项补齐当前子任务,并将当前子任务完成。
     * <p>
     * 仅处理传入的当前子任务(subid),只允许:
     * 问卷类型(type=2)、当前发送方式为公众号(5)、子任务已领取(1)、未提交(submit!=1)、
     * 当前公众号发送方式为已发送(2)/已领取(3) 的数据。
     * 其他任务、其他发送方式、其他子任务均不受影响。
     *
     * @param serviceSubtask 当前子任务
     * @return true=已按默认选项完成;false=不满足条件或没有可填充的默认选项
     */
    public Boolean completeWechatClaimedByDefault(ServiceSubtask serviceSubtask);
    public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO);
    public List<ServiceSubtask> gethelibraryCountHyperlink(@RequestBody HeLibraryCountVO heLibraryCountVO);
    Map<String, Object> smsSubTask(Long subid);
    Map<String, Object> weChatSubTask(Long subid);
    /**
     * 统计问题的选项的百分比 (用于服务类型 2)
     *
     * @param taskIds
     * @param taskIds    任务 ID 列表
     * @param subtaskIds 子任务 ID 列表(可选):传了就只统计这批子任务(本次导出的患者),分母也用同一批数据
     * @return
     */
    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startFinishTime, Date endFinishTime, Date startOutHospTime, Date endOutHospTime, String scriptContent, Double scoreStart, Double scoreEnd, String valueType);
    public 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);
    /**
     * 导出「问题详情占比」专用统计(只统计本次导出的这批患者)
     * <p>
     * 数量 = 选择该选项的患者数;比例 = 数量 / 该题作答患者数;分数 = 该选项明细 score 之和;
     * 任务名称/任务编号 = service_task.task_name / taskid。
     *
     * @param subtaskIds   本次导出的子任务 ID
     * @param questiontext 问题内容(可选)
     */
    public List<ServiceSubtaskDetailRatioExport> statMydQuestionOptionForExport(List<Long> subtaskIds, String questiontext);
    /**
     * 根据子任务 ID 统计问题的选项的百分比(用于满意度统计 serviceType=6)
@@ -249,4 +310,15 @@
    public List<MydTrendReqDTO> sltdMydTotalByDimension(MydTrendReqVO mydTrendReqVO);
    public Integer matchOptionIndex(String url, String questionText, String voiceText, List<IvrTaskTemplateTargetoption> options, String uuid);
    /**
     * 门诊满意度综合得分排名(按科室或病区)
     * <p>
     * 综合满意度 = Σ(评分明细权重) / 评分明细条数 × 100%,
     * 权重只取 1、0.8、0.6、0.4、0.2 五档。
     *
     * @param mzMydScoreRankVO 查询条件
     * @return 排名结果,已按综合得分降序并填充名次(从 1 开始)
     */
    public List<MzMydScoreRankDTO> mzMydScoreRank(MzMydScoreRankVO mzMydScoreRankVO);
}