From f1e9ec8d784b70e9408f724168a47bc200c601cb Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 31 May 2024 11:45:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=A1=E9=AA=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/async/AsyncHikvision.java | 14 +++--- .../com/zhgd/xmgl/call/HikvisionCall.java | 47 ++++++++++++++----- .../config/MdcThreadPoolTaskExecutor.java | 8 ++++ src/main/java/com/zhgd/xmgl/constant/Cts.java | 4 ++ .../impl/EnterpriseInfoServiceImpl.java | 4 +- .../XzHikvisionCompareDataServiceImpl.java | 9 ++-- .../com/zhgd/xmgl/util/HikvisionUtil.java | 8 ++-- .../com/zhgd/xmgl/util/ThreadLocalUtil.java | 37 ++++++++++----- 8 files changed, 91 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java index ff40f25d0..10ddbdfbb 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncHikvision.java @@ -16,6 +16,7 @@ import com.zhgd.xmgl.modules.worker.entity.TeamInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper; import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; +import com.zhgd.xmgl.modules.x.mapper.XzHikvisionCompareDataMapper; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.security.util.SecurityUtils; @@ -63,6 +64,9 @@ public class AsyncHikvision { @Lazy @Autowired private XzHikvisionSyncMapper xzHikvisionSyncMapper; + @Lazy + @Autowired + private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper; public static Date getSyncLotNowOrSetIfNull() { Date now = ThreadLocalUtil.getNotNull().getDate("now"); @@ -281,6 +285,7 @@ public class AsyncHikvision { if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } + hikvisionCall.compareRetryFail(); } @Async("carInfoExecutor") @@ -294,15 +299,12 @@ public class AsyncHikvision { } @Async("carInfoExecutor") - public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn) { + public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn, String enterpriseName) { try { - hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn); + hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn, enterpriseName); } catch (Exception e) { log.error("海康:", e); - EnterpriseInfo enterpriseInfo = enterpriseInfoMapper.selectById(enterpriseId); - if (enterpriseInfo != null) { - sendNoticeForOrg(enterpriseInfo.getEnterpriseName(), 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 94269d38f..1bc5cef35 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -51,6 +51,8 @@ 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.WorkerAttendanceServiceImpl; +import com.zhgd.xmgl.modules.x.entity.XzHikvisionCompareData; +import com.zhgd.xmgl.modules.x.mapper.XzHikvisionCompareDataMapper; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl; @@ -97,6 +99,9 @@ public class HikvisionCall { CarInfoServiceImpl carInfoService; @Lazy @Autowired + private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper; + @Lazy + @Autowired private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper; @Lazy @Autowired @@ -1077,6 +1082,11 @@ public class HikvisionCall { msg = "同步失败,组织名称:" + orgName + "。失败原因:" + rs; title += "失败"; } + if (success) { + this.compareRetrySuc(); + } else { + this.compareRetryFail(); + } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } @@ -1220,7 +1230,7 @@ public class HikvisionCall { Integer sendSuccessStatus = null; if (CollUtil.isEmpty(xzHikvisionSyncs)) { sendSuccessStatus = null; - }else if (xzHikvisionSyncs.stream().allMatch(xzHikvisionSync1 -> Objects.equals(xzHikvisionSync1.getIsSuccess(), 1))) { + } else if (xzHikvisionSyncs.stream().allMatch(xzHikvisionSync1 -> Objects.equals(xzHikvisionSync1.getIsSuccess(), 1))) { sendSuccessStatus = 1; } else if (xzHikvisionSyncs.stream().allMatch(xzHikvisionSync1 -> xzHikvisionSync1.getIsSuccess() == null)) { sendSuccessStatus = null; @@ -1948,8 +1958,9 @@ public class HikvisionCall { * * @param enterpriseId * @param projectSn + * @param enterpriseName */ - public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn) throws Exception { + public void deleteEnterpriseInfoForHikvision(String enterpriseId, 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; @@ -1960,10 +1971,7 @@ public class HikvisionCall { JSONObject jo = new JSONObject(); jo.put("indexCodes", Arrays.asList(enterpriseId)); String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - EnterpriseInfo enterpriseInfo = enterpriseInfoMapper.selectById(enterpriseId); - if (enterpriseInfo != null) { - sendNoticeForOrg("删除组织到海康isc", rs, enterpriseInfo.getEnterpriseName()); - } + sendNoticeForOrg("删除组织到海康isc", rs, enterpriseName); } /** @@ -2157,11 +2165,7 @@ public class HikvisionCall { jo.put("pageSize", 100); jo.put("orgIndexCodes", orgIndex); String body = jo.toJSONString(); - String rs = HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - if (StringUtils.isBlank(rs)) { - throw new OpenPromptException("海康网络异常"); - } - return rs; + return HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); } /** @@ -2585,5 +2589,26 @@ public class HikvisionCall { return JSON.parseObject(HikvisionUtil.doPost(host, path, JSON.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())); } + /** + * 数据校验重试失败 + */ + public void compareRetryFail() { + JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY); + if (tlJo != null) { + XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class); + data.setSyncResult(2); + xzHikvisionCompareDataMapper.updateById(data); + } + } + /** + * 数据校验重试成功 + */ + public void compareRetrySuc() { + JSONObject tlJo = ThreadLocalUtil.getByKey(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY); + if (tlJo != null) { + XzHikvisionCompareData data = BeanUtil.toBean(tlJo, XzHikvisionCompareData.class); + xzHikvisionCompareDataMapper.deleteById(data.getId()); + } + } } diff --git a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java index 69eb4c6a5..bc53e3e48 100644 --- a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java +++ b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java @@ -1,6 +1,8 @@ package com.zhgd.xmgl.config; +import com.alibaba.fastjson.JSONObject; import com.zhgd.xmgl.util.RequestIdUtil; +import com.zhgd.xmgl.util.ThreadLocalUtil; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -18,6 +20,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { @Override public void execute(Runnable task) { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC + JSONObject tlJo = ThreadLocalUtil.get(); log.info("MDC异步多线程..."); super.execute(() -> { if (null != context) { @@ -25,11 +28,13 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { } else { RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个 } + ThreadLocalUtil.set(tlJo); try { task.run(); } finally { try { RequestIdUtil.clear(); + ThreadLocalUtil.remove(); } catch (Exception e) { log.warn("MDC clear exception:{}", e.getMessage()); } @@ -43,6 +48,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { @Override public Future submit(Callable task) { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC + JSONObject tlJo = ThreadLocalUtil.get(); log.info("MDC异步多线程..."); return super.submit(() -> { if (null != context) { @@ -50,11 +56,13 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { } else { RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个 } + ThreadLocalUtil.set(tlJo); try { return task.call(); } finally { try { RequestIdUtil.clear(); + ThreadLocalUtil.remove(); } catch (Exception e) { log.warn("MDC clear exception:{}", e.getMessage()); } diff --git a/src/main/java/com/zhgd/xmgl/constant/Cts.java b/src/main/java/com/zhgd/xmgl/constant/Cts.java index ca4b4b2b5..7a997075d 100644 --- a/src/main/java/com/zhgd/xmgl/constant/Cts.java +++ b/src/main/java/com/zhgd/xmgl/constant/Cts.java @@ -18,4 +18,8 @@ public interface Cts { String SUCCESS = "success"; String MSG = "msg"; String ENTERPRISE_ID = "enterpriseId"; + /** + * 数据校验重试是否成功 + */ + String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data"; } 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 b4e6392ea..6623fe05e 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 @@ -252,9 +252,9 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl idList = StrUtil.split(ids, ","); for (String id : idList) { XzHikvisionCompareData data = baseMapper.selectById(id); + ThreadLocalUtil.addInKeyIfNotExist(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY, data); ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(new MapBuilder().put(Cts.PROJECT_SN, data.getProjectSn()).build()); EnterpriseInfo enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder() .put(Cts.PROJECT_SN, data.getProjectSn()).put(Cts.ENTERPRISE_ID, data.getUniqueId()).build()), EnterpriseInfo.class); @@ -133,7 +130,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl threadLocal = new ThreadLocal<>(); + private ThreadLocalUtil() { } - private static final ThreadLocal threadLocal = new ThreadLocal<>(); - public static void set(JSONObject str) { threadLocal.set(str); } + public static JSONObject get() { + return threadLocal.get(); + } + + public static JSONObject getNotNull() { + if (get() == null) { + threadLocal.set(new JSONObject()); + } + return get(); + } + + public static JSONObject getByKey(String key) { + if (get() == null) { + return null; + } + return get().getJSONObject(key); + } + public static void add(JSONObject str) { if (get() == null) { threadLocal.set(str); @@ -28,22 +46,19 @@ public class ThreadLocalUtil { add(jo); } - public static JSONObject get() { - return threadLocal.get(); - } - - public static JSONObject getNotNull() { - if (get() == null) { - threadLocal.set(new JSONObject()); + public static void addInKeyIfNotExist(String key, Object val) { + JSONObject jo = getNotNull(); + if (!jo.containsKey(key)) { + jo = new JSONObject(); + jo.put(key, val); + add(jo); } - return get(); } public static void remove() { threadLocal.remove(); } - public static void main(String[] args) { JSONObject jo = new JSONObject(); jo.put("jo", "0");