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
3c9e3614
Commit
3c9e3614
authored
Mar 20, 2024
by
廖旭伟
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
32733afa
1b86f533
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
209 additions
and
323 deletions
+209
-323
attendance-performance-manager-ui/admin/src/components/SearchForm.vue
...erformance-manager-ui/admin/src/components/SearchForm.vue
+2
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/InspectApiController.java
...va/com/mortals/xhx/busiz/h5/web/InspectApiController.java
+0
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/PerformApiController.java
...va/com/mortals/xhx/busiz/h5/web/PerformApiController.java
+0
-27
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/StaffCheckSummaryService.java
...x/daemon/applicationservice/StaffCheckSummaryService.java
+1
-1
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordErrorServiceImpl.java
...ndance/service/impl/AttendanceRecordErrorServiceImpl.java
+122
-145
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+1
-137
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/service/PerformEffectRecordService.java
...hx/module/perform/service/PerformEffectRecordService.java
+8
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/service/impl/PerformEffectRecordServiceImpl.java
.../perform/service/impl/PerformEffectRecordServiceImpl.java
+6
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformEffectRecordController.java
...xhx/module/perform/web/PerformEffectRecordController.java
+48
-0
attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordErrorController.http
...ttpclient/attendance/AttendanceRecordErrorController.http
+2
-2
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
...-manager/src/test/java/com/mortals/httpclient/system.http
+19
-9
No files found.
attendance-performance-manager-ui/admin/src/components/SearchForm.vue
View file @
3c9e3614
...
...
@@ -468,6 +468,8 @@ export default {
this
.
form
.
complainTimeEnd
=
this
.
form
.
createTimeMonth
+
"
-31
"
;
this
.
form
.
goworkTimeStart
=
this
.
form
.
createTimeMonth
+
"
-01
"
;
this
.
form
.
goworkTimeEnd
=
this
.
form
.
createTimeMonth
+
"
-31
"
;
this
.
form
.
happenTimeStart
=
this
.
form
.
createTimeMonth
+
"
-01
"
;
this
.
form
.
happenTimeEnd
=
this
.
form
.
createTimeMonth
+
"
-31
"
;
}
else
if
(
this
.
form
.
createTimeStart1
||
this
.
form
.
createTimeEnd1
)
{
this
.
form
.
createTimeStart
=
this
.
form
.
createTimeStart1
;
this
.
form
.
createTimeEnd
=
this
.
form
.
createTimeEnd1
;
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/InspectApiController.java
View file @
3c9e3614
...
...
@@ -92,8 +92,6 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
@Autowired
private
AttendanceGroupService
groupService
;
@Autowired
private
AttendanceClassService
classService
;
@Autowired
private
AttendanceClassDetailService
classDetailService
;
@Autowired
private
AttendanceGroupFixedworkService
fixedworkService
;
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/h5/web/PerformApiController.java
View file @
3c9e3614
...
...
@@ -54,8 +54,6 @@ import static com.mortals.xhx.common.key.ErrorCode.ERROR_TOKEN_EXPIRED_CONTENT;
@Slf4j
@RequestMapping
(
"/api/v1/perform"
)
public
class
PerformApiController
extends
AbstractBaseController
<
PerformReq
>
{
@Autowired
private
CheckAttendRecordService
checkAttendRecordService
;
@Autowired
...
...
@@ -70,10 +68,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
private
CheckOtherRecordService
checkOtherRecordService
;
@Autowired
private
CheckAllRecordService
checkAllRecordService
;
@Autowired
private
PerformAttendAppealService
appealService
;
@Autowired
private
CheckAllRecordDao
checkAllRecordDao
;
@Autowired
...
...
@@ -81,7 +77,6 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
@Autowired
private
PerformRulesService
rulesService
;
protected
void
init
(
Map
<
String
,
Object
>
model
,
Context
context
)
{
this
.
addDict
(
model
,
"checkStatus"
,
CheckStatusEnum
.
getEnumMap
());
this
.
addDict
(
model
,
"checkResult"
,
CheckResultEnum
.
getEnumMap
());
...
...
@@ -405,28 +400,6 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
}
}
private
void
updateAppealResult
(
PerformInfo
performInfo
,
List
<
PerformAttendAppealEntity
>
list
)
{
if
(!
ObjectUtils
.
isEmpty
(
list
))
{
for
(
PerformAttendAppealEntity
entity
:
list
)
{
if
(
ObjectUtils
.
isEmpty
(
entity
.
getAppealResult
()))
{
performInfo
.
setAppealStatus
(
AppealStatusEnum
.
申诉中
.
getValue
());
}
else
{
if
(
AppealResultEnum
.
通过
.
getValue
()
==
entity
.
getAppealResult
())
{
performInfo
.
setAppealStatus
(
AppealStatusEnum
.
申诉通过
.
getValue
());
}
else
if
(
AppealResultEnum
.
不通过
.
getValue
()
==
entity
.
getAppealResult
())
{
performInfo
.
setAppealStatus
(
AppealStatusEnum
.
申诉拒绝
.
getValue
());
}
else
{
performInfo
.
setAppealStatus
(
AppealStatusEnum
.
申诉中
.
getValue
());
}
}
}
}
else
{
performInfo
.
setAppealStatus
(
AppealStatusEnum
.
未申诉
.
getValue
());
}
}
/**
* 详细
*/
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/StaffCheckSummaryService.java
View file @
3c9e3614
...
...
@@ -45,7 +45,7 @@ public class StaffCheckSummaryService implements IApplicationStartedService {
Thread
sendThread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
int
waitTime
=
100
0
;
int
waitTime
=
5
0
;
while
(!
stopped
)
{
try
{
StaffCheckSummaryQuery
query
=
cacheService
.
brpop
(
KEY_CHECK_SUMMARY_CACHE
,
60
,
StaffCheckSummaryQuery
.
class
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordErrorServiceImpl.java
View file @
3c9e3614
...
...
@@ -52,18 +52,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
@Autowired
private
AttendanceClassDetailService
classDetailService
;
@Autowired
private
AttendanceClassService
attendanceClassService
;
@Autowired
private
PerformAttendRecordService
performAttendRecordService
;
@Autowired
private
ApiWebPerformController
apiWebPerformController
;
@Autowired
private
StaffService
staffService
;
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Autowired
private
ICacheService
cacheService
;
@Autowired
...
...
@@ -99,92 +89,37 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
@Override
protected
void
updateAfter
(
AttendanceRecordErrorEntity
entity
,
Context
context
)
throws
AppException
{
if
(
YesNoEnum
.
YES
.
getValue
()
==
entity
.
getProcessStatus
())
{
entity
=
this
.
get
(
entity
.
getId
());
entity
=
this
.
get
(
entity
.
getId
());
//判断后打绩效
String
ruleCode
=
""
;
if
(
ErrorStatusEnum
.
早退
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
//判断时间差定义
Long
earlyMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
earlyMin
>=
0L
&&
earlyMin
<
5L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1002"
;
}
if
(
earlyMin
>=
5L
&&
earlyMin
<
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1004"
;
}
if
(
earlyMin
>=
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1006"
;
}
}
else
{
ruleCode
=
"ATTEND1002"
;
}
}
else
if
(
ErrorStatusEnum
.
迟到
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
Long
lateMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
lateMin
>=
0L
&&
lateMin
<
5L
)
{
//迟到5分钟内
ruleCode
=
"ATTEND1001"
;
}
if
(
lateMin
>=
5L
&&
lateMin
<
60L
)
{
//迟到5-60
ruleCode
=
"ATTEND1003"
;
}
if
(
lateMin
>=
60L
)
{
//迟到60分钟以上
ruleCode
=
"ATTEND1005"
;
}
}
else
{
//早退5分钟内
ruleCode
=
"ATTEND1001"
;
}
}
else
if
(
ErrorStatusEnum
.
缺卡
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
ruleCode
=
"ATTEND1007"
;
}
String
ruleCode
=
getRuleCode
(
entity
);
if
(!
ObjectUtils
.
isEmpty
(
ruleCode
))
{
AttendSaveReq
attendSaveReq
=
new
AttendSaveReq
();
attendSaveReq
.
setAttendanceGroupId
(
entity
.
getAttendanceGroupId
());
attendSaveReq
.
setAttendanceGroupName
(
entity
.
getAttendanceGroupName
());
attendSaveReq
.
setAttendanceDate
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setGoOffTimeStr
(
entity
.
getGoOrOff
());
attendSaveReq
.
setActualAttendTime
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorResult
(
entity
.
getRemark
());
attendSaveReq
.
setTitle
(
"考勤"
);
attendSaveReq
.
setHappenTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setRuleCode
(
ruleCode
);
attendSaveReq
.
setStaffId
(
entity
.
getStaffId
());
performAttendRecordService
.
saveAttend
(
attendSaveReq
,
context
);
saveAttendPerformRecord
(
context
,
entity
,
ruleCode
);
}
//异常处理后重新汇总考勤 context!=null时表示页面调用的修改,自动执行处理任务调用时context为null,无需立即汇总
if
(
StringUtils
.
isNotEmpty
(
entity
.
getProcessResult
())&&
context
!=
null
)
{
if
(
StringUtils
.
isNotEmpty
(
entity
.
getProcessResult
())
&&
context
!=
null
)
{
AttendanceSummaryQuery
query
=
new
AttendanceSummaryQuery
();
query
.
setStaffId
(
entity
.
getStaffId
());
query
.
setSummaryTime
(
DateUtils
.
getStrDate
(
entity
.
getErrorDateTime
()));
// AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
// ThreadPool.getInstance().execute(summaryThread);
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
query
);
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
query
);
}
}
}
@Override
public
boolean
errorConfirm
(
Long
errorId
)
{
boolean
result
=
true
;
AttendanceRecordErrorEntity
errorEntity
=
this
.
get
(
errorId
);
if
(
errorEntity
!=
null
)
{
if
(
errorEntity
!=
null
)
{
AttendanceLeaveRecordQuery
query
=
new
AttendanceLeaveRecordQuery
();
query
.
setEndTimeStart
(
DateUtils
.
getStrDate
(
errorEntity
.
getErrorDateTime
()));
query
.
setLeavePersonId
(
errorEntity
.
getStaffId
());
query
.
setAuditResult
(
AppealResultEnum
.
通过
.
getValue
());
AttendanceLeaveRecordEntity
leaveRecordEntity
=
attendanceLeaveRecordService
.
selectOne
(
query
);
if
(
leaveRecordEntity
!=
null
)
{
if
(
leaveRecordEntity
!=
null
)
{
result
=
false
;
}
}
...
...
@@ -197,9 +132,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query
.
setErrorDateTimeStart
(
DateUtils
.
getStrDate
(
date
));
query
.
setErrorDateTimeEnd
(
DateUtils
.
getStrDate
(
date
));
List
<
AttendanceRecordErrorEntity
>
list
=
this
.
find
(
query
);
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
list
.
stream
().
forEach
(
item
->
{
if
(
errorConfirm
(
item
.
getId
()))
{
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
list
.
stream
().
forEach
(
item
->
{
if
(
errorConfirm
(
item
.
getId
()))
{
AttendanceRecordErrorEntity
updateEntity
=
new
AttendanceRecordErrorEntity
();
updateEntity
.
setId
(
item
.
getId
());
updateEntity
.
setProcessStatus
(
1
);
...
...
@@ -210,7 +145,7 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
updateEntity
.
setRemark
(
"系统自动处理"
);
updateEntity
.
setUpdateTime
(
new
Date
());
updateEntity
.
setUpdateUserId
(
1
l
);
this
.
update
(
updateEntity
,
null
);
this
.
update
(
updateEntity
,
null
);
}
});
}
...
...
@@ -225,79 +160,24 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query
.
setErrorDateTimeEnd
(
day
);
List
<
AttendanceRecordErrorEntity
>
list
=
this
.
find
(
query
);
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
log
.
info
(
"重新生成["
+
day
+
"]已处理的绩效考勤核查数据....."
);
log
.
info
(
"重新生成["
+
day
+
"]已处理的绩效考勤核查数据....."
);
for
(
AttendanceRecordErrorEntity
entity
:
list
)
{
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效
String
ruleCode
=
""
;
if
(
ErrorStatusEnum
.
早退
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
//判断时间差定义
Long
earlyMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
earlyMin
>=
0L
&&
earlyMin
<
5L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1002"
;
}
if
(
earlyMin
>=
5L
&&
earlyMin
<
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1004"
;
}
if
(
earlyMin
>=
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1006"
;
}
}
else
{
ruleCode
=
"ATTEND1002"
;
}
}
else
if
(
ErrorStatusEnum
.
迟到
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
Long
lateMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
lateMin
>=
0L
&&
lateMin
<
5L
)
{
//迟到5分钟内
ruleCode
=
"ATTEND1001"
;
}
if
(
lateMin
>=
5L
&&
lateMin
<
60L
)
{
//迟到5-60
ruleCode
=
"ATTEND1003"
;
}
if
(
lateMin
>=
60L
)
{
//迟到60分钟以上
ruleCode
=
"ATTEND1005"
;
}
}
else
{
//早退5分钟内
ruleCode
=
"ATTEND1001"
;
}
}
else
if
(
ErrorStatusEnum
.
缺卡
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
ruleCode
=
"ATTEND1007"
;
}
if
(!
ObjectUtils
.
isEmpty
(
ruleCode
))
{
AttendSaveReq
attendSaveReq
=
new
AttendSaveReq
();
attendSaveReq
.
setAttendanceGroupId
(
entity
.
getAttendanceGroupId
());
attendSaveReq
.
setAttendanceGroupName
(
entity
.
getAttendanceGroupName
());
attendSaveReq
.
setAttendanceDate
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setGoOffTimeStr
(
entity
.
getGoOrOff
());
attendSaveReq
.
setActualAttendTime
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorResult
(
entity
.
getRemark
());
attendSaveReq
.
setTitle
(
"考勤"
);
attendSaveReq
.
setHappenTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setRuleCode
(
ruleCode
);
attendSaveReq
.
setStaffId
(
entity
.
getStaffId
());
performAttendRecordService
.
saveAttend
(
attendSaveReq
,
context
);
}
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效
String
ruleCode
=
getRuleCode
(
entity
);
if
(!
ObjectUtils
.
isEmpty
(
ruleCode
))
{
saveAttendPerformRecord
(
context
,
entity
,
ruleCode
);
}
}
// }
}
// }
}
log
.
info
(
"从新生成已处理的绩效考勤核查数据,执行完成....."
);
}
private
List
<
String
>
getDatesBetween
(
String
startDateStr
,
String
endDateStr
)
{
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
LocalDate
startDate
=
LocalDate
.
parse
(
startDateStr
,
formatter
);
...
...
@@ -328,11 +208,108 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
query
.
setStaffId
(
attendanceRecordErrorEntity
.
getStaffId
());
query
.
setErrorTime
(
attendanceRecordErrorEntity
.
getErrorDateTime
());
List
<
PerformAttendRecordEntity
>
delAttendRecords
=
performAttendRecordService
.
find
(
query
,
context
);
if
(!
ObjectUtils
.
isEmpty
(
delAttendRecords
))
{
if
(!
ObjectUtils
.
isEmpty
(
delAttendRecords
))
{
Long
[]
delIds
=
delAttendRecords
.
stream
().
map
(
i
->
i
.
getId
()).
toArray
(
Long
[]::
new
);
performAttendRecordService
.
remove
(
delIds
,
context
);
log
.
info
(
"删除考勤记录成功,size:{}"
,
delIds
.
length
);
log
.
info
(
"删除考勤记录成功,size:{}"
,
delIds
.
length
);
}
}
}
@Override
protected
void
saveAfter
(
AttendanceRecordErrorEntity
entity
,
Context
context
)
throws
AppException
{
super
.
saveAfter
(
entity
,
context
);
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效
// log.info("生成绩效考勤核查数据.....");
String
ruleCode
=
getRuleCode
(
entity
);
if
(!
ObjectUtils
.
isEmpty
(
ruleCode
))
{
saveAttendPerformRecord
(
context
,
entity
,
ruleCode
);
}
}
@Override
protected
void
saveAfter
(
List
<
AttendanceRecordErrorEntity
>
list
,
Context
context
)
throws
AppException
{
super
.
saveAfter
(
list
,
context
);
if
(!
ObjectUtils
.
isEmpty
(
list
))
{
// log.info("生成绩效考勤核查数据.....");
for
(
AttendanceRecordErrorEntity
entity
:
list
)
{
// if (YesNoEnum.YES.getValue() == entity.getProcessStatus()) {
//判断后打绩效
String
ruleCode
=
getRuleCode
(
entity
);
if
(!
ObjectUtils
.
isEmpty
(
ruleCode
))
{
saveAttendPerformRecord
(
context
,
entity
,
ruleCode
);
}
}
}
}
private
void
saveAttendPerformRecord
(
Context
context
,
AttendanceRecordErrorEntity
entity
,
String
ruleCode
)
{
AttendSaveReq
attendSaveReq
=
new
AttendSaveReq
();
attendSaveReq
.
setAttendanceGroupId
(
entity
.
getAttendanceGroupId
());
attendSaveReq
.
setAttendanceGroupName
(
entity
.
getAttendanceGroupName
());
attendSaveReq
.
setAttendanceDate
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setGoOffTimeStr
(
entity
.
getGoOrOff
());
attendSaveReq
.
setActualAttendTime
(
entity
.
getActualAttendanceDateTime
());
attendSaveReq
.
setErrorResult
(
entity
.
getRemark
());
attendSaveReq
.
setTitle
(
"考勤"
);
attendSaveReq
.
setHappenTime
(
entity
.
getErrorDateTime
());
attendSaveReq
.
setRuleCode
(
ruleCode
);
attendSaveReq
.
setStaffId
(
entity
.
getStaffId
());
performAttendRecordService
.
saveAttend
(
attendSaveReq
,
context
);
}
private
static
String
getRuleCode
(
AttendanceRecordErrorEntity
entity
)
{
String
ruleCode
=
""
;
if
(
ErrorStatusEnum
.
早退
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
//判断时间差定义
Long
earlyMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
earlyMin
>=
0L
&&
earlyMin
<
5L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1002"
;
}
if
(
earlyMin
>=
5L
&&
earlyMin
<
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1004"
;
}
if
(
earlyMin
>=
60L
)
{
//早退5分钟内
ruleCode
=
"ATTEND1006"
;
}
}
else
{
ruleCode
=
"ATTEND1002"
;
}
}
else
if
(
ErrorStatusEnum
.
迟到
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getErrorDateTime
())
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getGoOffDateTime
()))
{
Long
lateMin
=
DateUtil
.
between
(
entity
.
getErrorDateTime
(),
entity
.
getGoOffDateTime
(),
DateUnit
.
MINUTE
);
if
(
lateMin
>=
0L
&&
lateMin
<
5L
)
{
//迟到5分钟内
ruleCode
=
"ATTEND1001"
;
}
if
(
lateMin
>=
5L
&&
lateMin
<
60L
)
{
//迟到5-60
ruleCode
=
"ATTEND1003"
;
}
if
(
lateMin
>=
60L
)
{
//迟到60分钟以上
ruleCode
=
"ATTEND1005"
;
}
}
else
{
//早退5分钟内
ruleCode
=
"ATTEND1001"
;
}
}
else
if
(
ErrorStatusEnum
.
缺卡
.
getValue
()
==
DataUtil
.
converStr2Int
(
entity
.
getProcessResult
(),
3
))
{
ruleCode
=
"ATTEND1007"
;
}
return
ruleCode
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
3c9e3614
...
...
@@ -257,7 +257,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordEntity
.
setId
(
recordEntity
.
getId
());
attendanceRecordEntity
.
setUpdateTime
(
new
Date
());
attendanceRecordEntity
.
setUpdateUserId
(
this
.
getContextUserId
(
context
));
updateList
.
add
(
attendanceRecordEntity
);
// attendanceRecordService.update(attendanceRecordEntity, context);
}
else
{
...
...
@@ -378,6 +377,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordEntity
.
setClassName
(
attendanceClassDetailEntity
==
null
?
""
:
attendanceClassDetailEntity
.
getClassName
());
}
//生成异常记录
log
.
info
(
"开始生成异常考勤记录"
);
genErrorAttendRecord
(
context
,
dateStr
,
attendanceRecordEntity
,
detailEntityList
);
if
(!
ObjectUtils
.
isEmpty
(
detailEntityList
))
{
attendanceRecordEntity
.
setAttendanceRecordDetailList
(
detailEntityList
);
...
...
@@ -497,8 +497,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
if
(
OffWorkResultEnum
.
迟到
.
getValue
()
==
recordDetailEntity
.
getOffWorkResult
())
{
errorEntity
.
setErrorStatus
(
ErrorStatusEnum
.
迟到
.
getValue
());
}
errorEntityList
.
add
(
errorEntity
);
}
...
...
@@ -509,140 +507,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
}
}
private
Boolean
checkDouble
(
List
<
AttendanceRecordErrorEntity
>
errorEntityList
,
AttendanceRecordErrorEntity
checkError
)
{
//检测 新加 的错误 是否存在与列表中
boolean
bool
=
true
;
for
(
AttendanceRecordErrorEntity
error
:
errorEntityList
)
{
//
//if(error.getStaffId()==checkError.getStaffId()&&error.getShiftsId()=)
}
return
bool
;
}
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
());
//查询考勤组详细信息获取班次 todo 默认固定班次 还有自由 与排班制
AttendanceWorkAbstract
workAbstract
=
AttendanceWorkAbstract
.
newType
(
attendanceGroupEntity
.
getType
());
CommonData
commonData
=
new
CommonData
();
commonData
.
setAttendanceGroupEntity
(
attendanceGroupEntity
);
commonData
.
setAttendanceDate
(
attendanceDate
);
commonData
.
setDetailEntityList
(
detailEntityList
);
commonData
.
setStaffId
(
attendanceRecordEntity
.
getStaffId
());
workAbstract
.
doHandleWork
(
commonData
);
/*
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()));
//获取当前班的多个班次,一个班次为一个上下班时间段
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassEntity.getAttendanceClassDetailList();
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 不在 格式化时间
//String currDate = DateUtil.formatTime(attendanceDate);
Date curDateTime = DateUtil.parseTime(DateUtil.formatTime(attendanceDate)).toJdkDate();
boolean goInTime = DateUtil.isIn(curDateTime, goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = DateUtil.isIn(curDateTime, offWorkDateBefore, offWorkDateAfter);
if (goInTime == false && offInTime == false) {
log.info("考勤时间不在上班区间与下班区间中,不做处理!attendDate:{}", DateUtil.formatDateTime(attendanceDate));
continue;
}
if (goInTime) {
//如果是上班打卡区间范围,判断是否迟到
boolean inTime = DateUtil.isIn(curDateTime, goWorkDateBefore, classDetail.getGoWorkDate());
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.迟到.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if (offInTime) {
boolean inTime = DateUtil.isIn(curDateTime, classDetail.getOffWorkDate(), offWorkDateAfter);
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getId()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.早退.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}*/
}
public
String
getWeek
(
Date
date
)
{
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int
dayOfWeek
=
DateUtil
.
dayOfWeek
(
date
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/service/PerformEffectRecordService.java
View file @
3c9e3614
package
com.mortals.xhx.module.perform.service
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.Context
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.perform.model.PerformEffectRecordEntity
;
import
com.mortals.xhx.module.perform.dao.PerformEffectRecordDao
;
import
com.mortals.xhx.module.perform.model.PerformEffectRecordQuery
;
import
org.springframework.web.bind.annotation.RequestBody
;
/**
* PerformEffectRecordService
*
...
...
@@ -23,4 +27,8 @@ public interface PerformEffectRecordService extends ICRUDService<PerformEffectRe
*/
void
updateProcessStatus
(
Long
id
,
Integer
status
)
throws
AppException
;
void
syncEffectRecord
(
PerformEffectRecordQuery
query
,
Context
context
);
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/service/impl/PerformEffectRecordServiceImpl.java
View file @
3c9e3614
...
...
@@ -5,6 +5,7 @@ import com.mortals.xhx.common.utils.BeanUtil;
import
com.mortals.xhx.module.check.model.CheckEffectRecordEntity
;
import
com.mortals.xhx.module.check.service.CheckEffectRecordService
;
import
com.mortals.xhx.module.perform.model.PerformComplainRecordEntity
;
import
com.mortals.xhx.module.perform.model.PerformEffectRecordQuery
;
import
com.mortals.xhx.module.perform.model.PerformRulesEntity
;
import
com.mortals.xhx.module.perform.service.PerformRulesService
;
import
com.mortals.xhx.module.perform.service.PerformStaffConfService
;
...
...
@@ -113,4 +114,9 @@ public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<Perf
dao
.
update
(
update
);
}
@Override
public
void
syncEffectRecord
(
PerformEffectRecordQuery
query
,
Context
context
)
{
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/perform/web/PerformEffectRecordController.java
View file @
3c9e3614
package
com.mortals.xhx.module.perform.web
;
import
cn.hutool.core.date.DateTime
;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.framework.annotation.UnAuth
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.OrderCol
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
...
...
@@ -7,10 +11,14 @@ 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.attendance.model.AttendanceRecordHikQuery
;
import
com.mortals.xhx.module.dept.model.DeptQuery
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.perform.model.PerformEffectRecordQuery
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.util.StopWatch
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -42,6 +50,7 @@ import static com.mortals.framework.ap.SysConstains.*;
*/
@RestController
@RequestMapping
(
"perform/effect/record"
)
@Slf4j
public
class
PerformEffectRecordController
extends
BaseCRUDJsonBodyMappingController
<
PerformEffectRecordService
,
PerformEffectRecordEntity
,
Long
>
{
@Autowired
...
...
@@ -87,4 +96,43 @@ public class PerformEffectRecordController extends BaseCRUDJsonBodyMappingContro
//query.setHappenTimeEnd(DateUtil.formatDate(query.getCreateTime()));
}
}
@PostMapping
(
value
=
"/sync"
)
@UnAuth
public
Rest
<
String
>
syncEffectRecord
(
@RequestBody
PerformEffectRecordQuery
query
)
{
Rest
<
String
>
ret
=
new
Rest
();
Map
<
String
,
Object
>
model
=
new
HashMap
();
Context
context
=
this
.
getContext
();
String
busiDesc
=
"查询"
+
this
.
getModuleDesc
();
int
code
=
1
;
try
{
//天数区间分段计算
DateTime
attendStart
=
DateUtil
.
parseDate
(
query
.
getHappenTimeStart
());
DateTime
attendEnd
=
DateUtil
.
parseDate
(
query
.
getHappenTimeEnd
());
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
(
"执行本地方法"
);
stopWatch
.
stop
();
log
.
info
(
"效能同步记录日期:{} 完成,耗时:{}ms"
,
curDate
.
toDateStr
(),
stopWatch
.
getLastTaskTimeMillis
());
}
model
.
put
(
"message_info"
,
busiDesc
+
"成功"
);
this
.
recordSysLog
(
this
.
request
,
busiDesc
+
" 【成功】"
);
}
catch
(
Exception
e
)
{
code
=
-
1
;
this
.
doException
(
this
.
request
,
busiDesc
,
model
,
e
);
model
.
put
(
"message_info"
,
e
.
getMessage
());
}
this
.
init
(
model
,
context
);
ret
.
setCode
(
code
);
ret
.
setMsg
(
model
.
get
(
"message_info"
)
==
null
?
""
:
model
.
remove
(
"message_info"
).
toString
());
return
ret
;
}
}
\ No newline at end of file
attendance-performance-manager/src/test/java/com/mortals/httpclient/attendance/AttendanceRecordErrorController.http
View file @
3c9e3614
...
...
@@ -19,8 +19,8 @@ POST {{baseUrl}}/attendance/record/error/doReprocess
Content-Type: application/json
{
"errorDateTimeStart":"2024-0
1
-01",
"errorDateTimeEnd":"2024-0
1-30
"
"errorDateTimeStart":"2024-0
2
-01",
"errorDateTimeEnd":"2024-0
2-29
"
}
...
...
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
View file @
3c9e3614
...
...
@@ -34,17 +34,15 @@ Content-Type: application/json
###海康考勤打卡记录计算
POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Authorization: {{authToken}}
Content-Type: application/json
{
"attendanceDateStart":"2024-0
3
-01",
"attendanceDateEnd":"2024-0
3-13
"
"attendanceDateStart":"2024-0
2
-01",
"attendanceDateEnd":"2024-0
2-29
"
}
###海康考勤打卡记录计算1
POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Authorization: {{authToken}}
Content-Type: application/json
{
...
...
@@ -77,15 +75,27 @@ Content-Type: application/json
###考勤汇总计算
POST {{baseUrl}}/
/
attendance/stat/summary
POST {{baseUrl}}/attendance/stat/summary
Content-Type: application/json
{"summaryTimeStart":"2024-03-
01","summaryTimeEnd":"2024-03-13
"}
{"summaryTimeStart":"2024-03-
15","summaryTimeEnd":"2024-03-15
"}
###短信设置编辑
GET {{baseUrl}}/sms/set/edit?id={{SmsSet_id}}
Accept: application/json
###绩效汇总计算
POST {{baseUrl}}/staff/perform/summary/summary
Content-Type: application/json
{"checkTimeStart":"2024-02-01","checkTimeEnd":"2024-02-29"}
###考勤打卡记录异常信息列表
POST {{baseUrl}}/attendance/record/error/doReprocess
Content-Type: application/json
{
"errorDateTimeStart":"2024-02-01",
"errorDateTimeEnd":"2024-02-29"
}
###id生成
...
...
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