编辑人员没有人脸就不要生成下发任务

This commit is contained in:
guoshengxiong 2025-11-22 14:37:56 +08:00
parent 2353b24d74
commit 55a0cd7710
3 changed files with 94 additions and 26 deletions

View File

@ -191,17 +191,6 @@ public class AsyncHikvision {
projectUfaceConfigService.updateWorkerInfo(workerInfo, workerInfo);
}
/**
* 保存人员
*
* @param workerInfo
* @param isSaveWorker
* @param isSaveWorkerFace
*/
public void saveWorker(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.saveWorkerAsync(workerInfo, isSaveWorker, isSaveWorkerFace);
}
/**
* 异步保存人员
*
@ -860,10 +849,19 @@ public class AsyncHikvision {
List<String> workerIds = devSnToJoEntry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList());
JSONArray qaiList = this.queryAuthItemByWorkerList(project, workerIds, getDevRqParam(iscDevSnObj));
Map<String, Integer> personId2FaceStatusMap = qaiList.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("personId"), o -> ((JSONObject) o).getInteger("faceStatus"), (o1, o2) -> o1));
Map<String, Integer> personId2FaceOperatorTypeMap = qaiList.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("personId"), o -> Optional.ofNullable(((JSONObject) o).getJSONObject("personDownloadDetail")).map(m -> m.getJSONArray("faces")).map(m -> {
if (CollUtil.isNotEmpty(m)) {
//操作类型0新增1修改2删除
return m.getJSONObject(0).getInteger("operatorType");
} else {
return null;
}
}).orElse(null), (o1, o2) -> o1));
for (int i = 0; i < workerIds.size(); i++) {
String workerId = workerIds.get(i);
Integer faceStatus = personId2FaceStatusMap.get(workerId);
handlerBatchWorkersResult(workerIdMap, addAuthWorkerIds, sendNotice, dev, flowStartUser, workerId, faceStatus);
Integer faceOperatorType = personId2FaceOperatorTypeMap.get(workerId);
handlerBatchWorkersResult(workerIdMap, addAuthWorkerIds, sendNotice, dev, flowStartUser, workerId, faceStatus, faceOperatorType);
}
} catch (Exception e) {
log.error("批量下发权限失败:", e);
@ -939,15 +937,23 @@ public class AsyncHikvision {
/**
* 处理结果一个设备批量下发人员
*
* @param personId
* @param faceStatus
* @param workerIdMap
* @param addAuthWorkerIds
* @param sendNotice
* @param dev
* @param flowStartUser
* @param personId
* @param faceStatus
* @param faceOperatorType
*/
public void handlerBatchWorkersResult(Map<String, WorkerInfo> workerIdMap, List<String> addAuthWorkerIds, boolean sendNotice, UfaceDev dev, Long flowStartUser, String personId, Integer faceStatus) {
public void handlerBatchWorkersResult(Map<String, WorkerInfo> workerIdMap,
List<String> addAuthWorkerIds,
boolean sendNotice,
UfaceDev dev,
Long flowStartUser,
String personId,
Integer faceStatus,
Integer faceOperatorType) {
String workerName = workerIdMap.get(personId).getWorkerName();
log.info("处理结果一个设备批量下发人员:{},{}", workerName, dev.getDevName());
String projectSn = dev.getProjectSn();
@ -964,7 +970,7 @@ public class AsyncHikvision {
if (addAuthWorkerIds.contains(personId)) {
//添加权限
int addAuth = 3;
if (Objects.equals(faceStatus, addAuth)) {
if (Objects.equals(faceStatus, addAuth) && !Objects.equals(faceOperatorType, 2)) {
hikvisionCall.updateSuccessStatus(projectSn, Long.valueOf(personId), 3, 1, dev.getDevSn());
Long syncId = ThreadLocalUtil.getByKey(Cts.TL_HK_SYNC_ID, Long.class);
if (syncId != null) {

View File

@ -657,16 +657,24 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
@Override
public void addHkSyncRecordAndResetStatusForEditAuth(WorkerInfo workerInfo) {
Pair<String, String> sendAndDeleteDevSnsPair = getSendAndDeleteDevSns(workerInfo);
String devSns = sendAndDeleteDevSnsPair.getLeft();
for (String devSn : StrUtil.split(devSns, Cts.COMMA)) {
XzHikvisionSync sync = new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(devSn).setBigType(1).setCreateDate(getSyncTimeWithInitAndDeleteSyncIfAbsent(1, workerInfo.getId()));
saveSyncDev(workerInfo, devSn, sync);
}
String deleteDevSns = sendAndDeleteDevSnsPair.getRight();
for (String deleteDevSn : StrUtil.split(deleteDevSns, Cts.COMMA)) {
XzHikvisionSync sync = new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).setWhoId(workerInfo.getId()).setDeviceSn(deleteDevSn).setBigType(1).setCreateDate(getSyncTimeWithInitAndDeleteSyncIfAbsent(1, workerInfo.getId()));
saveSyncDev(workerInfo, deleteDevSn, sync);
if (StrUtil.isNotBlank(workerInfo.getFieldAcquisitionUrl())) {
Pair<String, String> sendAndDeleteDevSnsPair = getSendAndDeleteDevSns(workerInfo);
String devSns = sendAndDeleteDevSnsPair.getLeft();
for (String devSn : StrUtil.split(devSns, Cts.COMMA)) {
XzHikvisionSync sync = new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(devSn).setBigType(1).setCreateDate(getSyncTimeWithInitAndDeleteSyncIfAbsent(1, workerInfo.getId()));
saveSyncDev(workerInfo, devSn, sync);
}
String deleteDevSns = sendAndDeleteDevSnsPair.getRight();
for (String deleteDevSn : StrUtil.split(deleteDevSns, Cts.COMMA)) {
XzHikvisionSync sync = new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).setWhoId(workerInfo.getId()).setDeviceSn(deleteDevSn).setBigType(1).setCreateDate(getSyncTimeWithInitAndDeleteSyncIfAbsent(1, workerInfo.getId()));
saveSyncDev(workerInfo, deleteDevSn, sync);
}
} else {
xzHikvisionSyncService.remove(new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getBigType, 1)
.eq(XzHikvisionSync::getType, 3)
.eq(XzHikvisionSync::getWhoId, workerInfo.getId())
);
}
workerInfoService.updateWorkerHkStatus(workerInfo);
}

View File

@ -0,0 +1,54 @@
package com.zhgd.xmgl.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
@Component
@Slf4j
public class AsyncTaskUtil {
private static ThreadPoolTaskExecutor doubleCarbonExecutor;
/**
* 执行异步任务
*/
public static CompletableFuture<Void> runAsync(Runnable task) {
return runAsync(task, "异步任务执行异常");
}
/**
* 执行异步任务
*
* @param task
* @param errLogName 错误日志名称
* @return
*/
public static CompletableFuture<Void> runAsync(Runnable task, String errLogName) {
return CompletableFuture.runAsync(task, doubleCarbonExecutor).exceptionally(throwable -> {
log.error(errLogName, throwable);
return null;
});
}
/**
* 执行异步任务并支持异常处理
*/
public static CompletableFuture<Void> runAsync(Runnable task, Consumer<Throwable> exceptionHandler) {
return CompletableFuture.runAsync(task, doubleCarbonExecutor)
.exceptionally(throwable -> {
exceptionHandler.accept(throwable);
return null;
});
}
@Autowired
public void setDoubleCarbonExecutor(@Qualifier("doubleCarbonExecutor") ThreadPoolTaskExecutor executor) {
AsyncTaskUtil.doubleCarbonExecutor = executor;
}
}