2024-10-14huangzhengguo考勤数据获取项目优化

This commit is contained in:
2024-10-14 09:57:33 +08:00
parent 52dc436556
commit 66d08fab8b
11 changed files with 284 additions and 219 deletions

View File

@@ -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);

View File

@@ -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<String,String> getDingdingAttendanceBygroupId(String groupid) {
Map<String,String> ret = new HashMap<String, String>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder(getDingdingAttendanceBygroupId);
List<Object> p = new ArrayList<Object>();
p.add(groupid);
agent.execute(sql.toString(), p);
List<Map> 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<Object> p = new ArrayList<Object>();
p.add(attendanceId);
agent.execute(sql.toString(), p);
List<Map> 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<String, String> map) {
int i = 0;

View File

@@ -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<String, String> 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<Map<String,Object>> getLeave(String memberId, String startDate,String endDate);
/**
* 查询指定时间内的考勤情况
* @param memberId 人员ID
@@ -130,10 +127,8 @@ public interface IDingdingDao {
* @param endDate 查询结束时间
* @return
*/
public List<CheckOnWorkAttendanceVo> getWorkAttendanceByDate(String memberId, String startDate,String endDate);
/**
* 查询规定时间之内的出差单据
* @param memberId 人员ID
@@ -143,8 +138,6 @@ public interface IDingdingDao {
*/
public List<Map<String,Object>> getEvections(String memberId, String startDate,String endDate);
/**
* 查询规定时间之内的调休单据
* @param memberId 人员ID
@@ -154,7 +147,6 @@ public interface IDingdingDao {
*/
public List<Map<String,Object>> 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<String,String> getDingdingAttendanceBygroupId(String groupid);
}

View File

