From f3d4e784d2ce3127955a189621f5cdd958efad16 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Mon, 17 Jun 2024 14:30:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=B8=8B=E5=8F=91=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/async/AsyncHikvision.java | 74 +++++++++++++------ .../com/zhgd/xmgl/config/AsyncConfig.java | 29 ++++++-- .../controller/WorkerInfoController.java | 12 +++ .../worker/service/IWorkerInfoService.java | 3 + .../service/impl/WorkerInfoServiceImpl.java | 7 ++ 5 files changed, 99 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index 58485ce8c..b8dd344b6 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -567,7 +567,7 @@ public class AsyncHikvision { log.error("批量下发权限失败:", e); hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, workerList, 1, 1); hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, workerList, 1, 3); - sendExcNotice(e, workerList, null); + sendExcNotice(e, workerList, null, projectSn); } } @@ -577,8 +577,9 @@ public class AsyncHikvision { * @param e * @param workerList * @param dev + * @param projectSn */ - private void sendExcNotice(Exception e, List workerList, UfaceDev dev) { + private void sendExcNotice(Exception e, List workerList, UfaceDev dev, String projectSn) { String exc; if (HttpUtils.isTimeOut(e)) { exc = ",连接ISC网络异常"; @@ -587,7 +588,7 @@ public class AsyncHikvision { } if (CollUtil.isNotEmpty(workerList)) { List failWorkers = workerInfoService.list(Wrappers.lambdaQuery() - .eq(WorkerInfo::getProjectSn, dev.getProjectSn()) + .eq(WorkerInfo::getProjectSn, projectSn) .ne(WorkerInfo::getSendSuccessStatus, 1) .in(WorkerInfo::getId, workerList.stream().map(WorkerInfo::getId).collect(Collectors.toList())) ); @@ -604,13 +605,7 @@ public class AsyncHikvision { private ArrayList getNeedEditWorkers(List workerList, ProjectInfoExtVo project, Map workerIdMap) throws Exception { ArrayList needEditWorkers = new ArrayList<>(); - JSONObject plJo = HikvisionUtil.queryPersonList(project, new JoBuilder() - .put("personIds", StrUtil.join(",", workerList.stream().map(WorkerInfo::getId).collect(Collectors.toList()))) - .put("pageNo", 1) - .put("pageSize", 1000) - .build()); - JSONObject plDataJo = HikvisionUtil.getJSONObjectData(plJo); - JSONArray plListJa = plDataJo.getJSONArray("list"); + JSONArray plListJa = getPersonListByWorkerList(workerList, project); HashSet iscPersonIds = new HashSet<>(); for (int i = 0; i < plListJa.size(); i++) { JSONObject jo = plListJa.getJSONObject(i); @@ -630,6 +625,21 @@ public class AsyncHikvision { return needEditWorkers; } + private JSONArray getPersonListByWorkerList(List workerList, ProjectInfoExtVo project) throws Exception { + JSONArray rtJa = new JSONArray(); + for (List splitList : CollUtil.splitList(workerList, 1000)) { + JSONObject plJo = HikvisionUtil.queryPersonList(project, new JoBuilder() + .put("personIds", StrUtil.join(",", splitList.stream().map(WorkerInfo::getId).collect(Collectors.toList()))) + .put("pageNo", 1) + .put("pageSize", 1000) + .build()); + JSONObject plDataJo = HikvisionUtil.getJSONObjectData(plJo); + JSONArray plListJa = plDataJo.getJSONArray("list"); + rtJa.addAll(plListJa); + } + return rtJa; + } + /** * 一个设备批量下发人员 * @@ -641,7 +651,7 @@ public class AsyncHikvision { * @param sendNotice * @param workerList */ - @Async("workerAuthHkExecutor") + @Async("workerBeWaitHkExecutor") public Future sendBatchWorkersForOneDevAsync(Map workerIdMap, Map devSnMap, ProjectInfoExtVo project, Map devSnToIscDevSnMap, Map.Entry> devSnToJoEntry, String projectSn, boolean sendNotice, List workerList) { String devSn = devSnToJoEntry.getKey(); UfaceDev dev = devSnMap.get(devSn); @@ -654,12 +664,10 @@ public class AsyncHikvision { return null; } if (CollUtil.isNotEmpty(addAuthWorkerIds)) { - JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, addAuthWorkerIds, devSnToIscDevSnMap)); - HikvisionUtil.getJSONObjectData(aaRJo); + addAuthByWorkerList(project, devSnToIscDevSnMap, devSnToJoEntry, addAuthWorkerIds); } if (CollUtil.isNotEmpty(deleteAuthWorkerIds)) { - JSONObject aaRJo = HikvisionUtil.deleteAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, deleteAuthWorkerIds, devSnToIscDevSnMap)); - HikvisionUtil.getJSONObjectData(aaRJo); + deleteAuthByWorkerList(project, devSnToIscDevSnMap, devSnToJoEntry, deleteAuthWorkerIds); } //然后调用【根据出入权限配置快捷下载】(设备列表)(【添加权限配置】+【快捷下发】这是一个流程,你添加了几个权限,下发成功之后,就清零了) JSONObject daJo = HikvisionUtil.downloadAuth(project, getQueryDownloadProgressParam(devSnToJoEntry, devSnToIscDevSnMap)); @@ -674,9 +682,8 @@ public class AsyncHikvision { Thread.sleep(1000); } while (totalPercent != 100); //权限下发后(进度100后),用【查询权限条目列表】(人员列表,设备列表)接口去查,返回参数有权限状态,返回已下载的就是有权限 - JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(devSnToJoEntry, devSnToIscDevSnMap)); - JSONObject qaiRtJo = HikvisionUtil.getJSONObjectData(qaiJo); - JSONArray qaiList = qaiRtJo.getJSONArray("list"); + List workerIds = devSnToJoEntry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList()); + JSONArray qaiList = queryAuthItemByWorkerList(project, workerIds, devSnToJoEntry, devSnToIscDevSnMap); Set rtWorkerIdSet; if (CollUtil.isNotEmpty(qaiList)) { for (int i = 0; i < qaiList.size(); i++) { @@ -713,11 +720,36 @@ public class AsyncHikvision { log.error("批量下发权限失败:", e); hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, new ArrayList<>(workerIdMap.values()), 1, 1); hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, new ArrayList<>(workerIdMap.values()), 1, 3); - sendExcNotice(e, workerList, dev); + sendExcNotice(e, workerList, dev, projectSn); } return null; } + private JSONArray queryAuthItemByWorkerList(ProjectInfoExtVo project, List workerIds, Map.Entry> devSnToJoEntry, Map devSnToIscDevSnMap) throws Exception { + JSONArray rtJa = new JSONArray(); + for (List splitList : CollUtil.splitList(workerIds, 1000)) { + JSONObject qaiJo = HikvisionUtil.queryAuthItem(project, getQueryAuthItemParam(devSnToJoEntry, devSnToIscDevSnMap, splitList)); + JSONObject qaiRtJo = HikvisionUtil.getJSONObjectData(qaiJo); + JSONArray qaiList = qaiRtJo.getJSONArray("list"); + rtJa.addAll(qaiList); + } + return rtJa; + } + + private void deleteAuthByWorkerList(ProjectInfoExtVo project, Map devSnToIscDevSnMap, Map.Entry> devSnToJoEntry, List deleteAuthWorkerIds) throws Exception { + for (List splitWorkerIds : CollUtil.splitList(deleteAuthWorkerIds, 1000)) { + JSONObject aaRJo = HikvisionUtil.deleteAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, splitWorkerIds, devSnToIscDevSnMap)); + HikvisionUtil.getJSONObjectData(aaRJo); + } + } + + private void addAuthByWorkerList(ProjectInfoExtVo project, Map devSnToIscDevSnMap, Map.Entry> devSnToJoEntry, List addAuthWorkerIds) throws Exception { + for (List splitWorkerIds : CollUtil.splitList(addAuthWorkerIds, 1000)) { + JSONObject aaRJo = HikvisionUtil.addAuth(project, getAddOrDeleteAuthParam(devSnToJoEntry, splitWorkerIds, devSnToIscDevSnMap)); + HikvisionUtil.getJSONObjectData(aaRJo); + } + } + /** * 处理结果:一个设备批量下发人员 * @@ -811,9 +843,9 @@ public class AsyncHikvision { return aaJo; } - private JSONObject getQueryAuthItemParam(Map.Entry> entry, Map devSnToIscDevSnMap) { + private JSONObject getQueryAuthItemParam(Map.Entry> entry, Map devSnToIscDevSnMap, List workerIds) { JSONObject aaJo = new JSONObject(); - aaJo.put("personIds", entry.getValue().stream().map(jsonObject -> jsonObject.getString("workerId")).collect(Collectors.toList())); + aaJo.put("personIds", workerIds); aaJo.put("resourceInfos", Collections.singletonList(new JoBuilder() .put("resourceIndexCode", devSnToIscDevSnMap.get(entry.getKey()).getString("parentIndexCode")) .put("resourceType", "acsDevice") diff --git a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java index 471326110..29e2cd53a 100644 --- a/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java +++ b/src/main/java/com/zhgd/xmgl/config/AsyncConfig.java @@ -515,10 +515,10 @@ public class AsyncConfig { public ThreadPoolTaskExecutor sendBatchExecutor() { MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor(); /** 核心线程数(默认线程数) */ - executor.setCorePoolSize(maxPoolSize * 5); + executor.setCorePoolSize(maxPoolSize); /** 最大线程数 */ - executor.setMaxPoolSize(maxPoolSize * 5); - executor.setQueueCapacity(queueCapacity * 10); + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(queueCapacity); /** 允许线程空闲时间(单位:默认为秒) */ executor.setKeepAliveSeconds(60); /** 线程池名前缀 */ @@ -537,7 +537,7 @@ public class AsyncConfig { executor.setCorePoolSize(maxPoolSize); /** 最大线程数 */ executor.setMaxPoolSize(maxPoolSize); - executor.setQueueCapacity(queueCapacity); + executor.setQueueCapacity(queueCapacity * 100); /** 允许线程空闲时间(单位:默认为秒) */ executor.setKeepAliveSeconds(60); /** 线程池名前缀 */ @@ -556,7 +556,7 @@ public class AsyncConfig { executor.setCorePoolSize(maxPoolSize); /** 最大线程数 */ executor.setMaxPoolSize(maxPoolSize); - executor.setQueueCapacity(queueCapacity * 10); + executor.setQueueCapacity(queueCapacity * 100); /** 允许线程空闲时间(单位:默认为秒) */ executor.setKeepAliveSeconds(60); /** 线程池名前缀 */ @@ -568,4 +568,23 @@ public class AsyncConfig { return executor; } + @Bean("workerBeWaitHkExecutor") + public ThreadPoolTaskExecutor workerBeWaitHkExecutor() { + MdcThreadPoolTaskExecutor executor = new MdcThreadPoolTaskExecutor(); + /** 核心线程数(默认线程数) */ + executor.setCorePoolSize(maxPoolSize); + /** 最大线程数 */ + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(queueCapacity * 100); + /** 允许线程空闲时间(单位:默认为秒) */ + executor.setKeepAliveSeconds(60); + /** 线程池名前缀 */ + executor.setThreadNamePrefix("workerBeWaitHkExecutor-"); + // 线程池对拒绝任务的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); + // 初始化 + executor.initialize(); + return executor; + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerInfoController.java b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerInfoController.java index 7d1841f0f..df147e5aa 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerInfoController.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/controller/WorkerInfoController.java @@ -100,6 +100,18 @@ public class WorkerInfoController { return Result.ok(); } + @OperLog(operModul = "劳务管理", operType = "批量删除劳务人员", operDesc = "批量删除劳务人员信息") + @ApiOperation(value = "批量删除劳务人员信息", notes = "批量删除劳务人员信息", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "ids", value = "劳务人员ids(多个逗号分隔)", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestBody Map map) { + workerInfoService.deleteBatch(MapUtils.getString(map, "ids")); + return Result.ok(); + } + /** * 通过id查询 diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerInfoService.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerInfoService.java index 02177efd1..8d78993cb 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerInfoService.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/IWorkerInfoService.java @@ -165,4 +165,7 @@ public interface IWorkerInfoService extends IService { void editWorkerForHikvision(WorkerInfo workerInfo); void editWorkerAndAuthForHikvision(WorkerInfo workerInfo, WorkerInfo oldWorkerInfo); + + void deleteBatch(String ids); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index 0d56f5c2b..50d8293b6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -2541,4 +2541,11 @@ public class WorkerInfoServiceImpl extends ServiceImpl