Browse Source

Merge branch 'V0.0.6-iot' of http://10.87.21.221:8000/jzyd_yyds/soc into V0.0.6-iot

zhulu 1 year ago
parent
commit
d5e15be2c0
47 changed files with 640 additions and 194 deletions
  1. 38 2
      project_data/sql/0.0.6-iot/soc/soc.sql
  2. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocThreadFactory.java
  3. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocUncaughtExceptionHandler.java
  4. 1 1
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/ThreadPoolConfig.java
  5. 2 1
      soc-common/soc-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  6. 1 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java
  7. 1 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java
  8. 1 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java
  9. 1 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java
  10. 1 4
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java
  11. 1 12
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreOutInRecordServiceImpl.java
  12. 1 9
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java
  13. 1 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/controller/CoreRegisterBookPdfController.java
  14. 1 6
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java
  15. 1 2
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyindex/service/impl/CoreSafetyExceptionDataServiceImpl.java
  16. 7 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/DvrDiskController.java
  17. 41 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotBoardController.java
  18. 1 4
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotSensorController.java
  19. 8 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/VideoDiagnosisController.java
  20. 22 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotBoardMapper.java
  21. 2 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDvrChannelMapper.java
  22. 10 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotBoardService.java
  23. 2 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDvsDiskService.java
  24. 1 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/VideoDiagnosisService.java
  25. 0 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmDataServiceImpl.java
  26. 126 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotBoardServiceImpl.java
  27. 13 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotCommonSensorServiceImpl.java
  28. 11 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDvrDiskServiceImpl.java
  29. 7 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/VideoDiagnosisServiceImpl.java
  30. 25 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/board/IotBoardOverviewItemVo.java
  31. 20 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/board/IotBoardOverviewVo.java
  32. 0 1
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/dvrDisk/DvrDiskAppPageVo.java
  33. 12 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/dvrDisk/DvrDiskPageVo.java
  34. 9 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/SensorPageVo.java
  35. 12 0
      soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisWebPageVo.java
  36. 6 1
      soc-modules/soc-modules-iot/src/main/resources/mapper/DvrDiskMapper.xml
  37. 3 0
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotAlarmDataMapper.xml
  38. 102 0
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotBoardMapper.xml
  39. 20 3
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml
  40. 1 1
      soc-modules/soc-modules-iot/src/main/resources/mapper/IotSensorMapper.xml
  41. 2 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotAlarmDataService.java
  42. 53 36
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java
  43. 38 68
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrChannelServiceImpl.java
  44. 1 15
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java
  45. 17 0
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrHardDiskDetectionServiceImpl.java
  46. 13 5
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/VideoIntegrityCheckServiceImpl.java
  47. 2 1
      soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java

File diff suppressed because it is too large
+ 38 - 2
project_data/sql/0.0.6-iot/soc/soc.sql


+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/SocThreadFactory.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocThreadFactory.java

@@ -1,4 +1,4 @@
-package com.xunmei.core.thread;
+package com.xunmei.common.core.thread;
 
 import lombok.AllArgsConstructor;
 

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/SocUncaughtExceptionHandler.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/SocUncaughtExceptionHandler.java

@@ -1,4 +1,4 @@
-package com.xunmei.core.thread;
+package com.xunmei.common.core.thread;
 
 import lombok.extern.slf4j.Slf4j;
 

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/thread/ThreadPoolConfig.java → soc-common/soc-common-core/src/main/java/com/xunmei/common/core/thread/ThreadPoolConfig.java

@@ -1,4 +1,4 @@
-package com.xunmei.core.thread;
+package com.xunmei.common.core.thread;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;

+ 2 - 1
soc-common/soc-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1,4 +1,5 @@
 com.xunmei.common.core.utils.SpringUtils
 com.xunmei.common.core.config.MybatisPlusConfig
 com.xunmei.common.core.config.TokenSettings
-com.xunmei.common.core.config.StaticInitializerUtil
+com.xunmei.common.core.config.StaticInitializerUtil
+com.xunmei.common.core.thread.ThreadPoolConfig

+ 1 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/board/service/impl/AppCockpitServiceImpl.java

@@ -7,7 +7,6 @@ import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
-import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.enums.CycleCommonEnum;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.exception.ServiceException;
@@ -20,10 +19,9 @@ import com.xunmei.core.board.mapper.CockpitMapper;
 import com.xunmei.core.board.service.AppCockpitService;
 import com.xunmei.core.board.vo.app.*;
 import com.xunmei.core.board.vo.web.TaskStatisticVo;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
-import io.reactivex.rxjava3.core.Single;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -32,7 +30,6 @@ import org.springframework.stereotype.Service;
 import reactor.function.Predicate3;
 
 import javax.annotation.Resource;
-import javax.swing.*;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;

+ 1 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -26,8 +26,6 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanRoleVo;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingPlanDataVo;
 import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.enums.drill.DrillDoStatus;
 import com.xunmei.common.core.enums.drill.DrillPlanCycleEnum;
@@ -36,7 +34,6 @@ import com.xunmei.common.core.enums.edu.EduTrainingDoStatus;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanStatus;
 import com.xunmei.common.core.exception.ServiceException;
-import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.util.BeanHelper;
 import com.xunmei.common.core.utils.AssertUtil;
 import com.xunmei.common.core.utils.DateUtils;
@@ -50,8 +47,7 @@ import com.xunmei.core.drill.service.ICoreDrillPlanToExecOrgService;
 import com.xunmei.core.drill.service.ICoreDrillPlanToRoleService;
 import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.resumption.service.IResumptionRegisterService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;

+ 1 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -2,7 +2,6 @@ package com.xunmei.core.drill.service.impl;
 
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -15,14 +14,12 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
 import com.xunmei.common.core.constant.*;
 import com.xunmei.common.core.domain.DateRange;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.domain.drill.domain.*;
 import com.xunmei.common.core.domain.drill.dto.*;
 import com.xunmei.common.core.domain.drill.vo.*;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingPlan;
 import com.xunmei.common.core.domain.panel.dto.PanelListDto;
 import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
@@ -54,7 +51,7 @@ import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.core.drill.service.ICoreDrillTaskToUserService;
 import com.xunmei.core.edu.service.impl.ValueCellWriteHandler;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.*;
 import com.xunmei.system.api.domain.SysConfig;
 import com.xunmei.system.api.domain.SysDictData;
@@ -73,12 +70,10 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.File;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;

+ 1 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -17,7 +17,6 @@ import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.DateRange;
 import com.xunmei.common.core.domain.IdName;
-import com.xunmei.common.core.domain.drill.domain.CoreDrillPlan;
 import com.xunmei.common.core.domain.edu.domain.*;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanEditDto;
 import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanInsertDto;
@@ -44,7 +43,7 @@ import com.xunmei.core.edu.service.ICoreEduTrainingPlanToExecOrgService;
 import com.xunmei.core.edu.service.ICoreEduTrainingPlanToRoleService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;

+ 1 - 4
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingTaskServiceImpl.java

@@ -2,7 +2,6 @@ package com.xunmei.core.edu.service.impl;
 
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -48,7 +47,7 @@ import com.xunmei.core.edu.mapper.*;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.edu.service.ICoreEduTrainingTaskToUserService;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteRoleService;
@@ -68,13 +67,11 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.File;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.text.NumberFormat;
 import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;

+ 1 - 12
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/letter/service/impl/CoreOutInRecordServiceImpl.java

@@ -3,7 +3,6 @@ package com.xunmei.core.letter.service.impl;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
@@ -14,12 +13,7 @@ import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.R;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTask;
-import com.xunmei.common.core.domain.edu.domain.CoreEduTrainingTaskToUser;
-import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskDetailVo;
-import com.xunmei.common.core.domain.letter.domain.CoreIntroduceLetter;
 import com.xunmei.common.core.domain.letter.domain.CoreIntroduceLetterApproveLog;
