Commit d411ac8e authored by 赵啸非's avatar 赵啸非

添加考勤逻辑判断

parent 2005e653
...@@ -23,6 +23,14 @@ public interface IHikStaffService { ...@@ -23,6 +23,14 @@ public interface IHikStaffService {
Rest<UserSearchInfo> getPersonList(StaffReq personReq, DoorEntity doorEntity); Rest<UserSearchInfo> getPersonList(StaffReq personReq, DoorEntity doorEntity);
/**
* 获取人员总数接口
*
* @param personReq
* @return
*/
Rest<UserSearchInfo> getPersonCount(StaffReq personReq, DoorEntity doorEntity);
} }
...@@ -36,6 +36,90 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff ...@@ -36,6 +36,90 @@ public class HikStaffServiceImpl extends AbstractHikService implements IHikStaff
initLoadSdk(hCNetSDK); initLoadSdk(hCNetSDK);
int userID = login(hCNetSDK, doorEntity); 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); //数组 HCNetSDK.BYTE_ARRAY ptrByteArray = new HCNetSDK.BYTE_ARRAY(1024); //数组
String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json"; String strInBuffer = "POST /ISAPI/AccessControl/UserInfo/Search?format=json";
System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中 System.arraycopy(strInBuffer.getBytes(), 0, ptrByteArray.byValue, 0, strInBuffer.length());//字符串拷贝到数组中
......
...@@ -148,116 +148,127 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -148,116 +148,127 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
List<DoorEntity> doorEntities = doorService.find(new DoorQuery()); List<DoorEntity> doorEntities = doorService.find(new DoorQuery());
for (DoorEntity doorEntity : doorEntities) { for (DoorEntity doorEntity : doorEntities) {
StaffReq staffReq = new StaffReq(); StaffReq staffReq = new StaffReq();
Rest<UserSearchInfo> rest = hikStaffService.getPersonList(staffReq, doorEntity); Rest<UserSearchInfo> personCountRest = hikStaffService.getPersonCount(staffReq, doorEntity);
if(rest.getCode()==YesNoEnum.YES.getValue()){ if (personCountRest.getCode() == YesNoEnum.YES.getValue()) {
int totalNum = personCountRest.getData().getUserInfoSearch().getTotalMatches();
//做差集 更新本地用户为离职员工 int size = 30;
StaffQuery staffQuery = new StaffQuery(); int pages = totalNum / size;
staffQuery.setSource(1); for (int i = 0; i <= pages; i++) {
staffQuery.setStatusNotList(Arrays.asList(StaffSatusEnum.离职.getValue())); StaffReq searchReq = new StaffReq();
Map<String, StaffEntity> staffCollect = this.find(staffQuery).stream().collect(Collectors.toMap(x -> x.getWorkNum(), y -> y, (o, n) -> n)); searchReq.setPageNo(i);
searchReq.setPageSize(size);
Rest<UserSearchInfo> rest = hikStaffService.getPersonList(searchReq, doorEntity);
UserInfoSearch userInfoSearch = rest.getData().getUserInfoSearch(); if (rest.getCode() == YesNoEnum.YES.getValue()) {
List<UserInfoItem> userInfoList = userInfoSearch.getUserInfo();
for (UserInfoItem userInfoItem : userInfoList) { //做差集 更新本地用户为离职员工
if (ObjectUtils.isEmpty(userInfoItem.getEmployeeNo())) { StaffQuery staffQuery = new StaffQuery();
log.info("EmployeeNo is null ==>{}", JSON.toJSONString(userInfoItem)); staffQuery.setSource(1);
continue; 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())) { if (staffCollect.containsKey(userInfoItem.getEmployeeNo())) {
staffCollect.remove(userInfoItem.getEmployeeNo()); staffCollect.remove(userInfoItem.getEmployeeNo());
} }
StaffEntity staffEntity = this.getExtCache(StrUtil.padPre(userInfoItem.getEmployeeNo(), 8, "0")); StaffEntity staffEntity = this.getExtCache(StrUtil.padPre(userInfoItem.getEmployeeNo(), 8, "0"));
DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(userInfoItem.getBelongGroup())); DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(userInfoItem.getBelongGroup()));
//判断本地数据是否为空 //判断本地数据是否为空
if (ObjectUtils.isEmpty(staffEntity)) { if (ObjectUtils.isEmpty(staffEntity)) {
//新增员工信息 //新增员工信息
staffEntity = new StaffEntity(); staffEntity = new StaffEntity();
staffEntity.initAttrValue(); staffEntity.initAttrValue();
if (!ObjectUtils.isEmpty(deptEntity)) { if (!ObjectUtils.isEmpty(deptEntity)) {
staffEntity.setDeptId(deptEntity.getId()); staffEntity.setDeptId(deptEntity.getId());
} }
staffEntity.setName(userInfoItem.getName()); staffEntity.setName(userInfoItem.getName());
staffEntity.setDeptName(userInfoItem.getBelongGroup()); staffEntity.setDeptName(userInfoItem.getBelongGroup());
staffEntity.setGender("male".equals(userInfoItem.getGender())?1:2); staffEntity.setGender("male".equals(userInfoItem.getGender()) ? 1 : 2);
staffEntity.setWorkNum(userInfoItem.getEmployeeNo()); staffEntity.setWorkNum(userInfoItem.getEmployeeNo());
staffEntity.setCreateUserId(1L); staffEntity.setCreateUserId(1L);
staffEntity.setCreateTime(new Date()); staffEntity.setCreateTime(new Date());
this.save(staffEntity); this.save(staffEntity);
} else { } else {
//更新 //更新
if (!ObjectUtils.isEmpty(deptEntity)) { if (!ObjectUtils.isEmpty(deptEntity)) {
staffEntity.setDeptId(deptEntity.getId()); 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) { if (staffCollect.size() > 0) {
//需要将此人员变更为离职 //需要将此人员变更为离职
staffCollect.entrySet().stream().forEach(item -> { staffCollect.entrySet().stream().forEach(item -> {
String key = item.getKey(); String key = item.getKey();
if (!ObjectUtils.isEmpty(key)) { if (!ObjectUtils.isEmpty(key)) {
StaffEntity staff = item.getValue(); StaffEntity staff = item.getValue();
staff.setStatus(StaffSatusEnum.离职.getValue()); staff.setStatus(StaffSatusEnum.离职.getValue());
staff.setUpdateTime(new Date()); staff.setUpdateTime(new Date());
staff.setUpdateUserId(1L); staff.setUpdateUserId(1L);
this.update(staff); this.update(staff);
//新增离职人员 //新增离职人员
StaffLeaveEntity staffLeaveEntity = new StaffLeaveEntity(); StaffLeaveEntity staffLeaveEntity = new StaffLeaveEntity();
staffLeaveEntity.initAttrValue(); staffLeaveEntity.initAttrValue();
staffLeaveEntity.setStaffId(staff.getId()); staffLeaveEntity.setStaffId(staff.getId());
staffLeaveEntity.setStaffName(staff.getName()); staffLeaveEntity.setStaffName(staff.getName());
staffLeaveEntity.setGender(staff.getGender()); staffLeaveEntity.setGender(staff.getGender());
staffLeaveEntity.setBirthday(staff.getBirthday()); staffLeaveEntity.setBirthday(staff.getBirthday());
staffLeaveEntity.setPhotoPath(staff.getPhotoPath()); staffLeaveEntity.setPhotoPath(staff.getPhotoPath());
staffLeaveEntity.setPhoneNumber(staff.getPhoneNumber()); staffLeaveEntity.setPhoneNumber(staff.getPhoneNumber());
staffLeaveEntity.setIdCard(staff.getIdCard()); staffLeaveEntity.setIdCard(staff.getIdCard());
staffLeaveEntity.setWorkNum(staff.getWorkNum()); staffLeaveEntity.setWorkNum(staff.getWorkNum());
staffLeaveEntity.setPoliticalstatus(staff.getPoliticalstatus()); staffLeaveEntity.setPoliticalstatus(staff.getPoliticalstatus());
staffLeaveEntity.setDeptId(staff.getDeptId()); staffLeaveEntity.setDeptId(staff.getDeptId());
staffLeaveEntity.setDeptName(staff.getDeptName()); staffLeaveEntity.setDeptName(staff.getDeptName());
staffLeaveEntity.setJobId(staff.getPositionId()); staffLeaveEntity.setJobId(staff.getPositionId());
staffLeaveEntity.setJobName(staff.getPositionName()); staffLeaveEntity.setJobName(staff.getPositionName());
staffLeaveEntity.setStaffType(staff.getStaffType()); staffLeaveEntity.setStaffType(staff.getStaffType());
staffLeaveEntity.setStatus(StaffSatusEnum.离职.getValue()); staffLeaveEntity.setStatus(StaffSatusEnum.离职.getValue());
staffLeaveEntity.setLeaveDate(new Date()); staffLeaveEntity.setLeaveDate(new Date());
staffLeaveEntity.setLeaveReason(""); staffLeaveEntity.setLeaveReason("");
staffLeaveEntity.setAuditStatus(AuditStatusEnum.通过.getValue()); staffLeaveEntity.setAuditStatus(AuditStatusEnum.通过.getValue());
staffLeaveEntity.setCreateUserId(1L); staffLeaveEntity.setCreateUserId(1L);
staffLeaveEntity.setCreateTime(new Date()); staffLeaveEntity.setCreateTime(new Date());
StaffLeaveQuery staffLeaveQuery = new StaffLeaveQuery(); StaffLeaveQuery staffLeaveQuery = new StaffLeaveQuery();
staffLeaveQuery.setWorkNum(staff.getWorkNum()); staffLeaveQuery.setWorkNum(staff.getWorkNum());
int count = staffLeaveService.count(staffLeaveQuery, null); int count = staffLeaveService.count(staffLeaveQuery, null);
if (count == 0) { if (count == 0) {
staffLeaveService.save(staffLeaveEntity); staffLeaveService.save(staffLeaveEntity);
} }
//考勤人员中有离职的 删除 //考勤人员中有离职的 删除
// List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId())); // List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId()));
// if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities)) { // if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities)) {
// attendanceGroupStaffService.removeList(attendanceGroupStaffEntities,context); // attendanceGroupStaffService.removeList(attendanceGroupStaffEntities,context);
// } // }
Long[] groudStaffIds = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId())).stream().map(i -> i.getId()).toArray(Long[]::new); Long[] groudStaffIds = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staff.getId())).stream().map(m -> m.getId()).toArray(Long[]::new);
if (!ObjectUtils.isEmpty(groudStaffIds)) { if (!ObjectUtils.isEmpty(groudStaffIds)) {
attendanceGroupStaffService.remove(groudStaffIds, null); attendanceGroupStaffService.remove(groudStaffIds, null);
} }
}
});
} }
}); }
}
}else{ }
} else {
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment