Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
attendance-performance-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
attendance-performance-platform
Commits
2c37042a
Commit
2c37042a
authored
Mar 26, 2025
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加钉钉对接流程代码
parent
2debb3ba
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
22 deletions
+67
-22
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/StartedService.java
...mortals/xhx/daemon/applicationservice/StartedService.java
+2
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
...in/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+32
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
...ndance/service/impl/AttendanceLeaveRecordServiceImpl.java
+24
-7
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
.../module/dingding/personal/service/IDingPersonService.java
+1
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
...dingding/personal/service/impl/DingPersonServiceImpl.java
+8
-11
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/StartedService.java
View file @
2c37042a
...
@@ -105,7 +105,7 @@ public class StartedService implements IApplicationStartedService {
...
@@ -105,7 +105,7 @@ public class StartedService implements IApplicationStartedService {
//deptService.syncDeptByDingTalk(null);
//deptService.syncDeptByDingTalk(null);
//staffService.syncPersonsByDingTalk(null);
//staffService.syncPersonsByDingTalk(null);
String
attendStart
=
"2025-03-05"
;
/*
String attendStart = "2025-03-05";
String attendEnd = "2025-03-25";
String attendEnd = "2025-03-25";
...
@@ -115,7 +115,7 @@ public class StartedService implements IApplicationStartedService {
...
@@ -115,7 +115,7 @@ public class StartedService implements IApplicationStartedService {
hikQuery.setStaffId(8L);
hikQuery.setStaffId(8L);
checkDingDingEvent
(
DateUtil
.
parseDate
(
attendStart
),
DateUtil
.
parseDate
(
attendEnd
),
hikQuery
);
checkDingDingEvent(DateUtil.parseDate(attendStart), DateUtil.parseDate(attendEnd), hikQuery);
*/
// groupService.syncGroupByDingTalk();
// groupService.syncGroupByDingTalk();
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
View file @
2c37042a
package
com.mortals.xhx.daemon.task
;
package
com.mortals.xhx.daemon.task
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.exception.AppException
;
...
@@ -10,6 +12,9 @@ import com.mortals.xhx.base.system.user.model.UserQuery;
...
@@ -10,6 +12,9 @@ import com.mortals.xhx.base.system.user.model.UserQuery;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.common.code.AttendSourceTypeEnum
;
import
com.mortals.xhx.common.code.AttendSourceTypeEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService
;
import
com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
...
@@ -57,6 +62,9 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -57,6 +62,9 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
@Value
(
"${source.type:''}"
)
@Value
(
"${source.type:''}"
)
protected
String
sourceType
;
protected
String
sourceType
;
@Autowired
private
AttendanceLeaveRecordService
attendanceLeaveRecordService
;
@Override
@Override
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
...
@@ -80,12 +88,35 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -80,12 +88,35 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
log
.
info
(
"同步钉钉usreId"
);
log
.
info
(
"同步钉钉usreId"
);
syncDingDingLocalUserIds
();
syncDingDingLocalUserIds
();
log
.
info
(
"钉钉直连同步人员信息"
);
log
.
info
(
"钉钉直连同步人员信息"
);
//同步最近10天请假信息
DateTime
weekStart
=
DateUtil
.
offsetDay
(
new
Date
(),
-
30
);
AttendanceRecordHikQuery
hikQuery
=
new
AttendanceRecordHikQuery
();
hikQuery
.
setAttendanceDateStart
(
DateUtil
.
format
(
weekStart
,
"yyyy-MM-dd"
));
hikQuery
.
setAttendanceDateEnd
(
DateUtil
.
today
());
checkDingDingEvent
(
hikQuery
);
}
else
{
}
else
{
log
.
info
(
"未配置考勤源类型!"
);
log
.
info
(
"未配置考勤源类型!"
);
}
}
}
}
private
void
checkDingDingEvent
(
AttendanceRecordHikQuery
hikEntity
)
{
log
.
info
(
"开始同步钉钉请假事件!"
);
AttendanceLeaveRecordQuery
query
=
new
AttendanceLeaveRecordQuery
();
query
.
setStartTimeStart
(
hikEntity
.
getAttendanceDateStart
());
query
.
setEndTimeEnd
(
hikEntity
.
getAttendanceDateEnd
());
query
.
setStaffId
(
hikEntity
.
getStaffId
());
new
Thread
(()
->
{
attendanceLeaveRecordService
.
syncLeaveRecord
(
query
,
null
);
}).
start
();
}
private
void
syncDingDingUserIds
()
{
private
void
syncDingDingUserIds
()
{
try
{
try
{
List
<
UserEntity
>
userList
=
userService
.
getCacheList
().
stream
()
List
<
UserEntity
>
userList
=
userService
.
getCacheList
().
stream
()
...
@@ -139,7 +170,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -139,7 +170,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
StaffEntity
staffCache
=
staffService
.
getCache
(
item
.
getCustomerId
().
toString
());
StaffEntity
staffCache
=
staffService
.
getCache
(
item
.
getCustomerId
().
toString
());
if
(!
ObjectUtils
.
isEmpty
(
staffCache
)
)
{
if
(!
ObjectUtils
.
isEmpty
(
staffCache
))
{
userEntity
.
setDingUserId
(
staffCache
.
getWorkNum
());
userEntity
.
setDingUserId
(
staffCache
.
getWorkNum
());
}
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
View file @
2c37042a
...
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
...
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponseBody
;
import
com.google.common.collect.Lists
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.model.OrderCol
;
import
com.mortals.framework.model.OrderCol
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.service.ICacheService
;
...
@@ -228,7 +229,24 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -228,7 +229,24 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
}
}
private
void
getLeaveRecordByUserList
(
AttendanceLeaveRecordQuery
query
,
List
<
UserEntity
>
userEntityList
,
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
)
{
private
void
getLeaveRecordByUserList
(
AttendanceLeaveRecordQuery
query
,
List
<
UserEntity
>
userEntityList
,
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
)
{
for
(
UserEntity
item
:
userEntityList
)
{
List
<
List
<
UserEntity
>>
partition
=
Lists
.
partition
(
userEntityList
,
10
);
for
(
List
<
UserEntity
>
userList
:
partition
)
{
//String dingUserId = item.getDingUserId();
List
<
String
>
dingUserIds
=
userList
.
stream
().
map
(
m
->
m
.
getDingUserId
()).
collect
(
Collectors
.
toList
());
long
startTime
=
DateUtil
.
parseDateTime
(
query
.
getStartTimeStart
()
+
" 00:00:00"
).
getTime
();
long
endTime
=
DateUtil
.
parseDateTime
(
query
.
getEndTimeEnd
()
+
" 23:59:59"
).
getTime
();
Long
nextToken
=
0L
;
long
maxResults
=
20L
;
for
(
ProcessInstanceEnum
processInstanceEnum
:
ProcessInstanceEnum
.
values
())
{
try
{
getRecords
(
waitSyncLeaveRecords
,
processInstanceEnum
,
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserIds
);
}
catch
(
Exception
e
)
{
log
.
error
(
"同步请假记录异常"
,
e
);
}
}
}
/* for (UserEntity item : userEntityList) {
String dingUserId = item.getDingUserId();
String dingUserId = item.getDingUserId();
long startTime = DateUtil.parseDateTime(query.getStartTimeStart() + " 00:00:00").getTime();
long startTime = DateUtil.parseDateTime(query.getStartTimeStart() + " 00:00:00").getTime();
long endTime = DateUtil.parseDateTime(query.getEndTimeEnd() + " 23:59:59").getTime();
long endTime = DateUtil.parseDateTime(query.getEndTimeEnd() + " 23:59:59").getTime();
...
@@ -241,25 +259,24 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -241,25 +259,24 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
log.error("同步请假记录异常", e);
log.error("同步请假记录异常", e);
}
}
}
}
}
}
*/
}
}
private
void
getRecords
(
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
,
UserEntity
item
,
ProcessInstanceEnum
processInstanceEnum
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
String
dingUserId
)
throws
Exception
{
private
void
getRecords
(
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
,
ProcessInstanceEnum
processInstanceEnum
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
List
<
String
>
dingUserIds
)
throws
Exception
{
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
rest
=
dingPersonService
.
getProcessInstanceIdByUserIds
(
processInstanceEnum
.
getValue
(),
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
);
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
rest
=
dingPersonService
.
getProcessInstanceIdByUserIds
(
processInstanceEnum
.
getValue
(),
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
s
);
if
(
YesNoEnum
.
YES
.
getValue
()
==
rest
.
getCode
())
{
if
(
YesNoEnum
.
YES
.
getValue
()
==
rest
.
getCode
())
{
if
(
ObjectUtils
.
isEmpty
(
rest
.
getData
().
getNextToken
()))
{
if
(
ObjectUtils
.
isEmpty
(
rest
.
getData
().
getNextToken
()))
{
List
<
String
>
processInstanceList
=
rest
.
getData
().
getList
();
List
<
String
>
processInstanceList
=
rest
.
getData
().
getList
();
for
(
String
process
:
processInstanceList
)
{
for
(
String
process
:
processInstanceList
)
{
AttendanceLeaveRecordEntity
leaveRecord
=
new
AttendanceLeaveRecordEntity
();
AttendanceLeaveRecordEntity
leaveRecord
=
new
AttendanceLeaveRecordEntity
();
leaveRecord
.
setRemark
(
process
);
leaveRecord
.
setRemark
(
process
);
leaveRecord
.
setStaffId
(
item
.
getCustomerId
());
//
leaveRecord.setStaffId(item.getCustomerId());
waitSyncLeaveRecords
.
add
(
leaveRecord
);
waitSyncLeaveRecords
.
add
(
leaveRecord
);
log
.
info
(
"更新记录成功==>"
+
process
);
log
.
info
(
"更新记录成功==>"
+
process
);
}
}
}
else
{
}
else
{
nextToken
=
DataUtil
.
converStr2Long
(
rest
.
getData
().
getNextToken
(),
0L
);
nextToken
=
DataUtil
.
converStr2Long
(
rest
.
getData
().
getNextToken
(),
0L
);
getRecords
(
waitSyncLeaveRecords
,
item
,
processInstanceEnum
,
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
);
getRecords
(
waitSyncLeaveRecords
,
processInstanceEnum
,
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserIds
);
}
}
}
}
}
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
View file @
2c37042a
...
@@ -92,7 +92,7 @@ public interface IDingPersonService extends IDingTalkService {
...
@@ -92,7 +92,7 @@ public interface IDingPersonService extends IDingTalkService {
* @param maxResults 分页参数,每页大小,最多传20。
* @param maxResults 分页参数,每页大小,最多传20。
* @param userIds 发起人id列表 最大列表长度为10
* @param userIds 发起人id列表 最大列表长度为10
*/
*/
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
String
userIds
)
throws
Exception
;
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
List
<
String
>
userIds
)
throws
Exception
;
/**
/**
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
View file @
2c37042a
...
@@ -208,30 +208,27 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -208,30 +208,27 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
* "success" : true
* "success" : true
* }
* }
*/
*/
public
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
String
userIds
)
throws
Exception
{
public
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
List
<
String
>
userIds
)
throws
Exception
{
if
(!
userIds
.
equals
(
""
))
{
if
(!
ObjectUtils
.
isEmpty
(
userIds
))
{
com
.
aliyun
.
dingtalkworkflow_1_0
.
Client
client
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
Client
(
setConfig
());
com
.
aliyun
.
dingtalkworkflow_1_0
.
Client
client
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
Client
(
setConfig
());
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsHeaders
listProcessInstanceIdsHeaders
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsHeaders
();
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsHeaders
listProcessInstanceIdsHeaders
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsHeaders
();
listProcessInstanceIdsHeaders
.
xAcsDingtalkAccessToken
=
getToken
();
listProcessInstanceIdsHeaders
.
xAcsDingtalkAccessToken
=
getToken
();
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
listProcessInstanceIdsHeaders
.
setCommonHeaders
(
map
);
listProcessInstanceIdsHeaders
.
setCommonHeaders
(
map
);
// log.info("oaUrl===>{}",oaUrl);
// log.info("oaUrl===>{}",oaUrl);
/*
if (!ObjectUtils.isEmpty(oaUrl)) {
if
(!
ObjectUtils
.
isEmpty
(
oaUrl
))
{
listProcessInstanceIdsHeaders
.
getCommonHeaders
().
put
(
"host"
,
oaUrl
);
listProcessInstanceIdsHeaders
.
getCommonHeaders
().
put
(
"host"
,
oaUrl
);
}
*/
}
// listProcessInstanceIdsHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
// listProcessInstanceIdsHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsRequest
listProcessInstanceIdsRequest
=
new
ListProcessInstanceIdsRequest
()
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsRequest
listProcessInstanceIdsRequest
=
new
ListProcessInstanceIdsRequest
()
.
setProcessCode
(
processCode
)
.
setProcessCode
(
processCode
)
/* .setStartTime(startTime)
.
setStartTime
(
startTime
)
.setEndTime(endTime)
.
setEndTime
(
endTime
)
.setNextToken(nextToken)*/
.
setNextToken
(
nextToken
)
.
setStartTime
(
1742732000000L
)
.
setEndTime
(
1742918399000L
)
.
setNextToken
(
0L
)
.
setMaxResults
(
maxResults
)
.
setMaxResults
(
maxResults
)
.
setStatuses
(
Arrays
.
asList
(
"COMPLETED"
))
.
setStatuses
(
Arrays
.
asList
(
"COMPLETED"
))
.
setUserIds
(
java
.
util
.
Arrays
.
asList
(
userIds
)
);
.
setUserIds
(
userIds
);
try
{
try
{
RuntimeOptions
runtimeOptions
=
new
RuntimeOptions
();
RuntimeOptions
runtimeOptions
=
new
RuntimeOptions
();
runtimeOptions
.
setReadTimeout
(
60000
);
runtimeOptions
.
setReadTimeout
(
60000
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment