钉钉考勤接口调用与OA系统数据对接
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
公司由原来的指纹打卡更换为钉钉打卡,需要钉钉和现有的OA考勤数据对接(合并钉钉打卡数据和OA上的请假,外出,出差数据) 1.查看钉钉接口文档 2.项目搭建引入钉钉开发SDK 3.获取钉钉考勤数据存储服务器数据库(调整存储格式) //测试 public static void main(String[] args) throws Exception { Date date = new Date(); DateFormat format_getHours = new SimpleDateFormat(“HH:mm:ss”); String currentDate = new SimpleDateFormat(“yyyy-MM-dd”).format(date); String yesterday = getPreDayOrAfterDay(currentDate, -1); String workDateFrom = yesterday + " " + “01:00:00”; String workDateTo = yesterday + " " + “23:00:00”; //新逻辑 List asList = Arrays.asList(“1”,“2”,“3”); List Attendances = new ArrayList(); for (int i = 0; i < asList.size(); i++) { Attendance Attendance = new Attendance(); Attendance.setUserId(asList.get(i)); JSONObject getuserinfo = getuserinfo(asList.get(i));//获取用户详情 String name = getuserinfo.getString(“name”);//姓名 Attendance.setName(name); JSONArray departmentid = getuserinfo.getJSONArray(“department”);//部门id Attendance.setDepartment(getdepartment(departmentid.getString(0)));//获取部门名称 Attendance.setAttendanceTime(yesterday);//设置打卡时间 JSONObject Json = getattendance(asList.get(i),workDateFrom,workDateTo);//获取打卡结果 JSONArray recordresult = Json.getJSONArray(“recordresult”); for (int j = 0; j < recordresult.size(); j++) { JSONObject record = recordresult.getJSONObject(j); String checkType = record.getString(“checkType”);//上下班 String locationResult = record.getString(“locationResult”);//位置结果 if (null!=locationResult) { switch (locationResult) { case “Normal”: locationResult=DingConstant.locationResult_Normal; break; case “Outside”: locationResult=DingConstant.locationResult_Outside; break; case “NotSigned”: locationResult=DingConstant.locationResult_NotSigned; break; } } String timeResult = record.getString("timeResult");//打卡结果 if (null!=timeResult) { switch (timeResult) { case "Normal": timeResult=DingConstant.timeResult_Normal; break; case "Early": timeResult=DingConstant.timeResult_Early; break; case "Late": timeResult=DingConstant.timeResult_Late; case "NotSigned": timeResult=DingConstant.timeResult_NotSigned; break; } } String userCheckTime = getHours(record.getString("userCheckTime"));//打卡时间 String onDuty1checkTime = Attendance.getOnDuty1checkTime(); String onDuty1checkResult = Attendance.getOnDuty1checkResult(); String offDuty1checkResult = Attendance.getOffDuty1checkResult(); String offDuty1checkTime = Attendance.getOffDuty1checkTime(); String offDuty2checkResult = Attendance.getOffDuty2checkResult(); String offDuty2checkTime = Attendance.getOffDuty2checkTime(); String onDuty2checkResult = Attendance.getOnDuty2checkResult(); String onDuty2checkTime = Attendance.getOnDuty2checkTime(); if (checkType!=null) { if (checkType.equals("OnDuty")) { if (null==onDuty1checkTime&&null==onDuty1checkResult) { Attendance.setOnDuty1checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOnDuty1checkResult(locationResult); }else { Attendance.setOnDuty1checkResult(timeResult); } continue; }else if (null==onDuty2checkTime&&null==onDuty2checkResult) { if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(onDuty1checkTime).getTime()) { Attendance.setOnDuty2checkTime(onDuty1checkTime); Attendance.setOnDuty2checkResult(onDuty1checkResult); Attendance.setOnDuty1checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOnDuty1checkResult(locationResult); }else { Attendance.setOnDuty1checkResult(timeResult); } }else { Attendance.setOnDuty2checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOnDuty2checkResult(locationResult); }else { Attendance.setOnDuty2checkResult(timeResult); } } continue; } }else if (checkType.equals("OffDuty")) { if (null==offDuty1checkTime&&null==offDuty1checkResult) { Attendance.setOffDuty1checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOffDuty1checkResult(locationResult); }else { Attendance.setOffDuty1checkResult(timeResult); } continue; }else if (null==offDuty2checkTime&&null==offDuty2checkResult) { if (format_getHours.parse(userCheckTime).getTime()<format_getHours.parse(offDuty1checkTime).getTime()) { Attendance.setOffDuty2checkTime(offDuty1checkTime); Attendance.setOffDuty2checkResult(offDuty1checkResult); Attendance.setOffDuty1checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOffDuty1checkResult(locationResult); }else { Attendance.setOffDuty1checkResult(timeResult); } }else { Attendance.setOffDuty2checkTime(userCheckTime); if (null!=locationResult&&locationResult.equals(DingConstant.locationResult_Outside)) { Attendance.setOffDuty2checkResult(locationResult); }else { Attendance.setOffDuty2checkResult(timeResult); } } continue; } } } } System.out.println(Attendance.toString()); Attendances.add(Attendance); } } 4.合并OA数据 public void run() { try { AttendanceService attendanceService = (AttendanceService) ApplicationContextUtil.getBean(“attendanceService”); OaLeaveService oaLeaveService = (OaLeaveService) ApplicationContextUtil.getBean(“oaLeaveService”); OaYearLeaveService oaYearLeaveService = (OaYearLeaveService) ApplicationContextUtil.getBean(“oaYearLeaveService”); OaBusinessService oaBusinessService = (OaBusinessService) ApplicationContextUtil.getBean(“oaBusinessService”); OaGooutService oaGooutService = (OaGooutService) ApplicationContextUtil.getBean(“oaGooutService”); UserService userService = (UserService) ApplicationContextUtil.getBean(“userService”); List<UserBean> list = userService.getuserlist(); String flow_data=null; //更新oa信息 for (int i = 0; i < list.size(); i++) { UserBean userBean = list.get(i); String oa_id = userBean.getUser_account();//OAID String ding_id = userBean.getDing_id();//dingdingID String user_name = userBean.getUser_name(); //判断是否有OA账号 if (null!=ding_id) { if (null==oa_id) { continue; }else { //取OA未记录数据 Map<String, Object> oaLeaveMap = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_507", "批准", "''"+"2019-08-01"+"''", "", 1, 5); Map<String, Object> oaLeaveMap1 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_508", "批准", "''"+"2019-08-01"+"''", "", 1, 5); Map<String, Object> oaLeaveMap2 = oaLeaveService.getOaLeaveList("0",oa_id,"values", "", "", "flow_data_512", "批准", "''"+"2019-08-01"+"''", "", 1, 5); Map<String, Object> oaYearLeaveMap = oaYearLeaveService.getOaYearLeaveList("0",oa_id,"values", "", "", "flow_data_535", "批准", "''"+"2019-08-01"+"''", "", 1, 5); Map<String, Object> oaBusinessMap = oaBusinessService.getOaBusinessList("0",oa_id, "values", "", "", "flow_data_103", "批准", "''"+"2019-08-01"+"''", "", 1, 5); Map<String, Object> oaGooutMap = oaGooutService.getOaGooutList("0",oa_id, "values", "", "", "flow_data_85", "批准", "''"+"2019-08-01"+"''", "", 1, 5); List<OaLeave> oaLeaveList =(List<OaLeave>) oaLeaveMap.get("rows"); List<OaLeave> oaLeaveList1 =(List<OaLeave>) oaLeaveMap1.get("rows"); List<OaLeave> oaLeaveList2 =(List<OaLeave>) oaLeaveMap2.get("rows"); List<OaYearLeave> oaYearLeaveList =(List<OaYearLeave>) oaYearLeaveMap.get("rows"); List<OaBusiness> oaBusinessList = (List<OaBusiness>) oaBusinessMap.get("rows"); List<OaGoout> oaGooutList = (List<OaGoout>) oaGooutMap.get("rows"); //请假信息 if (oaLeaveList.isEmpty()&&oaLeaveList1.isEmpty()&&oaLeaveList2.isEmpty()&& oaYearLeaveList.isEmpty()&&oaBusinessList.isEmpty()&&oaGooutList.isEmpty()) { continue; }else { //构造打卡信息 JSONObject getuserinfo = DingRecordSyncController.getuserinfo(ding_id); JSONArray departmentid = getuserinfo.getJSONArray("department");//部门id String department=null; if (null==departmentid) { continue; }else { department = DingRecordSyncController.getdepartment(departmentid.getString(0)); } //遍历请假出差外出信息 if (!oaLeaveList.isEmpty()||!oaLeaveList1.isEmpty()||!oaLeaveList2.isEmpty()) { List<OaLeave> list2 = new ArrayList<OaLeave>(); if (!oaLeaveList.isEmpty()) { list2=oaLeaveList; flow_data="flow_data_507"; }else if (!oaLeaveList1.isEmpty()) { list2=oaLeaveList1; flow_data="flow_data_508"; }else if (!oaLeaveList2.isEmpty()) { list2=oaLeaveList2; flow_data="flow_data_512"; } for (int j = 0; j < list2.size(); j++) { OaLeave oaLeave = list2.get(j); String id = oaLeave.getId(); String begin_date_type = oaLeave.getBegin_date_type();//开始时间的上下午 String end_date_type = oaLeave.getEnd_date_type();//结束时间的上下午 String begin_date = oaLeave.getBegin_date();//开始日期 String end_date = oaLeave.getEnd_date();//结束日期 String leave_name = oaLeave.getLeave_name();//请假类别 String date_count = oaLeave.getDate_count();//请假时长 if (null!=date_count&&date_count.equals("半")) { date_count="0.5"; } if (null!=date_count&&date_count.equals("半天")) { date_count="0.5"; } float count = Float.parseFloat(date_count); if (begin_date_type.equals("上午")) { if (count==0.5) { Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2) { attendance2.setOnDuty1checkResult(leave_name); attendance2.setOffDuty1checkResult(leave_name); attendance2.setLeave_count(0.5f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (count==1) { Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty1checkResult(leave_name); attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty1checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(1f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (count>1) { if (end_date_type.equals("上午")) { String nextDate = DateUtil.getNextDate(begin_date); Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty1checkResult(leave_name); attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty1checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(1f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } if (DateUtil.compateDate(end_date, nextDate)>0) { do { Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate); if (null!=attendance3&&attendance3.getAttendanceTime()!=null) { attendance3.setOnDuty1checkResult(leave_name); attendance3.setOnDuty2checkResult(leave_name); attendance3.setOffDuty1checkResult(leave_name); attendance3.setOffDuty2checkResult(leave_name); attendance3.setLeave_count(1f); attendanceService.updateAttendance(attendance3); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } nextDate=DateUtil.getNextDate(nextDate); } while (DateUtil.compateDate(end_date, nextDate)>0); } Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date); if (null!=attendance4&&attendance4.getAttendanceTime()!=null) { attendance4.setOnDuty1checkResult(leave_name); attendance4.setOffDuty1checkResult(leave_name); attendance4.setLeave_count(0.5f); attendanceService.updateAttendance(attendance4); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (end_date_type.equals("下午")) { String nextDate = DateUtil.getNextDate(begin_date); Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty1checkResult(leave_name); attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty1checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(1f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } do { Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate); if (null!=attendance3&&attendance3.getAttendanceTime()!=null) { attendance3.setOnDuty1checkResult(leave_name); attendance3.setOnDuty2checkResult(leave_name); attendance3.setOffDuty1checkResult(leave_name); attendance3.setOffDuty2checkResult(leave_name); attendance3.setLeave_count(1f); attendanceService.updateAttendance(attendance3); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } nextDate=DateUtil.getNextDate(nextDate); } while (DateUtil.compateDate(end_date, nextDate)>=0); if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; } }//开始时间是上午 }else if (begin_date_type.equals("下午")) { if (count==0.5) { Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2) { attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(0.5f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (count==1) { Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(0.5f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null)); } Attendance attendance3 = attendanceService.getAttendance(ding_id, DateUtil.getNextDate(begin_date)); if (null!=attendance3&&attendance3.getAttendanceTime()!=null) { attendance3.setOnDuty1checkResult(leave_name); attendance3.setOffDuty1checkResult(leave_name); attendance3.setLeave_count(0.5f); attendanceService.updateAttendance(attendance3); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,DateUtil.getNextDate(begin_date),null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (count>1) { if (end_date_type.equals("下午")) { String nextDate = DateUtil.getNextDate(begin_date); Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(0.5f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null)); } do { Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate); if (null!=attendance3&&attendance3.getAttendanceTime()!=null) { attendance3.setOnDuty1checkResult(leave_name); attendance3.setOnDuty2checkResult(leave_name); attendance3.setOffDuty1checkResult(leave_name); attendance3.setOffDuty2checkResult(leave_name); attendance3.setLeave_count(1f); attendanceService.updateAttendance(attendance3); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } nextDate=DateUtil.getNextDate(nextDate); } while (DateUtil.compateDate(end_date, nextDate)>=0); if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; }else if (end_date_type.equals("上午")) { String nextDate = DateUtil.getNextDate(begin_date); Attendance attendance2 = attendanceService.getAttendance(ding_id, begin_date); if (null!=attendance2&&attendance2.getAttendanceTime()!=null) { attendance2.setOnDuty2checkResult(leave_name); attendance2.setOffDuty2checkResult(leave_name); attendance2.setLeave_count(0.5f); attendanceService.updateAttendance(attendance2); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,begin_date,null,null,null,null,null,leave_name,null,leave_name,0.5f,null,null,null)); } do { Attendance attendance3 = attendanceService.getAttendance(ding_id, nextDate); if (null!=attendance3&&attendance3.getAttendanceTime()!=null) { attendance3.setOnDuty1checkResult(leave_name); attendance3.setOnDuty2checkResult(leave_name); attendance3.setOffDuty1checkResult(leave_name); attendance3.setOffDuty2checkResult(leave_name); attendance3.setLeave_count(1f); attendanceService.updateAttendance(attendance3); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,nextDate,null,leave_name,null,leave_name,null,leave_name,null,leave_name,1f,null,null,null)); } nextDate=DateUtil.getNextDate(nextDate); } while (DateUtil.compateDate(end_date, nextDate)>0); Attendance attendance4 = attendanceService.getAttendance(ding_id, end_date); if (null!=attendance4&&attendance4.getAttendanceTime()!=null) { attendance4.setOnDuty1checkResult(leave_name); attendance4.setOffDuty1checkResult(leave_name); attendance4.setLeave_count(0.5f); attendanceService.updateAttendance(attendance4); }else { attendanceService.saveAttendance(new Attendance(ding_id,user_name,department,end_date,null,leave_name,null,leave_name,null,null,null,null,0.5f,null,null,null)); } if (flow_data.equals("flow_data_507")) { oaLeaveService.updateOaLeave(id,1); }else if (flow_data.equals("flow_data_508")) { oaLeaveService.updateOaLeave1(id,1); }else if (flow_data.equals("flow_data_512")) { oaLeaveService.updateOaLeave2(id,1); } continue; } }//开始时间是下午 } } } 5.添加定时任务 public class TimerManager { private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 02); calendar.set(Calendar.MINUTE, 10); calendar.set(Calendar.SECOND, 00); Date date = calendar.getTime(); if (date.before(new Date())) { date = this.addDay(date, 1); } Timer timer = new Timer(); TimerTaskService task = new TimerTaskService(); timer.schedule(task, date, PERIOD_DAY); } private Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } } ———————————————— 版权声明:本文为CSDN博主「kengso」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
该文章在 2020/4/27 17:45:11 编辑过 |
关键字查询
相关文章
正在查询... |