数据校验修改

This commit is contained in:
guoshengxiong 2024-05-31 11:45:33 +08:00
parent 1c509a9625
commit f1e9ec8d78
8 changed files with 91 additions and 40 deletions

View File

@ -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.entity.WorkerInfo;
import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper; import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; 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.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.security.util.SecurityUtils;
@ -63,6 +64,9 @@ public class AsyncHikvision {
@Lazy @Lazy
@Autowired @Autowired
private XzHikvisionSyncMapper xzHikvisionSyncMapper; private XzHikvisionSyncMapper xzHikvisionSyncMapper;
@Lazy
@Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
public static Date getSyncLotNowOrSetIfNull() { public static Date getSyncLotNowOrSetIfNull() {
Date now = ThreadLocalUtil.getNotNull().getDate("now"); Date now = ThreadLocalUtil.getNotNull().getDate("now");
@ -281,6 +285,7 @@ public class AsyncHikvision {
if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) {
noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type);
} }
hikvisionCall.compareRetryFail();
} }
@Async("carInfoExecutor") @Async("carInfoExecutor")
@ -294,15 +299,12 @@ public class AsyncHikvision {
} }
@Async("carInfoExecutor") @Async("carInfoExecutor")
public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn) { public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn, String enterpriseName) {
try { try {
hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn); hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn, enterpriseName);
} catch (Exception e) { } catch (Exception e) {
log.error("海康:", e); log.error("海康:", e);
EnterpriseInfo enterpriseInfo = enterpriseInfoMapper.selectById(enterpriseId); sendNoticeForOrg(enterpriseName, e, "删除");
if (enterpriseInfo != null) {
sendNoticeForOrg(enterpriseInfo.getEnterpriseName(), e, "删除");
}
} }
} }

View File

