海康下发人员

This commit is contained in:
guoshengxiong 2024-06-14 09:10:46 +08:00
parent 5dea079820
commit c59aa46e91
15 changed files with 602 additions and 351 deletions

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.async;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -9,11 +10,11 @@ import com.zhgd.jeecg.common.util.SpringContextUtils;
import com.zhgd.jeecg.common.util.pass.HttpUtils;
import com.zhgd.xmgl.call.HikvisionCall;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.basicdata.entity.Notice;
import com.zhgd.xmgl.modules.basicdata.service.INoticeService;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl;
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.service.IProjectUfaceConfigService;
@ -28,10 +29,7 @@ import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionCompareDataServiceImpl;
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.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.NotNull;
@ -39,9 +37,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.Future;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -57,8 +57,9 @@ public class AsyncHikvision {
public CarInfoServiceImpl carInfoService;
@Autowired
@Lazy
public
WorkerInfoServiceImpl workerInfoService;
public WorkerInfoServiceImpl workerInfoService;
@Autowired
@Lazy
public IProjectUfaceConfigService projectUfaceConfigService;
@Autowired
@Lazy
@ -117,6 +118,13 @@ public class AsyncHikvision {
return ThreadLocalUtil.getNotNull().getDate(XZ_HIKVISION_SYNC_TIME);
}
@Async("sendWorkerExecutor")
public Future addWorkerAndAuthAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
addWorkerAsync(workerInfo, true, true);
projectUfaceConfigService.addWorkerInfo(workerInfo);
return null;
}
/**
* 添加劳务人员-海康
*
@ -124,8 +132,8 @@ public class AsyncHikvision {
* @param isSaveWorker
* @param isSaveWorkerFace
*/
@Async("hikvisionExecutor")
public void addWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
@Async("sendWorkerExecutor")
public void addWorkerAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
try {
hikvisionCall.addWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace);
} catch (Exception e) {
@ -134,22 +142,28 @@ public class AsyncHikvision {
}
}
public void addWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.addWorkerForHikvisionAsync(workerInfo, isSaveWorker, isSaveWorkerFace);
public void addWorker(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.addWorkerAsync(workerInfo, isSaveWorker, isSaveWorkerFace);
}
@Async("hikvisionExecutor")
public void editWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
@Async("sendWorkerExecutor")
public void editWorkerAndAuthAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.editWorkerAsync(workerInfo, true, true);
projectUfaceConfigService.updateWorkerInfo(workerInfo, workerInfo);
}
@Async("sendWorkerExecutor")
public void editWorkerAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
try {
hikvisionCall.editWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace);
hikvisionCall.editWorker(workerInfo, isSaveWorker, isSaveWorkerFace);
} catch (Exception e) {
log.error("海康:", e);
sendNoticeForWorker(workerInfo, e, "更新");
}
}
public void editWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.editWorkerForHikvisionAsync(workerInfo, isSaveWorker, isSaveWorkerFace);
public void editWorker(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) {
this.editWorkerAsync(workerInfo, isSaveWorker, isSaveWorkerFace);
}
private void sendNoticeForWorker(WorkerInfo workerInfo, Exception e, String action) {
@ -169,7 +183,7 @@ public class AsyncHikvision {
hikvisionCall.updateAllFailStatusIfNull(workerInfo.getProjectSn(), workerInfo.getId(), 1);
}
@Async("hikvisionExecutor")
@Async("sendWorkerExecutor")
public void deleteWorkerForHikvisionAsync(String uniqueId, WorkerInfo workerInfo) {
try {
hikvisionCall.deleteWorkerForHikvision(uniqueId, workerInfo);
@ -464,12 +478,24 @@ public class AsyncHikvision {
hikvisionCall.getDoorEvents(paramMap);
}
public void sendBatchWorkerInfo(List<UfaceDev> allDevList, List<WorkerInfo> workerList, List<JSONObject> workerAndDevSnList, Long userId, String projectSn) {
this.sendBatchWorkerInfoAsync(allDevList, workerList, workerAndDevSnList, userId, projectSn);
}
/**
* 批量下发人员
*
* @param allDevList
* @param workerList 下发的人员
* @param workerAndDevSnList 构建的下发的人员和设备的关系
* @param userId
*/
@Async("sendBatchExecutor")
public void sendBatchWorkerInfoAsync(ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList, List<JSONObject> workerAndDevSnList) {
public void sendBatchWorkerInfoAsync(List<UfaceDev> allDevList, List<WorkerInfo> workerList, List<JSONObject> workerAndDevSnList, Long userId, String projectSn) {
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());
ProjectInfoExtVo project = projectService.getProjectInfoBySn(projectSn);
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);
@ -483,23 +509,69 @@ public class AsyncHikvision {
o1.putAll(o2);
return o1;
}));
ArrayList<Future> futures = new ArrayList<>();
for (Map.Entry<String, List<JSONObject>> entry : devSnToJoMap.entrySet()) {
asyncHikvision.sendBatchWorkersForOneDevAsync(projectUfaceConfig, workerIdMap, devSnMap, project, devSnToIscDevSnMap, iscDevSnToMyMap, entry);
Future future = asyncHikvision.sendBatchWorkersForOneDevAsync(workerIdMap, devSnMap, project, devSnToIscDevSnMap, iscDevSnToMyMap, entry, projectSn);
futures.add(future);
}
for (Future future : futures) {
while (!future.isDone()) {
}
}
//下发完成
if (userId != null) {
java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String redNotice = "";
List<String> redNameList = workerList.stream().filter(w -> NumberUtils.lt(w.getSafeScore(), 80D)).map(WorkerInfo::getWorkerName).collect(Collectors.toList());
if (CollUtil.isNotEmpty(redNameList)) {
redNotice = StrUtil.format(",其中{}是红码不下发", StrUtil.join(",", redNameList));
}
Notice notice = new Notice();
notice.setAccountId(userId);
notice.setMsg(StrUtil.format("已经完成批量向设备下发{}个人{}", workerList.size(), redNotice));
notice.setTitle("人员批量下发设备提醒");
notice.setSendTime(format1.format(new Date()));
notice.setType("1");
noticeService.addNotice(notice, true);
}
} catch (Exception e) {
log.error("批量下发权限失败:", e);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectUfaceConfig.getProjectSn(), workerList, 1, 1);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, workerList, 1, 1);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, workerList, 1, 3);
}
}
/**
* 一个设备批量下发人员
*
* @param workerIdMap
* @param devSnMap
* @param project
* @param devSnToIscDevSnMap
* @param iscDevSnToMyMap
* @param devSnToJoEntry
*/
@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) {
public Future sendBatchWorkersForOneDevAsync(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>> devSnToJoEntry, String projectSn) {
try {
//添加权限配置人员列表设备列表这个接口只要没报错你就直接去下一步就行了
JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddAuthParam(entry));
HikvisionUtil.getJSONObjectData(aaRJo);
List<String> addAuthWorkerIds = devSnToJoEntry.getValue().stream().filter(jo -> jo.getBoolean(Cts.IS_ADD_AUTH)).map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList());
List<String> deleteAuthWorkerIds = devSnToJoEntry.getValue().stream().filter(jo -> !jo.getBoolean(Cts.IS_ADD_AUTH)).map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList());
if (CollUtil.isEmpty(addAuthWorkerIds) && CollUtil.isEmpty(deleteAuthWorkerIds)) {
log.error("无权限添加或删除,跳过");
return null;
}
if (CollUtil.isNotEmpty(addAuthWorkerIds)) {
JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, addAuthWorkerIds));
HikvisionUtil.getJSONObjectData(aaRJo);
}
if (CollUtil.isNotEmpty(deleteAuthWorkerIds)) {
JSONObject aaRJo = HikvisionUtil.deleteAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, deleteAuthWorkerIds));
HikvisionUtil.getJSONObjectData(aaRJo);
}
String devSn = devSnToJoEntry.getKey();
//然后调用根据出入权限配置快捷下载设备列表添加权限配置+快捷下发这是一个流程你添加了几个权限下发成功之后就清零了
JSONObject daJo = HikvisionUtil.downloadAuth(project, getQueryDownloadProgressParam(entry));
JSONObject daJo = HikvisionUtil.downloadAuth(project, getQueryDownloadProgressParam(devSnToJoEntry));
JSONObject daRtJo = HikvisionUtil.getJSONObjectData(daJo);
//然后调用查询下载任务进度上面那个的任务
int totalPercent = 0;
@ -511,21 +583,50 @@ public class AsyncHikvision {
Thread.sleep(1000);
} while (totalPercent != 100);
//权限下发后进度100后查询权限条目列表人员列表设备列表接口去查返回参数有权限状态返回已下载的就是有权限
JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(entry, devSnToIscDevSnMap));
JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(devSnToJoEntry, 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);
if (CollUtil.isNotEmpty(qaiList)) {
for (int i = 0; i < qaiList.size(); i++) {
handlerBatchWorkersResultForAddAuth(workerIdMap, devSnMap, iscDevSnToMyMap, qaiList, i, devSn, projectSn);
}
}
//处理删除权限的结果的
//handlerBatchWorkersResultForDeleteAuth();
if (CollUtil.isNotEmpty(deleteAuthWorkerIds)) {
for (String workerId : deleteAuthWorkerIds) {
hikvisionCall.updateSuccessStatus(projectSn, Long.valueOf(workerId), 3, 3, devSn);
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(workerId).getWorkerName(),
devSnMap.get(devSn).getDevName(),
"成功"),
"人员下发设备提醒", "1");
}
}
}
} catch (Exception e) {
log.error("批量下发权限失败:", e);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectUfaceConfig.getProjectSn(), new ArrayList<>(workerIdMap.values()), 1, 1);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, new ArrayList<>(workerIdMap.values()), 1, 1);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, new ArrayList<>(workerIdMap.values()), 1, 3);
}
return null;
}
@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) {
/**
* 处理结果一个设备批量下发人员
*
* @param workerIdMap
* @param devSnMap
* @param iscDevSnToMyMap
* @param qaiList
* @param i
* @param devSn
* @param projectSn
*/
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void handlerBatchWorkersResultForAddAuth(Map<String, WorkerInfo> workerIdMap, Map<String, UfaceDev> devSnMap, Map<String, Map<String, JSONObject>> iscDevSnToMyMap, JSONArray qaiList, int i, String devSn, String projectSn) {
JSONObject jo = qaiList.getJSONObject(i);
String personId = jo.getString("personId");
String resourceIndexCode = jo.getString("resourceIndexCode");
@ -537,23 +638,23 @@ public class AsyncHikvision {
//3已下载
//4未配置
Integer faceStatus = jo.getInteger("faceStatus");
UfaceDev dev = devSnMap.get(iscDevSnToMyMap.get(resourceIndexCode).get(channelNo).getString("indexCode"));
UfaceDev dev = devSnMap.get(devSn);
hikvisionCall.updateSuccessStatus(projectSn, Long.valueOf(personId), 3, 1, dev.getDevSn());
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("设备"),
dev.getDevName(),
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) {
private JSONObject getAddOrDeleteAuthParam(Map.Entry<String, List<JSONObject>> entry, List<String> workerIds) {
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("indexCodes", workerIds)
.put("personDataType", "person")
.build()));
aaJo.put("resourceInfos", getDevRqParam(entry));

View File

@ -1,7 +1,5 @@
package com.zhgd.xmgl.async;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zhgd.jeecg.common.util.SpringContextUtils;
import com.zhgd.xmgl.call.HousingDataCall;
import com.zhgd.xmgl.call.WkServiceuCall;
import com.zhgd.xmgl.modules.basicdata.entity.Notice;
@ -12,9 +10,6 @@ import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
import com.zhgd.xmgl.modules.worker.entity.*;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
import com.zhgd.xmgl.util.NumberUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -72,10 +67,6 @@ public class AsyncWorker {
}
}
public void sendBatchWokerDev(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList) {
this.sendBatchWokerDevAsync(map, projectUfaceConfig, allDevList);
}
/**
* 批量数据发送任务
*
@ -89,32 +80,31 @@ public class AsyncWorker {
if (workerList.size() > 0) {
if (projectUfaceConfig.getSupplierType() == 9) {
//isc下发
projectUfaceConfigService.sendBatchWorkerForHk(map, projectUfaceConfig, allDevList, workerList);
projectUfaceConfigService.buildAndSendBatchWorkerForHk(projectUfaceConfig, allDevList, workerList, userId);
} else {
for (WorkerInfo info : workerList) {
try {
info.setNoticeUserId(userId);
projectUfaceConfigService.sendBatchWorkerInfo(info, projectUfaceConfig, allDevList);
workerInfoService.resetHkStatus(info);
} catch (Exception e) {
log.error("下发人员异常,人员名称:{}", info.getWorkerName() + "," + e.getMessage());
noticeFail(info.getWorkerName(), userId, e);
log.error("error", e);
}
}
if (userId != null) {
java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Notice notice = new Notice();
notice.setAccountId(userId);
notice.setMsg("已经完成批量向设备下发" + workerList.size() + "个人");
notice.setTitle("人员批量下发设备提醒");
notice.setSendTime(format1.format(new Date()));
notice.setType("1");
noticeService.addNotice(notice, true);
}
log.info("--------------------------------批量向设备下发人员执行完成-------------------------------");
}
}
if (userId != null) {
java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Notice notice = new Notice();
notice.setAccountId(userId);
notice.setMsg("已经完成批量向设备下发" + workerList.size() + "个人");
notice.setTitle("人员批量下发设备提醒");
notice.setSendTime(format1.format(new Date()));
notice.setType("1");
noticeService.addNotice(notice, true);
}
log.info("--------------------------------批量向设备下发人员执行完成-------------------------------");
} catch (Exception e) {
log.error("error", e);
}

View File

@ -892,7 +892,7 @@ public class HikvisionCall {
* @param isSaveWorker
* @param isSaveWorkerFace
*/
public void editWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception {
public void editWorker(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception {
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return;
@ -1137,6 +1137,14 @@ public class HikvisionCall {
}
}
/**
* 更新所有未同步失败状态
*
* @param projectSn
* @param workerList
* @param bigType
* @param operate
*/
public void updateAllFailStatusIfNullForAuth(String projectSn, List<WorkerInfo> workerList, Integer bigType, Integer operate) {
for (WorkerInfo workerInfo : workerList) {
updateAllFailStatusIfNullForAuth(projectSn, workerInfo.getId(), bigType, operate);
@ -1170,6 +1178,15 @@ public class HikvisionCall {
updateStatus(projectSn, whoId, type, operate, deviceSn, false);
}
/**
* 更新成功状态
*
* @param projectSn
* @param whoId
* @param type
* @param operate
* @param deviceSn
*/
public void updateSuccessStatus(String projectSn, Long whoId, Integer type, Integer operate, String deviceSn) {
updateStatus(projectSn, whoId, type, operate, deviceSn, true);
}
@ -1199,6 +1216,13 @@ public class HikvisionCall {
updateTotalStatus(projectSn, whoId, xzHikvisionSync.getBigType());
}
/**
* 更下总状态
*
* @param projectSn
* @param whoId
* @param bigType
*/
public void updateTotalStatus(String projectSn, Long whoId, Integer bigType) {
List<XzHikvisionSync> xzHikvisionSyncs = xzHikvisionSyncMapper.selectList(new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getProjectSn, projectSn)

View File

@ -128,10 +128,10 @@ public class AsyncConfig {
public ThreadPoolTaskExecutor sendWorkerExecutor() {
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
/** 核心线程数(默认线程数) */
executor.setCorePoolSize(corePoolSize);
executor.setCorePoolSize(corePoolSize * 10);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setMaxPoolSize(maxPoolSize * 10);
executor.setQueueCapacity(queueCapacity * 10);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -334,6 +334,11 @@ public class AsyncConfig {
return executor;
}
/**
* 单个线程
*
* @return
*/
@Bean("hikvisionExecutor")
public ThreadPoolTaskExecutor hikvisionExecutor() {
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
@ -341,7 +346,7 @@ public class AsyncConfig {
executor.setCorePoolSize(1);
/** 最大线程数 */
executor.setMaxPoolSize(1);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -379,7 +384,7 @@ public class AsyncConfig {
executor.setCorePoolSize(maxPoolSize);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -398,7 +403,7 @@ public class AsyncConfig {
executor.setCorePoolSize(maxPoolSize);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -417,7 +422,7 @@ public class AsyncConfig {
executor.setCorePoolSize(maxPoolSize);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -436,7 +441,7 @@ public class AsyncConfig {
executor.setCorePoolSize(maxPoolSize);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -455,7 +460,7 @@ public class AsyncConfig {
executor.setCorePoolSize(corePoolSize);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -474,7 +479,7 @@ public class AsyncConfig {
executor.setCorePoolSize(1);
/** 最大线程数 */
executor.setMaxPoolSize(160);
executor.setQueueCapacity(100000);
executor.setQueueCapacity(1000);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -513,7 +518,7 @@ public class AsyncConfig {
executor.setCorePoolSize(maxPoolSize * 10);
/** 最大线程数 */
executor.setMaxPoolSize(maxPoolSize * 10);
executor.setQueueCapacity(queueCapacity);
executor.setQueueCapacity(queueCapacity * 10);
/** 允许线程空闲时间(单位:默认为秒) */
executor.setKeepAliveSeconds(60);
/** 线程池名前缀 */
@ -524,4 +529,5 @@ public class AsyncConfig {
executor.initialize();
return executor;
}
}

View File

@ -31,13 +31,6 @@ public interface Cts {
String MSG = "msg";
String ENTERPRISE_ID = "enterpriseId";
/**
* 数据校验重试是否成功
*/
String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data";
String TL_IS_FROM_TASK = "isFromTask";
String TL_IS_FROM_WEB = "isFromWeb";
String TYPE = "type";
String TEAM_ID = "teamId";
String DEPARTMENT_ID = "departmentId";
@ -46,4 +39,18 @@ public interface Cts {
String YYYY_MM_DD = "yyyy-MM-dd";
String TL_AUTH_USER = "authUser";
String PAGE_NO = "pageNo";
/**
* 数据校验重试是否成功
*/
String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data";
String TL_IS_FROM_TASK = "isFromTask";
String TL_IS_FROM_WEB = "isFromWeb";
String TL_SEND_BATCH_WORKER_COUNT_DOWN_LATCH = "sendBatchWorkerCountDownLatch";
/**
* 1添加权限2删除权限
*/
String IS_ADD_AUTH = "isAddAuth";
}

View File

@ -1,17 +1,16 @@
package com.zhgd.xmgl.modules.project.service;
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import java.util.List;
import java.util.Map;
/**
* @Description: 项目对应的人脸设备配置
* @author pds
* @date 2020-09-23
* @date 2020-09-23
* @version V1.0
*/
public interface IProjectUfaceConfigService extends IService<ProjectUfaceConfig> {
@ -32,11 +31,20 @@ public interface IProjectUfaceConfigService extends IService<ProjectUfaceConfig>
boolean isHikvisionConfig(String projectSn);
void addPersonAuth(WorkerInfo workerInfo, String devSn);
void addHkSyncRecordsAndUpdateWorkerStatus(WorkerInfo workerInfo, String devSns);
void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo, String devSns);
void deletePersonAuth(WorkerInfo workerInfo, String devSns);
void buildAndSendBatchWorkerForHk(ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList, Long userId);
void sendBatchWorkerForHk(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList);
void buildAndSendOneWorkerAndDevForHk(List<UfaceDev> allDevList, WorkerInfo workerInfo, int operate, String devSn, String projectSn);
/**
* 添加权限的记录
*
* @param workerInfo
*/
void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo);
void editHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo);
}

View File

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhgd.jeecg.common.execption.OpenAlertException;
import com.zhgd.xmgl.async.AsyncHikvision;
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.project.entity.ProjectUfaceConfig;
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
@ -152,78 +153,31 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
//判断是否配置并下发设备
if (tempProjectUfaceConfig != null && tempProjectUfaceConfig.getIssueDev() == 1) {
String ufaceDevId = workerInfo.getUfaceDevId();
if (tempProjectUfaceConfig.getSupplierType() == 9) {
//isc设备
Map<String, Object> param = new HashMap<>();
param.put("projectSn", workerInfo.getProjectSn());
if ("0".equals(ufaceDevId)) {
workerInfo.setUfaceDevId(null);
}
if (StringUtils.isNotEmpty(ufaceDevId)) {
param.put("registerType", workerInfo.getRegisterType());
}
param.put("accountType", 2);
if (Objects.equals(workerInfo.getDevType(), 1)) {
if (StrUtil.isBlank(ufaceDevId)) {
return;
Map<String, Object> param = new HashMap<>();
param.put("projectSn", workerInfo.getProjectSn());
if ("0".equals(ufaceDevId)) {
workerInfo.setUfaceDevId(null);
}
if (StringUtils.isNotEmpty(ufaceDevId)) {
param.put("registerType", workerInfo.getRegisterType());
param.put("accountType", workerInfo.getAccountType());
param.put("devIds", ufaceDevId);
}
List<UfaceDev> list = ufaceDevMapper.selectUserUfaceDevList(param);
if (list != null && list.size() > 0) {
StringBuilder devBuilder = new StringBuilder();
StringBuilder devIdBuilder = new StringBuilder();
for (UfaceDev dev : list) {
if (devBuilder.length() > 0) {
devBuilder.append(",");
}
param.put("devIds", ufaceDevId);
} else if (Objects.equals(workerInfo.getDevType(), 2)) {
//设备分组情况
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
if (StringUtils.isEmpty(ufaceDevGroupId)) {
return;
if (devIdBuilder.length() > 0) {
devIdBuilder.append(",");
}
List<Long> ufaceIds = ufaceDevToGroupMapper.selectList(new LambdaQueryWrapper<UfaceDevToGroup>().in(UfaceDevToGroup::getUfaceDevGroupId, Arrays.asList(StringUtils.split(ufaceDevGroupId, ",")))).stream().map(UfaceDevToGroup::getUfaceDevId).collect(Collectors.toList());
if (CollUtil.isEmpty(ufaceIds)) {
return;
}
ufaceIds.stream().distinct();
param.put("devIds", StringUtils.join(ufaceIds, ","));
}
List<UfaceDev> list = ufaceDevMapper.selectUserUfaceDevList(param);
if (list != null && list.size() > 0) {
StringBuilder devBuilder = new StringBuilder();
StringBuilder devIdBuilder = new StringBuilder();
for (UfaceDev dev : list) {
if (devBuilder.length() > 0) {
devBuilder.append(",");
}
if (devIdBuilder.length() > 0) {
devIdBuilder.append(",");
}
devBuilder.append(dev.getDevSn());
devIdBuilder.append(dev.getDeviceId());
}
sendDev(tempProjectUfaceConfig, workerInfo, devBuilder.toString(), devIdBuilder.toString());
}
} else {
Map<String, Object> param = new HashMap<>();
param.put("projectSn", workerInfo.getProjectSn());
if ("0".equals(ufaceDevId)) {
workerInfo.setUfaceDevId(null);
}
if (StringUtils.isNotEmpty(ufaceDevId)) {
param.put("registerType", workerInfo.getRegisterType());
param.put("accountType", workerInfo.getAccountType());
param.put("devIds", ufaceDevId);
}
List<UfaceDev> list = ufaceDevMapper.selectUserUfaceDevList(param);
if (list != null && list.size() > 0) {
StringBuilder devBuilder = new StringBuilder();
StringBuilder devIdBuilder = new StringBuilder();
for (UfaceDev dev : list) {
if (devBuilder.length() > 0) {
devBuilder.append(",");
}
if (devIdBuilder.length() > 0) {
devIdBuilder.append(",");
}
devBuilder.append(dev.getDevSn());
devIdBuilder.append(dev.getDeviceId());
}
sendDev(tempProjectUfaceConfig, workerInfo, devBuilder.toString(), devIdBuilder.toString());
devBuilder.append(dev.getDevSn());
devIdBuilder.append(dev.getDeviceId());
}
sendDev(tempProjectUfaceConfig, workerInfo, devBuilder.toString(), devIdBuilder.toString());
}
}
}
@ -232,30 +186,29 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
public void deleteWorkerInfo(WorkerInfo workerInfo) {
QueryWrapper<ProjectUfaceConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProjectUfaceConfig::getProjectSn, workerInfo.getProjectSn());
ProjectUfaceConfig tempProjectUfaceConfig = projectUfaceConfigMapper.selectOne(queryWrapper);
ProjectUfaceConfig ufaceConfig = projectUfaceConfigMapper.selectOne(queryWrapper);
//判断是否配置并下发设备
if (tempProjectUfaceConfig != null && tempProjectUfaceConfig.getIssueDev() == 1) {
QueryWrapper<UfaceDev> qw = new QueryWrapper<>();
qw.lambda().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn());
List<UfaceDev> list = ufaceDevMapper.selectList(qw);
if (ufaceConfig != null && ufaceConfig.getIssueDev() == 1) {
List<UfaceDev> list = getAllDevsByProjectSn(workerInfo.getProjectSn());
if (list != null && list.size() > 0) {
if (tempProjectUfaceConfig.getSupplierType() == 1) {
UniUbiUtil.delPerson(null, tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getIdCard());
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
QYUfaceUtil.deleteNewPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getIdCard());
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
if (ufaceConfig.getSupplierType() == 1) {
UniUbiUtil.delPerson(null, ufaceConfig.getAppId(), ufaceConfig.getAppKey(), ufaceConfig.getAppSecret(), workerInfo.getIdCard());
} else if (ufaceConfig.getSupplierType() == 4) {
QYUfaceUtil.deleteNewPerson(ufaceConfig.getAppId(), ufaceConfig.getAppSecret(), workerInfo.getIdCard());
} else if (ufaceConfig.getSupplierType() == 5) {
//佳信捷设备
JxjUfaceUtil.deleteWorkerInfo(workerInfo, tempProjectUfaceConfig);
} else if (tempProjectUfaceConfig.getSupplierType() == 6) {
JxjUfaceUtil.deleteWorkerInfo(workerInfo, ufaceConfig);
} else if (ufaceConfig.getSupplierType() == 6) {
//佳信捷新设备
JxjNewUfaceDevUtil.deleteWorkerInfo(workerInfo, tempProjectUfaceConfig);
} else if (tempProjectUfaceConfig.getSupplierType() == 7) {
JxjNewUfaceDevUtil.deleteWorkerInfo(workerInfo, ufaceConfig);
} else if (ufaceConfig.getSupplierType() == 7) {
//海康门禁sdk
HikvisionUfaceSDKUtil.deletePerson(workerInfo, tempProjectUfaceConfig, workerInfo.getUfaceDevId());
} else if (tempProjectUfaceConfig.getSupplierType() == 9) {
HikvisionUfaceSDKUtil.deletePerson(workerInfo, ufaceConfig, workerInfo.getUfaceDevId());
} else if (ufaceConfig.getSupplierType() == 9) {
//海康门禁isc
String notDevSns = StrUtil.join(",", list.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, notDevSns);
List<UfaceDev> ufaceDevs = getAllDevsByProjectSn(ufaceConfig.getProjectSn());
this.deleteHkSyncRecordAndResetStatusForDev(workerInfo, ufaceDevs);
this.buildAndSendOneWorkerForHk(ufaceDevs, workerInfo, 3, ufaceConfig.getProjectSn());
}
}
}
@ -265,67 +218,13 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
public void updateWorkerInfo(WorkerInfo workerInfo, WorkerInfo oldWorkerInfo) {
QueryWrapper<ProjectUfaceConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ProjectUfaceConfig::getProjectSn, workerInfo.getProjectSn());
ProjectUfaceConfig tempProjectUfaceConfig = projectUfaceConfigMapper.selectOne(queryWrapper);
ProjectUfaceConfig ufaceConfig = projectUfaceConfigMapper.selectOne(queryWrapper);
//判断是否配置并下发设备
if (tempProjectUfaceConfig != null && tempProjectUfaceConfig.getIssueDev() == 1) {
if (tempProjectUfaceConfig.getSupplierType() == 9) {
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
//红码不能通行
List<UfaceDev> allList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(allList)) {
String devSns = StrUtil.join(",", allList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, devSns);
}
} else {
//海康门禁isc
String devSns = "";
String notDevSns = "";
if (Objects.equals(workerInfo.getDevType(), 1)) {
devSns = workerInfo.getUfaceDevId();
if (StrUtil.isNotBlank(devSns)) {
List<UfaceDev> existList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()).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)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, notDevSns);
}
if (CollUtil.isNotEmpty(existList)) {
devSns = StrUtil.join(",", existList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.addPersonAuth(workerInfo, devSns);
}
} else {
//只删除
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, notDevSns);
}
}
} else if (Objects.equals(workerInfo.getDevType(), 2)) {
//设备分组情况
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
if (StrUtil.isNotBlank(ufaceDevGroupId)) {
List<UfaceDev> listForIsc = ufaceDevMapper.getUfaceDevListForIsc(StrUtil.split(ufaceDevGroupId, ","), workerInfo.getProjectSn());
List<UfaceDev> notExistList = ufaceDevMapper.getUfaceDevListForIscNotExist(StrUtil.split(ufaceDevGroupId, ","), workerInfo.getProjectSn());
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, notDevSns);
}
if (CollUtil.isNotEmpty(listForIsc)) {
devSns = StrUtil.join(",", listForIsc.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.addPersonAuth(workerInfo, devSns);
}
} else {
//只删除
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
this.deletePersonAuth(workerInfo, notDevSns);
}
}
}
}
workerInfoService.resetHkStatus(workerInfo);
if (ufaceConfig != null && ufaceConfig.getIssueDev() == 1) {
if (ufaceConfig.getSupplierType() == 9) {
List<UfaceDev> list = getAllDevsByProjectSn(workerInfo.getProjectSn());
this.buildAndSendOneWorkerForHk(list, workerInfo, 2, workerInfo.getProjectSn());
workerInfoService.updateWorkerHkStatus(workerInfo);
} else {
Map<String, Object> param = new HashMap<>();
param.put("projectSn", workerInfo.getProjectSn());
@ -358,35 +257,35 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
devBuilder.append(dev.getDevSn());
devIdBuilder.append(dev.getDeviceId());
}
if (tempProjectUfaceConfig.getSupplierType() == 1) {
if (ufaceConfig.getSupplierType() == 1) {
String image = "";
if (StringUtils.isNotEmpty(workerInfo.getFieldAcquisitionUrl()) && workerInfo.getFieldAcquisitionUrl().startsWith("http")) {
image = workerInfo.getFieldAcquisitionUrl();
} else {
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
}
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devBuilder.toString());
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
UniUbiUtil.addPerson(ufaceConfig.getAppId(), ufaceConfig.getAppKey(), ufaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devBuilder.toString());
} else if (ufaceConfig.getSupplierType() == 4) {
//人员唯一编号改变需要先删除再下发
if (oldWorkerInfo != null && workerInfo.getIdCard().equals(oldWorkerInfo.getIdCard())) {
try {
QYUfaceUtil.deleteNewPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), oldWorkerInfo.getIdCard());
QYUfaceUtil.deleteNewPerson(ufaceConfig.getAppId(), ufaceConfig.getAppSecret(), oldWorkerInfo.getIdCard());
} catch (Exception e) {
log.error("error", e);
}
}
QYUfaceUtil.addOrUpdatePerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(), "", "", workerInfo.getIdCard(), "", "", 3, "", devIdBuilder.toString().split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
QYUfaceUtil.addOrUpdatePerson(ufaceConfig.getAppId(), ufaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(), "", "", workerInfo.getIdCard(), "", "", 3, "", devIdBuilder.toString().split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
} else if (ufaceConfig.getSupplierType() == 5) {
//佳信捷设备
JxjUfaceUtil.updateWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
} else if (tempProjectUfaceConfig.getSupplierType() == 6) {
JxjUfaceUtil.updateWorkerInfo(workerInfo, ufaceConfig, serverUrl + "/image/");
} else if (ufaceConfig.getSupplierType() == 6) {
//佳信捷新设备
JxjNewUfaceDevUtil.addOrUpdatePerson(workerInfo, tempProjectUfaceConfig, basePath, devBuilder.toString(), jxjDevImageType);
} else if (tempProjectUfaceConfig.getSupplierType() == 7) {
JxjNewUfaceDevUtil.addOrUpdatePerson(workerInfo, ufaceConfig, basePath, devBuilder.toString(), jxjDevImageType);
} else if (ufaceConfig.getSupplierType() == 7) {
//海康门禁sdk
HikvisionUfaceSDKUtil.deletePerson(workerInfo, tempProjectUfaceConfig, oldWorkerInfo.getUfaceDevId());
HikvisionUfaceSDKUtil.deletePerson(workerInfo, ufaceConfig, oldWorkerInfo.getUfaceDevId());
if (hasDev) {
HikvisionUfaceSDKUtil.addOrUpdatePerson(workerInfo, tempProjectUfaceConfig, devBuilder.toString());
HikvisionUfaceSDKUtil.addOrUpdatePerson(workerInfo, ufaceConfig, devBuilder.toString());
}
}
}
@ -394,13 +293,89 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
}
}
public Pair<String, String> getSendBatchDevSnsAndDevIds(WorkerInfo workerInfo, List<UfaceDev> allDevList) {
String rtDevSn = null;
String rtDevId = null;
if ("0".equals(workerInfo.getUfaceDevId())) {
workerInfo.setUfaceDevId(null);
/**
* 查询所有设备列表
*
* @param projectSn
* @return
*/
private List<UfaceDev> getAllDevsByProjectSn(String projectSn) {
QueryWrapper<UfaceDev> qw = new QueryWrapper<>();
qw.lambda().eq(UfaceDev::getProjectSn, projectSn);
return ufaceDevMapper.selectList(qw);
}
/**
* 获取下发的设备sns和删除下发的设备sns
*
* @param workerInfo
* @return
*/
public Pair<String, String> getSendAndDeleteDevSns(WorkerInfo workerInfo) {
//海康门禁isc
String devSns = "";
String notDevSns = "";
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
//红码不能通行
List<UfaceDev> allList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(allList)) {
notDevSns = StrUtil.join(",", allList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
} else if (Objects.equals(workerInfo.getDevType(), 1)) {
devSns = workerInfo.getUfaceDevId();
if (StrUtil.isNotBlank(devSns)) {
List<UfaceDev> existList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()).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)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
if (CollUtil.isNotEmpty(existList)) {
devSns = StrUtil.join(",", existList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
} else {
//只删除
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
}
} else {
//设备分组情况
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
if (StrUtil.isNotBlank(ufaceDevGroupId)) {
List<UfaceDev> listForIsc = ufaceDevMapper.getUfaceDevListForIsc(StrUtil.split(ufaceDevGroupId, ","), workerInfo.getProjectSn());
List<UfaceDev> notExistList = ufaceDevMapper.getUfaceDevListForIscNotExist(StrUtil.split(ufaceDevGroupId, ","), workerInfo.getProjectSn());
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
if (CollUtil.isNotEmpty(listForIsc)) {
devSns = StrUtil.join(",", listForIsc.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
} else {
//只删除
List<UfaceDev> notExistList = ufaceDevMapper.selectList(new LambdaQueryWrapper<UfaceDev>().eq(UfaceDev::getProjectSn, workerInfo.getProjectSn()));
if (CollUtil.isNotEmpty(notExistList)) {
notDevSns = StrUtil.join(",", notExistList.stream().map(UfaceDev::getDevSn).collect(Collectors.toList()));
}
}
}
return new ImmutablePair<String, String>(devSns, notDevSns);
}
/**
* 获取下发的设备sns和设备ids
*
* @param workerInfo
* @param allDevList
* @return
*/
public Pair<String, String> getBatchDevSnsAndDevIds(WorkerInfo workerInfo, List<UfaceDev> allDevList) {
String rtDevSns = null;
String rtDevIds = null;
if (Objects.equals(workerInfo.getDevType(), 1)) {
if ("0".equals(workerInfo.getUfaceDevId())) {
workerInfo.setUfaceDevId(null);
}
StringBuilder devBuilder = new StringBuilder();
StringBuilder devIdBuilder = new StringBuilder();
if (StringUtils.isNotEmpty(workerInfo.getUfaceDevId())) {
@ -431,8 +406,8 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
devIdBuilder.append(dev.getDeviceId());
}
}
rtDevSn = devBuilder.toString();
rtDevId = devIdBuilder.toString();
rtDevSns = devBuilder.toString();
rtDevIds = devIdBuilder.toString();
} else {
//设备分组情况
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
@ -458,19 +433,19 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
devBuilder1.append(dev.getDevSn());
devIdBuilder1.append(dev.getDeviceId());
}
rtDevId = devIdBuilder1.toString();
rtDevSn = devBuilder1.toString();
rtDevIds = devIdBuilder1.toString();
rtDevSns = devBuilder1.toString();
}
}
}
}
log.info("准备下发人员名称:{}devSn:{},devId:{}", workerInfo.getWorkerName(), rtDevSn, rtDevId);
return new ImmutablePair<>(rtDevSn, rtDevId);
log.info("准备下发人员名称:{}devSn:{},devId:{}", workerInfo.getWorkerName(), rtDevSns, rtDevIds);
return new ImmutablePair<>(rtDevSns, rtDevIds);
}
@Override
public void sendBatchWorkerInfo(WorkerInfo workerInfo, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList) {
Pair<String, String> devSnsAndDevIdsPair = getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
Pair<String, String> devSnsAndDevIdsPair = getBatchDevSnsAndDevIds(workerInfo, allDevList);
String right = devSnsAndDevIdsPair.getRight();
if (right != null) {
sendDev(projectUfaceConfig, workerInfo, devSnsAndDevIdsPair.getLeft(), right);
@ -483,79 +458,61 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
return c > 0;
}
public void sendDev(ProjectUfaceConfig tempProjectUfaceConfig, WorkerInfo workerInfo, String devSns, String devIds) {
log.info("supplierType:{}", tempProjectUfaceConfig.getSupplierType());
public void sendDev(ProjectUfaceConfig ufaceConfig, WorkerInfo workerInfo, String devSns, String devIds) {
log.info("supplierType:{}", ufaceConfig.getSupplierType());
//1杭州宇泛智能科技,2用jdpush推送,3.mqtt,4.芊熠智能,5佳信捷,6佳信捷新设备
if (tempProjectUfaceConfig.getSupplierType() == 1) {
if (ufaceConfig.getSupplierType() == 1) {
String image = "";
if (StringUtils.isNotEmpty(workerInfo.getFieldAcquisitionUrl()) && workerInfo.getFieldAcquisitionUrl().startsWith("http")) {
image = workerInfo.getFieldAcquisitionUrl();
} else {
image = basePath + "/" + workerInfo.getFieldAcquisitionUrl();
}
UniUbiUtil.addPerson(tempProjectUfaceConfig.getAppId(), tempProjectUfaceConfig.getAppKey(), tempProjectUfaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devSns);
} else if (tempProjectUfaceConfig.getSupplierType() == 4) {
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());
} else if (tempProjectUfaceConfig.getSupplierType() == 5) {
UniUbiUtil.addPerson(ufaceConfig.getAppId(), ufaceConfig.getAppKey(), ufaceConfig.getAppSecret(), workerInfo.getWorkerName(), workerInfo.getAttendanceNumber(), workerInfo.getIdCard(), image, devSns);
} else if (ufaceConfig.getSupplierType() == 4) {
QYUfaceUtil.addOrUpdatePerson(ufaceConfig.getAppId(), ufaceConfig.getAppSecret(), 1, workerInfo.getIdCard(), workerInfo.getWorkerName(), "", workerInfo.getPhoneNumber(), workerInfo.getIdCard(), workerInfo.getAttendanceNumber(), workerInfo.getNation(), workerInfo.getSex(), workerInfo.getBirthday(), devIds.split(","), basePath + "/" + workerInfo.getFieldAcquisitionUrl());
} else if (ufaceConfig.getSupplierType() == 5) {
//佳信捷设备
JxjUfaceUtil.addWorkerInfo(workerInfo, tempProjectUfaceConfig, serverUrl + "/image/");
} else if (tempProjectUfaceConfig.getSupplierType() == 6) {
JxjUfaceUtil.addWorkerInfo(workerInfo, ufaceConfig, serverUrl + "/image/");
} else if (ufaceConfig.getSupplierType() == 6) {
//佳信捷新设备
JxjNewUfaceDevUtil.addOrUpdatePerson(workerInfo, tempProjectUfaceConfig, basePath, devSns, jxjDevImageType);
} else if (tempProjectUfaceConfig.getSupplierType() == 7) {
JxjNewUfaceDevUtil.addOrUpdatePerson(workerInfo, ufaceConfig, basePath, devSns, jxjDevImageType);
} else if (ufaceConfig.getSupplierType() == 7) {
//海康门禁sdk
HikvisionUfaceSDKUtil.addOrUpdatePerson(workerInfo, tempProjectUfaceConfig, devSns);
} else if (tempProjectUfaceConfig.getSupplierType() == 9) {
HikvisionUfaceSDKUtil.addOrUpdatePerson(workerInfo, ufaceConfig, devSns);
} else if (ufaceConfig.getSupplierType() == 9) {
//海康门禁isc
if (NumberUtils.lt(workerInfo.getSafeScore(), 80D)) {
log.info("安全评分红码不下发权限,名称:{}", workerInfo.getWorkerName());
return;
}
this.addPersonAuth(workerInfo, devSns);
List<UfaceDev> list = getAllDevsByProjectSn(ufaceConfig.getProjectSn());
this.buildAndSendOneWorkerForHk(list, workerInfo, 1, ufaceConfig.getProjectSn());
}
}
@Override
public void addPersonAuth(WorkerInfo workerInfo, String devSns) {
if (StringUtils.isBlank(devSns)) {
return;
}
addHkSyncRecordAndResetStatusForDev(workerInfo, devSns);
asyncHikvision.addPersonAuthAsync(workerInfo, devSns);
}
@Override
public void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo, String devSns) {
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
String[] devSnArr = StringUtils.split(devSns, ",");
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())));
}
workerInfoService.resetHkStatus(workerInfo);
}
/**
* 删除
* 添加海康同步记录和更新劳务人员总状态
*
* @param workerInfo
* @param devSns
*/
@Override
public void deletePersonAuth(WorkerInfo workerInfo, String devSns) {
if (StringUtils.isBlank(devSns)) {
return;
}
public void addHkSyncRecordsAndUpdateWorkerStatus(WorkerInfo workerInfo, String devSns) {
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
String[] devSnArr = StringUtils.split(devSns, ",");
for (String ds : devSnArr) {
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).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())));
}
asyncHikvision.deletePersonAuthAsync(workerInfo, devSns);
workerInfoService.updateWorkerHkStatus(workerInfo);
}
/**
* 构建workerAndDevSnList和下发人员
*
* @param projectUfaceConfig
* @param allDevList
* @param workerList
* @param userId
*/
@Override
public void sendBatchWorkerForHk(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList) {
public void buildAndSendBatchWorkerForHk(ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList, Long userId) {
//构建workerAndDevSnList
List<JSONObject> workerAndDevSnList = new ArrayList<>();
for (WorkerInfo workerInfo : workerList) {
@ -564,17 +521,22 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
log.info("安全评分红码不下发权限,名称:{}", workerInfo.getWorkerName());
continue;
}
Pair<String, String> devSnsAndDevIdsPair = this.getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
Pair<String, String> devSnsAndDevIdsPair = this.getBatchDevSnsAndDevIds(workerInfo, allDevList);
if (devSnsAndDevIdsPair.getRight() != null) {
String devSns = devSnsAndDevIdsPair.getLeft();
//清楚以前的记录
xzHikvisionSyncMapper.delete(new LambdaQueryWrapper<XzHikvisionSync>().eq(XzHikvisionSync::getBigType, 1).eq(XzHikvisionSync::getWhoId, workerInfo.getId()));
this.addHkSyncRecordAndResetStatusForDev(workerInfo, devSns);
//清除以前的记录
xzHikvisionSyncMapper.delete(new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getBigType, 1)
.eq(XzHikvisionSync::getWhoId, workerInfo.getId())
.eq(XzHikvisionSync::getType, 3)
);
this.addHkSyncRecordsAndUpdateWorkerStatus(workerInfo, devSns);
List<String> devSnList = StrUtil.split(devSns, ",");
for (String devSn : devSnList) {
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, true);
workerAndDevSnList.add(jo);
}
}
@ -583,7 +545,118 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
return;
}
asyncHikvision.sendBatchWorkerInfoAsync(projectUfaceConfig, allDevList, workerList, workerAndDevSnList);
asyncHikvision.sendBatchWorkerInfoAsync(allDevList, workerList, workerAndDevSnList, userId, projectUfaceConfig.getProjectSn());
}
/**
* 构建workerAndDevSnList和下发一个人员
*
* @param allDevList
* @param workerInfo
* @param model 1只下发有权限的2下发有的权限和删除没有的权限3删除所有权限
*/
public void buildAndSendOneWorkerForHk(List<UfaceDev> allDevList, WorkerInfo workerInfo, int model, String projectSn) {
List<JSONObject> workerAndDevSnList = new ArrayList<>();
if (model == 2 || model == 1) {
Pair<String, String> sendAndDeleteDevSnsPair = getSendAndDeleteDevSns(workerInfo);
String devSns = sendAndDeleteDevSnsPair.getLeft();
String notDevSns = sendAndDeleteDevSnsPair.getRight();
if (StrUtil.isNotBlank(devSns)) {
for (String devSn : StrUtil.split(devSns, ",")) {
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, true);
workerAndDevSnList.add(jo);
}
}
if (model == 2 && StrUtil.isNotBlank(notDevSns)) {
for (String devSn : StrUtil.split(notDevSns, ",")) {
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, false);
workerAndDevSnList.add(jo);
}
}
} else if (model == 3) {
for (UfaceDev dev : allDevList) {
String devSn = dev.getDevSn();
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, false);
workerAndDevSnList.add(jo);
}
}
if (CollUtil.isEmpty(workerAndDevSnList)) {
log.info("未找到设备,无需下发,人员:{}", workerInfo.getWorkerName());
return;
}
asyncHikvision.sendBatchWorkerInfoAsync(allDevList, Collections.singletonList(workerInfo), workerAndDevSnList, null, projectSn);
}
/**
* 构建workerAndDevSnList和下发一个人员一个设备
*
* @param allDevList
* @param workerInfo
*/
@Override
public void buildAndSendOneWorkerAndDevForHk(List<UfaceDev> allDevList, WorkerInfo workerInfo, int operate, String devSn, String projectSn) {
List<JSONObject> workerAndDevSnList = new ArrayList<>();
if (operate == 1) {
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, true);
workerAndDevSnList.add(jo);
} else if (operate == 3) {
JSONObject jo = new JSONObject();
jo.put("workerId", workerInfo.getId());
jo.put("devSn", devSn);
jo.put(Cts.IS_ADD_AUTH, false);
workerAndDevSnList.add(jo);
}
if (CollUtil.isEmpty(workerAndDevSnList)) {
log.info("未找到设备,无需下发,人员:{}", workerInfo.getWorkerName());
return;
}
asyncHikvision.sendBatchWorkerInfo(allDevList, Collections.singletonList(workerInfo), workerAndDevSnList, null, projectSn);
}
public void deleteHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo, List<UfaceDev> allDevList) {
for (UfaceDev dev : allDevList) {
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).setWhoId(workerInfo.getId()).setDeviceSn(dev.getDevSn()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
}
workerInfoService.updateWorkerHkStatus(workerInfo);
}
@Override
public void addHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo) {
Pair<String, String> sendAndDeleteDevSnsPair = getSendAndDeleteDevSns(workerInfo);
String devSns = sendAndDeleteDevSnsPair.getLeft();
String[] devSnArr = StringUtils.split(devSns, ",");
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())));
}
workerInfoService.updateWorkerHkStatus(workerInfo);
}
@Override
public void editHkSyncRecordAndResetStatusForDev(WorkerInfo workerInfo) {
Pair<String, String> sendAndDeleteDevSnsPair = getSendAndDeleteDevSns(workerInfo);
String devSns = sendAndDeleteDevSnsPair.getLeft();
for (String devSn : StrUtil.split(devSns, ",")) {
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(devSn).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
}
String deleteDevSns = sendAndDeleteDevSnsPair.getRight();
for (String deleteDevSn : StrUtil.split(deleteDevSns, ",")) {
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).setWhoId(workerInfo.getId()).setDeviceSn(deleteDevSn).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
}
workerInfoService.updateWorkerHkStatus(workerInfo);
}
}

