package com.mortals.xhx.module.dingding.personal.service;


import com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponseBody;
import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse;
import com.dingtalk.api.response.OapiAttendanceVacationQuotaListResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.dingding.IDingTalkService;
import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
import com.mortals.xhx.module.hik.person.model.req.org.OrgListReq;
import com.mortals.xhx.module.hik.person.model.req.person.PersonReq;
import com.mortals.xhx.module.hik.person.model.rsp.org.OrgDataInfo;
import com.mortals.xhx.module.hik.person.model.rsp.person.PersonDataInfo;
import org.apache.poi.ss.formula.functions.T;

/**
 * 钉钉人事相关服务类
 *
 * @author:
 * @date: 2023/7/14 13:54
 */
public interface IDingPersonService extends IDingTalkService {

    /**
     * 根据电话获取钉钉用户id
     *
     * @param mobile
     * @return
     */
    Rest<String> getPersonByMobile(String mobile);

    /**
     * 根据id获取用户电话
     *
     * @param id
     * @return
             */
    Rest<String> getPersonById(String id);

    /**
     * 根据code获取钉钉用户id
     *
     * @param code
     * @return
     */
    Rest<String> getPersonByCode(String code);


    /**
     * 发送工作消息
     * @param workMsgReq
     * @return
     */
    Rest<String>  sendWorkMsg(WorkMsgReq workMsgReq);

    /**
     * 审批详情
     * @param processInstanceId 审批实例ID。
     * @return
     */
    Rest<GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult>  getOaRecordsById(String processInstanceId);

    /**
     * 查询userid的特定假期余额
     * @param user_id 被查询员工的id集合 多个用,分隔
     * @param leave_code 假期类型编码
     * @return
     */
    Rest<OapiAttendanceVacationQuotaListResponse.OapiLeaveQuotaUserListVo>  getLeaveRecordByUserId(String user_id, String leave_code);

    /**
     * 根据审批详情处理审批（插入请假数据）
     * @param processInstanceId 实例id
     */
    void handleByProcessInstanceId(String processInstanceId);

    /**
     * 根据系统电话查询指定时间的审批表单
     * @param processCode 审批流的唯一码（详见doc下 审批表单列表.txt）。
     *                    请假：PROC-2E5C0DFF-3615-4409-A614-A2011FED5D38
     *                    外出：PROC-56D3ADEE-45A4-47BC-931A-2A0DC067DE32
     *                    出差：PROC-578CBDDF-B768-496D-9918-44A3F1D9CAE7
     * @param startTime 审批实例开始时间，Unix时间戳，单位毫秒
     * @param endTime 审批实例结束时间，Unix时间戳，单位毫秒。
     * @param nextToken 分页游标。如果是非首次调用，该参数传上次调用时返回的nextToken。
     * @param maxResults 分页参数，每页大小，最多传20。
     * @param userIds 发起人id列表  最大列表长度为10
     */
    Rest<ListProcessInstanceIdsResponse> getProcessInstanceIdByUserIds(String processCode,long startTime,long endTime,long nextToken,long maxResults,String userIds) throws Exception;

}