-import com.xunmei.common.core.domain.letter.domain.CoreIntroduceLetterUser;
 import com.xunmei.common.core.domain.letter.domain.CoreOutInRecord;
 import com.xunmei.common.core.domain.letter.dto.CoreOutInRecordRequestDto;
 import com.xunmei.common.core.domain.letter.vo.CoreOutInRecordVo;
@@ -32,19 +26,15 @@ import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
-import com.xunmei.core.letter.mapper.CoreIntroduceLetterApproveLogMapper;
 import com.xunmei.core.letter.mapper.CoreIntroduceLetterMapper;
-import com.xunmei.core.letter.mapper.CoreIntroduceLetterUserMapper;
 import com.xunmei.core.letter.mapper.CoreOutInRecordMapper;
 import com.xunmei.core.letter.service.ICoreOutInRecordService;
 
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
-import com.xunmei.system.api.RemoteUserService;
 import com.xunmei.system.api.domain.SysOrg;
-import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import com.xunmei.system.api.vo.SysOrgVO;
 import io.netty.util.internal.StringUtil;
@@ -56,7 +46,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.io.File;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;

+ 1 - 9
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/panel/service/impl/PanelServiceImpl.java

@@ -1,18 +1,12 @@
 package com.xunmei.core.panel.service.impl;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.google.common.collect.Lists;
 
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson2.JSONArray;
-import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.edu.dto.SysLearningMaterialsPageDto;
 import com.xunmei.common.core.domain.edu.vo.SysLearningMaterialsPageVo;
-import com.xunmei.common.core.domain.letter.dto.CoreIntroduceLetterApproveRequestDto;
 import com.xunmei.common.core.domain.message.dto.CoreAnnouncementNotificationAppPageDto;
 import com.xunmei.common.core.domain.message.vo.FileObject;
 import com.xunmei.common.core.domain.message.vo.MessageAppPageVo;
@@ -29,7 +23,6 @@ import com.xunmei.core.edu.service.ICoreEduTrainingTaskService;
 import com.xunmei.core.edu.service.ISysLearningMaterialsService;
 import com.xunmei.core.evaluate.service.ICoreEvaluateTaskService;
 import com.xunmei.core.letter.service.ICoreIntroduceLetterService;
-import com.xunmei.core.letter.service.ICoreOutInRecordService;
 import com.xunmei.core.message.service.ICoreAnnouncementNotificationService;
 import com.xunmei.core.panel.service.PanelService;
 import com.xunmei.core.question.service.IQuestionService;
@@ -37,13 +30,12 @@ import com.xunmei.core.resumption.service.IProtectionService;
 import com.xunmei.core.resumption.service.ResumptionService;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
 import com.xunmei.core.safetyCheck.service.ICoreSafetyTaskService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteRoleService;
 import com.xunmei.system.api.RemoteUserService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
-import com.xunmei.system.api.model.LoginUser;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/registerbook/controller/CoreRegisterBookPdfController.java

@@ -13,7 +13,7 @@ import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.core.registerbook.service.ICoreRegisterBookPdfService;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 1 - 6
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -1,7 +1,6 @@
 package com.xunmei.core.resumption.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -29,7 +28,6 @@ import com.xunmei.common.core.exception.SystemException;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.IDHelper;
 import com.xunmei.common.core.vo.IdNameVo;
-import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.common.security.utils.SecurityUtils;
@@ -48,9 +46,7 @@ import com.xunmei.core.resumption.service.IResumptionRecordService;
 import com.xunmei.core.resumption.task.ResumptionTaskBusinessService;
 import com.xunmei.core.resumption.vo.appPlan.*;
 import com.xunmei.core.resumption.vo.resumptionRecord.AppResumptionDataInfoVo;
-import com.xunmei.core.resumption.vo.resumptionRecord.ResumptionRecordItemVo;
-import com.xunmei.core.resumption.vo.resumptionRecord.ResumptionRecordVo;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteFileService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.ResumptionPdf;
@@ -71,7 +67,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.time.LocalDate;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;

+ 1 - 2
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyindex/service/impl/CoreSafetyExceptionDataServiceImpl.java

@@ -2,7 +2,6 @@ package com.xunmei.core.safetyindex.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -21,7 +20,7 @@ import com.xunmei.core.resumption.service.ResumptionService;
 import com.xunmei.core.retrieval.service.ICoreMonitoringRetrievalTaskService;
 import com.xunmei.core.safetyindex.mapper.CoreSafetyExceptionDataMapper;
 import com.xunmei.core.safetyindex.service.*;
-import com.xunmei.core.thread.ThreadPoolConfig;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.vo.SysOrgVO;

+ 7 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/DvrDiskController.java

@@ -64,4 +64,11 @@ class DvrDiskController {
         TableDataInfo<DvrDiskAppPageVo> page = this.dvrDiskService.appPage(request);
         return page;
     }
+
+    @ApiOperation("有异常的硬盘数量")
+    @GetMapping({"/app/badge/{orgId}"})
+    AjaxResult badge(@PathVariable("orgId") Long orgId) {
+        Integer count = this.dvrDiskService.badge(orgId);
+        return AjaxResult.success(count);
+    }
 }

+ 41 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotBoardController.java

@@ -0,0 +1,41 @@
+package com.xunmei.iot.controller;
+
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.domain.PageDto;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.iot.dto.dvrDisk.DvrDiskAlarmHistoryPageDto;
+import com.xunmei.iot.dto.dvrDisk.DvrDiskAppPageDto;
+import com.xunmei.iot.dto.dvrDisk.DvrDiskPageDto;
+import com.xunmei.iot.service.IotBoardService;
+import com.xunmei.iot.service.IotDvsDiskService;
+import com.xunmei.iot.vo.board.IotBoardOverviewVo;
+import com.xunmei.iot.vo.dvrDisk.DvrDiskAlarmHistoryPageVo;
+import com.xunmei.iot.vo.dvrDisk.DvrDiskAppPageVo;
+import com.xunmei.iot.vo.dvrDisk.DvrDiskPageVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+@Slf4j
+@Api(description = "中台", tags = {"录像机硬盘检测"})
+@RestController
+@RequestMapping({"/board"})
+class IotBoardController {
+    @Autowired
+    IotBoardService iotBoardService;
+
+//    @Resource
+//    VideoRecorderHardDiskDetectionService videoRecorderHardDiskDetectionService;
+
+    @ApiOperation("分页")
+    @PostMapping({"/app"})
+    AjaxResult overview(@RequestBody final PageDto request)  throws ExecutionException, InterruptedException, TimeoutException {
+        IotBoardOverviewVo vo = this.iotBoardService.overview(request.getOrgId());
+        return AjaxResult.success(vo);
+    }
+}

+ 1 - 4
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/IotSensorController.java

@@ -44,11 +44,8 @@ public class IotSensorController {
         return page;
     }
 
-    /**
-     * 导出excel
-     */
+
     @ApiOperation(value = "导出动环设备")