View File

@ -111,7 +111,8 @@ public class UfaceDevController {
@ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "enterpriseId", value = "所属企业", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "personType", value = "人员类型 1、劳务人员 2、管理人员", paramType = "body", required = false, dataType = "String"),
@ApiImplicitParam(name = "userId", value = "人员ID", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "userId", value = "通知的人员ID", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "workerIds", value = "下发的劳务人员IDs多个逗号分割", paramType = "body", required = false, dataType = "String"),
})
@PostMapping(value = "/sendBatchWokerDev")
public Result< Map<String, Object>> sendBatchWokerDev(@RequestBody Map<String, Object> map) {

View File

@ -177,6 +177,12 @@ public interface WorkerInfoMapper extends BaseMapper<WorkerInfo> {
List<WorkerInfo> selectAllWorkerInfoList(@Param("projectSn") String projectSn);
/**
* 查询下发的劳务人员列表
*
* @param ma
* @return
*/
List<WorkerInfo> selectProjectWorkerInfoList(Map<String, Object> ma);
String selectCarDriverNameByWorkerId(@Param("driverWorkerId") String driverWorkerId);

View File

@ -1449,6 +1449,9 @@
<if test="personType != null and personType != ''">
and person_type = #{personType}
</if>
<if test="workerIds != null and workerIds != ''">
and find_in_set(id, #{workerIds})
</if>
</select>
<select id="selectCarDriverNameByWorkerId" resultType="java.lang.String">
select GROUP_CONCAT(worker_name)

View File

@ -160,4 +160,6 @@ public interface IWorkerInfoService extends IService<WorkerInfo> {
void deleteWorkerForHikvision(String uniqueId, WorkerInfo workerInfo);
void editWorkerForHikvision(WorkerInfo workerInfo);
void editWorkerAndAuthForHikvision(WorkerInfo workerInfo, WorkerInfo oldWorkerInfo);
}

View File

@ -209,7 +209,7 @@ public class UfaceDevServiceImpl extends ServiceImpl<UfaceDevMapper, UfaceDev> i
if (list == null || list.size() == 0) {
throw new OpenAlertException("请先添加设备");
}
asyncWorker.sendBatchWokerDev(map, tempProjectUfaceConfig, list);
asyncWorker.sendBatchWokerDevAsync(map, tempProjectUfaceConfig, list);
} else {
throw new OpenAlertException("项目配置不下发设备或未配置参数");
}

View File

@ -387,8 +387,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
workerInfoMapper.insert(workerInfo);
ThreadLocalUtil.addInKey("now", new Date());
//同步海康
addWorkerForHikvision(workerInfo);
projectUfaceConfigService.addWorkerInfo(workerInfo);
this.addWorkerAndAuthForHikvision(workerInfo);
//上传住建
asyncWorker.sendWorkerInfoById(workerInfo);
asyncWorker.sendAndOrEditWorkerInfo(workerInfo);
@ -453,9 +452,8 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
workerInfoMapper.updateById(workerInfo);
//同步海康
editWorkerForHikvision(workerInfo);
this.editWorkerAndAuthForHikvision(workerInfo, oldWorkerInfo);
projectUfaceConfigService.updateWorkerInfo(workerInfo, oldWorkerInfo);
//上传住建
//housingDataCall.sendUpdateWork(workerInfo.getProjectSn(),workerInfo.getId());
//上传住建
@ -470,11 +468,16 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
govtOpenApiService.workerInfoAddSync(workerInfo);
}
asyncJiLianDa.saveWorkerInfo(workerInfo);
resetHkStatus(workerInfo);
updateWorkerHkStatus(workerInfo);
return workerInfo;
}
public void resetHkStatus(WorkerInfo workerInfo) {
/**
* 更新劳务人员总状态
*
* @param workerInfo
*/
public void updateWorkerHkStatus(WorkerInfo workerInfo) {
hikvisionCall.updateTotalStatus(workerInfo.getProjectSn(), workerInfo.getId(), 1);
}
@ -1631,7 +1634,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
Result<String> result = new Result<String>();
StringBuilder existName = new StringBuilder("");
String ufaceId = null;
Date now = new Date();
try {
InputStream is = excelFile.getInputStream();
List<Map<String, String>> list = ExcelUtils.jxlExlToList(is, 0);
@ -1762,7 +1764,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
workerInfo.setId(oldWorkerInfo.getId());
workerInfoMapper.updateById(workerInfo);
//同步海康
editWorkerForHikvision(workerInfo);
this.editWorkerForHikvision(workerInfo);
} else {
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
workerInfo.setPersonSn(uuid);
@ -1770,7 +1772,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
workerInfo.setAttendanceNumber(workerInfo.getIdCard());
workerInfoMapper.insert(workerInfo);
//同步海康
addWorkerForHikvision(workerInfo);
this.addWorkerForHikvision(workerInfo);
}
asyncJiLianDa.saveWorkerInfo(workerInfo);
}
@ -2231,11 +2233,19 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
workerInfoMapper.updateScore(map);
WorkerInfo workerInfo = baseMapper.selectById(id);
if (notNeedSend(old, workerInfo)) return;
projectUfaceConfigService.editHkSyncRecordAndResetStatusForDev(workerInfo);
projectUfaceConfigService.updateWorkerInfo(workerInfo, workerInfo);
resetHkStatus(workerInfo);
updateWorkerHkStatus(workerInfo);
}
private boolean notNeedSend(WorkerInfo old, WorkerInfo newWi) {
/**
* 是否需要下发根据分数
*
* @param old
* @param newWi
* @return
*/
public boolean notNeedSend(WorkerInfo old, WorkerInfo newWi) {
boolean bothRed = NumberUtils.lt(old.getSafeScore(), 80D) && NumberUtils.lt(newWi.getSafeScore(), 80D);
boolean bothNotRed = !NumberUtils.lt(old.getSafeScore(), 80D) && !NumberUtils.lt(newWi.getSafeScore(), 80D);
if ((bothRed || bothNotRed) && Objects.equals(old.getSendSuccessStatus(), 1)) {
@ -2253,6 +2263,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
updateById(workerInfo);
if (Objects.equals(workerInfo.getSafeScore(), 100D)) {
old.setSafeScore(100D);
projectUfaceConfigService.editHkSyncRecordAndResetStatusForDev(workerInfo);
projectUfaceConfigService.updateWorkerInfo(old, old);
}
}
@ -2362,36 +2373,52 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
return number.get();
}
public void addWorkerAndAuthForHikvision(WorkerInfo workerInfo) {
this.addHkSyncRecordIf(workerInfo, 1);
projectUfaceConfigService.addHkSyncRecordAndResetStatusForDev(workerInfo);
asyncHikvision.addWorkerAndAuthAsync(workerInfo, true, true);
}
@Override
public void addWorkerForHikvision(WorkerInfo workerInfo) {
if (!addHkSyncRecordIf(workerInfo, 1)) return;
asyncHikvision.addWorkerAsync(workerInfo, true, true);
}
/**
* 添加同步记录如果是海康
*
* @param workerInfo
* @param operate
* @return
*/
public boolean addHkSyncRecordIf(WorkerInfo workerInfo, int operate) {
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
return false;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(1).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.addWorkerForHikvisionAsync(workerInfo, true, true);
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(operate).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(operate).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
return true;
}
@Override
public void deleteWorkerForHikvision(String uniqueId, WorkerInfo workerInfo) {
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(3).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(3).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
if (!addHkSyncRecordIf(workerInfo, 3)) return;
asyncHikvision.deleteWorkerForHikvisionAsync(uniqueId, workerInfo);
}
@Override
public void editWorkerForHikvision(WorkerInfo workerInfo) {
boolean hikvisionConfig = projectUfaceConfigService.isHikvisionConfig(workerInfo.getProjectSn());
if (!hikvisionConfig) {
return;
}
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(2).setWhoId(workerInfo.getId()).setBigType(1).setCreateDate(getSyncTimeWithInitIfAbsent(1, workerInfo.getId())));
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, true, true);
if (!addHkSyncRecordIf(workerInfo, 2)) return;
asyncHikvision.editWorkerAsync(workerInfo, true, true);
}
@Override
public void editWorkerAndAuthForHikvision(WorkerInfo workerInfo, WorkerInfo oldWorkerInfo) {
this.addHkSyncRecordIf(workerInfo, 2);
projectUfaceConfigService.editHkSyncRecordAndResetStatusForDev(workerInfo);
asyncHikvision.editWorkerAndAuthAsync(workerInfo, true, true);
}
}

