@@ -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 . pu t( " 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 . ge t( " 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 . pu t( " 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 . ge t( " 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 ( " 开始设置考勤信息 " ) ;