package com.xinelu.manage.service.signpatientmanageroute;

import com.aliyuncs.exceptions.ClientException;
import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.exception.ServiceException;
import com.xinelu.manage.domain.signpatientmanageroute.SignPatientManageRoute;
import com.xinelu.manage.domain.signpatientmanageroutenode.SignPatientManageRouteNode;
import com.xinelu.manage.dto.manualfollowup.ManualFollowUpDTO;
import com.xinelu.manage.dto.patientquestionsubmitresult.PatientQuestionSubmitResultDTO;
import com.xinelu.manage.dto.signpatientmanageroutenode.CreateAiobActualTimeTaskDto;
import com.xinelu.manage.dto.smssend.SmsInfoDTO;
import com.xinelu.manage.vo.manualfollowup.ManualFollowUpVO;
import com.xinelu.manage.vo.signpatientmanageroute.SignPatientManageRouteVO;
import com.xinelu.manage.vo.signpatientmanageroutenode.SignPatientManageNodeAuditVo;
import com.xinelu.manage.vo.signpatientrecord.SignPatientRecordSelectVo;
import com.xinelu.manage.vo.specialdiseaseroute.SpecialDiseaseRouteAuditVo;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;

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

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

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

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

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

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

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

	/**
	 * @description 随访待办列表-创建实时呼叫任务
	 * @Param createAiboActualTimeTaskDto 创建百度外呼实时任务传输对象
	 * @return 结果
	 * @Author haown
	 * @Date 2024-11-4 16:06
	 */
	Long createActualTimeTask(@RequestBody CreateAiobActualTimeTaskDto createAiboActualTimeTaskDto);

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

    /**
     * 人工随访代办处理
     * @param dto 患者问卷提交结果信息表DTO
     * @return 结果
     */
    AjaxResult addPatientQuestionResult(PatientQuestionSubmitResultDTO dto) throws ClientException;

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

	/**
	 * 路径审核->路径信息获取主路径及子路径信息及节点
	 * @param signRecordId 签约记录主键
	 * @return 主路径信息及节点、子路径信息及节点
	 */
	SpecialDiseaseRouteAuditVo getRouteAuditInfo(Long signRecordId);

	/**
	 * 路径审核->路径审核，节点详细信息
	 * @param signRecordId 签约记录主键
	 * @return 节点详细信息列表
	 */
	List<SignPatientManageNodeAuditVo> getRouteNodeInfo(Long signRecordId);

	/**
	 * @description 患者详情--康复计划及记录，右上角签约记录下拉框
	 * @Param patientId 患者主键
	 * @return 签约记录列表
	 * @Author haown
	 * @Date 2024-08-01 14:48
	*/
	List<SignPatientRecordSelectVo> getRecordList(Long patientId);

	Boolean sendSms(SmsInfoDTO smsInfoDTO) throws ClientException, ServiceException;

	void shortMessageSendRecordExtracted(PatientQuestionSubmitResultDTO dto, LocalDateTime time, Boolean b, String createBy);

	/**
	 * 任务管理
	 * @param manualFollowUpDTO 人工随访查询DTO
	 * @return ManualFollowUpVO 人工随访代办VO
	 */
	List<ManualFollowUpVO> taskManagement(ManualFollowUpDTO manualFollowUpDTO);

	/**
	 *
	 * 批量删除未执行任务
	 *
	 * @param ids 任务id
	 * @return AjaxResult
	 */
	AjaxResult batchDeleteTask(Long[] ids);

	/**
	 * 外呼确认
	 *
	 * @return AjaxResult
	 */
	AjaxResult outboundConfirmation();

	/**
	 * 直接外呼
	 *
	 * @return AjaxResult
	 */
	AjaxResult directOutbound(SignPatientManageRouteNode signPatientManageRouteNode);
}
