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
d411ac8e
Commit
d411ac8e
authored
Nov 28, 2023
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加考勤逻辑判断
parent
2005e653
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
204 additions
and
101 deletions
+204
-101
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/staff/service/IHikStaffService.java
...ortals/xhx/module/hik/staff/service/IHikStaffService.java
+8
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/staff/service/impl/HikStaffServiceImpl.java
...hx/module/hik/staff/service/impl/HikStaffServiceImpl.java
+84
-0
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
...rtals/xhx/module/staff/service/impl/StaffServiceImpl.java
+112
-101
No files found.
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/staff/service/IHikStaffService.java
View file @
d411ac8e
...
...
@@ -23,6 +23,14 @@ public interface IHikStaffService {
Rest
<
UserSearchInfo
>
getPersonList
(
StaffReq
personReq
,
DoorEntity
doorEntity
);
/**
* 获取人员总数接口
*
* @param personReq
* @return
*/
Rest
<
UserSearchInfo
>
getPersonCount
(
StaffReq
personReq
,
DoorEntity
doorEntity
);
}
attendance-performance-manager/src/main/java/com/mortals/xhx/module/hik/staff/service/impl/HikStaffServiceImpl.java
View file @
d411ac8e
...
...
@@ -36,6 +36,90 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
initLoadSdk
(
hCNetSDK
);
int
userID
=
login
(
hCNetSDK
,
doorEntity
);
HCNetSDK
.
BYTE_ARRAY
ptrByteArray
=
new
HCNetSDK
.
BYTE_ARRAY
(
1024
);
//数组
String
strInBuffer
=
"POST /ISAPI/AccessControl/UserInfo/Search?format=json"
;
System
.
arraycopy
(
strInBuffer
.
getBytes
(),
0
,
ptrByteArray
.
byValue
,
0
,
strInBuffer
.
length
());
//字符串拷贝到数组中
ptrByteArray
.
write
();
String
resp
=
""
;
try
{
int
lHandler
=
hCNetSDK
.
NET_DVR_StartRemoteConfig
(
userID
,
HCNetSDK
.
NET_DVR_JSON_CONFIG
,
ptrByteArray
.
getPointer
(),
strInBuffer
.
length
(),
null
,
null
);
if
(
lHandler
<
0
)
{
log
.
info
(
"SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>{}"
,
hCNetSDK
.
NET_DVR_GetLastError
());
throw
new
AppException
(
String
.
format
(
"SearchUserInfo NET_DVR_StartRemoteConfig 失败,错误码为==>%s"
,
hCNetSDK
.
NET_DVR_GetLastError
()));
}
else
{
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonSearchCond
=
new
JSONObject
();
jsonSearchCond
.
put
(
"searchID"
,
DateUtil
.
format
(
new
Date
(),
"yyyyMMdd"
));
jsonSearchCond
.
put
(
"searchResultPosition"
,
personReq
.
getPageNo
()*
personReq
.
getPageSize
());
jsonSearchCond
.
put
(
"maxResults"
,
personReq
.
getPageSize
());
jsonObject
.
put
(
"UserInfoSearchCond"
,
jsonSearchCond
);
String
strInbuff
=
jsonObject
.
toString
();
log
.
info
(
"UserInfo/Search 请求json报文==>{}"
,
strInbuff
);
//把string传递到Byte数组中,后续用.getPointer()方法传入指针地址中。
HCNetSDK
.
BYTE_ARRAY
ptrInbuff
=
new
HCNetSDK
.
BYTE_ARRAY
(
strInbuff
.
length
());
System
.
arraycopy
(
strInbuff
.
getBytes
(),
0
,
ptrInbuff
.
byValue
,
0
,
strInbuff
.
length
());
ptrInbuff
.
write
();
//定义接收结果的结构体
HCNetSDK
.
BYTE_ARRAY
ptrOutuff
=
new
HCNetSDK
.
BYTE_ARRAY
(
1
*
1024
);
IntByReference
pInt
=
new
IntByReference
(
0
);
while
(
true
)
{
int
dwState
=
hCNetSDK
.
NET_DVR_SendWithRecvRemoteConfig
(
lHandler
,
ptrInbuff
.
getPointer
(),
strInbuff
.
length
(),
ptrOutuff
.
getPointer
(),
1
*
1024
,
pInt
);
log
.
info
(
"dwState<=={}"
,
dwState
);
if
(
dwState
==
-
1
)
{
log
.
info
(
"NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:{}"
,
hCNetSDK
.
NET_DVR_GetLastError
());
throw
new
AppException
(
String
.
format
(
"NET_DVR_SendWithRecvRemoteConfig接口调用失败,错误码:%s"
,
hCNetSDK
.
NET_DVR_GetLastError
()));
// break;
}
else
if
(
dwState
==
HCNetSDK
.
NET_SDK_CONFIG_STATUS_NEED_WAIT
)
{
log
.
info
(
"配置等待"
);
try
{
Thread
.
sleep
(
10
);
}
catch
(
InterruptedException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
continue
;
}
else
if
(
dwState
==
HCNetSDK
.
NET_SDK_CONFIG_STATUS_FAILED
)
{
log
.
info
(
"查询人员失败"
);
throw
new
AppException
(
String
.
format
(
"查询人员失败,错误码:%s"
,
HCNetSDK
.
NET_SDK_CONFIG_STATUS_FAILED
));
// break;
}
else
if
(
dwState
==
HCNetSDK
.
NET_SDK_CONFIG_STATUS_EXCEPTION
)
{
log
.
info
(
"查询人员异常"
);
throw
new
AppException
(
String
.
format
(
"查询人员异常,错误码:%s"
,
HCNetSDK
.
NET_SDK_CONFIG_STATUS_EXCEPTION
));
// break;
}
else
if
(
dwState
==
HCNetSDK
.
NET_SDK_CONFIG_STATUS_SUCCESS
)
{
ptrOutuff
.
read
();
resp
=
new
String
(
ptrOutuff
.
byValue
).
trim
();
log
.
info
(
"查询人员成功, json==>{}"
,
resp
);
break
;
}
else
if
(
dwState
==
HCNetSDK
.
NET_SDK_CONFIG_STATUS_FINISH
)
{
log
.
info
(
"获取人员完成"
);
break
;
}
}
if
(!
hCNetSDK
.
NET_DVR_StopRemoteConfig
(
lHandler
))
{
log
.
info
(
"NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}"
,
hCNetSDK
.
NET_DVR_GetLastError
());
throw
new
AppException
(
String
.
format
(
"NET_DVR_StopRemoteConfig接口调用失败,错误码==>{}"
,
hCNetSDK
.
NET_DVR_GetLastError
()));
}
else
{
log
.
info
(
"NET_DVR_StopRemoteConfig接口成功"
);
}
}
UserSearchInfo
userSearchInfo
=
JSON
.
parseObject
(
resp
,
new
TypeReference
<
UserSearchInfo
>()
{
});
return
Rest
.
ok
(
userSearchInfo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"获取人员异常"
,
e
);
return
Rest
.
fail
(
e
.
getMessage
());
}
}
@Override
public
Rest
<
UserSearchInfo
>
getPersonCount
(
StaffReq
personReq
,
DoorEntity
doorEntity
)
{
HCNetSDK
hCNetSDK
=
createSDKInstance
();
initLoadSdk
(
hCNetSDK
);
int
userID
=
login
(
hCNetSDK
,
doorEntity
);
HCNetSDK
.
BYTE_ARRAY
ptrByteArray
=
new
HCNetSDK
.
BYTE_ARRAY
(
1024
);
//数组
String
strInBuffer
=
"POST /ISAPI/AccessControl/UserInfo/Search?format=json"
;
System
.
arraycopy
(
strInBuffer
.
getBytes
(),
0
,
ptrByteArray
.
byValue
,
0
,
strInBuffer
.
length
());
//字符串拷贝到数组中
...
...
attendance-performance-manager/src/main/java/com/mortals/xhx/module/staff/service/impl/StaffServiceImpl.java
View file @
d411ac8e
...
...
@@ -148,116 +148,127 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
List
<
DoorEntity
>
doorEntities
=
doorService
.
find
(
new
DoorQuery
());
for
(
DoorEntity
doorEntity
:
doorEntities
)
{
StaffReq
staffReq
=
new
StaffReq
();
Rest
<
UserSearchInfo
>
rest
=
hikStaffService
.
getPersonList
(
staffReq
,
doorEntity
);
if
(
rest
.
getCode
()==
YesNoEnum
.
YES
.
getValue
()){
//做差集 更新本地用户为离职员工
StaffQuery
staffQuery
=
new
StaffQuery
();
staffQuery
.
setSource
(
1
);
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
));
UserInfoSearch
userInfoSearch
=
rest
.
getData
().
getUserInfoSearch
();
List
<
UserInfoItem
>
userInfoList
=
userInfoSearch
.
getUserInfo
();
for
(
UserInfoItem
userInfoItem
:
userInfoList
)
{
if
(
ObjectUtils
.
isEmpty
(
userInfoItem
.
getEmployeeNo
()))
{
log
.
info
(
"EmployeeNo is null ==>{}"
,
JSON
.
toJSONString
(
userInfoItem
));
continue
;
}
Rest
<
UserSearchInfo
>
personCountRest
=
hikStaffService
.
getPersonCount
(
staffReq
,
doorEntity
);
if
(
personCountRest
.
getCode
()
==
YesNoEnum
.
YES
.
getValue
())
{
int
totalNum
=
personCountRest
.
getData
().
getUserInfoSearch
().
getTotalMatches
();
int
size
=
30
;
int
pages
=
totalNum
/
size
;
for
(
int
i
=
0
;
i
<=
pages
;
i
++)
{
StaffReq
searchReq
=
new
StaffReq
();
searchReq
.
setPageNo
(
i
);
searchReq
.
setPageSize
(
size
);
Rest
<
UserSearchInfo
>
rest
=
hikStaffService
.
getPersonList
(
searchReq
,
doorEntity
);
if
(
rest
.
getCode
()
==
YesNoEnum
.
YES
.
getValue
())
{
//做差集 更新本地用户为离职员工
StaffQuery
staffQuery
=
new
StaffQuery
();
staffQuery
.
setSource
(
1
);
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
));
UserInfoSearch
userInfoSearch
=
rest
.
getData
().
getUserInfoSearch
();
List
<
UserInfoItem
>
userInfoList
=
userInfoSearch
.
getUserInfo
();
for
(
UserInfoItem
userInfoItem
:
userInfoList
)
{
if
(
ObjectUtils
.
isEmpty
(
userInfoItem
.
getEmployeeNo
()))
{
log
.
info
(
"EmployeeNo is null ==>{}"
,
JSON
.
toJSONString
(
userInfoItem
));
continue
;
}
if
(
staffCollect
.
containsKey
(
userInfoItem
.
getEmployeeNo
()))
{
staffCollect
.
remove
(
userInfoItem
.
getEmployeeNo
());
}
StaffEntity
staffEntity
=
this
.
getExtCache
(
StrUtil
.
padPre
(
userInfoItem
.
getEmployeeNo
(),
8
,
"0"
));
DeptEntity
deptEntity
=
deptService
.
selectOne
(
new
DeptQuery
().
deptCode
(
userInfoItem
.
getBelongGroup
()));
//判断本地数据是否为空
if
(
ObjectUtils
.
isEmpty
(
staffEntity
))
{
//新增员工信息
staffEntity
=
new
StaffEntity
();
staffEntity
.
initAttrValue
();
if
(!
ObjectUtils
.
isEmpty
(
deptEntity
))
{
staffEntity
.
setDeptId
(
deptEntity
.
getId
());
}
staffEntity
.
setName
(
userInfoItem
.
getName
());
staffEntity
.
setDeptName
(
userInfoItem
.
getBelongGroup
());
staffEntity
.
setGender
(
"male"
.
equals
(
userInfoItem
.
getGender
())?
1
:
2
);
staffEntity
.
setWorkNum
(
userInfoItem
.
getEmployeeNo
());
staffEntity
.
setCreateUserId
(
1L
);
staffEntity
.
setCreateTime
(
new
Date
());
this
.
save
(
staffEntity
);
}
else
{
//更新
if
(!
ObjectUtils
.
isEmpty
(
deptEntity
))
{
staffEntity
.
setDeptId
(
deptEntity
.
getId
());
if
(
staffCollect
.
containsKey
(
userInfoItem
.
getEmployeeNo
()))
{
staffCollect
.
remove
(
userInfoItem
.
getEmployeeNo
());
}
StaffEntity
staffEntity
=
this
.
getExtCache
(
StrUtil
.
padPre
(
userInfoItem
.
getEmployeeNo
(),
8
,
"0"
));
DeptEntity
deptEntity
=
deptService
.
selectOne
(
new
DeptQuery
().
deptCode
(
userInfoItem
.
getBelongGroup
()));
//判断本地数据是否为空
if
(
ObjectUtils
.
isEmpty
(
staffEntity
))
{
//新增员工信息
staffEntity
=
new
StaffEntity
();
staffEntity
.
initAttrValue
();
if
(!
ObjectUtils
.
isEmpty
(
deptEntity
))
{
staffEntity
.
setDeptId
(
deptEntity
.
getId
());
}
staffEntity
.
setName
(
userInfoItem
.
getName
());
staffEntity
.
setDeptName
(
userInfoItem
.
getBelongGroup
());
staffEntity
.
setGender
(
"male"
.
equals
(
userInfoItem
.
getGender
())
?
1
:
2
);
staffEntity
.
setWorkNum
(
userInfoItem
.
getEmployeeNo
());
staffEntity
.
setCreateUserId
(
1L
);
staffEntity
.
setCreateTime
(
new
Date
());
this
.
save
(
staffEntity
);
}
else
{
//更新
if
(!
ObjectUtils
.
isEmpty
(
deptEntity
))
{
staffEntity
.
setDeptId
(
deptEntity
.
getId
());
}
staffEntity
.
setName
(
userInfoItem
.
getName
());
staffEntity
.
setDeptName
(
userInfoItem
.
getBelongGroup
());
staffEntity
.
setGender
(
"male"
.
equals
(
userInfoItem
.
getGender
())
?
1
:
2
);
staffEntity
.
setWorkNum
(
userInfoItem
.
getEmployeeNo
());
staffEntity
.
setUpdateUserId
(
1L
);
staffEntity
.
setUpdateTime
(
new
Date
());
this
.
update
(
staffEntity
);
}
}
staffEntity
.
setName
(
userInfoItem
.
getName
());
staffEntity
.
setDeptName
(
userInfoItem
.
getBelongGroup
());
staffEntity
.
setGender
(
"male"
.
equals
(
userInfoItem
.
getGender
())?
1
:
2
);
staffEntity
.
setWorkNum
(
userInfoItem
.
getEmployeeNo
());
staffEntity
.
setUpdateUserId
(
1L
);
staffEntity
.
setUpdateTime
(
new
Date
());
this
.
update
(
staffEntity
);
}
}
if
(
staffCollect
.
size
()
>
0
)
{
//需要将此人员变更为离职
staffCollect
.
entrySet
().
stream
().
forEach
(
item
->
{
String
key
=
item
.
getKey
();
if
(!
ObjectUtils
.
isEmpty
(
key
))
{
StaffEntity
staff
=
item
.
getValue
();
staff
.
setStatus
(
StaffSatusEnum
.
离职
.
getValue
());
staff
.
setUpdateTime
(
new
Date
());
staff
.
setUpdateUserId
(
1L
);
this
.
update
(
staff
);
//新增离职人员
StaffLeaveEntity
staffLeaveEntity
=
new
StaffLeaveEntity
();
staffLeaveEntity
.
initAttrValue
();
staffLeaveEntity
.
setStaffId
(
staff
.
getId
());
staffLeaveEntity
.
setStaffName
(
staff
.
getName
());
staffLeaveEntity
.
setGender
(
staff
.
getGender
());
staffLeaveEntity
.
setBirthday
(
staff
.
getBirthday
());
staffLeaveEntity
.
setPhotoPath
(
staff
.
getPhotoPath
());
staffLeaveEntity
.
setPhoneNumber
(
staff
.
getPhoneNumber
());
staffLeaveEntity
.
setIdCard
(
staff
.
getIdCard
());
staffLeaveEntity
.
setWorkNum
(
staff
.
getWorkNum
());
staffLeaveEntity
.
setPoliticalstatus
(
staff
.
getPoliticalstatus
());
staffLeaveEntity
.
setDeptId
(
staff
.
getDeptId
());
staffLeaveEntity
.
setDeptName
(
staff
.
getDeptName
());
staffLeaveEntity
.
setJobId
(
staff
.
getPositionId
());
staffLeaveEntity
.
setJobName
(
staff
.
getPositionName
());
staffLeaveEntity
.
setStaffType
(
staff
.
getStaffType
());
staffLeaveEntity
.
setStatus
(
StaffSatusEnum
.
离职
.
getValue
());
staffLeaveEntity
.
setLeaveDate
(
new
Date
());
staffLeaveEntity
.
setLeaveReason
(
""
);
staffLeaveEntity
.
setAuditStatus
(
AuditStatusEnum
.
通过
.
getValue
());
staffLeaveEntity
.
setCreateUserId
(
1L
);
staffLeaveEntity
.
setCreateTime
(
new
Date
());
StaffLeaveQuery
staffLeaveQuery
=
new
StaffLeaveQuery
();
staffLeaveQuery
.
setWorkNum
(
staff
.
getWorkNum
());
int
count
=
staffLeaveService
.
count
(
staffLeaveQuery
,
null
);
if
(
count
==
0
)
{
staffLeaveService
.
save
(
staffLeaveEntity
);
}
//考勤人员中有离职的 删除
if
(
staffCollect
.
size
()
>
0
)
{
//需要将此人员变更为离职
staffCollect
.
entrySet
().
stream
().
forEach
(
item
->
{
String
key
=
item
.
getKey
();
if
(!
ObjectUtils
.
isEmpty
(
key
))
{
StaffEntity
staff
=
item
.
getValue
();
staff
.
setStatus
(
StaffSatusEnum
.
离职
.
getValue
());
staff
.
setUpdateTime
(
new
Date
());
staff
.
setUpdateUserId
(
1L
);
this
.
update
(
staff
);
//新增离职人员
StaffLeaveEntity
staffLeaveEntity
=
new
StaffLeaveEntity
();
staffLeaveEntity
.
initAttrValue
();
staffLeaveEntity
.
setStaffId
(
staff
.
getId
());
staffLeaveEntity
.
setStaffName
(
staff
.
getName
());
staffLeaveEntity
.
setGender
(
staff
.
getGender
());
staffLeaveEntity
.
setBirthday
(
staff
.
getBirthday
());
staffLeaveEntity
.
setPhotoPath
(
staff
.
getPhotoPath
());
staffLeaveEntity
.
setPhoneNumber
(
staff
.
getPhoneNumber
());
staffLeaveEntity
.
setIdCard
(
staff
.
getIdCard
());
staffLeaveEntity
.
setWorkNum
(
staff
.
getWorkNum
());
staffLeaveEntity
.
setPoliticalstatus
(
staff
.
getPoliticalstatus
());
staffLeaveEntity
.
setDeptId
(
staff
.
getDeptId
());
staffLeaveEntity
.
setDeptName
(
staff
.
getDeptName
());
staffLeaveEntity
.
setJobId
(
staff
.
getPositionId
());
staffLeaveEntity
.
setJobName
(
staff
.
getPositionName
());
staffLeaveEntity
.
setStaffType
(
staff
.
getStaffType
());
staffLeaveEntity
.
setStatus
(
StaffSatusEnum
.
离职
.
getValue
());
staffLeaveEntity
.
setLeaveDate
(
new
Date
());
staffLeaveEntity
.
setLeaveReason
(
""
);
staffLeaveEntity
.
setAuditStatus
(
AuditStatusEnum
.
通过
.
getValue
());
staffLeaveEntity
.
setCreateUserId
(
1L
);
staffLeaveEntity
.
setCreateTime
(
new
Date
());
StaffLeaveQuery
staffLeaveQuery
=
new
StaffLeaveQuery
();
staffLeaveQuery
.
setWorkNum
(
staff
.
getWorkNum
());
int
count
=
staffLeaveService
.
count
(
staffLeaveQuery
,
null
);
if
(
count
==
0
)
{
staffLeaveService
.
save
(
staffLeaveEntity
);
}
//考勤人员中有离职的 删除
// List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId()));
// if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities)) {
// attendanceGroupStaffService.removeList(attendanceGroupStaffEntities,context);
// }
Long
[]
groudStaffIds
=
attendanceGroupStaffService
.
find
(
new
AttendanceGroupStaffQuery
().
staffId
(
staff
.
getId
())).
stream
().
map
(
i
->
i
.
getId
()).
toArray
(
Long
[]::
new
);
if
(!
ObjectUtils
.
isEmpty
(
groudStaffIds
))
{
attendanceGroupStaffService
.
remove
(
groudStaffIds
,
null
);
}
Long
[]
groudStaffIds
=
attendanceGroupStaffService
.
find
(
new
AttendanceGroupStaffQuery
().
staffId
(
staff
.
getId
())).
stream
().
map
(
m
->
m
.
getId
()).
toArray
(
Long
[]::
new
);
if
(!
ObjectUtils
.
isEmpty
(
groudStaffIds
))
{
attendanceGroupStaffService
.
remove
(
groudStaffIds
,
null
);
}
}
});
}
});
}
}
}
else
{
}
}
else
{
}
...
...
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