View File

@ -300,7 +300,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
//查询id是否存在平台存在就更新不存在就删除
if (workerInfo != null) {
//同步海康
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
asyncHikvision.editWorkerAsync(workerInfo, isWorker, !isWorker);
} else {
workerInfo = new WorkerInfo();
workerInfo.setWorkerName(data.getWorkerName());
@ -316,10 +316,10 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
JSONArray list = HikvisionUtil.getJSONObjectData(rtJo).getJSONArray("list");
if (CollUtil.isEmpty(list)) {
//新增
asyncHikvision.addWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
asyncHikvision.addWorkerAsync(workerInfo, isWorker, !isWorker);
} else {
//更新
asyncHikvision.editWorkerForHikvisionAsync(workerInfo, isWorker, !isWorker);
asyncHikvision.editWorkerAsync(workerInfo, isWorker, !isWorker);
}
} else {
log.error("校验数据同步海康失败,失败原因:{}", rtJo.toJSONString());

View File

@ -15,7 +15,9 @@ import com.zhgd.xmgl.modules.car.mapper.CarInfoMapper;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.UfaceDevMapper;
import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
@ -57,6 +59,8 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl<XzHikvisionSyncMappe
private WorkerInfoMapper workerInfoMapper;
@Autowired
private ProjectMapper projectMapper;
@Autowired
private UfaceDevMapper ufaceDevMapper;
public static void main(String[] args) {
Date val = new Date();
@ -203,8 +207,9 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl<XzHikvisionSyncMappe
} else {
//人员
WorkerInfo workerInfo = workerInfoMapper.selectById(whoId);
String projectSn = workerInfo.getProjectSn();
Project p = projectMapper.selectOne(new LambdaQueryWrapper<Project>()
.eq(Project::getProjectSn, workerInfo.getProjectSn())
.eq(Project::getProjectSn, projectSn)
.eq(Project::getSyncHikvision, 1)
);
if (p == null) {
@ -212,26 +217,25 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl<XzHikvisionSyncMappe
}
if (xzHikvisionSync.getType() == 1) {
if (xzHikvisionSync.getOperate() == 1) {
asyncHikvision.addWorkerForHikvision(workerInfo, true, true);
asyncHikvision.addWorker(workerInfo, true, true);
} else if (xzHikvisionSync.getOperate() == 2) {
asyncHikvision.editWorkerForHikvision(workerInfo, true, true);
asyncHikvision.editWorker(workerInfo, true, true);
} else if (xzHikvisionSync.getOperate() == 3) {
asyncHikvision.deleteWorkerForHikvision(String.valueOf(workerInfo.getId()), workerInfo);
}
} else if (xzHikvisionSync.getType() == 2) {
if (xzHikvisionSync.getOperate() == 1) {
asyncHikvision.addWorkerForHikvision(workerInfo, false, true);
asyncHikvision.addWorker(workerInfo, false, true);
} else if (xzHikvisionSync.getOperate() == 2) {
asyncHikvision.editWorkerForHikvision(workerInfo, false, true);
asyncHikvision.editWorker(workerInfo, false, true);
} else if (xzHikvisionSync.getOperate() == 3) {
asyncHikvision.deleteWorkerForHikvision(String.valueOf(workerInfo.getId()), workerInfo);
}
} else if (xzHikvisionSync.getType() == 3) {
if (xzHikvisionSync.getOperate() == 1) {
asyncHikvision.addPersonAuth(workerInfo, xzHikvisionSync.getDeviceSn());
} else if (xzHikvisionSync.getOperate() == 3) {
asyncHikvision.deletePersonAuth(workerInfo, xzHikvisionSync.getDeviceSn());
}
QueryWrapper<UfaceDev> qw = new QueryWrapper<>();
qw.lambda().eq(UfaceDev::getProjectSn, projectSn);
List<UfaceDev> ufaceDevs = ufaceDevMapper.selectList(qw);
projectUfaceConfigService.buildAndSendOneWorkerAndDevForHk(ufaceDevs, workerInfo, xzHikvisionSync.getOperate(), xzHikvisionSync.getDeviceSn(), projectSn);
}
}
@ -241,5 +245,4 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl<XzHikvisionSyncMappe
}
}
}