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
0a0e1e43
Commit
0a0e1e43
authored
Jan 18, 2024
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加缺勤自定义天数计算
parent
38741f66
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
112 additions
and
17 deletions
+112
-17
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
...module/attendance/service/AttendanceRecordHikService.java
+8
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+78
-5
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
.../module/attendance/web/AttendanceRecordHikController.java
+23
-9
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
...-manager/src/test/java/com/mortals/httpclient/system.http
+3
-3
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceRecordHikService.java
View file @
0a0e1e43
...
...
@@ -3,6 +3,7 @@ import com.mortals.framework.model.Context;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery
;
import
java.util.List
;
...
...
@@ -48,4 +49,11 @@ public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecor
void
addAttendanceRecordList
(
List
<
AttendanceRecordHikEntity
>
hikEntityList
,
Context
context
)
throws
Exception
;
/**
* 虚增未有考勤记录
* @param recordHikQuery
* @param context
*/
void
buildCustomHikRecord
(
AttendanceRecordHikQuery
recordHikQuery
,
Context
context
);
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
0a0e1e43
...
...
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
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.base.system.user.model.UserEntity
;
import
com.mortals.xhx.common.code.*
;
import
com.mortals.xhx.common.utils.BeanUtil
;
import
com.mortals.xhx.module.attendance.model.*
;
...
...
@@ -61,7 +62,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
private
StaffService
staffService
;
@Autowired
private
AttendanceRecordErrorService
errorService
;
@Autowired
private
AttendanceGroupFixedworkService
groupFixedworkService
;
@Autowired
private
HolidayService
holidayService
;
...
...
@@ -81,7 +83,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
@Override
public
void
addAttendanceRecordByQueryCustom
(
AttendanceRecordHikEntity
attendanceRecordHikQuery
,
Context
context
)
throws
Exception
{
List
<
AttendanceRecordHikEntity
>
hikEntityList
=
attendanceRecordHikService
.
find
(
attendanceRecordHikQuery
);
hikEntityList
=
hikEntityList
.
stream
().
map
(
item
->
{
hikEntityList
=
hikEntityList
.
stream
().
map
(
item
->
{
String
dateStr
=
DateUtil
.
formatDate
(
item
.
getAttendanceDate
());
Boolean
checkWorkByHoliday
=
checkWorkByHoliday
(
dateStr
);
Boolean
checkHolidayByWorkDay
=
checkHolidayByWorkDay
(
dateStr
);
...
...
@@ -92,7 +94,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
return
null
;
}
return
item
;
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
}).
filter
(
f
->
f
!=
null
).
collect
(
Collectors
.
toList
());
addAttendanceOtherRecordList
(
hikEntityList
,
context
);
}
...
...
@@ -436,6 +438,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
}
}
private
void
genErrorAttendRecord
(
Context
context
,
String
dateStr
,
AttendanceRecordEntity
attendanceRecordEntity
,
List
<
AttendanceRecordDetailEntity
>
detailEntityList
)
{
//处理异常打卡,所以异常打卡的 都新增一条记录
List
<
AttendanceRecordErrorEntity
>
errorEntityList
=
new
ArrayList
<>();
...
...
@@ -517,10 +520,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
//if(error.getStaffId()==checkError.getStaffId()&&error.getShiftsId()=)
}
return
bool
;
}
...
...
@@ -716,6 +717,78 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
return
weekClassId
;
}
@Override
public
void
buildCustomHikRecord
(
AttendanceRecordHikQuery
recordHikQuery
,
Context
context
)
{
Set
<
Long
>
attendStaffSet
=
this
.
find
(
recordHikQuery
).
stream
().
map
(
i
->
i
.
getStaffId
()).
distinct
().
collect
(
Collectors
.
toSet
());
Map
<
Long
,
List
<
AttendanceGroupStaffEntity
>>
groupStaffCollect
=
attendanceGroupStaffService
.
find
(
new
AttendanceGroupStaffQuery
()).
stream
().
collect
(
Collectors
.
groupingBy
(
x
->
x
.
getGroupId
()));
Iterator
<
Map
.
Entry
<
Long
,
List
<
AttendanceGroupStaffEntity
>>>
iterator
=
groupStaffCollect
.
entrySet
().
iterator
();
while
(
iterator
.
hasNext
())
{
Map
.
Entry
<
Long
,
List
<
AttendanceGroupStaffEntity
>>
item
=
iterator
.
next
();
//分组查看当前人
Long
groupId
=
item
.
getKey
();
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
groupFixedworkService
.
selectOne
(
new
AttendanceGroupFixedworkQuery
().
groupId
(
groupId
));
String
week
=
this
.
getWeek
(
new
Date
());
Long
weekClassId
=
this
.
getWeekClassId
(
attendanceGroupFixedworkEntity
,
week
);
//weekClassId为-1 则不在考勤
//对于节假日 分两种情况。
// 1.当前是工作日,但是是节假日。则不做考勤continue;
// 2.当前是非工作日,但是由于节假日情况,需要补班,需要做考勤
//weekClassId == -1L 当日不需要考勤的 与节假日冲突的 以节假日为准
Boolean
checkWorkByHoliday
=
checkWorkByHoliday
(
recordHikQuery
.
getAttendanceDateStart
());
Boolean
checkHolidayByWorkDay
=
checkHolidayByWorkDay
(
recordHikQuery
.
getAttendanceDateStart
());
if
(
weekClassId
==
-
1L
)
{
//跳过本次循环
log
.
info
(
"当前日期不在考勤时间范围内,不做处理!"
);
if
(!
checkWorkByHoliday
)
{
continue
;
}
}
else
{
if
(
checkHolidayByWorkDay
)
{
//本来当天是需要考勤的,但是是节假日,则不计算考勤
continue
;
}
}
List
<
AttendanceGroupStaffEntity
>
groupStaffList
=
item
.
getValue
();
//查看当前需要考勤但是没有记录的人
List
<
Long
>
unAttendStaffIdList
=
groupStaffList
.
stream
().
filter
(
f
->
!
attendStaffSet
.
contains
(
f
.
getStaffId
())).
map
(
i
->
i
.
getStaffId
()).
collect
(
Collectors
.
toList
());
if
(!
ObjectUtils
.
isEmpty
(
unAttendStaffIdList
))
{
for
(
Long
staffId
:
unAttendStaffIdList
)
{
StaffEntity
staffCache
=
staffService
.
getCache
(
staffId
.
toString
());
if
(!
ObjectUtils
.
isEmpty
(
staffCache
)
&&
StaffSatusEnum
.
离职
.
getValue
()
!=
staffCache
.
getStatus
())
{
//构建考勤记录 判断当前人是否离职,如果非离职 构建记录
AttendanceRecordHikEntity
recordHikEntity
=
new
AttendanceRecordHikEntity
();
recordHikEntity
.
initAttrValue
();
recordHikEntity
.
setStaffId
(
staffCache
.
getId
());
recordHikEntity
.
setStaffName
(
staffCache
.
getName
());
recordHikEntity
.
setWorkNum
(
staffCache
.
getWorkNum
());
recordHikEntity
.
setDeptId
(
staffCache
.
getDeptId
());
recordHikEntity
.
setDeptName
(
staffCache
.
getDeptName
());
recordHikEntity
.
setSalaId
(
staffCache
.
getSalaId
());
recordHikEntity
.
setSalaName
(
staffCache
.
getSalaName
());
recordHikEntity
.
setPositionId
(
staffCache
.
getPositionId
());
recordHikEntity
.
setPositionName
(
staffCache
.
getPositionName
());
recordHikEntity
.
setAttendanceGroupId
(
groupId
);
recordHikEntity
.
setAttendanceDate
(
DateUtil
.
parseDate
(
DateUtil
.
today
()).
toJdkDate
());
recordHikEntity
.
setAttendanceAddress
(
"自定义地点"
);
recordHikEntity
.
setEventSource
(
"当日未有记录虚增考勤记录!"
);
recordHikEntity
.
setCreateTime
(
new
Date
());
recordHikEntity
.
setCreateUserId
(
1L
);
try
{
this
.
getDao
().
insert
(
recordHikEntity
);
}
catch
(
Exception
e
)
{
log
.
error
(
e
.
getMessage
());
}
}
else
{
log
.
error
(
"未找到当前员工,staffId:{}"
,
staffId
);
}
}
}
}
}
}
/* //map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceRecordHikController.java
View file @
0a0e1e43
package
com.mortals.xhx.module.attendance.web
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.mortals.framework.annotation.UnAuth
;
...
...
@@ -16,10 +18,7 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import
com.mortals.xhx.base.system.upload.service.UploadService
;
import
com.mortals.xhx.common.keys.RedisCacheKeys
;
import
com.mortals.xhx.common.utils.AddAttendThread
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceGroupEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
com.mortals.xhx.module.attendance.service.AttendanceExportRecordService
;
import
com.mortals.xhx.module.attendance.service.AttendanceGroupService
;
...
...
@@ -30,9 +29,11 @@ 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
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StopWatch
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
...
@@ -52,6 +53,7 @@ import java.util.stream.Collectors;
*/
@RestController
@RequestMapping
(
"attendance/record/hik"
)
@Slf4j
public
class
AttendanceRecordHikController
extends
BaseCRUDJsonBodyMappingController
<
AttendanceRecordHikService
,
AttendanceRecordHikEntity
,
Long
>
{
@Autowired
...
...
@@ -164,19 +166,31 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
}
@PostMapping
(
value
=
"/addAttendanceRecordCustom"
)
@UnAuth
public
Rest
<
String
>
addAttendanceRecordCustom
(
@RequestBody
AttendanceRecordHik
Entit
y
hikEntity
)
{
public
Rest
<
String
>
addAttendanceRecordCustom
(
@RequestBody
AttendanceRecordHik
Quer
y
hikEntity
)
{
Rest
<
String
>
ret
=
new
Rest
();
Map
<
String
,
Object
>
model
=
new
HashMap
();
Context
context
=
this
.
getContext
();
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
int
code
=
1
;
try
{
//排除节假日
hikService
.
addAttendanceRecordByQuery
(
hikEntity
,
getContext
());
//天数区间分段计算
DateTime
attendStart
=
DateUtil
.
parseDate
(
hikEntity
.
getAttendanceDateStart
());
DateTime
attendEnd
=
DateUtil
.
parseDate
(
hikEntity
.
getAttendanceDateEnd
());
Long
compare
=
DateUtil
.
between
(
attendEnd
,
attendStart
,
DateUnit
.
DAY
);
StopWatch
stopWatch
=
new
StopWatch
(
"stopwatch attend1"
);
log
.
info
(
"考勤计算天数区间:{}"
,
compare
);
for
(
int
i
=
0
;
i
<=
compare
.
intValue
();
i
++)
{
DateTime
curDate
=
DateUtil
.
offsetDay
(
attendStart
,
i
);
log
.
info
(
"考勤计算日期:{}"
,
curDate
.
toDateStr
());
stopWatch
.
start
(
"执行本地方法"
);
hikEntity
.
setAttendanceDateStart
(
curDate
.
toDateStr
());
hikEntity
.
setAttendanceDateEnd
(
curDate
.
toDateStr
());
hikService
.
buildCustomHikRecord
(
hikEntity
,
context
);
stopWatch
.
stop
();
log
.
info
(
"考勤计算日期:{} 完成,耗时:{}ms"
,
curDate
.
toDateStr
(),
stopWatch
.
getLastTaskTimeMillis
());
}
model
.
put
(
"message_info"
,
busiDesc
+
"成功"
);
this
.
recordSysLog
(
this
.
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
...
...
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
View file @
0a0e1e43
...
...
@@ -5,7 +5,7 @@ Content-Type: application/json
{
"loginName":"admin",
"password":"
xhxADMIN8@a
",
"password":"
admin
",
"securityCode":"admin"
}
...
...
@@ -30,8 +30,8 @@ Authorization: {{authToken}}
Content-Type: application/json
{
"attendanceDateStart":"202
3
-12-01",
"attendanceDateEnd":"2024-01-
15
"
"attendanceDateStart":"202
4
-12-01",
"attendanceDateEnd":"2024-01-
20
"
}
###海康考勤打卡记录计算1
...
...
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