gao.qiang 1 месяц назад
Родитель
Сommit
c305d8ade1
50 измененных файлов с 2165 добавлено и 145 удалено
  1. 6 0
      business-service/src/main/java/com/ozs/service/entity/BaseCameraManagement.java
  2. 48 0
      business-service/src/main/java/com/ozs/service/entity/BaseMeasurePoint.java
  3. 20 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarm.java
  4. 2 10
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmCloud.java
  5. 53 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmExt.java
  6. 1 9
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmFrequencyCloud.java
  7. 116 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmFrequencyMatter.java
  8. 240 0
      business-service/src/main/java/com/ozs/service/entity/MsgAlarmMatter.java
  9. 23 0
      business-service/src/main/java/com/ozs/service/entity/vo/Files.java
  10. 129 0
      business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmMatterVo.java
  11. 2 0
      business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmVo.java
  12. 11 0
      business-service/src/main/java/com/ozs/service/entity/vo/ParameterVo.java
  13. 29 0
      business-service/src/main/java/com/ozs/service/entity/vo/ReleaseAlarmVo.java
  14. 69 0
      business-service/src/main/java/com/ozs/service/entity/vo/ReqMsgAlarmMatterVo.java
  15. 0 9
      business-service/src/main/java/com/ozs/service/entity/vo/Screenshot.java
  16. 19 0
      business-service/src/main/java/com/ozs/service/mapper/BaseMeasurePointMapper.java
  17. 18 0
      business-service/src/main/java/com/ozs/service/mapper/MsgAlarmExtMapper.java
  18. 18 0
      business-service/src/main/java/com/ozs/service/mapper/MsgAlarmFrequencyMatterMapper.java
  19. 3 0
      business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMapper.java
  20. 25 0
      business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMatterMapper.java
  21. 17 0
      business-service/src/main/java/com/ozs/service/service/BaseMeasurePointService.java
  22. 16 0
      business-service/src/main/java/com/ozs/service/service/MsgAlarmExtService.java
  23. 16 0
      business-service/src/main/java/com/ozs/service/service/MsgAlarmFrequencyMatterService.java
  24. 25 0
      business-service/src/main/java/com/ozs/service/service/MsgAlarmMatterService.java
  25. 0 5
      business-service/src/main/java/com/ozs/service/service/impl/BaseCameraManagementServiceImpl.java
  26. 15 0
      business-service/src/main/java/com/ozs/service/service/impl/BaseMeasurePointServiceImpl.java
  27. 20 0
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmExtServiceImpl.java
  28. 20 0
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmFrequencyMatterServiceImpl.java
  29. 51 0
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmMatterServiceImpl.java
  30. 12 49
      business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmServiceImpl.java
  31. 9 22
      business-service/src/main/java/com/ozs/service/utils/CallbackUtil.java
  32. 0 2
      business-service/src/main/java/com/ozs/service/utils/PublishCallback.java
  33. 0 1
      business-service/src/main/java/com/ozs/service/utils/PublishClient.java
  34. 2 1
      business-service/src/main/resources/mapper/service/BaseCameraManagementMapper.xml
  35. 5 0
      business-service/src/main/resources/mapper/service/BaseMeasurePonitMapper.xml
  36. 5 0
      business-service/src/main/resources/mapper/service/MsgAlarmExtMapper.xml
  37. 5 0
      business-service/src/main/resources/mapper/service/MsgAlarmFrequencyMatterMapper.xml
  38. 42 0
      business-service/src/main/resources/mapper/service/MsgAlarmMapper.xml
  39. 43 0
      business-service/src/main/resources/mapper/service/MsgAlarmMatterMapper.xml
  40. 27 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  41. 4 2
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java
  42. 5 1
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java
  43. 185 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmMatterController.java
  44. 1 2
      hazard-admin/src/main/java/com/ozs/web/controller/shotschedule/RedisPushService.java
  45. 5 32
      hazard-admin/src/main/java/com/ozs/web/controller/shotschedule/ShotPictureTaskExecutors.java
  46. 26 0
      hazard-admin/src/main/java/com/ozs/web/core/util/MyThreadPoolConfig.java
  47. 106 0
      hazard-admin/src/main/java/com/ozs/web/core/util/TableCreationUtil.java
  48. 186 0
      hazard-sdk/src/main/java/com/ozs/config/AjaxResults.java
  49. 351 0
      hazard-sdk/src/main/java/com/ozs/controller/matter/MatterMonitorTokenController.java
  50. 134 0
      hazard-sdk/src/main/java/com/ozs/controller/matter/MatterUploadController.java

+ 6 - 0
business-service/src/main/java/com/ozs/service/entity/BaseCameraManagement.java

@@ -234,6 +234,12 @@ public class BaseCameraManagement extends BaseEntity implements Serializable ,Co
     @TableField(exist = false)
     private String electricity;
 
+    /**
+     * 是否报警
+     */
+    @TableField(exist = false)
+    private Integer isLock;
+
     @Override
     public int compareTo(BaseCameraManagement o) {
         int i =o.getRailwayName().compareTo(o.railwayName);

+ 48 - 0
business-service/src/main/java/com/ozs/service/entity/BaseMeasurePoint.java

@@ -0,0 +1,48 @@
+package com.ozs.service.entity;
+
+
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 测点信息表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-17
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class BaseMeasurePoint extends BaseEntity implements Serializable{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 测点编码
+     */
+    private String pointCode;
+
+
+    /**
+     * 线路编码
+     */
+    private String railwayCode;
+
+    /**
+     * 行别(1上行2下行3上下行)
+     */
+    private Integer lineDir;
+
+    /**
+     * 监控相机安装里程位置
+     */
+    private Integer installMile;
+
+}

+ 20 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarm.java

@@ -249,4 +249,24 @@ public class MsgAlarm extends BaseEntity implements Serializable {
      */
     @TableField(exist = false)
     private Integer failureToAlarm;
+
+    /**
+     *所属工务段名称
+     */
+    @TableField(exist = false)
+    private String deptName;
+
+    /**
+     * 版本号
+     */
+    @Excel(name = "版本号")
+    @TableField(exist = false)
+    private String versionNum;
+
+    /**
+     * 版本名称
+     */
+    @Excel(name = "版本名称")
+    @TableField(exist = false)
+    private String versionName;
 }

+ 2 - 10
business-service/src/main/java/com/ozs/service/entity/MsgAlarmCloud.java

@@ -15,14 +15,6 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
-/**
- * <p>
- * 报警信息表
- * </p>
- *
- * @author ozs
- * @since 2023-02-22
- */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
@@ -87,7 +79,7 @@ public class MsgAlarmCloud extends BaseEntity implements Serializable {
      */
     @Excel(name = "报警病害属性")
     private String alarmAttr;
-    
+
     /**
      * 报警病害属性文档格式
      */
@@ -240,7 +232,7 @@ public class MsgAlarmCloud extends BaseEntity implements Serializable {
     @Excel(name = "报警是否解除")
     @TableField(exist = false)
     private String  isLockName;
-    
+
     private String releasedUrl;
 
     /**

+ 53 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarmExt.java

@@ -0,0 +1,53 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 报警扩展表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-04-10
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MsgAlarmExt implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 报警唯一标识UUID
+     */
+    private String alarmId;
+
+    /**
+     * 1图片;2声音;3视频;4.录制视频的地址
+     */
+    private Integer alarmAttType;
+
+    /**
+     * 存储路径
+     */
+    private String alarmAttPath;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 1 - 9
business-service/src/main/java/com/ozs/service/entity/MsgAlarmFrequencyCloud.java

@@ -13,14 +13,6 @@ import lombok.NoArgsConstructor;
 import java.io.Serializable;
 import java.util.Date;
 
-/**
- * <p>
- * 预报警频次表
- * </p>
- *
- * @author ozs
- * @since 2023-02-23
- */
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
@@ -101,4 +93,4 @@ public class MsgAlarmFrequencyCloud extends BaseEntity implements Serializable {
      */
     @TableField(exist = false)
     private Integer isLock;
-}
+}

+ 116 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarmFrequencyMatter.java

@@ -0,0 +1,116 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 异物侵限报警信息频次表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-23
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MsgAlarmFrequencyMatter extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 报警唯一标识
+     */
+    private String alarmId;
+
+    /**
+     * 报警时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date alarmTime;
+
+    /**
+     * 报警线路
+     */
+    private String railwayCode;
+
+    /**
+     * 报警行别 : 1上行2下行 line_dir
+     */
+    private Integer lineDir;
+
+    /**
+     * 报警里程位置alarm_mile
+     */
+    private Integer alarmMile;
+
+    /**
+     * 报警内容
+     */
+    private String content;
+
+    /**
+     * 报警级别alarm_level
+     */
+    private Integer alarmLevel;
+
+    /**
+     * 报警置信度(百分比)
+     */
+    private Integer alarmConfidence;
+
+    /**
+     * 报警病害类型(1泥石流2异物侵限 3断轨监测)
+     */
+    private Integer alarmType;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 修改人
+     */
+    private String updateBy;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 报警是否解除 1已解除2未解除
+     */
+    @TableField(exist = false)
+    private Integer isLock;
+}

+ 240 - 0
business-service/src/main/java/com/ozs/service/entity/MsgAlarmMatter.java

@@ -0,0 +1,240 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ozs.common.annotation.Excel;
+import com.ozs.common.core.domain.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 异物侵限报警信息表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class MsgAlarmMatter extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 报警唯一标识
+     */
+    @Excel(name = "报警唯一标识")
+    private String alarmId;
+
+    /**
+     * 报警时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date alarmTime;
+
+    /**
+     * 报警线路
+     */
+    private String railwayCode;
+
+    /**
+     * 报警里程位置
+     */
+    private Integer alarmMile;
+
+    /**
+     * 报警内容
+     */
+    @Excel(name = "报警内容")
+    private String content;
+
+    /**
+     * 报警级别
+     */
+//    @Excel(name = "报警级别")
+    private Integer alarmLevel;
+
+    /**
+     * 报警置信度(百分比)
+     */
+    private Integer alarmConfidence;
+
+    /**
+     * 报警行别(1上行2下行)
+     */
+    private Integer lineDir;
+
+    /**
+     * 报警病害类型(1泥石流2异物侵限 3断轨监测)
+     */
+    private Integer alarmType;
+    @TableField(exist = false)
+    private String alarmTypeStr;
+
+    /**
+     * 框定范围
+     */
+    private String alarmAttr;
+
+    /**
+     * 解除人
+     */
+    private String releasedBy;
+
+    /**
+     * 解除时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "解除时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date releasedTime;
+
+    /**
+     * 报警是否解除 1已解除2未解除
+     */
+    private Integer isRelease;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 修改人
+     */
+    private String updateBy;
+
+    /**
+     * 修改时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 解除内容
+     */
+    @Excel(name = "解除内容")
+    private String releaseContent;
+
+    /**
+     * 线路名称
+     */
+    @TableField(exist = false)
+    @Excel(name = "报警线路")
+    private String railwayName;
+
+    /**
+     * 监控范围开始里程位置
+     */
+    @TableField(exist = false)
+    private String beginMile;
+
+    /**
+     * 监控范围结束里程位置
+     */
+    @TableField(exist = false)
+    private String endMile;
+
+    /**
+     * 报警里程位置字符串形式
+     */
+    @TableField(exist = false)
+    @Excel(name = "报警里程位置")
+    private String alarmMiles;
+
+    /**
+     * 报警次数
+     */
+    @TableField(exist = false)
+    private Integer alarmCount;
+
+    /**
+     * 报警图片地址网络路径
+     */
+    @TableField(exist = false)
+    private List<String> imageUrls;
+
+    /**
+     * 解除人真实姓名
+     */
+    @TableField(exist = false)
+    @Excel(name = "解除人")
+    private String releasedByName;
+
+    /**
+     * 状态:1未读;2已读
+     */
+    @TableField(exist = false)
+    private Integer status;
+
+    /**
+     * 推送消息ID
+     */
+    @TableField(exist = false)
+    private String msgId;
+
+    /**
+     * 报警行别字符串(1上行2下行)
+     */
+    @TableField(exist = false)
+    @Excel(name = "报警行别")
+    private String lineDirName;
+
+    /**
+     * 报警病害类型(目前只有1泥石流,后续可扩展使用)
+     */
+    @TableField(exist = false)
+    @Excel(name = "报警病害类型")
+    private String alarmTypeName;
+
+    /**
+     * 报警是否解除 1已解除2未解除
+     */
+    @Excel(name = "报警是否解除")
+    @TableField(exist = false)
+    private String  isReleaseName;
+
+    /**
+     * 报警视频URL
+     */
+    private String releasedUrl;
+
+    /**
+     * 来源
+     */
+    private String source;
+
+    /**
+     * 来源名称
+     */
+    @TableField(exist = false)
+    private String sourceName;
+}

