海康下发bug修改
This commit is contained in:
parent
fc3187fa72
commit
808b64bd40
@ -363,7 +363,7 @@ public class AsyncHikvision {
|
|||||||
} else {
|
} else {
|
||||||
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), e.getMessage(), "人员下发设备提醒", "1");
|
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), e.getMessage(), "人员下发设备提醒", "1");
|
||||||
}
|
}
|
||||||
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 1, getSyncTimeWithInitIfAbsent(1, workerInfo.getId()));
|
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,7 +383,7 @@ public class AsyncHikvision {
|
|||||||
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
||||||
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), StringUtils.substring(msg, 0, msg.length() - 1), title, type);
|
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), StringUtils.substring(msg, 0, msg.length() - 1), title, type);
|
||||||
}
|
}
|
||||||
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 1, getSyncTimeWithInitIfAbsent(1, workerInfo.getId()));
|
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 1);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("海康:", e);
|
log.error("海康:", e);
|
||||||
}
|
}
|
||||||
@ -412,7 +412,7 @@ public class AsyncHikvision {
|
|||||||
} else {
|
} else {
|
||||||
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), e.getMessage(), "人员下发设备提醒", "1");
|
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), e.getMessage(), "人员下发设备提醒", "1");
|
||||||
}
|
}
|
||||||
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 3, getSyncTimeWithInitIfAbsent(1, workerInfo.getId()));
|
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 3);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +432,7 @@ public class AsyncHikvision {
|
|||||||
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) {
|
||||||
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), StringUtils.substring(msg, 0, msg.length() - 1), title, type);
|
noticeService.addUserNotice(ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class).getUserId(), StringUtils.substring(msg, 0, msg.length() - 1), title, type);
|
||||||
}
|
}
|
||||||
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 3, getSyncTimeWithInitIfAbsent(1, workerInfo.getId()));
|
hikvisionCall.updateAllFailStatusIfNullForAuth(workerInfo.getProjectSn(), workerInfo.getId(), 1, 3);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("海康:", e);
|
log.error("海康:", e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -67,30 +67,31 @@ public class AsyncWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendBatchWokerDev(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> devList) {
|
|
||||||
sendBatchWokerDevAsync(map, projectUfaceConfig, devList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量数据发送任务
|
* 批量数据发送任务
|
||||||
*
|
*
|
||||||
* @param
|
* @param
|
||||||
*/
|
*/
|
||||||
@Async("sendWorkerExecutor")
|
@Async("sendWorkerExecutor")
|
||||||
public void sendBatchWokerDevAsync(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> devList) {
|
public void sendBatchWokerDevAsync(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList) {
|
||||||
try {
|
try {
|
||||||
Long userId = MapUtils.getLong(map, "userId");
|
Long userId = MapUtils.getLong(map, "userId");
|
||||||
List<WorkerInfo> list = workerInfoMapper.selectProjectWorkerInfoList(map);
|
List<WorkerInfo> workerList = workerInfoMapper.selectProjectWorkerInfoList(map);
|
||||||
if (list.size() > 0) {
|
if (workerList.size() > 0) {
|
||||||
for (WorkerInfo info : list) {
|
if (projectUfaceConfig.getSupplierType() == 9) {
|
||||||
try {
|
//isc下发
|
||||||
info.setNoticeUserId(userId);
|
projectUfaceConfigService.sendBatchWorkerInfo(map, projectUfaceConfig, allDevList, workerList);
|
||||||
projectUfaceConfigService.sendBatchWorkerInfo(info, projectUfaceConfig, devList);
|
} else {
|
||||||
workerInfoService.resetHkStatus(info);
|
for (WorkerInfo info : workerList) {
|
||||||
} catch (Exception e) {
|
try {
|
||||||
log.error("下发人员异常,人员名称:{}", info.getWorkerName() + "," + e.getMessage());
|
info.setNoticeUserId(userId);
|
||||||
noticeFail(info.getWorkerName(), userId, e);
|
projectUfaceConfigService.sendBatchWorkerInfo(info, projectUfaceConfig, allDevList);
|
||||||
log.error("error:", e);
|
workerInfoService.resetHkStatus(info);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("下发人员异常,人员名称:{}", info.getWorkerName() + "," + e.getMessage());
|
||||||
|
noticeFail(info.getWorkerName(), userId, e);
|
||||||
|
log.error("error:", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +99,7 @@ public class AsyncWorker {
|
|||||||
java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
Notice notice = new Notice();
|
Notice notice = new Notice();
|
||||||
notice.setAccountId(userId);
|
notice.setAccountId(userId);
|
||||||
notice.setMsg("已经完成批量向设备下发" + list.size() + "个人");
|
notice.setMsg("已经完成批量向设备下发" + workerList.size() + "个人");
|
||||||
notice.setTitle("人员批量下发设备提醒");
|
notice.setTitle("人员批量下发设备提醒");
|
||||||
notice.setSendTime(format1.format(new Date()));
|
notice.setSendTime(format1.format(new Date()));
|
||||||
notice.setType("1");
|
notice.setType("1");
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.zhgd.jeecg.common.api.vo.Result;
|
import com.zhgd.jeecg.common.api.vo.Result;
|
||||||
|
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||||
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
import com.zhgd.jeecg.common.execption.OpenPromptException;
|
||||||
import com.zhgd.redis.lock.RedisRepository;
|
import com.zhgd.redis.lock.RedisRepository;
|
||||||
import com.zhgd.xmgl.async.AsyncAiAnalyse;
|
import com.zhgd.xmgl.async.AsyncAiAnalyse;
|
||||||
@ -1136,7 +1137,13 @@ public class HikvisionCall {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateAllFailStatusIfNullForAuth(String projectSn, Long whoId, Integer bigType, Integer operate, Date now) {
|
public void updateAllFailStatusIfNullForAuth(String projectSn, List<WorkerInfo> workerList, Integer bigType, Integer operate) {
|
||||||
|
for (WorkerInfo workerInfo : workerList) {
|
||||||
|
updateAllFailStatusIfNullForAuth(projectSn, workerInfo.getId(), bigType, operate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateAllFailStatusIfNullForAuth(String projectSn, Long whoId, Integer bigType, Integer operate) {
|
||||||
xzHikvisionSyncMapper.update(null, new LambdaUpdateWrapper<XzHikvisionSync>()
|
xzHikvisionSyncMapper.update(null, new LambdaUpdateWrapper<XzHikvisionSync>()
|
||||||
.set(XzHikvisionSync::getIsSuccess, 0)
|
.set(XzHikvisionSync::getIsSuccess, 0)
|
||||||
.isNull(XzHikvisionSync::getIsSuccess)
|
.isNull(XzHikvisionSync::getIsSuccess)
|
||||||
@ -1144,7 +1151,6 @@ public class HikvisionCall {
|
|||||||
.eq(XzHikvisionSync::getOperate, operate)
|
.eq(XzHikvisionSync::getOperate, operate)
|
||||||
.eq(XzHikvisionSync::getProjectSn, projectSn)
|
.eq(XzHikvisionSync::getProjectSn, projectSn)
|
||||||
.eq(XzHikvisionSync::getWhoId, whoId)
|
.eq(XzHikvisionSync::getWhoId, whoId)
|
||||||
.eq(XzHikvisionSync::getCreateDate, now)
|
|
||||||
);
|
);
|
||||||
updateTotalStatus(projectSn, whoId, bigType);
|
updateTotalStatus(projectSn, whoId, bigType);
|
||||||
}
|
}
|
||||||
@ -2138,17 +2144,11 @@ public class HikvisionCall {
|
|||||||
" }\n" +
|
" }\n" +
|
||||||
" ],\n" +
|
" ],\n" +
|
||||||
"}";
|
"}";
|
||||||
JSONObject rs = HikvisionUtil.doorSearchV2(project, JSONObject.parseObject(json));
|
JSONObject rs = HikvisionUtil.getDoorsV2(project, JSONObject.parseObject(json));
|
||||||
if (HikvisionUtil.isFail(rs)) {
|
|
||||||
log.error(workerInfo.getWorkerName() + "," + dev.getDevName() + " fail:" + rs.toJSONString() + ",");
|
|
||||||
failSb.append(workerInfo.getWorkerName() + "," + dev.getDevName() + ",失败原因:下发异常;");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
JSONObject jo = HikvisionUtil.getJSONObjectData(rs);
|
JSONObject jo = HikvisionUtil.getJSONObjectData(rs);
|
||||||
JSONArray listJa = jo.getJSONArray("list");
|
JSONArray listJa = jo.getJSONArray("list");
|
||||||
if (CollUtil.isEmpty(listJa)) {
|
if (CollUtil.isEmpty(listJa)) {
|
||||||
failSb.append(workerInfo.getWorkerName() + "," + dev.getDevName() + ",失败信息:isc不存在该设备;");
|
throw new OpenAlertException("失败信息:isc不存在该设备");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
String channelNo = listJa.getJSONObject(0).getString("channelNo");
|
String channelNo = listJa.getJSONObject(0).getString("channelNo");
|
||||||
String sdStr = "{\n" +
|
String sdStr = "{\n" +
|
||||||
@ -2194,5 +2194,4 @@ public class HikvisionCall {
|
|||||||
private void updateSucForUpdatePersonAuth(WorkerInfo workerInfo, String devSn, int i) {
|
private void updateSucForUpdatePersonAuth(WorkerInfo workerInfo, String devSn, int i) {
|
||||||
updateSuccessStatus(workerInfo.getProjectSn(), workerInfo.getId(), 3, i == 0 ? 1 : 3, devSn);
|
updateSuccessStatus(workerInfo.getProjectSn(), workerInfo.getId(), 3, i == 0 ? 1 : 3, devSn);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,7 +44,7 @@ public class AsyncConfig {
|
|||||||
@Primary
|
@Primary
|
||||||
@Bean("taskExecutor")
|
@Bean("taskExecutor")
|
||||||
public ThreadPoolTaskExecutor taskExecutor() {
|
public ThreadPoolTaskExecutor taskExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -69,7 +69,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("doubleCarbonExecutor")
|
@Bean("doubleCarbonExecutor")
|
||||||
public ThreadPoolTaskExecutor doubleCarbonExecutor() {
|
public ThreadPoolTaskExecutor doubleCarbonExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -88,7 +88,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("countAttendanceExecutor")
|
@Bean("countAttendanceExecutor")
|
||||||
public ThreadPoolTaskExecutor attendanceExecutor() {
|
public ThreadPoolTaskExecutor attendanceExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -107,7 +107,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("sendAttendanceExecutor")
|
@Bean("sendAttendanceExecutor")
|
||||||
public ThreadPoolTaskExecutor sendAttendanceExecutor() {
|
public ThreadPoolTaskExecutor sendAttendanceExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -126,7 +126,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("sendWorkerExecutor")
|
@Bean("sendWorkerExecutor")
|
||||||
public ThreadPoolTaskExecutor sendWorkerExecutor() {
|
public ThreadPoolTaskExecutor sendWorkerExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -145,7 +145,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("sendExitWorkerExecutor")
|
@Bean("sendExitWorkerExecutor")
|
||||||
public ThreadPoolTaskExecutor sendExitWorkerExecutor() {
|
public ThreadPoolTaskExecutor sendExitWorkerExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -164,7 +164,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("environmentNoiseDataExecutor")
|
@Bean("environmentNoiseDataExecutor")
|
||||||
public ThreadPoolTaskExecutor sendEnvironmentNoiseDataExecutor() {
|
public ThreadPoolTaskExecutor sendEnvironmentNoiseDataExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -183,7 +183,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("electricalExecutor")
|
@Bean("electricalExecutor")
|
||||||
public ThreadPoolTaskExecutor sendElectricalExecutor() {
|
public ThreadPoolTaskExecutor sendElectricalExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -202,7 +202,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("towerExecutor")
|
@Bean("towerExecutor")
|
||||||
public ThreadPoolTaskExecutor sendTowerExecutor() {
|
public ThreadPoolTaskExecutor sendTowerExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -221,7 +221,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("lifterExecutor")
|
@Bean("lifterExecutor")
|
||||||
public ThreadPoolTaskExecutor sendLifterExecutor() {
|
public ThreadPoolTaskExecutor sendLifterExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -240,7 +240,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("devExcavationExecutor")
|
@Bean("devExcavationExecutor")
|
||||||
public ThreadPoolTaskExecutor sendDevExcavationEExecutor() {
|
public ThreadPoolTaskExecutor sendDevExcavationEExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -259,7 +259,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("gantryCraneExecutor")
|
@Bean("gantryCraneExecutor")
|
||||||
public ThreadPoolTaskExecutor sendGantryCraneExecutor() {
|
public ThreadPoolTaskExecutor sendGantryCraneExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -278,7 +278,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("fileExecutor")
|
@Bean("fileExecutor")
|
||||||
public ThreadPoolTaskExecutor fileExecutor() {
|
public ThreadPoolTaskExecutor fileExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -297,7 +297,7 @@ public class AsyncConfig {
|
|||||||
|
|
||||||
@Bean("asyncExecutor")
|
@Bean("asyncExecutor")
|
||||||
public ThreadPoolTaskExecutor asyncExecutor() {
|
public ThreadPoolTaskExecutor asyncExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
@ -317,7 +317,7 @@ public class AsyncConfig {
|
|||||||
@Primary
|
@Primary
|
||||||
@Bean("bimExecutor")
|
@Bean("bimExecutor")
|
||||||
public ThreadPoolTaskExecutor bimExecutor() {
|
public ThreadPoolTaskExecutor bimExecutor() {
|
||||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor();
|
||||||
/** 核心线程数(默认线程数) */
|
/** 核心线程数(默认线程数) */
|
||||||
executor.setCorePoolSize(corePoolSize);
|
executor.setCorePoolSize(corePoolSize);
|
||||||
/** 最大线程数 */
|
/** 最大线程数 */
|
||||||
|
|||||||
@ -25,6 +25,7 @@ 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;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|||||||
@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
|
import com.zhgd.xmgl.modules.worker.entity.UfaceDev;
|
||||||
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
|
import com.zhgd.xmgl.modules.worker.entity.WorkerInfo;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 项目对应的人脸设备配置
|
* @Description: 项目对应的人脸设备配置
|
||||||
@ -34,5 +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 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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,12 +2,18 @@ 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.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;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.constant.Cts;
|
||||||
|
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;
|
||||||
@ -19,9 +25,14 @@ 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.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;
|
||||||
@ -29,6 +40,7 @@ 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;
|
||||||
@ -43,10 +55,17 @@ import static com.zhgd.xmgl.async.AsyncHikvision.getSyncTimeWithInitIfAbsent;
|
|||||||
@Slf4j
|
@Slf4j
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfigMapper, ProjectUfaceConfig> implements IProjectUfaceConfigService {
|
public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfigMapper, ProjectUfaceConfig> implements IProjectUfaceConfigService {
|
||||||
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
XzHikvisionSyncMapper xzHikvisionSyncMapper;
|
XzHikvisionSyncMapper xzHikvisionSyncMapper;
|
||||||
@Lazy
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
|
ProjectServiceImpl projectService;
|
||||||
|
@Autowired
|
||||||
|
@Lazy
|
||||||
|
HikvisionCall hikvisionCall;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
private WorkerInfoServiceImpl workerInfoService;
|
private WorkerInfoServiceImpl workerInfoService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectUfaceConfigMapper projectUfaceConfigMapper;
|
private ProjectUfaceConfigMapper projectUfaceConfigMapper;
|
||||||
@ -64,6 +83,9 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
private String serverUrl;
|
private String serverUrl;
|
||||||
@Value("${jxj.dev.image.type}")
|
@Value("${jxj.dev.image.type}")
|
||||||
private Integer jxjDevImageType;
|
private Integer jxjDevImageType;
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
|
private INoticeService noticeService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void editProjectUfaceConfig(ProjectUfaceConfig projectUfaceConfig) {
|
public void editProjectUfaceConfig(ProjectUfaceConfig projectUfaceConfig) {
|
||||||
@ -393,79 +415,87 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public Pair<String, String> getSendBatchDevSnsAndDevIds(WorkerInfo workerInfo, List<UfaceDev> allDevList) {
|
||||||
public void sendBatchWorkerInfo(WorkerInfo workerInfo, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> list) {
|
String rtDevSn = null;
|
||||||
|
String rtDevId = null;
|
||||||
if ("0".equals(workerInfo.getUfaceDevId())) {
|
if ("0".equals(workerInfo.getUfaceDevId())) {
|
||||||
workerInfo.setUfaceDevId(null);
|
workerInfo.setUfaceDevId(null);
|
||||||
}
|
}
|
||||||
StringBuilder devBuilder = new StringBuilder();
|
if (Objects.equals(workerInfo.getDevType(), 1)) {
|
||||||
StringBuilder devIdBuilder = new StringBuilder();
|
StringBuilder devBuilder = new StringBuilder();
|
||||||
if (StringUtils.isNotEmpty(workerInfo.getUfaceDevId())) {
|
StringBuilder devIdBuilder = new StringBuilder();
|
||||||
String[] devId = workerInfo.getUfaceDevId().split(",");
|
if (StringUtils.isNotEmpty(workerInfo.getUfaceDevId())) {
|
||||||
for (UfaceDev dev : list) {
|
String[] devId = workerInfo.getUfaceDevId().split(",");
|
||||||
for (String id : devId) {
|
for (UfaceDev dev : allDevList) {
|
||||||
if (id.equals(dev.getId().toString())) {
|
for (String id : devId) {
|
||||||
if (devBuilder.length() > 0) {
|
if (id.equals(dev.getId().toString())) {
|
||||||
devBuilder.append(",");
|
if (devBuilder.length() > 0) {
|
||||||
|
devBuilder.append(",");
|
||||||
|
}
|
||||||
|
if (devIdBuilder.length() > 0) {
|
||||||
|
devIdBuilder.append(",");
|
||||||
|
}
|
||||||
|
devBuilder.append(dev.getDevSn());
|
||||||
|
devIdBuilder.append(dev.getDeviceId());
|
||||||
}
|
}
|
||||||
if (devIdBuilder.length() > 0) {
|
}
|
||||||
devIdBuilder.append(",");
|
}
|
||||||
|
} else {
|
||||||
|
for (UfaceDev dev : allDevList) {
|
||||||
|
if (devBuilder.length() > 0) {
|
||||||
|
devBuilder.append(",");
|
||||||
|
}
|
||||||
|
if (devIdBuilder.length() > 0) {
|
||||||
|
devIdBuilder.append(",");
|
||||||
|
}
|
||||||
|
devBuilder.append(dev.getDevSn());
|
||||||
|
devIdBuilder.append(dev.getDeviceId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rtDevSn = devBuilder.toString();
|
||||||
|
rtDevId = devIdBuilder.toString();
|
||||||
|
} else {
|
||||||
|
//设备分组情况
|
||||||
|
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
|
||||||
|
if (StringUtils.isNotBlank(ufaceDevGroupId)) {
|
||||||
|
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.isNotEmpty(ufaceIds)) {
|
||||||
|
ufaceIds.stream().distinct();
|
||||||
|
Map<String, Object> param = new HashMap<>();
|
||||||
|
param.put("projectSn", workerInfo.getProjectSn());
|
||||||
|
param.put("devIds", StringUtils.join(ufaceIds, ","));
|
||||||
|
param.put("accountType", 2);
|
||||||
|
List<UfaceDev> list1 = ufaceDevMapper.selectUserUfaceDevList(param);
|
||||||
|
if (CollUtil.isNotEmpty(list1)) {
|
||||||
|
StringBuilder devBuilder1 = new StringBuilder();
|
||||||
|
StringBuilder devIdBuilder1 = new StringBuilder();
|
||||||
|
for (UfaceDev dev : list1) {
|
||||||
|
if (devBuilder1.length() > 0) {
|
||||||
|
devBuilder1.append(",");
|
||||||
|
}
|
||||||
|
if (devIdBuilder1.length() > 0) {
|
||||||
|
devIdBuilder1.append(",");
|
||||||
|
}
|
||||||
|
devBuilder1.append(dev.getDevSn());
|
||||||
|
devIdBuilder1.append(dev.getDeviceId());
|
||||||
}
|
}
|
||||||
devBuilder.append(dev.getDevSn());
|
rtDevId = devIdBuilder1.toString();
|
||||||
devIdBuilder.append(dev.getDeviceId());
|
rtDevSn = devBuilder1.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
for (UfaceDev dev : list) {
|
|
||||||
if (devBuilder.length() > 0) {
|
|
||||||
devBuilder.append(",");
|
|
||||||
}
|
|
||||||
if (devIdBuilder.length() > 0) {
|
|
||||||
devIdBuilder.append(",");
|
|
||||||
}
|
|
||||||
devBuilder.append(dev.getDevSn());
|
|
||||||
devIdBuilder.append(dev.getDeviceId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
String devSn = devBuilder.toString();
|
log.info("准备下发人员名称:{},devSn:{},devId:{}", workerInfo.getWorkerName(), rtDevSn, rtDevId);
|
||||||
String devId = devIdBuilder.toString();
|
return new ImmutablePair<>(rtDevSn, rtDevId);
|
||||||
log.info("准备下发人员名称:{},devSn:{},devId:{}", workerInfo.getWorkerName(), devSn, devId);
|
}
|
||||||
if (Objects.equals(workerInfo.getDevType(), 1)) {
|
|
||||||
sendDev(projectUfaceConfig, workerInfo, devSn, devId);
|
@Override
|
||||||
} else if (Objects.equals(workerInfo.getDevType(), 2)) {
|
public void sendBatchWorkerInfo(WorkerInfo workerInfo, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList) {
|
||||||
//设备分组情况!
|
Pair<String, String> devSnsAndDevIdsPair = getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
|
||||||
String ufaceDevGroupId = workerInfo.getUfaceDevGroupId();
|
String right = devSnsAndDevIdsPair.getRight();
|
||||||
if (StringUtils.isEmpty(ufaceDevGroupId)) {
|
if (right != null) {
|
||||||
return;
|
sendDev(projectUfaceConfig, workerInfo, devSnsAndDevIdsPair.getLeft(), right);
|
||||||
}
|
|
||||||
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();
|
|
||||||
Map<String, Object> param = new HashMap<>();
|
|
||||||
param.put("projectSn", workerInfo.getProjectSn());
|
|
||||||
param.put("devIds", StringUtils.join(ufaceIds, ","));
|
|
||||||
param.put("accountType", 2);
|
|
||||||
List<UfaceDev> list1 = ufaceDevMapper.selectUserUfaceDevList(param);
|
|
||||||
if (CollUtil.isEmpty(list1)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
StringBuilder devBuilder1 = new StringBuilder();
|
|
||||||
StringBuilder devIdBuilder1 = new StringBuilder();
|
|
||||||
for (UfaceDev dev : list1) {
|
|
||||||
if (devBuilder1.length() > 0) {
|
|
||||||
devBuilder1.append(",");
|
|
||||||
}
|
|
||||||
if (devIdBuilder1.length() > 0) {
|
|
||||||
devIdBuilder1.append(",");
|
|
||||||
}
|
|
||||||
devBuilder1.append(dev.getDevSn());
|
|
||||||
devIdBuilder1.append(dev.getDeviceId());
|
|
||||||
}
|
|
||||||
sendDev(projectUfaceConfig, workerInfo, devBuilder1.toString(), devIdBuilder1.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -514,16 +544,22 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addPersonAuth(WorkerInfo workerInfo, String devSn) {
|
public void addPersonAuth(WorkerInfo workerInfo, String devSns) {
|
||||||
if (StringUtils.isBlank(devSn)) {
|
if (StringUtils.isBlank(devSns)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
addHikvisionSyncForDev(workerInfo, devSns);
|
||||||
|
asyncHikvision.addPersonAuthAsync(workerInfo, devSns);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addHikvisionSyncForDev(WorkerInfo workerInfo, String devSns) {
|
||||||
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
|
getSyncTimeWithInitIfAbsent(1, workerInfo.getId());
|
||||||
String[] devSnArr = StringUtils.split(devSn, ",");
|
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())));
|
||||||
}
|
}
|
||||||
asyncHikvision.addPersonAuthAsync(workerInfo, devSn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -545,4 +581,134 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
|
|||||||
asyncHikvision.deletePersonAuthAsync(workerInfo, devSns);
|
asyncHikvision.deletePersonAuthAsync(workerInfo, devSns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendBatchWorkerInfo(Map<String, Object> map, ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList) {
|
||||||
|
//构建workerAndDevSnList
|
||||||
|
ArrayList<JSONObject> workerAndDevSnList = new ArrayList<>();
|
||||||
|
for (WorkerInfo workerInfo : workerList) {
|
||||||
|
Pair<String, String> devSnsAndDevIdsPair = this.getSendBatchDevSnsAndDevIds(workerInfo, allDevList);
|
||||||
|
if (devSnsAndDevIdsPair.getRight() != null) {
|
||||||
|
String devSns = devSnsAndDevIdsPair.getLeft();
|
||||||
|
this.addHikvisionSyncForDev(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);
|
||||||
|
workerAndDevSnList.add(jo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(workerAndDevSnList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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(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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,7 @@ public class UfaceDevServiceImpl extends ServiceImpl<UfaceDevMapper, UfaceDev> i
|
|||||||
@Lazy
|
@Lazy
|
||||||
@Autowired
|
@Autowired
|
||||||
private WorkerInfoServiceImpl workerInfoService;
|
private WorkerInfoServiceImpl workerInfoService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IUserDevAuthorityService userDevAuthorityService;
|
private IUserDevAuthorityService userDevAuthorityService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private UfaceDevMapper ufaceDevMapper;
|
private UfaceDevMapper ufaceDevMapper;
|
||||||
@ -209,11 +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("请先添加设备");
|
||||||
}
|
}
|
||||||
if (tempProjectUfaceConfig.getSupplierType() == 9) {
|
asyncWorker.sendBatchWokerDevAsync(map, tempProjectUfaceConfig, list);
|
||||||
asyncWorker.sendBatchWokerDev(map, tempProjectUfaceConfig, list);
|
|
||||||
} else {
|
|
||||||
asyncWorker.sendBatchWokerDevAsync(map, tempProjectUfaceConfig, list);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new OpenAlertException("项目配置不下发设备或未配置参数");
|
throw new OpenAlertException("项目配置不下发设备或未配置参数");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,7 +89,7 @@ public class HikvisionUtil {
|
|||||||
return rsJo.getJSONObject("data");
|
return rsJo.getJSONObject("data");
|
||||||
} else {
|
} else {
|
||||||
log.error("海康返回错误码:{}", rsJo.toJSONString());
|
log.error("海康返回错误码:{}", rsJo.toJSONString());
|
||||||
throw new OpenAlertException("海康返回错误码");
|
throw new OpenAlertException("下发异常:海康返回错误码");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,9 +151,10 @@ public class HikvisionUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void addPageParamIfAbsent(JSONObject param) {
|
public static JSONObject addPageParamIfAbsent(JSONObject param) {
|
||||||
param.putIfAbsent("pageNo", 1);
|
param.putIfAbsent("pageNo", 1);
|
||||||
param.putIfAbsent("pageSize", 1000);
|
param.putIfAbsent("pageSize", 1000);
|
||||||
|
return param;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -615,7 +616,7 @@ public class HikvisionUtil {
|
|||||||
* @param param
|
* @param param
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static JSONObject doorSearchV2(Project project, JSONObject param) throws Exception {
|
public static JSONObject getDoorsV2(Project project, JSONObject param) throws Exception {
|
||||||
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -634,17 +635,79 @@ public class HikvisionUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按人员详情与设备下发
|
* 添加权限配置
|
||||||
*
|
*
|
||||||
* @param project
|
* @param project
|
||||||
* @param param
|
* @param param
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static JSONObject downloadAuthDiy(Project project, JSONObject param) throws Exception {
|
public static JSONObject addAuth(Project project, JSONObject param) throws Exception {
|
||||||
final String ARTEMIS_PATH = "/artemis";
|
final String ARTEMIS_PATH = "/artemis";
|
||||||
final String path = ARTEMIS_PATH + "/api/acps/v1/authDownload/special/person/diy";
|
final String path = ARTEMIS_PATH + "/api/acps/v1/auth_config/add";
|
||||||
String host = "https://" + project.getArtemisConfigHost();
|
String host = "https://" + project.getArtemisConfigHost();
|
||||||
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除权限配置
|
||||||
|
*
|
||||||
|
* @param project
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static JSONObject deleteAuth(Project project, JSONObject param) throws Exception {
|
||||||
|
final String ARTEMIS_PATH = "/artemis";
|
||||||
|
final String path = ARTEMIS_PATH + "/api/acps/v1/auth_config/delete";
|
||||||
|
String host = "https://" + project.getArtemisConfigHost();
|
||||||
|
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据出入权限配置快捷下载
|
||||||
|
*
|
||||||
|
* @param project
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static JSONObject downloadAuth(Project project, JSONObject param) throws Exception {
|
||||||
|
final String ARTEMIS_PATH = "/artemis";
|
||||||
|
final String path = ARTEMIS_PATH + "/api/acps/v1/authDownload/configuration/shortcut";
|
||||||
|
String host = "https://" + project.getArtemisConfigHost();
|
||||||
|
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询下载任务进度
|
||||||
|
*
|
||||||
|
* @param project
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static JSONObject queryDownloadProgress(Project project, JSONObject param) throws Exception {
|
||||||
|
final String ARTEMIS_PATH = "/artemis";
|
||||||
|
final String path = ARTEMIS_PATH + "/api/acps/v1/authDownload/task/progress";
|
||||||
|
String host = "https://" + project.getArtemisConfigHost();
|
||||||
|
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询权限条目列表
|
||||||
|
*
|
||||||
|
* @param project
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static JSONObject queryAuthItem(Project project, JSONObject param) throws Exception {
|
||||||
|
final String ARTEMIS_PATH = "/artemis";
|
||||||
|
final String path = ARTEMIS_PATH + "/api/acps/v1/auth_item/list/search";
|
||||||
|
String host = "https://" + project.getArtemisConfigHost();
|
||||||
|
return doPostRtObj(host, path, JSONArray.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user