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
e7c701b6
Commit
e7c701b6
authored
Aug 16, 2024
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
测试多线程优化考勤计算
parent
1259cd2d
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
73 additions
and
137 deletions
+73
-137
attendance-performance-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java
.../java/com/mortals/xhx/base/login/web/LoginController.java
+0
-113
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/SourceEnum.java
...src/main/java/com/mortals/xhx/common/code/SourceEnum.java
+65
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
...rtals/xhx/module/staff/service/impl/StaffServiceImpl.java
+3
-16
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
...ava/com/mortals/xhx/module/staff/web/StaffController.java
+2
-5
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
...-manager/src/test/java/com/mortals/httpclient/system.http
+3
-3
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/base/login/web/LoginController.java
View file @
e7c701b6
...
...
@@ -276,120 +276,7 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
}
JSONObject
data
=
new
JSONObject
();
String
token
=
authTokenService
.
getToken
(
request
);
HomeStatInfo
homeStatInfo
=
cacheService
.
get
(
RedisKey
.
KEY_HOME_STAT_CACHE
,
HomeStatInfo
.
class
);
/* HomeStatInfo homeStatInfo = new HomeStatInfo();
StaffQuery staffQuery = new StaffQuery();
staffQuery.setStatusNotList(Arrays.asList(3));
int totalPersonNum = staffService.count(staffQuery, this.getContext());
homeStatInfo.setTotalPersonNum(totalPersonNum);
staffQuery.setSource(1);
Integer totalAttendPersonNum = staffService.count(staffQuery, this.getContext());
int totalDeptNum = deptService.count(new DeptQuery(), getContext());
homeStatInfo.setTotalDeptNum(totalDeptNum);
AttendanceRecordHikQuery hikQuery = new AttendanceRecordHikQuery();
*//* hikQuery.setAttendanceDateStart(DateUtil.beginOfMonth(new Date()).toDateStr());
hikQuery.setAttendanceDateEnd(DateUtil.today()); *//*
hikQuery.setAttendanceDateStart(DateUtil.yesterday().toDateStr());
hikQuery.setAttendanceDateEnd(DateUtil.yesterday().toDateStr());
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
// attendanceRecordQuery.setAttendanceDateStart(DateUtil.beginOfMonth(new Date()).toDateStr());
//attendanceRecordQuery.setAttendanceDateEnd(DateUtil.today());
attendanceRecordQuery.setAttendanceDateStart(DateUtil.yesterday().toDateStr());
attendanceRecordQuery.setAttendanceDateEnd(DateUtil.yesterday().toDateStr());
List<AttendanceRecordEntity> attendanceRecordEntities = recordService.find(attendanceRecordQuery);
//获取当月打卡人数,如果存在
*//* Long totalCache = cacheService.hget(RedisKey.KEY_ATTENC_TOTOAL_CACHE, DateUtil.format(new Date(), "yyyy-MM"), Long.class);
if (ObjectUtils.isEmpty(totalCache)) {
totalCache = recordHikService.find(hikQuery).parallelStream().map(item -> item.getStaffId()).distinct().count();
cacheService.hset(RedisKey.KEY_ATTENC_TOTOAL_CACHE, DateUtil.format(new Date(), "yyyy-MM"), totalCache);
}*//*
*//* Long totalCache = cacheService.hget(RedisKey.KEY_ATTENC_TOTOAL_CACHE, DateUtil.yesterday().toDateStr(), Long.class);
if (ObjectUtils.isEmpty(totalCache)) {
totalCache = recordHikService.find(hikQuery).parallelStream().map(item -> item.getStaffId()).distinct().count();
cacheService.hset(RedisKey.KEY_ATTENC_TOTOAL_CACHE, DateUtil.yesterday().toDateStr(), totalCache);
}*//*
//迟到次数
long beLate = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.迟到.getValue() == f.getGoWorkResult() || OffWorkResultEnum.迟到.getValue() == f.getOffWorkResult())
.map(i -> i.getStaffId())
.distinct()
.count();
//早退次数
long leaveEarly = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.早退.getValue() == f.getGoWorkResult() || OffWorkResultEnum.早退.getValue() == f.getOffWorkResult())
.map(i -> i.getStaffId())
.distinct()
.count();
//缺卡次数
long lackOfCards = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.缺卡.getValue() == f.getGoWorkResult() || OffWorkResultEnum.缺卡.getValue() == f.getOffWorkResult())
.map(i -> i.getStaffId())
.distinct()
.count();
*//* AttendanceVacationRecordQuery vacationRecordQuery = new AttendanceVacationRecordQuery();
vacationRecordQuery.setCreateTimeStart(DateUtil.beginOfMonth(new Date()).toDateStr());
vacationRecordQuery.setCreateTimeEnd(DateUtil.today());
int levealPersonNum = vacationRecordService.count(vacationRecordQuery, getContext());*//*
AttendanceLeaveRecordQuery leaveRecordQuery = new AttendanceLeaveRecordQuery();
*//* leaveRecordQuery.setCreateTimeStart(DateUtil.beginOfMonth(new Date()).toDateStr());
leaveRecordQuery.setCreateTimeEnd(DateUtil.today());*//*
leaveRecordQuery.setCreateTimeStart(DateUtil.yesterday().toDateStr());
leaveRecordQuery.setCreateTimeEnd(DateUtil.yesterday().toDateStr());
leaveRecordQuery.setProcessStatus(ProcessStatusEnum.已处理.getValue());
int levealPersonNum = leaveRecordService.count(leaveRecordQuery, getContext());
//总打卡记录
*//* long totalAttend = attendanceRecordEntities.parallelStream().flatMap(item -> item.getAttendanceRecordDetailList().parallelStream()).count();
long lackOfCardsAttend = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.缺卡.getValue() == f.getGoWorkResult() || OffWorkResultEnum.缺卡.getValue() == f.getOffWorkResult())
.count();*//*
//异常考勤记录
//未考勤
// long noAtt=lackOfCards;
long att = totalAttendPersonNum - lackOfCards;
// long att = totalAttend - lackOfCardsAttend;
if (att != 0L) {
BigDecimal bigDecimal = new BigDecimal(att).divide(new BigDecimal(totalAttendPersonNum), 4, BigDecimal.ROUND_CEILING).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_CEILING);
homeStatInfo.setAttendRadio(bigDecimal.toString() + "%");
} else {
homeStatInfo.setAttendRadio("0%");
}
homeStatInfo.setLevealPersonNum(levealPersonNum);
homeStatInfo.setLatePersonNum(beLate);
homeStatInfo.setLeftEarlyPersonNum(leaveEarly);
homeStatInfo.setMissCardPersonNum(lackOfCards);
homeStatInfo.setAttendPersonNum(totalAttendPersonNum);*/
data
.
put
(
"homeStat"
,
homeStatInfo
);
data
.
put
(
"token"
,
token
);
data
.
put
(
"currUserName"
,
currUserName
);
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/common/code/SourceEnum.java
0 → 100644
View file @
e7c701b6
package
com.mortals.xhx.common.code
;
import
java.util.LinkedHashMap
;
import
java.util.Map
;
/**
*
*
* @author zxfei
*/
public
enum
SourceEnum
{
海康
(
1
,
"海康"
),
自定义
(
2
,
"自定义"
);
private
Integer
value
;
private
String
desc
;
SourceEnum
(
Integer
value
,
String
desc
)
{
this
.
value
=
value
;
this
.
desc
=
desc
;
}
public
Integer
getValue
()
{
return
this
.
value
;
}
public
String
getDesc
()
{
return
this
.
desc
;
}
public
static
SourceEnum
getByValue
(
Integer
value
)
{
for
(
SourceEnum
sourceEnum
:
SourceEnum
.
values
())
{
if
(
sourceEnum
.
getValue
()
==
value
)
{
return
sourceEnum
;
}
}
return
null
;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public
static
Map
<
String
,
String
>
getEnumMap
(
Integer
...
eItem
)
{
Map
<
String
,
String
>
resultMap
=
new
LinkedHashMap
<>();
for
(
SourceEnum
item
:
SourceEnum
.
values
())
{
try
{
boolean
hasE
=
false
;
for
(
Integer
e
:
eItem
)
{
if
(
item
.
getValue
()
==
e
)
{
hasE
=
true
;
break
;
}
}
if
(!
hasE
)
{
resultMap
.
put
(
item
.
getValue
()
+
""
,
item
.
getDesc
());
}
}
catch
(
Exception
ex
)
{
}
}
return
resultMap
;
}
}
\ No newline at end of file
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
View file @
e7c701b6
...
...
@@ -80,29 +80,20 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
private
UserService
userService
;
@Autowired
private
DeptService
deptService
;
@Autowired
private
RoleUserService
roleUserService
;
@Autowired
private
IHikPersonService
hikPersonService
;
@Autowired
private
AttendanceStatService
attendanceStatService
;
@Autowired
private
AttendanceVacationBalanceService
balanceService
;
@Autowired
private
IdgeneratorService
idgeneratorService
;
@Autowired
private
StaffLeaveService
staffLeaveService
;
@Autowired
private
AttendanceGroupStaffService
attendanceGroupStaffService
;
@Autowired
private
DoorService
doorService
;
@Autowired
private
IHikStaffService
hikStaffService
;
@Autowired
private
UploadService
uploadService
;
@Autowired
...
...
@@ -114,7 +105,6 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
protected
String
getExtKey
(
StaffEntity
data
)
{
//工号作为redis 扩展key
return
StrUtil
.
padPre
(
data
.
getWorkNum
(),
8
,
"0"
);
// return "1000"+data.getWorkNum();
}
@Override
...
...
@@ -132,12 +122,10 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
if
(
count
>
0
)
{
throw
new
AppException
(
"工号重复!工号:"
+
entity
.
getWorkNum
());
}
if
(!
ObjectUtils
.
isEmpty
(
entity
.
getDeptId
()))
{
DeptEntity
deptEntity
=
deptService
.
get
(
entity
.
getDeptId
());
entity
.
setDeptName
(
deptEntity
==
null
?
""
:
deptEntity
.
getDeptName
());
}
}
...
...
@@ -177,16 +165,14 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
@Override
public
Rest
<
Void
>
syncPersons
(
Context
context
)
{
log
.
info
(
"同步人员!"
);
PersonReq
personReq
=
new
PersonReq
();
personReq
.
setPageNo
(
1
);
personReq
.
setPageSize
(
1000
);
Rest
<
PersonDataInfo
>
personRest
=
hikPersonService
.
getPersonList
(
personReq
);
if
(
personRest
.
getCode
()
==
YesNoEnum
.
YES
.
getValue
())
{
//做差集 更新本地用户为离职员工
StaffQuery
staffQuery
=
new
StaffQuery
();
staffQuery
.
setSource
(
1
);
staffQuery
.
setSource
(
SourceEnum
.
海康
.
getValue
()
);
staffQuery
.
setStatusNotList
(
Arrays
.
asList
(
StaffSatusEnum
.
离职
.
getValue
()));
Map
<
String
,
StaffEntity
>
staffCollect
=
this
.
find
(
staffQuery
).
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
.
getWorkNum
(),
y
->
y
,
(
o
,
n
)
->
n
));
...
...
@@ -249,6 +235,7 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
}
}
staffEntity
.
setStatus
(
StaffSatusEnum
.
正式
.
getValue
());
staffEntity
.
setSource
(
SourceEnum
.
海康
.
getValue
());
staffEntity
.
setName
(
personInfo
.
getPersonName
());
staffEntity
.
setRemarkId
(
personInfo
.
getPersonId
());
staffEntity
.
setPicUri
(
personInfo
.
getPersonPhoto
()
==
null
?
""
:
personInfo
.
getPersonPhoto
().
getPicUri
());
...
...
@@ -561,7 +548,7 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
log
.
info
(
"同步人员!"
);
//todo 门禁获取人员
StaffQuery
staffQuery
=
new
StaffQuery
();
staffQuery
.
setSource
(
1
);
staffQuery
.
setSource
(
SourceEnum
.
海康
.
getValue
()
);
staffQuery
.
setStatusNotList
(
Arrays
.
asList
(
StaffSatusEnum
.
离职
.
getValue
()));
Map
<
String
,
StaffEntity
>
staffCollect
=
this
.
find
(
staffQuery
).
stream
().
collect
(
Collectors
.
toMap
(
x
->
x
.
getWorkNum
(),
y
->
y
,
(
o
,
n
)
->
n
));
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/web/StaffController.java
View file @
e7c701b6
...
...
@@ -10,10 +10,7 @@ import com.mortals.framework.model.Context;
import
com.mortals.framework.model.OrderCol
;
import
com.mortals.framework.web.BaseCRUDJsonBodyMappingController
;
import
com.mortals.xhx.base.system.param.service.ParamService
;
import
com.mortals.xhx.common.code.GoWorkResultEnum
;
import
com.mortals.xhx.common.code.OffWorkResultEnum
;
import
com.mortals.xhx.common.code.ProcessStatusEnum
;
import
com.mortals.xhx.common.code.YesNoEnum
;
import
com.mortals.xhx.common.code.*
;
import
com.mortals.xhx.module.attendance.model.*
;
import
com.mortals.xhx.module.attendance.model.vo.AttendStatInfo
;
import
com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService
;
...
...
@@ -108,7 +105,7 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
@Override
protected
void
saveBefore
(
StaffEntity
entity
,
Map
<
String
,
Object
>
model
,
Context
context
)
throws
AppException
{
entity
.
setSource
(
2
);
entity
.
setSource
(
SourceEnum
.
自定义
.
getValue
()
);
//判断手机号码是否包含* 如果包含则不添加更新
if
(!
entity
.
newEntity
()
&&
!
ObjectUtils
.
isEmpty
(
entity
.
getPhoneNumber
())
&&
StrUtil
.
contains
(
entity
.
getPhoneNumber
(),
"*"
))
{
entity
.
setPhoneNumber
(
null
);
...
...
attendance-performance-manager/src/test/java/com/mortals/httpclient/system.http
View file @
e7c701b6
...
...
@@ -37,8 +37,8 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Content-Type: application/json
{
"attendanceDateStart": "2024-0
7-2
1",
"attendanceDateEnd": "2024-0
8-15
"
"attendanceDateStart": "2024-0
6-0
1",
"attendanceDateEnd": "2024-0
6-30
"
}
###海康考勤打卡记录计算1
...
...
@@ -48,7 +48,7 @@ Content-Type: application/json
{
"attendanceDateStart": "2024-06-01",
"attendanceDateEnd": "2024-06-31",
"staffId
": 447
"staffId
List": [484,234,584,507,561,346,349,196,482,447]
}
...
...
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