每日00:20二级门禁人员定时任务(含手机号变更 身份证兜底查询逻辑)

koumen
lishiwei 2026-05-14 17:20:28 +08:00
parent a84d04a9bc
commit 6a16b9484a
2 changed files with 86 additions and 14 deletions

View File

@ -0,0 +1,31 @@
package com.zcloud.primeport.plan;
import com.jjb.saas.framework.job.Job;
import com.jjb.saas.framework.job.annotation.JobRegister;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zcloud.primeport.plan.mjDevice.TwoPersonUtil;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class TwoLevelPersonXxlJob implements Job {
@Resource
private TwoPersonUtil twoPersonUtil;
@Override
@JobRegister(cron = "0 20 0 * * ?", jobDesc = "闭区定时任务每日00:20进行当日二级门禁可进门人员推送", triggerStatus = 1)
@XxlJob("com.zcloud.plan.TwoLevelPersonDockXxlJob")
public ReturnT<String> execute(String param) {
try {
// 二级门禁人员定时对接(含同步一级门禁)
twoPersonUtil.scheduledPeopleCompany();
} catch (Exception e) {
e.printStackTrace();
return ReturnT.FAIL;
}
return ReturnT.SUCCESS;
}
}

View File

@ -81,14 +81,27 @@ public class TwoPersonUtil {
/*
*
*
* */
public void scheduledPeopleCompany() throws Exception {
public void scheduledPeopleCompany() {
if (!dockFlag.equals(1)) return;
List<TwoLevelUser> userList = closedAreaPersonApplyRepository.getDockAuthTmpInfoById(null);
userList.addAll(closedAreaPersonApplyRepository.getDockAuthInfoById(null));
dockUserReal(userList);
// 二级门禁同步 — 逐个处理,单个失败继续下一个
for (TwoLevelUser user : userList) {
try {
dockUserReal(Collections.singletonList(user));
} catch (Exception e) {
System.err.println("二级门禁人员同步失败, userCard=" + user.getUserCard() + ", 原因: " + e.getMessage());
}
}
// 一级门禁(大华)同步 — 逐个处理,单个失败继续下一个
for (TwoLevelUser item : userList) {
try {
dockOneLevelPerson(item.getUserCard(), item.getUserFaceImages(), item.getUserUid(), item.getUserName());
} catch (Exception e) {
System.err.println("一级门禁人员同步失败, userCard=" + item.getUserCard() + ", 原因: " + e.getMessage());
}
}
}
@ -234,14 +247,24 @@ public class TwoPersonUtil {
/**
*
*
*
*/
public void dockLongTermUserAuthLevelTwo(TwoLevelUser towUser) {
// 跟据身份证号查询 这个人有没有一级门禁 没有新增一级门禁
if (!dockFlag.equals(1)) return;
JSONObject userListByUserCard = HKDeviceUtil.getUserListByPhone(Arrays.asList(towUser.getUserPhone()));
if (userListByUserCard.getJSONArray("data").isEmpty()) return;
// 门禁系统里没有这个人,哪么需要把这个人的信息同步过去
// 按手机号查询
JSONObject phoneResult = HKDeviceUtil.getUserListByPhone(Collections.singletonList(towUser.getUserPhone()));
if (!phoneResult.getJSONObject("data").getJSONArray("list").isEmpty()) {
// 手机号查到,用户已存在,无需新增
return;
}
// 手机号查不到,尝试用身份证号(手机号可能变更了,但身份证号不变)
JSONObject idCardResult = HKDeviceUtil.getUserListByUserCard(towUser.getUserCard());
if (!idCardResult.getJSONObject("data").getJSONArray("list").isEmpty()) {
// 身份证查到 -> 用户存在,只是手机号变了,无需新增
return;
}
// 手机号和身份证都查不到 -> 海康无此用户,新增
HKDeviceUtil.saveUser(towUser.getUserName(), towUser.getUserCard(), towUser.getUserFaceImagesBase64(), towUser.getUserPhone());
}
@ -255,16 +278,34 @@ public class TwoPersonUtil {
/*
*
* personId
* */
public void dockLongAuthTwo(List<TwoLevelUser> userIdList, List<String> resourceInfos, String time) {
if (!dockFlag.equals(1)) return;
JSONArray jsonArray = new JSONArray();
JSONArray userJsonArray = new JSONArray();
List<String> phoneList = userIdList.stream().map(TwoLevelUser::getUserPhone).collect(Collectors.toList());
List<List<String>> partition = partition(phoneList, 20);
partition.forEach(item -> {
List<List<String>> partitions = partition(phoneList, 20);
Set<String> foundPhones = new HashSet<>();
partitions.forEach(item -> {
// 接口有限制 最多一次查询20个人
jsonArray.addAll(HKDeviceUtil.getUserListByPhone(item).getJSONObject("data").getJSONArray("list"));
JSONObject result = HKDeviceUtil.getUserListByPhone(item);
JSONArray list = result.getJSONObject("data").getJSONArray("list");
for (int i = 0; i < list.size(); i++) {
JSONObject user = list.getJSONObject(i);
userJsonArray.add(user);
foundPhones.add(user.getStr("phoneNo"));
}
});
// 手机号查不到的用户,用身份证号查(手机号变更后海康仍存旧号,但身份证号不变)
for (TwoLevelUser user : userIdList) {
if (!foundPhones.contains(user.getUserPhone())) {
JSONObject result = HKDeviceUtil.getUserListByUserCard(user.getUserCard());
JSONArray list = result.getJSONObject("data").getJSONArray("list");
for (int i = 0; i < list.size(); i++) {
userJsonArray.add(list.getJSONObject(i));
}
}
}
ArrayList<JSONObject> objects = new ArrayList<>();
resourceInfos.forEach(item -> {
JSONObject entries = new JSONObject();
@ -274,8 +315,8 @@ public class TwoPersonUtil {
});
// 接口有限制 最多一次存1000个人
ArrayList<String> userIds = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
for (int i = 0; i < userJsonArray.size(); i++) {
JSONObject jsonObject = userJsonArray.getJSONObject(i);
userIds.add(jsonObject.getStr("personId"));
}
List<List<String>> partitionUserIds = partition(userIds, 1000);