+ 23 - 0
business-service/src/main/java/com/ozs/service/entity/vo/Files.java

@@ -0,0 +1,23 @@
+package com.ozs.service.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ * 报警附件
+ */
+@Data
+public class Files implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 上传文件地址
+     */
+    public String fileName;
+    /**
+     * 1图片;2声音;3视频
+     */
+    public Integer fileType;
+}

+ 129 - 0
business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmMatterVo.java

@@ -0,0 +1,129 @@
+package com.ozs.service.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ozs.common.vo.PageVo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 异物侵限报警信息请求参数表
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Data
+public class MsgAlarmMatterVo extends PageVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 报警ID
+     */
+    private Long id;
+
+    /**
+     * 标识UUID
+     */
+    private String alarmId;
+
+    /**
+     * 相机编码
+     */
+    private String cameraCode;
+
+    /**
+     * 剩余电量
+     */
+    private Integer electricity;
+
+    /**
+     * 线路编码
+     */
+    private String railwayCode;
+
+    /**
+     * 线路编码名称
+     */
+    private String railwayCodeName;
+
+    /**
+     * 报警行别
+     */
+    private Integer lineDir;
+    /**
+     * 报警行别 字符串
+     */
+    private String lineDirStr;
+    
+    /**
+     * 报警病害类型(目前只有1泥石流,后续可扩展使用)
+     */
+    private Integer alarmType;
+
+    /**
+     * 报警里程位置
+     */
+    private Integer alarmMile;
+
+    @TableField(exist = false)
+    private BigDecimal alarmMileBD;
+
+    /**
+     * 监控范围开始里程位置
+     */
+    private Integer beginMile;
+
+    /**
+     * 监控范围结束里程位置
+     */
+    private Integer endMile;
+
+    /**
+     * 开始报警时间
+     */
+    private String beginAlarmTime;
+
+    /**
+     * 结束报警时间
+     */
+    private String endAlarmTime;
+
+    /**
+     * 报警是否解除 1已解除2未解除
+     */
+    private Integer isRelease;
+    private String isReleaseName;
+
+    /**
+     * 用户userID
+     */
+    private String userId;
+
+    /**
+     * 状态:1未读;2已读
+     */
+    private Integer status;
+
+    /**
+     * 报警里程位置
+     */
+    private String alarmMiles;
+    /**
+     * 监控范围开始里程位置字符串形式
+     */
+    private String beginMiles;
+
+    /**
+     * 监控范围结束里程位置字符串形式
+     */
+    private String endMiles;
+
+    /**
+     * 来源
+     */
+    private String source;
+}

+ 2 - 0
business-service/src/main/java/com/ozs/service/entity/vo/MsgAlarmVo.java

@@ -94,5 +94,7 @@ public class MsgAlarmVo extends PageVo implements Serializable {
      */
     private Integer releasedType;
 
+    private Integer railwayType;
+
     private List<Long> ids;
 }

+ 11 - 0
business-service/src/main/java/com/ozs/service/entity/vo/ParameterVo.java

@@ -0,0 +1,11 @@
+package com.ozs.service.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class ParameterVo {
+    private  String parameter;
+}

+ 29 - 0
business-service/src/main/java/com/ozs/service/entity/vo/ReleaseAlarmVo.java

@@ -0,0 +1,29 @@
+package com.ozs.service.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class ReleaseAlarmVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 报警的唯一标识
+     */
+    private String alarmId;
+    /**
+     * 解除报警时间
+     */
+    private Long releaseTime;
+    /**
+     * 解除原因(内容)
+     */
+    private String releaseContent;
+    /**
+     * 解除人
+     */
+    private String operator;
+}

+ 69 - 0
business-service/src/main/java/com/ozs/service/entity/vo/ReqMsgAlarmMatterVo.java

@@ -0,0 +1,69 @@
+package com.ozs.service.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ReqMsgAlarmMatterVo {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 报警里程位置
+     */
+    private Integer alarmMile;
+
+    /**
+     * 报警行别
+     */
+    private Integer lineDir;
+
+    /**
+     * 报警线路编码
+     */
+    private String alarmRailway;
+
+    /**
+     * 报警的唯一标识
+     */
+    private String alarmId;
+
+    /**
+     * 报警时间
+     */
+    private Long alarmTime;
+
+    /**
+     * 报警内容
+     */
+    private String content;
+
+    /**
+     * 报警病害类型(1泥石流2异物侵限 3断轨监测)
+     */
+    private Integer alarmType;
+
+    /**
+     * 报警级别
+     */
+    private Integer alarmLevel;
+
+    /**
+     * 报警置信度(百分比)
+     */
+    private Integer alarmConfidence;
+
+
+    /**
+     * 报警病害属性(可以给出泥石流的框定范围)
+     */
+    private String[] alarmAttr;
+    /**
+     * 测点编码
+     */
+    private String pointCode;
+    /**
+     * 文件类型
+     */
+    private List<Files> files;
+}

+ 0 - 9
business-service/src/main/java/com/ozs/service/entity/vo/Screenshot.java

@@ -1,9 +0,0 @@
-package com.ozs.service.entity.vo;
-
-import lombok.Data;
-
-@Data
-public class Screenshot {
-    private String code;
-    private String url;
-}

+ 19 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseMeasurePointMapper.java

@@ -0,0 +1,19 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.BaseMeasurePoint;
+import org.apache.ibatis.annotations.Mapper;
+
+
+/**
+ * <p>
+ * 测点信息表 Mapper 接口
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Mapper
+public interface BaseMeasurePointMapper extends BaseMapper<BaseMeasurePoint> {
+
+}

+ 18 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmExtMapper.java

@@ -0,0 +1,18 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.MsgAlarmExt;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-04-10
+ */
+@Mapper
+public interface MsgAlarmExtMapper extends BaseMapper<MsgAlarmExt> {
+
+}

+ 18 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmFrequencyMatterMapper.java

@@ -0,0 +1,18 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.MsgAlarmFrequencyMatter;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 异物侵限报警信息频次表 Mapper 接口
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-23
+ */
+@Mapper
+public interface MsgAlarmFrequencyMatterMapper extends BaseMapper<MsgAlarmFrequencyMatter> {
+
+}

+ 3 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMapper.java

@@ -50,4 +50,7 @@ public interface MsgAlarmMapper extends BaseMapper<MsgAlarm> {
     List<MsgAlarm> queryAlarmInfoByAfterTenMinute();
 
     List<MsgAlarm> selectMsgAlarmListHome(MsgAlarmVo msgAlarmVo);
+
+    // 新的方法,直接查询统计结果
+    Map<String, Integer> selectAlarmStatistics(MsgAlarmVo msgAlarmVo);
 }

+ 25 - 0
business-service/src/main/java/com/ozs/service/mapper/MsgAlarmMatterMapper.java

@@ -0,0 +1,25 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.MsgAlarm;
+import com.ozs.service.entity.MsgAlarmMatter;
+import com.ozs.service.entity.vo.*;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 异物侵限报警信息表 Mapper 接口
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Mapper
+public interface MsgAlarmMatterMapper extends BaseMapper<MsgAlarmMatter> {
+
+    List<MsgAlarmMatter>  selectMsgAlarmList(MsgAlarmMatterVo vo);
+}

+ 17 - 0
business-service/src/main/java/com/ozs/service/service/BaseMeasurePointService.java

@@ -0,0 +1,17 @@
+package com.ozs.service.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.BaseMeasurePoint;
+
+/**
+ * <p>
+ * 测点信息表 服务类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+public interface BaseMeasurePointService extends IService<BaseMeasurePoint> {
+
+}

+ 16 - 0
business-service/src/main/java/com/ozs/service/service/MsgAlarmExtService.java

@@ -0,0 +1,16 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.MsgAlarmExt;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-04-10
+ */
+public interface MsgAlarmExtService extends IService<MsgAlarmExt> {
+
+}

+ 16 - 0
business-service/src/main/java/com/ozs/service/service/MsgAlarmFrequencyMatterService.java

@@ -0,0 +1,16 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.MsgAlarmFrequencyMatter;
+
+/**
+ * <p>
+ * 异物侵限报警信息频次表 服务类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-23
+ */
+public interface MsgAlarmFrequencyMatterService extends IService<MsgAlarmFrequencyMatter> {
+
+}

+ 25 - 0
business-service/src/main/java/com/ozs/service/service/MsgAlarmMatterService.java

@@ -0,0 +1,25 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.service.entity.MsgAlarmMatter;
+import com.ozs.service.entity.vo.MsgAlarmMatterVo;
+import com.ozs.service.entity.vo.MsgAlarmVo;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 异物侵限报警信息表 服务类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+public interface MsgAlarmMatterService extends IService<MsgAlarmMatter> {
+
+    IPage<MsgAlarmMatter> queryPage(MsgAlarmMatterVo msgAlarmVo);
+
+    List<MsgAlarmMatter> msgAlarmList(MsgAlarmMatterVo msgAlarmVo);
+}

+ 0 - 5
business-service/src/main/java/com/ozs/service/service/impl/BaseCameraManagementServiceImpl.java

@@ -62,7 +62,6 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
     @Autowired
     private BaseRailwayManagementMapper baseRailwayManagementMapper;
 
