package com.xinelu.manage.mapper.signpatientmanageroute;

import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.dto.manualfollowup.ManualFollowUpDTO;
import com.xinelu.manage.vo.manualfollowup.ManualFollowPatientVO;
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.PhonePush;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 签约患者管理任务路径Mapper接口
 *
 * @author haown
 * @date 2024-03-18
 */
public interface SignPatientManageRouteMapper {
    /**
     * 查询签约患者管理任务路径
     *
     * @param id 签约患者管理任务路径主键
     * @return 签约患者管理任务路径
     */
    public SignPatientManageRoute selectSignPatientManageRouteById(Long id);

    /**
     * 查询签约患者管理任务路径
     *
     * @param id 签约患者管理任务路径主键
     * @return 签约患者管理任务路径
     */
     SignPatientManageRouteVO selectSignPatientManageRoute(Long id);

    /**
     * 查询签约患者管理任务路径列表
     *
     * @param signPatientManageRoute 签约患者管理任务路径
     * @return 签约患者管理任务路径集合
     */
    List<SignPatientManageRoute> selectSignPatientManageRouteList(SignPatientManageRoute signPatientManageRoute);

    /**
     * 新增签约患者管理任务路径
     *
     * @param signPatientManageRoute 签约患者管理任务路径
     * @return 结果
     */
    public int insertSignPatientManageRoute(SignPatientManageRoute signPatientManageRoute);

    /**
     * 修改签约患者管理任务路径
     *
     * @param signPatientManageRoute 签约患者管理任务路径
     * @return 结果
     */
    public int updateSignPatientManageRoute(SignPatientManageRoute signPatientManageRoute);

    /**
     * 删除签约患者管理任务路径
     *
     * @param id 签约患者管理任务路径主键
     * @return 结果
     */
    public int deleteSignPatientManageRouteById(Long id);

    /**
     * 批量删除签约患者管理任务路径
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteSignPatientManageRouteByIds(Long[] ids);

    /**
     * 批量删除签约患者管理任务路径
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteSignPatientManageRouteByIdList(List<Long> ids);

    /**
     * 查询人工随访代办列表
     * @param manualFollowUpDTO 人工随访查询DTO
     * @return ManualFollowUpVO 人工随访代办VO
     */
    List<ManualFollowUpVO> selectManualFollowUpList(ManualFollowUpDTO manualFollowUpDTO);

    /**
     * 查询人工随访患者基本信息
     * @param id 签约患者管理任务表id
     * @return ManualFollowPatientVO 人工随访基本信息VO
     */
    ManualFollowPatientVO selectFollowPatientInfo(Long id);

    /**
     * 话术类型代办处理详情
     */
    PhonePush selectSignPatientManageRouteNode(Long manageRouteNodeId);

    /**
     * 查询患者电话
     *
     * @param patientId
     * @return
     */
    String selectPatientPhone(Long patientId);

    /**
     * 根据节点ids查询路径ids
     *
     * @param ids 节点ids
     * @return SignPatientManageRoute
     */
    List<SignPatientManageRoute> selectRouteByNodeIds(List<Long> ids);

    /**
     * 根据路径ids查询是否存在子路径
     *
     * @param ids 路径ids
     * @return SignPatientManageRoute
     */
    List<SignPatientManageRoute> selectRouteByParentRouteIds(List<Long> ids);

    /**
     * 删除路径
     *
     * @param ids 路径ids
     * @return int
     */
    int updateSignPatientManageRouteByIds(List<Long> ids);


    /**
     * 查询子路径同级子路径
     *
     * @param ids 子路径ids
     * @return SignPatientManageRoute
     */
    List<SignPatientManageRoute> selectParentRouteIds(List<Long> ids);

    /**
     * 查询上级ids
     *
     * @param ids 子路径ids
     * @return SignPatientManageRoute
     */
    List<Long> selectParentRouteIdByRouteId(List<Long> ids);

    /**
     * 批量添加节点表
     *
     * @param signPatientManageRoutes 节点信息
     * @return int
     */
    int insertBatch(List<SignPatientManageRoute> signPatientManageRoutes);

    /**
     * 根据推送任务id查询手机号信息
     *
     * @param batchSendTaskRecordId 推送任务id
     * @return SignPatientManageRouteVO
     */
    List<SignPatientManageRouteVO> selectRouteByBatchSendTaskRecordId(@Param("batchSendTaskRecordId") List<Long> batchSendTaskRecordId);
}
