From b9debfecd08ae30b8f3f31e2e684ec1c8d48e0b2 Mon Sep 17 00:00:00 2001 From: GUO <1923636941@qq.com> Date: Sat, 1 Jun 2024 14:37:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/config/DataSourceOneConfig.java | 4 +- .../com/zhgd/config/DataSourceTwoConfig.java | 4 +- .../java/com/zhgd/config/LogPrintFilter.java | 17 ++ .../com/zhgd/config/StdOutImplCustom.java | 63 ++++++++ .../com/zhgd/interceptor/LogInterceptor.java | 4 +- .../com/zhgd/xmgl/call/HikvisionCall.java | 145 +++++++++--------- .../java/com/zhgd/xmgl/config/TaskAspect.java | 19 ++- src/main/java/com/zhgd/xmgl/constant/Cts.java | 1 + .../XzHikvisionCompareDataServiceImpl.java | 22 +-- .../com/zhgd/xmgl/util/ThreadLocalUtil.java | 4 +- src/main/resources/application.properties | 2 +- src/main/resources/logback-spring.xml | 4 +- 12 files changed, 188 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/zhgd/config/LogPrintFilter.java create mode 100644 src/main/java/com/zhgd/config/StdOutImplCustom.java diff --git a/src/main/java/com/zhgd/config/DataSourceOneConfig.java b/src/main/java/com/zhgd/config/DataSourceOneConfig.java index 4a13d344d..220c812d9 100644 --- a/src/main/java/com/zhgd/config/DataSourceOneConfig.java +++ b/src/main/java/com/zhgd/config/DataSourceOneConfig.java @@ -3,12 +3,10 @@ package com.zhgd.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.zhgd.mybatis.DataScopeHandler; import com.zhgd.mybatis.DataScopeInterceptor; -import org.apache.ibatis.logging.stdout.StdOutImpl; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; @@ -43,7 +41,7 @@ public class DataSourceOneConfig { //开启驼峰 MybatisConfiguration configuration = new MybatisConfiguration(); configuration.setMapUnderscoreToCamelCase(true); - configuration.setLogImpl(StdOutImpl.class); + configuration.setLogImpl(StdOutImplCustom.class); bean.setConfiguration(configuration); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/zhgd/xmgl/**/*.xml")); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); diff --git a/src/main/java/com/zhgd/config/DataSourceTwoConfig.java b/src/main/java/com/zhgd/config/DataSourceTwoConfig.java index dec1c7881..29b8074d7 100644 --- a/src/main/java/com/zhgd/config/DataSourceTwoConfig.java +++ b/src/main/java/com/zhgd/config/DataSourceTwoConfig.java @@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerIntercept import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.zhgd.xmgl.tenant.TenantHandler; -import org.apache.ibatis.logging.stdout.StdOutImpl; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; @@ -21,7 +20,6 @@ import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; -import javax.annotation.Resource; import javax.sql.DataSource; @Configuration @@ -43,7 +41,7 @@ public class DataSourceTwoConfig { //开启驼峰 MybatisConfiguration configuration = new MybatisConfiguration(); configuration.setMapUnderscoreToCamelCase(true); - configuration.setLogImpl(StdOutImpl.class); + configuration.setLogImpl(StdOutImplCustom.class); bean.setConfiguration(configuration); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/wflow/**/*.xml")); MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); diff --git a/src/main/java/com/zhgd/config/LogPrintFilter.java b/src/main/java/com/zhgd/config/LogPrintFilter.java new file mode 100644 index 000000000..8f6070538 --- /dev/null +++ b/src/main/java/com/zhgd/config/LogPrintFilter.java @@ -0,0 +1,17 @@ +package com.zhgd.config; + +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.filter.Filter; +import ch.qos.logback.core.spi.FilterReply; + +public class LogPrintFilter extends Filter { + + @Override + public FilterReply decide(ILoggingEvent event) { + if (StdOutImplCustom.isPrint()) { + return FilterReply.ACCEPT; + } else { + return FilterReply.DENY; + } + } +} diff --git a/src/main/java/com/zhgd/config/StdOutImplCustom.java b/src/main/java/com/zhgd/config/StdOutImplCustom.java new file mode 100644 index 000000000..a27856d24 --- /dev/null +++ b/src/main/java/com/zhgd/config/StdOutImplCustom.java @@ -0,0 +1,63 @@ +package com.zhgd.config; + +import com.zhgd.xmgl.config.TaskAspect; +import com.zhgd.xmgl.constant.Cts; +import com.zhgd.xmgl.util.ThreadLocalUtil; +import org.apache.ibatis.logging.Log; + +import java.util.Objects; +import java.util.Optional; + +public class StdOutImplCustom implements Log { + + public StdOutImplCustom(String clazz) { + // Do Nothing + } + + public static Boolean isPrint() { + if (!Objects.equals(TaskAspect.onlyPrintInterface, 1)) { + return true; + } + return Optional.ofNullable(ThreadLocalUtil.getByKey(Cts.IF_FROM_TASK_KEY, Boolean.class)).map(b -> !b).orElse(true); + } + + @Override + public boolean isDebugEnabled() { + return isPrint(); + } + + @Override + public boolean isTraceEnabled() { + return isPrint(); + } + + @Override + public void error(String s, Throwable e) { + System.err.println(s); + e.printStackTrace(System.err); + } + + @Override + public void error(String s) { + System.err.println(s); + } + + @Override + public void debug(String s) { + if (isPrint()) { + System.out.println(s); + } + } + + @Override + public void trace(String s) { + if (isPrint()) { + System.out.println(s); + } + } + + @Override + public void warn(String s) { + System.out.println(s); + } +} diff --git a/src/main/java/com/zhgd/interceptor/LogInterceptor.java b/src/main/java/com/zhgd/interceptor/LogInterceptor.java index 9445cfab8..f918ccb34 100644 --- a/src/main/java/com/zhgd/interceptor/LogInterceptor.java +++ b/src/main/java/com/zhgd/interceptor/LogInterceptor.java @@ -15,7 +15,7 @@ public class LogInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - log.info("--------------------------------请求url:{}--------------------------------", request.getRequestURL()); + log.info("请求url:{}--------------------------------", request.getRequestURL()); return true; } @@ -26,4 +26,4 @@ public class LogInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } -} \ No newline at end of file +} diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 4d6eb4e35..b4cfb3b58 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -78,7 +78,6 @@ import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; import java.util.*; -import java.util.concurrent.CompletableFuture; @Slf4j @RestController @@ -524,83 +523,81 @@ public class HikvisionCall { @Async("getDoorEvents") public void getDoorEventsAsync(String startTime, String endTime, JSONObject param, String projectSn, List projects) { - CompletableFuture.runAsync(() -> { - for (Project project : projects) { - List ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper() - .eq(UfaceDev::getProjectSn, project.getProjectSn())); - for (UfaceDev ufaceDev : ufaceDevs) { - param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn())); - param.put(pageNo, 0); - param.put("pageSize", 1000); - Integer total = 0; - JSONArray listJa = new JSONArray(); - do { - String rs = null; - param.put("pageNo", param.getIntValue("pageNo") + 1); - try { - rs = getDoorEventsForHttp(project, param); - } catch (Exception e) { - log.error("err:", e); - return; - } - JSONObject joData = HikvisionUtil.getJSONObjectData(rs); - if (joData != null) { - total = joData.getInteger("total"); - if (!Objects.equals(total, 0)) { - listJa = joData.getJSONArray("list"); - for (int i = 0; i < listJa.size(); i++) { - JSONObject listJo = listJa.getJSONObject(i); - String eventTime = listJo.getString("eventTime"); - String personId = listJo.getString("personId"); - String personName = listJo.getString("personName"); - String doorIndexCode = listJo.getString("doorIndexCode"); - String picUri = listJo.getString("picUri"); - String svrIndexCode = listJo.getString("svrIndexCode"); - WorkerInfo workerInfo = workerInfoMapper.selectById(personId); - if (workerInfo == null) { - log.error("未找到该人员信息,personName:{}", personName); - continue; - } - HashMap map = new HashMap<>(); - String time = DateUtil.formatDateTime(DateUtil.parse(eventTime)); - map.put("passTime", time); - map.put("idCard", workerInfo.getIdCard()); - map.put("attendanceNumber", workerInfo.getAttendanceNumber()); - int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time); - map.put("direction", passType); - map.put("passType", 2); - map.put("projectCode", workerInfo.getProjectSn()); - map.put("devCode", doorIndexCode); - Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper() - .eq(WorkerAttendance::getCreateTime, time) - .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) - ); - if (count != 0) { - log.info("重复的人员通行的数据不保存,idCard:{},time:{}", workerInfo.getIdCard(), time); - return; - } - try { - HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq(); - rq.setPicUri(picUri); - rq.setSvrIndexCode(svrIndexCode); - map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()))); - } catch (Exception e) { - log.error("主动获取人脸图片失败>", e); - } - workerAttendanceService.saveExternalPassRecord(map); + for (Project project : projects) { + List ufaceDevs = ufaceDevMapper.selectList(new LambdaQueryWrapper() + .eq(UfaceDev::getProjectSn, project.getProjectSn())); + for (UfaceDev ufaceDev : ufaceDevs) { + param.put("doorIndexCodes", Collections.singletonList(ufaceDev.getDevSn())); + param.put(pageNo, 0); + param.put("pageSize", 1000); + Integer total = 0; + JSONArray listJa = new JSONArray(); + do { + String rs = null; + param.put("pageNo", param.getIntValue("pageNo") + 1); + try { + rs = getDoorEventsForHttp(project, param); + } catch (Exception e) { + log.error("err:", e); + return; + } + JSONObject joData = HikvisionUtil.getJSONObjectData(rs); + if (joData != null) { + total = joData.getInteger("total"); + if (!Objects.equals(total, 0)) { + listJa = joData.getJSONArray("list"); + for (int i = 0; i < listJa.size(); i++) { + JSONObject listJo = listJa.getJSONObject(i); + String eventTime = listJo.getString("eventTime"); + String personId = listJo.getString("personId"); + String personName = listJo.getString("personName"); + String doorIndexCode = listJo.getString("doorIndexCode"); + String picUri = listJo.getString("picUri"); + String svrIndexCode = listJo.getString("svrIndexCode"); + WorkerInfo workerInfo = workerInfoMapper.selectById(personId); + if (workerInfo == null) { + log.error("未找到该人员信息,personName:{}", personName); + continue; } + HashMap map = new HashMap<>(); + String time = DateUtil.formatDateTime(DateUtil.parse(eventTime)); + map.put("passTime", time); + map.put("idCard", workerInfo.getIdCard()); + map.put("attendanceNumber", workerInfo.getAttendanceNumber()); + int passType = workerAttendanceServiceImpl.getPassType(ufaceDev, time); + map.put("direction", passType); + map.put("passType", 2); + map.put("projectCode", workerInfo.getProjectSn()); + map.put("devCode", doorIndexCode); + Integer count = workerAttendanceMapper.selectCount(new LambdaQueryWrapper() + .eq(WorkerAttendance::getCreateTime, time) + .eq(WorkerAttendance::getPersonSn, workerInfo.getPersonSn()) + ); + if (count != 0) { + log.info("重复的人员通行的数据不保存,idCard:{},time:{}", workerInfo.getIdCard(), time); + return; + } + try { + HikvisionEventsPictureRq rq = new HikvisionEventsPictureRq(); + rq.setPicUri(picUri); + rq.setSvrIndexCode(svrIndexCode); + map.put("faceUrl", saveToLocal(getHikvisionEventsPicture(rq, project.getArtemisConfigHost(), project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()))); + } catch (Exception e) { + log.error("主动获取人脸图片失败>", e); + } + workerAttendanceService.saveExternalPassRecord(map); } } - } while (total > param.getInteger(pageNo) * 1000); - } - try { - workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn); - } catch (Exception e) { - log.error("主动更新在场人员失败,projectSn:{},>", projectSn, e); - } + } + } while (total > param.getInteger(pageNo) * 1000); } - log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成,startTime:{},endTime:{}", startTime, endTime); - }); + try { + workerAttendancePresenceService.addNowAllWorkerAttendancePresence(projectSn); + } catch (Exception e) { + log.error("主动更新在场人员失败,projectSn:{},>", projectSn, e); + } + } + log.info("服务挂了主动获取门禁点事件的人员通行记录执行完成,startTime:{},endTime:{}", startTime, endTime); } @ApiOperation(value = "服务挂了主动获取查询过车记录", notes = "服务挂了主动获取查询过车记录", httpMethod = "POST") diff --git a/src/main/java/com/zhgd/xmgl/config/TaskAspect.java b/src/main/java/com/zhgd/xmgl/config/TaskAspect.java index 3c1d44dad..27bda511a 100644 --- a/src/main/java/com/zhgd/xmgl/config/TaskAspect.java +++ b/src/main/java/com/zhgd/xmgl/config/TaskAspect.java @@ -1,6 +1,8 @@ package com.zhgd.xmgl.config; +import com.zhgd.xmgl.constant.Cts; import com.zhgd.xmgl.util.RequestIdUtil; +import com.zhgd.xmgl.util.ThreadLocalUtil; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -8,6 +10,7 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.MDC; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -18,6 +21,12 @@ import java.util.Map; @Component @Slf4j public class TaskAspect { + public static Integer onlyPrintInterface; + + @Value("${onlyPrintInterface:0}") + public void setOnlyPrintInterface(Integer onlyPrintInterface) { + TaskAspect.onlyPrintInterface = onlyPrintInterface; + } @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)") public void servicePointcut() { @@ -36,7 +45,8 @@ public class TaskAspect { if (null == context) { RequestIdUtil.setRequestId("-t"); //主线程没有MDC就自己生成一个 - log.info("task方法开始:{}",methodName); + ThreadLocalUtil.addInKey(Cts.IF_FROM_TASK_KEY, true); + log.info("task方法开始:{}", methodName); } // 获取方法所有参数及其类型 @@ -50,16 +60,17 @@ public class TaskAspect { Scheduled annotation = method.getAnnotation(Scheduled.class); // 获取注解标识值与注解描述 - // String value = annotation.value(); - // String desc = annotation.description(); + // String value = annotation.value(); + // String desc = annotation.description(); // 执行目标方法 Object proceed = jointPoint.proceed(); } } finally { if (null == context) { - log.info("task方法结束:{}",methodName); + log.info("task方法结束:{}", methodName); RequestIdUtil.clear(); + ThreadLocalUtil.remove(); } } } diff --git a/src/main/java/com/zhgd/xmgl/constant/Cts.java b/src/main/java/com/zhgd/xmgl/constant/Cts.java index 2b09bd56c..ae9dab8d1 100644 --- a/src/main/java/com/zhgd/xmgl/constant/Cts.java +++ b/src/main/java/com/zhgd/xmgl/constant/Cts.java @@ -24,4 +24,5 @@ public interface Cts { String TL_XZ_HIKVISION_COMPARE_DATA_RETRY = "tl_xz_hikvision_compare_data"; String TYPE = "type"; String TEAM_ID = "teamId"; + String IF_FROM_TASK_KEY = "ifFromTaskKey"; } diff --git a/src/main/java/com/zhgd/xmgl/modules/x/service/impl/XzHikvisionCompareDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/x/service/impl/XzHikvisionCompareDataServiceImpl.java index 10d8da868..b8c7eaadc 100644 --- a/src/main/java/com/zhgd/xmgl/modules/x/service/impl/XzHikvisionCompareDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/x/service/impl/XzHikvisionCompareDataServiceImpl.java @@ -168,12 +168,12 @@ public class XzHikvisionCompareDataServiceImpl extends ServiceImpl T getByKey(String key, Class clz) { if (get() == null) { return null; } - return get().getJSONObject(key); + return (T) get().get(key); } public static void add(JSONObject str) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4afd9a999..ce6cc0e69 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -30,7 +30,7 @@ mybatis-plus.configuration.call-setters-on-nulls=true spring.jackson.defaultPropertyInclusion=ALWAYS # mybatis 配置 mybatis-plus.mapper-locations=classpath*:com/zhgd/xmgl/**/*.xml,classpath*:com/zhwl/zw/**/*.xml -mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl +mybatis-plus.configuration.log-impl=com.zhgd.config.StdOutImplCustom # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2) #mybatis-plus.global-config.db-config.logic-delete-field=flag mybatis-plus.global-config.db-config.logic-delete-value=1 diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 735b58e04..e4b51e799 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -6,8 +6,10 @@ - %d{yyyy-MM-dd HH:mm:ss} [%X{requestId}][%thread] %highlight(%-5level) %method:%L %cyan(%logger{50}) - %highlight(%msg) %n + %d{yyyy-MM-dd HH:mm:ss} [%highlight(%X{requestId})][%thread] %highlight(%-5level) %cyan(%logger{50}).%method:%L - %highlight(%msg) %n + +