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
8b0d63ed
Commit
8b0d63ed
authored
Jul 25, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改考勤汇总
parent
4ab7b745
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
598 additions
and
189 deletions
+598
-189
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java
.../mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java
+173
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
...a/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
+17
-31
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceStatEntity.java
...als/xhx/module/attendance/model/AttendanceStatEntity.java
+12
-3
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
...module/attendance/service/AttendanceRecordHikService.java
+22
-3
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+292
-73
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
.../module/attendance/web/AttendanceRecordHikController.java
+1
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java
.../mortals/xhx/module/dept/model/DeptPerformStatEntity.java
+75
-77
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java
...xhx/module/perform/web/PerformAttendAppealController.java
+6
-1
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventAfterTaskImpl.java
0 → 100644
View file @
8b0d63ed
package
com.mortals.xhx.daemon.task
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.PageUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.ITask
;
import
com.mortals.framework.service.ITaskExcuteService
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.xhx.base.system.user.model.UserEntity
;
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.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
/**
* 同步获取下午海康门禁事件
*/
@Slf4j
@Service
(
"SyncDoorsEventAfterTask"
)
public
class
SyncDoorsEventAfterTaskImpl
implements
ITaskExcuteService
{
@Autowired
private
AttendanceRecordHikService
recordHikService
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
IHikDoorService
hikDoorService
;
@Override
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
syncDoorEvents
();
calculateAttendByDay
();
}
private
void
calculateAttendByDay
()
{
Context
context
=
new
Context
();
UserEntity
userEntity
=
new
UserEntity
();
userEntity
.
setCreateUserId
(
1L
);
userEntity
.
setCreateUserName
(
"system"
);
userEntity
.
setCreateTime
(
new
Date
());
context
.
setUser
(
userEntity
);
AttendanceRecordHikQuery
recordHikEntity
=
new
AttendanceRecordHikQuery
();
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity
.
setAttendanceDateStart
(
DateUtil
.
offsetHour
(
new
Date
(),
-
5
).
toString
());
recordHikEntity
.
setAttendanceDateEnd
(
DateUtils
.
getCurrStrDate
());
try
{
recordHikService
.
addAttendanceRecordByQuery
(
recordHikEntity
,
context
);
}
catch
(
Exception
e
)
{
log
.
error
(
"计算考勤异常"
,
e
);
}
}
private
void
syncDoorEvents
()
{
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
.
offsetHour
(
new
Date
(),
-
5
).
toJdkDate
();
// 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
(
StrUtil
.
padPre
(
item
.
getJobNo
(),
8
,
"0"
));
if
(
ObjectUtils
.
isEmpty
(
staffCache
))
{
log
.
info
(
"staff is null !staffCode:{}"
,
item
.
getJobNo
());
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
(
"系统管理员"
);
recordHikEntity
.
setCreateUserId
(
1L
);
return
recordHikEntity
;
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
log
.
info
(
"attRecords size:{}"
,
attRecords
.
size
());
List
<
String
>
eventIds
=
attRecords
.
parallelStream
().
filter
(
f
->
!
ObjectUtils
.
isEmpty
(
f
)
&&
!
ObjectUtils
.
isEmpty
(
f
.
getRemark
())).
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
))
{
//单个插入 去掉重复时间段的打卡记录
for
(
AttendanceRecordHikEntity
recordHikEntity
:
saveRecordList
)
{
try
{
recordHikService
.
save
(
recordHikEntity
);
}
catch
(
Exception
e
)
{
log
.
error
(
"基础考勤数据保存异常"
,
e
.
getMessage
());
}
}
// recordHikService.save(saveRecordList);
}
log
.
info
(
"saveRecordList size:{}"
,
saveRecordList
.
size
());
}
@Override
public
void
stopTask
(
ITask
task
)
throws
AppException
{
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
View file @
8b0d63ed
package
com.mortals.xhx.daemon.task
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.PageUtil
;
import
cn.hutool.core.util.StrUtil
;
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.model.Context
;
...
...
@@ -23,12 +20,10 @@ 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
;
...
...
@@ -68,12 +63,12 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
context
.
setUser
(
userEntity
);
AttendanceRecordHikQuery
recordHikEntity
=
new
AttendanceRecordHikQuery
();
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity
.
setAttendanceDateStart
(
DateUtil
.
offsetHour
(
new
Date
(),
-
5
).
toString
());
recordHikEntity
.
setAttendanceDateEnd
(
DateUtils
.
getCurrStrDate
());
try
{
recordHikService
.
addAttendanceRecord
(
recordHikEntity
,
context
);
recordHikService
.
addAttendanceRecord
ByQuery
(
recordHikEntity
,
context
);
}
catch
(
Exception
e
)
{
log
.
error
(
"计算考勤异常"
,
e
);
}
...
...
@@ -92,7 +87,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
doorEventReq
.
setEventTypes
(
eventTypes
);
// 获取当天的开始时间
Date
todayStart
=
DateUtil
.
offsetHour
(
new
Date
(),
-
5
).
toJdkDate
();
// Date todayStart = DateUtil.beginOfDay(new Date());
// Date todayStart = DateUtil.beginOfDay(new Date());
// 获取当天的结束时间
Date
todayEnd
=
DateUtil
.
endOfDay
(
new
Date
());
doorEventReq
.
setStartTime
(
todayStart
);
...
...
@@ -123,7 +118,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity
.
initAttrValue
();
StaffEntity
staffCache
=
staffService
.
getExtCache
(
StrUtil
.
padPre
(
item
.
getJobNo
(),
8
,
"0"
));
if
(
ObjectUtils
.
isEmpty
(
staffCache
))
{
log
.
info
(
"staff is null !staffCode:{}"
,
item
.
getJobNo
());
log
.
info
(
"staff is null !staffCode:{}"
,
item
.
getJobNo
());
return
null
;
}
...
...
@@ -140,13 +135,11 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity
.
setEventSource
(
"门禁点"
);
recordHikEntity
.
setRemark
(
item
.
getEventId
());
recordHikEntity
.
setCreateTime
(
new
Date
());
recordHikEntity
.
setCreateUserName
(
"
system
"
);
recordHikEntity
.
setCreateUserName
(
"
系统管理员
"
);
recordHikEntity
.
setCreateUserId
(
1L
);
return
recordHikEntity
;
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
log
.
info
(
"attRecords size:{}"
,
attRecords
.
size
());
List
<
String
>
eventIds
=
attRecords
.
parallelStream
().
filter
(
f
->
!
ObjectUtils
.
isEmpty
(
f
)
&&
!
ObjectUtils
.
isEmpty
(
f
.
getRemark
())).
map
(
i
->
i
.
getRemark
()).
collect
(
Collectors
.
toList
());
//查询当天考勤记录是否有重复的 有的 则不添加
...
...
@@ -156,9 +149,18 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
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
);
//单个插入 去掉重复时间段的打卡记录
for
(
AttendanceRecordHikEntity
recordHikEntity
:
saveRecordList
)
{
try
{
recordHikService
.
save
(
recordHikEntity
);
}
catch
(
Exception
e
)
{
log
.
error
(
"基础考勤数据保存异常"
,
e
.
getMessage
());
}
}
// recordHikService.save(saveRecordList);
}
log
.
info
(
"saveRecordList size:{}"
,
saveRecordList
.
size
());
}
...
...
@@ -168,20 +170,4 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
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/module/attendance/model/AttendanceStatEntity.java
View file @
8b0d63ed
package
com.mortals.xhx.module.attendance.model
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.ArrayList
;
import
cn.hutool.core.date.DateUtil
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.mortals.framework.annotation.Excel
;
import
com.mortals.framework.model.BaseEntityLong
;
...
...
@@ -29,6 +32,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/**
* 员工姓名
*/
@Excel
(
name
=
"员工姓名"
)
private
String
staffName
;
/**
* 所属部门
...
...
@@ -37,6 +41,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/**
* 所属部门名称
*/
@Excel
(
name
=
"部门名称"
)
private
String
deptName
;
/**
* 回单位(天)
...
...
@@ -312,11 +317,11 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this
.
earlyLeaveMeeting
=
BigDecimal
.
valueOf
(
0
);
this
.
year
=
-
1
;
this
.
year
=
DateUtil
.
year
(
new
Date
())
;
this
.
month
=
-
1
;
this
.
month
=
DateUtil
.
month
(
new
Date
())+
1
;
this
.
day
=
-
1
;
this
.
day
=
DateUtil
.
dayOfMonth
(
new
Date
())
;
this
.
remark
=
""
;
...
...
@@ -338,4 +343,8 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this
.
afternoonTimes
=
0
;
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
DateUtil
.
dayOfMonth
(
new
Date
()));
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
View file @
8b0d63ed
...
...
@@ -4,6 +4,8 @@ import com.mortals.framework.service.ICRUDService;
import
com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
java.util.List
;
/**
* AttendanceRecordHikService
*
...
...
@@ -17,9 +19,26 @@ public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecor
AttendanceRecordHikDao
getDao
();
/**
* 将原始数据导入打卡记录表
* @param entity
* 根据查询条件生成打卡记录
* @param attendanceRecordHikQuery
*/
void
addAttendanceRecordByQuery
(
AttendanceRecordHikEntity
attendanceRecordHikQuery
,
Context
context
)
throws
Exception
;
/**
* 根据查询条件生成打卡记录
* @param hikEntity
*/
void
addAttendanceRecord
(
AttendanceRecordHikEntity
entity
,
Context
context
)
throws
Exception
;
void
addAttendanceRecord
(
AttendanceRecordHikEntity
hikEntity
,
Context
context
)
throws
Exception
;
/**
* 根据查原始记录列表生成打卡记录
* @param hikEntityList
*/
void
addAttendanceRecordList
(
List
<
AttendanceRecordHikEntity
>
hikEntityList
,
Context
context
)
throws
Exception
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
8b0d63ed
...
...
@@ -6,6 +6,7 @@ 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.common.code.*
;
import
com.mortals.xhx.common.utils.BeanUtil
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.*
;
import
com.mortals.xhx.module.dept.service.DeptService
;
...
...
@@ -14,6 +15,7 @@ import com.mortals.xhx.module.staff.model.StaffQuery;
import
com.mortals.xhx.module.staff.service.StaffService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
...
...
@@ -60,16 +62,200 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
@Autowired
private
AttendanceRecordErrorService
errorService
;
@Override
public
void
addAttendanceRecord
(
AttendanceRecordHikEntity
entity
,
Context
context
)
throws
Exception
{
public
void
addAttendanceRecord
(
AttendanceRecordHikEntity
hikEntity
,
Context
context
)
throws
Exception
{
List
<
AttendanceRecordHikEntity
>
hikEntityList
=
new
ArrayList
<>();
addAttendanceRecordList
(
hikEntityList
,
context
);
}
List
<
AttendanceRecordHikEntity
>
hikEntityList
=
attendanceRecordHikService
.
find
(
entity
);
@Override
public
void
addAttendanceRecordByQuery
(
AttendanceRecordHikEntity
attendanceRecordHikQuery
,
Context
context
)
throws
Exception
{
List
<
AttendanceRecordHikEntity
>
hikEntityList
=
attendanceRecordHikService
.
find
(
attendanceRecordHikQuery
);
addAttendanceRecordList
(
hikEntityList
,
context
);
}
public
void
addAttendanceRecordList
(
List
<
AttendanceRecordHikEntity
>
hikEntityList
,
Context
context
)
throws
Exception
{
//对考勤数据根据考勤时间进行排序
List
<
AttendanceRecordHikEntity
>
collect
=
hikEntityList
.
stream
().
sorted
(
Comparator
.
comparing
(
AttendanceRecordHikEntity:
:
getAttendanceDate
)).
collect
(
Collectors
.
toList
());
//根据工号对考勤数据进行分组
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
listMap
=
collect
.
stream
().
collect
(
Collectors
.
groupingBy
(
AttendanceRecordHikEntity:
:
getWorkNum
));
//Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd"))));
//map遍历.先把所有键取出来
for
(
Map
.
Entry
<
String
,
List
<
AttendanceRecordHikEntity
>>
itemEntry
:
listMap
.
entrySet
())
{
String
workNum
=
itemEntry
.
getKey
();
List
<
AttendanceRecordHikEntity
>
recordHikEntityList
=
itemEntry
.
getValue
();
//对按照工号分组了的数据recordHikEntityList进行时间分组
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map
<
String
,
List
<
AttendanceRecordHikEntity
>>
dateRecordMap
=
recordHikEntityList
.
stream
().
collect
(
Collectors
.
groupingBy
(
hikEntity
->
DateUtil
.
formatDate
(
hikEntity
.
getAttendanceDate
())));
for
(
Map
.
Entry
<
String
,
List
<
AttendanceRecordHikEntity
>>
dateEntry
:
dateRecordMap
.
entrySet
())
{
String
dateStr
=
dateEntry
.
getKey
();
List
<
AttendanceRecordHikEntity
>
attendanceRecordHikEntities
=
dateEntry
.
getValue
();
//对相同工号的人员进行遍历判断考勤规则
AttendanceRecordEntity
attendanceRecordEntity
=
new
AttendanceRecordEntity
();
attendanceRecordEntity
.
initAttrValue
();
List
<
AttendanceRecordDetailEntity
>
detailEntityList
=
new
ArrayList
<>();
for
(
AttendanceRecordHikEntity
item
:
attendanceRecordHikEntities
)
{
//对主表的对象进行赋值
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
());
attendanceRecordEntity
.
setAttendanceDate
(
item
.
getAttendanceDate
());
attendanceRecordEntity
.
setCreateTime
(
new
Date
());
attendanceRecordEntity
.
setCreateUserId
(
this
.
getContextUserId
(
context
));
//获取考勤打卡时间
Date
attendanceDate
=
item
.
getAttendanceDate
();
//通过工号查询员工信息
StaffEntity
staffEntity
=
staffService
.
getExtCache
(
StrUtil
.
padPre
(
item
.
getWorkNum
(),
8
,
"0"
));
if
(
ObjectUtils
.
isEmpty
(
staffEntity
))
{
log
.
info
(
"staffEntity is null ,workNum:{}"
,
StrUtil
.
padPre
(
item
.
getWorkNum
(),
8
,
"0"
));
continue
;
}
//通过员工id查询考勤组人员信息
List
<
AttendanceGroupStaffEntity
>
attendanceGroupStaffEntities
=
attendanceGroupStaffService
.
find
(
new
AttendanceGroupStaffQuery
().
staffId
(
staffEntity
.
getId
()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if
(!
ObjectUtils
.
isEmpty
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()
==
1
)
checkAttendGroupByOne
(
attendanceRecordEntity
,
detailEntityList
,
attendanceDate
,
attendanceGroupStaffEntities
.
get
(
0
),
context
);
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if
(
StringUtils
.
isNotNull
(
attendanceGroupStaffEntities
)
&&
attendanceGroupStaffEntities
.
size
()
>
1
)
{
for
(
AttendanceGroupStaffEntity
groupStaffEntity
:
attendanceGroupStaffEntities
)
{
//多考勤组 todo 暂时和单一覆盖
checkAttendGroupByOne
(
attendanceRecordEntity
,
detailEntityList
,
attendanceDate
,
groupStaffEntity
,
context
);
}
}
}
//处理异常打卡,所以异常打卡的 都新增一条记录
List
<
AttendanceRecordErrorEntity
>
errorEntityList
=
new
ArrayList
<>();
for
(
AttendanceRecordDetailEntity
recordDetailEntity
:
detailEntityList
)
{
//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
(
GoWorkResultEnum
.
正常
.
getValue
()
!=
goWorkResult
)
{
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
BeanUtils
.
copyProperties
(
attendanceRecordEntity
,
errorEntity
,
new
String
[]{
"id"
});
Date
goWorkDate
=
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getGoWorkDate
();
errorEntity
.
setGoOffDateTime
(
goWorkDate
);
if
(!
ObjectUtils
.
isEmpty
(
recordDetailEntity
.
getGoWorkDate
()))
{
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getGoWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getGoWorkDate
());
}
else
{
errorEntity
.
setErrorDateTime
(
goWorkDate
);
}
if
(
GoWorkResultEnum
.
早退
.
getValue
()
==
recordDetailEntity
.
getGoWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
早退
.
getValue
());
}
if
(
GoWorkResultEnum
.
迟到
.
getValue
()
==
recordDetailEntity
.
getGoWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
迟到
.
getValue
());
}
if
(
GoWorkResultEnum
.
缺卡
.
getValue
()
==
recordDetailEntity
.
getGoWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
缺卡
.
getValue
());
}
errorEntity
.
setProcessStatus
(
YesNoEnum
.
NO
.
getValue
());
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
this
.
getContextUserId
(
context
));
errorEntityList
.
add
(
errorEntity
);
}
//判断下班
if
(
OffWorkResultEnum
.
正常
.
getValue
()
!=
offWorkResult
)
{
AttendanceRecordErrorEntity
errorEntity
=
new
AttendanceRecordErrorEntity
();
errorEntity
.
initAttrValue
();
BeanUtils
.
copyProperties
(
attendanceRecordEntity
,
errorEntity
,
new
String
[]{
"id"
});
Date
offWorkDate
=
attendanceClassDetailService
.
selectOne
(
new
AttendanceClassDetailQuery
().
id
(
recordDetailEntity
.
getShiftsId
())).
getOffWorkDate
();
errorEntity
.
setGoOffDateTime
(
offWorkDate
);
if
(!
ObjectUtils
.
isEmpty
(
recordDetailEntity
.
getGoWorkDate
()))
{
errorEntity
.
setErrorDateTime
(
recordDetailEntity
.
getGoWorkDate
());
errorEntity
.
setActualAttendanceDateTime
(
recordDetailEntity
.
getGoWorkDate
());
}
else
{
errorEntity
.
setErrorDateTime
(
offWorkDate
);
}
if
(
OffWorkResultEnum
.
缺卡
.
getValue
()
==
recordDetailEntity
.
getOffWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
缺卡
.
getValue
());
}
if
(
OffWorkResultEnum
.
早退
.
getValue
()
==
recordDetailEntity
.
getOffWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
早退
.
getValue
());
}
if
(
OffWorkResultEnum
.
迟到
.
getValue
()
==
recordDetailEntity
.
getOffWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
迟到
.
getValue
());
}
errorEntity
.
setProcessStatus
(
YesNoEnum
.
NO
.
getValue
());
errorEntity
.
setCreateTime
(
new
Date
());
errorEntity
.
setCreateUserId
(
this
.
getContextUserId
(
context
));
errorEntityList
.
add
(
errorEntity
);
}
}
if
(!
ObjectUtils
.
isEmpty
(
detailEntityList
))
{
if
(!
ObjectUtils
.
isEmpty
(
detailEntityList
))
{
errorService
.
save
(
errorEntityList
,
context
);
}
attendanceRecordEntity
.
setShiftsName
(
detailEntityList
.
get
(
0
).
getShiftsName
());
attendanceRecordEntity
.
setShiftsId
(
detailEntityList
.
get
(
0
).
getShiftsId
());
attendanceRecordEntity
.
setAttendanceRecordDetailList
(
detailEntityList
);
//判断签到 只要存在一次正常打卡详细记录 就判断签到
for
(
AttendanceRecordDetailEntity
detailEntity
:
detailEntityList
)
{
if
(
GoWorkResultEnum
.
正常
.
getValue
()
==
detailEntity
.
getGoWorkResult
()
||
GoWorkResultEnum
.
迟到
.
getValue
()
==
detailEntity
.
getOffWorkResult
())
{
attendanceRecordEntity
.
setSignInResult
(
YesNoEnum
.
YES
.
getValue
());
break
;
}
}
for
(
AttendanceRecordDetailEntity
detailEntity
:
detailEntityList
)
{
if
(
OffWorkResultEnum
.
正常
.
getValue
()
==
detailEntity
.
getOffWorkResult
()
||
OffWorkResultEnum
.
早退
.
getValue
()
==
detailEntity
.
getOffWorkResult
())
{
attendanceRecordEntity
.
setSignOutResult
(
YesNoEnum
.
YES
.
getValue
());
break
;
}
}
for
(
AttendanceRecordDetailEntity
detailEntity
:
detailEntityList
)
{
if
(
OffWorkResultEnum
.
缺卡
.
getValue
()
==
detailEntity
.
getOffWorkResult
())
{
attendanceRecordEntity
.
setPunchResult
(
YesNoEnum
.
NO
.
getValue
());
break
;
}
if
(
OffWorkResultEnum
.
缺卡
.
getValue
()
==
detailEntity
.
getOffWorkResult
())
{
attendanceRecordEntity
.
setPunchResult
(
YesNoEnum
.
NO
.
getValue
());
break
;
}
}
if
(
YesNoEnum
.
YES
.
getValue
()
==
attendanceRecordEntity
.
getSignInResult
()
&&
YesNoEnum
.
YES
.
getValue
()
==
attendanceRecordEntity
.
getSignOutResult
())
{
attendanceRecordEntity
.
setPunchResult
(
YesNoEnum
.
YES
.
getValue
());
}
attendanceRecordEntity
.
setAttendType
(
"现场打卡"
);
//判断是否存在记录 如果存在 则更新 维度 staffId attendanceDate shiftsId attendanceGroupId
AttendanceRecordQuery
query
=
new
AttendanceRecordQuery
();
query
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
query
.
setShiftsId
(
attendanceRecordEntity
.
getShiftsId
());
query
.
setAttendanceGroupId
(
attendanceRecordEntity
.
getAttendanceGroupId
());
query
.
setAttendanceDate
(
attendanceRecordEntity
.
getAttendanceDate
());
AttendanceRecordEntity
recordEntity
=
attendanceRecordService
.
selectOne
(
query
);
if
(!
ObjectUtils
.
isEmpty
(
recordEntity
))
{
attendanceRecordEntity
.
setId
(
recordEntity
.
getId
());
attendanceRecordEntity
.
setUpdateTime
(
new
Date
());
attendanceRecordEntity
.
setUpdateUserId
(
this
.
getContextUserId
(
context
));
attendanceRecordService
.
update
(
attendanceRecordEntity
,
context
);
}
else
{
attendanceRecordService
.
save
(
attendanceRecordEntity
,
context
);
}
}
}
}
/* //map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
//根据键取出value
for (String workNum : workNumSet) {
...
...
@@ -119,7 +305,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity.getGroupName());
//log.info("attendanceGroupEntity.getId()=={}", attendanceGroupEntity.getId());
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
...
...
@@ -455,17 +640,117 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordService.save(attendanceRecordEntity, context);
}
}
}
}*/
}
private
void
checkAttendGroupByOne
(
AttendanceRecordEntity
attendanceRecordEntity
,
List
<
AttendanceRecordDetailEntity
>
detailEntityList
,
Date
attendanceDate
,
AttendanceGroupStaffEntity
attendanceGroupStaffEntity
,
Context
context
)
{
//查询考勤组
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
get
(
attendanceGroupStaffEntity
.
getGroupId
(),
context
);
attendanceRecordEntity
.
setAttendanceGroupId
(
attendanceGroupEntity
==
null
?
0L
:
attendanceGroupEntity
.
getId
());
attendanceRecordEntity
.
setAttendanceGroupName
(
attendanceGroupEntity
==
null
?
""
:
attendanceGroupEntity
.
getGroupName
());
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
new
AttendanceGroupFixedworkQuery
()
.
groupId
(
attendanceGroupEntity
.
getId
()));
//判断当前考勤日期为周几
String
week
=
this
.
getWeek
(
attendanceDate
);
//log.info("week:{}", week);
//通过考勤日期的星期拿到班次id.
if
(
ObjectUtils
.
isEmpty
(
attendanceGroupFixedworkEntity
))
{
log
.
info
(
"attendanceGroupFixedworkEntity is null ! groupId:{}"
,
attendanceGroupEntity
.
getId
());
return
;
}
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//log.info("weekClassId:{}", weekClassId);
//weekClassId为-1 则不在考勤
if
(
weekClassId
==
-
1L
)
{
//跳过本次循环
return
;
}
//获取班次信息
AttendanceClassEntity
attendanceClassEntity
=
attendanceClassService
.
get
(
weekClassId
);
if
(
ObjectUtils
.
isEmpty
(
attendanceClassEntity
))
{
log
.
info
(
"attendanceClassEntity is null ,weekClassId:{}"
,
weekClassId
);
return
;
}
//获取班次详细信息
List
<
AttendanceClassDetailEntity
>
attendanceClassDetailEntities
=
attendanceClassDetailService
.
find
(
new
AttendanceClassDetailQuery
().
classId
(
attendanceClassEntity
.
getId
()));
Integer
orderNum
=
0
;
//构造数据
if
(
ObjectUtils
.
isEmpty
(
detailEntityList
))
{
for
(
AttendanceClassDetailEntity
classDetailEntity
:
attendanceClassDetailEntities
)
{
orderNum
++;
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
setShiftsId
(
classDetailEntity
.
getId
());
recordDetailEntity
.
setShiftsName
(
classDetailEntity
.
getClassName
());
recordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
缺卡
.
getValue
());
recordDetailEntity
.
setOffWorkResult
(
GoWorkResultEnum
.
缺卡
.
getValue
());
recordDetailEntity
.
setOrderNum
(
orderNum
);
detailEntityList
.
add
(
recordDetailEntity
);
}
}
for
(
AttendanceClassDetailEntity
classDetail
:
attendanceClassDetailEntities
)
{
//计算区间范围
//上班打卡前时间
Date
goWorkDateBefore
=
DateUtil
.
offsetMinute
(
classDetail
.
getGoWorkDate
(),
-
classDetail
.
getGoWorkDateBefore
());
//上班打卡后时间
Date
goWorkDateAfter
=
DateUtil
.
offsetMinute
(
classDetail
.
getGoWorkDate
(),
classDetail
.
getGoWorkDateAfter
());
// 下班打卡前时间
Date
offWorkDateBefore
=
DateUtil
.
offsetMinute
(
classDetail
.
getOffWorkDate
(),
-
classDetail
.
getOffWorkDateBefore
());
//下班打卡后时间
Date
offWorkDateAfter
=
DateUtil
.
offsetMinute
(
classDetail
.
getOffWorkDate
(),
classDetail
.
getOffWorkDateAfter
());
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean
goInTime
=
DateUtil
.
isIn
(
attendanceDate
,
goWorkDateBefore
,
goWorkDateAfter
);
//判断考勤时间是否在下班打卡区间内
boolean
offInTime
=
DateUtil
.
isIn
(
attendanceDate
,
offWorkDateBefore
,
offWorkDateAfter
);
if
(
goInTime
==
false
&&
offInTime
==
false
)
{
log
.
info
(
"考勤时间不在上班区间与下班区间中,不做处理!attendDate:{}"
,
DateUtil
.
formatDateTime
(
attendanceDate
));
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡区间范围,判断是否迟到
boolean
inTime
=
DateUtil
.
isIn
(
attendanceDate
,
goWorkDateBefore
,
classDetail
.
getGoWorkDate
());
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntityList
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getClassId
())
{
attendanceRecordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
正常
.
getValue
());
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
else
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntityList
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getClassId
())
{
attendanceRecordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
迟到
.
getValue
());
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
}
if
(
offInTime
)
{
boolean
inTime
=
DateUtil
.
isIn
(
attendanceDate
,
classDetail
.
getOffWorkDate
(),
offWorkDateAfter
);
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntityList
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()
==
classDetail
.
getId
().
longValue
())
{
attendanceRecordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
正常
.
getValue
());
attendanceRecordDetailEntity
.
setGoWorkDate
(
attendanceDate
);
}
}
}
else
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
detailEntityList
)
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
().
longValue
()
==
classDetail
.
getId
().
longValue
())
{
attendanceRecordDetailEntity
.
setOffWorkResult
(
GoWorkResultEnum
.
早退
.
getValue
());
attendanceRecordDetailEntity
.
setOffWorkDate
(
attendanceDate
);
}
}
}
}
}
}
public
String
getWeek
(
Date
date
)
{
public
String
getWeek
(
Date
date
)
{
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int
dayOfWeek
=
DateUtil
.
dayOfWeek
(
date
);
// Map the numeric day of the week to its corresponding Chinese name
String
[]
dayOfWeekNames
=
new
String
[]{
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
...
...
@@ -473,74 +758,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
// Get the Chinese name of the day of the week
String
dayOfWeekName
=
dayOfWeekNames
[
dayOfWeek
-
1
];
return
dayOfWeekName
;
//
// 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;
}*/
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
*
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
View file @
8b0d63ed
...
...
@@ -127,7 +127,7 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
if
(
ObjectUtils
.
isEmpty
(
hikEntity
.
getAttendanceDateStart
()))
{
throw
new
AppException
(
"请选择开始日期"
);
}
hikService
.
addAttendanceRecord
(
hikEntity
,
getContext
());
hikService
.
addAttendanceRecord
ByQuery
(
hikEntity
,
getContext
());
model
.
put
(
"message_info"
,
busiDesc
+
"成功"
);
this
.
recordSysLog
(
this
.
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/dept/model/DeptPerformStatEntity.java
View file @
8b0d63ed
package
com.mortals.xhx.module.dept.model
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.ArrayList
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
java.util.Date
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.framework.annotation.Excel
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.xhx.module.dept.model.vo.DeptPerformStatVo
;
import
lombok.Data
;
/**
* 部门绩效分数统计实体对象
*
* @author zxfei
* @date 2023-07-14
*/
* 部门绩效分数统计实体对象
*
* @author zxfei
* @date 2023-07-20
*/
@Data
public
class
DeptPerformStatEntity
extends
DeptPerformStatVo
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 部门id号
*/
* 部门id号
*/
private
Long
deptId
;
/**
* 部门名称
*/
* 部门名称
*/
private
String
deptName
;
/**
* 部门绩效总分数
*/
* 部门绩效总分数
*/
@Excel
(
name
=
"部门绩效总分数"
)
private
BigDecimal
totalScore
;
/**
* 部门绩效加分总分数汇总
*/
* 部门绩效加分总分数汇总
*/
@Excel
(
name
=
"部门绩效加分总分数汇总"
)
private
BigDecimal
totalAddScore
;
/**
* 部门绩效减分总分数汇总
*/
* 部门绩效减分总分数汇总
*/
@Excel
(
name
=
"部门绩效减分总分数汇总"
)
private
BigDecimal
totalSubScore
;
/**
* 考勤绩效指标增加分数
*/
* 考勤绩效指标增加分数
*/
private
BigDecimal
attendScoreAdd
;
/**
* 考勤绩效指标扣减分数
*/
* 考勤绩效指标扣减分数
*/
private
BigDecimal
attendScoreSub
;
/**
* 评价绩效指标增加分数
*/
* 评价绩效指标增加分数
*/
private
BigDecimal
reviewScoreAdd
;
/**
* 评价绩效指标扣减分数
*/
* 评价绩效指标扣减分数
*/
private
BigDecimal
reviewScoreSub
;
/**
* 投诉绩效指标增加分数
*/
* 投诉绩效指标增加分数
*/
private
BigDecimal
complainScoreAdd
;
/**
* 投诉绩效指标扣减分数
*/
* 投诉绩效指标扣减分数
*/
private
BigDecimal
complainScoreSub
;
/**
* 办件绩效指标增加分数
*/
* 办件绩效指标增加分数
*/
private
BigDecimal
goworkScoreAdd
;
/**
* 办件绩效指标扣减分数
*/
* 办件绩效指标扣减分数
*/
private
BigDecimal
goworkScoreSub
;
/**
* 效能绩效指标增加分数
*/
* 效能绩效指标增加分数
*/
private
BigDecimal
effectScoreAdd
;
/**
* 效能绩效指标扣减分数
*/
* 效能绩效指标扣减分数
*/
private
BigDecimal
effectScoreSub
;
/**
* 其它绩效指标增加分数
*/
* 其它绩效指标增加分数
*/
private
BigDecimal
otherScoreAdd
;
/**
* 其它绩效指标扣减分数
*/
* 其它绩效指标扣减分数
*/
private
BigDecimal
otherScoreSub
;
/**
* 部门绩效平均分数,根据部门所属人数平均
*/
* 部门绩效平均分数,根据部门所属人数平均
*/
@Excel
(
name
=
"部门绩效平均分数,根据部门所属人数平均"
)
private
BigDecimal
averageScore
;
/**
* 备注
*/
* 备注
*/
private
String
remark
;
/**
* 年
*/
* 年
*/
private
Integer
year
;
/**
* 月
*/
* 月
*/
private
Integer
month
;
/**
* 日
*/
* 日
*/
private
Integer
day
;
@Override
public
int
hashCode
()
{
return
this
.
getId
().
hashCode
();
return
this
.
getId
().
hashCode
();
}
@Override
public
boolean
equals
(
Object
obj
)
{
...
...
@@ -119,7 +117,7 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
if
(
obj
instanceof
DeptPerformStatEntity
)
{
DeptPerformStatEntity
tmp
=
(
DeptPerformStatEntity
)
obj
;
if
(
this
.
getId
()
==
tmp
.
getId
())
{
return
true
;
return
true
;
}
}
return
false
;
...
...
@@ -127,48 +125,48 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
public
void
initAttrValue
(){
this
.
deptId
=
0L
;
this
.
deptId
=
0L
;
this
.
deptName
=
""
;
this
.
deptName
=
""
;
this
.
totalScore
=
new
BigDecimal
(
0
);
this
.
totalScore
=
new
BigDecimal
(
0
);
this
.
totalAddScore
=
new
BigDecimal
(
0
);
this
.
totalAddScore
=
new
BigDecimal
(
0
);
this
.
totalSubScore
=
new
BigDecimal
(
0
);
this
.
totalSubScore
=
new
BigDecimal
(
0
);
this
.
attendScoreAdd
=
new
BigDecimal
(
0
);
this
.
attendScoreAdd
=
new
BigDecimal
(
0
);
this
.
attendScoreSub
=
new
BigDecimal
(
0
);
this
.
attendScoreSub
=
new
BigDecimal
(
0
);
this
.
reviewScoreAdd
=
new
BigDecimal
(
0
);
this
.
reviewScoreAdd
=
new
BigDecimal
(
0
);
this
.
reviewScoreSub
=
new
BigDecimal
(
0
);
this
.
reviewScoreSub
=
new
BigDecimal
(
0
);
this
.
complainScoreAdd
=
new
BigDecimal
(
0
);
this
.
complainScoreAdd
=
new
BigDecimal
(
0
);
this
.
complainScoreSub
=
new
BigDecimal
(
0
);
this
.
complainScoreSub
=
new
BigDecimal
(
0
);
this
.
goworkScoreAdd
=
new
BigDecimal
(
0
);
this
.
goworkScoreAdd
=
new
BigDecimal
(
0
);
this
.
goworkScoreSub
=
new
BigDecimal
(
0
);
this
.
goworkScoreSub
=
new
BigDecimal
(
0
);
this
.
effectScoreAdd
=
new
BigDecimal
(
0
);
this
.
effectScoreAdd
=
new
BigDecimal
(
0
);
this
.
effectScoreSub
=
new
BigDecimal
(
0
);
this
.
effectScoreSub
=
new
BigDecimal
(
0
);
this
.
otherScoreAdd
=
new
BigDecimal
(
0
);
this
.
otherScoreAdd
=
new
BigDecimal
(
0
);
this
.
otherScoreSub
=
new
BigDecimal
(
0
);
this
.
otherScoreSub
=
new
BigDecimal
(
0
);
this
.
averageScore
=
new
BigDecimal
(
0
);
this
.
averageScore
=
new
BigDecimal
(
0
);
this
.
remark
=
""
;
this
.
remark
=
""
;
this
.
year
=
-
1
;
this
.
year
=
DateUtil
.
year
(
new
Date
())
;
this
.
month
=
-
1
;
this
.
month
=
DateUtil
.
month
(
new
Date
())+
1
;
this
.
day
=
-
1
;
this
.
day
=
DateUtil
.
dayOfMonth
(
new
Date
())
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformAttendAppealController.java
View file @
8b0d63ed
...
...
@@ -12,6 +12,8 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import
com.mortals.xhx.base.system.user.model.UserQuery
;
import
com.mortals.xhx.base.system.user.service.UserService
;
import
com.mortals.xhx.common.code.*
;
import
com.mortals.xhx.module.dept.model.DeptQuery
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.perform.model.PerformRulesQuery
;
import
com.mortals.xhx.module.perform.model.vo.AppealInfo
;
import
com.mortals.xhx.module.perform.model.vo.AppealSummaryQuery
;
...
...
@@ -65,6 +67,8 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
private
UserService
userService
;
@Autowired
private
PerformRulesService
rulesService
;
@Autowired
private
DeptService
deptService
;
public
PerformAttendAppealController
()
{
...
...
@@ -84,8 +88,9 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
this
.
addDict
(
model
,
"reviewResult"
,
paramService
.
getParamBySecondOrganize
(
"PerformAttendAppeal"
,
"reviewResult"
));
this
.
addDict
(
model
,
"reviewSource"
,
paramService
.
getParamBySecondOrganize
(
"PerformAttendAppeal"
,
"reviewSource"
));
this
.
addDict
(
model
,
"irregularType"
,
IrregularTypeEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"irregularOtherType"
,
IrregularOtherTypeEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"deptId"
,
deptService
.
find
(
new
DeptQuery
()).
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
.
getId
().
toString
(),
y
->
y
.
getDeptName
())));
super
.
init
(
model
,
context
);
}
...
...
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