海康下发修改
This commit is contained in:
parent
808b64bd40
commit
551ca8ec67
@ -1,5 +1,8 @@
|
|||||||
package com.zhgd.xmgl.async;
|
package com.zhgd.xmgl.async;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
||||||
import com.zhgd.jeecg.common.util.SpringContextUtils;
|
import com.zhgd.jeecg.common.util.SpringContextUtils;
|
||||||
@ -10,14 +13,14 @@ import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
|
|||||||
import com.zhgd.xmgl.modules.car.entity.CarInfo;
|
import com.zhgd.xmgl.modules.car.entity.CarInfo;
|
||||||
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
|
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
|
||||||
import com.zhgd.xmgl.modules.project.entity.Project;
|
import com.zhgd.xmgl.modules.project.entity.Project;
|
||||||
|
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
|
||||||
|
import com.zhgd.xmgl.modules.project.entity.vo.ProjectInfoExtVo;
|
||||||
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
|
||||||
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
|
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
|
||||||
|
import com.zhgd.xmgl.modules.project.service.impl.ProjectServiceImpl;
|
||||||
import com.zhgd.xmgl.modules.video.mapper.ProjectVideoHkVqdMapper;
|
import com.zhgd.xmgl.modules.video.mapper.ProjectVideoHkVqdMapper;
|
||||||
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
|
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
|
||||||
import com.zhgd.xmgl.modules.worker.entity.DepartmentInfo;
|
import com.zhgd.xmgl.modules.worker.entity.*;
|
||||||
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
|
|
||||||
import com.zhgd.xmgl.modules.worker.entity.TeamInfo;
|
|
||||||
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
|
|
||||||
import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper;
|
import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper;
|
||||||
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
|
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
|
||||||
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
|
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
|
||||||
@ -25,16 +28,22 @@ import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
|
|||||||
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
|
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
|
||||||
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionCompareDataServiceImpl;
|
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionCompareDataServiceImpl;
|
||||||
import com.zhgd.xmgl.security.entity.UserInfo;
|
import com.zhgd.xmgl.security.entity.UserInfo;
|
||||||
|
import com.zhgd.xmgl.util.HikvisionUtil;
|
||||||
|
import com.zhgd.xmgl.util.JoBuilder;
|
||||||
|
import com.zhgd.xmgl.util.MapBuilder;
|
||||||
import com.zhgd.xmgl.util.ThreadLocalUtil;
|
import com.zhgd.xmgl.util.ThreadLocalUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 海康
|
* 海康
|
||||||
@ -68,6 +77,9 @@ public class AsyncHikvision {
|
|||||||
EnterpriseInfoMapper enterpriseInfoMapper;
|
EnterpriseInfoMapper enterpriseInfoMapper;
|
||||||
@Lazy
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
|
ProjectServiceImpl projectService;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
private INoticeService noticeService;
|
private INoticeService noticeService;
|
||||||
@Lazy
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -394,14 +406,14 @@ public class AsyncHikvision {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Async("hikvisionExecutor")
|
@Async("hikvisionExecutor")
|
||||||
public void deletePersonAuthAsync(WorkerInfo workerInfo, String devSn) {
|
public void deletePersonAuthAsync(WorkerInfo workerInfo, String devSns) {
|
||||||
try {
|
try {
|
||||||
if (StringUtils.isBlank(devSn)) {
|
if (StringUtils.isBlank(devSns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StringBuilder sucSb = new StringBuilder();
|
StringBuilder sucSb = new StringBuilder();
|
||||||
StringBuilder failSb = new StringBuilder();
|
StringBuilder failSb = new StringBuilder();
|
||||||
String[] devSnArr = StringUtils.split(devSn, ",");
|
String[] devSnArr = StringUtils.split(devSns, ",");
|
||||||
try {
|
try {
|
||||||
for (String ds : devSnArr) {
|
for (String ds : devSnArr) {
|
||||||
hikvisionCall.updatePersonAuth(workerInfo, ds, sucSb, failSb, 2);
|
hikvisionCall.updatePersonAuth(workerInfo, ds, sucSb, failSb, 2);
|
||||||
@ -451,4 +463,132 @@ public class AsyncHikvision {
|
|||||||
public void getDoorEventsAsync(HashMap<String, Object> paramMap) {
|
public void getDoorEventsAsync(HashMap<String, Object> paramMap) {
|
||||||
hikvisionCall.getDoorEvents(paramMap);
|
hikvisionCall.getDoorEvents(paramMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Async("sendBatchExecutor")
|
||||||
|
public void sendBatchWorkerInfoAsync(ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList, List<JSONObject> workerAndDevSnList) {
|
||||||
|
try {
|
||||||
|
Map<String, WorkerInfo> workerIdMap = workerList.stream().collect(Collectors.toMap(workerInfo -> workerInfo.getId() + "", Function.identity()));
|
||||||
|
Map<String, UfaceDev> devSnMap = allDevList.stream().collect(Collectors.toMap(UfaceDev::getDevSn, Function.identity()));
|
||||||
|
ProjectInfoExtVo project = projectService.getProjectInfoBySn(projectUfaceConfig.getProjectSn());
|
||||||
|
Map<String, List<JSONObject>> devSnToJoMap = workerAndDevSnList.stream().collect(Collectors.groupingBy(jsonObject -> jsonObject.getString("devSn")));
|
||||||
|
JSONObject gdvJo = HikvisionUtil.getDoorsV2(project, HikvisionUtil.addPageParamIfAbsent(new JSONObject()));
|
||||||
|
JSONObject gdvDataJo = HikvisionUtil.getJSONObjectData(gdvJo);
|
||||||
|
//门禁设备编号:parentIndexCode,门禁点编号:indexCode,门禁设备资源通道号:channelNo
|
||||||
|
Map<String, JSONObject> devSnToIscDevSnMap = gdvDataJo.getJSONArray("list").stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("indexCode"), o -> (JSONObject) o));
|
||||||
|
Map<String, Map<String, JSONObject>> iscDevSnToMyMap = gdvDataJo.getJSONArray("list").stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("parentIndexCode"), o -> {
|
||||||
|
HashMap<String, JSONObject> m1 = new HashMap<>();
|
||||||
|
m1.put(((JSONObject) o).getString("channelNo"), (JSONObject) o);
|
||||||
|
return m1;
|
||||||
|
}, (o1, o2) -> {
|
||||||
|
o1.putAll(o2);
|
||||||
|
return o1;
|
||||||
|
}));
|
||||||
|
for (Map.Entry<String, List<JSONObject>> entry : devSnToJoMap.entrySet()) {
|
||||||
|
asyncHikvision.sendBatchWorkersForOneDevAsync(projectUfaceConfig, workerIdMap, devSnMap, project, devSnToIscDevSnMap, iscDevSnToMyMap, entry);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("批量下发权限失败:", e);
|
||||||
|
hikvisionCall.updateAllFailStatusIfNullForAuth(projectUfaceConfig.getProjectSn(), workerList, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Async("sendBatchExecutor")
|
||||||
|
public void sendBatchWorkersForOneDevAsync(ProjectUfaceConfig projectUfaceConfig, Map<String, WorkerInfo> workerIdMap, Map<String, UfaceDev> devSnMap, ProjectInfoExtVo project, Map<String, JSONObject> devSnToIscDevSnMap, Map<String, Map<String, JSONObject>> iscDevSnToMyMap, Map.Entry<String, List<JSONObject>> entry) {
|
||||||
|
try {
|
||||||
|
//【添加权限配置】(人员列表,设备列表),这个接口只要没报错,你就直接去下一步就行了。
|
||||||
|
JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddAuthParam(entry));
|
||||||
|
HikvisionUtil.getJSONObjectData(aaRJo);
|
||||||
|
//然后调用【根据出入权限配置快捷下载】(设备列表)(【添加权限配置】+【快捷下发】这是一个流程,你添加了几个权限,下发成功之后,就清零了)
|
||||||
|
JSONObject daJo = HikvisionUtil.downloadAuth(project, getQueryDownloadProgressParam(entry));
|
||||||
|
JSONObject daRtJo = HikvisionUtil.getJSONObjectData(daJo);
|
||||||
|
//然后调用【查询下载任务进度】(上面那个的任务)
|
||||||
|
int totalPercent = 0;
|
||||||
|
do {
|
||||||
|
JSONObject qdpJo = HikvisionUtil.queryDownloadProgress(project, new JoBuilder()
|
||||||
|
.put("taskId", daRtJo.getString("taskId"))
|
||||||
|
.build());
|
||||||
|
totalPercent = HikvisionUtil.getJSONObjectData(qdpJo).getInteger("totalPercent");
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} while (totalPercent != 100);
|
||||||
|
//权限下发后(进度100后),用【查询权限条目列表】(人员列表,设备列表)接口去查,返回参数有权限状态,返回已下载的就是有权限
|
||||||
|
JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(entry, devSnToIscDevSnMap));
|
||||||
|
JSONObject qaiRtJo = HikvisionUtil.getJSONObjectData(qaiJo);
|
||||||
|
JSONArray qaiList = qaiRtJo.getJSONArray("list");
|
||||||
|
for (int i = 0; i < qaiList.size(); i++) {
|
||||||
|
sendBatchWorkersForOneDevOneWorkerAsync(projectUfaceConfig, workerIdMap, devSnMap, iscDevSnToMyMap, qaiList, i);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("批量下发权限失败:", e);
|
||||||
|
hikvisionCall.updateAllFailStatusIfNullForAuth(projectUfaceConfig.getProjectSn(), new ArrayList<>(workerIdMap.values()), 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Async("sendBatchExecutor")
|
||||||
|
public void sendBatchWorkersForOneDevOneWorkerAsync(ProjectUfaceConfig projectUfaceConfig, Map<String, WorkerInfo> workerIdMap, Map<String, UfaceDev> devSnMap, Map<String, Map<String, JSONObject>> iscDevSnToMyMap, JSONArray qaiList, int i) {
|
||||||
|
JSONObject jo = qaiList.getJSONObject(i);
|
||||||
|
String personId = jo.getString("personId");
|
||||||
|
String resourceIndexCode = jo.getString("resourceIndexCode");
|
||||||
|
String channelNo = jo.getString("channelNo");
|
||||||
|
//人脸状态
|
||||||
|
//0:已配置未下载
|
||||||
|
//1:更新待下载
|
||||||
|
//2:更新待删除
|
||||||
|
//3:已下载
|
||||||
|
//4:未配置
|
||||||
|
Integer faceStatus = jo.getInteger("faceStatus");
|
||||||
|
UfaceDev dev = devSnMap.get(iscDevSnToMyMap.get(resourceIndexCode).get(channelNo).getString("indexCode"));
|
||||||
|
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
||||||
|
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(),
|
||||||
|
StrUtil.format("[{}]下发到[{}]{}",
|
||||||
|
workerIdMap.get(personId).getWorkerName(),
|
||||||
|
Optional.ofNullable(dev).map(UfaceDev::getDevName).orElse("设备"),
|
||||||
|
Objects.equals(faceStatus, 3) ? "成功" : "失败,下发异常"),
|
||||||
|
"人员下发设备提醒", "1");
|
||||||
|
}
|
||||||
|
hikvisionCall.updateSuccessStatus(projectUfaceConfig.getProjectSn(), Long.valueOf(personId), 3, 1, dev.getDevSn());
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private JSONObject getAddAuthParam(Map.Entry<String, List<JSONObject>> entry) {
|
||||||
|
JSONObject aaJo = new JSONObject();
|
||||||
|
aaJo.put("personDatas", Collections.singletonList(new MapBuilder<String, Object>()
|
||||||
|
.put("indexCodes", entry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList()))
|
||||||
|
.put("personDataType", "person")
|
||||||
|
.build()));
|
||||||
|
aaJo.put("resourceInfos", getDevRqParam(entry));
|
||||||
|
return aaJo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private List<JSONObject> getDevRqParam(Map.Entry<String, List<JSONObject>> entry) {
|
||||||
|
return Collections.singletonList(new JoBuilder()
|
||||||
|
.put("resourceIndexCode", entry.getKey())
|
||||||
|
.put("resourceType", "door")
|
||||||
|
.put("channelNos", Collections.singletonList(1))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject getQueryDownloadProgressParam(Map.Entry<String, List<JSONObject>> entry) {
|
||||||
|
JSONObject aaJo = new JSONObject();
|
||||||
|
aaJo.put("taskType", 4);
|
||||||
|
aaJo.put("resourceInfos", getDevRqParam(entry));
|
||||||
|
return aaJo;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSONObject getQueryAuthItemParam(Map.Entry<String, List<JSONObject>> entry, Map<String, JSONObject> devSnToIscDevSnMap) {
|
||||||
|
JSONObject aaJo = new JSONObject();
|
||||||
|
aaJo.put("personIds", entry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList()));
|
||||||
|
aaJo.put("resourceInfos", Collections.singletonList(new JoBuilder()
|
||||||
|
.put("resourceIndexCode", devSnToIscDevSnMap.get(entry.getKey()).getString("parentIndexCode"))
|
||||||
|
.put("resourceType", "acsDevice")
|
||||||
|
.put("channelNos", Collections.singletonList(devSnToIscDevSnMap.get(entry.getKey()).getString("channelNo")))
|
||||||
|
.build()));
|
||||||
|
aaJo.put("queryType", "acsDevice");
|
||||||
|
aaJo.put("pageNo", 1);
|
||||||
|
aaJo.put("pageSize", 1000);
|
||||||
|
return aaJo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,6 +67,10 @@ public class AsyncWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void sendBatchWokerDev(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList) {
|
||||||
|
this.sendBatchWokerDevAsync(map, projectUfaceConfig, allDevList);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量数据发送任务
|
* 批量数据发送任务
|
||||||
*
|
*
|
||||||
@ -80,7 +84,7 @@ public class AsyncWorker {
|
|||||||
if (workerList.size() > 0) {
|
if (workerList.size() > 0) {
|
||||||
if (projectUfaceConfig.getSupplierType() == 9) {
|
if (projectUfaceConfig.getSupplierType() == 9) {
|
||||||
//isc下发
|
//isc下发
|
||||||
projectUfaceConfigService.sendBatchWorkerInfo(map, projectUfaceConfig, allDevList, workerList);
|
projectUfaceConfigService.sendBatchWorkerForHk(map, projectUfaceConfig, allDevList, workerList);
|
||||||
} else {
|
} else {
|
||||||
for (WorkerInfo info : workerList) {
|
for (WorkerInfo info : workerList) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -506,5 +506,22 @@ public class AsyncConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Bean("sendBatchExecutor")
|
||||||
|
public ThreadPoolTaskExecutor sendBatchExecutor() {
|
||||||
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
|
/** 核心线程数(默认线程数) */
|
||||||
|
executor.setCorePoolSize(maxPoolSize * 10);
|
||||||
|
/** 最大线程数 */
|
||||||
|
executor.setMaxPoolSize(maxPoolSize * 10);
|
||||||
|
executor.setQueueCapacity(queueCapacity);
|
||||||
|
/** 允许线程空闲时间(单位:默认为秒) */
|
||||||
|
executor.setKeepAliveSeconds(60);
|
||||||
|
/** 线程池名前缀 */
|
||||||
|
executor.setThreadNamePrefix("sendBatchExecutor-");
|
||||||
|
// 线程池对拒绝任务的处理策略
|
||||||
|
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
|
||||||
|
// 初始化
|
||||||
|
executor.initialize();
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,9 +34,9 @@ public interface IProjectUfaceConfigService extends IService<ProjectUfaceConfig>
|
|||||||
|
|
||||||
void addPersonAuth(WorkerInfo workerInfo, String devSn);
|
void addPersonAuth(WorkerInfo workerInfo, String devSn);
|
||||||
|
|
||||||
void addHikvisionSyncForDev(WorkerInfo workerInfo, String devSns);
|
void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo, String devSns);
|
||||||
|
|
||||||
void deletePersonAuth(WorkerInfo workerInfo, String devSns);
|
void deletePersonAuth(WorkerInfo workerInfo, String devSns);
|
||||||
|
|
||||||
void sendBatchWorkerInfo(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList);
|
void sendBatchWorkerForHk(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package com.zhgd.xmgl.modules.project.service.impl;
|
|||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
@ -10,10 +9,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||||
import com.zhgd.xmgl.async.AsyncHikvision;
|
import com.zhgd.xmgl.async.AsyncHikvision;
|
||||||
import com.zhgd.xmgl.call.HikvisionCall;
|
import com.zhgd.xmgl.call.HikvisionCall;
|
||||||
import com.zhgd.xmgl.constant.Cts;
|
|
||||||
import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
|
import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
|
||||||
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
|
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
|
||||||
import com.zhgd.xmgl.modules.project.entity.vo.ProjectInfoExtVo;
|
|
||||||
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
|
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
|
||||||
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
|
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
|
||||||
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
|
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
|
||||||
@ -25,14 +22,11 @@ import com.zhgd.xmgl.modules.worker.mapper.UserDevAuthorityMapper;
|
|||||||
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
|
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
|
||||||
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
|
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
|
||||||
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
|
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
|
||||||
import com.zhgd.xmgl.security.entity.UserInfo;
|
|
||||||
import com.zhgd.xmgl.util.*;
|
import com.zhgd.xmgl.util.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.MapUtils;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
@ -40,7 +34,6 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.zhgd.xmgl.async.AsyncHikvision.getSyncTimeWithInitIfAbsent;
|
import static com.zhgd.xmgl.async.AsyncHikvision.getSyncTimeWithInitIfAbsent;
|
||||||
@ -181,8 +174,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
if (StringUtils.isEmpty(ufaceDevGroupId)) {
|
if (StringUtils.isEmpty(ufaceDevGroupId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<Long> ufaceIds = ufaceDevToGroupMapper.selectList(new LambdaQueryWrapper<UfaceDevToGroup>()
|
List<Long> ufaceIds = ufaceDevToGroupMapper.selectList(new LambdaQueryWrapper<UfaceDevToGroup>().in(UfaceDevToGroup::getUfaceDevGroupId, Arrays.asList(StringUtils.split(ufaceDevGroupId, ",")))).stream().map(UfaceDevToGroup::getUfaceDevId).collect(Collectors.toList());
|
||||||
.in(UfaceDevToGroup::getUfaceDevGroupId, Arrays.asList(StringUtils.split(ufaceDevGroupId, ",")))).stream().map(UfaceDevToGroup::getUfaceDevId).collect(Collectors.toList());
|
|
||||||
if (CollUtil.isEmpty(ufaceIds)) {
|
if (CollUtil.isEmpty(ufaceIds)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -279,8 +271,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
if (tempProjectUfaceConfig.getSupplierType() == 9) {
|
if (tempProjectUfaceConfig.getSupplierType() == 9) {
|
||||||
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
|
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
|
||||||
//红码不能通行
|
//红码不能通行
|
||||||
List<UfaceDev> allList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
List<UfaceDev> allList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
|
||||||
.eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
|
|
||||||
if (CollUtil.isNotEmpty(allList)) {
|
if (CollUtil.isNotEmpty(allList)) {
|
||||||
String devSns = StrUtil.join(",", allList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
String devSns = StrUtil.join(",", allList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
||||||
this.deletePersonAuth(workerInfo, devSns);
|
this.deletePersonAuth(workerInfo, devSns);
|
||||||
@ -292,14 +283,8 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
if (Objects.equals(workerInfo.getDevType(), 1)) {
|
if (Objects.equals(workerInfo.getDevType(), 1)) {
|
||||||
devSns = workerInfo.getUfaceDevId();
|
devSns = workerInfo.getUfaceDevId();
|
||||||
if (StrUtil.isNotBlank(devSns)) {
|
if (StrUtil.isNotBlank(devSns)) {
|
||||||
List<UfaceDev> existList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
List<UfaceDev> existList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()).in(UfaceDev::getId, StrUtil.split(devSns, ",")));
|
||||||
.eq(UfaceDev::getProjectSn, workerInfo.getProjectSn())
|
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()).notIn(UfaceDev::getId, StrUtil.split(devSns, ",")));
|
||||||
.in(UfaceDev::getId, StrUtil.split(devSns, ","))
|
|
||||||
);
|
|
||||||
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
|
||||||
.eq(UfaceDev::getProjectSn, workerInfo.getProjectSn())
|
|
||||||
.notIn(UfaceDev::getId, StrUtil.split(devSns, ","))
|
|
||||||
);
|
|
||||||
if (CollUtil.isNotEmpty(notExistList)) {
|
if (CollUtil.isNotEmpty(notExistList)) {
|
||||||
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
||||||
this.deletePersonAuth(workerInfo, notDevSns);
|
this.deletePersonAuth(workerInfo, notDevSns);
|
||||||
@ -310,8 +295,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//只删除
|
//只删除
|
||||||
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
|
||||||
.eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
|
|
||||||
if (CollUtil.isNotEmpty(notExistList)) {
|
if (CollUtil.isNotEmpty(notExistList)) {
|
||||||
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
||||||
this.deletePersonAuth(workerInfo, notDevSns);
|
this.deletePersonAuth(workerInfo, notDevSns);
|
||||||
@ -333,9 +317,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//只删除
|
//只删除
|
||||||
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>()
|
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
|
||||||
.eq(UfaceDev::getProjectSn, workerInfo.getProjectSn())
|
|
||||||
);
|
|
||||||
if (CollUtil.isNotEmpty(notExistList)) {
|
if (CollUtil.isNotEmpty(notExistList)) {
|
||||||
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
|
||||||
this.deletePersonAuth(workerInfo, notDevSns);
|
this.deletePersonAuth(workerInfo, notDevSns);
|
||||||
@ -383,9 +365,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
} else {
|
} else {
|
||||||
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
|
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
|
||||||
}
|
}
|
||||||
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(),
|
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devBuilder.toString());
|
||||||
workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(),
|
|
||||||
image, devBuilder.toString());
|
|
||||||
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
|
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
|
||||||
//人员唯一编号改变需要先删除再下发
|
//人员唯一编号改变需要先删除再下发
|
||||||
if (oldWorkerInfo != null && workerInfo.getIdCard().equals(oldWorkerInfo.getIdCard())) {
|
if (oldWorkerInfo != null && workerInfo.getIdCard().equals(oldWorkerInfo.getIdCard())) {
|
||||||
@ -395,8 +375,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
log.error("error:", e);
|
log.error("error:", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QYUfaceUtil.addOrUpdatePerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(),
|
QYUfaceUtil.addOrUpdatePerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(), "", "", workerInfo.getIdCard(), "", "", 3, "", devIdBuilder.toString().split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
|
||||||
"", "", workerInfo.getIdCard(), "", "", 3, "", devIdBuilder.toString().split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
|
|
||||||
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
|
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
|
||||||
//佳信捷设备
|
//佳信捷设备
|
||||||
JxjUfaceUtil.updateWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
|
JxjUfaceUtil.updateWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
|
||||||
@ -458,8 +437,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
//设备分组情况
|
//设备分组情况
|
||||||
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
|
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
|
||||||
if (StringUtils.isNotBlank(ufaceDevGroupId)) {
|
if (StringUtils.isNotBlank(ufaceDevGroupId)) {
|
||||||
List<Long> ufaceIds = ufaceDevToGroupMapper.selectList(new LambdaQueryWrapper<UfaceDevToGroup>()
|
List<Long> ufaceIds = ufaceDevToGroupMapper.selectList(new LambdaQueryWrapper<UfaceDevToGroup>().in(UfaceDevToGroup::getUfaceDevGroupId, Arrays.asList(StringUtils.split(ufaceDevGroupId, ",")))).stream().map(UfaceDevToGroup::getUfaceDevId).collect(Collectors.toList());
|
||||||
.in(UfaceDevToGroup::getUfaceDevGroupId, Arrays.asList(StringUtils.split(ufaceDevGroupId, ",")))).stream().map(UfaceDevToGroup::getUfaceDevId).collect(Collectors.toList());
|
|
||||||
if (CollUtil.isNotEmpty(ufaceIds)) {
|
if (CollUtil.isNotEmpty(ufaceIds)) {
|
||||||
ufaceIds.stream().distinct();
|
ufaceIds.stream().distinct();
|
||||||
Map<String, Object> param = new HashMap<>();
|
Map<String, Object> param = new HashMap<>();
|
||||||
@ -501,10 +479,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isHikvisionConfig(String projectSn) {
|
public boolean isHikvisionConfig(String projectSn) {
|
||||||
Integer c = baseMapper.selectCount(new LambdaQueryWrapper<ProjectUfaceConfig>()
|
Integer c = baseMapper.selectCount(new LambdaQueryWrapper<ProjectUfaceConfig>().eq(ProjectUfaceConfig::getProjectSn, projectSn).eq(ProjectUfaceConfig::getSupplierType, 9));
|
||||||
.eq(ProjectUfaceConfig::getProjectSn, projectSn)
|
|
||||||
.eq(ProjectUfaceConfig::getSupplierType, 9)
|
|
||||||
);
|
|
||||||
return c > 0;
|
return c > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,12 +493,9 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
} else {
|
} else {
|
||||||
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
|
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
|
||||||
}
|
}
|
||||||
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(),
|
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devSns);
|
||||||
workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(),
|
|
||||||
image, devSns);
|
|
||||||
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
|
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
|
||||||
QYUfaceUtil.addOrUpdatePerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(),
|
QYUfaceUtil.addOrUpdatePerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(), "", workerInfo.getPhoneNumber(), workerInfo.getIdCard(), workerInfo.getAttendanceNumber(), workerInfo.getNation(), workerInfo.getSex(), workerInfo.getBirthday(), devIds.split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
|
||||||
"", workerInfo.getPhoneNumber(), workerInfo.getIdCard(), workerInfo.getAttendanceNumber(), workerInfo.getNation(), workerInfo.getSex(), workerInfo.getBirthday(), devIds.split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
|
|
||||||
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
|
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
|
||||||
//佳信捷设备
|
//佳信捷设备
|
||||||
JxjUfaceUtil.addWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
|
JxjUfaceUtil.addWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
|
||||||
@ -548,18 +520,19 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
if (StringUtils.isBlank(devSns)) {
|
if (StringUtils.isBlank(devSns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addHikvisionSyncForDev(workerInfo, devSns);
|
addHkSyncRecordAndResetStatusForDev(workerInfo, devSns);
|
||||||
asyncHikvision.addPersonAuthAsync(workerInfo, devSns);
|
asyncHikvision.addPersonAuthAsync(workerInfo, devSns);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addHikvisionSyncForDev(WorkerInfo workerInfo, String devSns) {
|
public void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo, String devSns) {
|
||||||
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
|
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
|
||||||
String[] devSnArr = StringUtils.split(devSns, ",");
|
String[] devSnArr = StringUtils.split(devSns, ",");
|
||||||
for (String ds : devSnArr) {
|
for (String ds : devSnArr) {
|
||||||
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(ds).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
|
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(ds).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
|
||||||
}
|
}
|
||||||
|
workerInfoService.resetHkStatus(workerInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -582,14 +555,21 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendBatchWorkerInfo(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList) {
|
public void sendBatchWorkerForHk(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList) {
|
||||||
//构建workerAndDevSnList
|
//构建workerAndDevSnList
|
||||||
ArrayList<JSONObject> workerAndDevSnList = new ArrayList<>();
|
List<JSONObject> workerAndDevSnList = new ArrayList<>();
|
||||||
for (WorkerInfo workerInfo : workerList) {
|
for (WorkerInfo workerInfo : workerList) {
|
||||||
|
//海康门禁isc
|
||||||
|
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
|
||||||
|
log.info("安全评分红码不下发权限,名称:{}", workerInfo.getWorkerName());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
Pair<String, String> devSnsAndDevIdsPair = this.getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
|
Pair<String, String> devSnsAndDevIdsPair = this.getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
|
||||||
if (devSnsAndDevIdsPair.getRight() != null) {
|
if (devSnsAndDevIdsPair.getRight() != null) {
|
||||||
String devSns = devSnsAndDevIdsPair.getLeft();
|
String devSns = devSnsAndDevIdsPair.getLeft();
|
||||||
this.addHikvisionSyncForDev(workerInfo, devSns);
|
//清楚以前的记录
|
||||||
|
xzHikvisionSyncMapper.delete(new LambdaQueryWrapper<XzHikvisionSync>().eq(XzHikvisionSync::getBigType, 1).eq(XzHikvisionSync::getWhoId, workerInfo.getId()));
|
||||||
|
this.addHkSyncRecordAndResetStatusForDev(workerInfo, devSns);
|
||||||
List<String> devSnList = StrUtil.split(devSns, ",");
|
List<String> devSnList = StrUtil.split(devSns, ",");
|
||||||
for (String devSn : devSnList) {
|
for (String devSn : devSnList) {
|
||||||
JSONObject jo = new JSONObject();
|
JSONObject jo = new JSONObject();
|
||||||
@ -603,112 +583,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, WorkerInfo> workerIdMap = workerList.stream().collect(Collectors.toMap(workerInfo -> workerInfo.getId() + "", Function.identity()));
|
asyncHikvision.sendBatchWorkerInfoAsync(projectUfaceConfig, allDevList, workerList, workerAndDevSnList);
|
||||||
Map<String, UfaceDev> devSnMap = allDevList.stream().collect(Collectors.toMap(UfaceDev::getDevSn, Function.identity()));
|
|
||||||
ProjectInfoExtVo project = projectService.getProjectInfoBySn(MapUtils.getString(map, "projectSn"));
|
|
||||||
Map<String, List<JSONObject>> devSnToJoMap = workerAndDevSnList.stream().collect(Collectors.groupingBy(jsonObject -> jsonObject.getString("devSn")));
|
|
||||||
try {
|
|
||||||
JSONObject gdvJo = HikvisionUtil.getDoorsV2(project, HikvisionUtil.addPageParamIfAbsent(new JSONObject()));
|
|
||||||
JSONObject gdvDataJo = HikvisionUtil.getJSONObjectData(gdvJo);
|
|
||||||
//门禁设备编号:parentIndexCode,门禁点编号:indexCode,门禁设备资源通道号:channelNo
|
|
||||||
Map<String, JSONObject> devSnToIscDevSnMap = gdvDataJo.getJSONArray("list").stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("indexCode"), o -> (JSONObject) o));
|
|
||||||
Map<String, Map<String, JSONObject>> iscDevSnToMyMap = gdvDataJo.getJSONArray("list").stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("parentIndexCode"), o -> {
|
|
||||||
HashMap<String, JSONObject> m1 = new HashMap<>();
|
|
||||||
m1.put(((JSONObject) o).getString("channelNo"), (JSONObject) o);
|
|
||||||
return m1;
|
|
||||||
}, (o1, o2) -> {
|
|
||||||
o1.putAll(o2);
|
|
||||||
return o1;
|
|
||||||
}));
|
|
||||||
for (Map.Entry<String, List<JSONObject>> entry : devSnToJoMap.entrySet()) {
|
|
||||||
//【添加权限配置】(人员列表,设备列表),这个接口只要没报错,你就直接去下一步就行了。
|
|
||||||
JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddAuthParam(entry));
|
|
||||||
HikvisionUtil.getJSONObjectData(aaRJo);
|
|
||||||
//然后调用【根据出入权限配置快捷下载】(设备列表)(【添加权限配置】+【快捷下发】这是一个流程,你添加了几个权限,下发成功之后,就清零了)
|
|
||||||
JSONObject daJo = HikvisionUtil.downloadAuth(project, getQueryDownloadProgressParam(entry));
|
|
||||||
JSONObject daRtJo = HikvisionUtil.getJSONObjectData(daJo);
|
|
||||||
//然后调用【查询下载任务进度】(上面那个的任务)
|
|
||||||
int totalPercent = 0;
|
|
||||||
do {
|
|
||||||
JSONObject qdpJo = HikvisionUtil.queryDownloadProgress(project, new JoBuilder()
|
|
||||||
.put("taskId", daRtJo.getString("taskId"))
|
|
||||||
.build());
|
|
||||||
totalPercent = HikvisionUtil.getJSONObjectData(qdpJo).getInteger("totalPercent");
|
|
||||||
Thread.sleep(1000);
|
|
||||||
} while (totalPercent != 100);
|
|
||||||
//权限下发后(进度100后),用【查询权限条目列表】(人员列表,设备列表)接口去查,返回参数有权限状态,返回已下载的就是有权限
|
|
||||||
JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(entry, devSnToIscDevSnMap));
|
|
||||||
JSONObject qaiRtJo = HikvisionUtil.getJSONObjectData(qaiJo);
|
|
||||||
JSONArray qaiList = qaiRtJo.getJSONArray("list");
|
|
||||||
for (int i = 0; i < qaiList.size(); i++) {
|
|
||||||
JSONObject jo = qaiList.getJSONObject(i);
|
|
||||||
String personId = jo.getString("personId");
|
|
||||||
String resourceIndexCode = jo.getString("resourceIndexCode");
|
|
||||||
String channelNo = jo.getString("channelNo");
|
|
||||||
//人脸状态
|
|
||||||
//0:已配置未下载
|
|
||||||
//1:更新待下载
|
|
||||||
//2:更新待删除
|
|
||||||
//3:已下载
|
|
||||||
//4:未配置
|
|
||||||
Integer faceStatus = jo.getInteger("faceStatus");
|
|
||||||
UfaceDev dev = devSnMap.get(iscDevSnToMyMap.get(resourceIndexCode).get(channelNo).getString("indexCode"));
|
|
||||||
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
|
||||||
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(),
|
|
||||||
StrUtil.format("[{}]下发到[{}]{}",
|
|
||||||
workerIdMap.get(personId).getWorkerName(),
|
|
||||||
Optional.ofNullable(dev).map(UfaceDev::getDevName).orElse("设备"),
|
|
||||||
Objects.equals(faceStatus, 3) ? "成功" : "失败,下发异常"),
|
|
||||||
"人员下发设备提醒", "1");
|
|
||||||
}
|
|
||||||
hikvisionCall.updateSuccessStatus(projectUfaceConfig.getProjectSn(), Long.valueOf(personId), 3, 1, dev.getDevSn());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("批量下发权限失败:", e);
|
|
||||||
hikvisionCall.updateAllFailStatusIfNullForAuth(projectUfaceConfig.getProjectSn(), workerList, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private JSONObject getQueryAuthItemParam(Map.Entry<String, List<JSONObject>> entry, Map<String, JSONObject> devSnToIscDevSnMap) {
|
|
||||||
JSONObject aaJo = new JSONObject();
|
|
||||||
aaJo.put("personIds", entry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList()));
|
|
||||||
aaJo.put("resourceInfos", Collections.singletonList(new JoBuilder()
|
|
||||||
.put("resourceIndexCode", devSnToIscDevSnMap.get(entry.getKey()).getString("parentIndexCode"))
|
|
||||||
.put("resourceType", "acsDevice")
|
|
||||||
.put("channelNos", Collections.singletonList(devSnToIscDevSnMap.get(entry.getKey()).getString("channelNo")))
|
|
||||||
.build()));
|
|
||||||
aaJo.put("queryType", "acsDevice");
|
|
||||||
aaJo.put("pageNo", 1);
|
|
||||||
aaJo.put("pageSize", 1000);
|
|
||||||
return aaJo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private JSONObject getQueryDownloadProgressParam(Map.Entry<String, List<JSONObject>> entry) {
|
|
||||||
JSONObject aaJo = new JSONObject();
|
|
||||||
aaJo.put("taskType", 4);
|
|
||||||
aaJo.put("resourceInfos", getDevRqParam(entry));
|
|
||||||
return aaJo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private JSONObject getAddAuthParam(Map.Entry<String, List<JSONObject>> entry) {
|
|
||||||
JSONObject aaJo = new JSONObject();
|
|
||||||
aaJo.put("personDatas", Collections.singletonList(new MapBuilder<String, Object>()
|
|
||||||
.put("indexCodes", entry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList()))
|
|
||||||
.put("personDataType", "person")
|
|
||||||
.build()));
|
|
||||||
aaJo.put("resourceInfos", getDevRqParam(entry));
|
|
||||||
return aaJo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private List<JSONObject> getDevRqParam(Map.Entry<String, List<JSONObject>> entry) {
|
|
||||||
return Collections.singletonList(new JoBuilder()
|
|
||||||
.put("resourceIndexCode", entry.getKey())
|
|
||||||
.put("resourceType", "door")
|
|
||||||
.put("channelNos", Collections.singletonList(1))
|
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -209,7 +209,7 @@ public class UfaceDevServiceImpl extends ServiceImpl<UfaceDevMapper, UfaceDev> i
|
|||||||
if (list == null || list.size() == 0) {
|
if (list == null || list.size() == 0) {
|
||||||
throw new OpenAlertException("请先添加设备");
|
throw new OpenAlertException("请先添加设备");
|
||||||
}
|
}
|
||||||
asyncWorker.sendBatchWokerDevAsync(map, tempProjectUfaceConfig, list);
|
asyncWorker.sendBatchWokerDev(map, tempProjectUfaceConfig, list);
|
||||||
} else {
|
} else {
|
||||||
throw new OpenAlertException("项目配置不下发设备或未配置参数");
|
throw new OpenAlertException("项目配置不下发设备或未配置参数");
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user