-
     /**
      * 相机台账管理表导入
      *
@@ -187,10 +186,6 @@ public class BaseCameraManagementServiceImpl extends ServiceImpl<BaseCameraManag
 //        List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementMapper.selectList(lw);
         List<BaseCameraManagement> baseCameraManagementList = baseCameraManagementMapper.cameraManagementList(baseCameraManagementVo);
         List<BaseCameraManagementHomeVo> allListVo = BeanUtils.entityListToVOList(baseCameraManagementList, BaseCameraManagementHomeVo.class);
-        for (BaseCameraManagementHomeVo baseCameraManagementHomeVo : allListVo) {
-            Integer isLock = msgAlarmMapper.selectCameraCode(baseCameraManagementHomeVo.getCameraCode());
-            baseCameraManagementHomeVo.setIsLock(isLock != null ? isLock : 1);
-        }
         return allListVo;
     }
 

+ 15 - 0
business-service/src/main/java/com/ozs/service/service/impl/BaseMeasurePointServiceImpl.java

@@ -0,0 +1,15 @@
+package com.ozs.service.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.service.entity.BaseMeasurePoint;
+import com.ozs.service.mapper.BaseMeasurePointMapper;
+import com.ozs.service.service.BaseMeasurePointService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Administrator
+ * 测点信息表服务实现类
+ */
+@Service
+public class BaseMeasurePointServiceImpl extends ServiceImpl<BaseMeasurePointMapper, BaseMeasurePoint> implements BaseMeasurePointService {
+}

+ 20 - 0
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmExtServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ozs.service.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.service.entity.MsgAlarmExt;
+import com.ozs.service.mapper.MsgAlarmExtMapper;
+import com.ozs.service.service.MsgAlarmExtService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-04-10
+ */
+@Service
+public class MsgAlarmExtServiceImpl extends ServiceImpl<MsgAlarmExtMapper, MsgAlarmExt> implements MsgAlarmExtService {
+
+}

+ 20 - 0
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmFrequencyMatterServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ozs.service.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.service.entity.MsgAlarmFrequencyMatter;
+import com.ozs.service.mapper.MsgAlarmFrequencyMatterMapper;
+import com.ozs.service.service.MsgAlarmFrequencyMatterService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 异物侵限报警信息频次表 服务实现类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-23
+ */
+@Service
+public class MsgAlarmFrequencyMatterServiceImpl extends ServiceImpl<MsgAlarmFrequencyMatterMapper, MsgAlarmFrequencyMatter> implements MsgAlarmFrequencyMatterService {
+
+}

+ 51 - 0
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmMatterServiceImpl.java

@@ -0,0 +1,51 @@
+package com.ozs.service.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.ozs.service.entity.MsgAlarmMatter;
+import com.ozs.service.entity.vo.MsgAlarmMatterVo;
+import com.ozs.service.entity.vo.MsgAlarmVo;
+import com.ozs.service.mapper.MsgAlarmMatterMapper;
+import com.ozs.service.service.MsgAlarmMatterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 异物侵限报警信息表 服务实现类
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@Service
+@Slf4j
+public class MsgAlarmMatterServiceImpl extends ServiceImpl<MsgAlarmMatterMapper, MsgAlarmMatter> implements MsgAlarmMatterService {
+
+    @Autowired
+    private MsgAlarmMatterMapper msgAlarmMatterMapper;
+
+    @Override
+    public IPage<MsgAlarmMatter> queryPage(MsgAlarmMatterVo vo) {
+        int pageNum = Integer.parseInt(vo.getPageNum().toString());
+        int pageSize = Integer.parseInt(vo.getPageSize().toString());
+        com.github.pagehelper.Page<MsgAlarmMatter> page = PageHelper.startPage(pageNum, pageSize)
+                .doSelectPage(() -> msgAlarmMatterMapper.selectMsgAlarmList(vo));
+        Page<MsgAlarmMatter> pageR = new Page<>(pageNum, pageSize);
+        pageR.setRecords(page.getResult());
+        pageR.setTotal(page.getTotal());
+        return pageR;
+    }
+
+    @Override
+    public List<MsgAlarmMatter> msgAlarmList(MsgAlarmMatterVo msgAlarmVo) {
+        return msgAlarmMatterMapper.selectMsgAlarmList(msgAlarmVo);
+    }
+}

+ 12 - 49
business-service/src/main/java/com/ozs/service/service/impl/MsgAlarmServiceImpl.java

@@ -242,57 +242,20 @@ public class MsgAlarmServiceImpl extends ServiceImpl<MsgAlarmMapper, MsgAlarm> i
 
     @Override
     public AjaxResult alarmStatistics(MsgAlarmVo msgAlarmVo1) {
-        int count = 0;
-        int unresolvedCount = 0;
-        //找出所有报警数据
-        List<MsgAlarm> list = msgAlarmMapper.selectMsgAlarmList(msgAlarmVo1);
-        //未解除的报警
-        msgAlarmVo1.setIsLock(2);
-        List<MsgAlarm> alarmList = msgAlarmMapper.selectMsgAlarmList(msgAlarmVo1);
-        HashMap<String, Integer> map = new HashMap<>();
-        if (!ObjectUtils.isEmpty(list)) {
-            //获取所有报警的相机编码
-            //找出所有报警数据 1=高铁的数量
-            count = (int) list.stream()
-                    .map(base -> baseCameraManagementMapper.selectOne(new LambdaQueryWrapper<BaseCameraManagement>()
-                            .eq(BaseCameraManagement::getCameraCode, base.getCameraCode())))
-                    .filter(Objects::nonNull)  // 确保 management 不是 null
-                    .map(management -> baseRailwayManagementMapper.selectOne(new LambdaQueryWrapper<BaseRailwayManagement>()
-                            .eq(BaseRailwayManagement::getRailwayCode, management.getRailwayCode()))) // 确保管理信息不是空的
-                    .filter(Objects::nonNull) // 确保 baseRailwayManagement 不是 null
-                    .filter(baseRailwayManagement -> baseRailwayManagement.getRailwayType() == 1)
-                    .count();
-            //普铁的数量
-            int pu = list.size() - count;
-            map.put("highAlarmCount", count);
-            map.put("puAlarmCount", pu);
-        } else {
-            map.put("highAlarmCount", 0);
-            map.put("puAlarmCount", 0);
-        }
-        if (!ObjectUtils.isEmpty(alarmList)) {
-            //获取所有报警的相机编码
-            //找出所有未解除报警数据 1=高铁的数量
-            unresolvedCount = (int) alarmList.stream()
-                    .map(base -> baseCameraManagementMapper.selectOne(new LambdaQueryWrapper<BaseCameraManagement>()
-                            .eq(BaseCameraManagement::getCameraCode, base.getCameraCode())))
-                    .filter(Objects::nonNull)
-                    .map(management -> baseRailwayManagementMapper.selectOne(new LambdaQueryWrapper<BaseRailwayManagement>()
-                            .eq(BaseRailwayManagement::getRailwayCode, management.getRailwayCode()))) // 确保管理信息不是空的
-                    .filter(Objects::nonNull) // 确保 baseRailwayManagement 不是 null
-                    .filter(baseRailwayManagement -> baseRailwayManagement.getRailwayType() == 1)
-                    .count();
-            //普铁的数量
-            int puUnresolvedCount = alarmList.size() - unresolvedCount;
-            map.put("highUnresolvedCount", unresolvedCount);
-            map.put("puUnresolvedCount", puUnresolvedCount);
-        } else {
-            map.put("highUnresolvedCount", 0);
-            map.put("puUnresolvedCount", 0);
-        }
-        return AjaxResult.success(map);
+        // 执行合并查询以获取统计结果
+        Map<String, Integer> statistics = msgAlarmMapper.selectAlarmStatistics(msgAlarmVo1);
+
+        // 创建返回结果的 map
+        Map<String, Integer> results = new HashMap<>();
+        results.put("highAlarmCount", statistics.get("highAlarmCount"));
+        results.put("puAlarmCount", statistics.get("puAlarmCount"));
+        results.put("highUnresolvedCount", statistics.get("highUnresolvedCount"));
+        results.put("puUnresolvedCount", statistics.get("puUnresolvedCount"));
+
+        return AjaxResult.success(results);
     }
 
