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
34dfca6b
Commit
34dfca6b
authored
Jul 24, 2023
by
周亚武
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
钉钉相关接口
parent
cc1cdaf7
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
180 additions
and
125 deletions
+180
-125
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
.../module/attendance/dingmsg/api/DingMessageController.java
+149
-125
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
.../module/dingding/personal/service/IDingPersonService.java
+9
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
...dingding/personal/service/impl/DingPersonServiceImpl.java
+22
-0
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
View file @
34dfca6b
...
@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
...
@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
com.mortals.xhx.module.dingding.personal.service.IDingPersonService
;
import
com.mortals.xhx.module.dingding.personal.service.IDingPersonService
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffQuery
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.Log
;
import
org.apache.poi.ss.formula.functions.T
;
import
org.apache.poi.ss.formula.functions.T
;
...
@@ -54,7 +57,8 @@ public class DingMessageController {
...
@@ -54,7 +57,8 @@ public class DingMessageController {
private
IDingPersonService
dingPersonService
;
private
IDingPersonService
dingPersonService
;
@Autowired
@Autowired
private
AttendanceLeaveRecordService
attendanceLeaveRecordService
;
private
AttendanceLeaveRecordService
attendanceLeaveRecordService
;
@Autowired
private
StaffService
staffService
;
/**
/**
* appKey
* appKey
...
@@ -109,149 +113,169 @@ public class DingMessageController {
...
@@ -109,149 +113,169 @@ public class DingMessageController {
AttendanceLeaveRecordEntity
leaveRecordEntity
=
new
AttendanceLeaveRecordEntity
();
AttendanceLeaveRecordEntity
leaveRecordEntity
=
new
AttendanceLeaveRecordEntity
();
leaveRecordEntity
.
initAttrValue
();
leaveRecordEntity
.
initAttrValue
();
leaveRecordEntity
.
setRemark
(
processInstanceId
);
//将钉钉的事物id作为备注填入数据库
leaveRecordEntity
.
setRemark
(
processInstanceId
);
//将钉钉的事物id作为备注填入数据库
leaveRecordEntity
.
setLeavePersonId
(
Long
.
parseLong
(
result
.
getOriginatorUserId
()));
leaveRecordEntity
.
setLeavePerson
(
result
.
getTitle
().
substring
(
0
,
result
.
getTitle
().
indexOf
(
"提交"
)));
leaveRecordEntity
.
setDeptId
(
Long
.
parseLong
(
result
.
getOriginatorDeptId
()));
leaveRecordEntity
.
setDeptName
(
result
.
getOriginatorDeptName
());
Rest
<
String
>
mobileRest
=
dingPersonService
.
getPersonById
(
result
.
getOriginatorUserId
());
if
(
mobileRest
.
getCode
()
==
Rest
.
SUCCESS
)
{
String
mobile
=
mobileRest
.
getData
();
StaffEntity
staffEntity
=
staffService
.
selectOne
(
new
StaffQuery
().
phoneNumber
(
mobile
));
if
(!
ObjectUtils
.
isEmpty
(
staffEntity
)){
leaveRecordEntity
.
setLeavePersonId
(
staffEntity
.
getId
());
leaveRecordEntity
.
setLeavePerson
(
staffEntity
.
getName
());
leaveRecordEntity
.
setDeptId
(
staffEntity
.
getDeptId
());
leaveRecordEntity
.
setDeptName
(
staffEntity
.
getDeptName
());
leaveRecordEntity
.
setPhoneNumber
(
staffEntity
.
getPhoneNumber
());
if
(
result
.
getTasks
().
size
()
>
0
){
Date
startTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getCreateTime
());
Date
endTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getFinishTime
());
leaveRecordEntity
.
setStartTime
(
startTime
);
leaveRecordEntity
.
setEndTime
(
endTime
);
leaveRecordEntity
.
setDuration
((
int
)
((
endTime
.
getTime
()
-
startTime
.
getTime
())/
1000
));
}
if
(
result
.
getFormComponentValues
().
size
()
>
0
){
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
result
.
getFormComponentValues
().
get
(
0
).
getValue
());
if
(
jsonArray
.
size
()
>
0
){
Date
startTime1
=
dateFormat
(
jsonArray
.
get
(
0
).
toString
());
leaveRecordEntity
.
setStartTime
(
startTime1
);
}
if
(
jsonArray
.
size
()
>
1
){
Date
endTime1
=
dateFormat
(
jsonArray
.
get
(
1
).
toString
());
leaveRecordEntity
.
setEndTime
(
endTime1
);
}
if
(
jsonArray
.
size
()
>
2
){
leaveRecordEntity
.
setDuration
((
int
)
(
Float
.
parseFloat
(
jsonArray
.
get
(
2
).
toString
())*
60
*
60
));
}
if
(
jsonArray
.
size
()
>
4
){
switch
(
jsonArray
.
get
(
4
).
toString
()){
case
"调休"
:
leaveRecordEntity
.
setLeaveType
(
2
);
break
;
case
"病假"
:
leaveRecordEntity
.
setLeaveType
(
3
);
break
;
case
"年假"
:
leaveRecordEntity
.
setLeaveType
(
4
);
break
;
case
"产假"
:
leaveRecordEntity
.
setLeaveType
(
5
);
break
;
case
"陪产假"
:
leaveRecordEntity
.
setLeaveType
(
6
);
break
;
case
"婚假"
:
leaveRecordEntity
.
setLeaveType
(
7
);
break
;
case
"例假"
:
leaveRecordEntity
.
setLeaveType
(
8
);
break
;
case
"哺乳假"
:
leaveRecordEntity
.
setLeaveType
(
9
);
break
;
case
"丧假"
:
leaveRecordEntity
.
setLeaveType
(
10
);
break
;
case
"回单位"
:
leaveRecordEntity
.
setLeaveType
(
11
);
break
;
case
"因公请假"
:
leaveRecordEntity
.
setLeaveType
(
12
);
break
;
case
"外出勘验"
:
leaveRecordEntity
.
setLeaveType
(
13
);
break
;
case
"值班补班"
:
leaveRecordEntity
.
setLeaveType
(
14
);
break
;
case
"体检"
:
leaveRecordEntity
.
setLeaveType
(
15
);
break
;
case
"隔离"
:
leaveRecordEntity
.
setLeaveType
(
16
);
break
;
case
"因公外出"
:
leaveRecordEntity
.
setLeaveType
(
17
);
break
;
case
"公休"
:
leaveRecordEntity
.
setLeaveType
(
18
);
break
;
case
"育儿假"
:
leaveRecordEntity
.
setLeaveType
(
19
);
break
;
case
"调回单位"
:
leaveRecordEntity
.
setLeaveType
(
20
);
break
;
case
"探亲假"
:
leaveRecordEntity
.
setLeaveType
(
21
);
break
;
default
:
leaveRecordEntity
.
setLeaveType
(
1
);
//默认事假
break
;
}
}
}
else
if
(
result
.
getFormComponentValues
().
size
()
>
1
)
{
//请假理由
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
resonEntity
=
result
.
getFormComponentValues
().
get
(
1
);
if
(
resonEntity
.
getName
().
equals
(
"请假事由"
)){
leaveRecordEntity
.
setReason
(
resonEntity
.
getValue
());
}
}
else
if
(
result
.
getFormComponentValues
().
size
()
>
2
)
{
//上传的附件
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
picEntity
=
result
.
getFormComponentValues
().
get
(
2
);
if
(
picEntity
.
getName
().
equals
(
"图片"
)
&&
picEntity
.
getValue
()
!=
null
){
leaveRecordEntity
.
setReason
(
picEntity
.
getValue
());
}
}
if
(
result
.
getTasks
().
size
()
>
0
){
Date
startTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getCreateTime
());
Date
endTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getFinishTime
());
leaveRecordEntity
.
setStartTime
(
startTime
);
leaveRecordEntity
.
setEndTime
(
endTime
);
leaveRecordEntity
.
setDuration
((
int
)
((
endTime
.
getTime
()
-
startTime
.
getTime
())/
1000
));
}
if
(
result
.
getFormComponentValues
().
size
()
>
0
){
if
(
result
.
getStatus
().
compareToIgnoreCase
(
"NEW"
)
==
0
||
result
.
getStatus
().
compareToIgnoreCase
(
"RUNNING"
)
==
0
){
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
result
.
getFormComponentValues
().
get
(
0
).
getValue
());
leaveRecordEntity
.
setProcessStatus
(
1
);
if
(
jsonArray
.
size
()
>
0
){
}
else
if
(
result
.
getStatus
().
compareToIgnoreCase
(
"COMPLETED"
)
==
0
||
result
.
getStatus
().
compareToIgnoreCase
(
"CANCELED"
)
==
0
Date
startTime1
=
dateFormat
(
jsonArray
.
get
(
0
).
toString
());
||
result
.
getStatus
().
compareToIgnoreCase
(
"TERMINATED"
)
==
0
){
leaveRecordEntity
.
setStartTime
(
startTime1
);
leaveRecordEntity
.
setProcessStatus
(
2
);
}
}
if
(
jsonArray
.
size
()
>
1
){
Date
endTime1
=
dateFormat
(
jsonArray
.
get
(
1
).
toString
());
leaveRecordEntity
.
setEndTime
(
endTime1
);
}
if
(
jsonArray
.
size
()
>
2
){
leaveRecordEntity
.
setDuration
((
int
)
(
Float
.
parseFloat
(
jsonArray
.
get
(
2
).
toString
())*
60
*
60
));
}
if
(
jsonArray
.
size
()
>
4
){
switch
(
jsonArray
.
get
(
4
).
toString
()){
case
"调休"
:
leaveRecordEntity
.
setLeaveType
(
2
);
break
;
case
"病假"
:
leaveRecordEntity
.
setLeaveType
(
3
);
break
;
case
"年假"
:
leaveRecordEntity
.
setLeaveType
(
4
);
break
;
case
"产假"
:
leaveRecordEntity
.
setLeaveType
(
5
);
break
;
case
"陪产假"
:
leaveRecordEntity
.
setLeaveType
(
6
);
break
;
case
"婚假"
:
leaveRecordEntity
.
setLeaveType
(
7
);
break
;
case
"例假"
:
leaveRecordEntity
.
setLeaveType
(
8
);
break
;
case
"哺乳假"
:
leaveRecordEntity
.
setLeaveType
(
9
);
break
;
case
"丧假"
:
leaveRecordEntity
.
setLeaveType
(
10
);
break
;
case
"回单位"
:
leaveRecordEntity
.
setLeaveType
(
11
);
break
;
case
"因公请假"
:
leaveRecordEntity
.
setLeaveType
(
12
);
break
;
case
"外出勘验"
:
leaveRecordEntity
.
setLeaveType
(
13
);
break
;
case
"值班补班"
:
leaveRecordEntity
.
setLeaveType
(
14
);
break
;
case
"体检"
:
leaveRecordEntity
.
setLeaveType
(
15
);
break
;
case
"隔离"
:
leaveRecordEntity
.
setLeaveType
(
16
);
break
;
case
"因公外出"
:
leaveRecordEntity
.
setLeaveType
(
17
);
break
;
case
"公休"
:
leaveRecordEntity
.
setLeaveType
(
18
);
break
;
case
"育儿假"
:
leaveRecordEntity
.
setLeaveType
(
19
);
break
;
case
"调回单位"
:
leaveRecordEntity
.
setLeaveType
(
20
);
break
;
case
"探亲假"
:
leaveRecordEntity
.
setLeaveType
(
21
);
break
;
default
:
leaveRecordEntity
.
setLeaveType
(
1
);
//默认事假
break
;
if
(
result
.
getResult
().
compareToIgnoreCase
(
"AGREE"
)
==
0
){
leaveRecordEntity
.
setAuditResult
(
1
);
}
else
{
leaveRecordEntity
.
setAuditResult
(
2
);
}
}
}
log
.
info
(
"钉钉返回的result:"
+
result
.
getResult
()+
"\nauditresult:"
+
leaveRecordEntity
.
getAuditResult
());
leaveRecordEntity
.
setAuditDesc
(
result
.
getOperationRecords
().
get
(
0
).
getRemark
());
}
else
if
(
result
.
getFormComponentValues
().
size
()
>
1
)
{
//请假理由
AttendanceLeaveRecordEntity
recordEntity
=
attendanceLeaveRecordService
.
selectOne
(
new
AttendanceLeaveRecordQuery
().
remark
(
processInstanceId
));
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
resonEntity
=
result
.
getFormComponentValues
().
get
(
1
);
if
(
ObjectUtils
.
isEmpty
(
recordEntity
)){
if
(
resonEntity
.
getName
().
equals
(
"请假事由"
)){
leaveRecordEntity
.
setReason
(
resonEntity
.
getValue
());
}
}
else
if
(
result
.
getFormComponentValues
().
size
()
>
2
)
{
//上传的附件
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
picEntity
=
result
.
getFormComponentValues
().
get
(
2
);
if
(
picEntity
.
getName
().
equals
(
"图片"
)
&&
picEntity
.
getValue
()
!=
null
){
leaveRecordEntity
.
setReason
(
picEntity
.
getValue
());
}
}
leaveRecordEntity
.
setCreateTime
(
new
Date
());
leaveRecordEntity
.
setCreateUserId
(
1L
);
attendanceLeaveRecordService
.
save
(
leaveRecordEntity
);
}
else
{
leaveRecordEntity
.
setId
(
recordEntity
.
getId
());
if
(
result
.
getStatus
().
compareToIgnoreCase
(
"NEW"
)
==
0
||
result
.
getStatus
().
compareToIgnoreCase
(
"RUNNING"
)
==
0
){
leaveRecordEntity
.
setUpdateUserId
(
1L
);
leaveRecordEntity
.
setProcessStatus
(
1
);
leaveRecordEntity
.
setUpdateTime
(
new
Date
());
}
else
if
(
result
.
getStatus
().
compareToIgnoreCase
(
"COMPLETED"
)
==
0
||
result
.
getStatus
().
compareToIgnoreCase
(
"CANCELED"
)
==
0
||
result
.
getStatus
().
compareToIgnoreCase
(
"TERMINATED"
)
==
0
){
leaveRecordEntity
.
setProcessStatus
(
2
);
}
if
(
result
.
getResult
().
compareToIgnoreCase
(
"AGREE"
)
==
0
){
attendanceLeaveRecordService
.
update
(
leaveRecordEntity
);
leaveRecordEntity
.
setAuditResult
(
1
);
}
}
else
{
leaveRecordEntity
.
setAuditResult
(
2
);
}
log
.
info
(
"钉钉返回的result:"
+
result
.
getResult
()+
"\nauditresult:"
+
leaveRecordEntity
.
getAuditResult
());
leaveRecordEntity
.
setAuditDesc
(
result
.
getOperationRecords
().
get
(
0
).
getRemark
());
AttendanceLeaveRecordEntity
recordEntity
=
attendanceLeaveRecordService
.
selectOne
(
new
AttendanceLeaveRecordQuery
().
remark
(
processInstanceId
));
if
(
ObjectUtils
.
isEmpty
(
recordEntity
)){
leaveRecordEntity
.
setCreateTime
(
new
Date
());
}
else
{
leaveRecordEntity
.
setCreateUserId
(
1L
);
log
.
info
(
"该号码("
+
mobile
+
")未在本系统绑定"
);
attendanceLeaveRecordService
.
save
(
leaveRecordEntity
);
}
}
else
{
leaveRecordEntity
.
setId
(
recordEntity
.
getId
());
leaveRecordEntity
.
setUpdateUserId
(
1L
);
leaveRecordEntity
.
setUpdateTime
(
new
Date
());
attendanceLeaveRecordService
.
update
(
leaveRecordEntity
);
}
else
{
log
.
info
(
"根据id在钉钉平台查询电话失败"
+
mobileRest
.
getMsg
());
}
}
}
}
}
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
View file @
34dfca6b
...
@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
...
@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody
;
import
com.dingtalk.api.response.OapiV2UserGetResponse
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.module.dingding.IDingTalkService
;
import
com.mortals.xhx.module.dingding.IDingTalkService
;
import
com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq
;
import
com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq
;
...
@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
...
@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
*/
*/
Rest
<
String
>
getPersonByMobile
(
String
mobile
);
Rest
<
String
>
getPersonByMobile
(
String
mobile
);
/**
* 根据id获取用户电话
*
* @param id
* @return
*/
Rest
<
String
>
getPersonById
(
String
id
);
/**
/**
* 根据code获取钉钉用户id
* 根据code获取钉钉用户id
*
*
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
View file @
34dfca6b
...
@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
...
@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import
com.aliyun.tea.TeaException
;
import
com.aliyun.tea.TeaException
;
import
com.dingtalk.api.DingTalkClient
;
import
com.dingtalk.api.DingTalkClient
;
import
com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request
;
import
com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request
;
import
com.dingtalk.api.request.OapiV2UserGetRequest
;
import
com.dingtalk.api.request.OapiV2UserGetbymobileRequest
;
import
com.dingtalk.api.request.OapiV2UserGetbymobileRequest
;
import
com.dingtalk.api.request.OapiV2UserGetuserinfoRequest
;
import
com.dingtalk.api.request.OapiV2UserGetuserinfoRequest
;
import
com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response
;
import
com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response
;
import
com.dingtalk.api.response.OapiV2UserGetResponse
;
import
com.dingtalk.api.response.OapiV2UserGetbymobileResponse
;
import
com.dingtalk.api.response.OapiV2UserGetbymobileResponse
;
import
com.dingtalk.api.response.OapiV2UserGetuserinfoResponse
;
import
com.dingtalk.api.response.OapiV2UserGetuserinfoResponse
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.common.Rest
;
...
@@ -50,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -50,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
}
}
@Override
public
Rest
<
String
>
getPersonById
(
String
id
)
{
try
{
DingTalkClient
client
=
getDingTalkClient
(
"/topapi/v2/user/get"
);
OapiV2UserGetRequest
req
=
new
OapiV2UserGetRequest
();
req
.
setUserid
(
id
);
//用户id
log
.
info
(
"getPersonByID:{}"
,
id
);
OapiV2UserGetResponse
rsp
=
client
.
execute
(
req
,
getToken
());
log
.
info
(
"钉钉返回用户信息:{}"
,
rsp
.
getBody
());
if
(
rsp
.
getErrcode
()
==
0
)
{
return
Rest
.
ok
(
"成功"
,
rsp
.
getResult
().
getMobile
());
}
else
{
return
Rest
.
fail
(
String
.
format
(
"code:%s,msg:%s"
,
rsp
.
getErrcode
(),
rsp
.
getErrmsg
()));
}
}
catch
(
ApiException
e
)
{
log
.
info
(
"根据手机号码查询人员异常"
,
e
);
return
Rest
.
fail
(
e
.
getMessage
());
}
}
@Override
@Override
public
Rest
<
String
>
getPersonByCode
(
String
code
)
{
public
Rest
<
String
>
getPersonByCode
(
String
code
)
{
try
{
try
{
...
...
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