@ -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.IWorkerAttendancePresenceService;
import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService; import com.zhgd.xmgl.modules.worker.service.IWorkerAttendanceService;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl; 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.entity.XzHikvisionSync;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl; import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl;
@ -97,6 +99,9 @@ public class HikvisionCall {
CarInfoServiceImpl carInfoService; CarInfoServiceImpl carInfoService;
@Lazy @Lazy
@Autowired @Autowired
private XzHikvisionCompareDataMapper xzHikvisionCompareDataMapper;
@Lazy
@Autowired
private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper; private AiAnalyseHardWareAlarmRecordMapper aiAnalyseHardWareAlarmRecordMapper;
@Lazy @Lazy
@Autowired @Autowired
@ -1077,6 +1082,11 @@ public class HikvisionCall {
msg = "同步失败,组织名称:" + orgName + "。失败原因:" + rs; msg = "同步失败,组织名称:" + orgName + "。失败原因:" + rs;
title += "失败"; title += "失败";
} }
if (success) {
this.compareRetrySuc();
} else {
this.compareRetryFail();
}
if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) {
noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type);
} }
@ -1220,7 +1230,7 @@ public class HikvisionCall {
Integer sendSuccessStatus = null; Integer sendSuccessStatus = null;
if (CollUtil.isEmpty(xzHikvisionSyncs)) { if (CollUtil.isEmpty(xzHikvisionSyncs)) {
sendSuccessStatus = null; 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; sendSuccessStatus = 1;
} else if (xzHikvisionSyncs.stream().allMatch(xzHikvisionSync1 -> xzHikvisionSync1.getIsSuccess() == null)) { } else if (xzHikvisionSyncs.stream().allMatch(xzHikvisionSync1 -> xzHikvisionSync1.getIsSuccess() == null)) {
sendSuccessStatus = null; sendSuccessStatus = null;
@ -1948,8 +1958,9 @@ public class HikvisionCall {
* *
* @param enterpriseId * @param enterpriseId
* @param projectSn * @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<Project>().eq(Project::getProjectSn, projectSn)); Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, projectSn));
if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) { if (project == null || !Objects.equals(project.getSyncHikvision(), 1)) {
return; return;
@ -1960,10 +1971,7 @@ public class HikvisionCall {
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
jo.put("indexCodes", Arrays.asList(enterpriseId)); jo.put("indexCodes", Arrays.asList(enterpriseId));
String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
EnterpriseInfo enterpriseInfo = enterpriseInfoMapper.selectById(enterpriseId); sendNoticeForOrg("删除组织到海康isc", rs, enterpriseName);
if (enterpriseInfo != null) {
sendNoticeForOrg("删除组织到海康isc", rs, enterpriseInfo.getEnterpriseName());
}
} }
/** /**
@ -2157,11 +2165,7 @@ public class HikvisionCall {
jo.put("pageSize", 100); jo.put("pageSize", 100);
jo.put("orgIndexCodes", orgIndex); jo.put("orgIndexCodes", orgIndex);
String body = jo.toJSONString(); String body = jo.toJSONString();
String rs = HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); return HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
if (StringUtils.isBlank(rs)) {
throw new OpenPromptException("海康网络异常");
}
return rs;
} }
/** /**
@ -2585,5 +2589,26 @@ public class HikvisionCall {
return JSON.parseObject(HikvisionUtil.doPost(host, path, JSON.toJSONString(param), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret())); 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());
}
}
} }

View File

@ -1,6 +1,8 @@
package com.zhgd.xmgl.config; package com.zhgd.xmgl.config;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.xmgl.util.RequestIdUtil; import com.zhgd.xmgl.util.RequestIdUtil;
import com.zhgd.xmgl.util.ThreadLocalUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@ -18,6 +20,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
@Override @Override
public void execute(Runnable task) { public void execute(Runnable task) {
Map<String, String> context = MDC.getCopyOfContextMap(); //复制主线程MDC Map<String, String> context = MDC.getCopyOfContextMap(); //复制主线程MDC
JSONObject tlJo = ThreadLocalUtil.get();
log.info("MDC异步多线程..."); log.info("MDC异步多线程...");
super.execute(() -> { super.execute(() -> {
if (null != context) { if (null != context) {
@ -25,11 +28,13 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
} else { } else {
RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个 RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个
} }
ThreadLocalUtil.set(tlJo);
try { try {
task.run(); task.run();
} finally { } finally {
try { try {
RequestIdUtil.clear(); RequestIdUtil.clear();
ThreadLocalUtil.remove();
} catch (Exception e) { } catch (Exception e) {
log.warn("MDC clear exception{}", e.getMessage()); log.warn("MDC clear exception{}", e.getMessage());
} }
@ -43,6 +48,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
@Override @Override
public <T> Future<T> submit(Callable<T> task) { public <T> Future<T> submit(Callable<T> task) {
Map<String, String> context = MDC.getCopyOfContextMap(); //复制主线程MDC Map<String, String> context = MDC.getCopyOfContextMap(); //复制主线程MDC
JSONObject tlJo = ThreadLocalUtil.get();
log.info("MDC异步多线程..."); log.info("MDC异步多线程...");
return super.submit(() -> { return super.submit(() -> {
if (null != context) { if (null != context) {
@ -50,11 +56,13 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
} else { } else {
RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个 RequestIdUtil.setRequestId(); //主线程没有MDC就自己生成一个
} }
ThreadLocalUtil.set(tlJo);
try { try {
return task.call(); return task.call();
} finally { } finally {
try { try {
RequestIdUtil.clear(); RequestIdUtil.clear();
ThreadLocalUtil.remove();
} catch (Exception e) { } catch (Exception e) {
log.warn("MDC clear exception{}", e.getMessage()); log.warn("MDC clear exception{}", e.getMessage());
} }

View File

@ -18,4 +18,8 @@ public interface Cts {
String SUCCESS = "success"; String SUCCESS = "success";
String MSG = "msg"; String MSG = "msg";
String ENTERPRISE_ID = "enterpriseId"; String ENTERPRISE_ID = "enterpriseId";
/**
* 数据校验重试是否成功
*/
String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data";
} }

View File

@ -252,9 +252,9 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl<EnterpriseInfoMapper,
for (XzUserToSupplier xzUserToSupplier : xzUserToSuppliers) { for (XzUserToSupplier xzUserToSupplier : xzUserToSuppliers) {
systemUserService.deleteTenantOrSupplier(String.valueOf(xzUserToSupplier.getUserId()), projectSn); systemUserService.deleteTenantOrSupplier(String.valueOf(xzUserToSupplier.getUserId()), projectSn);
} }
EnterpriseInfo enterpriseInfo = baseMapper.selectById(enterpriseId);
//同步海康 //同步海康
asyncHikvision.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn); asyncHikvision.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn, enterpriseInfo.getEnterpriseName());
} }
@Override @Override

View File

