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; } }