package com.smartor.mapper;
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.ServiceSubtaskOptionStatDTO;
import com.smartor.domain.VO.PatSatisfactionReqVO;
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.MzMydScoreRankVO;
import com.smartor.domain.VO.QuestionCountKsOrBqVO;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.domain.entity.ServiceSubtaskSatisfactionEntity;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 单一任务(随访)Mapper接口
*
* @author ruoyi
* @date 2024-02-02
*/
@Mapper
public interface ServiceSubtaskMapper {
/**
* 查询单一任务(随访)
*
* @param id 单一任务(随访)主键
* @return 单一任务(随访)
*/
public ServiceSubtask selectServiceSubtaskById(Long id);
/**
* 查询单一任务(随访)列表
*
* 入参 soonTimeout=1 且 soonTimeoutHours=N 时,仅返回“尚未超时、且将在 N 小时内超时”的数据,
* 截止时间口径与 getCurrentUserServiceSubtaskCount 的 soonTimeoutCount 一致。
*
* @param serviceSubtaskVO 单一任务(随访)
* @return 单一任务(随访)集合
*/
public List selectServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
public List selectSatisfactionSubtaskList(PatSatisfactionReqVO serviceSubtaskVO);
/**
* 用于补偿查询
*
* @param serviceSubtaskVO
* @return
*/
public List getCompensateServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
public List selectServiceSubtaskByDiagname(ServiceSubtask serviceSubtask);
public List queryServiceSubtaskList(ServiceSubtaskEntity serviceSubtaskVO);
public List selectServiceSubtaskBySendstate(ServiceSubtaskEntity serviceSubtaskVO);
public List selectServiceSubtaskListByCreateTime(ServiceSubtaskEntity serviceSubtaskVO);
public List selectServiceSubtaskListAgain(ServiceSubtaskEntity serviceSubtaskVO);
public List selectServiceSubtaskListDeadLine(ServiceSubtaskEntity serviceSubtaskVO);
public List selectSendstateByCondition(ServiceSubtask serviceSubtask);
/**
* 新增单一任务(随访)
*
* @param ServiceSubtask 单一任务(随访)
* @return 结果
*/
public int insertServiceSubtask(ServiceSubtask ServiceSubtask);
/**
* 任务组(appltype=5):统计某一轮次内仍在运行的 subtask 数量。
* 仍在运行 = sendstate in (1,2,3) 且未删除。
* 用于判断本轮是否已全部 finalize(成功/失败/不执行/超时)。
*
* @param scheduleId 计划主键
* @param loopCount 轮次(0=首轮)
*/
public int countActiveByScheduleIdAndLoop(@Param("scheduleId") Long scheduleId, @Param("loopCount") Long loopCount);
public List mydTrend(@Param("startFinishTime") Date startFinishTime, @Param("endFinishTime") Date endFinishTime, @Param("type") String type);
public List sltdMydTotalByDimension(@Param("startFinishTime") Date startFinishTime, @Param("endFinishTime") Date endFinishTime, @Param("type") String type);
public List sltdMydTotalByYQ(@Param("startFinishTime") Date startFinishTime, @Param("endFinishTime") Date endFinishTime, @Param("type") String type);
/**
* 任务组(appltype=5):拉取某一轮次的全部 subtask(用于克隆到下一轮)。
*/
public List selectByScheduleIdAndLoop(@Param("scheduleId") Long scheduleId, @Param("loopCount") Long loopCount);
/**
* 随访及时率:应随访时间<实际随访时间
*
* @param ServiceSubtask
* @return
*/
public Double selectTimelyRate(ServiceSubtask ServiceSubtask);
/**
* 随访及时率(按 groupKey 分组批量统计)
*
* rate:出院时间(endtime)起 rateDay + 补偿天数 内完成随访的占比。
* 补偿天数取自 service_subtask_preachform.compensate_time 按子任务求和,
* 用子任务快照而非 service_task.preachform_desc,保证历史数据不随任务改配置而变动。
* rateDay 为空时 rate 返回 NULL。
*
* finishRate:应随访时间(visit_time) <= 实际完成时间(finishtime) 的占比,当前未被随访统计使用。
*
* @param ServiceSubtaskvo
* @return
*/
@MapKey("groupKey")
public Map> selectTimelyRateBatch(ServiceSubtaskEntity ServiceSubtaskvo);
/**
* 随访及时率详情
*
* @param ServiceSubtask
* @return
*/
public List selectTimelyRateDetail(ServiceSubtask ServiceSubtask);
/**
* 修改单一任务(随访)
*
* @return 结果
*/
public Boolean updateServiceSubtask(ServiceSubtask ServiceSubtask);
public Boolean updateServiceSubtaskByPatId(ServiceSubtask ServiceSubtask);
public Boolean updateServiceSubtaskByCondition(ServiceSubtask ServiceSubtask);
public Boolean updateServiceSubtaskByTaskGuid(ServiceSubtask ServiceSubtask);
/**
* 删除单一任务(随访)
*
* @param id 单一任务(随访)主键
* @return 结果
*/
public int deleteServiceSubtaskById(Long id);
public int deleteServiceSubtaskByCondition(@Param("taskid") Long id, @Param("patid") Long patid);
/**
* 删除单一任务(随访)
*
* @return 结果
*/
public List getDataByTime(@Param("beganTime") String beganTime, @Param("endTime") String endTime);
public List getSfFzInfoEveryMonth(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSpecialSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSfStatisticsHyperlink(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSfStatisticsGroupKey(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSfStatisticsJoy(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
/**
* 获取问题统计结果(随访)
*
* @return 结果
*/
public List getSfStatisticsCategory(ServiceSubtaskCountReq serviceSubtaskCountReq);
/**
* 获取问题统计结果(随访)
*
* @return 结果
*/
public List getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
/**
* 获取问题回答统计结果(随访)
*
* @return 结果
*/
public List getSfStatisticsScriptItemDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
public List getDeptRanking(PatMedReq patMedReq);
public List getServiceStatistics(ServiceStatisticsRequest serviceStatisticsRequest);
/**
* 统计任务各种状态的数量(优化版)
* 用于替代应用层的循环统计,直接在数据库层进行聚合计算
*
* @param serviceSubtaskVO 查询条件
* @return Map 包含各状态统计数据
* total: 患者服务总量
* wxsf: 无需随访数量 sendstate != 4
* xsf: 需随访数量 sendstate = 4
* dsf: 待随访数量 sendstate = 1L, 2L, 3L, 5L, 7L
* ywc: 已完成数量 sendstate = 6L
* dfs: 待发送数量 sendstate = 1L, 3L, 4L, 5L, 6L, 7L
* yfs: 已发送数量 sendstate = 2L
* cs: 超时数量 sendstate = 7L
* yc: 异常数量 excep = '1'
* yc: 警告数量 excep = '2'
*/
public Map countByCondition(ServiceSubtaskEntity serviceSubtaskVO);
/**
* 统计任务各种状态的数量(优化版)
*
* @param serviceSubtaskVO 查询条件
* @return Map 包含各状态统计数据
* pendingVisitCount: 当前登录人截止今日待随访总量
* failedVisitCount: 当前登录人随访任务失败总量
* abnormalVisitVount: 当前登录人随访任务异常总量
* allVisitCount: 当前登录人随访任务总量
* soonTimeoutCount: 当前登录人即将超时数量(超时截止时间在 soonTimeoutHours 小时内,仅统计尚未超时的数据)
*/
public Map getCurrentUserServiceSubtaskCount(ServiceSubtaskEntity serviceSubtaskVO);
/**
* 获取门诊随访人数
*
* @param patMedReq
* @return
*/
PatMedRes selectVisitCount(PatMedReq patMedReq);
List querySendCount(ServiceSubtaskSatisfactionEntity serviceSubtaskSatisfactionEntity);
/**
* 按病区分组统计延续护理数量
*
* @param vo 查询条件
* @return 每个病区的统计结果
*/
List