package com.malk.service.dingtalk;

import java.util.List;
import java.util.Map;

public interface DDClient_Attendance {

    /**
     * 获取打卡结果
     *
     * @param userIdList   企业内的员工ID列表，最大值50;
     * @param workDateFrom 和workDateTo参数相隔最多7天（包含7天）; 格式为“yyyy-MM-dd HH:mm:ss”，HH:mm:ss可以使用00:00:00，将返回此日期从0点到24点的结果
     * @param offset       表示获取考勤数据的起始点, 下次获取传的offset值为之前的offset+limit; 表示获取考勤数据的条数，最大值50。
     */
    List<Map> listAttendanceResult(String access_token, String[] userIdList, String workDateFrom, String workDateTo, Number offset, Number size);

    /**
     * 获取打卡详情
     *
     * @apiNote https://open.dingtalk.com/document/orgapp/attendance-clock-in-record-is-open
     */
    List<Map> listAttendanceRecord(String access_token, List userIds, String checkDateFrom, String checkDateTo);

    /**
     * 上传打卡记录 [Notice]
     * -
     * 1. 接口已下架, 需要开通专业版联系官方开权限
     * 2. 不是userId, 也可请求成功, 但无数据写入
     * 3. 考勤会以接口写入为准, 如已存在18点打卡, 再写入14点记录, 显示早退
     * 4. 可写入未来日期开启, 查询钉钉考勤记录正常返回 [创建时间为接口调用时间]
     */
    boolean uploadAttendanceRecord(String access_token, String userId, String deviceName, String deviceId, String photoUrl, long userCheckTime);

    /**
     * 查询假期余额 [分页是根据游标控制]
     *
     * @param op_userid  当前企业内拥有OA审批应用权限的管理员的userId
     * @param leave_code 假期类型唯一标识 [查询假期规则列表]
     * @param userids    待查询的员工ID列表, 半角逗号相隔
     * @param offset     分页偏移，从0开始的非负整数
     * @param size       分页偏移，最大50
     */
    List<Map> queryVacationQuota(String access_token, String op_userid, String leave_code, String userids, int offset, int size);

    /**
     * 查询假期余额_全部
     */
    List<Map> queryVacationQuota_all(String access_token, String op_userid, String leave_code, String userids, int offset, int size);

    /**
     * 批量查询人员排班信息 [班次ID，无该字段，表明当天休息]
     *
     * @param to_date_time 开始时间和结束时间的间隔不能超过7天; 查询时间限制距今180天内.
     * @param userids      查询的人员userId列表，一次最多可传50个
     */
    List<Map> listScheduleUsers(String access_token, String op_user_id, List<String> userids, long from_date_time, long to_date_time);

    /**
     * 获取考勤报表列定义 [获取假期相关字段信息，不返回ID。可设置考勤字段规则, 对于接口和钉钉后台考勤统计均生效]
     */
    List<Map> getAttColumns(String access_token);

    /**
     * 查询是否启用智能统计报表
     */
    boolean isOpenSmartReport(String access_token);

    /**
     * 获取考勤报表列值
     *
     * @param column_id_list 报表列ID，多值用英文逗号分隔，最大长度20 [获取考勤报表列定义接口]
     * @param to_date        结束时间，结束时间减去开始时间必须在31天以内 [格式为 yyyy-MM-dd HH:mm:ss]
     */
    List<Map> getAttColumnVal(String access_token, String userid, List<String> column_id_list, String from_date, String to_date);

    /**
     * 获取考勤报表列值
     *
     * @param leave_names 报表列ID，假期名称，多个用英文逗号分隔，最大长度20 [获取考勤报表列定义接口, 无Id列]
     * @param to_date     结束时间，结束时间减去开始时间必须在31天以内 [格式为 yyyy-MM-dd HH:mm:ss]
     */
    List<Map> getLeaveTimeByNames(String access_token, String userid, List<String> leave_names, String from_date, String to_date);

    /**
     * 获取班次详情 [应出勤天数, 仅返回当天]
     */
    Map getAttendanceShiftDetail(String access_token, String op_user_id, String shift_id);

    /**
     * 搜索考勤组详情
     */
    Map getAttendanceGroupDetail(String access_token, String op_user_id, String group_id);

    /**
     * 搜索考勤组摘要
     */
    List<Map> getAttendanceGroupSearch(String access_token, String op_user_id, String group_name);
}
