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
e8d93d02
Commit
e8d93d02
authored
Apr 20, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加修改每日考勤列表返回数据
parent
b7455b29
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
164 additions
and
58 deletions
+164
-58
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
...a/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
+0
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttDsyncColumn.java
...m/mortals/xhx/module/attendance/model/AttDsyncColumn.java
+29
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceRecordDetailEntity.java
...module/attendance/model/AttendanceRecordDetailEntity.java
+61
-24
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+4
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java
...xhx/module/attendance/web/AttendanceRecordController.java
+70
-27
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/SyncDoorsEventTaskImpl.java
View file @
e8d93d02
...
...
@@ -126,7 +126,6 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
if
(!
ObjectUtils
.
isEmpty
(
saveRecordList
))
{
recordHikService
.
save
(
saveRecordList
);
}
log
.
info
(
"saveRecordList size:{}"
,
saveRecordList
.
size
());
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttDsyncColumn.java
0 → 100644
View file @
e8d93d02
package
com.mortals.xhx.module.attendance.model
;
import
lombok.Data
;
/**
* 动态列
*
* @author:
* @date: 2023/4/20 11:08
*/
@Data
public
class
AttDsyncColumn
{
/**
* 属性名称
*/
private
String
name
;
/**
* 属性列
*/
private
String
property
;
/**
* 顺序
*/
private
Integer
orderNum
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/AttendanceRecordDetailEntity.java
View file @
e8d93d02
...
...
@@ -3,10 +3,12 @@ package com.mortals.xhx.module.attendance.model;
import
java.util.Date
;
import
java.util.List
;
import
java.util.ArrayList
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.mortals.framework.annotation.Excel
;
import
com.mortals.framework.model.BaseEntityLong
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceRecordDetailVo
;
/**
* 考勤打卡记录详细信息实体对象
*
...
...
@@ -55,155 +57,190 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
private
Integer
orderNum
;
public
AttendanceRecordDetailEntity
()
{
}
public
AttendanceRecordDetailEntity
(){}
/**
* 获取 考勤记录ID
*
* @return Long
*/
public
Long
getRecordId
(){
public
Long
getRecordId
()
{
return
recordId
;
}
/**
* 设置 考勤记录ID
*
* @param recordId
*/
public
void
setRecordId
(
Long
recordId
){
public
void
setRecordId
(
Long
recordId
)
{
this
.
recordId
=
recordId
;
}
/**
* 获取 班次ID
*
* @return Long
*/
public
Long
getShiftsId
(){
public
Long
getShiftsId
()
{
return
shiftsId
;
}
/**
* 设置 班次ID
*
* @param shiftsId
*/
public
void
setShiftsId
(
Long
shiftsId
){
public
void
setShiftsId
(
Long
shiftsId
)
{
this
.
shiftsId
=
shiftsId
;
}
/**
* 获取 班次名称
*
* @return String
*/
public
String
getShiftsName
(){
public
String
getShiftsName
()
{
return
shiftsName
;
}
/**
* 设置 班次名称
*
* @param shiftsName
*/
public
void
setShiftsName
(
String
shiftsName
){
public
void
setShiftsName
(
String
shiftsName
)
{
this
.
shiftsName
=
shiftsName
;
}
/**
* 获取 上班打卡时间
*
* @return Date
*/
public
Date
getGoWorkDate
(){
public
Date
getGoWorkDate
()
{
return
goWorkDate
;
}
/**
* 设置 上班打卡时间
*
* @param goWorkDate
*/
public
void
setGoWorkDate
(
Date
goWorkDate
){
public
void
setGoWorkDate
(
Date
goWorkDate
)
{
this
.
goWorkDate
=
goWorkDate
;
}
/**
* 获取 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer
*/
public
Integer
getGoWorkResult
(){
public
Integer
getGoWorkResult
()
{
return
goWorkResult
;
}
/**
* 设置 上班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param goWorkResult
*/
public
void
setGoWorkResult
(
Integer
goWorkResult
){
public
void
setGoWorkResult
(
Integer
goWorkResult
)
{
this
.
goWorkResult
=
goWorkResult
;
}
/**
* 获取 下班打卡时间
*
* @return Date
*/
public
Date
getOffWorkDate
(){
public
Date
getOffWorkDate
()
{
return
offWorkDate
;
}
/**
* 设置 下班打卡时间
*
* @param offWorkDate
*/
public
void
setOffWorkDate
(
Date
offWorkDate
){
public
void
setOffWorkDate
(
Date
offWorkDate
)
{
this
.
offWorkDate
=
offWorkDate
;
}
/**
* 获取 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @return Integer
*/
public
Integer
getOffWorkResult
(){
public
Integer
getOffWorkResult
()
{
return
offWorkResult
;
}
/**
* 设置 下班打卡结果(1.正常,2.请假,3.缺卡,4.迟到,5.早退)
*
* @param offWorkResult
*/
public
void
setOffWorkResult
(
Integer
offWorkResult
){
public
void
setOffWorkResult
(
Integer
offWorkResult
)
{
this
.
offWorkResult
=
offWorkResult
;
}
/**
* 获取 备注
*
* @return String
*/
public
String
getRemark
(){
public
String
getRemark
()
{
return
remark
;
}
/**
* 设置 备注
*
* @param remark
*/
public
void
setRemark
(
String
remark
){
public
void
setRemark
(
String
remark
)
{
this
.
remark
=
remark
;
}
/**
* 获取 排序字段
*
* @return Integer
*/
public
Integer
getOrderNum
(){
public
Integer
getOrderNum
()
{
return
orderNum
;
}
/**
* 设置 排序字段
*
* @param orderNum
*/
public
void
setOrderNum
(
Integer
orderNum
){
public
void
setOrderNum
(
Integer
orderNum
)
{
this
.
orderNum
=
orderNum
;
}
@Override
public
int
hashCode
()
{
return
this
.
getId
().
hashCode
();
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
null
)
return
false
;
if
(
obj
instanceof
AttendanceRecordDetailEntity
)
{
AttendanceRecordDetailEntity
tmp
=
(
AttendanceRecordDetailEntity
)
obj
;
if
(
this
.
get
Id
()
==
tmp
.
getId
())
{
if
(
this
.
get
OrderNum
()
==
tmp
.
getOrderNum
())
{
return
true
;
}
}
return
false
;
}
public
String
toString
(){
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
(
""
);
sb
.
append
(
",recordId:"
).
append
(
getRecordId
());
sb
.
append
(
",shiftsId:"
).
append
(
getShiftsId
());
...
...
@@ -217,7 +254,7 @@ public class AttendanceRecordDetailEntity extends AttendanceRecordDetailVo {
return
sb
.
toString
();
}
public
void
initAttrValue
(){
public
void
initAttrValue
()
{
this
.
recordId
=
null
;
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
e8d93d02
...
...
@@ -64,6 +64,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
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<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遍历.先把所有键取出来
Set
<
String
>
workNumSet
=
listMap
.
keySet
();
//根据键取出value
...
...
@@ -97,16 +98,13 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//获取考勤打卡时间
Date
attendanceDate
=
item
.
getAttendanceDate
();
//通过工号查询员工信息
StaffQuery
staffQuery
=
new
StaffQuery
();
StaffEntity
staffEntity
=
staffService
.
selectOne
(
staffQuery
.
workNum
(
item
.
getWorkNum
()));
StaffEntity
staffEntity
=
staffService
.
selectOne
(
new
StaffQuery
().
workNum
(
item
.
getWorkNum
()));
//通过员工id查询考勤人员信息
AttendanceGroupStaffQuery
attendanceGroupStaffQuery
=
new
AttendanceGroupStaffQuery
();
List
<
AttendanceGroupStaffEntity
>
attendanceGroupStaffEntities
=
attendanceGroupStaffService
.
find
(
attendanceGroupStaffQuery
.
staffId
(
staffEntity
.
getId
()));
List
<
AttendanceGroupStaffEntity
>
attendanceGroupStaffEntities
=
attendanceGroupStaffService
.
find
(
new
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
()));
AttendanceGroupEntity
attendanceGroupEntity
=
attendanceGroupService
.
selectOne
(
new
AttendanceGroupQuery
().
id
(
attendanceGroupStaffEntities
.
get
(
0
).
getGroupId
()));
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkQuery
attendanceGroupFixedworkQuery
=
new
AttendanceGroupFixedworkQuery
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
attendanceGroupFixedworkQuery
.
groupId
(
attendanceGroupEntity
.
getId
()));
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordController.java
View file @
e8d93d02
package
com.mortals.xhx.module.attendance.web
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
com.mortals.xhx.module.attendance.service.AttendanceGroupService
;
import
com.mortals.xhx.module.dept.model.DeptEntity
;
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.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
com.mortals.framework.model.Context
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.module.attendance.service.AttendanceRecordService
;
import
org.apache.commons.lang3.ArrayUtils
;
import
com.mortals.framework.util.StringUtils
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
com.alibaba.fastjson.JSONObject
;
import
java.util.Arrays
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
static
com
.
mortals
.
framework
.
ap
.
SysConstains
.*;
/**
*
* 考勤打卡记录信息
*
* @author zxfei
* @date 2023-04-07
*/
* 考勤打卡记录信息
*
* @author zxfei
* @date 2023-04-07
*/
@RestController
@RequestMapping
(
"attendance/record"
)
public
class
AttendanceRecordController
extends
BaseCRUDJsonBodyMappingController
<
AttendanceRecordService
,
AttendanceRecordEntity
,
Long
>
{
public
class
AttendanceRecordController
extends
BaseCRUDJsonBodyMappingController
<
AttendanceRecordService
,
AttendanceRecordEntity
,
Long
>
{
@Autowired
private
ParamService
paramService
;
...
...
@@ -50,18 +41,70 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
@Autowired
private
AttendanceClassService
attendanceClassService
;
public
AttendanceRecordController
(){
super
.
setModuleDesc
(
"考勤打卡记录信息"
);
public
AttendanceRecordController
()
{
super
.
setModuleDesc
(
"考勤打卡记录信息"
);
}
@Override
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
())));
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
);
}
@Override
protected
int
doListAfter
(
AttendanceRecordEntity
query
,
Map
<
String
,
Object
>
model
,
Context
context
)
throws
AppException
{
List
<
AttendanceRecordEntity
>
list
=
(
List
<
AttendanceRecordEntity
>)
model
.
get
(
KEY_RESULT_DATA
);
List
<
AttendanceRecordDetailEntity
>
collect
=
list
.
stream
()
.
flatMap
(
item
->
item
.
getAttendanceRecordDetailList
().
stream
())
.
distinct
()
.
sorted
(
Comparator
.
comparingInt
(
AttendanceRecordDetailEntity:
:
getOrderNum
))
.
collect
(
Collectors
.
toList
());
List
<
AttDsyncColumn
>
dsyncColumns
=
new
ArrayList
<>();
collect
.
forEach
(
item
->
{
AttDsyncColumn
attDsyncColumn
=
new
AttDsyncColumn
();
attDsyncColumn
.
setName
(
String
.
format
(
"上班%s打卡时间"
,
item
.
getOrderNum
()));
attDsyncColumn
.
setProperty
(
"goWorkDate"
);
attDsyncColumn
.
setOrderNum
(
item
.
getOrderNum
());
dsyncColumns
.
add
(
attDsyncColumn
);
attDsyncColumn
=
new
AttDsyncColumn
();
attDsyncColumn
.
setName
(
String
.
format
(
"下班%s打卡时间"
,
item
.
getOrderNum
()));
attDsyncColumn
.
setProperty
(
"offWorkDate"
);
attDsyncColumn
.
setOrderNum
(
item
.
getOrderNum
());
dsyncColumns
.
add
(
attDsyncColumn
);
});
Set
<
Integer
>
dsyncSet
=
dsyncColumns
.
stream
().
map
(
i
->
i
.
getOrderNum
()).
collect
(
Collectors
.
toSet
());
//填充空的detail 对象
Iterator
<
AttendanceRecordEntity
>
iterator
=
list
.
iterator
();
while
(
iterator
.
hasNext
())
{
AttendanceRecordEntity
recordEntity
=
iterator
.
next
();
Set
<
Integer
>
existSet
=
recordEntity
.
getAttendanceRecordDetailList
().
stream
().
map
(
i
->
i
.
getOrderNum
()).
collect
(
Collectors
.
toSet
());
//判断详细列表中是否存在顺序 没有自动填充空对象数据
List
<
AttendanceRecordDetailEntity
>
addDetailList
=
dsyncSet
.
stream
().
map
(
i
->
{
if
(!
existSet
.
contains
(
i
))
{
AttendanceRecordDetailEntity
recordDetailEntity
=
new
AttendanceRecordDetailEntity
();
recordDetailEntity
.
initAttrValue
();
recordDetailEntity
.
setOrderNum
(
i
);
return
recordDetailEntity
;
}
return
null
;
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
if
(
ObjectUtils
.
isEmpty
(
addDetailList
))
{
recordEntity
.
getAttendanceRecordDetailList
().
addAll
(
addDetailList
);
List
<
AttendanceRecordDetailEntity
>
orderList
=
recordEntity
.
getAttendanceRecordDetailList
().
stream
().
sorted
(
Comparator
.
comparingInt
(
AttendanceRecordDetailEntity:
:
getOrderNum
))
.
collect
(
Collectors
.
toList
());
recordEntity
.
setAttendanceRecordDetailList
(
orderList
);
}
}
model
.
put
(
"dyncColumns"
,
dsyncColumns
);
return
super
.
doListAfter
(
query
,
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