From 66d08fab8b1f473b0df89109e185695ef2bcdc09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AD=A3=E5=9B=BD?= <438926402@qq.com> Date: Mon, 14 Oct 2024 09:57:33 +0800 Subject: [PATCH] =?UTF-8?q?2024-10-14huangzhengguo=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96=E9=A1=B9=E7=9B=AE=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctrl/StartTaskController.java | 1 + .../src_dingding/dao/DingdingDaoImpl.java | 92 +++++- .../apps/src_dingding/dao/IDingdingDao.java | 40 ++- .../src_dingding/service/DingdingService.java | 304 ++++++------------ .../apps/src_dingding/task/DingdingTask.java | 6 + .../apps/src_dingding/vo/AttendanceVo.java | 43 +++ .../src_qyba/node/FVNewStateReturnNode.java | 2 +- .../apps/src_qyba/node/FVNewZhengceNode.java | 2 +- .../src_qyba/node/FVOldStateReturnNode.java | 2 +- .../apps/src_qyba/node/FVOldZhengceNode.java | 2 +- .../src_qyba/service/FVTongyongService.java | 9 +- 11 files changed, 284 insertions(+), 219 deletions(-) create mode 100644 src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java diff --git a/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java b/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java index fa4198e..0a0cd39 100644 --- a/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java +++ b/src/com/seeyon/apps/src_dingding/ctrl/StartTaskController.java @@ -99,6 +99,7 @@ public class StartTaskController extends BaseController { msg = getDingdingService().setWorkAttendance(datestr); // getDingdingService().setWorkAttendance1(); }else{ + getDingdingService().dingdingattendance(); msg = "参数输入错误请校验填写ty参数,date参数,进行数据进行数据调试"; } super.rendJavaScript(response, msg); diff --git a/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java index 92267ae..1dacd7a 100644 --- a/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java +++ b/src/com/seeyon/apps/src_dingding/dao/DingdingDaoImpl.java @@ -7,11 +7,9 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; -import java.util.TimeZone; -import com.seeyon.apps.src_dingding.service.DingdingService; +import com.seeyon.apps.src_dingding.vo.AttendanceVo; import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; import nc.vo.jcom.lang.StringUtil; import org.apache.commons.logging.Log; @@ -48,7 +46,95 @@ public class DingdingDaoImpl extends BaseUtil implements IDingdingDao{ private String getOvertime = "select * from formson_10366 where field0033 = ? and field0030 >= to_date(?,'YYYY-MM-DD') and field0029 <= to_date(?,'YYYY-MM-DD')"; private String getMakeCard = "select * from formmain_10369 where field0007 = ? and field0001 >= to_date(?,'YYYY-MM-DD') and field0001 <= to_date(?,'YYYY-MM-DD')"; private String getGroupName = "select field0002 from formmain_10430 where field0001 = ? and field0002 is not null and rownum = 1"; + private String getDingdingAttendanceSize = "select COUNT(id) AS con from SRC_DINGDING_ATTENDANCE where id = ? "; + private String addDingdingAttendance = "insert into SRC_DINGDING_ATTENDANCE(ID,GROUPID,GROUPNAME) values (?,?,?)"; + private String updateDingdingAttendance = "UPDATE SRC_DINGDING_ATTENDANCE SET GROUPNAME = ? where GROUPID = ?"; + private String getDingdingAttendanceBygroupId = "select * from SRC_DINGDING_ATTENDANCE where groupid = ?"; + public Map getDingdingAttendanceBygroupId(String groupid) { + Map ret = new HashMap(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingAttendanceBygroupId); + List p = new ArrayList(); + p.add(groupid); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + ret.put("groupid", map.get("groupid").toString()); + ret.put("groupname", map.get("groupname").toString()); + System.out.println("考勤组为:"+ret); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } + + public int addDingdingAttendance(AttendanceVo attendanceVo) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = addDingdingAttendance; + Object[] params = null; + params = new Object[] { id,attendanceVo.getGroupid(),attendanceVo.getGroupname() }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + public int updateDingdingAttendance(AttendanceVo attendanceVo) { + int i = 0; + try { + long id = UUIDLong.longUUID(); + String sql = updateDingdingAttendance; + Object[] params = null; + params = new Object[] { attendanceVo.getGroupname(),attendanceVo.getGroupid() }; + i = super.executeUpdate(sql.toString(), params); + } finally { + super.close(); + } + return i; + } + + + @Override + public int getDingdingAttendanceSize(String attendanceId) { + int ret = 0; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getDingdingAttendanceSize); + List p = new ArrayList(); + p.add(attendanceId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map : list) { + String con = map.get("con").toString(); + ret = Integer.parseInt(con); + } + } catch (BusinessException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + }finally { + if (agent != null) { + agent.close(); + } + } + return ret; + } public int adddept(Map map) { int i = 0; diff --git a/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java index a10b391..8962571 100644 --- a/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java +++ b/src/com/seeyon/apps/src_dingding/dao/IDingdingDao.java @@ -4,6 +4,7 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; +import com.seeyon.apps.src_dingding.vo.AttendanceVo; import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; import com.seeyon.ctp.common.exceptions.BusinessException; import com.seeyon.ctp.organization.bo.V3xOrgMember; @@ -17,7 +18,6 @@ public interface IDingdingDao { */ public int adddept(Map map); - /** * 添加人员对照表信息 * @param map @@ -104,7 +104,6 @@ public interface IDingdingDao { */ public int addCheckOnWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo); - /** * 修改考勤表中的数据 * @param checkOnWorkAttendanceVo 考勤数据对象 @@ -112,7 +111,6 @@ public interface IDingdingDao { */ public int updateWorkAttendance(CheckOnWorkAttendanceVo checkOnWorkAttendanceVo); - /** * 查询规定时间之内的请假单据 * @param memberId 人员ID @@ -122,7 +120,6 @@ public interface IDingdingDao { */ public List> getLeave(String memberId, String startDate,String endDate); - /** * 查询指定时间内的考勤情况 * @param memberId 人员ID @@ -130,10 +127,8 @@ public interface IDingdingDao { * @param endDate 查询结束时间 * @return */ - public List getWorkAttendanceByDate(String memberId, String startDate,String endDate); - /** * 查询规定时间之内的出差单据 * @param memberId 人员ID @@ -143,8 +138,6 @@ public interface IDingdingDao { */ public List> getEvections(String memberId, String startDate,String endDate); - - /** * 查询规定时间之内的调休单据 * @param memberId 人员ID @@ -154,7 +147,6 @@ public interface IDingdingDao { */ public List> getAdjustLeave(String memberId, String startDate,String endDate); - /** * 查询规定时间之内的加班单据 * @param memberId 人员ID @@ -180,11 +172,39 @@ public interface IDingdingDao { */ public String getGroupName(String memberId); - /** * 查询规定时间之内的补卡单据 * @return */ public String getDingdingOaMemberNum(); + /** + * 根据ID查询考情组是否存在 + * @param attendanceId + * @return + */ + public int getDingdingAttendanceSize(String attendanceId); + + /** + * 添加考勤组 + * @param attendanceVo + * @return + */ + public int addDingdingAttendance(AttendanceVo attendanceVo); + + /** + * 修改考勤组 + * @param attendanceVo + * @return + */ + public int updateDingdingAttendance(AttendanceVo attendanceVo); + + /** + * 根据考勤组ID查询考勤组信息 + * @param groupid + * @return + */ + public Map getDingdingAttendanceBygroupId(String groupid); + + } diff --git a/src/com/seeyon/apps/src_dingding/service/DingdingService.java b/src/com/seeyon/apps/src_dingding/service/DingdingService.java index b4cb357..e023e5c 100644 --- a/src/com/seeyon/apps/src_dingding/service/DingdingService.java +++ b/src/com/seeyon/apps/src_dingding/service/DingdingService.java @@ -10,6 +10,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import com.seeyon.apps.src_dingding.vo.AttendanceVo; import com.seeyon.apps.src_dingding.vo.CheckOnWorkAttendanceVo; import org.apache.commons.collections.map.HashedMap; import org.apache.commons.logging.Log; @@ -78,16 +79,56 @@ public class DingdingService { } return formFactory; } + + +// 同步钉钉考勤组信息 + public String dingdingattendance() { +// 查询钉钉中的所有考情组信息 + try { +// 设置查询钉钉的参数 + JSONObject attendance = new JSONObject(); + int offset = 0 ; + boolean hasMore; + do { + attendance.put("offset",offset); + attendance.put("size", 10); + System.out.println("创建参数:"+attendance.toString()); + DingtalkUtil dingtalkUtil = new DingtalkUtil(); + JSONObject ret = dingtalkUtil.doPost(attendance.toString(), "https://oapi.dingtalk.com/topapi/attendance/getsimplegroups"); + JSONObject result = ret.getJSONObject("result"); + JSONArray groups = result.getJSONArray("groups"); + for(int i = 0 ; i < groups.size() ; i++){ + //查询当前考情组信息在数据库中是否已经保存 + JSONObject group = groups.getJSONObject(i); + // 查询当前考情组信息在数据库中是否已经保存 + int size = dingdingDao.getDingdingAttendanceSize(group.getString("group_id")); + AttendanceVo attendanceVo = new AttendanceVo(); + attendanceVo.setGroupid(group.getString("group_id")); + attendanceVo.setGroupname(group.getString("group_name")); + int num = -1; + if(size>0){ + // 当前信息已保存修改当前保存的考勤组信息 + num = dingdingDao.updateDingdingAttendance(attendanceVo); + }else{ + // 当前考情组信息不存在新增考勤组信息 + num = dingdingDao.addDingdingAttendance(attendanceVo); + } + } + hasMore = result.getBoolean("has_more"); + offset = offset+10; + } while (hasMore); + } catch (ApiException e) { + e.printStackTrace(); + } + return null; + } -// public String dingdingclockin() { -// return "dingdingclockin"; -// } - - public String dingdingdept() throws RuntimeException, ApiException, BusinessException, SQLException, InterruptedException { + public String dingdingdept() { // 人员全路径名称是是唯一值,通过获取单位-部门-名称确定人员唯一性 // 记录对应信息 单位-部门=部门ID 的map数据,循环编辑之后通过 部门ID 查询人员信息 // 查询到的人员信息在根据单位-部门信息对应到OA系统中的人员信息上 // 创建参数用于保存上级部门ID + try { List deptids = new ArrayList(); // 创建参数用于保存同级部门ID List newdeptids = new ArrayList(); @@ -101,10 +142,8 @@ public class DingdingService { deptparam.put("dept_id", deptids.get(in)); deptparam.put("language", "zh_CN"); System.out.println("创建参数:"+deptparam.toString()); - log.info("创建参数:"+deptparam.toString()); DingtalkUtil dingtalkUtil = new DingtalkUtil(); - JSONObject ret = dingtalkUtil.doPost(deptparam.toString(), "https://oapi.dingtalk.com/topapi/v2/department/listsub"); - log.info(ret); + JSONObject ret = dingtalkUtil.doPost(deptparam.toString(), "https://oapi.dingtalk.com/topapi/v2/department/listsub"); JSONArray departments = ret.getJSONArray("result"); if(departments==null) { continue; @@ -115,18 +154,15 @@ public class DingdingService { Thread.sleep(200); boolean isdeptsize = dingdingDao.getdeptsizeBydingdingid(department.getString("dept_id")); // 如果当前钉钉ID在部门对照表中已存在则跳过当前循环 - log.info("同级部门信息:"+department.toString()); newdeptids.add(department.getString("dept_id")); log.info("钉钉部门对照数量:"+department+"------"+isdeptsize); if(isdeptsize) { continue; } - log.info(department.getString("name")); Map parammap = new HashedMap(); // 判断上级单位是否为集团 if(deptids.get(in).equals("120474537")) { // 上级单位为集团则直接根据名称获取当前单位信息 - log.info("本层为单位层级"); V3xOrgAccount account = getOrgManager().getAccountByName(department.getString("name")); if(account!=null) { parammap.put("oadeptid", account.getId().toString()); @@ -136,12 +172,10 @@ public class DingdingService { } }else { System.out.println("本层为部门层级"); - log.info("本层为部门层级"); // 上级单位不为集团则先根据原本对应关系查询出所在单位信息 log.info("1."+department); Thread.sleep(400); Map supdeptmap = dingdingDao.getdeptBysuperDeptId(department.getString("parent_id")); - log.info("1.1.1.1.1.supdeptmap:"+supdeptmap); if("340713772".equals(department.getString("parent_id"))|| supdeptmap.isEmpty()) { continue; } @@ -157,57 +191,58 @@ public class DingdingService { } // 已知条件,上级部门ID,上级部门路径名称,单位ID,当前部门名称,获取当前部门ID String supoadeptid = supdeptmap.get("oadeptid").toString(); - log.info("2."+supoadeptid); // 根据上级部门ID获取出上级部门的路径。 Map supdept = dingdingDao.getDepartmentById(Long.parseLong(supoadeptid)); - log.info("3."+supdept); // 根据 上级部门路径00__ + 部门名称的方式获取当前部门的id,然后根据ID获取当前部门信息 Map dept= dingdingDao.getdeptByPathName(supdept.get("path")+"0___",department.getString("name")); - log.info("4."+dept); if(dept==null) { continue; } parammap.put("oadeptid", dept.get("id").toString()); parammap.put("oadeptname", supdeptmap.get("oadeptname")+"-"+dept.get("name").toString()); - log.info("5."+parammap.get("oadeptname")); } parammap.put("dingdingdeptid", department.getString("dept_id")); parammap.put("dingdingdeptname", department.getString("name")); - log.info("6."+parammap); dingdingDao.adddept(parammap); } } - log.info("7."+newdeptids.size()); deptids = newdeptids; newdeptids = new ArrayList(); - log.info("7.deptids.size()!=0:"+deptids.size()!=0+""); } while (deptids.size()!=0); + + } catch (ApiException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (BusinessException e) { + e.printStackTrace(); + } log.info("部门同步完成..........."); return null; } - public String dingdingmember() throws BusinessException, SQLException, RuntimeException, ApiException, InterruptedException { + public String dingdingmember() { + try { log.info("进行人员基础数据同步"); DingtalkUtil dingtalkUtil = new DingtalkUtil(); // 查询src_dingding_oa_dept数据库表获取所有钉钉对照OA部门信息 - List> dingdingoadepts = dingdingDao.getDingdingOaDept(); + List> dingdingoadepts = dingdingDao.getDingdingOaDept(); + // 循环遍历钉钉对照OA部门信息 - log.info("查询部门对照表中有多少部门数据"+dingdingoadepts.size()); for (Map map : dingdingoadepts) { // 调用接口根据钉钉部门ID获取人员信息 int i = 0 ; boolean ishasmore; do { - log.info("钉钉部门对照表中的部门ID"+map.get("dingdingdeptid")); JSONObject userparam = new JSONObject(); userparam.put("dept_id",map.get("dingdingdeptid")); userparam.put("cursor",i); userparam.put("size",100); - log.info("人员参数:"+userparam); JSONObject useridret = dingtalkUtil.doPost(userparam.toString(), "https://oapi.dingtalk.com/topapi/user/listsimple"); - log.info("查询钉钉中的人员信息"+useridret); JSONObject result = useridret.getJSONObject("result"); System.out.println(result); if(result==null){ @@ -228,14 +263,12 @@ public class DingdingService { boolean ismembersize = dingdingDao.getmembersizeBydingdingid(user.getString("userid")); // 如果当前钉钉ID在人员对照表中已存在则跳过当前循环 if(ismembersize) { - log.info("2.当前数据已存在跳过当前人员保存"); continue; } List members = orgManager.getMemberByName(user.getString("name")); boolean boo = false; for (V3xOrgMember v3xOrgMember : members) { if(v3xOrgMember.getState()!=1) { - log.info(v3xOrgMember.getName()+"当前人员不是出于在职状态不进行同步"); continue; } Thread.sleep(400); @@ -249,23 +282,31 @@ public class DingdingService { membermap.put("oamembername", v3xOrgMember.getName()); membermap.put("dingdingmemberid", user.getString("userid")); membermap.put("dingdingmembername", user.getString("name")); - log.info("3.添加人员的map:"+membermap); int addmember = getDingdingDao().addmember(membermap); if(addmember>0) { boo = true; } } } - log.info("1.人员对照添加"+boo); } System.out.println("单个人员创建完成ishasmore=" + ishasmore); }while(ishasmore); } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } System.out.println("人员数据同步完成"); return null; } - public String dingdingclockin() throws BusinessException, SQLException, RuntimeException, ApiException, ServiceException, InterruptedException { + public String dingdingclockin(){ + try { String membernum = dingdingDao.getDingdingOaMemberNum(); log.info(membernum); // 查询当前系统人员对照表中的人员信息 @@ -311,12 +352,10 @@ public class DingdingService { log.info("考勤记录获取失败:"+ret); return null; } - ishasmore = ret.getBooleanValue("hasMore"); if(ishasmore) { offset = offset+50; } - FormExportUtil formExportUtil = new FormExportUtil(); // 调用转换方法 List> transformedData = formExportUtil.transformData(recordresult); @@ -326,7 +365,6 @@ public class DingdingService { array.add(jsonObj); } // 打印结果 - log.info("打卡结果打印:"+array); for(int i = 0 ; i groupMap = dingdingDao.getDingdingAttendanceBygroupId(groupId); + String groupName = groupMap.get("groupname"); from.put("考勤组", groupName); } from.put("考勤人员所在部门", v3xOrgMember.getOrgDepartmentId().toString()); @@ -423,9 +456,7 @@ public class DingdingService { else{ start = start+"下班2未打卡"; } } } - log.info("打卡时间:"+shijidakaStr); subfrom.put("打卡时间", shijidakaStr); - log.info("基准时间:"+jizhunshijianStr); subfrom.put("基准时间", jizhunshijianStr); // 根据获取出来的基准时间判断是上班还是下班 String checkType = datasSequence.getJSONObject(n).getString("checkType"); @@ -457,16 +488,28 @@ public class DingdingService { } }while(ishasmore); } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } + System.out.println("钉钉考勤原始数据创建完成"); return null; } - public String dingdingclockin(String datestr) throws BusinessException, SQLException, RuntimeException, ApiException, ServiceException, InterruptedException { + public String dingdingclockin(String datestr) { + try { String membernum = dingdingDao.getDingdingOaMemberNum(); log.info(membernum); // 查询当前系统人员对照表中的人员信息 List> members = dingdingDao.getDingdingOaMember("0",membernum); - // 一次封装12人的考勤数据 int groupSize = 10; // 每组的大小 List>> memberLists = new ArrayList>>(); @@ -503,7 +546,6 @@ public class DingdingService { JSONObject ret = dingtalkUtil.doPost(param.toString(), "https://oapi.dingtalk.com/attendance/list"); JSONArray recordresult = ret.getJSONArray("recordresult"); if(recordresult == null){ - log.info("考勤记录获取失败:"+ret); return "考勤记录获取失败:"+ret; } @@ -521,7 +563,6 @@ public class DingdingService { array.add(jsonObj); } // 打印结果 - log.info("打卡结果打印:"+array); for(int i = 0 ; i groupMap = dingdingDao.getDingdingAttendanceBygroupId(groupId); + String groupName = groupMap.get("groupname"); from.put("考勤组", groupName); } from.put("考勤人员所在部门", v3xOrgMember.getOrgDepartmentId().toString()); @@ -618,9 +654,7 @@ public class DingdingService { else{ start = start+"下班2未打卡"; } } } - log.info("打卡时间:"+shijidakaStr); subfrom.put("打卡时间", shijidakaStr); - log.info("基准时间:"+jizhunshijianStr); subfrom.put("基准时间", jizhunshijianStr); // 根据获取出来的基准时间判断是上班还是下班 String checkType = datasSequence.getJSONObject(n).getString("checkType"); @@ -634,7 +668,8 @@ public class DingdingService { } subfrom.put("打卡状态", timeResultStr); - +// 日志输出考勤信息 + log.info(subfrom.toString()); subfroms.add(subfrom); } if(lack ==datasSequence.size()){ @@ -653,6 +688,17 @@ public class DingdingService { } }while(ishasmore); } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } catch (ApiException e) { + e.printStackTrace(); + } System.out.println(datestr+"钉钉考勤原始数据创建完成"); return datestr+"钉钉考勤原始数据创建完成"; } @@ -670,18 +716,15 @@ public class DingdingService { int end = start+1000; // 获取所有打卡人 List> members = dingdingDao.getDingdingOaMember(start+"",end+""); - log.info(members); // 循环遍历所有打卡人信息,设置前一天的打卡情况 for (Map map:members) { // 根据打卡人信息获取一月内的打卡情况 - log.info("设置当前考勤时间前一个月"); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH,-1); String dateStr = sdf.format(calendar.getTime()); calendar.add(Calendar.MONTH, -1); String lastMonth = sdf.format(calendar.getTime()); String memberId = map.get("oamemberid").toString(); - log.info(lastMonth+"--"+memberId); int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); // 创建考勤对象 CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); @@ -694,14 +737,12 @@ public class DingdingService { // String yesterday = sdf.format(calendar1.getTime()); // 查询参数的打卡记录 List> clockInList = dingdingDao.getClockInBymember(dateStr, memberId); - log.info("指定时间的考勤数据条数:"+clockInList.size()); if (clockInList.size() > 0) { // 设置ID checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); - log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); // 判断考勤时间点上打卡状态 for (Map clockIn : clockInList) { log.info(clockIn); @@ -753,7 +794,6 @@ public class DingdingService { } } checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); - log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); } else { // 不存在打卡情况,创建未打卡数据 checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); @@ -766,7 +806,6 @@ public class DingdingService { checkOnWorkAttendanceVo.setShangban2("未打卡"); checkOnWorkAttendanceVo.setXiaban2("未打卡"); checkOnWorkAttendanceVo.setState("休息"); - log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); } // 保存打卡数据到数据库表中 int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); @@ -828,17 +867,14 @@ public class DingdingService { int end = start + 1000; // 获取所有打卡人 List> members = dingdingDao.getDingdingOaMember(start+"",end+""); - log.info(members); // 循环遍历所有打卡人信息,设置前一天的打卡情况 for (Map map:members) { // 根据打卡人信息获取一月内的打卡情况 - log.info("设置当前考勤时间前一个月"); Calendar calendar = Calendar.getInstance(); calendar.setTime(sdf.parse(dateStr)); calendar.add(Calendar.MONTH, -1); String lastMonth = sdf.format(calendar.getTime()); String memberId = map.get("oamemberid").toString(); - log.info(lastMonth+"--"+memberId); int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); // 创建考勤对象 CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); @@ -858,10 +894,8 @@ public class DingdingService { checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(sdf.parse(dateStr)); checkOnWorkAttendanceVo.setGroupName(clockInList.get(0).get("groupName").toString()); - log.info("创建考勤对象基础参数" + checkOnWorkAttendanceVo.getId()); // 判断考勤时间点上打卡状态 for (Map clockIn : clockInList) { - log.info(clockIn); // 设置考勤相关数据 if ("上班1".equals(clockIn.get("type").toString())) { checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); @@ -910,7 +944,6 @@ public class DingdingService { } } checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); - log.info("考勤对象" + checkOnWorkAttendanceVo.toString()); } else { // 不存在打卡情况,创建未打卡数据 checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); @@ -923,7 +956,6 @@ public class DingdingService { checkOnWorkAttendanceVo.setShangban2("未打卡"); checkOnWorkAttendanceVo.setXiaban2("未打卡"); checkOnWorkAttendanceVo.setState("休息"); - log.info("休息时间考勤对象" + checkOnWorkAttendanceVo.toString()); } // 保存打卡数据到数据库表中 int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); @@ -981,14 +1013,12 @@ public class DingdingService { log.info("查询当前人员在指定时间内的考勤情况"+memberId+list.get("startDateStr")+list.get("endDateStr")); List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); - log.info(list); for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { if("病假".equals(list.get("type").toString()) || "工伤".equals(list.get("type").toString()) || "产假".equals(list.get("type").toString()) || "产检假".equals(list.get("type").toString())){ if(cowav.getShangbanDate1() == null ){ cowav.setShangban1(list.get("type").toString()); }else { - log.info("shangban1"+cowav.getShangbanDate1()+"shangban1不为空时:"); if (cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() &&cowav.getShangban1().equals("未打卡")){ @@ -1033,9 +1063,6 @@ public class DingdingService { if(cowav.getShangbanDate1() == null){ cowav.setShangban1("未打卡"); }else{ - log.info(cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); - log.info(cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime()); - log.info(cowav.getShangban1().equals("未打卡") && cowav.getShangbanDate1() !=null); if(cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && cowav.getShangban1().equals("未打卡") && cowav.getShangbanDate1() !=null){ @@ -1046,9 +1073,6 @@ public class DingdingService { if(cowav.getXiabanDate1() == null){ cowav.setXiaban1("未打卡"); }else{ - log.info(cowav.getXiabanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); - log.info(cowav.getXiabanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime()); - log.info(cowav.getXiaban1().equals("未打卡") && cowav.getXiabanDate1() !=null); if(cowav.getXiabanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getXiabanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && cowav.getXiabanDate1() !=null && cowav.getXiaban1().equals("未打卡") ){ @@ -1060,9 +1084,6 @@ public class DingdingService { // cowav.setShangban2(cowav.getShangban1()); // cowav.setShangban2("未打卡"); }else{ - log.info(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); - log.info(cowav.getShangbanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime()); - log.info(cowav.getShangban2().equals("未打卡") && cowav.getShangbanDate2() !=null); if(cowav.getShangbanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getShangbanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && cowav.getShangbanDate2() !=null && cowav.getShangban2().equals("未打卡")){ @@ -1074,14 +1095,11 @@ public class DingdingService { // cowav.setXiaban2(cowav.getXiaban1()); //// cowav.setXiaban2("未打卡"); }else{ - log.info(cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime()); - log.info(cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime()); - log.info(cowav.getXiaban2().equals("未打卡") && cowav.getXiabanDate2() !=null); if(cowav.getXiabanDate2().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getXiabanDate2().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() && cowav.getXiabanDate2() !=null && cowav.getXiaban2().equals("未打卡") ){ - - }cowav.setXiaban2(list.get("type").toString()); + cowav.setXiaban2(list.get("type").toString()); + } } } // 状态 @@ -1100,19 +1118,16 @@ public class DingdingService { // 遍历当前查询到的出差单数量 log.info("进入出差考勤变化"+lists.size()); for (Map list:lists) { - log.info(list); // 查询当前人员在指定时间内的考勤情况 log.info("查询指定时间内的考勤情况"+memberId+list.get("startDateStr")+list.get("endDateStr")); List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); - log.info("workAttendanceByDates.size()"+workAttendanceByDates.size()); for (CheckOnWorkAttendanceVo cowav:workAttendanceByDates) { // 上班1 log.info(cowav.getState()); if(cowav.getShangbanDate1() == null ){ cowav.setShangban1(list.get("type").toString()); }else { - log.info("shangban1"+cowav.getShangbanDate1()+"shangban1不为空时:"); if (cowav.getShangbanDate1().getTime()>=simpleDateFormat.parse(list.get("startDateStr").toString()).getTime() && cowav.getShangbanDate1().getTime()<=simpleDateFormat.parse(list.get("endDateStr").toString()).getTime() &&cowav.getShangban1().equals("未打卡")){ @@ -1120,7 +1135,6 @@ public class DingdingService { } } // 下班1 - log.info("xiaban1"+cowav.getXiabanDate1()); if(cowav.getXiabanDate1() == null ){ cowav.setXiaban1(list.get("type").toString()); }else { @@ -1131,7 +1145,6 @@ public class DingdingService { } } // 上班2 - log.info("shangban2"+cowav.getShangbanDate2()); if(cowav.getShangbanDate2() == null){ cowav.setShangban2(list.get("type").toString()); }else { @@ -1142,7 +1155,6 @@ public class DingdingService { } } // 下班2 - log.info("xiaban2"+cowav.getXiabanDate2()); if(cowav.getXiabanDate2() == null ){ cowav.setXiaban2(list.get("type").toString()); }else { @@ -1168,7 +1180,6 @@ public class DingdingService { // 遍历当前查询到的加班单数量 log.info("进入加班考勤变化"+lists.size()); for (Map list:lists) { - log.info(list); // 查询当前人员在指定时间内的考勤情况 List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, list.get("startDateStr").toString().substring(0,10),list.get("endDateStr").toString().substring(0,10)); @@ -1190,7 +1201,6 @@ public class DingdingService { // 遍历当前查询到的加班单数量 log.info("进入补卡考勤变化"+lists.size()); for (Map list:lists) { - log.info(list); // 查询当前人员在指定时间内的考勤情况 log.info("进入补卡参数"+memberId+list.get("makeCardDateStr")+list.get("makeCardDateStr")); List workAttendanceByDates = dingdingDao.getWorkAttendanceByDate(memberId, @@ -1268,9 +1278,6 @@ public class DingdingService { Date xiabanDate2 = checkOnWorkAttendanceVo.getXiabanDate2(); String state = ""; if(!StringUtil.isEmpty(shangban1)){ - log.info(shangban1.equals(xiaban1) && shangban1.equals(shangban2) && shangban1.equals(xiaban2)); - log.info(shangban1.equals(xiaban1) && shangban2==null && xiaban2==null); - log.info(!(shangban1.equals(xiaban1))&& shangban2==null && xiaban2==null ); if(shangban1.equals(xiaban1) && shangban1.equals(shangban2) && shangban1.equals(xiaban2)){ if("未打卡".equals(shangban1)){ checkOnWorkAttendanceVo.setState("缺卡"); @@ -1313,10 +1320,6 @@ public class DingdingService { } }else{ - log.info(!"".equals(shangban1)); - log.info(!"".equals(xiaban1)); - log.info(!"".equals(shangban2)); - log.info(!"".equals(xiaban2)); if(StringUtil.isNotEmpty(shangban1) && !"正常".equals(shangban1) && !"null".equals(shangban1)){ state = state+"上班1"+shangban1+","; }if (StringUtil.isNotEmpty(xiaban1) && !"正常".equals(xiaban1) && !"null".equals(xiaban1)){ @@ -1349,100 +1352,3 @@ public class DingdingService { } - -// try { -// // 获取所有打卡人 -// List> members = dingdingDao.getDingdingOaMember(); -// // 循环遍历所有打卡人信息,设置前一天的打卡情况 -// for (Map map:members) { -//// 根据打卡人信息获取一月内的打卡情况 -// log.info("设置当前考勤时间前一个月"); -// Calendar calendar = Calendar.getInstance(); -// calendar.add(Calendar.MONTH, -1); -// String lastMonth = sdf.format(calendar.getTime()); -// String memberId = map.get("oamemberid").toString(); -// int clockInNum = dingdingDao.getClockInNumBymember(lastMonth,memberId); -//// 创建考勤对象 -// CheckOnWorkAttendanceVo checkOnWorkAttendanceVo = new CheckOnWorkAttendanceVo(); -// log.info(memberId+","+clockInNum+"此人前一个月如果存在打卡情况则进行考勤对象创建"); -// if(clockInNum>0){ -//// 存在打卡情况,创建基础参数显示考勤情况显示未上班1,下班1,上班2,下班2, -// Calendar calendar1 = Calendar.getInstance(); -//// 设置日期-1 -// calendar.add(Calendar.DATE, -1); -// String yesterday = sdf.format(calendar.getTime()); -//// 查询前一天的打卡记录 -// List> clockInList = dingdingDao.getClockInBymember(yesterday,memberId); -//// 设置ID -// checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); -// checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); -// checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(calendar.getTime()); -// log.info("创建考勤对象基础参数"+checkOnWorkAttendanceVo.getId()); -//// 判断考勤时间点上打卡状态 -// for (Map clockIn:clockInList) { -//// 设置考勤相关数据 -// if("上班1".equals(clockIn.get("type").toString())){ -// checkOnWorkAttendanceVo.setShangbanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); -// checkOnWorkAttendanceVo.setShangban1(clockIn.get("state").toString()); -// }else if ("下班1".equals(clockIn.get("type").toString())){ -// checkOnWorkAttendanceVo.setXiabanDate1(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); -// checkOnWorkAttendanceVo.setXiaban1(clockIn.get("state").toString()); -// }else if ("上班2".equals(clockIn.get("type").toString())){ -// checkOnWorkAttendanceVo.setShangbanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); -// checkOnWorkAttendanceVo.setShangban2(clockIn.get("state").toString()); -// }else if ("下班2".equals(clockIn.get("type").toString())){ -// checkOnWorkAttendanceVo.setXiabanDate2(simpleDateFormat.parse(clockIn.get("referenceDate").toString())); -// checkOnWorkAttendanceVo.setXiaban2(clockIn.get("state").toString()); -// } -// } -// checkOnWorkAttendanceVo = setState(checkOnWorkAttendanceVo); -// log.info("考勤对象"+checkOnWorkAttendanceVo.toString()); -// }else{ -//// 不存在打卡情况,创建未打卡数据 -// checkOnWorkAttendanceVo.setId(UUIDUtil.getUUIDLong()); -// checkOnWorkAttendanceVo.setMemberId(Long.parseLong(memberId)); -// checkOnWorkAttendanceVo.setCheckOnWorkAttendanceDate(calendar.getTime()); -// checkOnWorkAttendanceVo.setShangban1("未打卡"); -// checkOnWorkAttendanceVo.setXiaban1("未打卡"); -// checkOnWorkAttendanceVo.setShangban2("未打卡"); -// checkOnWorkAttendanceVo.setXiaban2("未打卡"); -// checkOnWorkAttendanceVo.setState("休息"); -// log.info("休息时间考勤对象"+checkOnWorkAttendanceVo.toString()); -// } -//// 保存打卡数据到数据库表中 -// int addin = dingdingDao.addCheckOnWorkAttendance(checkOnWorkAttendanceVo); -// -// log.info("人员考勤信息添加失败,当前考勤人员为:"+checkOnWorkAttendanceVo.getMemberId()+"添加信息条数为"+addin); -//// 根据单据修改当前人员一月内的考勤情况 -// -//// calendar表示时间前一个月的时间点。查询 单据结束时间在查询开始时间之后并且单据开始时间在查询结束时间之前的单据 -//// 查询当前人员一年内的请假单 map : 人员,请假类型,开始时间 ,结束时间 -// List> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),sdf.format(new Date())); -// leaveUpdateWorkAttendance(leaves,memberId); -// -//// 查询当前人员一年内的出差单 map : 人员,请假类型,开始时间 ,结束时间 -// List> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),sdf.format(new Date())); -// evectionUpdateWorkAttendance(evections,memberId); -// -//// 查询当前人员一年内的加班单 -// List> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),sdf.format(new Date())); -// overtimesUpdateWorkAttendance(overtimes,memberId); -// -//// 查询当前人员一年内的补卡单s -// List> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),sdf.format(new Date())); -// makeCardUpdateWorkAttendance(makeCard,memberId); -// -//// 查询当前人员一年内的调休单 map : 人员,请假类型,开始时间 ,结束时间 -// List> adjustLeaves = dingdingDao.getAdjustLeave(memberId,sdf.format(calendar.getTime()),sdf.format(new Date())); -// leaveUpdateWorkAttendance(adjustLeaves,memberId); -// } -// } catch (BusinessException e) { -// e.printStackTrace(); -// } catch (SQLException e) { -// e.printStackTrace(); -// } catch (ParseException e) { -// e.printStackTrace(); -// } -// -// -// log.info("开始设置考勤信息"); \ No newline at end of file diff --git a/src/com/seeyon/apps/src_dingding/task/DingdingTask.java b/src/com/seeyon/apps/src_dingding/task/DingdingTask.java index 6519c3e..80480a1 100644 --- a/src/com/seeyon/apps/src_dingding/task/DingdingTask.java +++ b/src/com/seeyon/apps/src_dingding/task/DingdingTask.java @@ -68,9 +68,15 @@ public class DingdingTask implements QuartzJob { return; } try { +// 钉钉考勤组同步 + getDingdingService().dingdingattendance(); +// 钉钉部门同步 getDingdingService().dingdingdept(); +// 钉钉人员同步 getDingdingService().dingdingmember(); +// 钉钉打卡同步 getDingdingService().dingdingclockin(); +// 钉钉考勤信息设置 getDingdingService().setWorkAttendance(); } catch(Exception e) { log.error("发生异常:", e); diff --git a/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java b/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java new file mode 100644 index 0000000..1debd90 --- /dev/null +++ b/src/com/seeyon/apps/src_dingding/vo/AttendanceVo.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.src_dingding.vo; + +public class AttendanceVo { + + // ID + private long id; + // 考勤组ID + private String groupid; + // 考勤组名称 + private String groupname; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getGroupid() { + return groupid; + } + + public void setGroupid(String groupid) { + this.groupid = groupid; + } + + public String getGroupname() { + return groupname; + } + + public void setGroupname(String groupname) { + this.groupname = groupname; + } + + public String toString(){ + return "("+this.groupid+":"+this.groupname+")"; + } + + + + +} diff --git a/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java index e560917..219d258 100644 --- a/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java +++ b/src/com/seeyon/apps/src_qyba/node/FVNewStateReturnNode.java @@ -25,6 +25,6 @@ public class FVNewStateReturnNode extends FVTongyongbeianNode { @Override public String getNodeName() { - return "新平台备案状态回传推送BIP"; + return "新平台备案状态回传推送"; } } \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java b/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java index 04010ba..82beba0 100644 --- a/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java +++ b/src/com/seeyon/apps/src_qyba/node/FVNewZhengceNode.java @@ -25,6 +25,6 @@ public class FVNewZhengceNode extends FVCommonNode { @Override public String getNodeName() { - return "新平台政策推送BIP"; + return "新平台政策推送"; } } \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java index fe896f8..895c033 100644 --- a/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java +++ b/src/com/seeyon/apps/src_qyba/node/FVOldStateReturnNode.java @@ -25,6 +25,6 @@ public class FVOldStateReturnNode extends FVTongyongbeianNode { @Override public String getNodeName() { - return "老平台备案状态回传推送BIP"; + return "老平台备案状态回传推送"; } } \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java index a1652ba..87f7698 100644 --- a/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java +++ b/src/com/seeyon/apps/src_qyba/node/FVOldZhengceNode.java @@ -25,6 +25,6 @@ public class FVOldZhengceNode extends FVCommonNode { @Override public String getNodeName() { - return "P老平台政策推送BI"; + return "老平台政策推送"; } } \ No newline at end of file diff --git a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java index d20fb80..9671534 100644 --- a/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java +++ b/src/com/seeyon/apps/src_qyba/service/FVTongyongService.java @@ -53,13 +53,16 @@ public class FVTongyongService { }else if ("满足条件备案".equals(type)){ mainmap.put("fieldValue","2"); } + mainlist.add(mainmap); + Map sfxwtsmap = new HashMap(); + sfxwtsmap.put("fieldName","sfxwts"); String sfxwts = formDataVo.getFieldData("是否下委托书").getStringValue(); if("是".equals(sfxwts)){ - mainmap.put("fieldValue","0"); + sfxwtsmap.put("fieldValue","0"); }else if ("否".equals(sfxwts)){ - mainmap.put("fieldValue","1"); + sfxwtsmap.put("fieldValue","1"); } - mainlist.add(mainmap); + mainlist.add(sfxwtsmap); //接口主参数 Map m = new LinkedHashMap();