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
663e32af
Commit
663e32af
authored
Feb 02, 2024
by
廖旭伟
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
f85d5b1a
fad1753f
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
340 additions
and
86 deletions
+340
-86
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
...mance-manager-ui/admin/src/views/attendance/stat/list.vue
+1
-0
attendance-performance-manager/pom.xml
attendance-performance-manager/pom.xml
+2
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/ApiWebPerformController.java
...com/mortals/xhx/busiz/h5/web/ApiWebPerformController.java
+21
-11
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/InspectApiController.java
...va/com/mortals/xhx/busiz/h5/web/InspectApiController.java
+0
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/ProcessInstanceEnum.java
...java/com/mortals/xhx/common/code/ProcessInstanceEnum.java
+66
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/common/utils/AddAttendThread.java
...in/java/com/mortals/xhx/common/utils/AddAttendThread.java
+4
-4
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
...in/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+6
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceLeaveRecordVo.java
...x/module/attendance/model/vo/AttendanceLeaveRecordVo.java
+3
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceLeaveRecordService.java
...dule/attendance/service/AttendanceLeaveRecordService.java
+6
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
...ndance/service/impl/AttendanceLeaveRecordServiceImpl.java
+89
-4
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceLeaveRecordController.java
...odule/attendance/web/AttendanceLeaveRecordController.java
+58
-12
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/AbstractDingTalkService.java
.../mortals/xhx/module/dingding/AbstractDingTalkService.java
+7
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
.../module/dingding/personal/service/IDingPersonService.java
+4
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
...dingding/personal/service/impl/DingPersonServiceImpl.java
+61
-43
attendance-performance-manager/src/main/resources/bootstrap.yml
...ance-performance-manager/src/main/resources/bootstrap.yml
+1
-0
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
...-manager/src/test/java/com/mortals/httpclient/system.http
+11
-4
No files found.
attendance-performance-manager-ui/admin/src/views/attendance/stat/list.vue
View file @
663e32af
...
@@ -443,6 +443,7 @@ export default {
...
@@ -443,6 +443,7 @@ export default {
width
:
100
,
width
:
100
,
show
:
true
,
show
:
true
,
},
},
{
label
:
"
大厅
"
,
prop
:
"
salaName
"
,
show
:
true
},
{
label
:
"
部门
"
,
prop
:
"
deptName
"
,
show
:
true
},
{
label
:
"
部门
"
,
prop
:
"
deptName
"
,
show
:
true
},
{
{
label
:
"
应到
"
,
label
:
"
应到
"
,
...
...
attendance-performance-manager/pom.xml
View file @
663e32af
...
@@ -71,6 +71,7 @@
...
@@ -71,6 +71,7 @@
<profiles.hik.appKey>
25128371
</profiles.hik.appKey>
<profiles.hik.appKey>
25128371
</profiles.hik.appKey>
<profiles.hik.appSecret>
2m9RcPJOKq5j2QPQM4v5
</profiles.hik.appSecret>
<profiles.hik.appSecret>
2m9RcPJOKq5j2QPQM4v5
</profiles.hik.appSecret>
<profiles.dingtalk.domain>
https://oapi.dingtalk.com
</profiles.dingtalk.domain>
<profiles.dingtalk.domain>
https://oapi.dingtalk.com
</profiles.dingtalk.domain>
<profiles.dingtalk.oaScheme>
https
</profiles.dingtalk.oaScheme>
<profiles.dingtalk.oaUrl>
api.dingtalk.com
</profiles.dingtalk.oaUrl>
<profiles.dingtalk.oaUrl>
api.dingtalk.com
</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>
2652674890
</profiles.dingtalk.agentId>
<profiles.dingtalk.agentId>
2652674890
</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>
dingpqzradgfr4efdi2j
</profiles.dingtalk.appKey>
<profiles.dingtalk.appKey>
dingpqzradgfr4efdi2j
</profiles.dingtalk.appKey>
...
@@ -136,6 +137,7 @@
...
@@ -136,6 +137,7 @@
<profiles.hik.appSecret>
2m9RcPJOKq5j2QPQM4v5
</profiles.hik.appSecret>
<profiles.hik.appSecret>
2m9RcPJOKq5j2QPQM4v5
</profiles.hik.appSecret>
<profiles.dingtalk.domain>
http://172.15.28.113:8918
</profiles.dingtalk.domain>
<profiles.dingtalk.domain>
http://172.15.28.113:8918
</profiles.dingtalk.domain>
<profiles.dingtalk.oaScheme>
http
</profiles.dingtalk.oaScheme>
<profiles.dingtalk.oaUrl>
172.15.28.113:8919
</profiles.dingtalk.oaUrl>
<profiles.dingtalk.oaUrl>
172.15.28.113:8919
</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>
2652674890
</profiles.dingtalk.agentId>
<profiles.dingtalk.agentId>
2652674890
</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>
dingpqzradgfr4efdi2j
</profiles.dingtalk.appKey>
<profiles.dingtalk.appKey>
dingpqzradgfr4efdi2j
</profiles.dingtalk.appKey>
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/ApiWebPerformController.java
View file @
663e32af
package
com.mortals.xhx.busiz.h5.web
;
package
com.mortals.xhx.busiz.h5.web
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.lang.Validator
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
...
@@ -9,6 +10,7 @@ import com.mortals.framework.common.Rest;
...
@@ -9,6 +10,7 @@ import com.mortals.framework.common.Rest;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.xhx.busiz.h5.req.*
;
import
com.mortals.xhx.busiz.h5.req.*
;
import
com.mortals.xhx.common.code.SubMethodEnum
;
import
com.mortals.xhx.common.code.SubMethodEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.module.perform.model.*
;
import
com.mortals.xhx.module.perform.model.*
;
import
com.mortals.xhx.module.perform.service.*
;
import
com.mortals.xhx.module.perform.service.*
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
...
@@ -168,26 +170,34 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
...
@@ -168,26 +170,34 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
@PostMapping
(
"effect/save"
)
@PostMapping
(
"effect/save"
)
@UnAuth
@UnAuth
public
Rest
<
Void
>
effectSave
(
@RequestBody
EffectSaveReq
req
)
{
public
Rest
<
Void
>
effectSave
(
@RequestBody
EffectSaveReq
req
)
{
// log.info("web Api req==>{}", JSON.toJSONString(req));
// log.info("web Api req==>{}", JSON.toJSONString(req));
String
busiDesc
=
"外部效能新增"
;
String
busiDesc
=
"外部效能新增"
;
Rest
rest
=
Rest
.
ok
(
busiDesc
+
"成功!"
);
Rest
rest
=
Rest
.
ok
(
busiDesc
+
"成功!"
);
try
{
try
{
//如果手机号码为空 将当前记录保存到临时表中,人工手动处理
boolean
isMobile
=
Validator
.
isMobile
(
req
.
getPhone
());
if
(!
isMobile
)
{
effectErrorSave
(
req
);
rest
=
Rest
.
fail
(
"手机号码不正确!"
);
}
if
(
ObjectUtils
.
isEmpty
(
req
.
getPhone
()))
{
if
(
ObjectUtils
.
isEmpty
(
req
.
getPhone
()))
{
//保存异常数据
//保存异常数据
/
effectErrorSave
(
req
);
effectErrorSave
(
req
);
rest
=
Rest
.
fail
(
"手机号码为空!"
);
rest
=
Rest
.
fail
(
"手机号码为空!"
);
}
else
{
}
if
(
ObjectUtils
.
isEmpty
(
req
.
getRuleCode
()))
{
//如果手机号码为空 将当前记录保存到临时表中,人工手动处理
throw
new
AppException
(
"绩效规则编码不能为空!"
);
}
else
{
if
(
ObjectUtils
.
isEmpty
(
req
.
getRuleCode
()))
{
effect
(
req
);
//保存异常数据/
}
effectErrorSave
(
req
);
rest
=
Rest
.
fail
(
"绩效规则编码不能为空!"
);
}
if
(
YesNoEnum
.
YES
.
getValue
()
==
rest
.
getCode
())
{
effect
(
req
);
}
}
//if (ObjectUtils.isEmpty(req.getPhone())) throw new AppException("手机号码不能为空!");
//if (ObjectUtils.isEmpty(req.getPhone())) throw new AppException("手机号码不能为空!");
//if (ObjectUtils.isEmpty(req.getRuleCode())) throw new AppException("绩效规则编码不能为空!");
//if (ObjectUtils.isEmpty(req.getRuleCode())) throw new AppException("绩效规则编码不能为空!");
// boolean bool = effect(req);
// boolean bool = effect(req);
// if (bool) throw new AppException(busiDesc + "失败!");
// if (bool) throw new AppException(busiDesc + "失败!");
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
error
(
busiDesc
,
e
);
log
.
error
(
busiDesc
,
e
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/InspectApiController.java
View file @
663e32af
...
@@ -258,7 +258,6 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
...
@@ -258,7 +258,6 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
log
.
info
(
"【{}】【请求体】--> {}"
,
busiDesc
,
JSONObject
.
toJSONString
(
req
));
log
.
info
(
"【{}】【请求体】--> {}"
,
busiDesc
,
JSONObject
.
toJSONString
(
req
));
Rest
<
PerformAttendAppealEntity
>
rest
=
Rest
.
ok
(
busiDesc
+
" 【成功】"
);
Rest
<
PerformAttendAppealEntity
>
rest
=
Rest
.
ok
(
busiDesc
+
" 【成功】"
);
Context
context
=
this
.
getContext
();
Context
context
=
this
.
getContext
();
// req.setStaffId(context.getUser().getCustomerId());
try
{
try
{
//根据状态 查询 当前是否已经存在正在进行的申诉
//根据状态 查询 当前是否已经存在正在进行的申诉
if
(
ObjectUtils
.
isEmpty
(
context
)
||
ObjectUtils
.
isEmpty
(
context
.
getUser
()))
{
if
(
ObjectUtils
.
isEmpty
(
context
)
||
ObjectUtils
.
isEmpty
(
context
.
getUser
()))
{
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/ProcessInstanceEnum.java
0 → 100644
View file @
663e32af
package
com.mortals.xhx.common.code
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
* @author: finegirl
* @date: 2021/7/16 11:50
* @description: 组件枚举类
**/
public
enum
ProcessInstanceEnum
{
请假
(
"PROC-2E5C0DFF-3615-4409-A614-A2011FED5D38"
,
"请假"
),
外出
(
"PROC-56D3ADEE-45A4-47BC-931A-2A0DC067DE32"
,
"外出"
),
出差
(
"PROC-578CBDDF-B768-496D-9918-44A3F1D9CAE7"
,
"出差"
);
private
String
value
;
private
String
desc
;
ProcessInstanceEnum
(
String
value
,
String
desc
)
{
this
.
value
=
value
;
this
.
desc
=
desc
;
}
public
String
getValue
()
{
return
this
.
value
;
}
public
String
getDesc
()
{
return
this
.
desc
;
}
public
static
ProcessInstanceEnum
getByValue
(
String
value
)
{
for
(
ProcessInstanceEnum
componentEnum
:
ProcessInstanceEnum
.
values
())
{
if
(
componentEnum
.
getValue
()
==
value
)
{
return
componentEnum
;
}
}
return
null
;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public
static
Map
<
String
,
String
>
getEnumMap
(
String
...
eItem
)
{
Map
<
String
,
String
>
resultMap
=
new
LinkedHashMap
<>();
for
(
ProcessInstanceEnum
item
:
ProcessInstanceEnum
.
values
())
{
try
{
boolean
hasE
=
false
;
for
(
String
e
:
eItem
)
{
if
(
item
.
getValue
()
==
e
)
{
hasE
=
true
;
break
;
}
}
if
(!
hasE
)
{
resultMap
.
put
(
item
.
getValue
()
+
""
,
item
.
getDesc
());
}
}
catch
(
Exception
ex
)
{
}
}
return
resultMap
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/common/utils/AddAttendThread.java
View file @
663e32af
...
@@ -53,16 +53,16 @@ public class AddAttendThread implements Runnable {
...
@@ -53,16 +53,16 @@ public class AddAttendThread implements Runnable {
Long
compare
=
DateUtil
.
between
(
attendEnd
,
attendStart
,
DateUnit
.
DAY
);
Long
compare
=
DateUtil
.
between
(
attendEnd
,
attendStart
,
DateUnit
.
DAY
);
StopWatch
stopWatch
=
new
StopWatch
(
"stopwatch attend"
);
StopWatch
stopWatch
=
new
StopWatch
(
"stopwatch attend"
);
log
.
info
(
"考勤计算天数区间:{}"
,
compare
);
log
.
info
(
"考勤计算天数区间:{}"
,
compare
);
stopWatch
.
start
(
"执行本地方法"
);
for
(
int
i
=
0
;
i
<=
compare
.
intValue
();
i
++)
{
for
(
int
i
=
0
;
i
<=
compare
.
intValue
();
i
++)
{
DateTime
curDate
=
DateUtil
.
offsetDay
(
attendStart
,
i
);
DateTime
curDate
=
DateUtil
.
offsetDay
(
attendStart
,
i
);
log
.
info
(
"考勤计算日期:{}"
,
curDate
.
toDateStr
());
//log.info("考勤计算日期:{}", curDate.toDateStr());
stopWatch
.
start
(
"执行本地方法"
);
hikEntity
.
setAttendanceDateStart
(
curDate
.
toDateStr
());
hikEntity
.
setAttendanceDateStart
(
curDate
.
toDateStr
());
hikEntity
.
setAttendanceDateEnd
(
curDate
.
toDateStr
());
hikEntity
.
setAttendanceDateEnd
(
curDate
.
toDateStr
());
hikService
.
addAttendanceRecordByQuery
(
hikEntity
,
context
);
hikService
.
addAttendanceRecordByQuery
(
hikEntity
,
context
);
stopWatch
.
stop
();
log
.
info
(
"考勤计算日期:{} 完成,耗时:{}ms"
,
curDate
.
toDateStr
(),
stopWatch
.
getLastTaskTimeMillis
());
}
}
stopWatch
.
stop
();
log
.
info
(
"完成,耗时:{}ms"
,
stopWatch
.
getLastTaskTimeMillis
());
//生成汇总信息
//生成汇总信息
log
.
info
(
"生成考勤汇总消息开始。。。"
);
log
.
info
(
"生成考勤汇总消息开始。。。"
);
AttendanceSummaryQuery
query
=
new
AttendanceSummaryQuery
();
AttendanceSummaryQuery
query
=
new
AttendanceSummaryQuery
();
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
View file @
663e32af
...
@@ -73,15 +73,15 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -73,15 +73,15 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
UserEntity
userEntity
=
new
UserEntity
();
UserEntity
userEntity
=
new
UserEntity
();
userEntity
.
setId
(
item
.
getId
());
userEntity
.
setId
(
item
.
getId
());
String
mobile
=
item
.
getMobile
();
String
mobile
=
""
;
if
(
ObjectUtils
.
isEmpty
(
mobile
))
{
StaffEntity
staffCache
=
staffService
.
getCache
(
item
.
getCustomerId
().
toString
());
//根据customerId查询staff 看是否有
if
(!
ObjectUtils
.
isEmpty
(
staffCache
)
&&
!
ObjectUtils
.
isEmpty
(
staffCache
.
getPhoneNumber
()))
{
StaffEntity
staffCache
=
staffService
.
getCache
(
item
.
getCustomerId
().
toString
());
mobile
=
staffCache
.
getPhoneNumber
();
if
(!
ObjectUtils
.
isEmpty
(
staffCache
)
&&
!
ObjectUtils
.
isEmpty
(
staffCache
.
getPhoneNumber
()))
{
if
(
ObjectUtils
.
isEmpty
(
item
.
getMobile
())){
mobile
=
staffCache
.
getPhoneNumber
();
userEntity
.
setMobile
(
mobile
);
userEntity
.
setMobile
(
mobile
);
}
}
}
}
if
(!
ObjectUtils
.
isEmpty
(
mobile
))
{
if
(!
ObjectUtils
.
isEmpty
(
mobile
))
{
Rest
<
String
>
personByMobile
=
dingPersonService
.
getPersonByMobile
(
mobile
);
Rest
<
String
>
personByMobile
=
dingPersonService
.
getPersonByMobile
(
mobile
);
if
(!
ObjectUtils
.
isEmpty
(
personByMobile
)
&&
if
(!
ObjectUtils
.
isEmpty
(
personByMobile
)
&&
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceLeaveRecordVo.java
View file @
663e32af
...
@@ -33,4 +33,7 @@ public class AttendanceLeaveRecordVo extends BaseEntityLong {
...
@@ -33,4 +33,7 @@ public class AttendanceLeaveRecordVo extends BaseEntityLong {
/** 结束 创建时间 */
/** 结束 创建时间 */
private
String
createTimeEnd
;
private
String
createTimeEnd
;
private
Long
staffId
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceLeaveRecordService.java
View file @
663e32af
package
com.mortals.xhx.module.attendance.service
;
package
com.mortals.xhx.module.attendance.service
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
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
org.springframework.web.bind.annotation.RequestBody
;
/**
/**
* AttendanceLeaveRecordService
* AttendanceLeaveRecordService
...
@@ -15,4 +18,7 @@ public interface AttendanceLeaveRecordService extends ICRUDService<AttendanceLea
...
@@ -15,4 +18,7 @@ public interface AttendanceLeaveRecordService extends ICRUDService<AttendanceLea
//根据remark(钉钉返回的id)查询对象
//根据remark(钉钉返回的id)查询对象
AttendanceLeaveRecordEntity
doUpdateRecord
(
String
processInstanceId
,
AttendanceLeaveRecordEntity
leaveRecordEntity
)
throws
Exception
;
AttendanceLeaveRecordEntity
doUpdateRecord
(
String
processInstanceId
,
AttendanceLeaveRecordEntity
leaveRecordEntity
)
throws
Exception
;
Rest
<
String
>
syncLeaveRecord
(
AttendanceLeaveRecordQuery
query
,
Context
context
);
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
View file @
663e32af
package
com.mortals.xhx.module.attendance.service.impl
;
package
com.mortals.xhx.module.attendance.service.impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponseBody
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.util.DataUtil
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.ThreadPool
;
import
com.mortals.framework.util.ThreadPool
;
import
com.mortals.xhx.base.system.user.model.UserEntity
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.common.code.AppealResultEnum
;
import
com.mortals.xhx.common.code.AppealResultEnum
;
import
com.mortals.xhx.common.code.AuditStatusEnum
;
import
com.mortals.xhx.common.code.AuditStatusEnum
;
import
com.mortals.xhx.common.code.ProcessInstanceEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.utils.AddAttendThread
;
import
com.mortals.xhx.common.utils.AddAttendThread
;
import
com.mortals.xhx.common.utils.AttendSummaryThread
;
import
com.mortals.xhx.common.utils.AttendSummaryThread
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery
;
...
@@ -14,6 +23,8 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
...
@@ -14,6 +23,8 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordHikService
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordHikService
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.dingding.personal.service.IDingPersonService
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -24,7 +35,11 @@ import com.mortals.xhx.module.attendance.dao.AttendanceLeaveRecordDao;
...
@@ -24,7 +35,11 @@ import com.mortals.xhx.module.attendance.dao.AttendanceLeaveRecordDao;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
...
@@ -42,9 +57,14 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -42,9 +57,14 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
private
AttendanceStatService
attendanceStatService
;
private
AttendanceStatService
attendanceStatService
;
@Autowired
@Autowired
private
ICacheService
cacheService
;
private
ICacheService
cacheService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
UserService
userService
;
@Autowired
@Autowired
private
AttendanceRecordHikService
hikService
;
private
AttendanceRecordHikService
hikService
;
@Autowired
private
IDingPersonService
dingPersonService
;
@Override
@Override
protected
void
updateAfter
(
AttendanceLeaveRecordEntity
entity
,
Context
context
)
throws
AppException
{
protected
void
updateAfter
(
AttendanceLeaveRecordEntity
entity
,
Context
context
)
throws
AppException
{
...
@@ -91,6 +111,7 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -91,6 +111,7 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
/**
/**
* 更新汇总信息
* 更新汇总信息
*
* @param entity
* @param entity
* @param context
* @param context
*/
*/
...
@@ -102,16 +123,16 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -102,16 +123,16 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
return
;
return
;
}
}
//更新考勤记录与异常记录
//更新考勤记录与异常记录
if
(
AppealResultEnum
.
通过
.
getValue
()
==
entity
.
getAuditResult
()
||
AppealResultEnum
.
撤销审批通过
.
getValue
()
==
entity
.
getAuditResult
())
{
if
(
AppealResultEnum
.
通过
.
getValue
()
==
entity
.
getAuditResult
()
||
AppealResultEnum
.
撤销审批通过
.
getValue
()
==
entity
.
getAuditResult
())
{
AttendanceRecordHikQuery
attendanceRecordHikQuery
=
new
AttendanceRecordHikQuery
();
AttendanceRecordHikQuery
attendanceRecordHikQuery
=
new
AttendanceRecordHikQuery
();
attendanceRecordHikQuery
.
setStaffId
(
entity
.
getLeavePersonId
());
attendanceRecordHikQuery
.
setStaffId
(
entity
.
getLeavePersonId
());
//判断请假的开始日期与结束日期
//判断请假的开始日期与结束日期
boolean
in
=
DateUtil
.
isIn
(
new
Date
(),
entity
.
get
EndTime
(),
new
Dat
e
());
boolean
in
=
DateUtil
.
isIn
(
new
Date
(),
entity
.
get
StartTime
(),
entity
.
getEndTim
e
());
if
(
in
)
{
if
(
in
)
{
//当前日期在请假期间,计算考勤结束时间为当前时间;
//当前日期在请假期间,计算考勤结束时间为当前时间;
attendanceRecordHikQuery
.
setAttendanceDateStart
(
DateUtil
.
formatDate
(
entity
.
getStartTime
()));
attendanceRecordHikQuery
.
setAttendanceDateStart
(
DateUtil
.
formatDate
(
entity
.
getStartTime
()));
attendanceRecordHikQuery
.
setAttendanceDateEnd
(
DateUtil
.
today
());
attendanceRecordHikQuery
.
setAttendanceDateEnd
(
DateUtil
.
today
());
}
else
{
}
else
{
attendanceRecordHikQuery
.
setAttendanceDateStart
(
DateUtil
.
formatDate
(
entity
.
getStartTime
()));
attendanceRecordHikQuery
.
setAttendanceDateStart
(
DateUtil
.
formatDate
(
entity
.
getStartTime
()));
attendanceRecordHikQuery
.
setAttendanceDateEnd
(
DateUtil
.
formatDate
(
entity
.
getEndTime
()));
attendanceRecordHikQuery
.
setAttendanceDateEnd
(
DateUtil
.
formatDate
(
entity
.
getEndTime
()));
}
}
...
@@ -119,4 +140,68 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
...
@@ -119,4 +140,68 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
ThreadPool
.
getInstance
().
execute
(
addAttendThread
);
ThreadPool
.
getInstance
().
execute
(
addAttendThread
);
}
}
}
}
@Override
public
Rest
<
String
>
syncLeaveRecord
(
AttendanceLeaveRecordQuery
query
,
Context
context
)
{
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
=
new
ArrayList
<>();
Long
staffId
=
query
.
getStaffId
();
List
<
UserEntity
>
userCacheList
=
userService
.
getCacheList
();
if
(
ObjectUtils
.
isEmpty
(
staffId
))
{
//同步所有用户
List
<
UserEntity
>
userEntityList
=
userCacheList
.
stream
()
.
filter
(
f
->
!
ObjectUtils
.
isEmpty
(
f
.
getDingUserId
())).
collect
(
Collectors
.
toList
());
getLeaveRecordByUserList
(
query
,
userEntityList
,
waitSyncLeaveRecords
);
}
else
{
//同步指定用户
List
<
UserEntity
>
userEntityList
=
userCacheList
.
stream
()
.
filter
(
f
->
!
ObjectUtils
.
isEmpty
(
f
.
getDingUserId
()))
.
filter
(
f
->
staffId
==
f
.
getCustomerId
())
.
collect
(
Collectors
.
toList
());
getLeaveRecordByUserList
(
query
,
userEntityList
,
waitSyncLeaveRecords
);
}
if
(!
ObjectUtils
.
isEmpty
(
waitSyncLeaveRecords
))
{
for
(
AttendanceLeaveRecordEntity
waitSyncLeaveRecord
:
waitSyncLeaveRecords
)
{
dingPersonService
.
handleByProcessInstanceId
(
waitSyncLeaveRecord
.
getRemark
());
}
}
return
Rest
.
ok
();
}
private
void
getLeaveRecordByUserList
(
AttendanceLeaveRecordQuery
query
,
List
<
UserEntity
>
userEntityList
,
List
<
AttendanceLeaveRecordEntity
>
waitSyncLeaveRecords
)
{
for
(
UserEntity
item
:
userEntityList
)
{
String
dingUserId
=
item
.
getDingUserId
();
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
,
item
,
processInstanceEnum
,
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
);
}
catch
(
Exception
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
{
Rest
<
ListProcessInstanceIdsResponseBody
.
ListProcessInstanceIdsResponseBodyResult
>
rest
=
dingPersonService
.
getProcessInstanceIdByUserIds
(
processInstanceEnum
.
getValue
(),
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
);
if
(
YesNoEnum
.
YES
.
getValue
()
==
rest
.
getCode
())
{
if
(
ObjectUtils
.
isEmpty
(
rest
.
getData
().
getNextToken
()))
{
List
<
String
>
processInstanceList
=
rest
.
getData
().
getList
();
for
(
String
process
:
processInstanceList
)
{
AttendanceLeaveRecordEntity
leaveRecord
=
new
AttendanceLeaveRecordEntity
();
leaveRecord
.
setRemark
(
process
);
leaveRecord
.
setStaffId
(
item
.
getCustomerId
());
waitSyncLeaveRecords
.
add
(
leaveRecord
);
}
}
else
{
nextToken
=
DataUtil
.
converStr2Long
(
rest
.
getData
().
getNextToken
(),
0L
);
getRecords
(
waitSyncLeaveRecords
,
item
,
processInstanceEnum
,
startTime
,
endTime
,
nextToken
,
maxResults
,
dingUserId
);
}
}
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceLeaveRecordController.java
View file @
663e32af
package
com.mortals.xhx.module.attendance.web
;
package
com.mortals.xhx.module.attendance.web
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.io.unit.DataUnit
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.ThreadPool
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
...
@@ -9,12 +17,16 @@ import com.mortals.xhx.common.code.ProcessStatusEnum;
...
@@ -9,12 +17,16 @@ import com.mortals.xhx.common.code.ProcessStatusEnum;
import
com.mortals.xhx.common.pdu.user.UserPdu
;
import
com.mortals.xhx.common.pdu.user.UserPdu
;
import
com.mortals.xhx.feign.user.IUserFeign
;
import
com.mortals.xhx.feign.user.IUserFeign
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
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.dept.model.DeptQuery
;
import
com.mortals.xhx.module.dept.model.DeptQuery
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.workman.model.WorkmanQuery
;
import
com.mortals.xhx.module.workman.model.WorkmanQuery
;
import
com.mortals.xhx.module.workman.service.WorkmanService
;
import
com.mortals.xhx.module.workman.service.WorkmanService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
...
@@ -27,15 +39,14 @@ import java.util.stream.Collectors;
...
@@ -27,15 +39,14 @@ import java.util.stream.Collectors;
import
static
java
.
util
.
stream
.
Collectors
.
toMap
;
import
static
java
.
util
.
stream
.
Collectors
.
toMap
;
/**
/**
*
* 请假记录信息
* 请假记录信息
*
*
* @author zxfei
* @author zxfei
* @date 2023-04-07
* @date 2023-04-07
*/
*/
@RestController
@RestController
@RequestMapping
(
"attendance/leave/record"
)
@RequestMapping
(
"attendance/leave/record"
)
public
class
AttendanceLeaveRecordController
extends
BaseCRUDJsonBodyMappingController
<
AttendanceLeaveRecordService
,
AttendanceLeaveRecordEntity
,
Long
>
{
public
class
AttendanceLeaveRecordController
extends
BaseCRUDJsonBodyMappingController
<
AttendanceLeaveRecordService
,
AttendanceLeaveRecordEntity
,
Long
>
{
@Autowired
@Autowired
private
ParamService
paramService
;
private
ParamService
paramService
;
...
@@ -48,15 +59,15 @@ public class AttendanceLeaveRecordController extends BaseCRUDJsonBodyMappingCont
...
@@ -48,15 +59,15 @@ public class AttendanceLeaveRecordController extends BaseCRUDJsonBodyMappingCont
// @Autowired
// @Autowired
// private IUserFeign iUserFeign;
// private IUserFeign iUserFeign;
public
AttendanceLeaveRecordController
(){
public
AttendanceLeaveRecordController
()
{
super
.
setModuleDesc
(
"请假记录信息"
);
super
.
setModuleDesc
(
"请假记录信息"
);
}
}
@Override
@Override
protected
void
init
(
Map
<
String
,
Object
>
model
,
Context
context
)
{
protected
void
init
(
Map
<
String
,
Object
>
model
,
Context
context
)
{
this
.
addDict
(
model
,
"deptId"
,
deptService
.
find
(
new
DeptQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getDeptName
(),(
o
,
n
)->
n
)));
this
.
addDict
(
model
,
"deptId"
,
deptService
.
find
(
new
DeptQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getDeptName
(),
(
o
,
n
)
->
n
)));
this
.
addDict
(
model
,
"approverId"
,
workmanService
.
find
(
new
WorkmanQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getName
(),(
o
,
n
)->
n
)));
this
.
addDict
(
model
,
"approverId"
,
workmanService
.
find
(
new
WorkmanQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getName
(),
(
o
,
n
)
->
n
)));
this
.
addDict
(
model
,
"leaveType"
,
paramService
.
getParamBySecondOrganize
(
"AttendanceLeaveRecord"
,
"leaveType"
));
this
.
addDict
(
model
,
"leaveType"
,
paramService
.
getParamBySecondOrganize
(
"AttendanceLeaveRecord"
,
"leaveType"
));
this
.
addDict
(
model
,
"auditResult"
,
AppealResultEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"auditResult"
,
AppealResultEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"processStatus"
,
ProcessStatusEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"processStatus"
,
ProcessStatusEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"createUserId"
,
userService
.
find
(
new
UserQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getRealName
(),
(
o
,
n
)
->
n
)));
this
.
addDict
(
model
,
"createUserId"
,
userService
.
find
(
new
UserQuery
()).
stream
().
collect
(
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getRealName
(),
(
o
,
n
)
->
n
)));
...
@@ -79,4 +90,39 @@ public class AttendanceLeaveRecordController extends BaseCRUDJsonBodyMappingCont
...
@@ -79,4 +90,39 @@ public class AttendanceLeaveRecordController extends BaseCRUDJsonBodyMappingCont
}
}
/**
* 主动同步拉取请假考勤记录
*/
@PostMapping
(
value
=
"syncLeaveRecord"
)
public
String
syncLeaveRecord
(
@RequestBody
AttendanceLeaveRecordQuery
query
)
{
JSONObject
jsonObject
=
new
JSONObject
();
String
busiDesc
=
this
.
getModuleDesc
()
+
"主动同步拉取请假考勤记录"
;
try
{
if
(
ObjectUtils
.
isEmpty
(
query
.
getStartTimeStart
()))
throw
new
AppException
(
"开始时间不能为空"
);
if
(
ObjectUtils
.
isEmpty
(
query
.
getEndTimeEnd
()))
{
query
.
setEndTimeStart
(
DateUtil
.
today
());
}
long
between
=
DateUtil
.
between
(
DateUtil
.
parseDate
(
query
.
getStartTimeStart
()),
DateUtil
.
parseDate
(
query
.
getEndTimeEnd
()),
DateUnit
.
DAY
,
true
);
if
(
between
>
120
)
throw
new
AppException
(
"时间范围不能超过120天"
);
Context
context
=
this
.
getContext
();
Thread
thread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
service
.
syncLeaveRecord
(
query
,
context
);
}
});
ThreadPool
.
getInstance
().
execute
(
thread
);
recordSysLog
(
request
,
busiDesc
+
" 【成功】"
);
jsonObject
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_SUCCESS
);
jsonObject
.
put
(
KEY_RESULT_MSG
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"主动同步拉取请假考勤记录"
,
e
);
jsonObject
.
put
(
KEY_RESULT_CODE
,
VALUE_RESULT_FAILURE
);
jsonObject
.
put
(
KEY_RESULT_MSG
,
super
.
convertException
(
e
));
}
return
jsonObject
.
toJSONString
();
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/AbstractDingTalkService.java
View file @
663e32af
...
@@ -52,6 +52,13 @@ public abstract class AbstractDingTalkService implements IDingPersonService {
...
@@ -52,6 +52,13 @@ public abstract class AbstractDingTalkService implements IDingPersonService {
@Value
(
"${dingtalk.AppSecret:''}"
)
@Value
(
"${dingtalk.AppSecret:''}"
)
protected
String
appSecret
;
protected
String
appSecret
;
/**
* oaurl
*/
@Value
(
"${dingtalk.oaScheme:http}"
)
protected
String
oaScheme
;
/**
/**
* oaurl
* oaurl
*/
*/
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
View file @
663e32af
...
@@ -4,6 +4,7 @@ package com.mortals.xhx.module.dingding.personal.service;
...
@@ -4,6 +4,7 @@ package com.mortals.xhx.module.dingding.personal.service;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponseBody
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody
;
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.dingtalk.api.response.OapiAttendanceVacationQuotaListResponse
;
import
com.dingtalk.api.response.OapiAttendanceVacationQuotaListResponse
;
import
com.dingtalk.api.response.OapiV2UserGetResponse
;
import
com.dingtalk.api.response.OapiV2UserGetResponse
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.common.Rest
;
...
@@ -88,6 +89,8 @@ public interface IDingPersonService extends IDingTalkService {
...
@@ -88,6 +89,8 @@ public interface IDingPersonService extends IDingTalkService {
* @param maxResults 分页参数,每页大小,最多传20。
* @param maxResults 分页参数,每页大小,最多传20。
* @param userIds 发起人id列表 最大列表长度为10
* @param userIds 发起人id列表 最大列表长度为10
*/
*/
Rest
<
ListProcessInstanceIdsResponse
>
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
,
String
userIds
)
throws
Exception
;
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
View file @
663e32af
...
@@ -7,9 +7,7 @@ import com.aliyun.dingtalkattendance_1_0.Client;
...
@@ -7,9 +7,7 @@ import com.aliyun.dingtalkattendance_1_0.Client;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsHeaders
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsHeaders
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponse
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponse
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponseBody
;
import
com.aliyun.dingtalkattendance_1_0.models.GetLeaveRecordsResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponse
;
import
com.aliyun.dingtalkworkflow_1_0.models.*
;
import
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody
;
import
com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse
;
import
com.aliyun.tea.TeaException
;
import
com.aliyun.tea.TeaException
;
import
com.aliyun.teautil.models.RuntimeOptions
;
import
com.aliyun.teautil.models.RuntimeOptions
;
import
com.dingtalk.api.DefaultDingTalkClient
;
import
com.dingtalk.api.DefaultDingTalkClient
;
...
@@ -65,6 +63,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -65,6 +63,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 钉钉根据电话查询钉钉用户 id
* 钉钉根据电话查询钉钉用户 id
*
* @param mobile
* @param mobile
* @return
* @return
*/
*/
...
@@ -90,6 +89,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -90,6 +89,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 钉钉根据id查询员工信息
* 钉钉根据id查询员工信息
*
* @param id
* @param id
* @return
* @return
*/
*/
...
@@ -99,7 +99,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -99,7 +99,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
DingTalkClient
client
=
getDingTalkClient
(
"/topapi/v2/user/get"
);
DingTalkClient
client
=
getDingTalkClient
(
"/topapi/v2/user/get"
);
OapiV2UserGetRequest
req
=
new
OapiV2UserGetRequest
();
OapiV2UserGetRequest
req
=
new
OapiV2UserGetRequest
();
req
.
setUserid
(
id
);
//用户id
req
.
setUserid
(
id
);
//用户id
log
.
info
(
"getPersonByID:{}"
,
id
);
log
.
info
(
"getPersonByID:{}"
,
id
);
OapiV2UserGetResponse
rsp
=
client
.
execute
(
req
,
getToken
());
OapiV2UserGetResponse
rsp
=
client
.
execute
(
req
,
getToken
());
log
.
info
(
"钉钉返回用户信息:{}"
,
rsp
.
getBody
());
log
.
info
(
"钉钉返回用户信息:{}"
,
rsp
.
getBody
());
if
(
rsp
.
getErrcode
()
==
0
)
{
if
(
rsp
.
getErrcode
()
==
0
)
{
...
@@ -115,6 +115,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -115,6 +115,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 根据code查询用户id
* 根据code查询用户id
*
* @param code
* @param code
* @return
* @return
*/
*/
...
@@ -182,12 +183,14 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -182,12 +183,14 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 设置client的config参数
* 设置client的config参数
*
* @return Client
* @return Client
* @throws Exception
* @throws Exception
*/
*/
public
com
.
aliyun
.
teaopenapi
.
models
.
Config
setConfig
()
{
public
com
.
aliyun
.
teaopenapi
.
models
.
Config
setConfig
()
{
com
.
aliyun
.
teaopenapi
.
models
.
Config
config
=
new
com
.
aliyun
.
teaopenapi
.
models
.
Config
();
com
.
aliyun
.
teaopenapi
.
models
.
Config
config
=
new
com
.
aliyun
.
teaopenapi
.
models
.
Config
();
config
.
protocol
=
"http"
;
// config.protocol = "http";
config
.
protocol
=
oaScheme
;
config
.
regionId
=
"central"
;
config
.
regionId
=
"central"
;
config
.
endpoint
=
oaUrl
;
config
.
endpoint
=
oaUrl
;
return
config
;
return
config
;
...
@@ -195,61 +198,73 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -195,61 +198,73 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 根据系统电话查询指定时间的审批表单
* 根据系统电话查询指定时间的审批表单
*
* @param processCode 审批流的唯一码(详见doc下 审批表单列表.txt)。
* @param processCode 审批流的唯一码(详见doc下 审批表单列表.txt)。
* 请假:PROC-2E5C0DFF-3615-4409-A614-A2011FED5D38
* 请假:PROC-2E5C0DFF-3615-4409-A614-A2011FED5D38
* 外出:PROC-56D3ADEE-45A4-47BC-931A-2A0DC067DE32
* 外出:PROC-56D3ADEE-45A4-47BC-931A-2A0DC067DE32
* 出差:PROC-578CBDDF-B768-496D-9918-44A3F1D9CAE7
* 出差:PROC-578CBDDF-B768-496D-9918-44A3F1D9CAE7
* @param startTime 审批实例开始时间,Unix时间戳,单位毫秒
* @param startTime 审批实例开始时间,Unix时间戳,单位毫秒
* @param endTime 审批实例结束时间,Unix时间戳,单位毫秒。 查询时间范围不能超过120天
* @param endTime 审批实例结束时间,Unix时间戳,单位毫秒。 查询时间范围不能超过120天
* @param nextToken 分页游标。如果是非首次调用,该参数传上次调用时返回的nextToken。
* @param nextToken 分页游标。如果是非首次调用,该参数传上次调用时返回的nextToken。
* @param maxResults 分页参数,每页大小,最多传20。
* @param maxResults 分页参数,每页大小,最多传20。
* @param userIds 发起人id列表 最大列表长度为10
* @param userIds 发起人id列表 最大列表长度为10
*
* @return 返回示例 {
* @return 返回示例 {
*
"result" : {
* "result" : {
*
"list" : [ "123" ],
* "list" : [ "123" ],
*
"nextToken" : "10"
* "nextToken" : "10"
*
},
* },
*
"success" : true
* "success" : true
* }
* }
*/
*/
public
Rest
<
ListProcessInstanceIdsResponse
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
long
nextToken
,
long
maxResults
,
String
userIds
)
throws
Exception
{
public
Rest
<
ListProcessInstanceIdsResponse
Body
.
ListProcessInstanceIdsResponseBodyResult
>
getProcessInstanceIdByUserIds
(
String
processCode
,
long
startTime
,
long
endTime
,
Long
nextToken
,
long
maxResults
,
String
userIds
)
throws
Exception
{
if
(!
userIds
.
equals
(
""
))
{
if
(!
userIds
.
equals
(
""
))
{
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
);
listProcessInstanceIdsHeaders
.
getCommonHeaders
().
put
(
"host"
,
"172.15.28.113:8919"
);
if
(!
ObjectUtils
.
isEmpty
(
oaUrl
)){
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsRequest
listProcessInstanceIdsRequest
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
ListProcessInstanceIdsRequest
()
listProcessInstanceIdsHeaders
.
getCommonHeaders
().
put
(
"host"
,
oaUrl
);
}
// listProcessInstanceIdsHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
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
)
.
setMaxResults
(
maxResults
)
.
setMaxResults
(
maxResults
)
.
setStatuses
(
Arrays
.
asList
(
"COMPLETED"
))
.
setUserIds
(
java
.
util
.
Arrays
.
asList
(
userIds
));
.
setUserIds
(
java
.
util
.
Arrays
.
asList
(
userIds
));
try
{
try
{
ListProcessInstanceIdsResponse
rsp
=
client
.
listProcessInstanceIdsWithOptions
(
listProcessInstanceIdsRequest
,
listProcessInstanceIdsHeaders
,
new
RuntimeOptions
());
ListProcessInstanceIdsResponse
rsp
=
client
.
listProcessInstanceIdsWithOptions
(
listProcessInstanceIdsRequest
,
listProcessInstanceIdsHeaders
,
new
RuntimeOptions
());
return
Rest
.
ok
(
"成功"
,
rsp
);
if
(
rsp
.
getBody
().
getSuccess
())
{
return
Rest
.
ok
(
rsp
.
getBody
().
getResult
());
}
else
{
log
.
info
(
"获取审批实例列表失败->"
+
JSONObject
.
toJSONString
(
rsp
));
return
Rest
.
fail
(
"查询失败:"
+
rsp
.
getBody
().
getSuccess
());
}
}
catch
(
Exception
_err
)
{
}
catch
(
Exception
_err
)
{
TeaException
err
=
new
TeaException
(
_err
.
getMessage
(),
_err
);
TeaException
err
=
new
TeaException
(
_err
.
getMessage
(),
_err
);
log
.
error
(
"获取审批实例列表失败->"
);
log
.
error
(
"获取审批实例列表失败->"
,
_err
);
if
(!
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
code
)
&&
!
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
))
{
if
(!
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
code
)
&&
!
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
))
{
// err 中含有 code 和 message 属性,可帮助开发定位问题
// err 中含有 code 和 message 属性,可帮助开发定位问题
log
.
error
(
"code = "
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
code
)+
" message = "
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
));
log
.
error
(
"code = "
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
code
)
+
" message = "
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
));
}
}
return
Rest
.
fail
(
"获取审批实例列表失败:"
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
));
return
Rest
.
fail
(
"获取审批实例列表失败:"
+
com
.
aliyun
.
teautil
.
Common
.
empty
(
err
.
message
));
}
}
}
else
{
}
else
{
return
Rest
.
fail
(
"userid为空"
);
return
Rest
.
fail
(
"userid为空"
);
}
}
}
}
/**
/**
* 根据审批实例id查询审批详情
* 根据审批实例id查询审批详情
*
* @param processInstanceId 审批实例ID。
* @param processInstanceId 审批实例ID。
* @return
* @return
*/
*/
...
@@ -261,7 +276,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -261,7 +276,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
getProcessInstanceHeaders
.
xAcsDingtalkAccessToken
=
getToken
();
getProcessInstanceHeaders
.
xAcsDingtalkAccessToken
=
getToken
();
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
HashMap
<
String
,
String
>
map
=
new
HashMap
<>();
getProcessInstanceHeaders
.
setCommonHeaders
(
map
);
getProcessInstanceHeaders
.
setCommonHeaders
(
map
);
getProcessInstanceHeaders
.
getCommonHeaders
().
put
(
"host"
,
"172.15.28.113:8919"
);
if
(!
ObjectUtils
.
isEmpty
(
oaUrl
)){
getProcessInstanceHeaders
.
getCommonHeaders
().
put
(
"host"
,
oaUrl
);
}
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
GetProcessInstanceRequest
getProcessInstanceRequest
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
GetProcessInstanceRequest
()
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
GetProcessInstanceRequest
getProcessInstanceRequest
=
new
com
.
aliyun
.
dingtalkworkflow_1_0
.
models
.
GetProcessInstanceRequest
()
.
setProcessInstanceId
(
processInstanceId
);
.
setProcessInstanceId
(
processInstanceId
);
...
@@ -278,7 +295,8 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -278,7 +295,8 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 查询假期余额
* 查询假期余额
* @param user_id 被查询员工的id集合 多个用,分隔
*
* @param user_id 被查询员工的id集合 多个用,分隔
* @param leave_code 假期类型编码
* @param leave_code 假期类型编码
* @return
* @return
*/
*/
...
@@ -309,9 +327,10 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -309,9 +327,10 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
/**
/**
* 根据审批详情处理审批(插入请假数据)
* 根据审批详情处理审批(插入请假数据)
*
* @param processInstanceId 实例id
* @param processInstanceId 实例id
*/
*/
public
void
handleByProcessInstanceId
(
String
processInstanceId
){
public
void
handleByProcessInstanceId
(
String
processInstanceId
)
{
try
{
try
{
if
(
processInstanceId
!=
null
)
{
if
(
processInstanceId
!=
null
)
{
Rest
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResult
>
rest
=
getOaRecordsById
(
processInstanceId
);
Rest
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResult
>
rest
=
getOaRecordsById
(
processInstanceId
);
...
@@ -341,7 +360,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -341,7 +360,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
String
leave_code
=
LeaveRulesEnum
.
事假
.
getLeave_code
();
String
leave_code
=
LeaveRulesEnum
.
事假
.
getLeave_code
();
String
leave_name
=
"事假"
;
String
leave_name
=
"事假"
;
if
(
result
.
getTitle
().
contains
(
"请假"
))
{
if
(
result
.
getTitle
().
contains
(
"请假"
))
{
leave_name
=
"事假"
;
leave_name
=
"事假"
;
if
(
result
.
getFormComponentValues
().
size
()
>
0
)
{
if
(
result
.
getFormComponentValues
().
size
()
>
0
)
{
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
result
.
getFormComponentValues
().
get
(
0
).
getValue
());
JSONArray
jsonArray
=
JSONArray
.
parseArray
(
result
.
getFormComponentValues
().
get
(
0
).
getValue
());
...
@@ -466,13 +485,13 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -466,13 +485,13 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
leaveRecordEntity
.
setAttachmentPath
(
picEntity
.
getValue
());
leaveRecordEntity
.
setAttachmentPath
(
picEntity
.
getValue
());
}
}
}
}
}
else
if
(
result
.
getTitle
().
contains
(
"外出"
))
{
}
else
if
(
result
.
getTitle
().
contains
(
"外出"
))
{
leave_name
=
"因公外出"
;
leave_name
=
"因公外出"
;
leaveRecordEntity
.
setLeaveType
(
17
);
leaveRecordEntity
.
setLeaveType
(
17
);
List
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
>
comList
=
result
.
getFormComponentValues
();
List
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
>
comList
=
result
.
getFormComponentValues
();
if
(!
comList
.
isEmpty
())
{
if
(!
comList
.
isEmpty
())
{
for
(
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
componentValues
:
comList
){
for
(
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
componentValues
:
comList
)
{
switch
(
componentValues
.
name
){
switch
(
componentValues
.
name
)
{
case
"开始时间"
:
case
"开始时间"
:
Date
startTime1
=
dateFormat
(
componentValues
.
getValue
(),
"yyyy-MM-dd HH:mm"
,
true
);
Date
startTime1
=
dateFormat
(
componentValues
.
getValue
(),
"yyyy-MM-dd HH:mm"
,
true
);
leaveRecordEntity
.
setStartTime
(
startTime1
);
leaveRecordEntity
.
setStartTime
(
startTime1
);
...
@@ -494,13 +513,13 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -494,13 +513,13 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
}
}
}
}
}
else
if
(
result
.
getTitle
().
contains
(
"出差"
))
{
}
else
if
(
result
.
getTitle
().
contains
(
"出差"
))
{
leave_name
=
"因公外出"
;
leave_name
=
"因公外出"
;
leaveRecordEntity
.
setLeaveType
(
17
);
leaveRecordEntity
.
setLeaveType
(
17
);
List
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
>
comList
=
result
.
getFormComponentValues
();
List
<
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
>
comList
=
result
.
getFormComponentValues
();
if
(!
comList
.
isEmpty
())
{
if
(!
comList
.
isEmpty
())
{
for
(
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
componentValues
:
comList
){
for
(
GetProcessInstanceResponseBody
.
GetProcessInstanceResponseBodyResultFormComponentValues
componentValues
:
comList
)
{
switch
(
componentValues
.
name
){
switch
(
componentValues
.
name
)
{
case
"行程"
:
case
"行程"
:
Gson
gson
=
new
Gson
();
Gson
gson
=
new
Gson
();
JsonArray
jsonArray
=
gson
.
fromJson
(
componentValues
.
getValue
(),
JsonArray
.
class
);
JsonArray
jsonArray
=
gson
.
fromJson
(
componentValues
.
getValue
(),
JsonArray
.
class
);
...
@@ -511,11 +530,11 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -511,11 +530,11 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
JsonObject
jsonObject1
=
element
.
getAsJsonObject
();
// 获取每个元素作为对象
JsonObject
jsonObject1
=
element
.
getAsJsonObject
();
// 获取每个元素作为对象
String
label
=
jsonObject1
.
get
(
"label"
).
getAsString
();
// 获取label字段的值
String
label
=
jsonObject1
.
get
(
"label"
).
getAsString
();
// 获取label字段的值
String
value
=
jsonObject1
.
get
(
"value"
).
getAsString
();
String
value
=
jsonObject1
.
get
(
"value"
).
getAsString
();
if
(
label
.
contains
(
"开始时间"
))
{
if
(
label
.
contains
(
"开始时间"
))
{
Date
startTime1
=
dateFormat
(
value
,
"yyyy-MM-dd HH:mm"
,
true
);
Date
startTime1
=
dateFormat
(
value
,
"yyyy-MM-dd HH:mm"
,
true
);
leaveRecordEntity
.
setStartTime
(
startTime1
);
leaveRecordEntity
.
setStartTime
(
startTime1
);
}
}
if
(
label
.
contains
(
"结束时间"
))
{
if
(
label
.
contains
(
"结束时间"
))
{
Date
endTime1
=
dateFormat
(
value
,
"yyyy-MM-dd HH:mm"
,
false
);
Date
endTime1
=
dateFormat
(
value
,
"yyyy-MM-dd HH:mm"
,
false
);
leaveRecordEntity
.
setEndTime
(
endTime1
);
leaveRecordEntity
.
setEndTime
(
endTime1
);
}
}
...
@@ -886,7 +905,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -886,7 +905,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
}
}
}
catch
(
DingCallbackCrypto
.
DingTalkEncryptException
e
)
{
}
catch
(
DingCallbackCrypto
.
DingTalkEncryptException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
info
(
"请假记录表操作异常->"
+
e
.
toString
());
log
.
info
(
"请假记录表操作异常->"
+
e
.
toString
());
...
@@ -894,7 +913,6 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -894,7 +913,6 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
}
}
/**
/**
...
@@ -934,9 +952,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
...
@@ -934,9 +952,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
try
{
try
{
sdf
.
parse
(
dateString
);
sdf
.
parse
(
dateString
);
if
(
tag
)
{
if
(
tag
)
{
dateString
+=
" 09:00"
;
dateString
+=
" 09:00"
;
}
else
{
}
else
{
dateString
+=
" 18:00"
;
dateString
+=
" 18:00"
;
}
}
...
...
attendance-performance-manager/src/main/resources/bootstrap.yml
View file @
663e32af
...
@@ -74,6 +74,7 @@ dingtalk:
...
@@ -74,6 +74,7 @@ dingtalk:
AppSecret
:
@
profiles.dingtalk.appSecret@
AppSecret
:
@
profiles.dingtalk.appSecret@
AesKey
:
@
profiles.dingtalk.aesKey@
AesKey
:
@
profiles.dingtalk.aesKey@
token
:
@
profiles.dingtalk.token@
token
:
@
profiles.dingtalk.token@
oaScheme
:
@
profiles.dingtalk.oaScheme@
oaUrl
:
@
profiles.dingtalk.oaUrl@
oaUrl
:
@
profiles.dingtalk.oaUrl@
opUserId
:
@
profiles.dingtalk.opUserId@
opUserId
:
@
profiles.dingtalk.opUserId@
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
View file @
663e32af
...
@@ -82,7 +82,7 @@ POST {{baseUrl}}//attendance/stat/summary
...
@@ -82,7 +82,7 @@ POST {{baseUrl}}//attendance/stat/summary
Authorization: {{authToken}}
Authorization: {{authToken}}
Content-Type: application/json
Content-Type: application/json
{"summaryTimeStart":"202
3-12-01","summaryTimeEnd":"2023-12-31
"}
{"summaryTimeStart":"202
4-01-01","summaryTimeEnd":"2024-12-30
"}
###短信设置编辑
###短信设置编辑
...
@@ -101,10 +101,17 @@ GET {{baseUrl}}/test/double?processInstanceId=test1
...
@@ -101,10 +101,17 @@ GET {{baseUrl}}/test/double?processInstanceId=test1
Accept: application/json
Accept: application/json
###短信设置删除
GET {{baseUrl}}/att/set/delete?id={{SmsSet_id}}
Accept: application/json
###钉钉请假
POST {{baseUrl}}/attendance/leave/record/syncLeaveRecord
Authorization: {{authToken}}
Content-Type: application/json
{
"startTimeStart":"2023-10-01",
"endTimeEnd":"2023-10-10"
}
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