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
bac5e986
Commit
bac5e986
authored
Aug 07, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
77d1e463
d5ec6196
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
667 additions
and
24 deletions
+667
-24
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
...om/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
+47
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceSummaryDao.java
...rtals/xhx/module/attendance/dao/AttendanceSummaryDao.java
+35
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceSummaryDaoImpl.java
...odule/attendance/dao/ibatis/AttendanceSummaryDaoImpl.java
+43
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
.../module/attendance/dingmsg/api/DingMessageController.java
+23
-20
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java
...hx/module/attendance/model/vo/AttendanceSummaryQuery.java
+23
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/ErrorSummaryVo.java
...ortals/xhx/module/attendance/model/vo/ErrorSummaryVo.java
+42
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/LeaveSummaryVo.java
...ortals/xhx/module/attendance/model/vo/LeaveSummaryVo.java
+38
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/VacationBalanceSummaryVo.java
.../module/attendance/model/vo/VacationBalanceSummaryVo.java
+132
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java
.../xhx/module/attendance/service/AttendanceStatService.java
+7
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
...le/attendance/service/impl/AttendanceStatServiceImpl.java
+113
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
...s/xhx/module/attendance/web/AttendanceStatController.java
+77
-4
attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceSummaryMapper.xml
...rces/sqlmap/module/attendance/AttendanceSummaryMapper.xml
+87
-0
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/daemon/task/AttendanceSummaryTaskImpl.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.daemon.task
;
import
com.mortals.framework.exception.AppException
;
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.service.AttendanceStatService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* 考勤汇总
*/
@Slf4j
@Service
(
"AttendanceSummaryTask"
)
public
class
AttendanceSummaryTaskImpl
implements
ITaskExcuteService
{
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Autowired
private
ICacheService
cacheService
;
private
static
String
SUMMARY_TASK_KEY
=
"attendanceSummaryTask:run"
;
@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
.
setnx
(
SUMMARY_TASK_KEY
,
"true"
,
3600
);
attendanceStatService
.
doAttendanceSummary
(
null
);
cacheService
.
setnx
(
SUMMARY_TASK_KEY
,
"false"
,
60
);
}
catch
(
Exception
e
){
}
}
@Override
public
void
stopTask
(
ITask
task
)
throws
AppException
{
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/AttendanceSummaryDao.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.dao
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.model.vo.ErrorSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.LeaveSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.VacationBalanceSummaryVo
;
import
java.util.List
;
/***
* 考勤汇总
*/
public
interface
AttendanceSummaryDao
{
/**
* 汇总当前日期假期余额
* @param query
* @return
*/
List
<
VacationBalanceSummaryVo
>
getVacationBalanceSummary
(
AttendanceSummaryQuery
query
);
/**
* 汇总当前日期请假情况
* @param query
* @return
*/
List
<
LeaveSummaryVo
>
getLeaveSummary
(
AttendanceSummaryQuery
query
);
/**
* 汇总当前日期异常考勤
* @param query
* @return
*/
List
<
ErrorSummaryVo
>
getErrorSummary
(
AttendanceSummaryQuery
query
);
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dao/ibatis/AttendanceSummaryDaoImpl.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.dao.ibatis
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.model.vo.ErrorSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.LeaveSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.VacationBalanceSummaryVo
;
import
com.mortals.xhx.module.attendance.dao.AttendanceSummaryDao
;
import
org.apache.ibatis.session.SqlSessionFactory
;
import
org.mybatis.spring.support.SqlSessionDaoSupport
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
(
"attendanceSummaryDao"
)
public
class
AttendanceSummaryDaoImpl
extends
SqlSessionDaoSupport
implements
AttendanceSummaryDao
{
protected
String
namespace
=
this
.
getClass
().
getName
();
@Autowired
public
void
setSqlSessionFactory
(
SqlSessionFactory
sqlSessionFactory
)
{
super
.
setSqlSessionFactory
(
sqlSessionFactory
);
}
protected
String
getSqlId
(
String
id
)
{
return
this
.
namespace
+
"."
+
id
;
}
@Override
public
List
<
VacationBalanceSummaryVo
>
getVacationBalanceSummary
(
AttendanceSummaryQuery
query
)
{
return
this
.
getSqlSession
().
selectList
(
this
.
getSqlId
(
"getVacationBalanceSummary"
),
query
);
}
@Override
public
List
<
LeaveSummaryVo
>
getLeaveSummary
(
AttendanceSummaryQuery
query
)
{
return
this
.
getSqlSession
().
selectList
(
this
.
getSqlId
(
"getLeaveSummary"
),
query
);
}
@Override
public
List
<
ErrorSummaryVo
>
getErrorSummary
(
AttendanceSummaryQuery
query
)
{
return
this
.
getSqlSession
().
selectList
(
this
.
getSqlId
(
"getErrorSummary"
),
query
);
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
View file @
bac5e986
...
...
@@ -141,16 +141,16 @@ public class DingMessageController {
if
(
result
.
getTasks
().
size
()
>
0
){
if
(
result
.
getTasks
().
get
(
0
).
getCreateTime
()
!=
null
&&
result
.
getTasks
().
get
(
0
).
getFinishTime
()
!=
null
){
Date
startTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getCreateTime
(),
"yyyy-MM-dd'T'HH:mm'Z'"
,
false
);
Date
endTime
=
dateFormat
(
result
.
getTasks
().
get
(
0
).
getFinishTime
(),
"yyyy-MM-dd'T'HH:mm'Z'"
,
false
);
leaveRecordEntity
.
setStartTime
(
startTime
);
leaveRecordEntity
.
setEndTime
(
endTime
);
leaveRecordEntity
.
setDuration
((
int
)
((
endTime
.
getTime
()
-
startTime
.
getTime
())/
1000
));
}
}
//
if(result.getTasks().size() >0 ){
//
if(result.getTasks().get(0).getCreateTime() != null && result.getTasks().get(0).getFinishTime() != null){
//
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
//
//
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime(),"yyyy-MM-dd'T'HH:mm'Z'",false);
//
leaveRecordEntity.setStartTime(startTime);
//
leaveRecordEntity.setEndTime(endTime);
//
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
//
}
//
}
String
leave_code
=
LeaveRulesEnum
.
事假
.
getLeave_code
();
String
leave_name
=
"事假"
;
...
...
@@ -169,7 +169,7 @@ public class DingMessageController {
switch
(
jsonArray
.
get
(
3
).
toString
()){
case
"halfDay"
:
case
"day"
:
leaveRecordEntity
.
setDuration
((
int
)
(
Float
.
parseFloat
(
jsonArray
.
get
(
2
).
toString
())*
60
*
60
*
24
));
//
小时
转换成秒
leaveRecordEntity
.
setDuration
((
int
)
(
Float
.
parseFloat
(
jsonArray
.
get
(
2
).
toString
())*
60
*
60
*
24
));
//
天
转换成秒
break
;
default
:
//除了按天和半天计算的假期 其余都是按小时返回
leaveRecordEntity
.
setDuration
((
int
)
(
Float
.
parseFloat
(
jsonArray
.
get
(
2
).
toString
())*
60
*
60
));
//小时转换成秒
...
...
@@ -281,21 +281,24 @@ public class DingMessageController {
if
(
result
.
getResult
().
compareToIgnoreCase
(
"AGREE"
)
==
0
){
if
(
result
.
getTasks
().
size
()
>
1
){
if
(
result
.
getTasks
().
get
(
1
).
getStatus
().
compareToIgnoreCase
(
"CANCELED"
)
!=
0
){
leaveRecordEntity
.
setAuditResult
(
4
);
//撤销审批完成
}
else
{
leaveRecordEntity
.
setAuditResult
(
1
);
}
}
}
else
if
(
result
.
equals
(
""
)){
//撤销假期审批中result会为空 撤销审批通过后result为AGREE
// if(result.getTasks().size() > 1){
// if(result.getTasks().get(1).getStatus().compareToIgnoreCase("CANCELED") == 0){
// leaveRecordEntity.setAuditResult(4); //撤销审批完成
// }else {
// leaveRecordEntity.setAuditResult(1);
// }
// }
leaveRecordEntity
.
setAuditResult
(
1
);
}
else
if
(
result
.
equals
(
""
)){
//撤销假期审批中result会为空 撤销审批通过后result为AGREE
if
(
result
.
getTasks
().
size
()
>
1
){
log
.
info
(
"status"
+
result
.
getTasks
().
get
(
1
).
getStatus
());
if
(
result
.
getTasks
().
get
(
1
).
getStatus
().
compareToIgnoreCase
(
"CANCELED"
)
!=
0
){
leaveRecordEntity
.
setAuditResult
(
3
);
//撤销审批中
}
}
}
else
{
}
else
{
leaveRecordEntity
.
setAuditResult
(
2
);
//请假审批中
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/AttendanceSummaryQuery.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.model.vo
;
import
lombok.Data
;
/**
* 考勤汇总查询对象
*/
@Data
public
class
AttendanceSummaryQuery
{
/** 汇总日期 yyyy-mm-dd */
private
String
summaryTime
;
private
String
summaryTimeStart
;
private
String
summaryTimeEnd
;
public
AttendanceSummaryQuery
(
String
summaryTime
){
this
.
summaryTime
=
summaryTime
;
}
public
AttendanceSummaryQuery
(){
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/ErrorSummaryVo.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.model.vo
;
import
lombok.Data
;
/**
* 考勤异常汇总
*/
@Data
public
class
ErrorSummaryVo
{
/**
* 员工ID
*/
private
Long
staffId
;
/**
* 员工姓名
*/
private
String
staffName
;
/**
* 年
*/
private
Integer
year
;
/**
* 月
*/
private
Integer
month
;
/**
* 日
*/
private
Integer
day
;
/**
* 缺卡次数
*/
private
Integer
morningTimes
;
/**
* 考勤汇总-迟到(次)
*/
private
Integer
lateTimes
;
/**
* 考勤汇总-早退(次)
*/
private
Integer
overtimeTimes
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/LeaveSummaryVo.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.model.vo
;
import
lombok.Data
;
/**
* 请假汇总
*/
@Data
public
class
LeaveSummaryVo
{
/**
* 员工ID
*/
private
Long
staffId
;
/**
* 员工姓名
*/
private
String
staffName
;
/**
* 年
*/
private
Integer
year
;
/**
* 月
*/
private
Integer
month
;
/**
* 日
*/
private
Integer
day
;
/**
* 请假类型(1.事假,2.调休,3.病假,4.年假,5.产假,6.陪产假,7.婚假,8.例假,9.哺乳假,10.丧假,11.回单位,12.因公请假,13.外出勘验,14.值班补班,15.体检,16.隔离,17.因公外出,18.公休,19.育儿假,20.调回单位,21.探亲假)
*/
private
Integer
leaveType
;
/**
* 时长,单位秒
*/
private
Integer
duration
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/model/vo/VacationBalanceSummaryVo.java
0 → 100644
View file @
bac5e986
package
com.mortals.xhx.module.attendance.model.vo
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* 假期余额汇总
*/
@Data
public
class
VacationBalanceSummaryVo
{
/**
* 员工ID
*/
private
Long
staffId
;
/**
* 员工姓名
*/
private
String
staffName
;
/**
* 所属部门
*/
private
Long
deptId
;
/**
* 所属部门名称
*/
private
String
deptName
;
/**
* 工号
*/
private
String
workNum
;
/**
* 联系电话
*/
private
String
phoneNumber
;
/**
* 年
*/
private
Integer
year
;
/**
* 月
*/
private
Integer
month
;
/**
* 日
*/
private
Integer
day
;
/**
* 事假(天)
*/
private
BigDecimal
personalLeaveDays
;
/**
* 调休(天)
*/
private
BigDecimal
compensatedLeaveDays
;
/**
* 病假(天)
*/
private
BigDecimal
sickLeaveDays
;
/**
* 年假(天)
*/
private
BigDecimal
annualLeaveDays
;
/**
* 婚假(天)
*/
private
BigDecimal
marriageLeaveDays
;
/**
* 产假(天)
*/
private
BigDecimal
maternityLeaveDays
;
/**
* 陪产假(天)
*/
private
BigDecimal
paternityLeaveDays
;
/**
* 例假(天)
*/
private
BigDecimal
menstrualLeaveDays
;
/**
* 哺乳假(天)
*/
private
BigDecimal
breastfeedingLeaveDays
;
/**
* 丧假(天)
*/
private
BigDecimal
bereavementLeaveDays
;
/**
* 回单位(天)
*/
private
BigDecimal
backToUnit
;
/**
* 因公请假(天)
*/
private
BigDecimal
onDutyLeave
;
/**
* 外出勘验(天)
*/
private
BigDecimal
outOfOffice
;
/**
* 值班补班(天)
*/
private
BigDecimal
shiftCompensation
;
/**
* 体检(天)
*/
private
BigDecimal
physicalExamination
;
/**
* 隔离(天)
*/
private
BigDecimal
quarantine
;
/**
* 因公外出(与窗口工作无关/天)
*/
private
BigDecimal
businessTrip
;
/**
* 公休(天)
*/
private
BigDecimal
publicHoliday
;
/**
* 育儿假(天)
*/
private
BigDecimal
childRearingLeave
;
/**
* 调回单位(或离职/天)
*/
private
BigDecimal
transferBack
;
/**
* 探亲假(天)
*/
private
BigDecimal
homeLeave
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/AttendanceStatService.java
View file @
bac5e986
package
com.mortals.xhx.module.attendance.service
;
import
com.mortals.framework.service.ICRUDService
;
import
com.mortals.xhx.module.attendance.model.AttendanceStatEntity
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
/**
* AttendanceStatService
*
...
...
@@ -11,4 +13,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
*/
public
interface
AttendanceStatService
extends
ICRUDService
<
AttendanceStatEntity
,
Long
>{
/**
* 生成考勤汇总数据
* @param query
*/
void
doAttendanceSummary
(
AttendanceSummaryQuery
query
);
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceStatServiceImpl.java
View file @
bac5e986
package
com.mortals.xhx.module.attendance.service.impl
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.util.DateUtils
;
import
com.mortals.framework.util.StringUtils
;
import
com.mortals.xhx.common.code.LeaveTypeEnum
;
import
com.mortals.xhx.common.utils.BeanUtil
;
import
com.mortals.xhx.module.attendance.dao.AttendanceSummaryDao
;
import
com.mortals.xhx.module.attendance.model.AttendanceStaffStatEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceStaffStatQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceStatQuery
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.model.vo.ErrorSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.LeaveSummaryVo
;
import
com.mortals.xhx.module.attendance.model.vo.VacationBalanceSummaryVo
;
import
com.mortals.xhx.module.attendance.service.AttendanceStaffStatService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.mortals.framework.service.impl.AbstractCRUDServiceImpl
;
...
...
@@ -13,6 +25,8 @@ import com.mortals.xhx.module.attendance.dao.AttendanceStatDao;
import
com.mortals.xhx.module.attendance.model.AttendanceStatEntity
;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
import
java.math.BigDecimal
;
import
java.util.Date
;
import
java.util.List
;
/**
...
...
@@ -26,6 +40,8 @@ import java.util.List;
public
class
AttendanceStatServiceImpl
extends
AbstractCRUDServiceImpl
<
AttendanceStatDao
,
AttendanceStatEntity
,
Long
>
implements
AttendanceStatService
{
@Autowired
private
AttendanceStaffStatService
attendanceStaffStatService
;
@Autowired
private
AttendanceSummaryDao
attendanceSummaryDao
;
@Override
protected
void
findAfter
(
AttendanceStatEntity
entity
,
Context
context
,
List
<
AttendanceStatEntity
>
list
)
throws
AppException
{
...
...
@@ -122,4 +138,101 @@ public class AttendanceStatServiceImpl extends AbstractCRUDServiceImpl<Attendanc
});
super
.
findAfter
(
params
,
pageInfo
,
context
,
list
);
}
@Override
public
void
doAttendanceSummary
(
AttendanceSummaryQuery
query
)
{
try
{
long
currentTime
=
System
.
currentTimeMillis
();
if
(
query
==
null
)
{
query
=
new
AttendanceSummaryQuery
(
DateUtils
.
getCurrStrDate
());
}
if
(
StringUtils
.
isEmpty
(
query
.
getSummaryTime
()))
{
query
.
setSummaryTime
(
DateUtils
.
getCurrStrDate
());
}
log
.
info
(
"开始汇总["
+
query
.
getSummaryTime
()
+
"]考勤....."
);
//汇总当前日期假期余额
List
<
VacationBalanceSummaryVo
>
vacationBalanceSummaryVoList
=
attendanceSummaryDao
.
getVacationBalanceSummary
(
query
);
if
(
CollectionUtils
.
isNotEmpty
(
vacationBalanceSummaryVoList
))
{
for
(
VacationBalanceSummaryVo
item
:
vacationBalanceSummaryVoList
)
{
AttendanceStatEntity
temp
=
this
.
selectOne
(
new
AttendanceStatQuery
().
staffId
(
item
.
getStaffId
()).
year
(
item
.
getYear
()).
month
(
item
.
getMonth
()).
day
(
item
.
getDay
()));
if
(
temp
==
null
)
{
AttendanceStatEntity
attendanceStatEntity
=
new
AttendanceStatEntity
();
attendanceStatEntity
.
initAttrValue
();
BeanUtils
.
copyProperties
(
item
,
attendanceStatEntity
,
BeanUtil
.
getNullPropertyNames
(
item
));
attendanceStatEntity
.
setCreateTime
(
new
Date
());
attendanceStatEntity
.
setCreateUserId
(
1
l
);
this
.
dao
.
insert
(
attendanceStatEntity
);
}
else
{
BeanUtils
.
copyProperties
(
item
,
temp
,
BeanUtil
.
getNullPropertyNames
(
item
));
this
.
dao
.
update
(
temp
);
}
}
}
log
.
info
(
"完成汇总当前日期假期余额....."
);
//汇总当前日期请假情况
List
<
LeaveSummaryVo
>
leaveSummaryVoList
=
attendanceSummaryDao
.
getLeaveSummary
(
query
);
if
(
CollectionUtils
.
isNotEmpty
(
leaveSummaryVoList
))
{
BigDecimal
hour
=
new
BigDecimal
(
3600
);
for
(
LeaveSummaryVo
item
:
leaveSummaryVoList
)
{
AttendanceStatEntity
temp
=
this
.
selectOne
(
new
AttendanceStatQuery
().
staffId
(
item
.
getStaffId
()).
year
(
item
.
getYear
()).
month
(
item
.
getMonth
()).
day
(
item
.
getDay
()));
if
(
temp
!=
null
)
{
BigDecimal
leaveTime
=
new
BigDecimal
(
item
.
getDuration
()).
divide
(
hour
,
1
,
BigDecimal
.
ROUND_HALF_DOWN
);
LeaveTypeEnum
leaveTypeEnum
=
LeaveTypeEnum
.
getByValue
(
item
.
getLeaveType
());
switch
(
leaveTypeEnum
)
{
case
事假:
temp
.
setPersonalLeave
(
leaveTime
);
break
;
case
调休:
temp
.
setCompensatedLeaveDays
(
leaveTime
);
break
;
case
病假:
temp
.
setSickLeave
(
leaveTime
);
break
;
case
年假:
temp
.
setAnnualLeaveDays
(
leaveTime
);
break
;
case
产假:
temp
.
setMaternityLeave
(
leaveTime
);
break
;
case
陪产假:
temp
.
setPaternityLeaveDays
(
leaveTime
);
break
;
case
婚假:
temp
.
setMarriageLeave
(
leaveTime
);
break
;
case
例假:
temp
.
setMenstrualLeaveDays
(
leaveTime
);
break
;
case
哺乳假:
temp
.
setBreastfeedingLeaveDays
(
leaveTime
);
break
;
case
丧假:
temp
.
setFuneralLeave
(
leaveTime
);
break
;
default
:
temp
.
setPersonalLeave
(
leaveTime
);
break
;
}
this
.
dao
.
update
(
temp
);
}
}
}
log
.
info
(
"完成汇总当前日期请假情况....."
);
//汇总当前日期异常考勤
List
<
ErrorSummaryVo
>
errorSummaryVoList
=
attendanceSummaryDao
.
getErrorSummary
(
query
);
if
(
CollectionUtils
.
isNotEmpty
(
errorSummaryVoList
))
{
for
(
ErrorSummaryVo
item
:
errorSummaryVoList
)
{
AttendanceStatEntity
temp
=
this
.
selectOne
(
new
AttendanceStatQuery
().
staffId
(
item
.
getStaffId
()).
year
(
item
.
getYear
()).
month
(
item
.
getMonth
()).
day
(
item
.
getDay
()));
if
(
temp
!=
null
)
{
BeanUtils
.
copyProperties
(
item
,
temp
,
BeanUtil
.
getNullPropertyNames
(
item
));
this
.
dao
.
update
(
temp
);
}
}
}
log
.
info
(
"完成汇总当前日期异常考勤....."
);
log
.
info
(
"日期:"
+
query
.
getSummaryTime
()
+
",考勤汇总执行完成,耗时:"
+
(
System
.
currentTimeMillis
()
-
currentTime
)
+
"毫秒...."
);
}
catch
(
Exception
e
){
log
.
error
(
"考勤汇总出错"
,
e
);
}
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/web/AttendanceStatController.java
View file @
bac5e986
package
com.mortals.xhx.module.attendance.web
;
import
com.mortals.framework.annotation.UnAuth
;
import
com.mortals.framework.common.Rest
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.framework.model.PageInfo
;
import
com.mortals.framework.model.Result
;
import
com.mortals.framework.service.ICacheService
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.module.attendance.model.AttendanceClassQuery
;
import
com.mortals.xhx.module.attendance.model.AttendanceGroupQuery
;
import
com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
com.mortals.xhx.module.attendance.service.AttendanceGroupService
;
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.*
;
...
...
@@ -19,12 +27,14 @@ import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import
com.mortals.xhx.module.attendance.service.AttendanceStatService
;
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.time.LocalDate
;
import
java.time.format.DateTimeFormatter
;
import
java.util.*
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
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
.*;
...
...
@@ -48,6 +58,9 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
@Autowired
private
DeptService
deptService
;
@Autowired
private
ICacheService
cacheService
;
@Autowired
private
AttendanceClassService
attendanceClassService
;
...
...
@@ -55,6 +68,10 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
super
.
setModuleDesc
(
"考勤汇总信息"
);
}
private
ExecutorService
executorService
=
Executors
.
newCachedThreadPool
();
private
static
String
SUMMARY_TASK_KEY
=
"attendanceSummaryTask:run"
;
@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
())));
...
...
@@ -63,5 +80,61 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
super
.
init
(
model
,
context
);
}
@PostMapping
({
"summary"
})
@UnAuth
public
Rest
<
Object
>
summary
(
@RequestBody
AttendanceSummaryQuery
query
)
{
Rest
<
Object
>
ret
=
new
Rest
();
Map
<
String
,
Object
>
model
=
new
HashMap
();
Context
context
=
this
.
getContext
();
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
.
setnx
(
SUMMARY_TASK_KEY
,
"true"
,
3600
);
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
.
setnx
(
SUMMARY_TASK_KEY
,
"false"
,
60
);
model
.
put
(
"message_info"
,
"开始执行考勤汇总,请稍后查看"
);
}
catch
(
Exception
var9
)
{
code
=
-
1
;
this
.
doException
(
this
.
request
,
busiDesc
,
model
,
var9
);
}
ret
.
setCode
(
code
);
ret
.
setMsg
(
model
.
get
(
"message_info"
)
==
null
?
""
:
model
.
remove
(
"message_info"
).
toString
());
return
ret
;
}
public
static
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
;
}
public
static
void
main
(
String
[]
args
){
List
<
String
>
sss
=
getDatesBetween
(
"2023-07-28"
,
"2023-08-04"
);
System
.
out
.
println
(
sss
);
}
}
attendance-performance-manager/src/main/resources/sqlmap/module/attendance/AttendanceSummaryMapper.xml
0 → 100644
View file @
bac5e986
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mortals.xhx.module.attendance.dao.ibatis.AttendanceSummaryDaoImpl"
>
<!-- 汇总当前日期假期余额 -->
<select
id=
"getVacationBalanceSummary"
parameterType=
"com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery"
resultType=
"com.mortals.xhx.module.attendance.model.vo.VacationBalanceSummaryVo"
>
SELECT
s.id AS staffId,
s.`name` AS staffName,
s.phoneNumber,
s.workNum,
s.deptId,
s.deptName,
DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%Y') as `year`,
DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%m') as `month`,
DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%d') as `day`,
IFNULL(b.personalLeaveDays,0) as personalLeaveDays,
IFNULL(b.compensatedLeaveDays,0) as compensatedLeaveDays,
IFNULL(b.sickLeaveDays,0) as sickLeaveDays,
IFNULL(b.annualLeaveDays,0) as annualLeaveDays,
IFNULL(b.marriageLeaveDays,0) as marriageLeaveDays,
IFNULL(b.maternityLeaveDays,0) as maternityLeaveDays,
IFNULL(b.paternityLeaveDays,0) as paternityLeaveDays,
IFNULL(b.menstrualLeaveDays,0) as menstrualLeaveDays,
IFNULL(b.breastfeedingLeaveDays,0) as breastfeedingLeaveDays,
IFNULL(b.bereavementLeaveDays,0) as bereavementLeaveDays,
IFNULL(b.backToUnit,0) as backToUnit,
IFNULL(b.onDutyLeave,0) as onDutyLeave,
IFNULL(b.outOfOffice,0) as outOfOffice,
IFNULL(b.shiftCompensation,0) as shiftCompensation,
IFNULL(b.physicalExamination,0) as physicalExamination,
IFNULL(b.quarantine,0) as quarantine,
IFNULL(b.businessTrip,0) as businessTrip,
IFNULL(b.publicHoliday,0) as publicHoliday,
IFNULL(b.childRearingLeave,0) as childRearingLeave,
IFNULL(b.transferBack,0) as transferBack,
IFNULL(b.homeLeave,0) as homeLeave
FROM
mortals_xhx_staff s
LEFT JOIN mortals_xhx_attendance_vacation_balance b ON s.id = b.staffId
</select>
<!-- 汇总当前日期请假情况 -->
<select
id=
"getLeaveSummary"
parameterType=
"com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery"
resultType=
"com.mortals.xhx.module.attendance.model.vo.LeaveSummaryVo"
>
SELECT
leavePersonId AS staffId,
leavePerson AS staffName,
leaveType,
IFNULL(sum(duration),0) as duration,
ANY_VALUE(DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%Y')) as `year`,
ANY_VALUE(DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%m')) as `month`,
ANY_VALUE(DATE_FORMAT(STR_TO_DATE(#{summaryTime},'%Y-%m-%d'),'%d')) as `day`
FROM
mortals_xhx_attendance_leave_record
WHERE
auditResult = 1
AND processStatus = 2
AND STR_TO_DATE(date_format(startTime,'%Y-%m-%d'),'%Y-%m-%d')
<![CDATA[ >= ]]>
STR_TO_DATE(#{summaryTime},'%Y-%m-%d')
AND STR_TO_DATE(date_format(endTime,'%Y-%m-%d'),'%Y-%m-%d')
<![CDATA[ <= ]]>
STR_TO_DATE(#{summaryTime},'%Y-%m-%d')
GROUP BY leavePersonId,leavePerson,leaveType
</select>
<!-- 汇总当前日期异常考勤 -->
<select
id=
"getErrorSummary"
parameterType=
"com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery"
resultType=
"com.mortals.xhx.module.attendance.model.vo.ErrorSummaryVo"
>
select
e.staffId,
e.staffName,
ANY_VALUE(DATE_FORMAT(errorDateTime,'%Y')) as `year`,
ANY_VALUE(DATE_FORMAT(errorDateTime,'%m')) as `month`,
ANY_VALUE(DATE_FORMAT(errorDateTime,'%d')) as `day`,
sum(case errorStatus when 0 then 1 ELSE 0 end) as afternoonTimes,
sum(case errorStatus when 1 then 1 ELSE 0 end) as overtimeTimes,
sum(case errorStatus when 2 then 1 ELSE 0 end) as lateTimes
from
mortals_xhx_attendance_record_error e
where
processStatus = 1
and errorStatus != 4
and e.errorDateTime
<![CDATA[ >= ]]>
STR_TO_DATE(left(concat(#{summaryTime},' 00:00:00'),19),'%Y-%m-%d %k:%i:%s')
and e.errorDateTime
<![CDATA[ <= ]]>
STR_TO_DATE(left(concat(#{summaryTime},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
group by
e.staffId,
e.staffName
</select>
</mapper>
\ No newline at end of file
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