-    //@RequiresPermissions("core:eduTask:export")
     @Log(title = "导出动环设备", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(SensorPageDto request, HttpServletResponse response) throws IOException {

+ 8 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/controller/VideoDiagnosisController.java

@@ -11,6 +11,7 @@ import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisIntegrityVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebPageVo;
 import com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisWebVo;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -55,6 +56,13 @@ public class VideoDiagnosisController {
         return page;
     }
 
+    @ApiOperation("有异常的硬盘数量")
+    @GetMapping({"/app/badge/{orgId}"})
+    AjaxResult badge(@PathVariable("orgId") Long orgId) {
+        Integer count = this.videoDiagnosisService.appBadge(orgId);
+        return AjaxResult.success(count);
+    }
+
 //    @PostMapping("/app/detail/{hostCode}/{channelCode}")
 //    public TableDataInfo<VideoDiagnosisAppPageVo> appInfo(@PathVariable("hostCode") String hostCode, @PathVariable("channelCode") String channelCode) {
 //        TableDataInfo<VideoDiagnosisAppPageVo> page = this.videoDiagnosisService.getAppPageData(pageDto);

+ 22 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotBoardMapper.java

@@ -0,0 +1,22 @@
+package com.xunmei.iot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.iot.vo.board.IotBoardOverviewItemVo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface IotBoardMapper extends BaseMapper {
+    IotBoardOverviewItemVo device(String orgPath);
+
+    IotBoardOverviewItemVo subsystem(String orgPath);
+
+    IotBoardOverviewItemVo sensor(String orgPath);
+
+    IotBoardOverviewItemVo videoInterity(String orgPath);
+
+    IotBoardOverviewItemVo videoDays(String orgPath);
+
+    IotBoardOverviewItemVo videoQuality(String orgPath);
+
+    IotBoardOverviewItemVo dvrDisk(String orgPath);
+}

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/mapper/IotDvrChannelMapper.java

@@ -35,4 +35,6 @@ public interface IotDvrChannelMapper extends BaseMapper<IotDvrChannel> {
     Page<VideoDiagnosisAppPageVo> selectAppPage(@Param("page") Page<VideoDiagnosisAppPageVo> page,
                                                 @Param("pageDto") VideoDiagnosisAppPageDto pageDto,
                                                 @Param("orgPath") String orgPath);
+
+    Integer selectBadge(Long orgId);
 }

+ 10 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotBoardService.java

@@ -0,0 +1,10 @@
+package com.xunmei.iot.service;
+
+import com.xunmei.iot.vo.board.IotBoardOverviewVo;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+public interface IotBoardService {
+    IotBoardOverviewVo overview(Long orgId)  throws ExecutionException, InterruptedException, TimeoutException;
+}

+ 2 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/IotDvsDiskService.java

@@ -25,4 +25,6 @@ public interface IotDvsDiskService extends IService<IotDvrDisk> {
     DvrDiskStatisticVo diskStatistic(DvrDiskPageDto request);
 
     TableDataInfo<DvrDiskAppPageVo> appPage(DvrDiskAppPageDto request);
+
+    Integer badge(Long orgId);
 }

+ 1 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/VideoDiagnosisService.java

@@ -29,4 +29,5 @@ public interface VideoDiagnosisService extends IService<IotDvrChannel> {
 
     TableDataInfo<VideoDiagnosisAppPageVo> getAppPageData(VideoDiagnosisAppPageDto request);
 
+    Integer appBadge(Long orgId);
 }

+ 0 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmDataServiceImpl.java

@@ -1,7 +1,6 @@
 package com.xunmei.iot.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;

+ 126 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotBoardServiceImpl.java

@@ -0,0 +1,126 @@
+package com.xunmei.iot.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.thread.ThreadPoolConfig;
+import com.xunmei.iot.mapper.IotBoardMapper;
+import com.xunmei.iot.service.IotBoardService;
+import com.xunmei.iot.vo.board.IotBoardOverviewItemVo;
+import com.xunmei.iot.vo.board.IotBoardOverviewVo;
+import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.domain.SysOrg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+@Service
+public class IotBoardServiceImpl implements IotBoardService {
+    @Autowired
+    RemoteOrgService remoteOrgService;
+
+    @Autowired
+    IotBoardMapper iotBoardMapper;
+
+    @Autowired
+    @Qualifier(ThreadPoolConfig.SOC_EXECUTOR)
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+    private final Long TIMEOUT = 3L;
+
+    @Override
+    public IotBoardOverviewVo overview(Long orgId) throws ExecutionException, InterruptedException, TimeoutException {
+        IotBoardOverviewVo vo = new IotBoardOverviewVo();
+        SysOrg org = remoteOrgService.selectOrgById(orgId, SecurityConstants.INNER);
+        CompletableFuture<IotBoardOverviewItemVo> hostFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.device(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> subsystemFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.subsystem(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> sensorFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.sensor(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> videoInterityFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.videoInterity(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> videoDaysFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.videoDays(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> videoQualityFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.videoQuality(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<IotBoardOverviewItemVo> dvrDiskFuture = CompletableFuture.supplyAsync(() -> {
+                    IotBoardOverviewItemVo result = iotBoardMapper.dvrDisk(org.getPath());
+                    if (ObjectUtil.isNull(result)) {
+                        result = new IotBoardOverviewItemVo();
+                    }
+                    return result;
+                }
+                , threadPoolTaskExecutor
+        );
+
+        CompletableFuture<Void> allQueries = CompletableFuture.allOf(
+                hostFuture, subsystemFuture, sensorFuture,
+                videoDaysFuture, videoInterityFuture, videoQualityFuture, dvrDiskFuture
+        );
+
+        allQueries.get(TIMEOUT, TimeUnit.SECONDS);
+        vo.setHost(hostFuture.get());
+        vo.setSubsystem(subsystemFuture.get());
+        vo.setSensor(sensorFuture.get());
+        vo.setDvrDisk(dvrDiskFuture.get());
+        vo.setVideoDays(videoDaysFuture.get());
+        vo.setVideoInterity(videoInterityFuture.get());
+        vo.setVideoQuality(videoQualityFuture.get());
+
+        return vo;
+    }
+}

+ 13 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotCommonSensorServiceImpl.java

@@ -8,12 +8,15 @@ import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.bean.BeanUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.common.security.utils.DictUtils;
 import com.xunmei.iot.dto.sensor.SensorAppPageDto;
 import com.xunmei.iot.vo.sensor.SensorAppStateVo;
@@ -28,6 +31,7 @@ import com.xunmei.iot.vo.sensor.SensorExportVo;
 import com.xunmei.iot.vo.sensor.SensorPageVo;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.vo.SysOrgVO;
 import io.netty.util.internal.StringUtil;
 import org.springframework.stereotype.Service;
 
@@ -35,8 +39,10 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.net.URLEncoder;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -63,8 +69,15 @@ public class IotCommonSensorServiceImpl extends ServiceImpl<IotCommonSensorMappe
         dealPageParam(request);
 
         Page<SensorPageVo> page = sensorMapper.selectPageData(request.getPageRequest(), request);
+        final List<SysOrgVO> cacheList = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+
         for (SensorPageVo record : page.getRecords()) {
             final String info = record.getInfo();
+            final List<Long> collect = Arrays.stream(record.getOrgPath().split("-")).map(Long::parseLong).collect(Collectors.toList());
+            //地区名称
+            cacheList.stream().filter(org->collect.contains(org.getId())&&OrgTypeEnum.DIQU_HANG_SHE.getCode().equals(org.getType())).findFirst().ifPresent(org->record.setFirstOrgName(org.getShortName()));
+            //行社名称
+            cacheList.stream().filter(org->collect.contains(org.getId())&&OrgTypeEnum.HANG_SHE.getCode().equals(org.getType())).findFirst().ifPresent(org->record.setSecondOrgName(org.getShortName()));
             record.setInfo(dealInfoData(info));
             record.setDeviceType(DictUtils.getDictLabel(DictConstants.SENSOR_DEVICE_TYPE, Integer.parseInt(record.getDeviceType())));
             record.setStateText(DictUtils.getDictLabel(DictConstants.SENSOR_ALARM_STATUS, record.getState()));

+ 11 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotDvrDiskServiceImpl.java

@@ -5,10 +5,12 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.iot.dto.dvrDisk.DvrDiskAlarmHistoryPageDto;
@@ -125,4 +127,13 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
         });
         return TableDataInfo.success(page);
     }
+
+    @Override
+    public Integer badge(Long orgId) {
+        Long count = baseMapper.selectCount(new LambdaQueryWrapper<IotDvrDisk>()
+                .eq(IotDvrDisk::getOrgId, orgId)
+                .eq(IotDvrDisk::getState, 1)
+                .eq(IotDvrDisk::getDeleted, 0));
+        return count.intValue();
+    }
 }

+ 7 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/VideoDiagnosisServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDvrChannel;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 import com.xunmei.common.core.domain.video.MediatorVideoIntegrityCheck;
 import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.enums.iot.VideoIntegrityStatus;
@@ -131,6 +132,12 @@ public class VideoDiagnosisServiceImpl extends ServiceImpl<IotDvrChannelMapper,
         return vo;
     }
 
+    @Override
+    public Integer appBadge(Long orgId) {
+        Integer count = baseMapper.selectBadge(orgId);
+        return count;
+    }
+
     private void setUnknownDate(VideoDiagnosisStorageVo storage, Date earliest) {
         storage.setUnknownDates(new ArrayList<>());
         Date start = DateUtil.beginOfDay(earliest);

+ 25 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/board/IotBoardOverviewItemVo.java

@@ -0,0 +1,25 @@
+package com.xunmei.iot.vo.board;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class IotBoardOverviewItemVo {
+    @ApiModelProperty("分类名称")
+    private String name;
+
+    @ApiModelProperty("数量")
+    private int count;
+
+    @ApiModelProperty("未知")
+    private int unknown;
+
+    @ApiModelProperty("正常、在线、布防数量、未丢失")
+    private int normal;
+
+    @ApiModelProperty("报警、离线、撤防数量、全部丢失")
+    private int exception;
+
+    @ApiModelProperty("中断,部分丢失")
+    private int other1;
+}

+ 20 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/board/IotBoardOverviewVo.java

@@ -0,0 +1,20 @@
+package com.xunmei.iot.vo.board;
+
+import lombok.Data;
+
+@Data
+public class IotBoardOverviewVo {
+    private IotBoardOverviewItemVo host;
+
+    private IotBoardOverviewItemVo subsystem;
+
+    private IotBoardOverviewItemVo sensor;
+
+    private IotBoardOverviewItemVo videoInterity;
+
+    private IotBoardOverviewItemVo videoDays;
+
+    private IotBoardOverviewItemVo videoQuality;
+
+    private IotBoardOverviewItemVo dvrDisk;
+}

+ 0 - 1
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/dvrDisk/DvrDiskAppPageVo.java

@@ -24,7 +24,6 @@ public class DvrDiskAppPageVo {
     @ApiModelProperty("磁盘信息")
     private List<IotDvrDisk> diskInfos;
 
-    @JsonIgnore
     private Integer state;
 
     @ApiModelProperty("异常数量")

+ 12 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/dvrDisk/DvrDiskPageVo.java

@@ -1,5 +1,7 @@
 package com.xunmei.iot.vo.dvrDisk;
 
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -33,6 +35,16 @@ public class DvrDiskPageVo {
 //   @JsonSerialize(using = ToStringSerializer.class)
 //   private Long orgId;
 
+   @ApiModelProperty("地区")
+   @ExcelProperty(value="地区",index = 2)
+   @ColumnWidth(20)
+   private String affiliatedArea;
+
+   @ApiModelProperty("行社名称")
+   @ExcelProperty(value="行社名称",index = 3)
+   @ColumnWidth(20)
+   private String affiliatedBank;
+
    @ApiModelProperty("所属机构")
    private String orgName;
 

+ 9 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/sensor/SensorPageVo.java

@@ -1,6 +1,7 @@
 package com.xunmei.iot.vo.sensor;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
 import io.swagger.annotations.ApiModelProperty;
@@ -26,6 +27,10 @@ public class SensorPageVo {
     @ApiModelProperty("机构id")
     private Long orgId;
 
+    @JsonIgnore
+    @ApiModelProperty("机构路径")
+    private String orgPath;
+
     @ApiModelProperty("所属机构")
     private String orgName;
 
@@ -45,4 +50,8 @@ public class SensorPageVo {
     @ApiModelProperty("设备code")
     private String deviceCode;
 
+    private String firstOrgName;
+
+    private String secondOrgName;
+
 }

+ 12 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/videoDiagnosis/VideoDiagnosisWebPageVo.java

@@ -1,5 +1,7 @@
 package com.xunmei.iot.vo.videoDiagnosis;
 
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -11,6 +13,16 @@ public class VideoDiagnosisWebPageVo {
     @ApiModelProperty("通道code")
     private String channelCode;
 
+    @ApiModelProperty("地区")
+    @ExcelProperty(value="地区",index = 2)
+    @ColumnWidth(20)
+    private String affiliatedArea;
+
+    @ApiModelProperty("行社名称")
+    @ExcelProperty(value="行社名称",index = 3)
+    @ColumnWidth(20)
+    private String affiliatedBank;
+
     @ApiModelProperty("组织机构")
     private String orgName;
 

+ 6 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/DvrDiskMapper.xml

@@ -8,6 +8,8 @@
         <result column="ip" property="ip"/>
         <result column="orgId" property="orgId"/>
         <result column="orgName" property="orgName"/>
+        <result column="affiliated_area" property="affiliatedArea"/>
+        <result column="affiliated_bank" property="affiliatedBank"/>
         <result column="netState" property="netState"/>
         <!--        <result column="status" property="status"/>-->
         <!--        <result column="alarmTime" property="alarmTime"/>-->
@@ -49,6 +51,8 @@
         d.equipment_name AS equipmentName,
         d.net_address as ip,
         d.org_name AS orgName,
+        o.affiliated_area,
+        o.affiliated_bank,
         d.producer as brand,
         dd.state as netState
         <!--        dhd.check_status AS `status`,-->
@@ -56,6 +60,7 @@
         <!--        dhd.detail_info as detailInfo-->
         FROM
         iot_device d
+        inner  join sys_org o on d.org_id =o.id and o.deleted=0 and o.is_lock='0'
         left join iot_device_detection dd on d.equipment_code =dd.equipment_code
 <!--        LEFT JOIN iot_dvr_hard_disk_detection dhd ON d.equipment_code = dhd.equipment_code-->
         WHERE
@@ -146,7 +151,7 @@
 
     <select id="diskStatistic" resultType="com.xunmei.iot.vo.dvrDisk.DvrDiskStatisticVo">
         SELECT count(0) AS dvrTotal,
-        SUM(DD.count) AS diskTotal,
+        SUM(dd.count) AS diskTotal,
         SUM(dd.exceptionCount) as diskExceptionCount
         FROM iot_device d
         LEFT JOIN (SELECT host_code,count(0) as count,SUM(if(state=1,1,0)) as exceptionCount from iot_dvr_disk WHERE

+ 3 - 0
soc-modules/soc-modules-iot/src/main/resources/mapper/IotAlarmDataMapper.xml

@@ -22,6 +22,9 @@
         <if test="param.orgPath != null and param.orgPath != ''">
             and b.path like concat(#{param.orgPath},'%')
         </if>
+        <if test="param.dataType != null and param.dataType != ''">
+            and a.data_type = #{param.dataType}
+        </if>
         <if test="param.deviceType != null and param.deviceType != ''">
             and a.source_type = #{param.deviceType}
         </if>

+ 102 - 0
soc-modules/soc-modules-iot/src/main/resources/mapper/IotBoardMapper.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xunmei.iot.mapper.IotBoardMapper">
+    <select id="device" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '主机设备'                AS `name`,
+               count(0)              AS count,
+               sum(dd.state IS NULL) AS unknown,
+               sum(dd.state = 0)     AS normal,
+               sum(dd.state = 1)     AS exception,
+               sum(dd.state = 2)     AS other1
+        FROM iot_device d
+                 LEFT JOIN iot_device_detection dd ON d.equipment_code = dd.equipment_code
+        WHERE deleted = 0
+          and d.org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="subsystem" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '报警控制器'         AS `name`,
+               count(0)        AS count,
+               sum(status = 0) AS exception,
+               sum(status = 1) AS normal,
+               sum(status = 2) AS unknown
+        FROM iot_alarm_subsystem
+        WHERE deleted = 0
+          and org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="sensor" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '动环设备'             AS `name`,
+               count(0)           AS count,
+               sum(state = 0)     AS normal,
+               sum(state = 1)     AS exception,
+               sum(state is null) AS unknown
+        FROM iot_sensor
+        WHERE deleted = 0
+          and org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="videoInterity" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '(昨日)录像完整性'                 AS `name`,
+               count(0)                AS count,
+               sum(vic.status = 0)     AS normal,
+               sum(vic.status = 1)     AS other1,
+               sum(vic.status = 2)     AS exception,
+               sum(vic.status is null) AS unknown
+        FROM iot_dvr_channel dc
+                 LEFT JOIN mediator_video_integrity_check vic
+                           on dc.host_code = vic.equipment_code and dc.channel_code = vic.channel_code
+        WHERE dc.deleted = 0
+          and dc.org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="videoDays" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '录像存储天数'                  AS `name`,
+               count(0)                AS count,
+               sum(vdc.status = 0)     AS normal,
+               sum(vdc.status = 1)     AS exception,
+               sum(vdc.status is null) AS unknown
+        FROM iot_dvr_channel dc
+                 LEFT JOIN mediator_video_days_check vdc
+                           on dc.host_code = vdc.equipment_code and dc.channel_code = vdc.channel_code
+        WHERE dc.deleted = 0
+          and dc.org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="videoQuality" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT '(当前)录像质量'                    AS `name`,
+               count(0)                  AS count,
+               sum(vdr.is_alarm = 0)     AS normal,
+               sum(vdr.is_alarm = 1)     AS exception,
+               sum(vdr.is_alarm is null) AS unknown
+        FROM iot_dvr_channel dc
+                 LEFT JOIN mediator_video_diagnosis_record vdr
+                           on dc.host_code = vdr.equipment_code and dc.channel_code = vdr.channel_code
+        WHERE dc.deleted = 0
+          and dc.org_path like concat(#{orgPath}, "%")
+    </select>
+    <select id="dvrDisk" resultType="com.xunmei.iot.vo.board.IotBoardOverviewItemVo">
+        SELECT
+            '录像机硬盘' AS `name`,
+            count( 0 ) AS count,
+            sum( dd.other1 ) AS other1,
+            sum( dd.normal ) AS normal,
+            sum( dd.exception ) AS exception,
+            sum( dd.unknown ) AS unknown
+        FROM
+            iot_device d
+                LEFT JOIN (
+                SELECT
+                    count( 0 ) AS other1,
+                    sum( state = 0 ) AS normal,
+                    sum( state = 1 ) AS exception,
+                    sum( state IS NULL ) AS unknown,
+                    host_code
+                FROM
+                    iot_dvr_disk
+                WHERE
+                    deleted = 0 and org_path like concat(#{orgPath}, "%")
+                GROUP BY
+                    host_code
+            ) dd ON d.equipment_code = dd.host_code
+        WHERE
+            d.category_id = 1
+          AND d.deleted = 0
+          and d.org_path like concat(#{orgPath}, "%")
+    </select>
+</mapper>

+ 20 - 3
soc-modules/soc-modules-iot/src/main/resources/mapper/IotDvrChannelMapper.xml

@@ -49,6 +49,8 @@
         c.host_code,
         c.channel_code,
         c.org_name,
+        o.affiliated_area,
+        o.affiliated_bank,
         c.channel_name,
         c.channel_addr as channelIP,
         vic.lose_duration,
@@ -56,10 +58,12 @@
         vdc.real_days,
         vdr.signal_lost,
         vdr.occlude,
-        if(vdr.id is null,null,if(vdr.brightness+vdr.color_cast+vdr.snowflake+vdr.stripe+vdr.contrast+vdr.blurry>1,1,0))
+        if(vdr.id is
+        null,null,if(vdr.brightness+vdr.color_cast+vdr.snowflake+vdr.stripe+vdr.contrast+vdr.blurry>=1,1,0))
         as quality
         from iot_dvr_channel c
         INNER JOIN iot_device d on c.host_code=d.equipment_code
+        inner  join sys_org o on c.org_id =o.id and o.deleted=0 and o.is_lock='0'
         left JOIN mediator_video_days_check vdc on c.host_code=vdc.equipment_code and c.channel_code=vdc.channel_code
         left JOIN mediator_video_integrity_check vic on c.host_code=vic.equipment_code and
         c.channel_code=vic.channel_code
@@ -128,7 +132,8 @@
 
     <select id="selectAppChannels" resultType="com.xunmei.iot.vo.videoDiagnosis.VideoDiagnosisAppPageChannelVo">
         select dc.channel_code,
-        if(vdc.status=0 and vic.status=0 and vdr.is_alarm=0,0,if(vdc.status =1 or vic.status>0 or vdr.is_alarm=1,1,2)) as state
+        if(vdc.status=0 and vic.status=0 and vdr.is_alarm=0,0,if(vdc.status =1 or vic.status>0 or vdr.is_alarm=1,1,2))
+        as state
         FROM iot_dvr_channel dc
         LEFT JOIN mediator_video_days_check vdc on dc.host_code=vdc.equipment_code and dc.channel_code
         =vdc.channel_code
@@ -146,7 +151,7 @@
         <if test="state==2">
             and (vdc.`status` is null or vic.`status` is null or vdr.is_alarm is null)
         </if>
-        order by  dc.channel_code asc
+        order by dc.channel_code asc
     </select>
     <select id="selectAppPage" resultMap="appPageMap">
         SELECT equipment_code,
@@ -192,4 +197,16 @@
             )
         </if>
     </select>
+    <select id="selectBadge" resultType="java.lang.Integer">
+        SELECT sum(vdc.`status` > 0 or vic.`status` > 0 or vdc.`status` > 0) as count
+        FROM iot_dvr_channel dc
+                 LEFT JOIN mediator_video_days_check vdc
+                           on vdc.equipment_code = dc.host_code and vdc.channel_code = dc.channel_code
+                 LEFT JOIN mediator_video_integrity_check vic
+                           on vic.equipment_code = dc.host_code and vic.channel_code = dc.channel_code
+                 LEFT JOIN mediator_video_diagnosis_record vdr
+                           on vdr.equipment_code = dc.host_code and vdr.channel_code = dc.channel_code
+        WHERE dc.org_id = #{orgId}
+          AND dc.deleted = 0
+    </select>
 </mapper>

+ 1 - 1
soc-modules/soc-modules-iot/src/main/resources/mapper/IotSensorMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xunmei.iot.mapper.IotCommonSensorMapper">
     <select id="selectPageData" resultType="com.xunmei.iot.vo.sensor.SensorPageVo">
-        select s.id, org_id, org_name, device_name, device_type, infos as info,device_code, update_time,state
+        select s.id, org_id, org_name,org_path, device_name, device_type, infos as info,device_code, state_update_time as updateTime,state
         from iot_sensor s
         where s.deleted=0
         <if test="request.orgId!= null">

+ 2 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/IotAlarmDataService.java

@@ -2,6 +2,7 @@ package com.xunmei.mediator.api.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+import com.xunmei.common.core.domain.iot.domain.IotDvrHardDiskDetection;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
@@ -47,6 +48,6 @@ public interface IotAlarmDataService extends IService<IotAlarmData> {
      * @param iotDvrDisk
      * @throws Exception
      */
-    void dealDvrDiskData(IotDvrDisk iotDvrDisk)throws Exception;
+    void dealDvrDiskData(IotDvrHardDiskDetection iotDvrDisk)throws Exception;
 
 }

+ 53 - 36
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
 import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
+import com.xunmei.common.core.domain.iot.domain.IotDvrHardDiskDetection;
 import com.xunmei.common.core.domain.iot.domain.IotSensor;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmData;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
@@ -18,11 +19,15 @@ import com.xunmei.common.core.domain.mediator.domain.IotAlarmSystemField;
 import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
 import com.xunmei.common.core.enums.CategoryDataEnum;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.mediator.api.enums.AlarmDataTypeEnum;
 import com.xunmei.mediator.api.enums.AlarmRuleExpressOperateEnum;
 import com.xunmei.mediator.api.enums.AlarmVideoTypeEnum;
 import com.xunmei.mediator.api.mapper.*;
 import com.xunmei.mediator.api.service.IotAlarmDataService;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -194,41 +199,42 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dealDvrDiskData(IotDvrDisk iotDvrDisk) throws Exception {
-        Long orgId = iotDvrDisk.getOrgId();
-
-        //硬盘状态。0:正常,1:异常
-        Integer state = iotDvrDisk.getState();
-
-        //监控主机唯一标识
-        String hostCode = iotDvrDisk.getHostCode();
+    public void dealDvrDiskData(IotDvrHardDiskDetection iotDvrDisk) throws Exception {
 
-        QueryWrapper<IotDevice> idqw = new QueryWrapper<>();
-        idqw.lambda().eq(IotDevice::getEquipmentCode,hostCode).eq(IotDevice::getOrgId,orgId);
-        IotDevice iotDevice = iotDeviceMapper.selectOne(idqw);
-        if(iotDevice == null){
+        /**
+         * [{"index":8,"name":"DISK8","state":0},{"index":3,"name":"DISK3","state":0},{"index":1,"name":"DISK1","state":0}]
+         */
+        String detailInfo = iotDvrDisk.getDetailInfo();
+        if(StringUtils.isEmpty(detailInfo)){
             return;
         }
-        String equipmentName = iotDevice.getEquipmentName();
-        String diskName = iotDvrDisk.getDiskName();
-
-        hostCode = hostCode + "__" +iotDvrDisk.getDiskIndex();
-
-        QueryWrapper<IotAlarmData> qw = new QueryWrapper<>();
-        qw.lambda().eq(IotAlarmData::getOrgId,orgId).eq(IotAlarmData::getDeviceId,hostCode).isNull(IotAlarmData::getEndTime);
-        List<IotAlarmData> datas = baseMapper.selectList(qw);
-
+        Long orgId = iotDvrDisk.getOrgId();
+        //监控主机唯一标识
+        String hostCode = iotDvrDisk.getEquipmentCode();
+        String equipmentName = iotDvrDisk.getEquipmentName();
+        List<DiskVo> diskVos = JSONArray.parseArray(detailInfo, DiskVo.class);
+        for (DiskVo diskVo : diskVos) {
+            //硬盘状态。0:正常,1:异常
+            Integer state = diskVo.getState();
+            hostCode = hostCode + "__" +diskVo.getIndex();
+
+            QueryWrapper<IotAlarmData> qw = new QueryWrapper<>();
+            qw.lambda().eq(IotAlarmData::getOrgId,orgId).eq(IotAlarmData::getDeviceId,hostCode).isNull(IotAlarmData::getEndTime);
+            List<IotAlarmData> datas = baseMapper.selectList(qw);
+
+
+            if(state ==1 && datas.size() == 0){
+                //报警,且没有告警数据
+                IotAlarmData alarmDisk = createAlarmDisk(equipmentName, diskVo.getName(), orgId, hostCode);
+                this.save(alarmDisk);
+            }
 
-        if(state ==1 && datas.size() == 0){
-            //报警,且没有告警数据
-            IotAlarmData alarmDisk = createAlarmDisk(equipmentName, diskName, orgId, hostCode);
-            this.save(alarmDisk);
-        }
+            if(state == 0 && datas.size() > 0){
+                IotAlarmData iotAlarmData = datas.get(0);
+                iotAlarmData.setEndTime(LocalDateTime.now());
+                this.updateById(iotAlarmData);
+            }
 
-        if(state == 0 && datas.size() > 0){
-            IotAlarmData iotAlarmData = datas.get(0);
-            iotAlarmData.setEndTime(LocalDateTime.now());
-            this.updateById(iotAlarmData);
         }
 
 
@@ -241,12 +247,12 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         iotAlarmData.setDeviceName(equipmentName + "-" + diskName);
         iotAlarmData.setRuleId(1L);
         iotAlarmData.setSourceType(AlarmVideoTypeEnum.DVRDISK.getValue());
-        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(AlarmVideoTypeEnum.DVRDISK.getValue()));
+        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(AlarmVideoTypeEnum.DVRDISK.getValue())+"告警");
         iotAlarmData.setFieldCode(AlarmVideoTypeEnum.DVRDISK.getValue() + "");
         iotAlarmData.setOperator("EQUALS");
         iotAlarmData.setValue("1");
         iotAlarmData.setValueText("告警");
-        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes() + "告警");
+        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes());
         iotAlarmData.setOrgId(orgId);
         iotAlarmData.setDataType(AlarmDataTypeEnum.HOST_ALARM.getValue());
         iotAlarmData.setDeviceId(hostCode);
@@ -334,12 +340,12 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         iotAlarmData.setDeviceName(deviceName + "-" + channelName);
         iotAlarmData.setRuleId(1L);
         iotAlarmData.setSourceType(diagnosisType);
-        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(diagnosisType));
+        iotAlarmData.setSourceTypeDes(AlarmVideoTypeEnum.getTextByValue(diagnosisType)+"告警");
         iotAlarmData.setFieldCode(diagnosisType + "");
         iotAlarmData.setOperator("EQUALS");
         iotAlarmData.setValue("1");
         iotAlarmData.setValueText("告警");
-        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes() + "告警");
+        iotAlarmData.setContent(iotAlarmData.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes());
         iotAlarmData.setOrgId(orgId);
         iotAlarmData.setDataType(AlarmDataTypeEnum.HOST_ALARM.getValue());
         iotAlarmData.setDeviceId(deviceId);
@@ -353,12 +359,12 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         iotAlarmData.setDeviceName(iotSensor.getDeviceName());
         iotAlarmData.setRuleId(express.getRuleId());
         iotAlarmData.setSourceType(field.getSourceType());
-        iotAlarmData.setSourceTypeDes(field.getSourceTypeDes());
+        iotAlarmData.setSourceTypeDes(field.getSourceTypeDes()+"告警");
         iotAlarmData.setFieldCode(field.getSysFieldCode());
         iotAlarmData.setOperator(express.getOperator());
         iotAlarmData.setValue(express.getValue());
         iotAlarmData.setValueText(express.getValueText());
-        iotAlarmData.setContent(iotSensor.getDeviceName() + "触发" + field.getName());
+        iotAlarmData.setContent(iotSensor.getDeviceName() + "触发" + iotAlarmData.getSourceTypeDes());
         iotAlarmData.setOrgId(iotSensor.getOrgId());
         iotAlarmData.setDataType(AlarmDataTypeEnum.IOT_ALARM.getValue());
         iotAlarmData.setDeviceId(iotSensor.getDeviceCode());
@@ -393,3 +399,14 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
 
 
 }
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+class DiskVo{
+    private String index;
+
+    private String name;
+
+    private Integer state;
+}

+ 38 - 68
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrChannelServiceImpl.java

@@ -1,6 +1,7 @@
 package com.xunmei.mediator.api.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
@@ -44,8 +45,7 @@ import java.util.stream.Collectors;
  */
 @Service
 public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, IotDvrChannel> implements IIotDvrChannelService {
-    @Resource
-    private IMediatorCategoryService categoryService;
+
     @Resource
     private RemoteOrgService orgService;
     @Resource
@@ -74,8 +74,6 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
         if (ObjectUtil.isEmpty(deviceDtoList)) {
             return ReceiveErrorDto.error("通道数据为空");
         }
-        MediatorCategory category = categoryService.findCategoryByCodeAndParentId("18", -1L);
-
         DeviceDto deviceDto;
         List<NorthError> errors = new ArrayList<>();
         List<IotDvrChannel> list = new ArrayList<>();
@@ -85,7 +83,7 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
         if (org != null) {
             //制作一个随时变化的key
             Boolean flag = redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
-            if (!flag) {
+            if (Boolean.FALSE.equals(flag)) {
                 //判断是否存在这个key
                 this.redisTemplate.opsForValue().set(CacheConstants.CHANNEL_KEY, UK);
             } else {
@@ -139,7 +137,7 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
 
 
             /**
-             * 先不做数据处理,先缓存所有待处理的数据,然后每5分钟处理一次缓存数据
+             * 先不做数据处理,先缓存所有待处理的数据,然后每10分钟处理一次缓存数据 http://localhost:8080/mediator/channelCacheDeal
              */
 
 
@@ -152,7 +150,7 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
                 continue;
             }
 
-            IotDvrChannel device = getChannelDevice(deviceDto, category);
+            IotDvrChannel device = getChannelDevice(deviceDto);
 
             list.add(device);
 
@@ -163,15 +161,17 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
             redisTemplate.expire(UK + CacheConstants.AFTER_DATA, 1, TimeUnit.HOURS);
         }
         northErrorService.saveErrorData(errors);
-
         return ReceiveErrorDto.success();
     }
 
-    private IotDvrChannel getChannelDevice(DeviceDto deviceDto, MediatorCategory category) {
+    private IotDvrChannel getChannelDevice(DeviceDto deviceDto) {
         IotDvrChannel device = new IotDvrChannel();
-        IotDvrChannel old = this.findChannel(deviceDto.getEquipmentCode(), deviceDto.getChannelCode(), deviceDto.getOrg().getId());
+        final LocalDateTime now = LocalDateTime.now();
+        IotDvrChannel old = this.findChannel(deviceDto.getChannelCode(), deviceDto.getEquipmentCode(), deviceDto.getOrg().getId());
         if (old != null) {
             device = old;
+        }else {
+            device.setCreateTime(now);
         }
         device.setChannelName(deviceDto.getChannelName());
         device.setHostCode(deviceDto.getEquipmentCode());
@@ -180,10 +180,7 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
         device.setOrgName(deviceDto.getOrg().getShortName());
         device.setChannelCode(Integer.parseInt(deviceDto.getChannelCode()));
         device.setChannelAddr(deviceDto.getNetAddress());
-        final LocalDateTime now = LocalDateTime.now();
         device.setUpdateTime(now);
-        device.setCreateTime(now);
-
         device.setSource(1);
         device.setDeleted(0);
         return device;
@@ -194,12 +191,7 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
     public void channelCacheDeal() {
         try {
             Boolean flag = redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
-            if (!flag) {
-                return;
-            }
-
-            Boolean isData = this.redisTemplate.hasKey(CacheConstants.CHANNEL_KEY);
-            if (!isData) {
+            if (Boolean.FALSE.equals(flag)) {
                 return;
             }
 
@@ -207,33 +199,17 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
 
             ListOperations<String, EquipmentOrgVo> lso = this.redisTemplate.opsForList();
             List<EquipmentOrgVo> list = lso.range(UK, 0, -1);
-            int voSize = list.size();
-            if (voSize > 0) {
-                lso.trim(UK, voSize, -1L);
+            if (ObjectUtil.isEmpty(list)) {
+                return;
             }
-
+            lso.trim(UK, list.size(), -1L);
             ListOperations<String, IotDvrChannel> cso = this.redisTemplate.opsForList();
             List<IotDvrChannel> devices = cso.range(UK + RedisKey.AFTER_DATA, 0, -1);
-            int devSize = devices.size();
-            if (devSize > 0) {
-                cso.trim(UK + RedisKey.AFTER_DATA, devSize, -1L);
-            }
-
-            if (list.size() == 0) {
+            if (ObjectUtil.isEmpty(devices)) {
                 return;
             }
-            /**
-             * 获取要逻辑删除的主机code和orgId
-             */
-            Set<EquipmentOrgVo> eos = new HashSet<>();
-            eos.addAll(list);
-
-            List<EquipmentOrgVo> eosList = new ArrayList<>();
-            eosList.addAll(eos);
-            /**
-             * 获取要进行批量处理的通道信息
-             * 并通过主机code,通道id,机构id进行去重
-             */
+            cso.trim(UK + RedisKey.AFTER_DATA, devices.size(), -1L);
+            //获取要进行批量处理的通道信息,并通过主机code,通道id,机构id进行去重
             List<IotDvrChannel> devis = devices.stream().collect(Collectors.collectingAndThen(
                     Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getChannelCode() + ";" + o.getHostCode() + ";" + o.getOrgId()))), ArrayList::new));
 
@@ -242,36 +218,18 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
              * 第一步 逻辑删除对应 主机的 通道数据
              * 第二步 批量更新数据
              */
-            this.batchUpdateDel(eosList);
-
-            /**
-             * 自己写批量插入,更新方法,保证效率
-             */
-            //批量更新列表
-            List<IotDvrChannel> upList = new ArrayList<>();
+            final List<EquipmentOrgVo> collect = list.stream().distinct().collect(Collectors.toList());
+            this.batchUpdateDel(collect);
             //批量插入列表
-            List<IotDvrChannel> inList = new ArrayList<>();
-            if (devis.size() > 0) {
-                for (IotDvrChannel dev : devis) {
-                    if (ObjectUtil.isNotEmpty(dev.getId())) {
-                        upList.add(dev);
-                    } else {
-                        inList.add(dev);
-                    }
-                }
-            }
-
-            if (upList.size() > 0) {
-                this.batchUpdateDevice(upList);
-            }
-
-            if (inList.size() > 0) {
-                this.batchInsertDevice(inList);
-            }
+            final List<IotDvrChannel> inList = devis.stream().filter(d -> ObjectUtil.isEmpty(d.getId())).collect(Collectors.toList());
+            //批量更新列表
+            final List<IotDvrChannel> upList = devis.stream().filter(d -> ObjectUtil.isNotEmpty(d.getId())).collect(Collectors.toList());
+            this.batchUpdateDevice(upList);
+            this.batchInsertDevice(inList);
 
         } catch (Exception e) {
             e.printStackTrace();
-            LogUtils.BASE_INFO_CHANNEL.error("【北向定时任务:{} 执行异常】【异常原因:{}】", "通道信息-DataDealJobService", e);
+            LogUtils.BASE_INFO_CHANNEL.error("【北向定时任务:{} 执行异常】【异常原因:{}】", "通道信息-DataDealJobService", e.getMessage());
             throw new RuntimeException(e.getMessage());
         }
     }
@@ -279,18 +237,30 @@ public class IotDvrChannelServiceImpl extends ServiceImpl<IotDvrChannelMapper, I
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchUpdateDel(List<EquipmentOrgVo> eosList) {
-        baseMapper.batchUpdateDel(eosList);
+        for (EquipmentOrgVo equipmentOrgVo : eosList) {
+            LambdaUpdateWrapper<IotDvrChannel> wrapper = new LambdaUpdateWrapper<IotDvrChannel>();
+            wrapper.eq(IotDvrChannel::getHostCode, equipmentOrgVo.getEquipmentCode());
+            wrapper.set(IotDvrChannel::getOrgId, equipmentOrgVo.getOrgId());
+            wrapper.set(IotDvrChannel::getDeleted, 1);
+            update(wrapper);
+        }
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchUpdateDevice(List<IotDvrChannel> upList) {
+        if (ObjectUtil.isEmpty(upList)) {
+            return;
+        }
         updateBatchById(upList);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchInsertDevice(List<IotDvrChannel> inList) {
+        if (ObjectUtil.isEmpty(inList)) {
+            return;
+        }
         saveBatch(inList);
     }
 }

+ 1 - 15
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrDiskServiceImpl.java

@@ -55,8 +55,7 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
     @Autowired
     private IIotDeviceService iotDeviceService;
 
-    @Autowired
-    private IotAlarmDataService iotAlarmDataService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -122,19 +121,6 @@ public class IotDvrDiskServiceImpl extends ServiceImpl<IotDvrDiskMapper, IotDvrD
                 throw new RuntimeException(e.getMessage());
             }
         }
-
-        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
-            @Override
-            public void afterCommit() {
-                try {
-                    for (IotDvrDisk dvrdisk : dvrdisks) {
-                        iotAlarmDataService.dealDvrDiskData(dvrdisk);
-                    }
-                } catch (Exception e) {
-                    throw new RuntimeException(e);
-                }
-            }
-        });
     }
 
     private Map<String, Object> checkDvrDiskPageDto(List<DvrDiskPageDto> dvrdiskPageLists, String msgId) throws IllegalAccessException {

+ 17 - 0
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotDvrHardDiskDetectionServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.iot.domain.IotDevice;
+import com.xunmei.common.core.domain.iot.domain.IotDvrDisk;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmCode;
 import com.xunmei.common.core.domain.mediator.domain.MediatorCategory;
 import com.xunmei.common.core.domain.iot.domain.IotDvrHardDiskDetection;
@@ -23,8 +24,11 @@ import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.dto.protection.ReceiveErrorDto;
 import com.xunmei.system.api.dto.protection.VideoRecorderHardDiskDetectionEditDto;
 import com.xunmei.system.api.enums.AlarmStatus;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.support.TransactionSynchronizationAdapter;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
@@ -50,6 +54,9 @@ public class IotDvrHardDiskDetectionServiceImpl extends ServiceImpl<IotDvrHardDi
     @Resource
     IotDvrHardDiskDetectionLogService videoRecorderHardDiskDetectionLogService;
 
+    @Autowired
+    private IotAlarmDataService iotAlarmDataService;
+
     @Override
     public IotDvrHardDiskDetection findTopByEquipmentCodeAndOrgId(String equipmentCode, Long orgId) {
         return lambdaQuery()
@@ -183,5 +190,15 @@ public class IotDvrHardDiskDetectionServiceImpl extends ServiceImpl<IotDvrHardDi
         videoRecorderHardDiskDetectionLogService.saveOrUpdate(videoRecorderHardDiskDetectionLog);
         iotDvrDiskService.updateStatusByDiskDetection(videoRecorderHardDiskDetection);
 
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+            @Override
+            public void afterCommit() {
+                try {
+                    iotAlarmDataService.dealDvrDiskData(videoRecorderHardDiskDetection);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        });
     }
 }

+ 13 - 5
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/VideoIntegrityCheckServiceImpl.java

@@ -24,6 +24,7 @@ import com.xunmei.mediator.domain.dto.videoIntegrityCheck.VideoIntegrityCheckDto
 import com.xunmei.mediator.util.RedisUtil;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.util.LogUtils;
 import io.netty.util.internal.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -77,7 +78,7 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         }
         //与上次接收到的数据进行比较,如果相同则不进行处理
         if (redisUtil.compareWithCache(videoIntegrityCheckDto)) {
-             return ReceiveErrorDto.error(RedisKey.REPORT_DATA_REFUSE_MSG);
+            return ReceiveErrorDto.error(RedisKey.REPORT_DATA_REFUSE_MSG);
         }
 
         String organizationGuid = videoIntegrityCheckDto.getOrganizationGuid();
@@ -98,8 +99,13 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
 
         MediatorVideoIntegrityCheck old = this.findByOrgIdAndEquipmentCodeAndAndChannelCodeAndRecordDate(org.getId(), videoIntegrityCheckDto.getEquipmentCode(), videoIntegrityCheckDto.getChannelCode());
         MediatorVideoIntegrityCheck videoIntegrityCheck = new MediatorVideoIntegrityCheck();
+        boolean isCompensate = false;
         if (old != null) {
             videoIntegrityCheck = old;
+            if (LocalDate.parse(videoIntegrityCheckDto.getRecordDate(), DateTimeFormatter.ISO_DATE).isBefore(old.getRecordDate())) {
+                isCompensate = true;
+                LogUtils.STATUS_INFO_VIDEO_COMPLETE.info("接收到录像完整性补录数据,仅修改日志消息,消息内容:{}", JSON.toJSONString(videoIntegrityCheckDto));
+            }
         } else {
             videoIntegrityCheck.setCreateTime(new Date());
         }
@@ -135,7 +141,10 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
         videoIntegrityCheck.setOrgPath(org.getPath());
         videoIntegrityCheck.setStatus(getStatus(videoIntegrityCheckDto));
         videoIntegrityCheck.setLoseDuration(calculateLoseMinute(videoIntegrityCheck.getLoseSpan()));
-        this.saveOrUpdate(videoIntegrityCheck);
+        if (!isCompensate) {
+            //不是补录才进行保存数据
+            this.saveOrUpdate(videoIntegrityCheck);
+        }
         saveLog(videoIntegrityCheck);
 
         return ReceiveErrorDto.success();
@@ -144,13 +153,12 @@ public class VideoIntegrityCheckServiceImpl extends ServiceImpl<VideoIntegrityCh
     private void saveLog(MediatorVideoIntegrityCheck videoIntegrityCheck) {
         MediatorVideoIntegrityCheckLog newLog = new MediatorVideoIntegrityCheckLog();
         MediatorVideoIntegrityCheckLog logData = integrityCheckLogService.findByOrgIdAndEquipmentCodeAndChannelCode(videoIntegrityCheck.getOrgId(), videoIntegrityCheck.getEquipmentCode(), videoIntegrityCheck.getChannelCode(), videoIntegrityCheck.getRecordDate());
-
         if (logData != null) {
-            BeanUtils.copyProperties(videoIntegrityCheck,logData,"id");
+            BeanUtils.copyProperties(videoIntegrityCheck, logData, "id");
             integrityCheckLogService.updateById(logData);
             return;
         }
-        BeanUtils.copyProperties(videoIntegrityCheck,newLog);
+        BeanUtils.copyProperties(videoIntegrityCheck, newLog);
         newLog.setId(IdWorker.getId());
         newLog.setVideoIntegrityCheckId(videoIntegrityCheck.getId());
         integrityCheckLogService.save(newLog);

+ 2 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/util/RedisCheckRepeatDataUtil.java

@@ -1,5 +1,6 @@
 package com.xunmei.mediator.util;
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.xunmei.common.core.utils.SpringUtils;
@@ -108,7 +109,7 @@ public class RedisCheckRepeatDataUtil {
         //判断是否拿到所有的数据
         final List<Boolean> list = allPageKeyList.stream().map(redisTemplate::hasKey).distinct().collect(Collectors.toList());
         if (list.contains(Boolean.FALSE)) {
-            // return ListUtil.empty();
+             return ListUtil.empty();
         }
 
         return allPageKeyList.stream().map(k -> {

Some files were not shown because too many files changed in this diff