+
     @Override
     public AjaxResult alarmCountSort(MsgAlarmVo msgAlarmVo) {
         return AjaxResult.success(baseCameraManagementMapper.alarmCountSort(msgAlarmVo));

+ 9 - 22
business-service/src/main/java/com/ozs/service/utils/CallbackUtil.java

@@ -1,30 +1,18 @@
 package com.ozs.service.utils;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.ozs.common.core.redis.RedisCache;
-import com.ozs.common.utils.AppendUtils;
-import com.ozs.common.utils.ImgUtil;
-import com.ozs.service.entity.BaseCameraManagement;
-import com.ozs.service.entity.BaseRailwayManagement;
-import com.ozs.service.service.*;
+import com.ozs.service.service.CameraLogDetailService;
+import com.ozs.service.service.CameraUpdateLogService;
+import com.ozs.service.service.MqLogService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
-import org.springframework.util.ObjectUtils;
 
 import javax.annotation.PostConstruct;
-import java.time.LocalDate;
-import java.time.LocalTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 /**
  * 相机工具
- *
  * @author Administrator
  */
 
@@ -36,21 +24,20 @@ public class CallbackUtil {
     CameraLogDetailService cameraLogDetailService;
     @Autowired
     MqLogService mqLogService;
-    private static CameraLogDetailService cameraLogDetail;
-    private static MqLogService mqLog;
-
+    private static  CameraLogDetailService cameraLogDetail;
+    private static  MqLogService mqLog;
 
     @PostConstruct
     public void init() {
         cameraLogDetail = cameraLogDetailService;
-        mqLog = mqLogService;
+        mqLog=mqLogService;
     }
 
-    public static void callback(String deviceSn, Integer code, String remark) {
-        CallbackUtil.cameraLogDetail.updateAccessories(deviceSn, code, remark);
+    public static void  callback(String deviceSn,Integer code,String remark){
+        CallbackUtil.cameraLogDetail.updateAccessories(deviceSn,code,remark);
     }
 
-    public static void heart(String cameraCode) {
+    public static void  heart(String cameraCode){
         CallbackUtil.mqLog.insetHeartLog(cameraCode);
     }
 }

+ 0 - 2
business-service/src/main/java/com/ozs/service/utils/PublishCallback.java

@@ -54,8 +54,6 @@ public class PublishCallback implements MqttCallback {
         String sign = null;
         String deviceSn = null;
         Integer code = null;
-        String stream=null;
-        String imageUrl=null;
         // subscribe后得到的消息会执行到这里面
         logger.info("接收消息主题 : {}", topic);
         logger.info("接收消息内容 : {}", new String(message.getPayload()));

+ 0 - 1
business-service/src/main/java/com/ozs/service/utils/PublishClient.java

@@ -105,7 +105,6 @@ public class PublishClient {
         publish(getMqttTopic("heart_" + deviceSn), message);
     }
 
-
     public static void main(String[] args) {
         JSONObject res = new JSONObject();
         res.put("Name", "ConfigRequest");

+ 2 - 1
business-service/src/main/resources/mapper/service/BaseCameraManagementMapper.xml

@@ -253,7 +253,8 @@
         a.measure_point_name AS measurePointName,
         a.camera_sn AS cameraSn,
         r.railway_type AS railwayType,
-        man.is_disable AS isDisable
+        man.is_disable AS isDisable,
+        IF(msg.is_lock IS NULL OR msg.is_lock = '', 1, msg.is_lock) AS isLock
         FROM
         base_camera_management a join base_railway_management r
         on a.railway_code=r.railway_code

+ 5 - 0
business-service/src/main/resources/mapper/service/BaseMeasurePonitMapper.xml

@@ -0,0 +1,5 @@
+<?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.ozs.service.mapper.BaseMeasurePointMapper">
+
+</mapper>

+ 5 - 0
business-service/src/main/resources/mapper/service/MsgAlarmExtMapper.xml

@@ -0,0 +1,5 @@
+<?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.ozs.service.mapper.MsgAlarmExtMapper">
+
+</mapper>

+ 5 - 0
business-service/src/main/resources/mapper/service/MsgAlarmFrequencyMatterMapper.xml

@@ -0,0 +1,5 @@
+<?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.ozs.service.mapper.MsgAlarmFrequencyMatterMapper">
+
+</mapper>

+ 42 - 0
business-service/src/main/resources/mapper/service/MsgAlarmMapper.xml

@@ -430,6 +430,9 @@
             <if test="alarmType != null and alarmType != 0">
                 and a.alarm_type=#{alarmType}
             </if>
+            <if test="railwayType != null and railwayType != 0">
+                and l.railway_type=#{railwayType}
+            </if>
             <if test="alarmMile != null and alarmMile != 0">
                 and a.alarm_mile=#{alarmMile}
             </if>
@@ -554,4 +557,43 @@
           and a.released_url is null
           and a.alarm_time &lt;= DATE_SUB(NOW(), INTERVAL 10 MINUTE)
     </select>
+    <select id="selectAlarmStatistics" resultType="java.util.HashMap">
+        SELECT
+        SUM(CASE WHEN rm.railway_type = 1 THEN 1 ELSE 0 END) AS highAlarmCount,
+        SUM(CASE WHEN rm.railway_type &lt;&gt; 1 THEN 1 ELSE 0 END) AS puAlarmCount,
+        SUM(CASE WHEN am.is_lock = 2 AND rm.railway_type = 1 THEN 1 ELSE 0 END) AS highUnresolvedCount,
+        SUM(CASE WHEN am.is_lock = 2 AND rm.railway_type &lt;&gt; 1 THEN 1 ELSE 0 END) AS puUnresolvedCount
+        FROM
+        msg_alarm am
+        JOIN
+        base_camera_management cm ON am.camera_code = cm.camera_code
+        JOIN
+        base_railway_management rm ON cm.railway_code = rm.railway_code
+        <where>
+            am.is_lock IN (1, 2)
+            <if test="ids != null and ids.size>0">
+                and a.id in
+                <foreach item="items" collection="ids" separator="," open="(" close=")" index="">
+                    #{items}
+                </foreach>
+            </if>
+            <if test="!dsFlay">
+                and
+                <trim prefix="(" prefixOverrides="or" suffix=")">
+                    <if test="dsUserId != null and dsUserId != ''">
+                        or am.create_by=#{dsUserId}
+                    </if>
+                    <if test="dsDeptId != null and dsDeptId != 0">
+                        or cm.dept_id=#{dsDeptId}
+                    </if>
+                    <if test="dsDeptIds != null">
+                        or cm.dept_id in
+                        <foreach item="item" collection="dsDeptIds" separator="," open="(" close=")" index="">
+                            #{item}
+                        </foreach>
+                    </if>
+                </trim>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 43 - 0
business-service/src/main/resources/mapper/service/MsgAlarmMatterMapper.xml

@@ -0,0 +1,43 @@
+<?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.ozs.service.mapper.MsgAlarmMatterMapper">
+
+    <select id="selectMsgAlarmList" resultType="com.ozs.service.entity.MsgAlarmMatter" parameterType="com.ozs.service.entity.vo.MsgAlarmMatterVo">
+        SELECT * FROM msg_alarm_matter
+        <where>
+            <if test="railwayCode != null and railwayCode != ''">
+                and railway_code = #{railwayCode}
+            </if>
+            <if test="alarmType != null and alarmType != 0">
+                and alarm_type = #{alarmType}
+            </if>
+            <if test="alarmMile != null and alarmMile != 0">
+                and alarm_mile = #{alarmMile}
+            </if>
+            <if test="beginMile != null and beginMile != 0">
+                and alarm_mile &gt;= #{beginMile}
+            </if>
+            <if test="endMile != null and endMile != 0">
+                and alarm_mile &lt;= #{endMile}
+            </if>
+            <if test="isRelease != null and isRelease != 0">
+                and is_release = #{isRelease}
+            </if>
+            <if test="lineDir != null and lineDir != 0">
+                and line_dir = #{lineDir}
+            </if>
+            <if test="beginAlarmTime != null and beginAlarmTime != ''">
+                and TO_CHAR(alarm_time, 'YYYY-MM-DD HH24:MI:SS') &gt;= TO_CHAR(#{beginAlarmTime}, 'YYYY-MM-DD
+                HH24:MI:SS')
+            </if>
+            <if test="endAlarmTime != null and endAlarmTime != ''">
+                and TO_CHAR(alarm_time, 'YYYY-MM-DD HH24:MI:SS') &lt;= TO_CHAR(#{endAlarmTime}, 'YYYY-MM-DD HH24:MI:SS')
+            </if>
+            <if test="source != null and source != ''">
+                and source = #{source}
+            </if>
+        </where>
+        order by  alarm_time desc
+    </select>
+
+</mapper>

+ 27 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -1010,6 +1010,33 @@ public class BaseCameraManagementController extends BaseController {
         }
     }
 
+    /**
+     * 视频服务页面,报警信息列表点击查看 报警记录回放视频
+     * @param alarmId
+     * @return
+     */
+    @GetMapping("/api/getAlarmRecord")
+    @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
+    public AjaxResult getAlarmRecord(@RequestParam("alarmId") String alarmId) {
+
+        LambdaQueryWrapper<MsgAlarm> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(MsgAlarm::getAlarmId, alarmId);
+        MsgAlarm msgAlarm = msgAlarmService.getOne(wrapper);
+        // 获取报警时间
+        Date alarmTime = msgAlarm.getAlarmTime();
+        // 获取报警前5分钟的时间
+        Date startTime = DateUtils.addMinutes(alarmTime, -5);
+        // 获取报警后5分钟的时间
+        Date endTime = DateUtils.addMinutes(alarmTime, 5);
+        String recordUrl = CameraUtil.getRecordUrl(msgAlarm.getCameraCode(), msgAlarm.getCameraCode(), startTime, endTime);
+        if (recordUrl.contains("当前相机暂无回放视频")) {
+            return AjaxResult.error(recordUrl);
+        } else {
+            return AjaxResult.success("ok", recordUrl);
+        }
+    }
+
+
     @GetMapping("/api/getRecordByAlarmId")
     @Log(title = "相机台账管理", businessType = BusinessType.OTHER)
     public AjaxResult getRecordByAlarmId(@RequestParam("alarmId") String alarmId) {

+ 4 - 2
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java

@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ozs.common.annotation.Log;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.entity.SysDept;
 import com.ozs.common.core.domain.entity.SysDictData;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.AppendUtils;
 import com.ozs.common.utils.ChineseToPingyin;
 import com.ozs.common.utils.IdempotenceUtils;
 import com.ozs.common.utils.StringUtils;
@@ -287,8 +289,8 @@ public class BaseRailwayManagementController extends BaseController {
     @GetMapping("/query")
     @Log(title = "线路台账管理", businessType = BusinessType.SELECT)
     public AjaxResult query() {
-         List<BaseRailwayManagement> list = baseRailwayManagementService.list();
-//        List<BaseRailwayManagement> list = baseRailwayManagementService.listRailway();
+        // List<BaseRailwayManagement> list = baseRailwayManagementService.list();
+        List<BaseRailwayManagement> list = baseRailwayManagementService.listRailway();
         list.sort(new Comparator<BaseRailwayManagement>() {
             @Override
             public int compare(BaseRailwayManagement o1, BaseRailwayManagement o2) {

+ 5 - 1
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmController.java

@@ -271,7 +271,9 @@ public class MsgAlarmController extends BaseController {
                     queryWrapper.eq(BaseRailwayManagement::getRailwayCode, cameraManagement.getRailwayCode());
                 }
                 BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+                SysDept sysDept = deptService.selectDeptById(cameraManagement.getDeptId());
                 o.setRailwayName(baseRailwayManagement.getRailwayName());
+                o.setDeptName(sysDept.getDeptName());
                 if (StringUtils.isNotEmpty(o.getReleasedBy())) {
                     BaseUser user = baseUserService.getUser(o.getReleasedBy());
                     o.setReleasedByName(user.getNickName());
@@ -334,6 +336,8 @@ public class MsgAlarmController extends BaseController {
                 cameraManagementLambdaQueryWrapper.eq(BaseCameraManagement::getCameraCode, msgAlarm.getCameraCode());
             }
             BaseCameraManagement cameraManagement = baseCameraManagementService.getOne(cameraManagementLambdaQueryWrapper);
+            msgAlarm.setVersionNum(cameraManagement.getVersionNum());
+            msgAlarm.setVersionName(cameraManagement.getVersionName());
             LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
             if (!ObjectUtils.isEmpty(cameraManagement.getRailwayCode())) {
                 queryWrapper.eq(BaseRailwayManagement::getRailwayCode, cameraManagement.getRailwayCode());
@@ -533,7 +537,7 @@ public class MsgAlarmController extends BaseController {
         web.setOnline("1");
         boolean update1 = msgWebPushService.update(web, queryWrapper);
 
-        if (b && update1) {
+        if (b) {
             return AjaxResult.success();
         } else {
             return AjaxResult.error();

+ 185 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/MsgAlarmMatterController.java

@@ -0,0 +1,185 @@
+package com.ozs.web.controller.accountmanagment;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.core.domain.entity.SysDept;
+import com.ozs.common.core.domain.entity.SysDictData;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.AppendUtils;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.poi.ExcelUtil;
+import com.ozs.service.entity.*;
+import com.ozs.service.entity.vo.*;
+import com.ozs.service.mapper.MsgAlarmMapper;
+import com.ozs.service.service.*;
+import com.ozs.system.service.DataScoreUtil;
+import com.ozs.system.service.ISysDeptService;
+import com.ozs.system.service.ISysDictDataService;
+import com.ozs.system.service.ISysDictTypeService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 报警信息表 前端控制器
+ * </p>
+ *
+ * @author ozs
+ * @since 2023-02-22
+ */
+@RestController
+@RequestMapping("/service/msgAlarmMatter")
+public class MsgAlarmMatterController extends BaseController {
+
+    @Autowired
+    private DataScoreUtil dataScoreUtil;
+    public static final String PATTERN = "^(\\d+.\\d{1,3}|\\d+)$";
+
+    @Resource
+    MsgAlarmMatterService msgAlarmMatterService;
+    @Autowired
+    BaseRailwayManagementService baseRailwayManagementService;
+    @Autowired
+    private ISysDictTypeService dictTypeService;
+    @Resource
+    private MsgAlarmExtService msgAlarmExtService;
+    /**
+     * 报警信息分页
+     *
+     * @param msgAlarmVo
+     * @return
+     */
+    @PostMapping("/list")
+    @Log(title = "报警信息管理", businessType = BusinessType.SELECT)
+    public AjaxResult selectMsgAlarm(@RequestBody MsgAlarmMatterVo msgAlarmVo) {
+        msgAlarmVo = (MsgAlarmMatterVo) dataScoreUtil.setDataScore(getUserId(), msgAlarmVo);
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getAlarmMile())) {
+            msgAlarmVo.setAlarmMile(msgAlarmVo.getAlarmMile() * 1000);
+        }
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getBeginMile())) {
+            msgAlarmVo.setBeginMile(msgAlarmVo.getBeginMile() * 1000);
+        }
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getEndMile())) {
+            msgAlarmVo.setEndMile(msgAlarmVo.getEndMile() * 1000);
+        }
+        if (!StringUtils.isEmptySunhh(msgAlarmVo.getAlarmMileBD())) {
+            if (!msgAlarmVo.getAlarmMileBD().toString().matches(PATTERN)) {
+                return error("监控范围开始里程位置填写格式不正确");
+            } else {
+                msgAlarmVo.setAlarmMile(msgAlarmVo.getAlarmMileBD().multiply(new BigDecimal("1000")).intValue());
+            }
+        }
+        IPage<MsgAlarmMatter> page = msgAlarmMatterService.queryPage(msgAlarmVo);
+        page.setTotal(page.getTotal());
+        page.setCurrent(page.getCurrent());
+        page.setPages(page.getPages());
+
+        if (!ObjectUtils.isEmpty(page) && page.getRecords().size() > 0) {
+            List<MsgAlarmMatter> dto1 = page.getRecords().stream().map(o -> {
+                LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+                if (!ObjectUtils.isEmpty(o.getRailwayCode())) {
+                    queryWrapper.eq(BaseRailwayManagement::getRailwayCode, o.getRailwayCode());
+                }
+                BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+                if (!StringUtils.isEmptySunhh(baseRailwayManagement) && !StringUtils.isEmptySunhh(baseRailwayManagement.getRailwayName())) {
+                    o.setRailwayName(baseRailwayManagement.getRailwayName());
+                }
+                if (!StringUtils.isEmptySunhh(o.getReleasedBy())) {
+//                    BaseUser user = baseUserService.getUser(o.getReleasedBy());
+//                    if (!StringUtils.isEmptySunhh(user) && !StringUtils.isEmptySunhh(user.getNickName())) {
+//                        o.setReleasedByName(user.getNickName());
+//                    }
+                    o.setReleasedByName(o.getReleasedBy());
+                }
+                String mils = AppendUtils.stringAppend(o.getAlarmMile());
+                o.setAlarmMiles(mils);
+                o.setLineDirName(o.getLineDir() == 1 ? "上行" : "下行");
+                o.setIsReleaseName(o.getIsRelease() == 1 ? "已解除" : (o.getIsRelease() == 2 ? "未解除" : "未知"));
+                List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
+                data.stream().forEach(sysDictData -> {
+                    if (sysDictData.getDictValue().equals(o.getAlarmType().toString())) {
+                        o.setAlarmTypeName(sysDictData.getDictLabel());
+                    }
+                });
+
+                List<MsgAlarmExt> list1 = msgAlarmExtService.list(new LambdaQueryWrapper<MsgAlarmExt>().eq(MsgAlarmExt::getAlarmId, o.getAlarmId()));
+                if (!ObjectUtils.isEmpty(list1)) {
+                    List<String> collect = list1.stream().map(MsgAlarmExt::getAlarmAttPath).collect(Collectors.toList());
+                    o.setImageUrls(collect);
+                }
+                return o;
+            }).collect(Collectors.toList());
+            page.setRecords(dto1);
+        }
+        return AjaxResult.success(page);
+    }
+
+    /**
+     * 导出报警消息
+     *
+     * @param response
+     */
+    @PostMapping("/exportMsgAlarm")
+    @Log(title = "报警信息管理", businessType = BusinessType.EXPORT)
+    public void exportMsgAlarm(HttpServletResponse response, @RequestBody MsgAlarmMatterVo msgAlarmVo) {
+        msgAlarmVo = (MsgAlarmMatterVo) dataScoreUtil.setDataScore(getUserId(), msgAlarmVo);
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getAlarmMile())) {
+            msgAlarmVo.setAlarmMile(msgAlarmVo.getAlarmMile() * 1000);
+        }
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getBeginMile())) {
+            msgAlarmVo.setBeginMile(msgAlarmVo.getBeginMile() * 1000);
+        }
+        if (!ObjectUtils.isEmpty(msgAlarmVo.getEndMile())) {
+            msgAlarmVo.setEndMile(msgAlarmVo.getEndMile() * 1000);
+        }
+        List<MsgAlarmMatter> msgAlarmList = msgAlarmMatterService.msgAlarmList(msgAlarmVo);
+        for (MsgAlarmMatter o : msgAlarmList) {
+            LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<>();
+            if (!StringUtils.isEmptySunhh(o.getRailwayCode())) {
+                queryWrapper.eq(BaseRailwayManagement::getRailwayCode, o.getRailwayCode());
+            }
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+            if (!StringUtils.isEmptySunhh(baseRailwayManagement) && !StringUtils.isEmptySunhh(baseRailwayManagement.getRailwayName())) {
+                o.setRailwayName(baseRailwayManagement.getRailwayName());
+            }
+            if (StringUtils.isNotEmpty(o.getReleasedBy())) {
+//                BaseUser user = baseUserService.getUser(o.getReleasedBy());
+//                if (!StringUtils.isEmptySunhh(user) && !StringUtils.isEmptySunhh(user.getNickName())) {
+//                    o.setReleasedByName(user.getNickName());
+//                }
+                o.setReleasedByName(o.getReleasedBy());
+            }
+            String mils = AppendUtils.stringAppend(o.getAlarmMile());
+            o.setAlarmMiles(mils);
+            o.setLineDirName(o.getLineDir() == 1 ? "上行" : "下行");
+            o.setAlarmTypeStr(o.getAlarmType() == 1 ? "泥石流" : (o.getAlarmType() == 2 ? "异物侵限" : (o.getAlarmType() == 3 ? "断轨监测" : "未知")));
+            o.setIsReleaseName(o.getIsRelease() == 1 ? "已解除" : (o.getIsRelease() == 2 ? "未解除" : "未知"));
+            List<SysDictData> data = dictTypeService.selectDictDataByType("sys_alarm_type");
+            data.stream().forEach(sysDictData -> {
+                if (sysDictData.getDictValue().equals(o.getAlarmType().toString())) {
+                    o.setAlarmTypeName(sysDictData.getDictLabel());
+                }
+            });
+
+            ExcelUtil<MsgAlarmMatter> util = new ExcelUtil<>(MsgAlarmMatter.class);
+            util.exportExcel(response, msgAlarmList, "报警信息管理");
+        }
+    }
+}
+

+ 1 - 2
hazard-admin/src/main/java/com/ozs/web/controller/shotschedule/RedisPushService.java

@@ -20,8 +20,7 @@ public class RedisPushService {
 //    public final static String STREAM_CONSUMER_GROUP_KEY = "capture_group_1";
 //
 //    public void pushMsg(String msg) {
-//        // 创建消息记录流, 以及指定stream
-//        //创建的记录指定一个流的关键字(Key)STREAM_KEY
+//        // 创建消息记录, 以及指定stream
 //        StringRecord stringRecord = StreamRecords.string(Collections.singletonMap("data", msg)).withStreamKey(STREAM_KEY);
 //        // 将消息添加至消息队列中
 //        this.stringRedisTemplate.opsForStream().add(stringRecord);

+ 5 - 32
hazard-admin/src/main/java/com/ozs/web/controller/shotschedule/ShotPictureTaskExecutors.java

@@ -112,16 +112,11 @@ public class ShotPictureTaskExecutors {
 //                // 获取数据库中最新摄像头相关内容
 //                List<BaseCameraManagement> dbAlarms = baseCameraManagementMapper.selectList(queryWrapper).stream().collect(Collectors.toList());
 //                List<BaseRailwayManagement> dbRailways = baseRailwayManagementMapper.selectList(null);
-//                //如果相机表不为空
 //                if (!CollectionUtils.isEmpty(dbAlarms)) {
-//                    //循环线路集合
 //                    for(BaseRailwayManagement dbRailway:dbRailways){
-//                        //把线路名称和编码放入缓存
 //                        redisCache.setCacheObject(dbRailway.getRailwayCode(),dbRailway.getRailwayName());
 //                    }
-//                    //获取缓存中的报警的相机数据
 //                    Set<Object> hashAlarmKeys = redisService.redisTemplate.opsForHash().keys(CAMERA_ALARM_HASH);
-//                    //获取缓存中的非报警的相机数据
 //                    Set<Object> hashNormalKeys = redisService.redisTemplate.opsForHash().keys(CAMERA_NORMAL_HASH);
 //                    // 数据库中存在的数据, 但是缓存中不存在, 则进行补全
 //                    for (BaseCameraManagement dbAlarm : dbAlarms) {
@@ -131,29 +126,25 @@ public class ShotPictureTaskExecutors {
 //                        vo.setInstallMiles(AppendUtils.stringAppend(dbAlarm.getInstallMile()));
 //                        vo.setRailwayName(redisCache.getCacheObject(dbAlarm.getRailwayCode()));
 //                        vo.setNextExecuteTime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
-//                        //如果未解除的报警摄像头集合包含该相机编码 且  缓存中的报警的相机数据不包含该相机
 //                        if (lockedMsgAlarmCameraCodes.contains(vo.getCameraCode()) && !hashAlarmKeys.contains(vo.getCameraCode())) {
 //                            vo.setIsAlarm(true);
-//                            //把该相机相机信息放入报警相机缓存中
 //                            redisService.addToHash(CAMERA_ALARM_HASH, vo.getCameraCode(), vo);
-//                            //如果未解除的报警摄像头集合不包含该相机编码 且  缓存中的非报警的相机数据不包含该相机
 //                        } else if (!lockedMsgAlarmCameraCodes.contains(vo.getCameraCode()) && !hashNormalKeys.contains(vo.getCameraCode())) {
 //                            vo.setIsAlarm(false);
-//                            //把该相机相机信息放入未报警相机缓存中
 //                            redisService.addToHash(CAMERA_NORMAL_HASH, vo.getCameraCode(), vo);
 //                        }
 //                    }
-//                    // 循环redis缓存中获取的报警集合 排除缓存中未删除, 但是系统中删除的情况
+//                    // 排除缓存中未删除, 但是系统中删除的情况
 //                    for (Object hashAlarmKey : hashAlarmKeys) {
 //                        //如果报警信息数据库不存在但报警缓存中存在, 则进行删除
 //                        if(!lockedMsgAlarmCameraCodes.contains(hashAlarmKey)){
 //                            redisService.redisTemplate.opsForHash().delete(CAMERA_ALARM_HASH, hashAlarmKey);
 //                        }
-//                        // 如果在数据库和缓存中都不存在, 则进行删除删除
+//                        // 如果在数据库中都不存在, 则进行删除删除
 //                        if (!hashAlarmKeys.contains(hashAlarmKey) && !hashNormalKeys.contains(hashAlarmKey)) {
 //                            redisService.redisTemplate.opsForHash().delete(CAMERA_ALARM_HASH, hashAlarmKey);
 //                            redisService.redisTemplate.opsForHash().delete(CAMERA_NORMAL_HASH, hashAlarmKey);
-//                        } else if (hashAlarmKeys.contains(hashAlarmKey) && hashNormalKeys.contains(hashAlarmKey)) {  // 如果两个缓存中都存在, 则删除正常摄像头
+//                        } else if (hashAlarmKeys.contains(hashAlarmKey) && hashNormalKeys.contains(hashAlarmKey)) {  // 如果存在于报警SET中, 则删除正常摄像头
 //                            redisService.redisTemplate.opsForHash().delete(CAMERA_NORMAL_HASH, hashAlarmKey);
 //                        }
 //                    }
@@ -171,22 +162,18 @@ public class ShotPictureTaskExecutors {
 //    }
 //
 //    /**
-//     * 处理预警摄像头截图, 间隔: 5s
+//     * 处理预警摄像头截图, 间隔: 5s
 //     */
 //    @Scheduled(fixedDelay = 5 * 1000, initialDelay = 10 * 1000)
 //    public void batchProcess() {
-//        //如果截图开关是false直接返回
 //        if (!isMaster) return;
 //        // 填充默认路径
 //        String address = storeAddress;
 //        //获取截图开关
 //        Integer status = redisCache.getCacheObject("shot_switch");
-//        //如果截图开关为空
 //        if(status == null){
-//            //从字典中获取
 //            List<SysDictData> dataList = iSysDictTypeService.selectDictDataByType("shot_switch");
 //            if(CollectionUtils.isEmpty(dataList)){
-//                //不执行
 //                redisCache.setCacheObject("shot_switch",2);
 //                status = redisCache.getCacheObject("shot_switch");
 //            }else{
@@ -200,38 +187,25 @@ public class ShotPictureTaskExecutors {
 //        }
 //        // 获取字典值: 截图存放路径
 //        List<SysDictData> addressDataList = DictUtils.getDictCache("shot_address");
-//        //如果 截图存放路径为空
 //        if(CollectionUtils.isEmpty(addressDataList) || Objects.isNull(addressDataList.get(0))){
-//            //把截图存放路径放入缓存
 //            DictUtils.setDictCache("shot_address", addressDataList = iSysDictTypeService.selectDictDataByType("shot_address"));
 //        }
-//        //如果 截图存放路径不为空
 //        if(!CollectionUtils.isEmpty(addressDataList) && Objects.nonNull(addressDataList.get(0))){
-//            //截图存放路径赋值
 //            address = addressDataList.get(0).getDictLabel();
 //        }
-//        // 设置路径地址为字典表最终值  获取缓存中的非报警的相机数据
+//        // 设置路径地址为字典表最终值
 //        Map<Object, Object> entries = redisService.redisTemplate.opsForHash().entries(CAMERA_NORMAL_HASH);
-//        //如果不为空
 //        if (!CollectionUtils.isEmpty(entries)) {
-//            //赋值截图存放路径
 //            final String finalAddress = address;
-//            //循环非报警的相机数据
 //            for (Map.Entry<Object, Object> entry : entries.entrySet()) {
 //                BaseCameraVO item = (BaseCameraVO) entry.getValue();
-//                //获取下次执行时间
 //                DateTime nextExecuteTime = DateTime.of(item.getNextExecuteTime(), "yyyy-MM-dd HH:mm:ss");
-//                //如果下一个执行时间是否为null  或 当前时间大于或等于下一个执行时间  或 下次执行时间是否距离当前时间超过5分钟 并且 状态是否为 "running"
 //                boolean after = item.getNextExecuteTime() == null ||
 //                        DateTime.now().isAfterOrEquals(nextExecuteTime) ||
 //                        (nextExecuteTime.between(DateTime.now(), DateUnit.MINUTE) > 5 && "running".equalsIgnoreCase(item.getStatus()));
-//                //下次执行时间 距离当前时间超过 5 分钟 并且
-//                //确保 item 的状态是 "running"。
 //                if ((nextExecuteTime.between(DateTime.now(), DateUnit.MINUTE) > 5 && "running".equalsIgnoreCase(item.getStatus()))) {
-//                    //把状态设置成空
 //                    item.setStatus("");
 //                }
-//                // after是真并且状态是空  或者   状态等于complete
 //                if (after && (StringUtils.isBlank(item.getStatus()) || "complete".equalsIgnoreCase(item.getStatus()))) {
 //                    Dict dict = new Dict();
 //                    dict.put("cameraCode", item.getCameraCode());
@@ -241,7 +215,6 @@ public class ShotPictureTaskExecutors {
 //                    dict.put("installMiles", item.getInstallMiles());
 //                    dict.put("isAlarm", false);
 //                    dict.put("nextExecuteTime", item.getNextExecuteTime());
-//                    //调用方法
 //                    redisPushService.pushMsg(JSONUtil.toJsonStr(dict));
 //                }
 //            }

+ 26 - 0
hazard-admin/src/main/java/com/ozs/web/core/util/MyThreadPoolConfig.java

@@ -0,0 +1,26 @@
+package com.ozs.web.core.util;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class MyThreadPoolConfig {
+
+    @Bean
+    public ThreadPoolExecutor threadPoolExecutor()
+    {
+        return new ThreadPoolExecutor(20
+                ,200
+                ,10
+                , TimeUnit.SECONDS
+                ,new LinkedBlockingQueue(10000)
+                , Executors.defaultThreadFactory()
+                ,new ThreadPoolExecutor.AbortPolicy()
+        );
+    }
+}

+ 106 - 0
hazard-admin/src/main/java/com/ozs/web/core/util/TableCreationUtil.java

@@ -0,0 +1,106 @@
+package com.ozs.web.core.util;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.service.entity.MqLog;
+import com.ozs.service.service.MqLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableScheduling
+@EnableAsync
+public class TableCreationUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(TableCreationUtil.class);
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    @Autowired
+    ThreadPoolExecutor executor;
+
+    @Autowired
+    private MqLogService mqLogService;
+
+    @Async
+    @Scheduled(cron = "0 0 1 1 * ?")
+    public void tableCreationAndDelete() {
+        log.info("开始执行");
+        // 获取当前日期
+        LocalDate today = LocalDate.now();
+
+        // 定义格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+        // 格式化当前日期
+        String formattedDate = today.format(formatter);
+        //执行1
+        CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
+            createTable(formattedDate);
+            return 1;
+        }, executor);
+
+       // 执行2,确保在 future1 完成后执行
+        CompletableFuture<String> future2 = future1.thenApplyAsync(f1 -> batchInsertData(formattedDate), executor);
+
+       // 执行3,确保在 future1 和 future2 完成之后执行
+        future1.thenCombine(future2, (f1, f2) -> {
+            deleteMqLogData(f2);
+            return null;  // 用于满足返回值
+        });
+    }
+
+
+    public void createTable(String date) {
+        log.info("开始执行---createTable");
+        // 创建表的SQL语句
+        String createTableSql = "CREATE TABLE mq_log_" + date + "  (\n" +
+                "  `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '主键',\n" +
+                "  `camera_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '相机编码',\n" +
+                "  `create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',\n" +
+                "  PRIMARY KEY (`id`) USING BTREE\n" +
+                ") ENGINE = InnoDB AUTO_INCREMENT = 1851171506483142658 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;";
+
+        // 使用JdbcTemplate执行SQL语句
+        jdbcTemplate.execute(createTableSql);
+        log.info("Table created successfully after application startup!");
+    }
+
+    public String batchInsertData(String date) {
+        log.info("开始执行---batchInsertData"+date);
+        // 获取当前日期
+        Date currentDate = new Date();
+        // 创建SimpleDateFormat对象,指定所需的日期格式
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        // 格式化日期
+        String formattedDate = formatter.format(currentDate);
+        log.info("-----formattedDate------"+currentDate);
+        // 批量插入的SQL语句
+        String insertSql = "INSERT INTO mq_log_" + date + " (camera_code, create_time) " +
+                "SELECT camera_code, create_time FROM mq_log WHERE create_time <= ?";
+
+        // 使用JdbcTemplate执行插入操作
+        int rowsAffected = jdbcTemplate.update(insertSql, formattedDate);
+
+        log.info("Batch insert completed, {} rows inserted from mq_log_ to my_table.", rowsAffected);
+        return formattedDate;
+    }
+
+    public void deleteMqLogData(String date) {
+        log.info("开始执行---deleteMqLogData"+date);
+        mqLogService.remove(new LambdaQueryWrapper<MqLog>().le(MqLog::getCreateTime,date));
+    }
+}

+ 186 - 0
hazard-sdk/src/main/java/com/ozs/config/AjaxResults.java

@@ -0,0 +1,186 @@
+package com.ozs.config;
+
+import com.ozs.common.constant.HttpStatus;
+import com.ozs.common.utils.StringUtils;
+
+import java.util.HashMap;
+
+/**
+ * 操作消息提醒
+ *
+ * @author hx
+ */
+public class AjaxResults extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 状态码 */
+    public static final String CODE_TAG = "resultCode";
+
+    /** 返回内容 */
+    public static final String MSG_TAG = "message";
+
+    /** 数据对象 */
+    public static final String DATA_TAG = "data";
+
+    /**
+     * 初始化一个新创建的 AjaxResults 对象,使其表示一个空消息。
+     */
+    public AjaxResults()
+    {
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResults 对象
+     *
+     * @param code 状态码
+     * @param msg 返回内容
+     */
+    public AjaxResults(int code, String msg)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResults 对象
+     *
+     * @param code 状态码
+     * @param msg 返回内容
+     * @param data 数据对象
+     */
+    public AjaxResults(int code, String msg, Object data)
+    {
+        super.put(CODE_TAG, code);
+        super.put(MSG_TAG, msg);
+        if (StringUtils.isNotNull(data))
+        {
+            super.put(DATA_TAG, data);
+        }
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @return 成功消息
+     */
+    public static AjaxResults success()
+    {
+        return AjaxResults.success("操作成功");
+    }
+
+    /**
+     * 返回成功数据
+     *
+     * @return 成功消息
+     */
+    public static AjaxResults success(Object data)
+    {
+        return AjaxResults.success("操作成功", data);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @return 成功消息
+     */
+    public static AjaxResults success(String msg)
+    {
+        return AjaxResults.success(msg, null);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static AjaxResults success(String msg, Object data)
+    {
+        return new AjaxResults(HttpStatus.SUCCESS, msg, data);
+    }
+
+    /**
+     * 返回警告消息
+     *
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResults warn(String msg)
+    {
+        return AjaxResults.warn(msg, null);
+    }
+
+    /**
+     * 返回警告消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResults warn(String msg, Object data)
+    {
+        return new AjaxResults(HttpStatus.WARN, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @return 错误消息
+     */
+    public static AjaxResults error()
+    {
+        return AjaxResults.error("操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg 返回内容
+     * @return 错误消息
+     */
+    public static AjaxResults error(String msg)
+    {
+        return AjaxResults.error(msg, null);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 错误消息
+     */
+    public static AjaxResults error(String msg, Object data)
+    {
+        return new AjaxResults(HttpStatus.ERROR, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param code 状态码
+     * @param msg 返回内容
+     * @return 错误消息
+     */
+    public static AjaxResults error(int code, String msg)
+    {
+        return new AjaxResults(code, msg, null);
+    }
+
+    /**
+     * 方便链式调用
+     *
+     * @param key 键
+     * @param value 值
+     * @return 数据对象
+     */
+    @Override
+    public AjaxResults put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+}

+ 351 - 0
hazard-sdk/src/main/java/com/ozs/controller/matter/MatterMonitorTokenController.java

@@ -0,0 +1,351 @@
+package com.ozs.controller.matter;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.annotation.SdkLog;
+import com.ozs.common.enums.BusinessTypeSdk;
+import com.ozs.common.utils.ApiTokenUtils;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.common.utils.stateSecrets.SM4Utils;
+import com.ozs.config.AjaxResults;
+import com.ozs.service.entity.*;
+import com.ozs.service.entity.vo.Files;
+import com.ozs.service.entity.vo.ParameterVo;
+import com.ozs.service.entity.vo.ReleaseAlarmVo;
+import com.ozs.service.entity.vo.ReqMsgAlarmMatterVo;
+import com.ozs.service.service.*;
+import com.ozs.vo.RespGeoHazardMonitorVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+/**
+ * 1. 获取身份认证控制层
+ *
+ * @author Administrator
+ */
+@RestController
+@Slf4j
+public class MatterMonitorTokenController {
+    public static final String PATTERNS = "^[0-9]*$";
+    @Resource
+    private ApiTokenUtils apiTokenUtils;
+    @Autowired
+    MsgAlarmMatterService msgAlarmMatterService;
+    @Autowired
+    MsgAlarmFrequencyMatterService msgAlarmFrequencyMatterService;
+    @Autowired
+    SvcAddressService svcAddressService;
+    @Autowired
+    BaseCameraManagementService baseCameraManagementService;
+    @Autowired
+    private MsgAlarmExtService msgAlarmExtService;
+    @Autowired
+    private BaseRailwayManagementService baseRailwayManagementService;
+    @Autowired
+    private BaseUserService baseUserService;
+    @Value("${base.imgUrl}")
+    private String imgUrl;
+    @Autowired
+    private BaseMeasurePointService baseMeasurePointService;
+
+    /**
+     * 异物侵限获取web访问令牌
+     *
+     * @return
+     */
+    @PostMapping("/api/token")
+    @SdkLog(title = "获取web访问令牌", businessType = BusinessTypeSdk.TOKEN)
+    public String getWebToken(@RequestBody SvcAddress svcAddress) {
+        // 生成令牌
+        JSONObject jsonObject = new JSONObject();
+        LambdaQueryWrapper<SvcAddress> lw = new LambdaQueryWrapper<SvcAddress>();
+        if (!ObjectUtils.isEmpty(svcAddress.getClientId())) {
+            lw.eq(SvcAddress::getClientId, svcAddress.getClientId());
+        } else {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "客户端编号不能为空");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "f5408458becc8c68");
+        }
+        SvcAddress serviceOne = svcAddressService.getOne(lw);
+        if (!ObjectUtils.isEmpty(serviceOne)) {
+            if (serviceOne.getClientSecret().equals(svcAddress.getClientSecret())) {
+                ArrayList<String> objects = apiTokenUtils.createGeoHazardMonitorToken(svcAddress.getGrantType(), svcAddress.getClientId(), svcAddress.getClientSecret());
+                if (objects.size() > 0) {
+                    RespGeoHazardMonitorVo respGeoHazardMonitorVo = new RespGeoHazardMonitorVo();
+                    respGeoHazardMonitorVo.setAccessToken(objects.get(1));
+                    Long l = Long.valueOf(objects.get(0));
+                    respGeoHazardMonitorVo.setExpiresIn(l / 1000);
+                    respGeoHazardMonitorVo.setTokenType("令牌类型");
+                    jsonObject.put("resultCode", 1);
+                    jsonObject.put("message", "成功");
+                    jsonObject.put("data", respGeoHazardMonitorVo);
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "f5408458becc8c68");
+                } else {
+                    jsonObject.put("resultCode", 0);
+                    jsonObject.put("message", "失败");
+                    jsonObject.put("data", "生成token失败");
+                    return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "f5408458becc8c68");
+                }
+            } else {
+                jsonObject.put("resultCode", 0);
+                jsonObject.put("message", "失败");
+                jsonObject.put("data", "客户端密钥错误");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "f5408458becc8c68");
+            }
+        } else {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "参数验证失败");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(jsonObject), "f5408458becc8c68");
+        }
+    }
+
+    /**
+     * 报警信息数据传输
+     */
+    @PostMapping("/api/alarm")
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized String alarm(@RequestBody ParameterVo parameterVo, HttpServletRequest request) throws Exception {
+        long begin = System.currentTimeMillis();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+        log.info("报警信息数据传输开始时间: " + simpleDateFormat.format(new Date(begin)));
+        String token = apiTokenUtils.getGeoHazardMonitorToken(request);
+        log.info("token:{}", token);
+        log.info("parameter:{}", parameterVo);
+        AjaxResults AjaxResults1 = null;
+        if (StringUtils.isNotEmpty(token)) {
+            String[] split = token.split("-");
+            if (ObjectUtils.isEmpty(parameterVo)) {
+                AjaxResults1 = new AjaxResults(0, "parameterVo参数不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "f5408458becc8c68");
+            ReqMsgAlarmMatterVo reqMsgAlarmMatterVo = JSON.parseObject(s, ReqMsgAlarmMatterVo.class);
+            if (!reqMsgAlarmMatterVo.getAlarmMile().toString().matches(PATTERNS)) {
+                AjaxResults1 = new AjaxResults(0, "报警里程位置填写错误");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (reqMsgAlarmMatterVo.getLineDir() != 1 && reqMsgAlarmMatterVo.getLineDir() != 2) {
+                AjaxResults1 = new AjaxResults(0, "行别填写错误");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+            if (!ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getAlarmRailway())) {
+                queryWrapper.eq(BaseRailwayManagement::getRailwayCode, reqMsgAlarmMatterVo.getAlarmRailway());
+            }
+            BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+            if (ObjectUtils.isEmpty(baseRailwayManagement)) {
+                AjaxResults1 = new AjaxResults(0, "填写的报警线路编码不存在");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getAlarmId())) {
+                AjaxResults1 = new AjaxResults(0, "报警的唯一标识不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getAlarmTime())) {
+                AjaxResults1 = new AjaxResults(0, "报警时间不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getAlarmAttr())) {
+                AjaxResults1 = new AjaxResults(0, "报警病害属性不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (reqMsgAlarmMatterVo.getAlarmType() < 1 || reqMsgAlarmMatterVo.getAlarmType() > 4) {
+                AjaxResults1 = new AjaxResults(0, "报警病害类型填写错误");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (!reqMsgAlarmMatterVo.getAlarmLevel().toString().matches(PATTERNS)) {
+                AjaxResults1 = new AjaxResults(0, "报警级别填写错误");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getPointCode())) {
+                AjaxResults1 = new AjaxResults(0, "测点编码不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getFiles())) {
+                AjaxResults1 = new AjaxResults(0, "报警文件集合不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            BaseMeasurePoint one = baseMeasurePointService.getOne(new LambdaQueryWrapper<BaseMeasurePoint>()
+                    .eq(BaseMeasurePoint::getPointCode, reqMsgAlarmMatterVo.getPointCode()));
+            if (ObjectUtils.isEmpty(one)){
+                AjaxResults1 = new AjaxResults(0, "系统中不存在该测点编码");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (reqMsgAlarmMatterVo.getAlarmTime().toString().length() == 10) {
+                reqMsgAlarmMatterVo.setAlarmTime(reqMsgAlarmMatterVo.getAlarmTime() * 1000);
+            }
+            log.info("reqMsgAlarmVo:{}", reqMsgAlarmMatterVo);
+
+
+            LambdaQueryWrapper<MsgAlarmMatter> lw = new LambdaQueryWrapper<MsgAlarmMatter>();
+            if (!ObjectUtils.isEmpty(reqMsgAlarmMatterVo.getAlarmId())) {
+                lw.eq(MsgAlarmMatter::getAlarmId, reqMsgAlarmMatterVo.getAlarmId());
+            }
+            MsgAlarmMatter alarm = msgAlarmMatterService.getOne(lw);
+            BaseUser admin = baseUserService.getUserName("admin");
+            MsgAlarmFrequencyMatter msgAlarmFrequencyMatter = new MsgAlarmFrequencyMatter();
+            if (ObjectUtils.isEmpty(alarm)) {
+                MsgAlarmMatter msgAlarmMatter = new MsgAlarmMatter();
+                String[] alarmAttr = reqMsgAlarmMatterVo.getAlarmAttr();
+                if (alarmAttr.length > 0) {
+                    StringBuilder builder = new StringBuilder();
+                    for (int i = 0; i < alarmAttr.length; i++) {
+                        builder.append(alarmAttr[i]);
+                        if (i < alarmAttr.length - 1) {
+                            builder.append(":");
+                        }
+                    }
+
+                    msgAlarmMatter.setAlarmAttr(builder.toString());
+                }
+                BeanUtils.copyProperties(reqMsgAlarmMatterVo, msgAlarmMatter);
+                BeanUtils.copyProperties(reqMsgAlarmMatterVo, msgAlarmFrequencyMatter);
+                msgAlarmMatter.setCreateBy(admin.getUserId());
+                msgAlarmMatter.setUpdateBy(admin.getUserId());
+                log.info("时间++++ long ---- " + reqMsgAlarmMatterVo.getAlarmTime());
+                log.info("时间++++" + new Date(reqMsgAlarmMatterVo.getAlarmTime()));
+                msgAlarmMatter.setAlarmTime(new Date(reqMsgAlarmMatterVo.getAlarmTime()));
+                log.info("时间++++get" + msgAlarmMatter.getAlarmTime());
+                msgAlarmMatter.setRailwayCode(reqMsgAlarmMatterVo.getAlarmRailway());
+                String source = split[split.length - 2];
+                msgAlarmMatter.setSource(source);
+
+                for (Files file : reqMsgAlarmMatterVo.getFiles()) {
+                    if (ObjectUtils.isEmpty(file.getFileType())) {
+                        AjaxResults1 = new AjaxResults(0, "文件类型不能为空");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+                    }
+                    if (ObjectUtils.isEmpty(file.getFileName())) {
+                        AjaxResults1 = new AjaxResults(0, "文件名称不能为空");
+                        return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+                    }
+                    MsgAlarmExt msgAlarmExt = new MsgAlarmExt();
+                    msgAlarmExt.setAlarmId(msgAlarmMatter.getAlarmId());
+                    SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyyMMdd");
+                    String format1 = dateFormat1.format(new Date());
+                    String fileName = imgUrl + "/yiwuqinxian/" + reqMsgAlarmMatterVo.getAlarmRailway() + "/" + reqMsgAlarmMatterVo.getPointCode() + "/" + format1 + "/" + file.getFileName();
+                    msgAlarmExt.setAlarmAttPath(fileName);
+                    msgAlarmExt.setAlarmAttType(file.getFileType());
+                    msgAlarmExt.setCreateTime(new Date());
+                    msgAlarmExtService.save(msgAlarmExt);
+                }
+
+
+                msgAlarmMatterService.save(msgAlarmMatter);
+                msgAlarmFrequencyMatter.setCreateBy(admin.getUserId());
+                msgAlarmFrequencyMatter.setUpdateBy(admin.getUserId());
+                msgAlarmFrequencyMatter.setRailwayCode(reqMsgAlarmMatterVo.getAlarmRailway());
+                msgAlarmFrequencyMatter.setAlarmTime(new Date(reqMsgAlarmMatterVo.getAlarmTime()));
+                msgAlarmFrequencyMatterService.save(msgAlarmFrequencyMatter);
+
+//                log.info("alarmJSON :{}", JSON.toJSONString(msgAlarmMatter));
+//                log.info("->>>>>>>>>>>>>>>>>>>>>>>>>>" + msgAlarmMatter);
+//                String result = HttpClientUtil.postJson(sdkUrl, JSON.toJSONString(msgAlarmMatter));
+//                log.info("->>>>>>>>>>>>>>>>>>>>>>>>>>>>" + result);
+//                log.info("result:{}", result);
+            } else {
+                BeanUtils.copyProperties(reqMsgAlarmMatterVo, msgAlarmFrequencyMatter);
+                msgAlarmFrequencyMatter.setCreateBy(admin.getUserId());
+                msgAlarmFrequencyMatter.setUpdateBy(admin.getUserId());
+                msgAlarmFrequencyMatter.setAlarmTime(new Date(reqMsgAlarmMatterVo.getAlarmTime()));
+                msgAlarmFrequencyMatter.setRailwayCode(reqMsgAlarmMatterVo.getAlarmRailway());
+                msgAlarmFrequencyMatterService.save(msgAlarmFrequencyMatter);
+            }
+            AjaxResults1 = new AjaxResults(1, "ok");
+            long end = System.currentTimeMillis();
+            log.info("报警信息数据传输结束时间: " + simpleDateFormat.format(new Date(end)));
+            log.info("报警信息数据传输请求用时时间:" + (end - begin) + "毫秒");
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+        } else {
+            AjaxResults1 = new AjaxResults(2, "token验证失败");
+            return JSONObject.toJSONString(AjaxResults1);
+        }
+    }
+
+    /**
+     * 报警解除接口
+     *
+     * @param parameterVo
+     * @param request
+     * @return
+     */
+    @PostMapping("/api/releaseAlarm")
+    public String releaseAlarm(@RequestBody ParameterVo parameterVo, HttpServletRequest request) {
+        AjaxResults AjaxResults1 = null;
+        String token = apiTokenUtils.getGeoHazardMonitorToken(request);
+        log.info("token:{}", token);
+        log.info("parameter:{}", parameterVo);
+        if (StringUtils.isNotEmpty(token)) {
+            if (ObjectUtils.isEmpty(parameterVo)) {
+                AjaxResults1 = new AjaxResults(0, "parameterVo参数不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            String s = SM4Utils.decryptData_ECB(parameterVo.getParameter(), "f5408458becc8c68");
+            ReleaseAlarmVo releaseAlarmVo = JSON.parseObject(s, ReleaseAlarmVo.class);
+            if (ObjectUtils.isEmpty(releaseAlarmVo.getAlarmId())) {
+                AjaxResults1 = new AjaxResults(0, "报警的唯一标识不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(releaseAlarmVo.getReleaseTime())) {
+                AjaxResults1 = new AjaxResults(0, "解除报警时间不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(releaseAlarmVo.getReleaseContent())) {
+                AjaxResults1 = new AjaxResults(0, "解除原因不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (ObjectUtils.isEmpty(releaseAlarmVo.getOperator())) {
+                AjaxResults1 = new AjaxResults(0, "解除人不能为空");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            LambdaQueryWrapper<MsgAlarmMatter> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(MsgAlarmMatter::getAlarmId, releaseAlarmVo.getAlarmId());
+            MsgAlarmMatter msgAlarm = msgAlarmMatterService.getOne(wrapper);
+            if (ObjectUtils.isEmpty(msgAlarm)) {
+                AjaxResults1 = new AjaxResults(0, "不存在该报警的唯一标识的数据");
+                return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+            }
+            if (releaseAlarmVo.getReleaseTime().toString().length() == 10) {
+                releaseAlarmVo.setReleaseTime(releaseAlarmVo.getReleaseTime() * 1000);
+            }
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date(releaseAlarmVo.getReleaseTime()));
+            cal.set(Calendar.MILLISECOND, 0);
+            cal.set(Calendar.MILLISECOND, 0);
+            msgAlarm.setReleasedTime(cal.getTime());
+            msgAlarm.setReleaseContent(releaseAlarmVo.getReleaseContent());
+            msgAlarm.setReleasedBy(releaseAlarmVo.getOperator());
+            msgAlarm.setUpdateBy(releaseAlarmVo.getOperator());
+            msgAlarm.setUpdateTime(new Date());
+            msgAlarm.setIsRelease(1);
+            boolean count = msgAlarmMatterService.updateById(msgAlarm);
+            Map<String, Object> map = new HashMap<>();
+            map.put("alarmId", msgAlarm.getAlarmId());
+            if (count) {
+                map.put("releaseState", 1);
+                AjaxResults1 = new AjaxResults(1, "ok", map);
+            } else {
+                map.put("releaseState", 2);
+                AjaxResults1 = new AjaxResults(0, "失败", map);
+            }
+            return SM4Utils.encryptData_ECB(JSONObject.toJSONString(AjaxResults1), "f5408458becc8c68");
+        } else {
+            AjaxResults1 = new AjaxResults(2, "token验证失败");
+            return JSONObject.toJSONString(AjaxResults1);
+        }
+    }
+}

+ 134 - 0
hazard-sdk/src/main/java/com/ozs/controller/matter/MatterUploadController.java

@@ -0,0 +1,134 @@
+package com.ozs.controller.matter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ozs.common.utils.MinioUtils;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.service.entity.BaseMeasurePoint;
+import com.ozs.service.entity.BaseRailwayManagement;
+import com.ozs.service.service.BaseCameraManagementService;
+import com.ozs.service.service.BaseMeasurePointService;
+import com.ozs.service.service.BaseRailwayManagementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@RestController
+public class MatterUploadController {
+
+    public static final String PATTERN = "^[0-9]*$";
+    @Value("${minio.bucketName}")
+    private String bucketName;
+
+    @Resource
+    MinioUtils minioUtils;
+    @Autowired
+    BaseCameraManagementService baseCameraManagementService;
+    @Autowired
+    private BaseRailwayManagementService baseRailwayManagementService;
+    @Autowired
+    private BaseMeasurePointService baseMeasurePointService;
+
+
+    @PostMapping("/api/putFile")
+    public JSONObject upLoadImage(@RequestParam("stream") MultipartFile stream,
+                                  @RequestParam(value = "size", required = false) Long size,
+                                  @RequestParam(value = "contentType", required = false) String contentType,
+                                  @RequestParam(value = "alarmMile", required = false) Integer alarmMile,
+                                  @RequestParam(value = "alarmRailway", required = false) String alarmRailway,
+                                  @RequestParam(value = "fileType", required = false) Integer fileType,
+                                  @RequestParam(value = "fileName", required = false) String fileName,
+                                  @RequestParam(value = "pointCode", required = false) String pointCode,
+                                  @RequestParam(value = "lineDir", required = false) Integer lineDir) throws Exception {
+
+        JSONObject jsonObject = new JSONObject();
+        if (stream.isEmpty()) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "不能上传空文件哦");
+            return jsonObject;
+        }
+        if (lineDir != 1 && lineDir != 2) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "行别填写错误");
+            return jsonObject;
+        }
+        if (!alarmMile.toString().matches(PATTERN)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "报警里程位置填写格式不正确");
+            return jsonObject;
+        }
+        if (!size.toString().matches(PATTERN)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "要上传的stream的填写格式不正确");
+            return jsonObject;
+        }
+        if (ObjectUtils.isEmpty(contentType)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "Content Type不能为空");
+            return jsonObject;
+        }
+        if (ObjectUtils.isEmpty(pointCode)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "测点编码不能为空");
+            return jsonObject;
+        }
+        if (ObjectUtils.isEmpty(fileName)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "文件名不能为空");
+            return jsonObject;
+        }
+        BaseMeasurePoint one = baseMeasurePointService.getOne(new LambdaQueryWrapper<BaseMeasurePoint>()
+                .eq(BaseMeasurePoint::getPointCode, pointCode));
+        if (ObjectUtils.isEmpty(one)){
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "系统中不存在该测点编码");
+            return jsonObject;
+        }
+        LambdaQueryWrapper<BaseRailwayManagement> queryWrapper = new LambdaQueryWrapper<BaseRailwayManagement>();
+        if (!ObjectUtils.isEmpty(alarmRailway)) {
+            queryWrapper.eq(BaseRailwayManagement::getRailwayCode, alarmRailway);
+        }
+        BaseRailwayManagement baseRailwayManagement = baseRailwayManagementService.getOne(queryWrapper);
+        if (ObjectUtils.isEmpty(baseRailwayManagement)) {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "填写的报警线路编码不存在");
+            return jsonObject;
+        }
+        if (!stream.isEmpty()) {
+            String imageName = stream.getOriginalFilename();
+            if (StringUtils.isNotBlank(imageName)) {
+                SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyyMMdd");
+                String format1 = dateFormat1.format(new Date());
+                String imgName = "yiwuqinxian/"+alarmRailway + "/" + pointCode + "/" + format1 + "/" + imageName;
+                minioUtils.minIoClientUpload(stream.getInputStream(), imgName);
+            }
+        } else {
+            jsonObject.put("resultCode", 0);
+            jsonObject.put("message", "失败");
+            jsonObject.put("data", "图片为null");
+            return jsonObject;
+        }
+        jsonObject.put("resultCode", 1);
+        jsonObject.put("message", "成功");
+        jsonObject.put("data", null);
+        return jsonObject;
+    }
+}