From b0e74517df0883743a7dbf14b7009450b61806d6 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 6 Jun 2024 17:21:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E7=94=A8=E6=B5=B7=E5=BA=B7bug?= =?UTF-8?q?=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 | 10 +- .../com/zhgd/xmgl/call/HikvisionCall.java | 157 +++++++++++------- .../impl/EnterpriseInfoServiceImpl.java | 6 +- .../service/impl/WorkerInfoServiceImpl.java | 4 +- .../XzHikvisionCompareDataServiceImpl.java | 8 +- .../com/zhgd/xmgl/util/HikvisionUtil.java | 33 +++- 6 files changed, 143 insertions(+), 75 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index 98f821da2..9a8dc3be5 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -109,11 +109,13 @@ public class AsyncHikvision { * 添加劳务人员-海康 * * @param workerInfo + * @param isSaveWorker + * @param isSaveWorkerFace */ @Async("hikvisionExecutor") - public void addWorkerForHikvisionAsync(WorkerInfo workerInfo) { + public void addWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) { try { - hikvisionCall.addWorkerForHikvision(workerInfo); + hikvisionCall.addWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace); } catch (Exception e) { log.error("海康:", e); sendNoticeForWorker(workerInfo, e, "添加"); @@ -121,9 +123,9 @@ public class AsyncHikvision { } @Async("hikvisionExecutor") - public void editWorkerForHikvisionAsync(WorkerInfo workerInfo) { + public void editWorkerForHikvisionAsync(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) { try { - hikvisionCall.editWorkerForHikvision(workerInfo); + hikvisionCall.editWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace); } catch (Exception e) { log.error("海康:", e); sendNoticeForWorker(workerInfo, e, "更新"); diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index c09f5a9b4..04ec0c984 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -55,6 +55,7 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerAttendanceMapper; import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; import com.zhgd.xmgl.modules.worker.service.IWorkerAttendancePresenceService; import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService; +import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl; import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionCompareDataMapper; @@ -69,6 +70,8 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; 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.Value; @@ -108,6 +111,9 @@ public class HikvisionCall { @Lazy @Autowired CarInfoServiceImpl carInfoService; + @Autowired + @Lazy + EnterpriseInfoServiceImpl enterpriseInfoService; @Lazy @Autowired private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper; @@ -822,14 +828,20 @@ public class HikvisionCall { * 添加人员 * * @param workerInfo + * @param isSaveWorker + * @param isSaveWorkerFace */ - public void addWorkerForHikvision(WorkerInfo workerInfo) throws Exception { + public void addWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception { Project project = projectMapper.selectOne(new LambdaQueryWrapper().eq(Project::getProjectSn, workerInfo.getProjectSn())); if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - addWorkerFromHttp(workerInfo, project); - addWorkerFace(workerInfo, project); + if (isSaveWorker) { + addWorkerFromHttp(workerInfo, project); + } + if (isSaveWorkerFace) { + addWorkerFace(workerInfo, project); + } } public void addWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { @@ -885,19 +897,25 @@ public class HikvisionCall { * 编辑人员 * * @param workerInfo + * @param isSaveWorker + * @param isSaveWorkerFace */ - public void editWorkerForHikvision(WorkerInfo workerInfo) throws Exception { + public void editWorkerForHikvision(WorkerInfo workerInfo, boolean isSaveWorker, boolean isSaveWorkerFace) throws Exception { Project project = projectMapper.selectOne(new LambdaQueryWrapper().eq(Project::getProjectSn, workerInfo.getProjectSn())); if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } JSONObject wiJo = getWorkerInfoByPersonId(String.valueOf(workerInfo.getId()), project); if (wiJo != null) { - editWorkerFromHttp(workerInfo, project); + if (isSaveWorker) { + editWorkerFromHttp(workerInfo, project); + } - editWorkerFace(workerInfo, project); + if (isSaveWorkerFace) { + editWorkerFace(workerInfo, project); + } } else { - addWorkerForHikvision(workerInfo); + addWorkerForHikvision(workerInfo, isSaveWorker, isSaveWorkerFace); } } @@ -1036,17 +1054,22 @@ public class HikvisionCall { String type = "25"; if (success) { JSONObject jo = JSONObject.parseObject(rs); - JSONObject dataJo = jo.getJSONObject("data"); - Optional fOp = Optional.ofNullable(dataJo).map(o -> o.getJSONArray("failures")); - if (fOp.isPresent() && fOp.get().size() != 0) { - if ("0x00052102".equals(fOp.get().getJSONObject(0).getString("code"))) { - msg = "同步失败,组织名称:" + orgName + "。失败原因:上级组织不存在"; - title += "失败"; - success = false; + if (jo.get("data") instanceof JSONObject) { + JSONObject dataJo = jo.getJSONObject("data"); + Optional fOp = Optional.ofNullable(dataJo).map(o -> o.getJSONArray("failures")); + if (fOp.isPresent() && fOp.get().size() != 0) { + if ("0x00052102".equals(fOp.get().getJSONObject(0).getString("code"))) { + msg = "同步失败,组织名称:" + orgName + "。失败原因:上级组织不存在"; + title += "失败"; + success = false; + } else { + msg = "同步失败,组织名称:" + orgName + "。失败原因:下发异常"; + title += "失败"; + success = false; + } } else { - msg = "同步失败,组织名称:" + orgName + "。失败原因:下发异常"; - title += "失败"; - success = false; + msg = "同步成功,组织名称:" + orgName; + title += "成功"; } } else { msg = "同步成功,组织名称:" + orgName; @@ -1516,7 +1539,6 @@ public class HikvisionCall { return oldCarInfo == null ? null : oldCarInfo.getString("vehicleId"); } - /** * 保存绑定群组关系 * @@ -1825,14 +1847,16 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo); + enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder() + .put(Cts.PROJECT_SN, enterpriseInfo.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseInfo.getId()).build()), EnterpriseInfo.class); + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo, String.valueOf(enterpriseInfo.getProjectEnterprise().getId())); addOrgNoticeFromHttp(project, hikvisionOrganization); } - private HikvisionOrganization getHikvisionOrganization(EnterpriseInfo enterpriseInfo) { + private HikvisionOrganization getHikvisionOrganization(EnterpriseInfo enterpriseInfo, String orgIndexCode) { HikvisionOrganization hikvisionOrganization = new HikvisionOrganization(); hikvisionOrganization.setClientId(null); - hikvisionOrganization.setOrgIndexCode(String.valueOf(enterpriseInfo.getId())); + hikvisionOrganization.setOrgIndexCode(orgIndexCode); hikvisionOrganization.setOrgName(enterpriseInfo.getEnterpriseName()); hikvisionOrganization.setParentIndexCode(enterpriseInfo.getProjectSn()); return hikvisionOrganization; @@ -1848,14 +1872,28 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo); - if (existOrg(project, String.valueOf(enterpriseInfo.getId()))) { + Pair existAndIndexCode = existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, enterpriseInfo.getId()); + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(enterpriseInfo, existAndIndexCode.getRight()); + if (existAndIndexCode.getLeft()) { editOrgFromHttp(project, hikvisionOrganization); } else { addOrgNoticeFromHttp(project, hikvisionOrganization); } } + private Pair existAndGetEnterpriseOrgIndexCodeByEnterpriseId(Project project, Long enterpriseId) throws Exception { + EnterpriseInfo enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder() + .put(Cts.PROJECT_SN, project.getProjectSn()).put(Cts.ENTERPRISE_ID, enterpriseId).build()), EnterpriseInfo.class); + JSONArray orgList = getOrgList(project, StrUtil.join(",", enterpriseInfo.getId(), enterpriseInfo.getProjectEnterprise().getId()), project.getProjectSn()); + String index = null; + if (CollUtil.isEmpty(orgList)) { + index = String.valueOf(enterpriseInfo.getProjectEnterprise().getId()); + } else { + index = orgList.getJSONObject(0).getString("orgIndexCode"); + } + return new ImmutablePair<>(CollUtil.isNotEmpty(orgList), index); + } + /** * 删除组织 * @@ -1868,12 +1906,8 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - final String ARTEMIS_PATH = "/artemis"; - final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete"; - String host = "https://" + project.getArtemisConfigHost(); - JSONObject jo = new JSONObject(); - jo.put("indexCodes", Arrays.asList(enterpriseId)); - String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + Pair pair = existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, Long.valueOf(enterpriseId)); + String rs = HikvisionUtil.deleteOrgByIndexCodes(project, Arrays.asList(pair.getRight())); sendNoticeForOrg("删除组织到海康isc", rs, enterpriseName); } @@ -1887,16 +1921,16 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo); + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo, project); addOrgNoticeFromHttp(project, hikvisionOrganization); } - private HikvisionOrganization getHikvisionOrganization(TeamInfo teamInfo) { + private HikvisionOrganization getHikvisionOrganization(TeamInfo teamInfo, Project project) throws Exception { HikvisionOrganization hikvisionOrganization = new HikvisionOrganization(); hikvisionOrganization.setClientId(null); hikvisionOrganization.setOrgIndexCode(String.valueOf(teamInfo.getId())); hikvisionOrganization.setOrgName(teamInfo.getTeamName()); - hikvisionOrganization.setParentIndexCode(String.valueOf(teamInfo.getEnterpriseId())); + hikvisionOrganization.setParentIndexCode(existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, teamInfo.getEnterpriseId()).getRight()); return hikvisionOrganization; } @@ -1910,8 +1944,8 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo); - if (existOrg(project, String.valueOf(teamInfo.getId()))) { + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(teamInfo, project); + if (existOrg(project, String.valueOf(teamInfo.getId()), hikvisionOrganization.getParentIndexCode())) { editOrgFromHttp(project, hikvisionOrganization); } else { addOrgNoticeFromHttp(project, hikvisionOrganization); @@ -1927,29 +1961,15 @@ public class HikvisionCall { } private void deleteOrgFromHttp(Project project, List idList, String orgName) throws Exception { - final String ARTEMIS_PATH = "/artemis"; - final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete"; - String host = "https://" + project.getArtemisConfigHost(); - JSONObject jo = new JSONObject(); - jo.put("indexCodes", idList); - String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + String rs = HikvisionUtil.deleteOrgByIndexCodes(project, idList); sendNoticeForOrg("删除组织到海康isc", rs, orgName); } private void addOrgNoticeFromHttp(Project project, HikvisionOrganization hikvisionOrganization) throws Exception { - String rs = addOrgFromHttp(project, hikvisionOrganization); + String rs = HikvisionUtil.addOrgFromHttp(project, hikvisionOrganization); sendNoticeForOrg("添加组织到海康isc", rs, hikvisionOrganization.getOrgName()); } - private String addOrgFromHttp(Project project, HikvisionOrganization hikvisionOrganization) throws Exception { - final String ARTEMIS_PATH = "/artemis"; - final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/add"; - String host = "https://" + project.getArtemisConfigHost(); - ArrayList list = new ArrayList<>(); - list.add(hikvisionOrganization); - return HikvisionUtil.doPost(host, path, JSON.toJSONString(list), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - } - /** * 删除组织 * @@ -1974,16 +1994,16 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo); + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo, project); addOrgNoticeFromHttp(project, hikvisionOrganization); } - private HikvisionOrganization getHikvisionOrganization(DepartmentInfo departmentInfo) { + private HikvisionOrganization getHikvisionOrganization(DepartmentInfo departmentInfo, Project project) throws Exception { HikvisionOrganization hikvisionOrganization = new HikvisionOrganization(); hikvisionOrganization.setClientId(null); hikvisionOrganization.setOrgIndexCode(String.valueOf(departmentInfo.getId())); hikvisionOrganization.setOrgName(departmentInfo.getDepartmentName()); - hikvisionOrganization.setParentIndexCode(String.valueOf(departmentInfo.getEnterpriseId())); + hikvisionOrganization.setParentIndexCode(existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, departmentInfo.getEnterpriseId()).getRight()); return hikvisionOrganization; } @@ -1997,8 +2017,8 @@ public class HikvisionCall { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo); - if (existOrg(project, String.valueOf(departmentInfo.getId()))) { + HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(departmentInfo, project); + if (existOrg(project, String.valueOf(departmentInfo.getId()), hikvisionOrganization.getParentIndexCode())) { editOrgFromHttp(project, hikvisionOrganization); } else { addOrgNoticeFromHttp(project, hikvisionOrganization); @@ -2030,7 +2050,7 @@ public class HikvisionCall { return; } HikvisionOrganization hikvisionOrganization = getHikvisionOrganization(project); - addOrgFromHttp(project, hikvisionOrganization); + HikvisionUtil.addOrgFromHttp(project, hikvisionOrganization); } /** @@ -2053,16 +2073,31 @@ public class HikvisionCall { } /** - * 组织存在? + * 组织是否存在 * * @param project - * @param orgIndex + * @param orgIndexs 逗号分割 + * @param parentOrgIndexCode * @return */ - public boolean existOrg(Project project, String orgIndex) throws Exception { - String rs = HikvisionUtil.getOrgV2(project, orgIndex, project.getProjectSn()); + public boolean existOrg(Project project, String orgIndexs, String parentOrgIndexCode) throws Exception { + JSONArray list = getOrgList(project, orgIndexs, parentOrgIndexCode); + return list.size() > 0; + } + + /** + * 查询组织 + * + * @param project + * @param orgIndexs 逗号分割 + * @param parentOrgIndexCode + * @return + */ + private JSONArray getOrgList(Project project, String orgIndexs, String parentOrgIndexCode) throws Exception { + String rs = HikvisionUtil.getOrgV2(project, orgIndexs, parentOrgIndexCode); JSONObject jo = HikvisionUtil.getJSONObjectData(rs); - return jo.getJSONArray("list").size() > 0; + JSONArray list = jo.getJSONArray("list"); + return list; } private HikvisionOrganization getHikvisionOrganization(Project project) { diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java index 6623fe05e..c8154fb06 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java @@ -250,7 +250,11 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl xzUserToSuppliers = baseMapper.getSupplierUserIdByProjectSnAndEnterpriseId(projectSn, enterpriseId); for (XzUserToSupplier xzUserToSupplier : xzUserToSuppliers) { - systemUserService.deleteTenantOrSupplier(String.valueOf(xzUserToSupplier.getUserId()), projectSn); + try { + systemUserService.deleteTenantOrSupplier(String.valueOf(xzUserToSupplier.getUserId()), projectSn); + } catch (Exception e) { + e.printStackTrace(); + } } EnterpriseInfo enterpriseInfo = baseMapper.selectById(enterpriseId); //同步海康 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 bafbebbfa..d2da94e93 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 @@ -2345,7 +2345,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl implements IXzHikvisionCompareDataService { + @Lazy @Autowired private ICarInfoService carInfoService; @Lazy @@ -292,13 +293,14 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl list = new ArrayList<>(); + list.add(hikvisionOrganization); + return doPost(host, path, JSON.toJSONString(list), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + } + + public static String deleteOrgByIndexCodes(Project project, List indexCodes) throws Exception { + final String ARTEMIS_PATH = "/artemis"; + final String path = ARTEMIS_PATH + "/api/resource/v1/org/batch/delete"; + String host = "https://" + project.getArtemisConfigHost(); + JSONObject jo = new JSONObject(); + jo.put("indexCodes", indexCodes); + String rs = doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + return rs; + } }