liusheng
2026-10-08 dc65bb4cbd96e9dfddc8056fd53252607d65cdef
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -4,6 +4,7 @@
import com.smartor.domain.DTO.MydTrendReqDTO;
import com.smartor.domain.DTO.MzMydScoreRankDTO;
import com.smartor.domain.DTO.QuestionCountKsOrBqDTO;
import com.smartor.domain.DTO.ServiceSubtaskOptionStatDTO;
import com.smartor.domain.VO.PatSatisfactionReqVO;
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.MzMydScoreRankVO;
@@ -11,6 +12,7 @@
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.domain.entity.ServiceSubtaskSatisfactionEntity;
import com.smartor.domain.entity.SatisfactionStatQuery;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -209,6 +211,8 @@
     * xsf: 需随访数量 sendstate = 4
     * dsf: 待随访数量 sendstate = 1L, 2L, 3L, 5L, 7L
     * ywc: 已完成数量 sendstate = 6L
     * dfs: 待发送数量 sendstate = 1L, 3L, 4L, 5L, 6L, 7L
     * yfs: 已发送数量 sendstate = 2L
     * yc: 异常数量 excep = '1'
     * yc: 警告数量 excep = '2'
     */
@@ -235,6 +239,28 @@
    PatMedRes selectVisitCount(PatMedReq patMedReq);
    List<Long> querySendCount(ServiceSubtaskSatisfactionEntity serviceSubtaskSatisfactionEntity);
    /**
     * 满意度柱状图:一次性统计本次请求全部模板的发送量(按 libtemplateid 分组)
     * <p>
     * 替代逐个模板调用 querySendCount 的 N+1 写法,见 PatSatisfactionServiceImpl#satisfactionGraph
     *
     * @param query 聚合查询条件
     * @return 每行含 libtemplateid、cnt
     */
    List<Map<String, Object>> selectSatisfactionSendCount(SatisfactionStatQuery query);
    /**
     * 满意度统计:只查本次条件下实际存在哪些 type(1 语音 / 2 问卷)
     * <p>
     * 替代 selectSatisfactionSubtaskList —— 原方法会把接近全表的上百个字段查回来,
     * 调用方却只用它判断「语音分支/问卷分支是否为空」,见
     * PatSatisfactionServiceImpl#statistics / #statisticsByDimension
     *
     * @param patSatisfactionReqVO 查询条件(与原 selectSatisfactionSubtaskList 完全一致)
     * @return 去重后的 type 列表(可能含 null)
     */
    List<String> selectSatisfactionSubtaskTypes(PatSatisfactionReqVO patSatisfactionReqVO);
    /**
     * 按病区分组统计延续护理数量
@@ -269,11 +295,23 @@
     * 统计问题的选项的百分比
     *
     * @param taskIds          任务 ID 列表 (用于服务类型 2)
     * @param subtaskIds       子任务 ID 列表(可选)。传了就只统计这批子任务(即本次导出的患者),
     *                         不传则统计这些任务下的全部答卷,保持原行为
     * @param startOutHospTime
     * @param endOutHospTime
     * @return
     */
    List<ServiceSubtaskDetailRatioExport> statQuestionOption(@Param("taskIds") List<Long> taskIds, @Param("startOutHospTime") Date startOutHospTime, @Param("endOutHospTime") Date endOutHospTime, @Param("startFinishTime") Date startFinishTime, @Param("endFinishTime") Date endFinishTime, @Param("scoreStart") Double scoreStart, @Param("scoreEnd") Double scoreEnd, @Param("questiontext") String questiontext, @Param("valueType") String valueType);
    List<ServiceSubtaskDetailRatioExport> statQuestionOption(@Param("taskIds") List<Long> taskIds, @Param("startOutHospTime") Date startOutHospTime, @Param("endOutHospTime") Date endOutHospTime, @Param("startFinishTime") Date startFinishTime, @Param("endFinishTime") Date endFinishTime, @Param("scoreStart") Double scoreStart, @Param("scoreEnd") Double scoreEnd, @Param("questiontext") String questiontext, @Param("valueType") String valueType, @Param("subtaskIds") List<Long> subtaskIds);
    /**
     * 导出「问题详情占比」专用统计(按本次导出的子任务统计)
     * <p>
     * 数量 = 选择该选项的患者数(同一患者同一题只取最新一条明细),分数 = 该选项明细的 score 之和。
     *
     * @param subtaskIds   本次导出的子任务 ID(必传,为空则查不到数据)
     * @param questiontext 问题内容(可选,模糊匹配)
     */
    List<ServiceSubtaskOptionStatDTO> statMydQuestionOptionForExport(@Param("subtaskIds") List<Long> subtaskIds, @Param("questiontext") String questiontext);
    /**
     * 根据子任务 ID 统计问题的选项的百分比(用于满意度统计 serviceType=6)