package com.example.zhongmei.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.power.common.util.DateTimeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@RestController
public class EmployeeController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/shift", method = RequestMethod.GET)
    public Map<String , Object> queryShift(@RequestParam String querystr) throws Exception {
        Map<String , Object> res = new HashMap<String ,Object>();
        try {
            if(querystr.contains("值班") && !querystr.contains("下次")) {
                res.put("answer", ShiftName(querystr));
            } else if(querystr.contains("下次")) {
                res.put("answer", NextShift(querystr));
            } else {
                res.put("answer", InfoByName(querystr));
            }
            res.put("answer_type", "答案");
        } catch (ParseException e) {
            res.put("answer", "暂无答案");
            res.put("answer_type", "答案");
        }
        return res;
    }

    // 根据姓名获取电话号(eg:{张三}的电话是多少?)
    @RequestMapping(value = "/phone/{querystr}", method = RequestMethod.GET)
    public String getMobilePhoneByName(@PathVariable("querystr") String querystr) {
        // 从语句中获取姓名
        int index = querystr.lastIndexOf("的");
        String need_name = querystr.substring(0, index);

        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/wrap/employee/findEmployeePage?token=" + token;
        String phone = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();

        String[] names = new String[]{"PERSONAL_PROFILE.employee_code",
                "PERSONAL_PROFILE.full_name",
                "CONTACT.mobile_number"};
        jsonobject.put("names", names);
        jsonobject.put("pageSize", 500);
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray employeeList = jsonObject.getJSONObject("data").getJSONArray("list");
        for(int i = 0; i < employeeList.size(); i++) {
            JSONObject employeeObj = employeeList.getJSONObject(i);
            if(employeeObj.getString("full_name").equals(need_name)) {
                phone = employeeObj.getString("mobile_number");
            }
        }

        String res = need_name + "的电话号码是" + phone;
        return res;
    }

    @RequestMapping(value = "/nextshift/{querystr}", method = RequestMethod.GET)
    // 获取员工的下一个排班(eg:{孙静}下次值班是什么时候?)
    public String getNextShift(@PathVariable("querystr")String querystr) {
        int index = querystr.lastIndexOf("下次");
        String need_name = querystr.substring(0, index);
        String employeeCode = getEmployeeCode(need_name);
        String next_shift_date = "";
        String next_shift_name = "";

        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/zhongmei/schedule-task/query?token=" + token;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, +1);
        String start_date = sdf.format(cal.getTime());
        cal.add(Calendar.DAY_OF_MONTH, +29);
        String end_date = sdf.format(cal.getTime());

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject jsonobject = new JSONObject();
        String[] employeeCodeList = new String[]{employeeCode};
        jsonobject.put("employeeCodeList", employeeCodeList);
        jsonobject.put("startDate", start_date);
        jsonobject.put("endDate", end_date);
        String jsonString = JSONObject.toJSONString(jsonobject);
        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        String result = restTemplate.postForObject(url, request, String.class);

        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray shiftArray = jsonObject.getJSONArray("data");
        if(shiftArray.size() != 0) {
            JSONObject shiftObj = shiftArray.getJSONObject(0);
            Date shift_date = shiftObj.getDate("gmtStart");
            DateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
            next_shift_date = format.format(shift_date);
            next_shift_name = shiftObj.getString("name");
        }

        String res = need_name + "下次值班是" + next_shift_date + next_shift_name;
        return res;
    }

    @RequestMapping(value = "/shiftperson/{querystr}", method = RequestMethod.GET)
    // 今天/10月8日 <时间> 在 <xx部门/公司> 值班的是谁?
    public String getShiftName(@PathVariable("querystr")String querystr) {
        String day = "";
        String time = "";
        String date = "";
        int loc_index1 = querystr.lastIndexOf("在");
        int loc_index2 = querystr.indexOf("值班");

        if(querystr.substring(0, 2).equals("今天")) {
            day = DateTimeUtil.nowStrTime(DateTimeUtil.DATE_FORMAT_DAY);
            String hour = querystr.substring(2, loc_index1 - 1);
            hour = hour.length() == 2 ? hour : "0" + hour;
            date = day + " " + hour + ":00:00";
        } else if(querystr.substring(0, 2).equals("现在")) {
            date = DateTimeUtil.nowStrTime(DateTimeUtil.DATE_FORMAT_SECOND);
        } else {
            int end_index1 = querystr.indexOf("日");
            day = querystr.substring(0, end_index1 + 1);
            time = querystr.substring(end_index1 + 1, loc_index1);
            date = DateFormat(day, time);
        }

        String unitName = querystr.substring(loc_index1 + 1, loc_index2);

        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/zhongmei/schedule-task/query?token=" + token;
        StringBuilder names = new StringBuilder();

        String unitCode = getUnitCode(unitName);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject jsonobject = new JSONObject();
        jsonobject.put("unitCode", unitCode);
        jsonobject.put("startDate", date.substring(0, 10));
        jsonobject.put("endDate", date.substring(0, 10));
        String jsonString = JSONObject.toJSONString(jsonobject);
        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        String result = restTemplate.postForObject(url, request, String.class);

        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray shiftArray = jsonObject.getJSONArray("data");
        if(shiftArray.size() != 0) {
            for(int i = 0; i < shiftArray.size(); i++) {
                JSONObject shiftObj = shiftArray.getJSONObject(i);
                String gmtStart = shiftObj.getString("gmtStart");
                String gmtEnd = shiftObj.getString("gmtEnd");
                if(date.compareTo(gmtStart) > 0 && date.compareTo(gmtEnd) < 0) {
                    names.append(shiftObj.getString("fullName") + " ");
                }
            }
        }

        String res = names.toString();
        if(res.equals("")) {
            return "没有值班的人";
        }
        return "值班的人有" + res;
    }

    // 根据姓名获取员工电话号码
    // public String MobilePhoneByName(String querystr) {
    //     // 从语句中获取姓名
    //     int index = querystr.lastIndexOf("的");
    //     String need_name = querystr.substring(0, index);
    //
    //     String token = getToken();
    //     String url = "https://n2oapi.woqu365.com/v2/api/wrap/employee/findEmployeePage?token=" + token;
    //     String phone = "";
    //
    //     // 请求头设置
    //     HttpHeaders headers = new HttpHeaders();
    //     headers.setContentType(MediaType.APPLICATION_JSON);
    //
    //     // jsonString作为请求参数
    //     JSONObject jsonobject = new JSONObject();
    //
    //     String[] names = new String[]{"PERSONAL_PROFILE.employee_code",
    //             "PERSONAL_PROFILE.full_name",
    //             "CONTACT.mobile_number"};
    //     jsonobject.put("names", names);
    //     jsonobject.put("pageSize", 500);
    //     String jsonString = JSONObject.toJSONString(jsonobject);
    //
    //     HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);
    //
    //     // 接收响应体转换为String类
    //     String result = restTemplate.postForObject(url, request, String.class);
    //
    //     // JsonObject
    //     JSONObject jsonObject = JSONObject.parseObject(result);
    //     JSONArray employeeList = jsonObject.getJSONObject("data").getJSONArray("list");
    //     for(int i = 0; i < employeeList.size(); i++) {
    //         JSONObject employeeObj = employeeList.getJSONObject(i);
    //         if(employeeObj.getString("full_name").equals(need_name)) {
    //             phone = employeeObj.getString("mobile_number");
    //         }
    //     }
    //
    //     String res = need_name + "的电话号码是" + phone;
    //     return res;
    // }

    // 根据姓名获取指定员工信息
    public String InfoByName(String querystr) {
        Map<String, String> infomap = new HashMap<String, String>();
        infomap.put("岗位编码", "position_code");
        infomap.put("工号", "employee_code");
        infomap.put("证件号", "identity_code");
        infomap.put("职务", "position_description");
        infomap.put("电话", "mobile_number");
        infomap.put("组织", "unit_code");


        // 从语句中获取姓名
        int index = querystr.lastIndexOf("的");
        String need_name = querystr.substring(0, index);

        String res = "";
        String resstr = "";
        for(String key : infomap.keySet()) {
            if(querystr.contains(key)) {
                res = getEmployeeInfo(infomap.get(key), need_name);
                if(res == null) res = "空";
                resstr = need_name + "的" + key + "是" + res;
            }
        }
        return resstr;
    }
    public String getEmployeeInfo(String need_info, String need_name) {
        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/wrap/employee/findEmployeePage?token=" + token;
        String res = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();

        String[] names = new String[]{"PERSONAL_PROFILE.employee_code",
                "PERSONAL_PROFILE.full_name",
                "PERSONAL_PROFILE.full_name",
                "PERSONAL_PROFILE.nationality",
                "PERSONAL_PROFILE.identity_code",
                "PERSONAL_PROFILE.date_of_join",
                "PERSONAL_PROFILE.hiring_status",
                "PERSONAL_PROFILE.hiring_type",
                "PERSONAL_PROFILE.did",
                "POSITION.position_code",
                "POSITION.position_description",
                "CONTACT.mobile_number"};
        jsonobject.put("names", names);
        jsonobject.put("pageSize", 500);
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray employeeList = jsonObject.getJSONObject("data").getJSONArray("list");
        for(int i = 0; i < employeeList.size(); i++) {
            JSONObject employeeObj = employeeList.getJSONObject(i);
            if(employeeObj.getString("full_name").equals(need_name)) {
                res = employeeObj.getString(need_info);
                if(need_info.equals("unit_code")) {
                    res = getUnitName(res, token);
                }
            }
        }

        return res;
    }

    public String ShiftName(String querystr) throws Exception {
        String day = "";
        String time = "";
        String date = "";
        int loc_index1 = querystr.lastIndexOf("在");
        int loc_index2 = querystr.indexOf("值班");

        if(querystr.substring(0, 2).equals("今天")) {
            day = DateTimeUtil.nowStrTime(DateTimeUtil.DATE_FORMAT_DAY);
            String hour = querystr.substring(2, loc_index1 - 1);
            hour = hour.length() == 2 ? hour : "0" + hour;
            date = day + " " + hour + ":00:00";
        } else if(querystr.substring(0, 2).equals("现在")) {
            date = DateTimeUtil.nowStrTime(DateTimeUtil.DATE_FORMAT_SECOND);
        } else {
            int end_index1 = querystr.indexOf("日");
            day = querystr.substring(0, end_index1 + 1);
            time = querystr.substring(end_index1 + 1, loc_index1);
            date = DateFormat(day, time);
        }

        // String unitName = querystr.substring(loc_index1 + 1, loc_index2);

        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/zhongmei/schedule-task/query?token=" + token;
        StringBuilder names = new StringBuilder();

        String unitCode = getUnitCode2(querystr);

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject jsonobject = new JSONObject();
        jsonobject.put("unitCode", unitCode);
        jsonobject.put("startDate", date.substring(0, 10));
        jsonobject.put("endDate", date.substring(0, 10));
        String jsonString = JSONObject.toJSONString(jsonobject);
        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        String result = restTemplate.postForObject(url, request, String.class);

        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray shiftArray = jsonObject.getJSONArray("data");

        // 获取请假人员列表
        String leave_date = date.substring(0, 10);
        Set<String> leaveSet = getLeaveSet(token, leave_date, leave_date);
        if(shiftArray.size() != 0) {
            for(int i = 0; i < shiftArray.size(); i++) {
                JSONObject shiftObj = shiftArray.getJSONObject(i);
                String gmtStart = shiftObj.getString("gmtStart");
                String gmtEnd = shiftObj.getString("gmtEnd");
                if(date.compareTo(gmtStart) > 0 && date.compareTo(gmtEnd) < 0) {
                    String temp_name = shiftObj.getString("fullName");
                    String temp_unitCode = shiftObj.getString("unitCode");
                    // 值班名称
                    String tempDutyName = shiftObj.getString("name");
                    String DutyName = getDutyName(tempDutyName);
                    if(!leaveSet.contains(temp_name) && temp_unitCode.equals(unitCode)) {
                        names.append(temp_name + DutyName + " ");
                    }
                }
            }
        }

        String res = names.toString();
        if(res.equals("")) {
            return "没有值班的人";
        }
        return "值班的人有" + res;
    }

    // 判断班制
    public String getDutyName(String text) {
        if(text.contains("白班")) return "早值";
        if(text.contains("夜班")) return "晚值";

        String timeStr = text.substring(text.length() - 5);
        String startTime = text.substring(text.length() - 11, text.length() - 6);

        if (startTime.equals("08:00") || startTime.equals("08:30")) {
            return "早值";
        } else if (startTime.equals("16:00") || startTime.equals("16:30")) {
            return "中值";
        } else if (startTime.equals("00:00") || startTime.equals("00:30")) {
            return "晚值";
        }

        if(!timeStr.contains("-") && timeStr.compareTo("16:30") > 0) {
            return "白班";
        }

        return "夜班";
    }

    public String NextShift(String querystr) {
        int index = querystr.lastIndexOf("下次");
        String need_name = querystr.substring(0, index);
        String employeeCode = getEmployeeCode(need_name);
        String next_shift_date = "";
        String next_shift_name = "";

        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/zhongmei/schedule-task/query?token=" + token;

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, +1);
        String start_date = sdf.format(cal.getTime());
        cal.add(Calendar.DAY_OF_MONTH, +29);
        String end_date = sdf.format(cal.getTime());

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject jsonobject = new JSONObject();
        String[] employeeCodeList = new String[]{employeeCode};
        jsonobject.put("employeeCodeList", employeeCodeList);
        jsonobject.put("startDate", start_date);
        jsonobject.put("endDate", end_date);
        String jsonString = JSONObject.toJSONString(jsonobject);
        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        String result = restTemplate.postForObject(url, request, String.class);

        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray shiftArray = jsonObject.getJSONArray("data");
        if(shiftArray.size() != 0) {
            JSONObject shiftObj = shiftArray.getJSONObject(0);
            Date shift_date = shiftObj.getDate("gmtStart");
            DateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
            next_shift_date = format.format(shift_date);
            next_shift_name = shiftObj.getString("name");
        }

        String res = need_name + "下次值班是" + next_shift_date + next_shift_name;
        return res;
    }

    // 获取Token
    public String getToken() {
        String url = "https://n2oapi.woqu365.com/token/get";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject object1 = new JSONObject();
        object1.put("corpId", "811dc7ed82bb43de82a2febf74381842");
        object1.put("appKey", "c0eb2cc0f31d438295f740f218119123");
        object1.put("appSecret", "5b7a616ce855480ca3bc0e9743355432");
        String jsonString = JSONObject.toJSONString(object1);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        String token = jsonObject.getJSONObject("data").getString("token");

        return token;
    }

    // 获取员工对应的EmployeeCode
    public String getEmployeeCode(String need_name) {
        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/wrap/employee/findEmployeePage?token=" + token;
        String employeeCode = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();
        String[] names = new String[]{"PERSONAL_PROFILE.employee_code",
                "PERSONAL_PROFILE.full_name",
                "CONTACT.mobile_number"};
        jsonobject.put("names", names);
        jsonobject.put("pageSize", 500);
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray employeeList = jsonObject.getJSONObject("data").getJSONArray("list");
        for(int i = 0; i < employeeList.size(); i++) {
            JSONObject employeeObj = employeeList.getJSONObject(i);
            if(employeeObj.getString("full_name").equals(need_name)) {
                employeeCode = employeeObj.getString("employee_code");
            }
        }

        return employeeCode;
    }

    // 获取部门对应的UnitCode
    public String getUnitCode(String unit_name) {
        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/hr/workunit/query-simple?token=" + token;
        String unitCode = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray unitList = jsonObject.getJSONArray("data");
        for(int i = 0; i < unitList.size(); i++) {
            JSONObject unitObj = unitList.getJSONObject(i);
            if(unitObj.getString("name").equals(unit_name)) {
                unitCode = unitObj.getString("unitCode");
            }
        }

        return unitCode;
    }

    // 在字符串中查找部门name, 返回对应的UnitCode
    public String getUnitCode2(String str) {
        String token = getToken();
        String url = "https://n2oapi.woqu365.com/v2/api/hr/workunit/query-simple?token=" + token;
        String unitCode = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray unitList = jsonObject.getJSONArray("data");
        for(int i = 0; i < unitList.size(); i++) {
            JSONObject unitObj = unitList.getJSONObject(i);
            if(str.contains(unitObj.getString("name"))) {
                unitCode = unitObj.getString("unitCode");
            }
        }

        return unitCode;
    }

    // 根据unitcode获取组织名称
    public String getUnitName(String unit_code, String token) {
        String url = "https://n2oapi.woqu365.com/v2/api/hr/workunit/query-simple?token=" + token;
        String unitCode = "";

        // 请求头设置
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        // jsonString作为请求参数
        JSONObject jsonobject = new JSONObject();
        jsonobject.put("unitCode", unit_code);
        String jsonString = JSONObject.toJSONString(jsonobject);

        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        // 接收响应体转换为String类
        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        String unit_name = "";
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray unitList = jsonObject.getJSONArray("data");
        for(int i = 0; i < unitList.size(); i++) {
            JSONObject unitObj = unitList.getJSONObject(i);
            unit_name = unitObj.getString("name");
        }

        return unit_name;
    }

    // 更改日期格式(mm月xx日 hh点-> yyyy-mm-xx hh:mm:ss)
    public String DateFormat(String s, String t) {
        Calendar cal = Calendar.getInstance();
        String year = cal.get(Calendar.YEAR) + "";
        int index1 = s.indexOf("月");
        int index2 = s.indexOf("日");
        String month = s.substring(0, index1);
        month = month.length() == 2 ? month : "0" + month;
        String day = s.substring(index1 + 1, index2);
        day = day.length() == 2 ? day : "0" + day;
        int index3 = t.indexOf("点");
        String hour = t.substring(0, index3);
        hour = hour.length() == 2 ? hour : "0" + hour;

        String res = year + "-" + month + "-" + day + " " + hour + ":00:00";
        return res;
        // boolean b = res.compareTo(s1) > 0;
    }

    // 获取指定时间段内请假人员列表
    public Set<String> getLeaveSet(String token, String startDate, String endDate) {
        Set<String> leaveSet = new HashSet<>();

        String url = "https://n2oapi.woqu365.com/v2/api/zhongmei/leave/query?token=" + token;

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject jsonobject = new JSONObject();
        jsonobject.put("startDate", startDate);
        jsonobject.put("endDate", endDate);
        String jsonString = JSONObject.toJSONString(jsonobject);
        HttpEntity<String> request = new HttpEntity<String>(jsonString, headers);

        String result = restTemplate.postForObject(url, request, String.class);

        // JsonObject
        JSONObject jsonObject = JSONObject.parseObject(result);
        JSONArray leaveList = jsonObject.getJSONArray("data");
        for(int i = 0; i < leaveList.size(); i++) {
            JSONObject leaveObj = leaveList.getJSONObject(i);
            leaveSet.add(leaveObj.getString("fullName"));
        }

        return leaveSet;
    }




}