[temp]釘釘考勤

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sie.util.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DingtalkUtils {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private String corpid = "";
    private String agentid = "";
    private String appkey = "";
    private String appSecret = "";

    private String accessToken;

    public DingtalkUtils() {
        try {
            accessToken = DingtalkTokenUtils.getDingtalkToken(appkey, agentid, appSecret);
        } catch (Exception e) {
            logger.info("獲取釘釘accessToken失敗", e);
        }
    }

    /**
     * 考勤排班
     *
     * @param workDate
     * @param offset
     * @param size
     */
    public Map scheduleList(String workDate, String offset, String size) {
        String url = "https://oapi.dingtalk.com/topapi/attendance/listschedule?access_token=" + accessToken;
        JSONObject data = new JSONObject();
        data.put("workDate", workDate);
        data.put("offset", offset);
        data.put("size", size);// 默認200
        try {
            //{"errcode":0,
            // "result":{"has_more":false,
            // "schedules":[{"check_type":"OnDuty","group_id":269960068,"plan_check_time":"2019-05-03 10:06:14","plan_id":47501754824,"userid":"manager4093"}]},
            // "request_id":"417pjgqwxopk"}
            JSONObject resutJSON = JSONObject.parseObject(HttpUtils.postBody(url, null, "application/json", data.toJSONString()));
            String errcode = String.valueOf(resutJSON.get("errcode"));
            Map map = new HashMap();
            if ("0".equals(errcode)) {
                JSONObject result = resutJSON.getJSONObject("result");
                boolean more = result.getBoolean("has_more");
                JSONArray schedules = result.getJSONArray("schedules");
                for (Object o : schedules) {
                    JSONObject schedule = (JSONObject) o;
                    //OnDuty, OffDuty
                    map.put(schedule.getString("check_type"), schedule.getString("plan_check_time"));
                }
                return map;
            }
        } catch (Exception e) {
            logger.info("");
        }
        return null;
    }

    /**
     * 考勤組詳情
     *
     * @param offset
     * @param size
     */
    public List scheduleGroupsList(String offset, String size) {
        String url = "https://oapi.dingtalk.com/topapi/attendance/getsimplegroups?access_token=" + accessToken;
        JSONObject data = new JSONObject();
        data.put("offset", offset);
        data.put("size", size);// 默認10
        try {
            /*{"errcode":0,"errmsg":"ok",
        "result":{"has_more":true,
            "groups":[{ "group_id":20015047,
                        "is_default":false,
                        "group_name":"固定排班",
                        "selected_class":[
                            {"setting":{
                                    "class_setting_id":1,
                                    "rest_begin_time":{"check_time":"2017-04-11 11:11:11"},
                                    "permit_late_minutes":10,
                                    "work_time_minutes":-1,
                                    "rest_end_time":{"check_time":"2017-04-11 11:11:11" },
                                    "absenteeism_late_minutes":30,
                                    "serious_late_minutes":20,
                                    "is_off_duty_free_check":"Y"
                                },
                                "class_id":20008010,
                                "sections":[{times":[{"check_time":"2017-04-11 11:11:11","check_type":"OnDuty","across":0}]} ],
                                "class_name":"A"}],
                    "type":"FIXED",
                    "member_count":1,
                    "default_class_id":111,
                    "work_day_list":"1",
                    "classes_list":"週一、二 班次A:09:00-18:00, 週六、週日 休息",
                    "manager_list":"1,2",
                    "dept_name_list":"部門1,部門2"}] }}*/
            JSONObject resutJSON = JSONObject.parseObject(HttpUtils.postBody(url, null, "application/json", data.toJSONString()));
            String errcode = String.valueOf(resutJSON.get("errcode"));
            if ("0".equals(errcode)) {
                JSONObject result = resutJSON.getJSONObject("result");
                boolean more = result.getBoolean("has_more");
                JSONArray groups = result.getJSONArray("groups");
                return groups;
            }
        } catch (Exception e) {
            logger.info("");
        }
        return null;
    }

    /**
     * 用戶考勤記錄
     *
     * @param usersList
     * @param workDateFrom
     * @param workDateTo
     * @param offset
     * @param limit
     * @return
     */
    public JSONArray getAttendanceList(List<String> usersList, String workDateFrom, String workDateTo, String offset, String limit) {
        String url = "https://oapi.dingtalk.com/attendance/list?access_token=" + accessToken;
        JSONObject data = new JSONObject();
        data.put("userIdList", usersList);
        data.put("workDateFrom", workDateFrom);
        data.put("workDateTo", workDateTo);
        data.put("offset", offset);
        data.put("limit", limit);
        try {
            String result = HttpUtils.postBody(url, null, "application/json", data.toJSONString());
            JSONObject resutJSON = JSONObject.parseObject(result);
            String errcode = String.valueOf(resutJSON.get("errcode"));
            JSONArray jsonArray = null;
            if ("0".equals(errcode)) {
                jsonArray = (JSONArray) resutJSON.get("recordresult");
            }
            return jsonArray;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 部門列表
     *
     * @return
     */
    public List getDepartList() {
        String url = "https://oapi.dingtalk.com/department/list?access_token=" + accessToken;
        try {
            JSONObject result = JSONObject.parseObject(HttpUtils.get(url, null));
            //{"errmsg":"ok","department":[{"id":1,"createDeptGroup":true,"name":"南京童心舞動網絡科技有限公司","autoAddUser":true}],"errcode":0}
            if ("errcode".equals(String.valueOf(result.getString("errcode")))) {
                JSONArray department = result.getJSONArray("department");
                return department;
            }
        } catch (Exception e) {
            logger.info("getDepartList", e);
        }
        return null;
    }

    /**
     * 根據部門ID獲取用戶信息(userid和name)
     *
     * @param departmentId
     */
    public List getSimpleUsersByDeptId(Long departmentId) {
        String url = "https://oapi.dingtalk.com/user/simplelist?access_token=" + accessToken + "&department_id=" + departmentId;
        try {
            JSONObject result = JSONObject.parseObject(HttpUtils.get(url, null));
            //{"errcode":0,"userlist":[{"name":"XXX","userid":"XXX"},{"name":"XXX","userid":"XXX"}],"errmsg":"ok"}
            if ("errcode".equals(String.valueOf(result.getString("errcode")))) {
                JSONArray userlist = result.getJSONArray("userlist");
                return userlist;
            }
        } catch (Exception e) {
            logger.info("getDepartList", e);
        }
        return null;
    }

    /**
     * 獲取員工的打卡記錄
     *
     * @param userIds       企業內的員工id列表,最多不能超過50個
     * @param checkDateFrom 查詢考勤打卡記錄的起始工作日,格式爲“yyyy-MM-dd hh:mm:ss”
     * @param checkDateTo   查詢考勤打卡記錄的結束工作日。注意,起始與結束工作日最多相隔7天
     */
    public JSONArray getRecordInfo(List<String> userIds, String checkDateFrom, String checkDateTo) {
        String url = "https://oapi.dingtalk.com/attendance/listRecord?access_token=" + accessToken;
        try {
            JSONObject data = new JSONObject();
            data.put("userIds", String.valueOf(userIds));
            data.put("checkDateFrom", checkDateFrom);
            data.put("checkDateTo", checkDateTo);
            data.put("isI18n", "false");
            JSONObject result = JSONObject.parseObject(HttpUtils.postBody(url, null, "application/json", data.toJSONString()));
            System.out.println(result);
            if (result != null && "0".equals(result.get("errcode").toString())) {
                JSONArray recordResult = result.getJSONArray("recordresult");
                return recordResult;
            }
        } catch (Exception e) {
            logger.info("");
        }
        return null;
    }

    private static String getToken(String appkey, String appSecret) throws Exception {
        String validateUrl = "https://oapi.dingtalk.com/gettoken?appkey=" + appkey + "&appsecret=" + appSecret;
        JSONObject result = (JSONObject) JSONObject.parse(HttpUtils.get(validateUrl, null));
        if ("0".equals(String.valueOf(result.get("errcode")))) {
            return result.getString("access_token");
        }
        return null;
    }

    public static void main(String[] args) {
        String workDateFrom = "2019-05-03 08:00:00";
        String workDateTo = "2019-05-03 09:00:00";
        List<String> usersList = new ArrayList<String>();
        usersList.add("userid");
        usersList.add("273844474026776057");
        String offset = "0";//分頁獲取數據,0表示第一頁
        String limit = "10";//每頁10條數據
        DingtalkUtils dingtalkUtils = new DingtalkUtils();

//        List list = dingtalkUtils.scheduleList(workDateFrom, offset, limit);
//        System.out.println(list);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章