@@ -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<String> deptids = new ArrayList<String>();
// 创建参数用于保存同级部门ID
List<String> newdeptids = new ArrayList<String>();
@@ -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<String,String> 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<String,Object> 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<String,Object> supdept = dingdingDao.getDepartmentById(Long.parseLong(supoadeptid));
log.info("3."+supdept);
// 根据 上级部门路径00__ + 部门名称的方式获取当前部门的id,然后根据ID获取当前部门信息
Map<String,Object> 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<String>();
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<Map<String, Object>> dingdingoadepts = dingdingDao.getDingdingOaDept();
List<Map<String, Object>> dingdingoadepts = dingdingDao.getDingdingOaDept();
// 循环遍历钉钉对照OA部门信息
log.info("查询部门对照表中有多少部门数据"+dingdingoadepts.size());
for (Map<String, Object> 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<V3xOrgMember> 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<Map<String, Object>> transformedData = formExportUtil.transformData(recordresult);
@@ -326,7 +365,6 @@ public class DingdingService {
array.add(jsonObj);
}
// 打印结果
log.info("打卡结果打印:"+array);
for(int i = 0 ; i <array.size();i++ ) {
JSONObject json = array.getJSONObject(i);
// 设置主表信息
@@ -344,13 +382,8 @@ public class DingdingService {
if("-1".equals(groupId)){
from.put("考勤组", "");
}else{
JSONObject groupjson = new JSONObject();
groupjson.put("op_user_id","");
groupjson.put("group_id",groupId);
JSONObject group = dingtalkUtil.doPost(groupjson.toString(), "https://oapi.dingtalk.com/topapi/attendance/group/query");
log.info("调用接口获取考勤组"+group.toString());
JSONObject groupresult = group.getJSONObject("result");
String groupName = groupresult.getString("name");
Map<String,String> 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<Map<String,Object>> members = dingdingDao.getDingdingOaMember("0",membernum);
// 一次封装12人的考勤数据
int groupSize = 10; // 每组的大小
List<List<Map<String,Object>>> memberLists = new ArrayList<List<Map<String,Object>>>();
@@ -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 <array.size();i++ ) {
JSONObject json = array.getJSONObject(i);
// 设置主表信息
@@ -539,13 +580,8 @@ public class DingdingService {
if("-1".equals(groupId)){
from.put("考勤组", "");
}else{
JSONObject groupjson = new JSONObject();
groupjson.put("op_user_id","");
groupjson.put("group_id",groupId);
JSONObject group = dingtalkUtil.doPost(groupjson.toString(), "https://oapi.dingtalk.com/topapi/attendance/group/query");
log.info("调用接口获取考勤组"+group.toString());
JSONObject groupresult = group.getJSONObject("result");
String groupName = groupresult.getString("name");
Map<String,String> 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<Map<String,Object>> members = dingdingDao.getDingdingOaMember(start+"",end+"");
log.info(members);
// 循环遍历所有打卡人信息,设置前一天的打卡情况
for (Map<String,Object> 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<Map<String, Object>> 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<String, Object> 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<Map<String,Object>> members = dingdingDao.getDingdingOaMember(start+"",end+"");
log.info(members);
// 循环遍历所有打卡人信息,设置前一天的打卡情况
for (Map<String,Object> 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<String, Object> 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<CheckOnWorkAttendanceVo> 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<String,Object> list:lists) {
log.info(list);
// 查询当前人员在指定时间内的考勤情况
log.info("查询指定时间内的考勤情况"+memberId+list.get("startDateStr")+list.get("endDateStr"));
List<CheckOnWorkAttendanceVo> 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<String,Object> list:lists) {
log.info(list);
// 查询当前人员在指定时间内的考勤情况
List<CheckOnWorkAttendanceVo> 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<String,Object> list:lists) {
log.info(list);
// 查询当前人员在指定时间内的考勤情况
log.info("进入补卡参数"+memberId+list.get("makeCardDateStr")+list.get("makeCardDateStr"));
List<CheckOnWorkAttendanceVo> 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<Map<String,Object>> members = dingdingDao.getDingdingOaMember();
// // 循环遍历所有打卡人信息,设置前一天的打卡情况
// for (Map<String,Object> 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<Map<String,Object>> 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<String,Object> 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<Map<String,Object>> leaves = dingdingDao.getLeave(memberId,sdf.format(calendar.getTime()),sdf.format(new Date()));
// leaveUpdateWorkAttendance(leaves,memberId);
//
//// 查询当前人员一年内的出差单 map 人员,请假类型,开始时间 ,结束时间
// List<Map<String,Object>> evections = dingdingDao.getEvections(memberId,sdf.format(calendar.getTime()),sdf.format(new Date()));
// evectionUpdateWorkAttendance(evections,memberId);
//
//// 查询当前人员一年内的加班单
// List<Map<String,Object>> overtimes = dingdingDao.getOvertime(memberId,sdf.format(calendar.getTime()),sdf.format(new Date()));
// overtimesUpdateWorkAttendance(overtimes,memberId);
//
//// 查询当前人员一年内的补卡单s
// List<Map<String,Object>> makeCard = dingdingDao.getMakeCard(memberId,sdf.format(calendar.getTime()),sdf.format(new Date()));
// makeCardUpdateWorkAttendance(makeCard,memberId);
//
//// 查询当前人员一年内的调休单 map 人员,请假类型,开始时间 ,结束时间
// List<Map<String,Object>> 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("开始设置考勤信息");

View File

@@ -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);

View File

@@ -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+")";
}
}

View File

@@ -25,6 +25,6 @@ public class FVNewStateReturnNode extends FVTongyongbeianNode {
@Override
public String getNodeName() {
return "新平台备案状态回传推送BIP";
return "新平台备案状态回传推送";
}
}

View File

@@ -25,6 +25,6 @@ public class FVNewZhengceNode extends FVCommonNode {
@Override
public String getNodeName() {
return "新平台政策推送BIP";
return "新平台政策推送";
}
}

View File

@@ -25,6 +25,6 @@ public class FVOldStateReturnNode extends FVTongyongbeianNode {
@Override
public String getNodeName() {
return "老平台备案状态回传推送BIP";
return "老平台备案状态回传推送";
}
}

View File

@@ -25,6 +25,6 @@ public class FVOldZhengceNode extends FVCommonNode {
@Override
public String getNodeName() {
return "P老平台政策推送BI";
return "老平台政策推送";
}
}

View File

@@ -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();