@ -21,17 +21,13 @@ import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
import com.zhgd.xmgl.modules.x.entity.XzHikvisionCompareData; import com.zhgd.xmgl.modules.x.entity.XzHikvisionCompareData;
import com.zhgd.xmgl.modules.x.mapper.XzHikvisionCompareDataMapper; import com.zhgd.xmgl.modules.x.mapper.XzHikvisionCompareDataMapper;
import com.zhgd.xmgl.modules.x.service.IXzHikvisionCompareDataService; import com.zhgd.xmgl.modules.x.service.IXzHikvisionCompareDataService;
import com.zhgd.xmgl.util.HikvisionUtil; import com.zhgd.xmgl.util.*;
import com.zhgd.xmgl.util.MapBuilder;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -124,6 +120,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
List<String> idList = StrUtil.split(ids, ","); List<String> idList = StrUtil.split(ids, ",");
for (String id : idList) { for (String id : idList) {
XzHikvisionCompareData data = baseMapper.selectById(id); XzHikvisionCompareData data = baseMapper.selectById(id);
ThreadLocalUtil.addInKeyIfNotExist(Cts.TL_XZ_HIKVISION_COMPARE_DATA_RETRY, data);
ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(new MapBuilder<String, Object>().put(Cts.PROJECT_SN, data.getProjectSn()).build()); ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(new MapBuilder<String, Object>().put(Cts.PROJECT_SN, data.getProjectSn()).build());
EnterpriseInfo enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder<String, Object>() EnterpriseInfo enterpriseInfo = BeanUtil.toBean(enterpriseInfoService.getEnterpriseInfoById(new MapBuilder<String, Object>()
.put(Cts.PROJECT_SN, data.getProjectSn()).put(Cts.ENTERPRISE_ID, data.getUniqueId()).build()), EnterpriseInfo.class); .put(Cts.PROJECT_SN, data.getProjectSn()).put(Cts.ENTERPRISE_ID, data.getUniqueId()).build()), EnterpriseInfo.class);
@ -133,7 +130,7 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl<XzHikvisionCo
//同步海康 //同步海康
asyncHikvision.editEnterpriseInfoForHikvision(enterpriseInfo); asyncHikvision.editEnterpriseInfoForHikvision(enterpriseInfo);
} else { } else {
asyncHikvision.deleteEnterpriseInfoForHikvision(data.getUniqueId(), data.getProjectSn()); asyncHikvision.deleteEnterpriseInfoForHikvision(data.getUniqueId(), data.getProjectSn(), enterpriseInfo.getEnterpriseName());
} }
} else if (data.getExistIsc() == 0 && data.getExistMyPlatform() == 1) { } else if (data.getExistIsc() == 0 && data.getExistMyPlatform() == 1) {
//查询id是否存在isc存在就更新不存在就新增 //查询id是否存在isc存在就更新不存在就新增

View File

@ -63,8 +63,8 @@ public class HikvisionUtil {
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {
return rsJo.getJSONObject("data"); return rsJo.getJSONObject("data");
} else { } else {
log.error("海康解析结果失败:{}", rs); log.error("海康返回错误码:{}", rs);
return null; throw new OpenAlertException("海康返回错误码");
} }
} }
@ -79,7 +79,7 @@ public class HikvisionUtil {
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {
return rsJo.getJSONObject("data"); return rsJo.getJSONObject("data");
} else { } else {
log.error("海康解析结果失败:{}", rsJo.toJSONString()); log.error("海康返回错误码:{}", rsJo.toJSONString());
throw new OpenAlertException("海康调用失败"); throw new OpenAlertException("海康调用失败");
} }
} }
@ -93,7 +93,7 @@ public class HikvisionUtil {
if (Objects.equals(code, "0")) { if (Objects.equals(code, "0")) {
return rsJo.getJSONArray("data"); return rsJo.getJSONArray("data");
} else { } else {
log.error("海康解析结果失败:{}", rs); log.error("海康返回错误码:{}", rs);
return null; return null;
} }
} }

View File

@ -4,16 +4,34 @@ import com.alibaba.fastjson.JSONObject;
public class ThreadLocalUtil { public class ThreadLocalUtil {
private static final ThreadLocal<JSONObject> threadLocal = new ThreadLocal<>();
private ThreadLocalUtil() { private ThreadLocalUtil() {
} }
private static final ThreadLocal<JSONObject> threadLocal = new ThreadLocal<>();
public static void set(JSONObject str) { public static void set(JSONObject str) {
threadLocal.set(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) { public static void add(JSONObject str) {
if (get() == null) { if (get() == null) {
threadLocal.set(str); threadLocal.set(str);
@ -28,22 +46,19 @@ public class ThreadLocalUtil {
add(jo); add(jo);
} }
public static JSONObject get() { public static void addInKeyIfNotExist(String key, Object val) {
return threadLocal.get(); JSONObject jo = getNotNull();
if (!jo.containsKey(key)) {
jo = new JSONObject();
jo.put(key, val);
add(jo);
} }
public static JSONObject getNotNull() {
if (get() == null) {
threadLocal.set(new JSONObject());
}
return get();
} }
public static void remove() { public static void remove() {
threadLocal.remove(); threadLocal.remove();
} }
public static void main(String[] args) { public static void main(String[] args) {
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
jo.put("jo", "0"); jo.put("jo", "0");