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
30d24015
Commit
30d24015
authored
Nov 21, 2023
by
廖旭伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
考勤汇总更新时锁表BUg处理
parent
440987d3
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
144 additions
and
45 deletions
+144
-45
attendance-performance-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java
...er/src/main/java/com/mortals/xhx/common/key/RedisKey.java
+3
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/common/utils/AttendSummaryThread.java
...ava/com/mortals/xhx/common/utils/AttendSummaryThread.java
+0
-6
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/AttendSummaryService.java
...s/xhx/daemon/applicationservice/AttendSummaryService.java
+98
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
...om/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
+15
-12
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
...ndance/service/impl/AttendanceLeaveRecordServiceImpl.java
+10
-4
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordErrorServiceImpl.java
...ndance/service/impl/AttendanceRecordErrorServiceImpl.java
+8
-4
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
...s/xhx/module/attendance/web/AttendanceStatController.java
+10
-19
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/common/key/RedisKey.java
View file @
30d24015
...
...
@@ -21,4 +21,7 @@ public class RedisKey {
*/
public
static
final
String
KEY_ATTENC_TOTOAL_CACHE
=
"attend:total"
;
/** 考勤统计 **/
public
static
final
String
KEY_ATTENDANCE_STAT_CACHE
=
"attendance:stat"
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/common/utils/AttendSummaryThread.java
View file @
30d24015
package
com.mortals.xhx.common.utils
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
com.mortals.xhx.module.check.model.CheckAttendRecordEntity
;
import
com.mortals.xhx.module.check.model.vo.StaffCheckSummaryQuery
;
import
com.mortals.xhx.module.check.service.CheckAttendRecordService
;
import
com.mortals.xhx.utils.SpringUtils
;
import
lombok.NonNull
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/applicationservice/AttendSummaryService.java
0 → 100644
View file @
30d24015
package
com.mortals.xhx.daemon.applicationservice
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.springcloud.service.IApplicationStartedService
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.ObjectUtils
;
import
java.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
/***
* 考勤汇总任务执行
*/
@Component
@Slf4j
public
class
AttendSummaryService
implements
IApplicationStartedService
{
protected
Boolean
stopped
=
false
;
@Autowired
private
ICacheService
cacheService
;
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Override
public
void
start
()
{
Thread
sendThread
=
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
int
waitTime
=
10
;
while
(!
stopped
)
{
try
{
AttendanceSummaryQuery
query
=
cacheService
.
rpop
(
KEY_ATTENDANCE_STAT_CACHE
,
AttendanceSummaryQuery
.
class
);
if
(!
ObjectUtils
.
isEmpty
(
query
)){
if
(
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeStart
())
&&
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeEnd
()))
{
List
<
String
>
dateList
=
getDatesBetween
(
query
.
getSummaryTimeStart
(),
query
.
getSummaryTimeEnd
());
for
(
String
day
:
dateList
)
{
AttendanceSummaryQuery
temp
=
new
AttendanceSummaryQuery
(
day
);
attendanceStatService
.
doAttendanceSummary
(
temp
);
}
}
else
{
attendanceStatService
.
doAttendanceSummary
(
query
);
}
}
try
{
Thread
.
sleep
(
waitTime
);
}
catch
(
InterruptedException
e2
)
{
}
}
catch
(
Exception
e
)
{
log
.
error
(
"异常"
,
e
);
try
{
Thread
.
sleep
(
waitTime
);
}
catch
(
InterruptedException
e2
)
{
}
}
}
}
});
sendThread
.
start
();
}
@Override
public
void
stop
()
{
log
.
info
(
"停止服务.."
);
this
.
stopped
=
true
;
}
@Override
public
int
getOrder
()
{
return
20
;
}
private
List
<
String
>
getDatesBetween
(
String
startDateStr
,
String
endDateStr
)
{
DateTimeFormatter
formatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd"
);
LocalDate
startDate
=
LocalDate
.
parse
(
startDateStr
,
formatter
);
LocalDate
endDate
=
LocalDate
.
parse
(
endDateStr
,
formatter
);
List
<
String
>
dates
=
new
ArrayList
<>();
//这里是判断开始日期是否在结束日期之后或者=结束日期
while
(
startDate
.
isBefore
(
endDate
)
||
startDate
.
isEqual
(
endDate
))
{
String
add
=
startDate
.
format
(
formatter
);
dates
.
add
(
add
);
startDate
=
startDate
.
plusDays
(
1
);
}
return
dates
;
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
View file @
30d24015
...
...
@@ -5,11 +5,14 @@ import com.mortals.framework.service.ICacheService;
import
com.mortals.framework.service.ITask
;
import
com.mortals.framework.service.ITaskExcuteService
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
/**
* 考勤汇总
*/
...
...
@@ -26,18 +29,18 @@ public class AttendanceSummaryTaskImpl implements ITaskExcuteService {
@Override
public
void
excuteTask
(
ITask
task
)
throws
AppException
{
try
{
String
verify
=
cacheService
.
get
(
SUMMARY_TASK_KEY
);
if
(
StringUtils
.
isNotEmpty
(
verify
)&&
verify
.
equals
(
"true"
)){
Thread
.
sleep
(
600
*
1000
);
}
cacheService
.
set
(
SUMMARY_TASK_KEY
,
"true"
,
600
);
attendanceStatService
.
doAttendanceSummary
(
null
);
cacheService
.
expire
(
SUMMARY_TASK_KEY
,
1
);
}
catch
(
Exception
e
){
}
//
try {
//
String verify = cacheService.get(SUMMARY_TASK_KEY);
//
if(StringUtils.isNotEmpty(verify)&&verify.equals("true")){
//
Thread.sleep(600*1000);
//
}
//
cacheService.set(SUMMARY_TASK_KEY,"true",600);
//
attendanceStatService.doAttendanceSummary(null);
//
cacheService.expire(SUMMARY_TASK_KEY,1);
//
}catch (Exception e){
//
//
}
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
new
AttendanceSummaryQuery
());
}
@Override
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceLeaveRecordServiceImpl.java
View file @
30d24015
package
com.mortals.xhx.module.attendance.service.impl
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.ThreadPool
;
import
com.mortals.xhx.common.utils.AttendSummaryThread
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -12,6 +11,9 @@ import com.mortals.framework.model.Context;
import
com.mortals.xhx.module.attendance.dao.AttendanceLeaveRecordDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
/**
* AttendanceLeaveRecordService
* 请假记录信息 service实现
...
...
@@ -24,6 +26,8 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Autowired
private
ICacheService
cacheService
;
@Override
protected
void
updateAfter
(
AttendanceLeaveRecordEntity
entity
,
Context
context
)
throws
AppException
{
...
...
@@ -33,8 +37,10 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
query
.
setStaffId
(
entity
.
getLeavePersonId
());
query
.
setSummaryTimeStart
(
DateUtils
.
getStrDate
(
entity
.
getStartTime
()));
query
.
setSummaryTimeEnd
(
DateUtils
.
getStrDate
(
entity
.
getEndTime
()));
AttendSummaryThread
summaryThread
=
new
AttendSummaryThread
(
attendanceStatService
,
query
);
ThreadPool
.
getInstance
().
execute
(
summaryThread
);
// AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
// ThreadPool.getInstance().execute(summaryThread);
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
query
);
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordErrorServiceImpl.java
View file @
30d24015
...
...
@@ -3,15 +3,14 @@ package com.mortals.xhx.module.attendance.service.impl;
import
cn.hutool.core.date.DateUnit
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.util.DataUtil
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.framework.util.ThreadPool
;
import
com.mortals.xhx.busiz.h5.req.AttendSaveReq
;
import
com.mortals.xhx.busiz.h5.web.ApiWebPerformController
;
import
com.mortals.xhx.common.code.ErrorStatusEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.utils.AttendSummaryThread
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassDetailEntity
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.*
;
...
...
@@ -28,6 +27,8 @@ import org.springframework.util.ObjectUtils;
import
java.util.List
;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
/**
* AttendanceRecordErrorService
* 考勤打卡记录异常信息 service实现
...
...
@@ -52,6 +53,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
private
StaffService
staffService
;
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Autowired
private
ICacheService
cacheService
;
@Override
...
...
@@ -151,8 +154,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
AttendanceSummaryQuery
query
=
new
AttendanceSummaryQuery
();
query
.
setStaffId
(
entity
.
getStaffId
());
query
.
setSummaryTime
(
DateUtils
.
getStrDate
(
entity
.
getErrorDateTime
()));
AttendSummaryThread
summaryThread
=
new
AttendSummaryThread
(
attendanceStatService
,
query
);
ThreadPool
.
getInstance
().
execute
(
summaryThread
);
// AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
// ThreadPool.getInstance().execute(summaryThread);
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
query
);
}
}
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
View file @
30d24015
...
...
@@ -54,6 +54,7 @@ import org.springframework.web.bind.annotation.*;
import
org.springframework.web.multipart.MultipartFile
;
import
static
com
.
mortals
.
framework
.
ap
.
SysConstains
.*;
import
static
com
.
mortals
.
xhx
.
common
.
key
.
RedisKey
.
KEY_ATTENDANCE_STAT_CACHE
;
/**
* 考勤汇总信息
...
...
@@ -105,26 +106,16 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
String
busiDesc
=
"执行考勤汇总任务"
;
int
code
=
1
;
try
{
String
verify
=
cacheService
.
get
(
SUMMARY_TASK_KEY
);
if
(
StringUtils
.
isNotEmpty
(
verify
)
&&
verify
.
equals
(
"true"
))
{
throw
new
AppException
(
"汇总任务正在执行,请勿重复操作"
);
}
executorService
.
submit
(
new
Runnable
()
{
@Override
public
void
run
()
{
cacheService
.
set
(
SUMMARY_TASK_KEY
,
"true"
,
600
);
if
(
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeStart
())
&&
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeEnd
()))
{
List
<
String
>
dateList
=
getDatesBetween
(
query
.
getSummaryTimeStart
(),
query
.
getSummaryTimeEnd
());
for
(
String
day
:
dateList
)
{
AttendanceSummaryQuery
temp
=
new
AttendanceSummaryQuery
(
day
);
service
.
doAttendanceSummary
(
temp
);
}
}
else
{
service
.
doAttendanceSummary
(
query
);
}
cacheService
.
expire
(
SUMMARY_TASK_KEY
,
1
);
if
(
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeStart
())
&&
StringUtils
.
isNotEmpty
(
query
.
getSummaryTimeEnd
()))
{
List
<
String
>
dateList
=
getDatesBetween
(
query
.
getSummaryTimeStart
(),
query
.
getSummaryTimeEnd
());
for
(
String
day
:
dateList
)
{
AttendanceSummaryQuery
temp
=
new
AttendanceSummaryQuery
(
day
);
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
temp
);
}
});
}
else
{
cacheService
.
lpush
(
KEY_ATTENDANCE_STAT_CACHE
,
query
);
}
model
.
put
(
"message_info"
,
"开始执行考勤汇总,请稍后查看"
);
}
catch
(
Exception
var9
)
{
code
=
-
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