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
c9c3e7ea
Commit
c9c3e7ea
authored
Jul 31, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改固定班次考勤
parent
1795462b
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
384 additions
and
2 deletions
+384
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
...tendance/service/impl/AttendanceRecordHikServiceImpl.java
+12
-2
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/AttendanceWorkAbstract.java
...odule/attendance/service/work/AttendanceWorkAbstract.java
+122
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/CommonData.java
...ortals/xhx/module/attendance/service/work/CommonData.java
+27
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/FixWorkAttendance.java
...xhx/module/attendance/service/work/FixWorkAttendance.java
+156
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/FreedomWorkAttendance.java
...module/attendance/service/work/FreedomWorkAttendance.java
+33
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/ScheduleWorkAttendance.java
...odule/attendance/service/work/ScheduleWorkAttendance.java
+34
-0
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/impl/AttendanceRecordHikServiceImpl.java
View file @
c9c3e7ea
...
...
@@ -9,6 +9,8 @@ import com.mortals.xhx.common.code.*;
import
com.mortals.xhx.common.utils.BeanUtil
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.*
;
import
com.mortals.xhx.module.attendance.service.work.AttendanceWorkAbstract
;
import
com.mortals.xhx.module.attendance.service.work.CommonData
;
import
com.mortals.xhx.module.dept.service.DeptService
;
import
com.mortals.xhx.module.staff.model.StaffEntity
;
import
com.mortals.xhx.module.staff.model.StaffQuery
;
...
...
@@ -265,6 +267,14 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
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
);
workAbstract
.
doHandleWork
(
commonData
);
/*
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
...
...
@@ -365,7 +375,7 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
}
}
}
}
}
*/
}
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/AttendanceWorkAbstract.java
0 → 100644
View file @
c9c3e7ea
package
com.mortals.xhx.module.attendance.service.work
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.framework.exception.AppException
;
import
com.mortals.xhx.common.code.TypeEnum
;
import
com.mortals.xhx.module.attendance.model.AttendanceGroupFixedworkEntity
;
import
java.util.Date
;
/**
* 工作排班抽象类
*
* @author:
* @date: 2023/7/31 15:09
*/
public
abstract
class
AttendanceWorkAbstract
{
private
int
type
;
abstract
int
getType
();
abstract
void
initData
();
public
abstract
void
doHandleWork
(
CommonData
commonData
);
public
static
AttendanceWorkAbstract
newType
(
int
type
)
{
if
(
type
==
TypeEnum
.
固定班制
.
getValue
())
{
return
new
FixWorkAttendance
(
type
);
}
else
if
(
type
==
TypeEnum
.
自由工时
.
getValue
())
{
return
new
FreedomWorkAttendance
(
type
);
}
if
(
type
==
TypeEnum
.
排班制
.
getValue
())
{
return
new
ScheduleWorkAttendance
(
type
);
}
else
{
throw
new
AppException
(
String
.
format
(
"未知的类型码:%s"
,
type
));
}
}
protected
String
getWeek
(
Date
date
)
{
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int
dayOfWeek
=
DateUtil
.
dayOfWeek
(
date
);
// Map the numeric day of the week to its corresponding Chinese name
String
[]
dayOfWeekNames
=
new
String
[]{
"星期日"
,
"星期一"
,
"星期二"
,
"星期三"
,
"星期四"
,
"星期五"
,
"星期六"
};
// Get the Chinese name of the day of the week
String
dayOfWeekName
=
dayOfWeekNames
[
dayOfWeek
-
1
];
return
dayOfWeekName
;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
*
* @return
*/
protected
Long
getWeekClassId
(
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
,
String
week
)
{
Long
weekClassId
=
0L
;
switch
(
week
)
{
case
"星期一"
:
if
(
attendanceGroupFixedworkEntity
.
getMonday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getMondayClassId
();
break
;
case
"星期二"
:
if
(
attendanceGroupFixedworkEntity
.
getTuesday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getTuesdayClassId
();
break
;
case
"星期三"
:
if
(
attendanceGroupFixedworkEntity
.
getWednesday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getWednesdayClassId
();
break
;
case
"星期四"
:
if
(
attendanceGroupFixedworkEntity
.
getThursday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getThursdayClassId
();
break
;
case
"星期五"
:
if
(
attendanceGroupFixedworkEntity
.
getFriday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getFridayClassId
();
break
;
case
"星期六"
:
if
(
attendanceGroupFixedworkEntity
.
getSaturday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSaturdayClassId
();
break
;
case
"星期日"
:
if
(
attendanceGroupFixedworkEntity
.
getSunday
()
==
0
)
{
weekClassId
=
-
1L
;
return
weekClassId
;
}
weekClassId
=
attendanceGroupFixedworkEntity
.
getSundayClassId
();
break
;
}
return
weekClassId
;
}
public
AttendanceWorkAbstract
(
int
type
)
{
this
.
type
=
type
;
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/CommonData.java
0 → 100644
View file @
c9c3e7ea
package
com.mortals.xhx.module.attendance.service.work
;
import
com.mortals.xhx.module.attendance.model.AttendanceGroupEntity
;
import
com.mortals.xhx.module.attendance.model.AttendanceRecordDetailEntity
;
import
lombok.Data
;
import
java.util.Date
;
import
java.util.List
;
/**
* 通用参数
*
* @author:
* @date: 2023/7/31 15:27
*/
@Data
public
class
CommonData
{
private
AttendanceGroupEntity
attendanceGroupEntity
;
private
List
<
AttendanceRecordDetailEntity
>
detailEntityList
;
private
Date
attendanceDate
;
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/FixWorkAttendance.java
0 → 100644
View file @
c9c3e7ea
package
com.mortals.xhx.module.attendance.service.work
;
import
cn.hutool.core.date.DateUtil
;
import
com.mortals.xhx.common.code.GoWorkResultEnum
;
import
com.mortals.xhx.common.code.TypeEnum
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.service.AttendanceClassService
;
import
com.mortals.xhx.module.attendance.service.AttendanceGroupFixedworkService
;
import
com.mortals.xhx.utils.SpringUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.util.ObjectUtils
;
import
java.util.Date
;
import
java.util.List
;
/**
* 固定班
* @author:
* @date: 2023/7/31 15:15
*/
@Slf4j
public
class
FixWorkAttendance
extends
AttendanceWorkAbstract
{
private
AttendanceGroupFixedworkService
attendanceGroupFixedworkService
;
private
AttendanceClassService
attendanceClassService
;
public
FixWorkAttendance
(
int
type
)
{
super
(
type
);
this
.
attendanceGroupFixedworkService
=
SpringUtils
.
getBean
(
AttendanceGroupFixedworkService
.
class
);
this
.
attendanceClassService
=
SpringUtils
.
getBean
(
AttendanceClassService
.
class
);
}
@Override
int
getType
()
{
return
TypeEnum
.
固定班制
.
getValue
();
}
@Override
void
initData
()
{
}
@Override
void
doHandleWork
(
CommonData
commonData
)
{
AttendanceGroupFixedworkEntity
attendanceGroupFixedworkEntity
=
attendanceGroupFixedworkService
.
selectOne
(
new
AttendanceGroupFixedworkQuery
()
.
groupId
(
commonData
.
getAttendanceGroupEntity
().
getId
()));
//判断当前考勤日期为周几
String
week
=
super
.
getWeek
(
commonData
.
getAttendanceDate
());
//log.info("week:{}", week);
//通过考勤日期的星期拿到班次id.
if
(
ObjectUtils
.
isEmpty
(
attendanceGroupFixedworkEntity
))
{
log
.
info
(
"attendanceGroupFixedworkEntity is null ! groupId:{}"
,
commonData
.
getAttendanceGroupEntity
().
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
(
commonData
.
getDetailEntityList
()))
{
//遍历班次 构建详细考勤数据
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
);
commonData
.
getDetailEntityList
().
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
(
commonData
.
getAttendanceDate
())).
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
(
commonData
.
getAttendanceDate
()));
continue
;
}
if
(
goInTime
)
{
//如果是上班打卡区间范围,判断是否迟到
boolean
inTime
=
DateUtil
.
isIn
(
curDateTime
,
goWorkDateBefore
,
classDetail
.
getGoWorkDate
());
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
commonData
.
getDetailEntityList
())
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getId
())
{
attendanceRecordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
正常
.
getValue
());
attendanceRecordDetailEntity
.
setGoWorkDate
(
commonData
.
getAttendanceDate
());
}
}
}
else
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
commonData
.
getDetailEntityList
())
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getId
())
{
attendanceRecordDetailEntity
.
setGoWorkResult
(
GoWorkResultEnum
.
迟到
.
getValue
());
attendanceRecordDetailEntity
.
setGoWorkDate
(
commonData
.
getAttendanceDate
());
}
}
}
}
if
(
offInTime
)
{
boolean
inTime
=
DateUtil
.
isIn
(
curDateTime
,
classDetail
.
getOffWorkDate
(),
offWorkDateAfter
);
if
(
inTime
)
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
commonData
.
getDetailEntityList
())
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getId
())
{
attendanceRecordDetailEntity
.
setOffWorkResult
(
GoWorkResultEnum
.
正常
.
getValue
());
attendanceRecordDetailEntity
.
setOffWorkDate
(
commonData
.
getAttendanceDate
());
}
}
}
else
{
for
(
AttendanceRecordDetailEntity
attendanceRecordDetailEntity
:
commonData
.
getDetailEntityList
())
{
if
(
attendanceRecordDetailEntity
.
getShiftsId
()
==
classDetail
.
getId
())
{
attendanceRecordDetailEntity
.
setOffWorkResult
(
GoWorkResultEnum
.
早退
.
getValue
());
attendanceRecordDetailEntity
.
setOffWorkDate
(
commonData
.
getAttendanceDate
());
}
}
}
}
}
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/FreedomWorkAttendance.java
0 → 100644
View file @
c9c3e7ea
package
com.mortals.xhx.module.attendance.service.work
;
import
com.mortals.xhx.common.code.TypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 自由排班
* @author:
* @date: 2023/7/31 15:15
*/
@Slf4j
public
class
FreedomWorkAttendance
extends
AttendanceWorkAbstract
{
public
FreedomWorkAttendance
(
int
type
)
{
super
(
type
);
}
@Override
int
getType
()
{
return
TypeEnum
.
自由工时
.
getValue
();
}
@Override
void
initData
()
{
}
@Override
void
doHandleWork
(
CommonData
commonData
)
{
}
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/service/work/ScheduleWorkAttendance.java
0 → 100644
View file @
c9c3e7ea
package
com.mortals.xhx.module.attendance.service.work
;
import
com.mortals.xhx.common.code.TypeEnum
;
import
lombok.extern.slf4j.Slf4j
;
/**
* 排班值
*
* @author:
* @date: 2023/7/31 15:15
*/
@Slf4j
public
class
ScheduleWorkAttendance
extends
AttendanceWorkAbstract
{
public
ScheduleWorkAttendance
(
int
type
)
{
super
(
type
);
}
@Override
int
getType
()
{
return
TypeEnum
.
自由工时
.
getValue
();
}
@Override
void
initData
()
{
}
@Override
void
doHandleWork
(
CommonData
commonData
)
{
}
}
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