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
b7455b29
Commit
b7455b29
authored
Apr 19, 2023
by
dll
Browse files
Options
Browse Files
Download
Plain Diff
更新考勤汇总
parents
bab6820f
2afbf419
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
1411 additions
and
462 deletions
+1411
-462
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
...nce-performance-manager-ui/admin/src/assets/utils/ajax.js
+5
-4
attendance-performance-manager/pom.xml
attendance-performance-manager/pom.xml
+2
-3
attendance-performance-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
...a/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
+1
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
...a/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
+154
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
...in/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
+17
-12
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceRecordErrorEntity.java
.../module/attendance/model/AttendanceRecordErrorEntity.java
+5
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordErrorVo.java
...x/module/attendance/model/vo/AttendanceRecordErrorVo.java
+9
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceStatVo.java
...tals/xhx/module/attendance/model/vo/AttendanceStatVo.java
+10
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
...module/attendance/service/AttendanceRecordHikService.java
+9
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+467
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordServiceImpl.java
.../attendance/service/impl/AttendanceRecordServiceImpl.java
+6
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
...le/attendance/service/impl/AttendanceStatServiceImpl.java
+113
-7
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java
...odule/attendance/web/AttendanceRecordErrorController.java
+44
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
.../module/attendance/web/AttendanceRecordHikController.java
+27
-410
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
...s/xhx/module/attendance/web/AttendanceStatController.java
+19
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/AbstractHikService.java
...n/java/com/mortals/xhx/module/hik/AbstractHikService.java
+36
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/BaseReq.java
...ger/src/main/java/com/mortals/xhx/module/hik/BaseReq.java
+13
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/HikApiRest.java
.../src/main/java/com/mortals/xhx/module/hik/HikApiRest.java
+38
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/req/door/DoorEventReq.java
...tals/xhx/module/hik/door/model/req/door/DoorEventReq.java
+48
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/rsp/door/DoorEventDataInfo.java
...xhx/module/hik/door/model/rsp/door/DoorEventDataInfo.java
+13
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/rsp/door/DoorEventInfo.java
...als/xhx/module/hik/door/model/rsp/door/DoorEventInfo.java
+36
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/service/IHikDoorService.java
.../mortals/xhx/module/hik/door/service/IHikDoorService.java
+23
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/service/impl/HikDoorServiceImpl.java
.../xhx/module/hik/door/service/impl/HikDoorServiceImpl.java
+53
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/req/org/OrgListReq.java
...rtals/xhx/module/hik/person/model/req/org/OrgListReq.java
+11
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/req/person/PersonReq.java
...als/xhx/module/hik/person/model/req/person/PersonReq.java
+22
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/org/OrgDataInfo.java
...tals/xhx/module/hik/person/model/rsp/org/OrgDataInfo.java
+13
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/org/OrgInfo.java
.../mortals/xhx/module/hik/person/model/rsp/org/OrgInfo.java
+14
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonDataInfo.java
...hx/module/hik/person/model/rsp/person/PersonDataInfo.java
+13
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonInfo.java
...ls/xhx/module/hik/person/model/rsp/person/PersonInfo.java
+25
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonPhoto.java
...s/xhx/module/hik/person/model/rsp/person/PersonPhoto.java
+11
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/service/IHikPersonService.java
...tals/xhx/module/hik/person/service/IHikPersonService.java
+52
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/service/impl/HikPersonServiceImpl.java
.../module/hik/person/service/impl/HikPersonServiceImpl.java
+102
-0
attendance-performance-manager/src/main/resources/bootstrap.yml
...ance-performance-manager/src/main/resources/bootstrap.yml
+0
-1
No files found.
attendance-performance-manager-ui/admin/src/assets/utils/ajax.js
View file @
b7455b29
...
@@ -26,9 +26,10 @@ const instance = axios.create({
...
@@ -26,9 +26,10 @@ const instance = axios.create({
instance
.
interceptors
.
request
.
use
(
config
=>
{
instance
.
interceptors
.
request
.
use
(
config
=>
{
// 获取当前页面的主机名和端口号
// 获取当前页面的主机名和端口号
// const hostname = location.hostname;
// const hostname = location.hostname;
const
hostname
=
location
.
hostname
;
const
baseURL
=
config
.
baseURL
;
const
baseURL
=
config
.
baseURL
;
//const port = location.port;
//
const port = location.port;
//
const port =process.env.VUE_APP_PORTAL_PORT=='undefined'?'11078':process.env.VUE_APP_PORTAL_PORT;
const
port
=
process
.
env
.
VUE_APP_PORTAL_PORT
==
'
undefined
'
?
'
11078
'
:
process
.
env
.
VUE_APP_PORTAL_PORT
;
// 测试用
// 测试用
//http://192.168.0.98:11039
//http://192.168.0.98:11039
...
@@ -41,8 +42,8 @@ instance.interceptors.request.use(config => {
...
@@ -41,8 +42,8 @@ instance.interceptors.request.use(config => {
//const hostname = '192.168.0.116'
//const hostname = '192.168.0.116'
//const port = '17500'
//const port = '17500'
const
hostname
=
'
192.168.0.116
'
//
const hostname = '192.168.0.116'
const
port
=
'
17500
'
//
const port = '17500'
// const hostname = '192.168.0.98'
// const hostname = '192.168.0.98'
// const port = '11039'
// const port = '11039'
...
...
attendance-performance-manager/pom.xml
View file @
b7455b29
...
@@ -28,6 +28,8 @@
...
@@ -28,6 +28,8 @@
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<profiles.log.path>
/mortals/app/logs
</profiles.log.path>
<profiles.log.level>
info
</profiles.log.level>
<profiles.log.level>
info
</profiles.log.level>
<profiles.publish.path>
/home/publish
</profiles.publish.path>
<profiles.publish.path>
/home/publish
</profiles.publish.path>
<profiles.sms.smsSendUrl>
http://127.0.0.1:8089/api/index/index
</profiles.sms.smsSendUrl>
<profiles.sms.apiId>
k6BVS1PEbyzcJAE4
</profiles.sms.apiId>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<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>
...
@@ -52,7 +54,6 @@
...
@@ -52,7 +54,6 @@
<profiles.log.level>
INFO
</profiles.log.level>
<profiles.log.level>
INFO
</profiles.log.level>
<profiles.sms.smsSendUrl>
http://127.0.0.1:8089/api/index/index
</profiles.sms.smsSendUrl>
<profiles.sms.smsSendUrl>
http://127.0.0.1:8089/api/index/index
</profiles.sms.smsSendUrl>
<profiles.sms.apiId>
k6BVS1PEbyzcJAE4
</profiles.sms.apiId>
<profiles.sms.apiId>
k6BVS1PEbyzcJAE4
</profiles.sms.apiId>
<profiles.sms.type>
3
</profiles.sms.type>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<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>
...
@@ -74,8 +75,6 @@
...
@@ -74,8 +75,6 @@
<profiles.log.level>
INFO
</profiles.log.level>
<profiles.log.level>
INFO
</profiles.log.level>
<profiles.sms.smsSendUrl>
http://127.0.0.1:8089/api/index/index
</profiles.sms.smsSendUrl>
<profiles.sms.smsSendUrl>
http://127.0.0.1:8089/api/index/index
</profiles.sms.smsSendUrl>
<profiles.sms.apiId>
k6BVS1PEbyzcJAE4
</profiles.sms.apiId>
<profiles.sms.apiId>
k6BVS1PEbyzcJAE4
</profiles.sms.apiId>
<profiles.sms.type>
3
</profiles.sms.type>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<profiles.hik.host>
8.136.255.30:8001
</profiles.hik.host>
<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>
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/base/framework/aspect/WebLogAspect.java
View file @
b7455b29
...
@@ -34,7 +34,7 @@ import java.util.Map;
...
@@ -34,7 +34,7 @@ import java.util.Map;
@Component
@Component
@Slf4j
@Slf4j
@Order
(
1
)
@Order
(
1
)
@Profile
({
"default"
,
"develop"
,
"test"
})
@Profile
({
"default"
,
"develop"
,
"test
1
"
})
public
class
WebLogAspect
{
public
class
WebLogAspect
{
@Pointcut
(
"execution(public * com.mortals..*Controller.*(..))"
)
@Pointcut
(
"execution(public * com.mortals..*Controller.*(..))"
)
public
void
webLog
()
{
public
void
webLog
()
{
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.daemon.task
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.PageUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.service.ITask
;
import
com.mortals.framework.service.ITaskExcuteService
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordHikService
;
import
com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq
;
import
com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo
;
import
com.mortals.xhx.module.hik.door.service.IHikDoorService
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.checkerframework.checker.units.qual.A
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
java.time.Year
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
* 同步获取当天海康门禁事件
*/
@Slf4j
@Service
(
"SyncDoorsEventTask"
)
public
class
SyncDoorsEventTaskImpl
implements
ITaskExcuteService
{
@Autowired
private
AttendanceRecordHikService
recordHikService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
IHikDoorService
hikDoorService
;
@Override
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
DoorEventReq
doorEventReq
=
new
DoorEventReq
();
List
<
Integer
>
eventTypes
=
new
ArrayList
<>();
eventTypes
.
add
(
196885
);
eventTypes
.
add
(
196887
);
eventTypes
.
add
(
196893
);
eventTypes
.
add
(
196888
);
eventTypes
.
add
(
196889
);
eventTypes
.
add
(
196890
);
eventTypes
.
add
(
196891
);
doorEventReq
.
setEventTypes
(
eventTypes
);
// 获取当天的开始时间
Date
todayStart
=
DateUtil
.
beginOfDay
(
new
Date
());
// 获取当天的结束时间
Date
todayEnd
=
DateUtil
.
endOfDay
(
new
Date
());
doorEventReq
.
setStartTime
(
todayStart
);
doorEventReq
.
setEndTime
(
todayEnd
);
doorEventReq
.
setPageNo
(
1
);
doorEventReq
.
setPageSize
(
1
);
Rest
<
DoorEventDataInfo
>
doorEventsRest
=
hikDoorService
.
getDoorEvents
(
doorEventReq
);
log
.
info
(
"doorEventsRest:{} msg:{}"
,
doorEventsRest
.
getCode
(),
doorEventsRest
.
getMsg
());
if
(
doorEventsRest
.
getCode
()
==
YesNoEnum
.
YES
.
getValue
())
{
//分页获取考勤数据
Integer
total
=
doorEventsRest
.
getData
().
getTotal
();
int
pageCount
=
PageUtil
.
totalPage
(
total
,
1000
);
for
(
int
i
=
1
;
i
<=
pageCount
;
i
++)
{
doorEventReq
.
setPageNo
(
i
);
doorEventReq
.
setPageSize
(
1000
);
doorEventsRest
=
hikDoorService
.
getDoorEvents
(
doorEventReq
);
log
.
info
(
"doorEventsRest:{} msg:{},page:{}"
,
doorEventsRest
.
getCode
(),
doorEventsRest
.
getMsg
(),
doorEventReq
.
getPageNo
());
getDoorEvents
(
doorEventsRest
);
}
}
}
private
void
getDoorEvents
(
Rest
<
DoorEventDataInfo
>
doorEventsRest
)
{
//同步当前考勤数据
List
<
AttendanceRecordHikEntity
>
attRecords
=
doorEventsRest
.
getData
().
getList
().
stream
().
map
(
item
->
{
AttendanceRecordHikEntity
recordHikEntity
=
new
AttendanceRecordHikEntity
();
recordHikEntity
.
initAttrValue
();
StaffEntity
staffCache
=
staffService
.
getExtCache
(
item
.
getJobNo
());
if
(
ObjectUtils
.
isEmpty
(
staffCache
))
return
null
;
recordHikEntity
.
setStaffId
(
staffCache
.
getId
());
recordHikEntity
.
setStaffName
(
staffCache
.
getName
());
recordHikEntity
.
setWorkNum
(
staffCache
.
getWorkNum
());
recordHikEntity
.
setDeptId
(
staffCache
.
getDeptId
());
recordHikEntity
.
setDeptName
(
staffCache
.
getDeptName
());
recordHikEntity
.
setPositionId
(
staffCache
.
getPositionId
());
recordHikEntity
.
setPositionName
(
staffCache
.
getPositionName
());
recordHikEntity
.
setAttendanceDate
(
item
.
getEventTime
());
recordHikEntity
.
setAttendanceAddress
(
item
.
getDoorName
());
recordHikEntity
.
setEventSource
(
"门禁点"
);
recordHikEntity
.
setRemark
(
item
.
getEventId
());
recordHikEntity
.
setCreateTime
(
new
Date
());
recordHikEntity
.
setCreateUserName
(
"system"
);
recordHikEntity
.
setCreateUserId
(
1L
);
return
recordHikEntity
;
}).
collect
(
Collectors
.
toList
());
log
.
info
(
"attRecords size:{}"
,
attRecords
.
size
());
List
<
String
>
eventIds
=
attRecords
.
parallelStream
().
map
(
i
->
i
.
getRemark
()).
collect
(
Collectors
.
toList
());
//查询当天考勤记录是否有重复的 有的 则不添加
AttendanceRecordHikQuery
recordHikQuery
=
new
AttendanceRecordHikQuery
();
recordHikQuery
.
setAttendanceDateStart
(
DateUtil
.
format
(
DateUtil
.
beginOfDay
(
new
Date
()),
"yyyy-MM-dd"
));
recordHikQuery
.
setAttendanceDateEnd
(
DateUtil
.
format
(
DateUtil
.
beginOfDay
(
new
Date
()),
"yyyy-MM-dd"
));
recordHikQuery
.
setRemarkList
(
eventIds
);
Set
<
String
>
eventIdSet
=
recordHikService
.
find
(
recordHikQuery
).
parallelStream
().
map
(
i
->
i
.
getRemark
()).
collect
(
Collectors
.
toSet
());
List
<
AttendanceRecordHikEntity
>
saveRecordList
=
attRecords
.
stream
().
filter
(
f
->
!
eventIdSet
.
contains
(
f
.
getRemark
())).
collect
(
Collectors
.
toList
());
if
(!
ObjectUtils
.
isEmpty
(
saveRecordList
))
{
recordHikService
.
save
(
saveRecordList
);
}
log
.
info
(
"saveRecordList size:{}"
,
saveRecordList
.
size
());
}
@Override
public
void
stopTask
(
ITask
task
)
throws
AppException
{
}
public
static
void
main
(
String
[]
args
)
{
// 获取当前时间的小时数
int
hour
=
DateUtil
.
hour
(
new
Date
(),
true
);
// 获取当前时间所在小时的开始时间和结束时间
Date
startTime
=
DateUtil
.
beginOfHour
(
new
Date
());
Date
endTime
=
DateUtil
.
endOfHour
(
new
Date
());
// 格式化时间为指定格式
String
startTimeStr
=
DateUtil
.
format
(
startTime
,
"yyyy-MM-dd HH:00:00"
);
String
endTimeStr
=
DateUtil
.
format
(
endTime
,
"yyyy-MM-dd HH:59:59"
);
// 输出结果
System
.
out
.
println
(
"当前时间所在小时的开始时间:"
+
startTimeStr
);
System
.
out
.
println
(
"当前时间所在小时的结束时间:"
+
endTimeStr
);
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncUserTaskImpl.java
View file @
b7455b29
...
@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
...
@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.service.ITask
;
import
com.mortals.framework.service.ITask
;
import
com.mortals.framework.service.ITaskExcuteService
;
import
com.mortals.framework.service.ITaskExcuteService
;
import
com.mortals.xhx.busiz.hik.ArtemisPostTest
;
import
com.mortals.xhx.busiz.rsp.DeptHikData
;
import
com.mortals.xhx.busiz.rsp.DeptHikData
;
import
com.mortals.xhx.busiz.rsp.ListDept
;
import
com.mortals.xhx.busiz.rsp.ListDept
;
import
com.mortals.xhx.busiz.rsp.ListItem
;
import
com.mortals.xhx.busiz.rsp.ListItem
;
...
@@ -16,6 +15,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
...
@@ -16,6 +15,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
import
com.mortals.xhx.module.dept.dao.ibatis.DeptDaoImpl
;
import
com.mortals.xhx.module.dept.dao.ibatis.DeptDaoImpl
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.hik.person.model.req.org.OrgListReq
;
import
com.mortals.xhx.module.hik.person.model.req.person.PersonReq
;
import
com.mortals.xhx.module.hik.person.service.IHikPersonService
;
import
com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl
;
import
com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
com.mortals.xhx.module.staff.service.StaffService
;
...
@@ -51,22 +53,20 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -51,22 +53,20 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
@Autowired
@Autowired
private
AttendanceVacationBalanceDaoImpl
balanceDao
;
private
AttendanceVacationBalanceDaoImpl
balanceDao
;
@Autowired
private
AttendanceRecordDaoImpl
attendanceRecordDao
;
@Autowired
@Autowired
private
AttendanceRecordDetailDaoImpl
attendanceRecordDetailDao
;
private
IHikPersonService
hikPersonService
;
@Autowired
private
AttendanceRecordErrorDaoImpl
attendanceRecordErrorDao
;
@Override
@Override
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
log
.
info
(
"同步用户--部门"
);
log
.
info
(
"同步用户--部门"
);
try
{
try
{
//部门同步
//部门同步
String
resultDept
=
ArtemisPostTest
.
callPostApiGetDeptList
();
//String resultDept = ArtemisPostTest.callPostApiGetDeptList();
OrgListReq
orgListReq
=
new
OrgListReq
();
orgListReq
.
setPageNo
(
1
);
orgListReq
.
setPageSize
(
1000
);
String
resultDept
=
hikPersonService
.
getOrgListTrans
(
orgListReq
);
JSONObject
jsonObjectDept
=
JSON
.
parseObject
(
resultDept
);
JSONObject
jsonObjectDept
=
JSON
.
parseObject
(
resultDept
);
JSONObject
jsonObjectDept1
=
jsonObjectDept
.
getJSONObject
(
"data"
);
JSONObject
jsonObjectDept1
=
jsonObjectDept
.
getJSONObject
(
"data"
);
DeptHikData
deptHikData
=
JSONObject
.
parseObject
(
jsonObjectDept1
.
toJSONString
(),
DeptHikData
.
class
);
DeptHikData
deptHikData
=
JSONObject
.
parseObject
(
jsonObjectDept1
.
toJSONString
(),
DeptHikData
.
class
);
...
@@ -109,7 +109,12 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -109,7 +109,12 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
}
}
}
}
//同步员工
//同步员工
String
resultPerson
=
ArtemisPostTest
.
callPostApiGetPersonList
();
//String resultPerson = ArtemisPostTest.callPostApiGetPersonList();
PersonReq
personReq
=
new
PersonReq
();
personReq
.
setPageNo
(
1
);
personReq
.
setPageSize
(
1000
);
String
resultPerson
=
hikPersonService
.
getPersonListTrans
(
personReq
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
resultPerson
);
JSONObject
jsonObject
=
JSON
.
parseObject
(
resultPerson
);
JSONObject
jsonObject1
=
jsonObject
.
getJSONObject
(
"data"
);
JSONObject
jsonObject1
=
jsonObject
.
getJSONObject
(
"data"
);
PersonHikData
personHikData
=
JSONObject
.
parseObject
(
jsonObject1
.
toJSONString
(),
PersonHikData
.
class
);
PersonHikData
personHikData
=
JSONObject
.
parseObject
(
jsonObject1
.
toJSONString
(),
PersonHikData
.
class
);
...
@@ -231,7 +236,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
...
@@ -231,7 +236,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
staffEntity1
.
setPhoneNumber
(
String
.
valueOf
(
list
.
getPhoneNo
()));
staffEntity1
.
setPhoneNumber
(
String
.
valueOf
(
list
.
getPhoneNo
()));
}
}
service
.
update
(
staffEntity1
);
service
.
update
(
staffEntity1
);
if
(
Objects
.
nonNull
(
statEntity
)){
if
(
Objects
.
nonNull
(
statEntity
))
{
statEntity
.
initAttrValue
();
statEntity
.
initAttrValue
();
statEntity
.
setStaffId
(
staffEntity1
.
getId
());
statEntity
.
setStaffId
(
staffEntity1
.
getId
());
statEntity
.
setStaffName
(
staffEntity1
.
getName
());
statEntity
.
setStaffName
(
staffEntity1
.
getName
());
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceRecordErrorEntity.java
View file @
b7455b29
...
@@ -3,6 +3,8 @@ package com.mortals.xhx.module.attendance.model;
...
@@ -3,6 +3,8 @@ package com.mortals.xhx.module.attendance.model;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.mortals.framework.annotation.Excel
;
import
com.mortals.framework.annotation.Excel
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.framework.model.BaseEntityLong
;
...
@@ -64,6 +66,8 @@ public class AttendanceRecordErrorEntity extends AttendanceRecordErrorVo {
...
@@ -64,6 +66,8 @@ public class AttendanceRecordErrorEntity extends AttendanceRecordErrorVo {
/**
/**
* 上下班时间
* 上下班时间
*/
*/
@JsonFormat
(
pattern
=
"HH:mm"
)
@JSONField
(
format
=
"HH:mm"
)
private
Date
goOffDateTime
;
private
Date
goOffDateTime
;
/**
/**
* 异常时间
* 异常时间
...
@@ -468,4 +472,4 @@ public class AttendanceRecordErrorEntity extends AttendanceRecordErrorVo {
...
@@ -468,4 +472,4 @@ public class AttendanceRecordErrorEntity extends AttendanceRecordErrorVo {
this
.
remark
=
""
;
this
.
remark
=
""
;
}
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceRecordErrorVo.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.model.vo
;
package
com.mortals.xhx.module.attendance.model.vo
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity
;
import
lombok.Data
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
/**
/**
...
@@ -9,6 +11,12 @@ import java.util.List;
...
@@ -9,6 +11,12 @@ import java.util.List;
* @author zxfei
* @author zxfei
* @date 2023-04-08
* @date 2023-04-08
*/
*/
@Data
public
class
AttendanceRecordErrorVo
extends
BaseEntityLong
{
public
class
AttendanceRecordErrorVo
extends
BaseEntityLong
{
}
/**
\ No newline at end of file
* 上班or下班
*/
private
String
goOrOff
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceStatVo.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.model.vo
;
package
com.mortals.xhx.module.attendance.model.vo
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.xhx.module.attendance.model.AttendanceStatEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity
;
import
java.util.ArrayList
;
import
lombok.Data
;
import
java.util.List
;
import
java.util.List
;
/**
/**
* 考勤汇总信息视图对象
* 考勤汇总信息视图对象
...
@@ -9,6 +10,13 @@ import java.util.List;
...
@@ -9,6 +10,13 @@ import java.util.List;
* @author zxfei
* @author zxfei
* @date 2023-04-08
* @date 2023-04-08
*/
*/
@Data
public
class
AttendanceStatVo
extends
BaseEntityLong
{
public
class
AttendanceStatVo
extends
BaseEntityLong
{
private
List
<
AttendanceStaffStatEntity
>
attendanceStaffStatEntities
;
private
String
startTime
;
private
String
endTime
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.service
;
package
com.mortals.xhx.module.attendance.service
;
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.AttendanceRecordHikEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
/**
/**
* AttendanceRecordHikService
* AttendanceRecordHikService
*
*
...
@@ -11,4 +13,10 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
...
@@ -11,4 +13,10 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
*/
*/
public
interface
AttendanceRecordHikService
extends
ICRUDService
<
AttendanceRecordHikEntity
,
Long
>{
public
interface
AttendanceRecordHikService
extends
ICRUDService
<
AttendanceRecordHikEntity
,
Long
>{
}
/**
\ No newline at end of file
* 将原始数据导入打卡记录表
* @param entity
*/
public
void
addAttendanceRecord
(
AttendanceRecordHikEntity
entity
,
Context
context
)
throws
Exception
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.service.impl
;
package
com.mortals.xhx.module.attendance.service.impl
;
import
com.mortals.framework.service.IUser
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.base.system.upload.service.UploadService
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.*
;
import
com.mortals.xhx.module.dept.service.DeptService
;
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
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao
;
import
com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
com.mortals.framework.model.Context
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordHikService
;
import
java.text.SimpleDateFormat
;
import
java.time.ZoneId
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
/**
* AttendanceRecordHikService
* AttendanceRecordHikService
* 海康考勤打卡记录汇总信息 service实现
* 海康考勤打卡记录汇总信息 service实现
...
@@ -15,5 +31,450 @@ import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
...
@@ -15,5 +31,450 @@ import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
*/
*/
@Service
(
"attendanceRecordHikService"
)
@Service
(
"attendanceRecordHikService"
)
public
class
AttendanceRecordHikServiceImpl
extends
AbstractCRUDServiceImpl
<
AttendanceRecordHikDao
,
AttendanceRecordHikEntity
,
Long
>
implements
AttendanceRecordHikService
{
public
class
AttendanceRecordHikServiceImpl
extends
AbstractCRUDServiceImpl
<
AttendanceRecordHikDao
,
AttendanceRecordHikEntity
,
Long
>
implements
AttendanceRecordHikService
{
}
@Autowired
\ No newline at end of file
private
DeptService
deptService
;
@Autowired
private
AttendanceRecordService
attendanceRecordService
;
@Autowired
private
AttendanceRecordHikService
attendanceRecordHikService
;
@Autowired
private
AttendanceGroupStaffService
attendanceGroupStaffService
;
@Autowired
private
AttendanceGroupService
attendanceGroupService
;
@Autowired
private
AttendanceGroupFixedworkService
attendanceGroupFixedworkService
;
@Autowired
private
AttendanceClassService
attendanceClassService
;
@Autowired
private
AttendanceClassDetailService
attendanceClassDetailService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
UploadService
uploadService
;
@Autowired
private
AttendanceExportRecordService
attendanceExportRecordService
;
@Autowired
private
AttendanceRecordErrorService
errorService
;
@Override
public
void
addAttendanceRecord
(
AttendanceRecordHikEntity
entity
,
Context
context
)
throws
Exception
{
List
<
AttendanceRecordHikEntity
>
list
=
entity
.
getList
();
//对考勤数据根据考勤时间进行排序
List
<
AttendanceRecordHikEntity
>
collect
=
list
.
stream
().
sorted
(
Comparator
.
comparing
(
AttendanceRecordHikEntity:
:
getAttendanceDate
)).
collect
(
Collectors
.
toList
());
//根据工号对考勤数据进行分组
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
listMap
=
collect
.
stream
().
collect
(
Collectors
.
groupingBy
(
AttendanceRecordHikEntity:
:
getWorkNum
));
//map遍历.先把所有键取出来
Set
<
String
>
workNumSet
=
listMap
.
keySet
();
//根据键取出value
for
(
String
workNum
:
workNumSet
)
{
List
<
AttendanceRecordHikEntity
>
attendanceRecordHikEntities1
=
listMap
.
get
(
workNum
);
//对按照工号分组了的数据attendanceRecordHikEntities进行时间分组
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
map
=
attendanceRecordHikEntities1
.
stream
().
collect
(
Collectors
.
groupingBy
(
hikEntity
->
hikEntity
.
getAttendanceDate
().
toInstant
().
atZone
(
ZoneId
.
systemDefault
()).
toLocalDate
().
format
(
formatter
)));
Set
<
String
>
dateSet
=
map
.
keySet
();
for
(
String
s
:
dateSet
)
{
List
<
AttendanceRecordHikEntity
>
attendanceRecordHikEntities
=
map
.
get
(
s
);
//对相同工号的人员进行遍历判断考勤规则.
AttendanceRecordEntity
attendanceRecordEntity
=
new
AttendanceRecordEntity
();
List
<
AttendanceRecordDetailEntity
>
detailEntity
=
new
ArrayList
<>();
for
(
AttendanceRecordHikEntity
item:
attendanceRecordHikEntities
)
{
//对主表的对象进行赋值
if
(
StringUtils
.
isNull
(
attendanceRecordEntity
)||
StringUtils
.
isEmpty
(
attendanceRecordEntity
.
getStaffName
())){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
attendanceRecordEntity
.
setStaffId
(
item
.
getStaffId
());
attendanceRecordEntity
.
setStaffName
(
item
.
getStaffName
());
attendanceRecordEntity
.
setDeptId
(
item
.
getDeptId
());
attendanceRecordEntity
.
setDeptName
(
item
.
getDeptName
());
attendanceRecordEntity
.
setPositionId
(
item
.
getPositionId
());
attendanceRecordEntity
.
setPositionName
(
item
.
getPositionName
());
attendanceRecordEntity
.
setWorkNum
(
item
.
getWorkNum
());
IUser
user
=
context
.
getUser
();
attendanceRecordEntity
.
setCreateTime
(
new
Date
());
attendanceRecordEntity
.
setCreateUserId
(
user
.
getId
());
attendanceRecordEntity
.
setAttendanceDate
(
sdf
.
parse
(
sdf
.
format
(
item
.
getAttendanceDate
())));
}
//获取考勤打卡时间
Date
attendanceDate
=
item
.
getAttendanceDate
();
//通过工号查询员工信息
StaffQuery
staffQuery
=
new
StaffQuery
();
StaffEntity
staffEntity
=
staffService
.
selectOne
(
staffQuery
.
workNum
(
item
.
getWorkNum
()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery
attendanceGroupStaffQuery
=
new
AttendanceGroupStaffQuery
();
List
<
AttendanceGroupStaffEntity
>
attendanceGroupStaffEntities
=
attendanceGroupStaffService
.
find
(
attendanceGroupStaffQuery
.
staffId
(
staffEntity
.
getId
()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if
(
StringUtils
.
isNotNull
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()==
1
){
//查询考勤组
AttendanceGroupQuery
attendanceGroupQuery
=
new
AttendanceGroupQuery
();
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
selectOne
(
attendanceGroupQuery
.
id
(
attendanceGroupStaffEntities
.
get
(
0
).
getGroupId
()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery
attendanceGroupFixedworkQuery
=
new
AttendanceGroupFixedworkQuery
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
attendanceGroupFixedworkQuery
.
groupId
(
attendanceGroupEntity
.
getId
()));
//判断当前考勤日期为周几
Date
attendanceDate1
=
attendanceDate
;
String
week
=
this
.
getWeek
(
attendanceDate1
);
//通过考勤日期的星期拿到班次id.
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//weekClassId为-1 则不在考勤
if
(
weekClassId
==-
1L
){
//跳过本次循环
continue
;
}
//获取班次信息
AttendanceClassQuery
attendanceClassQuery
=
new
AttendanceClassQuery
();
AttendanceClassEntity
attendanceClassEntity
=
attendanceClassService
.
selectOne
(
attendanceClassQuery
.
id
(
weekClassId
));
//获取班次详细信息
AttendanceClassDetailQuery
attendanceClassDetailQuery
=
new
AttendanceClassDetailQuery
();
List
<
AttendanceClassDetailEntity
>
attendanceClassDetailEntities
=
attendanceClassDetailService
.
find
(
attendanceClassDetailQuery
.
classId
(
attendanceClassEntity
.
getId
()));
Integer
orderNum
=
0
;
if
(
detailEntity
==
null
||
detailEntity
.
size
()==
0
){
for
(
AttendanceClassDetailEntity
classDetailEntity
:
attendanceClassDetailEntities
)
{
orderNum
++;
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
setShiftsId
(
classDetailEntity
.
getId
());
recordDetailEntity
.
setShiftsName
(
classDetailEntity
.
getClassName
());
recordDetailEntity
.
setGoWorkResult
(
3
);
recordDetailEntity
.
setOffWorkResult
(
3
);
recordDetailEntity
.
setOrderNum
(
orderNum
);
detailEntity
.
add
(
recordDetailEntity
);
}
}
for
(
AttendanceClassDetailEntity
classDetail
:
attendanceClassDetailEntities
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
//上班打卡前时间
Date
goWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
-
classDetail
.
getGoWorkDateBefore
())));
//上班打卡后时间
Date
goWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
classDetail
.
getGoWorkDateAfter
())));
//下班打卡前时间
Date
offWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
-
classDetail
.
getOffWorkDateBefore
())));
//下班打卡后时间
Date
offWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
classDetail
.
getOffWorkDateAfter
())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean
goInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
goWorkDateAfter
);
//判断考勤时间是否在下班打卡区间内
boolean
offInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
offWorkDateBefore
,
offWorkDateAfter
);
if
(
goInTime
==
false
&&
offInTime
==
false
){
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡,判断是否迟到
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getGoWorkDate
())));
if
(!
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()
==
classDetail
.
getId
().
longValue
()){
attendanceRecordDetailEntity
.
setGoWorkResult
(
4
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()
==
classDetail
.
getId
().
longValue
()){
attendanceRecordDetailEntity
.
setGoWorkResult
(
1
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
}
if
(
offInTime
){
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getOffWorkDate
())),
offWorkDateAfter
);
if
(!
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()
==
classDetail
.
getId
().
longValue
()){
attendanceRecordDetailEntity
.
setOffWorkResult
(
5
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()==
classDetail
.
getId
().
longValue
()){
attendanceRecordDetailEntity
.
setOffWorkResult
(
1
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
}
}
}
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if
(
StringUtils
.
isNotNull
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()>
1
){
for
(
AttendanceGroupStaffEntity
groupStaffEntity:
attendanceGroupStaffEntities
){
{
//查询考勤组
AttendanceGroupQuery
attendanceGroupQuery
=
new
AttendanceGroupQuery
();
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
selectOne
(
attendanceGroupQuery
.
id
(
groupStaffEntity
.
getGroupId
()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery
attendanceGroupFixedworkQuery
=
new
AttendanceGroupFixedworkQuery
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
attendanceGroupFixedworkQuery
.
groupId
(
attendanceGroupEntity
.
getId
()));
//判断当前考勤日期为周几
Date
attendanceDate1
=
attendanceDate
;
String
week
=
this
.
getWeek
(
attendanceDate1
);
//通过考勤日期的星期拿到班次id.
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//weekClassId为-1 则不在考勤
if
(
weekClassId
==-
1L
){
//跳过本次循环
continue
;
}
//获取班次信息
AttendanceClassQuery
attendanceClassQuery
=
new
AttendanceClassQuery
();
AttendanceClassEntity
attendanceClassEntity
=
attendanceClassService
.
selectOne
(
attendanceClassQuery
.
id
(
weekClassId
));
//获取班次详细信息
AttendanceClassDetailQuery
attendanceClassDetailQuery
=
new
AttendanceClassDetailQuery
();
List
<
AttendanceClassDetailEntity
>
attendanceClassDetailEntities
=
attendanceClassDetailService
.
find
(
attendanceClassDetailQuery
.
classId
(
attendanceClassEntity
.
getId
()));
Integer
orderNum
=
0
;
if
(
detailEntity
!=
null
&&
detailEntity
.
size
()>
0
){
for
(
AttendanceClassDetailEntity
classDetailEntity
:
attendanceClassDetailEntities
)
{
orderNum
++;
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
setShiftsId
(
classDetailEntity
.
getId
());
recordDetailEntity
.
setShiftsName
(
classDetailEntity
.
getClassName
());
recordDetailEntity
.
setGoWorkResult
(
3
);
recordDetailEntity
.
setOffWorkResult
(
3
);
recordDetailEntity
.
setOrderNum
(
orderNum
);
detailEntity
.
add
(
recordDetailEntity
);
}
}
for
(
AttendanceClassDetailEntity
classDetail
:
attendanceClassDetailEntities
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
//上班打卡前时间
Date
goWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
-
classDetail
.
getGoWorkDateBefore
())));
//上班打卡后时间
Date
goWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
classDetail
.
getGoWorkDateAfter
())));
//下班打卡前时间
Date
offWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
-
classDetail
.
getOffWorkDateBefore
())));
//下班打卡后时间
Date
offWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
classDetail
.
getOffWorkDateAfter
())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean
goInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
goWorkDateAfter
);
//判断考勤时间是否在下班打卡区间内
boolean
offInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
offWorkDateBefore
,
offWorkDateAfter
);
if
(
goInTime
==
false
&&
offInTime
==
false
){
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡,判断是否迟到
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getGoWorkDate
())));
if
(!
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
4
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
1
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
}
if
(
offInTime
){
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getOffWorkDate
())),
offWorkDateAfter
);
if
(!
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
5
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
1
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
}
}
}
}
}
}
List
<
AttendanceRecordErrorEntity
>
errorEntityList
=
new
ArrayList
<>();
for
(
AttendanceRecordDetailEntity
recordDetailEntity
:
detailEntity
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
SimpleDateFormat
sdft
=
new
SimpleDateFormat
(
"HH:mm:ss"
);
Integer
goWorkResult
=
recordDetailEntity
.
getGoWorkResult
();
Integer
offWorkResult
=
recordDetailEntity
.
getOffWorkResult
();
if
(
goWorkResult
!=
1
){
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
errorEntity
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
errorEntity
.
setStaffName
(
attendanceRecordEntity
.
getStaffName
());
errorEntity
.
setWorkNum
(
attendanceRecordEntity
.
getWorkNum
());
errorEntity
.
setDeptId
(
attendanceRecordEntity
.
getDeptId
());
errorEntity
.
setDeptName
(
attendanceRecordEntity
.
getDeptName
());
errorEntity
.
setPositionId
(
attendanceRecordEntity
.
getPositionId
());
errorEntity
.
setPositionName
(
attendanceRecordEntity
.
getPositionName
());
errorEntity
.
setShiftsId
(
recordDetailEntity
.
getShiftsId
());
errorEntity
.
setShiftsName
(
recordDetailEntity
.
getShiftsName
());
Date
goWorkDate
=
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getGoWorkDate
();
errorEntity
.
setGoOffDateTime
(
goWorkDate
);
if
(
recordDetailEntity
.
getGoWorkDate
()!=
null
&&!
recordDetailEntity
.
getGoWorkDate
().
equals
(
""
)){
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getGoWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getGoWorkDate
());
}
else
{
String
s1
=
s
+
" "
+
sdft
.
format
(
goWorkDate
);
errorEntity
.
setErrorDateTime
(
sdf
.
parse
(
s1
));
errorEntity
.
setActualAttendanceDateTime
(
sdf
.
parse
(
s1
));
}
if
(
recordDetailEntity
.
getGoWorkResult
()==
3
){
errorEntity
.
setErrorStatus
(
0
);
}
if
(
recordDetailEntity
.
getGoWorkResult
()==
4
){
errorEntity
.
setErrorStatus
(
2
);
}
errorEntity
.
setProcessStatus
(
0
);
IUser
user
=
context
.
getUser
();
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
user
.
getId
());
errorEntityList
.
add
(
errorEntity
);
}
if
(
offWorkResult
!=
1
){
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
errorEntity
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
errorEntity
.
setStaffName
(
attendanceRecordEntity
.
getStaffName
());
errorEntity
.
setWorkNum
(
attendanceRecordEntity
.
getWorkNum
());
errorEntity
.
setDeptId
(
attendanceRecordEntity
.
getDeptId
());
errorEntity
.
setDeptName
(
attendanceRecordEntity
.
getDeptName
());
errorEntity
.
setPositionId
(
attendanceRecordEntity
.
getPositionId
());
errorEntity
.
setPositionName
(
attendanceRecordEntity
.
getPositionName
());
errorEntity
.
setShiftsId
(
recordDetailEntity
.
getShiftsId
());
errorEntity
.
setShiftsName
(
recordDetailEntity
.
getShiftsName
());
Date
offWorkDate
=
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getOffWorkDate
();
errorEntity
.
setGoOffDateTime
(
offWorkDate
);
if
(
recordDetailEntity
.
getOffWorkDate
()!=
null
&&!
recordDetailEntity
.
getOffWorkDate
().
equals
(
""
)){
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getOffWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getOffWorkDate
());
}
else
{
errorEntity
.
setErrorDateTime
(
sdf
.
parse
(
s
+
" "
+
sdft
.
format
(
offWorkDate
)));
errorEntity
.
setActualAttendanceDateTime
(
sdf
.
parse
(
s
+
" "
+
sdft
.
format
(
offWorkDate
)));
}
if
(
recordDetailEntity
.
getOffWorkResult
()==
3
){
errorEntity
.
setErrorStatus
(
0
);
}
if
(
recordDetailEntity
.
getOffWorkResult
()==
5
){
errorEntity
.
setErrorStatus
(
1
);
}
errorEntity
.
setProcessStatus
(
0
);
IUser
user
=
context
.
getUser
();
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
user
.
getId
());
errorEntityList
.
add
(
errorEntity
);
}
}
if
(
detailEntity
!=
null
){
if
(
errorEntityList
!=
null
&&
errorEntityList
.
size
()>
0
){
errorService
.
save
(
errorEntityList
,
context
);
}
attendanceRecordEntity
.
setAttendanceRecordDetailList
(
detailEntity
);
attendanceRecordService
.
save
(
attendanceRecordEntity
,
context
);
}
}
}
}
public
String
getWeek
(
Date
date
){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"EEEE"
);
String
week
=
sdf
.
format
(
date
);
return
week
;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
* @return
*/
public
Long
getWeekClassId
(
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
,
String
week
){
Long
weekClassId
=
0L
;
switch
(
week
){
case
"星期一"
:
if
(
attendanceGroupFixedworkEntity
.
getMonday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getMondayClassId
();
break
;
case
"星期二"
:
if
(
attendanceGroupFixedworkEntity
.
getTuesday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getTuesdayClassId
();
break
;
case
"星期三"
:
if
(
attendanceGroupFixedworkEntity
.
getWednesday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getWednesdayClassId
();
break
;
case
"星期四"
:
if
(
attendanceGroupFixedworkEntity
.
getThursday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getThursdayClassId
();
break
;
case
"星期五"
:
if
(
attendanceGroupFixedworkEntity
.
getFriday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getFridayClassId
();
break
;
case
"星期六"
:
if
(
attendanceGroupFixedworkEntity
.
getSaturday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSaturdayClassId
();
break
;
case
"星期天"
:
if
(
attendanceGroupFixedworkEntity
.
getSunday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSundayClassId
();
break
;
}
return
weekClassId
;
}
/**
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
* 判断当前时间在时间区间内
*/
public
static
boolean
isInTime
(
Date
nowTime
,
Date
startTime
,
Date
endTime
)
{
if
(
nowTime
.
getTime
()
==
startTime
.
getTime
()
||
nowTime
.
getTime
()
==
endTime
.
getTime
())
{
return
true
;
}
Calendar
date
=
Calendar
.
getInstance
();
date
.
setTime
(
nowTime
);
Calendar
begin
=
Calendar
.
getInstance
();
begin
.
setTime
(
startTime
);
Calendar
end
=
Calendar
.
getInstance
();
end
.
setTime
(
endTime
);
if
(
date
.
after
(
begin
)
&&
date
.
before
(
end
))
{
return
true
;
}
else
{
return
false
;
}
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordServiceImpl.java
View file @
b7455b29
...
@@ -50,8 +50,8 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
...
@@ -50,8 +50,8 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getAttendanceRecordDetailList
())){
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getAttendanceRecordDetailList
())){
entity
.
getAttendanceRecordDetailList
().
stream
().
peek
(
item
->{
entity
.
getAttendanceRecordDetailList
().
stream
().
peek
(
item
->{
item
.
setRecordId
(
entity
.
getId
());
item
.
setRecordId
(
entity
.
getId
());
item
.
setCreateUser
(
context
.
getUser
().
getLoginName
());
item
.
setCreateUser
(
context
==
null
?
"admin"
:
context
.
getUser
().
getLoginName
());
item
.
setCreateUserId
(
context
.
getUser
().
getId
());
item
.
setCreateUserId
(
context
==
null
?
1L
:
context
.
getUser
().
getId
());
item
.
setCreateTime
(
new
Date
());
item
.
setCreateTime
(
new
Date
());
}).
count
();
}).
count
();
attendanceRecordDetailService
.
save
(
entity
.
getAttendanceRecordDetailList
());
attendanceRecordDetailService
.
save
(
entity
.
getAttendanceRecordDetailList
());
...
@@ -66,11 +66,11 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
...
@@ -66,11 +66,11 @@ public class AttendanceRecordServiceImpl extends AbstractCRUDServiceImpl<Attenda
attendanceRecordDetailService
.
remove
(
attendanceRecordDetailIds
,
context
);
attendanceRecordDetailService
.
remove
(
attendanceRecordDetailIds
,
context
);
entity
.
getAttendanceRecordDetailList
().
stream
().
peek
(
item
->{
entity
.
getAttendanceRecordDetailList
().
stream
().
peek
(
item
->{
item
.
setRecordId
(
entity
.
getId
());
item
.
setRecordId
(
entity
.
getId
());
item
.
setCreateUser
(
context
.
getUser
().
getLoginName
());
item
.
setCreateUser
(
context
==
null
?
"admin"
:
context
.
getUser
().
getLoginName
());
item
.
setCreateUserId
(
context
.
getUser
().
getId
());
item
.
setCreateUserId
(
context
==
null
?
1L
:
context
.
getUser
().
getId
());
item
.
setCreateTime
(
new
Date
());
item
.
setCreateTime
(
new
Date
());
item
.
setUpdateUser
(
context
.
getUser
().
getLoginName
());
item
.
setUpdateUser
(
context
==
null
?
"admin"
:
context
.
getUser
().
getLoginName
());
item
.
setUpdateUserId
(
context
.
getUser
().
getId
());
item
.
setUpdateUserId
(
context
==
null
?
1L
:
context
.
getUser
().
getId
());
item
.
setUpdateTime
(
new
Date
());
item
.
setUpdateTime
(
new
Date
());
}).
count
();
}).
count
();
attendanceRecordDetailService
.
save
(
entity
.
getAttendanceRecordDetailList
());
attendanceRecordDetailService
.
save
(
entity
.
getAttendanceRecordDetailList
());
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.service.impl
;
package
com.mortals.xhx.module.attendance.service.impl
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceStaffStatQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceStaffStatService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.exception.AppException
;
...
@@ -6,14 +12,114 @@ import com.mortals.framework.model.Context;
...
@@ -6,14 +12,114 @@ import com.mortals.framework.model.Context;
import
com.mortals.xhx.module.attendance.dao.AttendanceStatDao
;
import
com.mortals.xhx.module.attendance.dao.AttendanceStatDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceStatEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceStatEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
java.util.List
;
/**
/**
* AttendanceStatService
* AttendanceStatService
* 考勤汇总信息 service实现
* 考勤汇总信息 service实现
*
*
* @author zxfei
* @author zxfei
* @date 2023-04-08
* @date 2023-04-08
*/
*/
@Service
(
"attendanceStatService"
)
@Service
(
"attendanceStatService"
)
public
class
AttendanceStatServiceImpl
extends
AbstractCRUDServiceImpl
<
AttendanceStatDao
,
AttendanceStatEntity
,
Long
>
implements
AttendanceStatService
{
public
class
AttendanceStatServiceImpl
extends
AbstractCRUDServiceImpl
<
AttendanceStatDao
,
AttendanceStatEntity
,
Long
>
implements
AttendanceStatService
{
@Autowired
private
AttendanceStaffStatService
attendanceStaffStatService
;
@Override
protected
void
findAfter
(
AttendanceStatEntity
entity
,
Context
context
,
List
<
AttendanceStatEntity
>
list
)
throws
AppException
{
//开始时间
String
startYears
=
entity
.
getStartTime
().
split
(
"-"
,
0
)[
0
];
Long
startYear
=
Long
.
valueOf
(
startYears
);
String
startMonths
=
entity
.
getStartTime
().
split
(
"-"
,
0
)[
1
];
Long
startMonth
=
Long
.
valueOf
(
startMonths
);
String
startDays
=
entity
.
getStartTime
().
split
(
"-"
,
0
)[
2
];
Long
startDay
=
Long
.
valueOf
(
startDays
);
//结束时间
String
endYears
=
entity
.
getEndTime
().
split
(
"-"
,
0
)[
0
];
Long
endYear
=
Long
.
valueOf
(
endYears
);
String
endMonths
=
entity
.
getEndTime
().
split
(
"-"
,
0
)[
1
];
Long
endMonth
=
Long
.
valueOf
(
endMonths
);
String
endDays
=
entity
.
getEndTime
().
split
(
"-"
,
0
)[
2
];
Long
endDay
=
Long
.
valueOf
(
endDays
);
list
.
forEach
(
item
->
{
AttendanceStaffStatQuery
staffStatQuery
=
new
AttendanceStaffStatQuery
();
staffStatQuery
.
setStaffId
(
entity
.
getStaffId
());
if
(
startYear
==
endYear
){
staffStatQuery
.
setYear
(
startYear
.
intValue
());
}
else
{
staffStatQuery
.
setYearStart
(
startYear
.
intValue
());
staffStatQuery
.
setYearEnd
(
endYear
.
intValue
());
}
if
(
startMonth
==
endMonth
){
staffStatQuery
.
setMonth
(
startMonth
.
intValue
());
}
else
{
staffStatQuery
.
setMonthStart
(
startMonth
.
intValue
());
staffStatQuery
.
setMonthEnd
(
startMonth
.
intValue
());
}
if
(
startDay
==
endDay
){
staffStatQuery
.
setDay
(
startDay
.
intValue
());
}
else
{
staffStatQuery
.
setDayStart
(
startDay
.
intValue
());
staffStatQuery
.
setDayEnd
(
startDay
.
intValue
());
}
//比较 year month day todo
// staffStatQuery.setYear(year);//相等
// staffStatQuery.setYearStart();
// staffStatQuery.setYearEnd();
//month and day 同上
List
<
AttendanceStaffStatEntity
>
attendanceStaffStatEntities
=
attendanceStaffStatService
.
find
(
staffStatQuery
);
item
.
setAttendanceStaffStatEntities
(
attendanceStaffStatEntities
);
});
super
.
findAfter
(
entity
,
context
,
list
);
}
@Override
protected
void
findAfter
(
AttendanceStatEntity
params
,
PageInfo
pageInfo
,
Context
context
,
List
<
AttendanceStatEntity
>
list
)
throws
AppException
{
//开始时间
String
startYears
=
params
.
getStartTime
().
split
(
"-"
,
0
)[
0
];
Long
startYear
=
Long
.
valueOf
(
startYears
);
String
startMonths
=
params
.
getStartTime
().
split
(
"-"
,
0
)[
1
];
Long
startMonth
=
Long
.
valueOf
(
startMonths
);
String
startDays
=
params
.
getStartTime
().
split
(
"-"
,
0
)[
2
];
Long
startDay
=
Long
.
valueOf
(
startDays
);
//结束时间
String
endYears
=
params
.
getEndTime
().
split
(
"-"
,
0
)[
0
];
Long
endYear
=
Long
.
valueOf
(
endYears
);
String
endMonths
=
params
.
getEndTime
().
split
(
"-"
,
0
)[
1
];
Long
endMonth
=
Long
.
valueOf
(
endMonths
);
String
endDays
=
params
.
getEndTime
().
split
(
"-"
,
0
)[
2
];
Long
endDay
=
Long
.
valueOf
(
endDays
);
list
.
forEach
(
item
->
{
AttendanceStaffStatQuery
staffStatQuery
=
new
AttendanceStaffStatQuery
();
staffStatQuery
.
setStaffId
(
item
.
getStaffId
());
if
(
startYear
==
endYear
){
staffStatQuery
.
setYear
(
startYear
.
intValue
());
}
else
{
staffStatQuery
.
setYearStart
(
startYear
.
intValue
());
staffStatQuery
.
setYearEnd
(
endYear
.
intValue
());
}
if
(
startMonth
==
endMonth
){
staffStatQuery
.
setMonth
(
startMonth
.
intValue
());
}
else
{
staffStatQuery
.
setMonthStart
(
startMonth
.
intValue
());
staffStatQuery
.
setMonthEnd
(
endMonth
.
intValue
());
}
if
(
startDay
==
endDay
){
staffStatQuery
.
setDay
(
startDay
.
intValue
());
}
else
{
staffStatQuery
.
setDayStart
(
startDay
.
intValue
());
staffStatQuery
.
setDayEnd
(
endDay
.
intValue
());
}
//比较 year month day todo
// staffStatQuery.setYear(year);//相等
// staffStatQuery.setYearStart();
// staffStatQuery.setYearEnd();
//month and day 同上
List
<
AttendanceStaffStatEntity
>
attendanceStaffStatEntities
=
attendanceStaffStatService
.
find
(
staffStatQuery
);
item
.
setAttendanceStaffStatEntities
(
attendanceStaffStatEntities
);
});
super
.
findAfter
(
params
,
pageInfo
,
context
,
list
);
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordErrorController.java
View file @
b7455b29
...
@@ -23,6 +23,7 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
...
@@ -23,6 +23,7 @@ import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.ArrayUtils
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.framework.util.StringUtils
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
...
@@ -52,6 +53,9 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
...
@@ -52,6 +53,9 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Autowired
@Autowired
private
AttendanceClassService
attendanceClassService
;
private
AttendanceClassService
attendanceClassService
;
@Autowired
private
AttendanceClassDetailService
classDetailService
;
@Autowired
@Autowired
private
AttendanceRecordService
attendanceRecordService
;
private
AttendanceRecordService
attendanceRecordService
;
...
@@ -76,7 +80,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
...
@@ -76,7 +80,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
}
}
@PostMapping
(
{
"disposeError"
}
)
@PostMapping
(
value
=
"disposeError"
)
public
Rest
<
String
>
disposeError
(
@RequestBody
AttendanceRecordErrorEntity
query
)
{
public
Rest
<
String
>
disposeError
(
@RequestBody
AttendanceRecordErrorEntity
query
)
{
Rest
<
String
>
ret
=
new
Rest
();
Rest
<
String
>
ret
=
new
Rest
();
Context
context
=
this
.
getContext
();
Context
context
=
this
.
getContext
();
...
@@ -84,6 +88,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
...
@@ -84,6 +88,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
query
.
setOperDateTime
(
new
Date
());
query
.
setOperDateTime
(
new
Date
());
query
.
setProcessStatus
(
1
);
query
.
setProcessStatus
(
1
);
errorService
.
update
(
query
);
errorService
.
update
(
query
);
DateUtils
.
convertTime2Str
(
query
.
getErrorDateTime
().
getTime
(),
DateUtils
.
P_yyyy_MM_dd
);
DateUtils
.
convertTime2Str
(
query
.
getErrorDateTime
().
getTime
(),
DateUtils
.
P_yyyy_MM_dd
);
AttendanceRecordQuery
attendanceRecordQuery
=
new
AttendanceRecordQuery
();
AttendanceRecordQuery
attendanceRecordQuery
=
new
AttendanceRecordQuery
();
attendanceRecordQuery
.
setStaffId
(
query
.
getStaffId
());
attendanceRecordQuery
.
setStaffId
(
query
.
getStaffId
());
...
@@ -94,21 +99,54 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
...
@@ -94,21 +99,54 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
detailQuery
.
setRecordId
(
attendanceRecordEntity
.
getId
());
detailQuery
.
setRecordId
(
attendanceRecordEntity
.
getId
());
detailQuery
.
setShiftsId
(
query
.
getShiftsId
());
detailQuery
.
setShiftsId
(
query
.
getShiftsId
());
List
<
AttendanceRecordDetailEntity
>
attendanceRecordDetailEntity
=
attendanceRecordDetailService
.
find
(
detailQuery
);
List
<
AttendanceRecordDetailEntity
>
attendanceRecordDetailEntity
=
attendanceRecordDetailService
.
find
(
detailQuery
);
for
(
AttendanceRecordDetailEntity
recordDetailEntity
:
attendanceRecordDetailEntity
)
{
for
(
AttendanceRecordDetailEntity
recordDetailEntity
:
attendanceRecordDetailEntity
)
{
Date
goWorkDate
=
recordDetailEntity
.
getGoWorkDate
();
Date
goWorkDate
=
recordDetailEntity
.
getGoWorkDate
();
Date
offWorkDate
=
recordDetailEntity
.
getOffWorkDate
();
Date
offWorkDate
=
recordDetailEntity
.
getOffWorkDate
();
if
(
goWorkDate
.
getTime
()==
query
.
getErrorDateTime
().
getTime
()){
if
(
query
.
getProcessResult
().
contains
(
"正常"
)){
recordDetailEntity
.
setGoWorkResult
(
query
.
getErrorStatus
());
if
(
goWorkDate
.
getTime
()==
query
.
getGoOffDateTime
().
getTime
()){
recordDetailEntity
.
setGoWorkResult
(
1
);
}
if
(
offWorkDate
.
getTime
()==
query
.
getGoOffDateTime
().
getTime
()){
recordDetailEntity
.
setOffWorkResult
(
1
);
}
}
}
if
(
offWorkDate
.
getTime
()==
query
.
getErrorDateTime
().
getTime
()){
if
(
query
.
getProcessResult
().
contains
(
"早退"
)){
recordDetailEntity
.
setOffWorkResult
(
query
.
getErrorStatus
());
if
(
offWorkDate
.
getTime
()==
query
.
getGoOffDateTime
().
getTime
()){
recordDetailEntity
.
setOffWorkResult
(
5
);
}
}
}
if
(
query
.
getProcessResult
().
contains
(
"迟到"
)){
if
(
goWorkDate
.
getTime
()==
query
.
getGoOffDateTime
().
getTime
()){
recordDetailEntity
.
setGoWorkResult
(
4
);
}
}
attendanceRecordDetailService
.
update
(
recordDetailEntity
);
attendanceRecordDetailService
.
update
(
recordDetailEntity
);
}
}
return
Rest
.
ok
();
return
Rest
.
ok
();
}
}
@Override
protected
int
editAfter
(
Long
id
,
Map
<
String
,
Object
>
model
,
AttendanceRecordErrorEntity
entity
,
Context
context
)
throws
AppException
{
this
.
addDict
(
model
,
"errorStatus"
,
paramService
.
getParamBySecondOrganize
(
"AttendanceRecordError"
,
"errorStatus"
));
return
super
.
editAfter
(
id
,
model
,
entity
,
context
);
}
@Override
protected
void
doListAfter
(
AttendanceRecordErrorEntity
query
,
List
<
AttendanceRecordErrorEntity
>
list
,
Context
context
)
throws
AppException
{
for
(
AttendanceRecordErrorEntity
errorEntity
:
list
)
{
Long
shiftsId
=
errorEntity
.
getShiftsId
();
AttendanceClassDetailEntity
attendanceClassDetailEntity
=
classDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
shiftsId
));
if
(
errorEntity
.
getGoOffDateTime
().
getTime
()==
attendanceClassDetailEntity
.
getGoWorkDate
().
getTime
()){
errorEntity
.
setGoOrOff
(
"上班"
);
}
if
(
errorEntity
.
getGoOffDateTime
().
getTime
()==
attendanceClassDetailEntity
.
getOffWorkDate
().
getTime
()){
errorEntity
.
setGoOrOff
(
"下班"
);
}
}
super
.
doListAfter
(
query
,
list
,
context
);
}
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.web
;
package
com.mortals.xhx.module.attendance.web
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.IUser
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.framework.utils.ServletUtils
;
import
com.mortals.framework.utils.ServletUtils
;
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.upload.service.UploadService
;
import
com.mortals.xhx.base.system.upload.service.UploadService
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity
;
import
com.mortals.xhx.module.attendance.service.*
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceExportRecordService
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordHikService
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
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.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffQuery
;
import
com.mortals.xhx.module.staff.model.StaffQuery
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
@@ -28,12 +29,10 @@ import org.springframework.web.multipart.MultipartFile;
...
@@ -28,12 +29,10 @@ import org.springframework.web.multipart.MultipartFile;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayInputStream
;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.text.ParseException
;
import
java.util.Date
;
import
java.text.SimpleDateFormat
;
import
java.util.HashMap
;
import
java.time.ZoneId
;
import
java.util.List
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
/**
*
*
* 海康考勤打卡记录汇总信息
* 海康考勤打卡记录汇总信息
...
@@ -50,27 +49,13 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
...
@@ -50,27 +49,13 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
@Autowired
@Autowired
private
DeptService
deptService
;
private
DeptService
deptService
;
@Autowired
@Autowired
private
AttendanceRecordService
attendanceRecordService
;
@Autowired
private
AttendanceRecordHikService
attendanceRecordHikService
;
@Autowired
private
AttendanceGroupStaffService
attendanceGroupStaffService
;
@Autowired
private
AttendanceGroupService
attendanceGroupService
;
@Autowired
private
AttendanceGroupFixedworkService
attendanceGroupFixedworkService
;
@Autowired
private
AttendanceClassService
attendanceClassService
;
@Autowired
private
AttendanceClassDetailService
attendanceClassDetailService
;
@Autowired
private
StaffService
staffService
;
private
StaffService
staffService
;
@Autowired
@Autowired
private
UploadService
uploadService
;
private
UploadService
uploadService
;
@Autowired
@Autowired
private
AttendanceExportRecordService
attendanceExportRecordService
;
private
AttendanceExportRecordService
attendanceExportRecordService
;
@Autowired
@Autowired
private
AttendanceRecord
ErrorService
error
Service
;
private
AttendanceRecord
HikService
hik
Service
;
public
AttendanceRecordHikController
(){
public
AttendanceRecordHikController
(){
super
.
setModuleDesc
(
"海康考勤打卡记录汇总信息"
);
super
.
setModuleDesc
(
"海康考勤打卡记录汇总信息"
);
...
@@ -133,394 +118,26 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
...
@@ -133,394 +118,26 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
}
}
@PostMapping
(
value
=
"/addAttendanceRecord"
)
@PostMapping
(
value
=
"/addAttendanceRecord"
)
public
void
addAttendanceRecord
(
@RequestBody
AttendanceRecordHikEntity
hikEntity
)
throws
ParseException
{
public
Rest
<
String
>
addAttendanceRecord
(
@RequestBody
AttendanceRecordHikEntity
hikEntity
)
{
List
<
AttendanceRecordHikEntity
>
list
=
hikEntity
.
getList
();
Rest
<
String
>
ret
=
new
Rest
();
//对考勤数据根据考勤时间进行排序
Map
<
String
,
Object
>
model
=
new
HashMap
();
List
<
AttendanceRecordHikEntity
>
collect
=
list
.
stream
().
sorted
(
Comparator
.
comparing
(
AttendanceRecordHikEntity:
:
getAttendanceDate
)).
collect
(
Collectors
.
toList
());
Context
context
=
this
.
getContext
();
//根据工号对考勤数据进行分组
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
listMap
=
collect
.
stream
().
collect
(
Collectors
.
groupingBy
(
AttendanceRecordHikEntity:
:
getWorkNum
));
int
code
=
1
;
//map遍历.先把所有键取出来
try
{
Set
<
String
>
workNumSet
=
listMap
.
keySet
();
hikService
.
addAttendanceRecord
(
hikEntity
,
getContext
());
//根据键取出value
model
.
put
(
"message_info"
,
busiDesc
+
"成功"
);
for
(
String
workNum
:
workNumSet
)
{
this
.
recordSysLog
(
this
.
request
,
busiDesc
+
" 【成功】"
);
List
<
AttendanceRecordHikEntity
>
attendanceRecordHikEntities1
=
listMap
.
get
(
workNum
);
}
catch
(
Exception
var9
)
{
//对按照工号分组了的数据attendanceRecordHikEntities进行时间分组
code
=
-
1
;
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
this
.
doException
(
this
.
request
,
busiDesc
,
model
,
var9
);
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
map
=
attendanceRecordHikEntities1
.
stream
().
collect
(
Collectors
.
groupingBy
(
entity
->
entity
.
getAttendanceDate
().
toInstant
().
atZone
(
ZoneId
.
systemDefault
()).
toLocalDate
().
format
(
formatter
)));
Set
<
String
>
dateSet
=
map
.
keySet
();
for
(
String
s
:
dateSet
)
{
List
<
AttendanceRecordHikEntity
>
attendanceRecordHikEntities
=
map
.
get
(
s
);
//对相同工号的人员进行遍历判断考勤规则.
AttendanceRecordEntity
attendanceRecordEntity
=
new
AttendanceRecordEntity
();
List
<
AttendanceRecordDetailEntity
>
detailEntity
=
new
ArrayList
<>();
for
(
AttendanceRecordHikEntity
item:
attendanceRecordHikEntities
)
{
//对主表的对象进行赋值
if
(
Objects
.
nonNull
(
attendanceRecordEntity
)){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
attendanceRecordEntity
.
setStaffId
(
item
.
getStaffId
());
attendanceRecordEntity
.
setStaffName
(
item
.
getStaffName
());
attendanceRecordEntity
.
setDeptId
(
item
.
getDeptId
());
attendanceRecordEntity
.
setDeptName
(
item
.
getDeptName
());
attendanceRecordEntity
.
setPositionId
(
item
.
getPositionId
());
attendanceRecordEntity
.
setPositionName
(
item
.
getPositionName
());
attendanceRecordEntity
.
setWorkNum
(
item
.
getWorkNum
());
IUser
user
=
getContext
().
getUser
();
attendanceRecordEntity
.
setCreateTime
(
new
Date
());
attendanceRecordEntity
.
setCreateUserId
(
user
.
getId
());
attendanceRecordEntity
.
setAttendanceDate
(
sdf
.
parse
(
sdf
.
format
(
item
.
getAttendanceDate
())));
}
//获取考勤打卡时间
Date
attendanceDate
=
item
.
getAttendanceDate
();
//通过工号查询员工信息
StaffQuery
staffQuery
=
new
StaffQuery
();
StaffEntity
staffEntity
=
staffService
.
selectOne
(
staffQuery
.
workNum
(
item
.
getWorkNum
()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery
attendanceGroupStaffQuery
=
new
AttendanceGroupStaffQuery
();
List
<
AttendanceGroupStaffEntity
>
attendanceGroupStaffEntities
=
attendanceGroupStaffService
.
find
(
attendanceGroupStaffQuery
.
staffId
(
staffEntity
.
getId
()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if
(
StringUtils
.
isNotNull
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()==
1
){
//查询考勤组
AttendanceGroupQuery
attendanceGroupQuery
=
new
AttendanceGroupQuery
();
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
selectOne
(
attendanceGroupQuery
.
id
(
attendanceGroupStaffEntities
.
get
(
0
).
getGroupId
()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery
attendanceGroupFixedworkQuery
=
new
AttendanceGroupFixedworkQuery
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
attendanceGroupFixedworkQuery
.
groupId
(
attendanceGroupEntity
.
getId
()));
//判断当前考勤日期为周几
Date
attendanceDate1
=
attendanceDate
;
String
week
=
this
.
getWeek
(
attendanceDate1
);
//通过考勤日期的星期拿到班次id.
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//weekClassId为-1 则不在考勤
if
(
weekClassId
==-
1L
){
//跳过本次循环
continue
;
}
//获取班次信息
AttendanceClassQuery
attendanceClassQuery
=
new
AttendanceClassQuery
();
AttendanceClassEntity
attendanceClassEntity
=
attendanceClassService
.
selectOne
(
attendanceClassQuery
.
id
(
weekClassId
));
//获取班次详细信息
AttendanceClassDetailQuery
attendanceClassDetailQuery
=
new
AttendanceClassDetailQuery
();
List
<
AttendanceClassDetailEntity
>
attendanceClassDetailEntities
=
attendanceClassDetailService
.
find
(
attendanceClassDetailQuery
.
classId
(
attendanceClassEntity
.
getId
()));
Integer
orderNum
=
0
;
for
(
AttendanceClassDetailEntity
classDetailEntity
:
attendanceClassDetailEntities
)
{
orderNum
++;
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
setShiftsId
(
classDetailEntity
.
getId
());
recordDetailEntity
.
setShiftsName
(
classDetailEntity
.
getClassName
());
recordDetailEntity
.
setGoWorkResult
(
3
);
recordDetailEntity
.
setOffWorkResult
(
3
);
recordDetailEntity
.
setOrderNum
(
orderNum
);
detailEntity
.
add
(
recordDetailEntity
);
}
for
(
AttendanceClassDetailEntity
classDetail
:
attendanceClassDetailEntities
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
//上班打卡前时间
Date
goWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
-
classDetail
.
getGoWorkDateBefore
())));
//上班打卡后时间
Date
goWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
classDetail
.
getGoWorkDateAfter
())));
//下班打卡前时间
Date
offWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
-
classDetail
.
getOffWorkDateBefore
())));
//下班打卡后时间
Date
offWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
classDetail
.
getOffWorkDateAfter
())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean
goInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
goWorkDateAfter
);
//判断考勤时间是否在下班打卡区间内
boolean
offInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
offWorkDateBefore
,
offWorkDateAfter
);
if
(
goInTime
==
false
&&
offInTime
==
false
){
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡,判断是否迟到
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getGoWorkDate
())));
if
(!
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
4
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
1
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
}
if
(
offInTime
){
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getOffWorkDate
())),
offWorkDateAfter
);
if
(!
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
5
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
1
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
}
}
}
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if
(
StringUtils
.
isNotNull
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()>
1
){
for
(
AttendanceGroupStaffEntity
groupStaffEntity:
attendanceGroupStaffEntities
){
{
//查询考勤组
AttendanceGroupQuery
attendanceGroupQuery
=
new
AttendanceGroupQuery
();
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
selectOne
(
attendanceGroupQuery
.
id
(
groupStaffEntity
.
getGroupId
()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery
attendanceGroupFixedworkQuery
=
new
AttendanceGroupFixedworkQuery
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
attendanceGroupFixedworkQuery
.
groupId
(
attendanceGroupEntity
.
getId
()));
//判断当前考勤日期为周几
Date
attendanceDate1
=
attendanceDate
;
String
week
=
this
.
getWeek
(
attendanceDate1
);
//通过考勤日期的星期拿到班次id.
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//weekClassId为-1 则不在考勤
if
(
weekClassId
==-
1L
){
//跳过本次循环
continue
;
}
//获取班次信息
AttendanceClassQuery
attendanceClassQuery
=
new
AttendanceClassQuery
();
AttendanceClassEntity
attendanceClassEntity
=
attendanceClassService
.
selectOne
(
attendanceClassQuery
.
id
(
weekClassId
));
//获取班次详细信息
AttendanceClassDetailQuery
attendanceClassDetailQuery
=
new
AttendanceClassDetailQuery
();
List
<
AttendanceClassDetailEntity
>
attendanceClassDetailEntities
=
attendanceClassDetailService
.
find
(
attendanceClassDetailQuery
.
classId
(
attendanceClassEntity
.
getId
()));
Integer
orderNum
=
0
;
for
(
AttendanceClassDetailEntity
classDetailEntity
:
attendanceClassDetailEntities
)
{
orderNum
++;
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
setShiftsId
(
classDetailEntity
.
getId
());
recordDetailEntity
.
setShiftsName
(
classDetailEntity
.
getClassName
());
recordDetailEntity
.
setGoWorkResult
(
3
);
recordDetailEntity
.
setOffWorkResult
(
3
);
recordDetailEntity
.
setOrderNum
(
orderNum
);
detailEntity
.
add
(
recordDetailEntity
);
}
for
(
AttendanceClassDetailEntity
classDetail
:
attendanceClassDetailEntities
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"HH:mm"
);
//上班打卡前时间
Date
goWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
-
classDetail
.
getGoWorkDateBefore
())));
//上班打卡后时间
Date
goWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getGoWorkDate
(),
classDetail
.
getGoWorkDateAfter
())));
//下班打卡前时间
Date
offWorkDateBefore
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
-
classDetail
.
getOffWorkDateBefore
())));
//下班打卡后时间
Date
offWorkDateAfter
=
sdf
.
parse
(
sdf
.
format
(
DateUtils
.
addMinutes
(
classDetail
.
getOffWorkDate
(),
classDetail
.
getOffWorkDateAfter
())));
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean
goInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
goWorkDateAfter
);
//判断考勤时间是否在下班打卡区间内
boolean
offInTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
offWorkDateBefore
,
offWorkDateAfter
);
if
(
goInTime
==
false
&&
offInTime
==
false
){
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡,判断是否迟到
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
goWorkDateBefore
,
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getGoWorkDate
())));
if
(!
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
4
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setGoWorkResult
(
1
);
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
}
if
(
offInTime
){
boolean
inTime
=
isInTime
(
sdf
.
parse
(
sdf
.
format
(
attendanceDate
)),
sdf
.
parse
(
sdf
.
format
(
classDetail
.
getOffWorkDate
())),
offWorkDateAfter
);
if
(!
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
5
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
if
(
inTime
){
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntity
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
equals
(
classDetail
.
getClassId
())){
attendanceRecordDetailEntity
.
setOffWorkResult
(
1
);
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
}
}
}
}
}
}
List
<
AttendanceRecordErrorEntity
>
errorEntityList
=
new
ArrayList
<>();
for
(
AttendanceRecordDetailEntity
recordDetailEntity
:
detailEntity
)
{
Integer
goWorkResult
=
recordDetailEntity
.
getGoWorkResult
();
Integer
offWorkResult
=
recordDetailEntity
.
getOffWorkResult
();
if
(
goWorkResult
!=
1
){
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
errorEntity
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
errorEntity
.
setStaffName
(
attendanceRecordEntity
.
getStaffName
());
errorEntity
.
setWorkNum
(
attendanceRecordEntity
.
getWorkNum
());
errorEntity
.
setDeptId
(
attendanceRecordEntity
.
getDeptId
());
errorEntity
.
setDeptName
(
attendanceRecordEntity
.
getDeptName
());
errorEntity
.
setPositionId
(
attendanceRecordEntity
.
getPositionId
());
errorEntity
.
setPositionName
(
attendanceRecordEntity
.
getPositionName
());
errorEntity
.
setShiftsId
(
recordDetailEntity
.
getShiftsId
());
errorEntity
.
setShiftsName
(
recordDetailEntity
.
getShiftsName
());
errorEntity
.
setGoOffDateTime
(
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getGoWorkDate
());
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getGoWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getGoWorkDate
());
errorEntity
.
setErrorStatus
(
recordDetailEntity
.
getGoWorkResult
());
errorEntity
.
setProcessResult
(
"0"
);
IUser
user
=
getContext
().
getUser
();
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
user
.
getId
());
errorEntityList
.
add
(
errorEntity
);
}
if
(
offWorkResult
!=
1
){
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
errorEntity
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
errorEntity
.
setStaffName
(
attendanceRecordEntity
.
getStaffName
());
errorEntity
.
setWorkNum
(
attendanceRecordEntity
.
getWorkNum
());
errorEntity
.
setDeptId
(
attendanceRecordEntity
.
getDeptId
());
errorEntity
.
setDeptName
(
attendanceRecordEntity
.
getDeptName
());
errorEntity
.
setPositionId
(
attendanceRecordEntity
.
getPositionId
());
errorEntity
.
setPositionName
(
attendanceRecordEntity
.
getPositionName
());
errorEntity
.
setShiftsId
(
recordDetailEntity
.
getShiftsId
());
errorEntity
.
setShiftsName
(
recordDetailEntity
.
getShiftsName
());
errorEntity
.
setGoOffDateTime
(
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getOffWorkDate
());
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getOffWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getOffWorkDate
());
errorEntity
.
setErrorStatus
(
recordDetailEntity
.
getOffWorkResult
());
errorEntity
.
setProcessResult
(
"0"
);
IUser
user
=
getContext
().
getUser
();
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
user
.
getId
());
errorEntityList
.
add
(
errorEntity
);
}
}
if
(
errorEntityList
!=
null
&&
errorEntityList
.
size
()>
0
){
errorService
.
save
(
errorEntityList
);
}
attendanceRecordEntity
.
setAttendanceRecordDetailList
(
detailEntity
);
attendanceRecordService
.
save
(
attendanceRecordEntity
);
}
}
}
public
String
getWeek
(
Date
date
){
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"EEEE"
);
String
week
=
sdf
.
format
(
date
);
return
week
;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
* @return
*/
public
Long
getWeekClassId
(
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
,
String
week
){
Long
weekClassId
=
0L
;
switch
(
week
){
case
"星期一"
:
if
(
attendanceGroupFixedworkEntity
.
getMonday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getMondayClassId
();
break
;
case
"星期二"
:
if
(
attendanceGroupFixedworkEntity
.
getTuesday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getTuesdayClassId
();
break
;
case
"星期三"
:
if
(
attendanceGroupFixedworkEntity
.
getWednesday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getWednesdayClassId
();
break
;
case
"星期四"
:
if
(
attendanceGroupFixedworkEntity
.
getThursday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getThursdayClassId
();
break
;
case
"星期五"
:
if
(
attendanceGroupFixedworkEntity
.
getFriday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getFridayClassId
();
break
;
case
"星期六"
:
if
(
attendanceGroupFixedworkEntity
.
getSaturday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSaturdayClassId
();
break
;
case
"星期天"
:
if
(
attendanceGroupFixedworkEntity
.
getSunday
()==
0
){
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSundayClassId
();
break
;
}
return
weekClassId
;
}
/**
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
* 判断当前时间在时间区间内
*/
public
static
boolean
isInTime
(
Date
nowTime
,
Date
startTime
,
Date
endTime
)
{
if
(
nowTime
.
getTime
()
==
startTime
.
getTime
()
||
nowTime
.
getTime
()
==
endTime
.
getTime
())
{
return
true
;
}
}
Calendar
date
=
Calendar
.
getInstance
();
date
.
setTime
(
nowTime
);
Calendar
begin
=
Calendar
.
getInstance
();
this
.
init
(
model
,
context
);
begin
.
setTime
(
startTime
);
ret
.
setCode
(
code
);
ret
.
setMsg
(
model
.
get
(
"message_info"
)
==
null
?
""
:
model
.
remove
(
"message_info"
).
toString
());
return
ret
;
Calendar
end
=
Calendar
.
getInstance
();
end
.
setTime
(
endTime
);
if
(
date
.
after
(
begin
)
&&
date
.
before
(
end
))
{
return
true
;
}
else
{
return
false
;
}
}
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
View file @
b7455b29
package
com.mortals.xhx.module.attendance.web
;
package
com.mortals.xhx.module.attendance.web
;
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.module.attendance.model.AttendanceClassQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceGroupQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
com.mortals.xhx.module.attendance.service.AttendanceGroupService
;
import
com.mortals.xhx.module.dept.model.DeptQuery
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
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
;
...
@@ -36,14 +42,26 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
...
@@ -36,14 +42,26 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
@Autowired
@Autowired
private
ParamService
paramService
;
private
ParamService
paramService
;
@Autowired
private
AttendanceGroupService
attendanceGroupService
;
@Autowired
private
DeptService
deptService
;
@Autowired
private
AttendanceClassService
attendanceClassService
;
public
AttendanceStatController
(){
public
AttendanceStatController
(){
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
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getDeptName
())));
this
.
addDict
(
model
,
"groupId"
,
attendanceGroupService
.
find
(
new
AttendanceGroupQuery
()).
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getGroupName
())));
this
.
addDict
(
model
,
"classId"
,
attendanceClassService
.
find
(
new
AttendanceClassQuery
()).
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getClassName
())));
super
.
init
(
model
,
context
);
super
.
init
(
model
,
context
);
}
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/AbstractHikService.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik
;
import
com.hikvision.artemis.sdk.config.ArtemisConfig
;
import
org.springframework.beans.factory.annotation.Value
;
import
java.util.HashMap
;
import
java.util.Map
;
public
abstract
class
AbstractHikService
{
@Value
(
"${hik.host:''}"
)
protected
String
host
;
@Value
(
"${hik.appKey:''}"
)
protected
String
appKey
;
@Value
(
"${hik.appSecret:''}"
)
protected
String
appSecret
;
@Value
(
"${hik.protocol:http://}"
)
protected
String
protocol
;
public
String
ARTEMIS_PATH
=
"/artemis"
;
protected
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
protected
ArtemisConfig
getArtemisConfig
()
{
ArtemisConfig
config
=
new
ArtemisConfig
();
config
.
setHost
(
host
);
config
.
setAppKey
(
appKey
);
// 秘钥appkey
config
.
setAppSecret
(
appSecret
);
// 秘钥appSecret
return
config
;
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/BaseReq.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik
;
import
lombok.Data
;
/**
* 海康请求基础类
* @author:
* @date: 2023/4/12 17:57
*/
@Data
public
class
BaseReq
{
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/HikApiRest.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik
;
public
class
HikApiRest
<
T
>
{
private
T
data
;
private
String
code
;
private
String
msg
;
public
T
getData
()
{
return
data
;
}
public
void
setData
(
T
data
)
{
this
.
data
=
data
;
}
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/req/door/DoorEventReq.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.door.model.req.door
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
com.mortals.xhx.module.hik.BaseReq
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
@Data
public
class
DoorEventReq
extends
BaseReq
implements
Serializable
{
/**
* 当前页
*/
private
Integer
pageNo
;
/**
* 每页大小
*/
private
Integer
pageSize
;
private
String
doorName
;
private
String
sort
;
/**
* 事件类型,参考[附录D2.1 门禁事件]
* @[软件产品-综合安防管理平台-附录-附录D 事件列表-附录D2 一卡通事件-附录D2.1 门禁事件]
*/
private
List
<
Integer
>
eventTypes
;
private
List
<
String
>
readerDevIndexCodes
;
private
String
personName
;
private
String
doorRegionIndexCode
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
receiveStartTime
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
receiveEndTime
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
startTime
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
endTime
;
private
List
<
String
>
doorIndexCodes
;
private
String
order
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/rsp/door/DoorEventDataInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.door.model.rsp.door
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
DoorEventDataInfo
{
private
List
<
DoorEventInfo
>
list
;
private
Integer
total
;
private
Integer
totalPage
;
private
Integer
pageNo
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/model/rsp/door/DoorEventInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.door.model.rsp.door
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
DoorEventInfo
{
private
String
eventId
;
private
String
orgName
;
private
String
svrIndexCode
;
private
String
doorName
;
private
String
orgIndexCode
;
private
String
doorIndexCode
;
private
Integer
eventType
;
private
String
devIndexCode
;
private
String
identityCardUri
;
private
String
readerDevName
;
private
String
devName
;
private
String
cardNo
;
private
String
personName
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
receiveTime
;
private
String
studentId
;
private
String
readerDevIndexCode
;
private
String
certNo
;
private
String
doorRegionIndexCode
;
private
Integer
inAndOutType
;
private
String
picUri
;
private
String
jobNo
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
eventTime
;
private
String
eventName
;
private
String
personId
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/service/IHikDoorService.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.door.service
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq
;
import
com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo
;
/**
* 海康门禁接口对接类
*
* @author:
* @date: 2023/4/12 17:47
*/
public
interface
IHikDoorService
{
/**
* 获取门禁事件
*
* @author:
* @date: 2023/4/13 10:24
*/
Rest
<
DoorEventDataInfo
>
getDoorEvents
(
DoorEventReq
doorEventReq
);
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/door/service/impl/HikDoorServiceImpl.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.door.service.impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.hikvision.artemis.sdk.ArtemisHttpUtil
;
import
com.hikvision.artemis.sdk.config.ArtemisConfig
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.module.hik.AbstractHikService
;
import
com.mortals.xhx.module.hik.HikApiRest
;
import
com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq
;
import
com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo
;
import
com.mortals.xhx.module.hik.door.service.IHikDoorService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 海康人员接口类
*
* @author: zxfei
* @date: 2023/4/12 17:51
*/
@Service
(
"hikDoorService"
)
@Slf4j
public
class
HikDoorServiceImpl
extends
AbstractHikService
implements
IHikDoorService
{
@Override
public
Rest
<
DoorEventDataInfo
>
getDoorEvents
(
DoorEventReq
doorEventReq
)
{
ArtemisConfig
config
=
getArtemisConfig
();
String
getCamsApi
=
ARTEMIS_PATH
+
"/api/acs/v2/door/events"
;
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
path
.
put
(
protocol
,
getCamsApi
);
try
{
log
.
info
(
"door events req=>{}"
,
JSON
.
toJSONString
(
doorEventReq
));
String
respJson
=
ArtemisHttpUtil
.
doPostStringArtemis
(
config
,
path
,
JSON
.
toJSONString
(
doorEventReq
),
null
,
null
,
"application/json"
);
// log.info("door events error resp=>{}", respJson);
HikApiRest
<
DoorEventDataInfo
>
rest
=
JSON
.
parseObject
(
respJson
,
new
TypeReference
<
HikApiRest
<
DoorEventDataInfo
>>()
{
});
log
.
info
(
"door events resp=>{}"
,
rest
.
getCode
());
if
(
"0"
.
equals
(
rest
.
getCode
()))
{
return
Rest
.
ok
(
rest
.
getData
());
}
else
{
return
Rest
.
fail
(
rest
.
getMsg
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取门禁事件异常"
,
e
);
return
Rest
.
fail
(
e
.
getMessage
());
}
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/req/org/OrgListReq.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.req.org
;
import
lombok.Data
;
@Data
public
class
OrgListReq
{
private
String
orgName
;
private
String
orgIndexCodes
;
private
int
pageNo
;
private
int
pageSize
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/req/person/PersonReq.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.req.person
;
import
com.mortals.xhx.module.hik.BaseReq
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
PersonReq
extends
BaseReq
implements
Serializable
{
/**
* 当前页
*/
private
Integer
pageNo
;
/**
* 每页大小
*/
private
Integer
pageSize
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/org/OrgDataInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.rsp.org
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
OrgDataInfo
{
private
List
<
OrgInfo
>
list
;
private
Integer
total
;
private
Integer
totalPage
;
private
Integer
pageNo
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/org/OrgInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.rsp.org
;
import
lombok.Data
;
@Data
public
class
OrgInfo
{
private
String
orgName
;
private
String
orgNo
;
private
String
orgPath
;
private
String
parentOrgIndexCode
;
private
String
orgIndexCode
;
private
String
updateTime
;
private
String
parentOrgName
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonDataInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.rsp.person
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
PersonDataInfo
{
private
List
<
PersonInfo
>
list
;
private
Integer
total
;
private
Integer
totalPage
;
private
Integer
pageNo
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonInfo.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.rsp.person
;
import
com.alibaba.fastjson.annotation.JSONField
;
import
lombok.Data
;
import
java.util.Date
;
@Data
public
class
PersonInfo
{
private
int
gender
;
private
String
orgPath
;
private
String
orgPathName
;
private
String
orgIndexCode
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
updateTime
;
private
String
certificateNo
;
private
String
phoneNo
;
private
String
personName
;
private
PersonPhoto
personPhoto
;
@JSONField
(
format
=
"yyyy-MM-dd'T'HH:mm:ssXXX"
)
private
Date
createTime
;
private
String
jobNo
;
private
String
personId
;
private
int
certificateType
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/model/rsp/person/PersonPhoto.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.model.rsp.person
;
import
lombok.Data
;
@Data
public
class
PersonPhoto
{
private
String
personPhotoIndexCode
;
private
String
picUri
;
private
String
personId
;
private
String
serverIndexCode
;
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/service/IHikPersonService.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.service
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.module.hik.person.model.req.org.OrgListReq
;
import
com.mortals.xhx.module.hik.person.model.req.person.PersonReq
;
import
com.mortals.xhx.module.hik.person.model.rsp.org.OrgDataInfo
;
import
com.mortals.xhx.module.hik.person.model.rsp.person.PersonDataInfo
;
/**
* 海康人员接口对接类
*
* @author:
* @date: 2023/4/12 17:47
*/
public
interface
IHikPersonService
{
/**
* 获取人员接口
*
* @param personReq
* @return
*/
Rest
<
PersonDataInfo
>
getPersonList
(
PersonReq
personReq
);
/**
* 获取人员接口透传
*
* @param personReq
* @return
*/
String
getPersonListTrans
(
PersonReq
personReq
);
/**
* 获取组织接口
*
* @param orgListReq
* @return
*/
Rest
<
OrgDataInfo
>
getOrgList
(
OrgListReq
orgListReq
);
/**
* 透传原始数据
*
* @param orgListReq
* @return
*/
String
getOrgListTrans
(
OrgListReq
orgListReq
);
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/person/service/impl/HikPersonServiceImpl.java
0 → 100644
View file @
b7455b29
package
com.mortals.xhx.module.hik.person.service.impl
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.hikvision.artemis.sdk.ArtemisHttpUtil
;
import
com.hikvision.artemis.sdk.config.ArtemisConfig
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.xhx.module.hik.AbstractHikService
;
import
com.mortals.xhx.module.hik.HikApiRest
;
import
com.mortals.xhx.module.hik.person.model.req.org.OrgListReq
;
import
com.mortals.xhx.module.hik.person.model.req.person.PersonReq
;
import
com.mortals.xhx.module.hik.person.model.rsp.org.OrgDataInfo
;
import
com.mortals.xhx.module.hik.person.model.rsp.person.PersonDataInfo
;
import
com.mortals.xhx.module.hik.person.service.IHikPersonService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 海康人员接口类
*
* @author: zxfei
* @date: 2023/4/12 17:51
*/
@Service
(
"hikPersonService"
)
@Slf4j
public
class
HikPersonServiceImpl
extends
AbstractHikService
implements
IHikPersonService
{
@Override
public
Rest
<
PersonDataInfo
>
getPersonList
(
PersonReq
personReq
)
{
ArtemisConfig
config
=
getArtemisConfig
();
String
getCamsApi
=
ARTEMIS_PATH
+
"/api/resource/v1/person/personList"
;
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
path
.
put
(
protocol
,
getCamsApi
);
try
{
String
respJson
=
ArtemisHttpUtil
.
doPostStringArtemis
(
config
,
path
,
JSON
.
toJSONString
(
personReq
),
null
,
null
,
"application/json"
);
HikApiRest
<
PersonDataInfo
>
rest
=
JSON
.
parseObject
(
respJson
,
new
TypeReference
<
HikApiRest
<
PersonDataInfo
>>()
{
});
if
(
"0"
.
equals
(
rest
.
getCode
()))
{
return
Rest
.
ok
(
rest
.
getData
());
}
else
{
log
.
info
(
"person error resp=>{}"
,
respJson
);
return
Rest
.
fail
(
rest
.
getMsg
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取人员异常"
,
e
);
return
Rest
.
fail
(
e
.
getMessage
());
}
}
@Override
public
String
getPersonListTrans
(
PersonReq
personReq
)
{
ArtemisConfig
config
=
getArtemisConfig
();
String
getCamsApi
=
ARTEMIS_PATH
+
"/api/resource/v1/person/personList"
;
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
path
.
put
(
protocol
,
getCamsApi
);
try
{
return
ArtemisHttpUtil
.
doPostStringArtemis
(
config
,
path
,
JSON
.
toJSONString
(
personReq
),
null
,
null
,
"application/json"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"获取人员异常"
,
e
);
return
JSON
.
toJSONString
(
Rest
.
fail
(
e
.
getMessage
()));
}
}
@Override
public
Rest
<
OrgDataInfo
>
getOrgList
(
OrgListReq
orgListReq
)
{
ArtemisConfig
config
=
getArtemisConfig
();
String
getCamsApi
=
ARTEMIS_PATH
+
"/api/resource/v1/org/orgList"
;
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
path
.
put
(
protocol
,
getCamsApi
);
try
{
String
respJson
=
ArtemisHttpUtil
.
doPostStringArtemis
(
config
,
path
,
JSON
.
toJSONString
(
orgListReq
),
null
,
null
,
"application/json"
);
HikApiRest
<
OrgDataInfo
>
rest
=
JSON
.
parseObject
(
respJson
,
new
TypeReference
<
HikApiRest
<
OrgDataInfo
>>()
{
});
if
(
"0"
.
equals
(
rest
.
getCode
()))
{
return
Rest
.
ok
(
rest
.
getData
());
}
else
{
log
.
info
(
"org list error resp=>{}"
,
respJson
);
return
Rest
.
fail
(
rest
.
getMsg
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"org list error "
,
e
);
return
Rest
.
fail
(
e
.
getMessage
());
}
}
@Override
public
String
getOrgListTrans
(
OrgListReq
orgListReq
)
{
ArtemisConfig
config
=
getArtemisConfig
();
String
getCamsApi
=
ARTEMIS_PATH
+
"/api/resource/v1/org/orgList"
;
Map
<
String
,
String
>
path
=
new
HashMap
<>(
2
);
path
.
put
(
protocol
,
getCamsApi
);
try
{
return
ArtemisHttpUtil
.
doPostStringArtemis
(
config
,
path
,
JSON
.
toJSONString
(
orgListReq
),
null
,
null
,
"application/json"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"org list error "
,
e
);
return
JSON
.
toJSONString
(
Rest
.
fail
(
e
.
getMessage
()));
}
}
}
attendance-performance-manager/src/main/resources/bootstrap.yml
View file @
b7455b29
...
@@ -56,7 +56,6 @@ hystrix:
...
@@ -56,7 +56,6 @@ hystrix:
sms
:
sms
:
smsSendUrl
:
@
profiles.sms.smsSendUrl@
smsSendUrl
:
@
profiles.sms.smsSendUrl@
apiId
:
@
profiles.sms.apiId@
apiId
:
@
profiles.sms.apiId@
type
:
@
profiles.sms.type@
hik
:
hik
:
host
:
@
profiles.hik.host@
host
:
@
profiles.hik.host@
appKey
:
@
profiles.hik.appKey@
appKey
:
@
profiles.hik.appKey@
...
...
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