From 6e92b68ab7edbae91c16b0885fe29bda27043481 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 27 Jun 2024 10:07:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=A1=E9=AA=8Cbug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/mybatis/DataScopeHandler.java | 1 + .../com/zhgd/xmgl/async/AsyncHikvision.java | 4 +- .../com/zhgd/xmgl/call/HikvisionCall.java | 75 ++++++++++++++++--- .../config/MdcThreadPoolTaskExecutor.java | 7 +- .../mapper/ProjectFineRecordMapper.java | 2 + .../impl/EnterpriseInfoServiceImpl.java | 2 +- .../xz/entity/XzHikvisionCompareData.java | 5 ++ .../IXzHikvisionCompareDataService.java | 6 +- .../XzHikvisionCompareDataServiceImpl.java | 59 ++++++++++----- .../com/zhgd/xmgl/task/HikvisionTask.java | 14 ++-- .../com/zhgd/xmgl/util/HikvisionUtil.java | 13 +--- 11 files changed, 133 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java index 2b3ee39c5..478eda2f6 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java @@ -101,6 +101,7 @@ public class DataScopeHandler implements DataPermissionHandler { tables.put("exam_course_record", "enterprise_id"); tables.put("xz_worker_safe_watch_alarm", "enterprise_id"); tables.put("dangerous_engineering_record", "responsibility_company_id"); + tables.put("project_fine_record", "enterprise_id"); if (!environmentUtil.isBaise()) { tables.put("car_info", "enterprise_id"); tables.put("enterprise_info", "id"); diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index f2f664bfe..331d03e5c 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -309,9 +309,9 @@ public class AsyncHikvision { } @Async("carInfoExecutor") - public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn, String enterpriseName, Long projectEnterpriseId) { + public void deleteEnterpriseInfoForHikvision(String projectSn, String enterpriseName) { try { - hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn, enterpriseName, projectEnterpriseId); + hikvisionCall.deleteEnterpriseInfoForHikvision(projectSn, enterpriseName); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(enterpriseName, e, "删除"); diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 851fd2830..67fb0eaff 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -1014,6 +1014,15 @@ public class HikvisionCall { } else if (Objects.equals(code, "0x00072003")) { msg = "同步失败,车牌号码:" + carInfo.getCarNumber() + "。失败原因:车牌格式不正确!"; title += "失败"; + } else if (Objects.equals(code, "0x00052301")) { + String msg1 = jo.getString("msg"); + if (Objects.equals(msg1, "PersonId Not Exists")) { + msg = "同步失败,车牌号码:" + carInfo.getCarNumber() + "。失败原因:车辆绑定的人员ID不存在"; + title += "失败"; + } else { + msg = "同步失败,车牌号码:" + carInfo.getCarNumber() + "。失败原因:下发异常"; + title += "失败"; + } } else { msg = "同步失败,车牌号码:" + carInfo.getCarNumber() + "。失败原因:下发异常"; title += "失败"; @@ -1035,7 +1044,7 @@ public class HikvisionCall { updateFailStatus(carInfo.getProjectSn(), carInfo.getId(), type, operate, null); } - xzHikvisionCompareDataService.compareRetryStatus(carInfo, type, operate, setSuc); + xzHikvisionCompareDataService.compareRetryForCar(carInfo, type, operate, setSuc); if (isNotice) { if (ThreadLocalUtil.getByKey(Cts.TL_AUTH_USER, UserInfo.class) != null) { @@ -1076,6 +1085,22 @@ public class HikvisionCall { msg = "同步成功,组织名称:" + orgName; title += "成功"; } + } else if (jo.get("data") instanceof JSONArray) { + JSONArray dataJa = jo.getJSONArray("data"); + if (CollUtil.isNotEmpty(dataJa)) { + if ("0x00052102".equals(dataJa.getJSONObject(0).getString("code")) && "Exists Child Org".equals(dataJa.getJSONObject(0).getString("msg"))) { + msg = "同步失败,组织名称:" + orgName + "。失败原因:ISC存在下级组织"; + title += "失败"; + success = false; + } else { + msg = "同步失败,组织名称:" + orgName + "。失败原因:下发异常"; + title += "失败"; + success = false; + } + } else { + msg = "同步成功,组织名称:" + orgName; + title += "成功"; + } } else { msg = "同步成功,组织名称:" + orgName; title += "成功"; @@ -1086,7 +1111,7 @@ public class HikvisionCall { success = false; } if (success) { - xzHikvisionCompareDataService.compareRetryStatus(); + xzHikvisionCompareDataService.compareRetrySuc(); } else { xzHikvisionCompareDataService.compareRetryFail(); } @@ -1155,7 +1180,7 @@ public class HikvisionCall { } if (success) { updateSuccessStatus(workerInfo.getProjectSn(), workerInfo.getId(), type, operate, null); - xzHikvisionCompareDataService.compareRetryStatus(); + xzHikvisionCompareDataService.compareRetrySuc(); } else { updateFailStatus(workerInfo.getProjectSn(), workerInfo.getId(), type, operate, null); xzHikvisionCompareDataService.compareRetryFail(); @@ -1850,21 +1875,45 @@ public class HikvisionCall { /** * 删除组织 * - * @param enterpriseId * @param projectSn * @param enterpriseName - * @param projectEnterpriseId */ - public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn, String enterpriseName, Long projectEnterpriseId) throws Exception { + public void deleteEnterpriseInfoForHikvision(String projectSn, String enterpriseName) throws Exception { Project project = projectMapper.selectOne(new LambdaQueryWrapper().eq(Project::getProjectSn, projectSn)); if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return; } - Pair pair = existAndGetEnterpriseOrgIndexCodeByEnterpriseId(project, String.valueOf(enterpriseId), projectEnterpriseId); - String rs = HikvisionUtil.deleteOrgByIndexCodes(project, Collections.singletonList(pair.getRight())); + String orgIndex = getOrgIndexByParentIndexAndName(project, enterpriseName); + String rs = HikvisionUtil.deleteOrgByIndexCodes(project, Collections.singletonList(orgIndex)); sendNoticeForOrg("删除组织到海康isc", rs, enterpriseName); } + /** + * 根据父级索引和名称获取组织索引 + * + * @param project + * @param orgName + * @return + * @throws Exception + */ + private String getOrgIndexByParentIndexAndName(Project project, String orgName) throws Exception { + JSONObject param = new JSONObject(); + param.put("pageNo", 1); + param.put("pageSize", 1000); + param.put("orgName", orgName); + param.put("parentOrgIndexCodes", project.getProjectSn()); + String rs = HikvisionUtil.getOrgV2(project, param); + JSONObject dataJo = HikvisionUtil.getJSONObjectData(rs); + JSONArray listJa = dataJo.getJSONArray("list"); + for (int i = 0; i < listJa.size(); i++) { + JSONObject jo = listJa.getJSONObject(i); + if (jo.getString("orgName").equals(orgName)) { + return jo.getString("orgIndexCode"); + } + } + return null; + } + /** * 添加组织 * @@ -2026,10 +2075,14 @@ public class HikvisionCall { * @return */ private JSONArray getOrgList(Project project, String orgIndexs, String parentOrgIndexCode) throws Exception { - String rs = HikvisionUtil.getOrgV2(project, orgIndexs, parentOrgIndexCode); + JSONObject param = new JSONObject(); + param.put("pageNo", 1); + param.put("pageSize", 1000); + param.put("orgIndexCodes", orgIndexs); + param.put("parentOrgIndexCodes", parentOrgIndexCode); + String rs = HikvisionUtil.getOrgV2(project, param); JSONObject jo = HikvisionUtil.getJSONObjectData(rs); - JSONArray list = jo.getJSONArray("list"); - return list; + return jo.getJSONArray("list"); } private HikvisionOrganization getHikvisionOrganization(Project project) { diff --git a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java index 097fc40c7..1490113f1 100644 --- a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java +++ b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.config; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.zhgd.xmgl.util.LogMdcUtil; import com.zhgd.xmgl.util.ThreadLocalUtil; @@ -22,13 +23,14 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC JSONObject tlJo = ThreadLocalUtil.get(); log.info("MDC异步多线程..."); + JSONObject copyTl = BeanUtil.toBean(tlJo, JSONObject.class); super.execute(() -> { if (null != context) { MDC.setContextMap(context); //主线程MDC赋予子线程 } else { LogMdcUtil.setRequestId(); //主线程没有MDC就自己生成一个 } - ThreadLocalUtil.set(tlJo); + ThreadLocalUtil.set(copyTl); try { task.run(); } finally { @@ -50,13 +52,14 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC JSONObject tlJo = ThreadLocalUtil.get(); log.info("MDC异步多线程..."); + JSONObject copyTl = BeanUtil.toBean(tlJo, JSONObject.class); return super.submit(() -> { if (null != context) { MDC.setContextMap(context); //主线程MDC赋予子线程 } else { LogMdcUtil.setRequestId(); //主线程没有MDC就自己生成一个 } - ThreadLocalUtil.set(tlJo); + ThreadLocalUtil.set(copyTl); try { return task.call(); } finally { diff --git a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectFineRecordMapper.java b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectFineRecordMapper.java index aaf1a4347..d070ee737 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectFineRecordMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/mapper/ProjectFineRecordMapper.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.annotation.DataScope; import com.zhgd.jeecg.common.mybatis.EntityMap; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -17,6 +18,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @version: V1.0 */ @Mapper +@DataScope public interface ProjectFineRecordMapper extends BaseMapper { List selectProjectFineRecordPageList(Page page, @Param("param") Map map); 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 129df68e8..b1641624f 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 @@ -312,7 +312,7 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl idList = StrUtil.split(ids, ","); for (String id : idList) { @@ -172,7 +174,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl carInfoList) { + private void compareAndAddData(Project project, JSONArray listJa, List carInfoList, int carIscExistType) { if (CollUtil.isEmpty(listJa)) { for (CarInfo carInfo : carInfoList) { - xzHikvisionCompareDataService.addCompareDataForCar(project, carInfo.getCarNumber(), 0, 1, String.valueOf(carInfo.getId())); + xzHikvisionCompareDataService.addCompareDataForCar(project, carInfo.getCarNumber(), 0, 1, String.valueOf(carInfo.getId()), null); } } else { //isc存在,平台也存在 @@ -402,10 +402,10 @@ public class HikvisionTask { String uniqueId = null; if (myMap.containsKey(carNumber) && !iscMap.containsKey(carNumber)) { uniqueId = String.valueOf(myMap.get(carNumber).getId()); - xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 0, 1, uniqueId); + xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 0, 1, uniqueId, null); } else if (!myMap.containsKey(carNumber) && iscMap.containsKey(carNumber)) { uniqueId = iscMap.get(carNumber).getString("vehicleId"); - xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 1, 0, uniqueId); + xzHikvisionCompareDataService.addCompareDataForCar(project, carNumber, 1, 0, uniqueId, carIscExistType); } } } diff --git a/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java b/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java index d6790694e..29112ded2 100644 --- a/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/HikvisionUtil.java @@ -354,23 +354,16 @@ public class HikvisionUtil { * 获取组织列表v2 * * @param project - * @param orgIndex - * @param parentOrgIndexCode + * @param jo */ - public static String getOrgV2(Project project, String orgIndex, String parentOrgIndexCode) throws Exception { + public static String getOrgV2(Project project, JSONObject jo) throws Exception { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { return null; } final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v2/org/advance/orgList"; String host = "https://" + project.getArtemisConfigHost(); - JSONObject jo = new JSONObject(); - jo.put("pageNo", 1); - jo.put("pageSize", 100); - jo.put("orgIndexCodes", orgIndex); - jo.put("parentOrgIndexCodes", parentOrgIndexCode); - String body = jo.toJSONString(); - return doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + return doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } /**