‘liusuyi’
2023-12-06 e4043f3eea29b75ab7576f5489ed817985b71aa4
增加超脑报警业务
已修改9个文件
已添加6个文件
973 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/superbrain/controller/ArdAlarmSuperBrainController.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/superbrain/domain/ArdAlarmSuperBrain.java 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/superbrain/mapper/ArdAlarmSuperBrainMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/superbrain/service/IArdAlarmSuperBrainService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/superbrain/service/impl/ArdAlarmSuperBrainServiceImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDKFactory.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/alarm/ArdAlarmSuperBrainMapper.xml 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -22,6 +22,8 @@
import com.ruoyi.alarm.radar.mapper.ArdAlarmRadarPumpMapper;
import com.ruoyi.alarm.steal.domain.ArdAlarmStealelec;
import com.ruoyi.alarm.steal.mapper.ArdAlarmStealelecMapper;
import com.ruoyi.alarm.superbrain.domain.ArdAlarmSuperBrain;
import com.ruoyi.alarm.superbrain.mapper.ArdAlarmSuperBrainMapper;
import com.ruoyi.alarm.tube.domain.ArdAlarmTube;
import com.ruoyi.alarm.tube.mapper.ArdAlarmTubeMapper;
import com.ruoyi.alarm.wall.domain.ArdAlarmWall;
@@ -74,6 +76,8 @@
@Slf4j(topic = "mqtt")
public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
    //region ä¾èµ–注入
    @Resource
    private ArdAlarmSuperBrainMapper ardAlarmSuperBrainMapper;
    @Resource
    private ArdAlarmDigitization3Mapper ardAlarmDigitization3Mapper;
    @Resource
@@ -153,6 +157,8 @@
        countMap.put("1014", count1014);
        int count1012 = ardAlarmDigitization3Mapper.selectCountByAlarmTime(refreshTime);
        countMap.put("1012", count1012);
        int count1015 = ardAlarmSuperBrainMapper.selectCountByAlarmTime(refreshTime);
        countMap.put("1015", count1015);
        map.put("20000", countMap);
        return map;
    }
@@ -325,6 +331,22 @@
                                    .setAltitude(ardAlarmTube.getAltitude())
                                    .setCount(ardAlarmTube.getCount())
                                    .setTotal(ardAlarmTube.getTotal());
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            case 1015:
                List<ArdAlarmSuperBrain> ardAlarmSuperBrains = ardAlarmSuperBrainMapper.selectListAllByCommand(refreshTime);
                return ardAlarmSuperBrains.stream()
                        .map(ardAlarmSuperBrain -> {
                            GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                                    .setId(ardAlarmSuperBrain.getId())
                                    .setName(ardAlarmSuperBrain.getAlarmType())
                                    .setAlarmType(ardAlarmSuperBrain.getAlarmType())
                                    .setAlarmTime(ardAlarmSuperBrain.getAlarmTime())
                                    .setLongitude(ardAlarmSuperBrain.getLongitude())
                                    .setLatitude(ardAlarmSuperBrain.getLatitude())
                                    .setAltitude(ardAlarmSuperBrain.getAltitude())
                                    .setCount(ardAlarmSuperBrain.getCount())
                                    .setTotal(ardAlarmSuperBrain.getTotal());
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            default:
@@ -500,6 +522,22 @@
                                    .setAltitude(ardAlarmTube.getAltitude())
                                    .setCount(ardAlarmTube.getCount())
                                    .setTotal(ardAlarmTube.getTotal());
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            case 1015:
                List<ArdAlarmSuperBrain> ardAlarmSuperBrains = ardAlarmSuperBrainMapper.selectListAllByCommand(refreshTime);
                return ardAlarmSuperBrains.stream()
                        .map(ardAlarmSuperBrain -> {
                            GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                                    .setId(ardAlarmSuperBrain.getId())
                                    .setName(ardAlarmSuperBrain.getAlarmType())
                                    .setAlarmType(ardAlarmSuperBrain.getAlarmType())
                                    .setAlarmTime(ardAlarmSuperBrain.getAlarmTime())
                                    .setLongitude(ardAlarmSuperBrain.getLongitude())
                                    .setLatitude(ardAlarmSuperBrain.getLatitude())
                                    .setAltitude(ardAlarmSuperBrain.getAltitude())
                                    .setCount(ardAlarmSuperBrain.getCount())
                                    .setTotal(ardAlarmSuperBrain.getTotal());
                            return globalAlarmData;
                        }).collect(Collectors.toList());
            default:
@@ -692,6 +730,7 @@
        if (alarmData1012.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1012);
        }
        List<ArdAlarmTube> ardAlarmTubes = ardAlarmTubeMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1014 = ardAlarmTubes.stream()
                .map(ardAlarmTube -> {
@@ -710,6 +749,26 @@
        if (alarmData1014.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1014);
        }
        List<ArdAlarmSuperBrain> ardAlarmSuperBrains = ardAlarmSuperBrainMapper.selectListAllByCommand(refreshTime);
        List<GlobalAlarmData> alarmData1015 = ardAlarmSuperBrains.stream()
                .map(ardAlarmSuperBrain -> {
                    GlobalAlarmData globalAlarmData = new GlobalAlarmData()
                            .setId(ardAlarmSuperBrain.getId())
                            .setName(ardAlarmSuperBrain.getAlarmType())
                            .setAlarmTime(ardAlarmSuperBrain.getAlarmTime())
                            .setLongitude(ardAlarmSuperBrain.getLongitude())
                            .setLatitude(ardAlarmSuperBrain.getLatitude())
                            .setAltitude(ardAlarmSuperBrain.getAltitude())
                            .setCount(ardAlarmSuperBrain.getCount())
                            .setTotal(ardAlarmSuperBrain.getTotal())
                            .setAlarmType("1015");
                    return globalAlarmData;
                }).collect(Collectors.toList());
        if (alarmData1015.size() > 0) {
            GlobalAlarmDataList.addAll(alarmData1015);
        }
        return GlobalAlarmDataList;
    }
@@ -798,6 +857,12 @@
                aat.setPageNum(pageNum);
                aat.setPageSize(pageSize);
                return ardAlarmTubeMapper.selectArdAlarmTubeList(aat);
            case 1015:
                ArdAlarmSuperBrain aasb = new ArdAlarmSuperBrain();
                aasb.setParams(params);
                aasb.setPageNum(pageNum);
                aasb.setPageSize(pageSize);
                return ardAlarmSuperBrainMapper.selectArdAlarmSuperBrainList(aasb);
        }
        return null;
    }
@@ -903,6 +968,14 @@
                    String alarmTime = fmt.format(ardAlarmTube.getAlarmTime());
                    ardAlarmTubeMapper.updateViewTimeByTubeId(tubeId, alarmTime, DateUtils.getTime());
                    return ardAlarmTube;
                }
            case 1015:
                ArdAlarmSuperBrain ardAlarmSuperBrain = ardAlarmSuperBrainMapper.selectArdAlarmSuperBrainById(condition.getId());
                if (StringUtils.isNotNull(ardAlarmSuperBrain)) {
                    String alarmType = ardAlarmSuperBrain.getAlarmType();
                    String alarmTime = fmt.format(ardAlarmSuperBrain.getAlarmTime());
                    ardAlarmSuperBrainMapper.updateViewTimeByAlarmType(alarmType, alarmTime, DateUtils.getTime());
                    return ardAlarmSuperBrain;
                }
            default:
                return null;
@@ -1245,6 +1318,17 @@
                    }
                    //endregion
                    break;
                case "superBrain":
                    //region è¶…脑报警
                    ArdAlarmSuperBrain ardAlarmSuperBrain = JSONObject.parseObject(message, ArdAlarmSuperBrain.class);
                    ardAlarmSuperBrain.setId(IdUtils.simpleUUID());
                    ardAlarmSuperBrain.setCreateTime(new Date());
                    int sbRes = ardAlarmSuperBrainMapper.insertArdAlarmSuperBrain(ardAlarmSuperBrain);
                    if (sbRes > 0) {
                        log.debug("superBrain入库成功:" + ardAlarmSuperBrain);
                    }
                    //endregion
                    break;
            }
        } catch (Exception ex) {
            log.error("接收报警异常:" + ex.getMessage());
ard-work/src/main/java/com/ruoyi/alarm/superbrain/controller/ArdAlarmSuperBrainController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.alarm.superbrain.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.alarm.superbrain.domain.ArdAlarmSuperBrain;
import com.ruoyi.alarm.superbrain.service.IArdAlarmSuperBrainService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * è¶…脑报警Controller
 *
 * @author ard
 * @date 2023-12-06
 */
@RestController
@RequestMapping("/alarm/superbrain")
public class ArdAlarmSuperBrainController extends BaseController
{
    @Autowired
    private IArdAlarmSuperBrainService ardAlarmSuperBrainService;
    /**
     * æŸ¥è¯¢è¶…脑报警列表
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:list')")
    @GetMapping("/list")
    public TableDataInfo list(ArdAlarmSuperBrain ardAlarmSuperBrain)
    {
        startPage();
        List<ArdAlarmSuperBrain> list = ardAlarmSuperBrainService.selectArdAlarmSuperBrainList(ardAlarmSuperBrain);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºè¶…脑报警列表
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:export')")
    @Log(title = "超脑报警", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ArdAlarmSuperBrain ardAlarmSuperBrain)
    {
        List<ArdAlarmSuperBrain> list = ardAlarmSuperBrainService.selectArdAlarmSuperBrainList(ardAlarmSuperBrain);
        ExcelUtil<ArdAlarmSuperBrain> util = new ExcelUtil<ArdAlarmSuperBrain>(ArdAlarmSuperBrain.class);
        util.exportExcel(response, list, "超脑报警数据");
    }
    /**
     * èŽ·å–è¶…è„‘æŠ¥è­¦è¯¦ç»†ä¿¡æ¯
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id)
    {
        return success(ardAlarmSuperBrainService.selectArdAlarmSuperBrainById(id));
    }
    /**
     * æ–°å¢žè¶…脑报警
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:add')")
    @Log(title = "超脑报警", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ArdAlarmSuperBrain ardAlarmSuperBrain)
    {
        return toAjax(ardAlarmSuperBrainService.insertArdAlarmSuperBrain(ardAlarmSuperBrain));
    }
    /**
     * ä¿®æ”¹è¶…脑报警
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:edit')")
    @Log(title = "超脑报警", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ArdAlarmSuperBrain ardAlarmSuperBrain)
    {
        return toAjax(ardAlarmSuperBrainService.updateArdAlarmSuperBrain(ardAlarmSuperBrain));
    }
    /**
     * åˆ é™¤è¶…脑报警
     */
    @PreAuthorize("@ss.hasPermi('alarm:superbrain:remove')")
    @Log(title = "超脑报警", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids)
    {
        return toAjax(ardAlarmSuperBrainService.deleteArdAlarmSuperBrainByIds(ids));
    }
}
ard-work/src/main/java/com/ruoyi/alarm/superbrain/domain/ArdAlarmSuperBrain.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,237 @@
package com.ruoyi.alarm.superbrain.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * è¶…脑报警对象 ard_alarm_super_brain
 *
 * @author ard
 * @date 2023-12-06
 */
public class ArdAlarmSuperBrain extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** æŠ¥è­¦ä¸»é”® */
    private String id;
    /** æŠ¥è­¦åç§° */
    @Excel(name = "报警名称")
    private String alarmName;
    /** æŠ¥è­¦ç±»åž‹ */
    @Excel(name = "报警类型")
    private String alarmType;
    /** æŠ¥è­¦æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "报警时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date alarmTime;
    /** è®¾å¤‡id */
    @Excel(name = "设备id")
    private String deviceId;
    /** è®¾å¤‡åç§° */
    @Excel(name = "设备名称")
    private String deviceName;
    /** é€šé“号 */
    @Excel(name = "通道号")
    private Integer chanNo;
    /** ç»åº¦ */
    @Excel(name = "经度")
    private Double longitude;
    /** çº¬åº¦ */
    @Excel(name = "纬度")
    private Double latitude;
    /** é«˜å±‚ */
    @Excel(name = "高层")
    private Double altitude;
    /** å›¾ç‰‡url */
    @Excel(name = "图片url")
    private String picUrl;
    /** äººè„¸å›¾ç‰‡url */
    @Excel(name = "人脸图片url")
    private String faceUrl;
    /** æŸ¥çœ‹æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "查看时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date viewTime;
    /**
     * æŠ¥è­¦æ€»æ•°
     */
    private Integer total;
    /**
     * æœªè¯»æŠ¥è­¦æ•°é‡
     */
    private Integer count;
    public Integer getTotal() {
        return total;
    }
    public void setTotal(Integer total) {
        this.total = total;
    }
    public Integer getCount() {
        return count;
    }
    public void setCount(Integer count) {
        this.count = count;
    }
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setAlarmName(String alarmName)
    {
        this.alarmName = alarmName;
    }
    public String getAlarmName()
    {
        return alarmName;
    }
    public void setAlarmType(String alarmType)
    {
        this.alarmType = alarmType;
    }
    public String getAlarmType()
    {
        return alarmType;
    }
    public void setAlarmTime(Date alarmTime)
    {
        this.alarmTime = alarmTime;
    }
    public Date getAlarmTime()
    {
        return alarmTime;
    }
    public void setDeviceId(String deviceId)
    {
        this.deviceId = deviceId;
    }
    public String getDeviceId()
    {
        return deviceId;
    }
    public void setDeviceName(String deviceName)
    {
        this.deviceName = deviceName;
    }
    public String getDeviceName()
    {
        return deviceName;
    }
    public void setChanNo(Integer chanNo)
    {
        this.chanNo = chanNo;
    }
    public Integer getChanNo()
    {
        return chanNo;
    }
    public void setLongitude(Double longitude)
    {
        this.longitude = longitude;
    }
    public Double getLongitude()
    {
        return longitude;
    }
    public void setLatitude(Double latitude)
    {
        this.latitude = latitude;
    }
    public Double getLatitude()
    {
        return latitude;
    }
    public void setAltitude(Double altitude)
    {
        this.altitude = altitude;
    }
    public Double getAltitude()
    {
        return altitude;
    }
    public void setPicUrl(String picUrl)
    {
        this.picUrl = picUrl;
    }
    public String getPicUrl()
    {
        return picUrl;
    }
    public void setFaceUrl(String faceUrl)
    {
        this.faceUrl = faceUrl;
    }
    public String getFaceUrl()
    {
        return faceUrl;
    }
    public void setViewTime(Date viewTime)
    {
        this.viewTime = viewTime;
    }
    public Date getViewTime()
    {
        return viewTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("alarmName", getAlarmName())
            .append("alarmType", getAlarmType())
            .append("alarmTime", getAlarmTime())
            .append("deviceId", getDeviceId())
            .append("deviceName", getDeviceName())
            .append("chanNo", getChanNo())
            .append("longitude", getLongitude())
            .append("latitude", getLatitude())
            .append("altitude", getAltitude())
            .append("picUrl", getPicUrl())
            .append("faceUrl", getFaceUrl())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("viewTime", getViewTime())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/alarm/superbrain/mapper/ArdAlarmSuperBrainMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.alarm.superbrain.mapper;
import java.util.List;
import com.ruoyi.alarm.superbrain.domain.ArdAlarmSuperBrain;
import com.ruoyi.alarm.tube.domain.ArdAlarmTube;
import org.apache.ibatis.annotations.Param;
/**
 * è¶…脑报警Mapper接口
 *
 * @author ard
 * @date 2023-12-06
 */
public interface ArdAlarmSuperBrainMapper
{
    /**
     * æŸ¥è¯¢è¶…脑报警
     *
     * @param id è¶…脑报警主键
     * @return è¶…脑报警
     */
    public ArdAlarmSuperBrain selectArdAlarmSuperBrainById(String id);
    /**
     * æŸ¥è¯¢è¶…脑报警列表
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return è¶…脑报警集合
     */
    public List<ArdAlarmSuperBrain> selectArdAlarmSuperBrainList(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * æ–°å¢žè¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    public int insertArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * ä¿®æ”¹è¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    public int updateArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * åˆ é™¤è¶…脑报警
     *
     * @param id è¶…脑报警主键
     * @return ç»“æžœ
     */
    public int deleteArdAlarmSuperBrainById(String id);
    /**
     * æ‰¹é‡åˆ é™¤è¶…脑报警
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdAlarmSuperBrainByIds(String[] ids);
    public List<ArdAlarmSuperBrain> selectListAllByCommand(@Param("refreshTime")String refreshTime);
    int selectCountByAlarmTime(@Param("refreshTime")String refreshTime);
    public int updateViewTimeByAlarmType(@Param("alarmType")String alarmType,@Param("alarmTime") String alarmTime,@Param("viewTime") String viewTime);
}
ard-work/src/main/java/com/ruoyi/alarm/superbrain/service/IArdAlarmSuperBrainService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.alarm.superbrain.service;
import java.util.List;
import com.ruoyi.alarm.superbrain.domain.ArdAlarmSuperBrain;
/**
 * è¶…脑报警Service接口
 *
 * @author ard
 * @date 2023-12-06
 */
public interface IArdAlarmSuperBrainService
{
    /**
     * æŸ¥è¯¢è¶…脑报警
     *
     * @param id è¶…脑报警主键
     * @return è¶…脑报警
     */
    public ArdAlarmSuperBrain selectArdAlarmSuperBrainById(String id);
    /**
     * æŸ¥è¯¢è¶…脑报警列表
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return è¶…脑报警集合
     */
    public List<ArdAlarmSuperBrain> selectArdAlarmSuperBrainList(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * æ–°å¢žè¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    public int insertArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * ä¿®æ”¹è¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    public int updateArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain);
    /**
     * æ‰¹é‡åˆ é™¤è¶…脑报警
     *
     * @param ids éœ€è¦åˆ é™¤çš„超脑报警主键集合
     * @return ç»“æžœ
     */
    public int deleteArdAlarmSuperBrainByIds(String[] ids);
    /**
     * åˆ é™¤è¶…脑报警信息
     *
     * @param id è¶…脑报警主键
     * @return ç»“æžœ
     */
    public int deleteArdAlarmSuperBrainById(String id);
}
ard-work/src/main/java/com/ruoyi/alarm/superbrain/service/impl/ArdAlarmSuperBrainServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.alarm.superbrain.service.impl;
import java.util.List;
        import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.alarm.superbrain.mapper.ArdAlarmSuperBrainMapper;
import com.ruoyi.alarm.superbrain.domain.ArdAlarmSuperBrain;
import com.ruoyi.alarm.superbrain.service.IArdAlarmSuperBrainService;
/**
 * è¶…脑报警Service业务层处理
 *
 * @author ard
 * @date 2023-12-06
 */
@Service
public class ArdAlarmSuperBrainServiceImpl implements IArdAlarmSuperBrainService {
    @Autowired
    private ArdAlarmSuperBrainMapper ardAlarmSuperBrainMapper;
    /**
     * æŸ¥è¯¢è¶…脑报警
     *
     * @param id è¶…脑报警主键
     * @return è¶…脑报警
     */
    @Override
    public ArdAlarmSuperBrain selectArdAlarmSuperBrainById(String id) {
        return ardAlarmSuperBrainMapper.selectArdAlarmSuperBrainById(id);
    }
    /**
     * æŸ¥è¯¢è¶…脑报警列表
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return è¶…脑报警
     */
    @Override
    public List<ArdAlarmSuperBrain> selectArdAlarmSuperBrainList(ArdAlarmSuperBrain ardAlarmSuperBrain) {
        return ardAlarmSuperBrainMapper.selectArdAlarmSuperBrainList(ardAlarmSuperBrain);
    }
    /**
     * æ–°å¢žè¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    @Override
    public int insertArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain) {
                ardAlarmSuperBrain.setId(IdUtils.simpleUUID());
                ardAlarmSuperBrain.setCreateBy(SecurityUtils.getUsername());
                ardAlarmSuperBrain.setCreateTime(DateUtils.getNowDate());
            return ardAlarmSuperBrainMapper.insertArdAlarmSuperBrain(ardAlarmSuperBrain);
    }
    /**
     * ä¿®æ”¹è¶…脑报警
     *
     * @param ardAlarmSuperBrain è¶…脑报警
     * @return ç»“æžœ
     */
    @Override
    public int updateArdAlarmSuperBrain(ArdAlarmSuperBrain ardAlarmSuperBrain) {
                ardAlarmSuperBrain.setUpdateBy(SecurityUtils.getUsername());
                ardAlarmSuperBrain.setUpdateTime(DateUtils.getNowDate());
        return ardAlarmSuperBrainMapper.updateArdAlarmSuperBrain(ardAlarmSuperBrain);
    }
    /**
     * æ‰¹é‡åˆ é™¤è¶…脑报警
     *
     * @param ids éœ€è¦åˆ é™¤çš„超脑报警主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdAlarmSuperBrainByIds(String[] ids) {
        return ardAlarmSuperBrainMapper.deleteArdAlarmSuperBrainByIds(ids);
    }
    /**
     * åˆ é™¤è¶…脑报警信息
     *
     * @param id è¶…脑报警主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdAlarmSuperBrainById(String id) {
        return ardAlarmSuperBrainMapper.deleteArdAlarmSuperBrainById(id);
    }
}
ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDK.java
@@ -98,7 +98,7 @@
    boolean recordStopNotToMinio(CameraCmd cmd);
    //获取相机通道信息
    List<ArdChannel> getCameraChannelList(ArdCameras camera);
    List<ArdChannel> getIPChannelInfo(ArdCameras camera);
    //获取GIS信息数据
    Map<String, Object> getGisInfo(CameraCmd cmd);
ard-work/src/main/java/com/ruoyi/device/camera/factory/CameraSDKFactory.java
@@ -37,6 +37,4 @@
            throw new IllegalArgumentException("Unsupported device: " + factory);
        }
    }
}
ard-work/src/main/java/com/ruoyi/utils/sdk/dhsdk/service/impl/DahuaSDK.java
@@ -627,7 +627,7 @@
    }
    @Override
    public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
    public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
        return null;
    }
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/lib/LoginResultCallBack.java
@@ -53,8 +53,9 @@
            camera.setChanNum((int) lpDeviceinfo.byChanNum);
            camera.setStartDChan((int) lpDeviceinfo.byStartDChan);
            //获取最新通道
            List<ArdChannel> cameraChannelList = hikClientService.getCameraChannelList(camera);
            List<ArdChannel> cameraChannelList = hikClientService.getIPChannelInfo(camera);
            if (cameraChannelList.size() > 0) {
                camera.setChanNum(cameraChannelList.size());
                //添加通道
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
ard-work/src/main/java/com/ruoyi/utils/sdk/hiksdk/service/impl/HikvisionSDK.java
@@ -140,37 +140,16 @@
            camera.setState("1");
            camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
            camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
            ardCamerasService.updateArdCameras(camera);
            //获取最新通道
            List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
            if (cameraChannelList.size() > 0) {
                camera.setChannelList(cameraChannelList);
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
                    ardChannelService.insertArdChannel(channel);
                }
                //添加到流媒体
                for (ArdChannel channel : cameraChannelList) {
                    String name = camera.getId() + "_" + channel.getChanNo();
                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
                    Vtdu vtdu = vtduService.selectVtduByName(name);
                    if (vtdu != null) {
                        vtduService.deleteVtduByName(name);
                    }
                    //添加到流媒体
                    vtdu = new Vtdu();
                    vtdu.setRtspSource(rtspSource);
                    vtdu.setName(camera.getId() + "_" + channel.getChanNo());
                    CameraCmd cmd = new CameraCmd(camera.getId(), channel.getChanNo());
                    Map<String, Object> videoCompressionCfg = getVideoCompressionCfg(cmd);
                    if (videoCompressionCfg.get("videoEncType").equals("标准h264")) {
                        vtdu.setIsCode("0");//默认不转码
                    } else {
                        vtdu.setIsCode("1");//默认转码
                    }
                    vtdu.setMode("1");//默认CPU软解码
                    vtdu.setCameraId(camera.getId());
                    vtduService.insertVtdu(vtdu);
                }
                addVtdu(camera);
            }
            //创建引导队列
            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
@@ -178,7 +157,7 @@
                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
            }
            ardCamerasService.updateArdCameras(camera);
        } catch (Exception ex) {
            log.error("注册设备异常", ex);
        }
@@ -270,16 +249,35 @@
            camera.setState("1");
            camera.setChanNum((int) m_strDeviceInfo.struDeviceV30.byChanNum);
            camera.setStartDChan((int) m_strDeviceInfo.struDeviceV30.byStartDChan);
            ardCamerasService.updateArdCameras(camera);
            //获取最新通道
            List<ArdChannel> cameraChannelList = getCameraChannelList(camera);
            List<ArdChannel> cameraChannelList = getIPChannelInfo(camera);
            if (cameraChannelList.size() > 0) {
                camera.setChannelList(cameraChannelList);
                camera.setChanNum(cameraChannelList.size());
                for (ArdChannel channel : cameraChannelList) {
                    channel.setId(IdUtils.simpleUUID());
                    ardChannelService.insertArdChannel(channel);
                }
            }
            ardCamerasService.updateArdCameras(camera);
                //添加到流媒体
                for (ArdChannel channel : cameraChannelList) {
            addVtdu(camera);
            //创建引导队列
            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
            }
        } catch (Exception ex) {
            log.error("注册设备异常", ex);
        }
    }
    //添加到流媒体
    private void addVtdu(ArdCameras camera) {
        try {
            for (ArdChannel channel : camera.getChannelList()) {
                    String name = camera.getId() + "_" + channel.getChanNo();
                    String rtspSource = "rtsp://" + camera.getUsername() + ":" + camera.getPassword() + "@" + camera.getIp() + ":" + camera.getRtspPort() + "/h264/ch" + channel.getChanNo() + "/main/av_stream";
                    Vtdu vtdu = vtduService.selectVtduByName(name);
@@ -301,17 +299,10 @@
                    vtdu.setCameraId(camera.getId());
                    vtduService.insertVtdu(vtdu);
                }
            }
            //创建引导队列
            if (!GuidePriorityQueue.cameraQueueMap.containsKey(camera.getId())) {
                Comparator<GuideTask> comparator = GuidePriorityQueue.getComparator();
                PriorityBlockingQueue<GuideTask> priorityQueue = new PriorityBlockingQueue<>(1000, comparator);
                GuidePriorityQueue.cameraQueueMap.put(camera.getId(), priorityQueue);
        } catch (Exception ex) {
            log.error("通道添加到流媒体异常:" + ex.getMessage());
            }
        } catch (Exception ex) {
            log.error("注册设备异常", ex);
        }
    }
    /**
@@ -1194,8 +1185,7 @@
        if (!bool) {
            int code = hCNetSDK.NET_DVR_GetLastError();
            log.error("设置夜视失败,请稍后重试" + code);
        }
        else {
        } else {
            log.debug("设置夜视成功");
        }
@@ -1682,18 +1672,26 @@
    }
    //获取IP通道
    @Override
    public List<ArdChannel> getCameraChannelList(ArdCameras camera) {
        /*获取通道*/
    public List<ArdChannel> getIPChannelInfo(ArdCameras camera) {
        //获取通道
        List<ArdChannel> channelList = new ArrayList<>();
        try {
            Integer chanNum = camera.getChanNum();
            Integer startDChan = camera.getStartDChan();
            if (chanNum > 0) {
                // èŽ·å–é€šé“å·
                for (int iChannum = 0; iChannum < chanNum; iChannum++) {
            if (camera.getGdtype().equals("3")) {
                camera.setChanNum(64);//超脑获取在线通道数
                camera.setStartDChan(0);//超脑初始通道为0
            }
            IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数
            HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40();
            m_strIpparaCfg.write();
            //lpIpParaConfig æŽ¥æ”¶æ•°æ®çš„缓冲指针
            Pointer lpIpParaConfig = m_strIpparaCfg.getPointer();
            boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned);
            m_strIpparaCfg.read();
            //log.debug("起始数字通道号:" + m_strIpparaCfg.dwStartDChan);//m_strIpparaCfg.dwDChanNum
            for (int iChannum = 0; iChannum < camera.getChanNum(); iChannum++) {
                    ArdChannel ardChannel = new ArdChannel();
                    int channum = iChannum + startDChan + 1;
                int channum = iChannum + camera.getStartDChan() + 1;
                    HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40();
                    strPicCfg.dwSize = strPicCfg.size();
                    strPicCfg.write();
@@ -1702,18 +1700,32 @@
                    IntByReference pInt = new IntByReference(0);
                    boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(camera.getLoginId(), HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(),
                            pStrPicCfg, strPicCfg.size(), pInt);
                    if (b_GetPicCfg) {
                        strPicCfg.read();
                        String channelName = new String(strPicCfg.sChanName, "GBK").trim();
                        ardChannel.setName(channelName);
                if (!b_GetPicCfg) {
                    // log.error("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError());
                    }
                strPicCfg.read();
                m_strIpparaCfg.struStreamMode[iChannum].read();
                if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) {
                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class);
                    m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read();
                    int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256;
                    String channelName = new String(strPicCfg.sChanName, "GBK").trim();
                    ardChannel.setDeviceId(camera.getId());
                    ardChannel.setChanNo(iChannum + 1);
                    ardChannel.setName(channelName);
                    ardChannel.setChanNo(channum);
                    if (camera.getGdtype().equals("3")) {
                        //超脑只获取在线通道
                        if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) {
                            //log.debug("IP通道" + channum + "在线");
                            channelList.add(ardChannel);
                        }
                    } else {
                    channelList.add(ardChannel);
                }
            }
            }
        } catch (Exception ex) {
            log.error("获取相机通道异常:" + ex.getMessage());
            log.error("获取IP通道异常:" + ex.getMessage());
        }
        return channelList;
    }
ard-work/src/main/resources/mapper/alarm/ArdAlarmSuperBrainMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
<?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.ruoyi.alarm.superbrain.mapper.ArdAlarmSuperBrainMapper">
    <resultMap type="ArdAlarmSuperBrain" id="ArdAlarmSuperBrainResult">
        <result property="id" column="id"/>
        <result property="alarmName" column="alarm_name"/>
        <result property="alarmType" column="alarm_type"/>
        <result property="alarmTime" column="alarm_time"/>
        <result property="deviceId" column="device_id"/>
        <result property="deviceName" column="device_name"/>
        <result property="chanNo" column="chan_no"/>
        <result property="longitude" column="longitude"/>
        <result property="latitude" column="latitude"/>
        <result property="altitude" column="altitude"/>
        <result property="picUrl" column="pic_url"/>
        <result property="faceUrl" column="face_url"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="viewTime" column="view_time"/>
    </resultMap>
    <sql id="selectArdAlarmSuperBrainVo">
        select id,
               alarm_name,
               alarm_type,
               alarm_time,
               device_id,
               device_name,
               chan_no,
               longitude,
               latitude,
               altitude,
               pic_url,
               face_url,
               create_by,
               create_time,
               update_by,
               update_time,
               view_time
        from ard_alarm_super_brain
    </sql>
    <select id="selectArdAlarmSuperBrainList" parameterType="ArdAlarmSuperBrain" resultMap="ArdAlarmSuperBrainResult">
        <include refid="selectArdAlarmSuperBrainVo"/>
        <where>
            <if test="alarmName != null  and alarmName != ''">and alarm_name like '%'||#{alarmName}||'%'</if>
            <if test="alarmType != null  and alarmType != ''">and alarm_type = #{alarmType}</if>
            <if test="alarmTime != null ">and alarm_time = #{alarmTime}</if>
            <if test="deviceId != null  and deviceId != ''">and device_id = #{deviceId}</if>
            <if test="deviceName != null  and deviceName != ''">and device_name like '%'||#{deviceName}||'%'</if>
            <if test="chanNo != null ">and chan_no = #{chanNo}</if>
            <if test="longitude != null ">and longitude = #{longitude}</if>
            <if test="latitude != null ">and latitude = #{latitude}</if>
            <if test="altitude != null ">and altitude = #{altitude}</if>
            <if test="picUrl != null  and picUrl != ''">and pic_url = #{picUrl}</if>
            <if test="faceUrl != null  and faceUrl != ''">and face_url = #{faceUrl}</if>
            <if test="viewTime != null ">and view_time = #{viewTime}</if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- å¼€å§‹æ—¶é—´æ£€ç´¢ -->
                AND alarm_time &gt;= to_timestamp(#{params.beginTime},'yyyy-MM-DD HH24:MI:ss')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- ç»“束时间检索 -->
                AND alarm_time &lt;= to_timestamp(#{params.endTime},'yyyy-MM-DD HH24:MI:ss')
            </if>
        </where>
    </select>
    <select id="selectArdAlarmSuperBrainById" parameterType="String" resultMap="ArdAlarmSuperBrainResult">
        <include refid="selectArdAlarmSuperBrainVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdAlarmSuperBrain" parameterType="ArdAlarmSuperBrain">
        insert into ard_alarm_super_brain
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="alarmName != null">alarm_name,</if>
            <if test="alarmType != null">alarm_type,</if>
            <if test="alarmTime != null">alarm_time,</if>
            <if test="deviceId != null">device_id,</if>
            <if test="deviceName != null">device_name,</if>
            <if test="chanNo != null">chan_no,</if>
            <if test="longitude != null">longitude,</if>
            <if test="latitude != null">latitude,</if>
            <if test="altitude != null">altitude,</if>
            <if test="picUrl != null">pic_url,</if>
            <if test="faceUrl != null">face_url,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="viewTime != null">view_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="alarmName != null">#{alarmName},</if>
            <if test="alarmType != null">#{alarmType},</if>
            <if test="alarmTime != null">#{alarmTime},</if>
            <if test="deviceId != null">#{deviceId},</if>
            <if test="deviceName != null">#{deviceName},</if>
            <if test="chanNo != null">#{chanNo},</if>
            <if test="longitude != null">#{longitude},</if>
            <if test="latitude != null">#{latitude},</if>
            <if test="altitude != null">#{altitude},</if>
            <if test="picUrl != null">#{picUrl},</if>
            <if test="faceUrl != null">#{faceUrl},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="viewTime != null">#{viewTime},</if>
        </trim>
    </insert>
    <update id="updateArdAlarmSuperBrain" parameterType="ArdAlarmSuperBrain">
        update ard_alarm_super_brain
        <trim prefix="SET" suffixOverrides=",">
            <if test="alarmName != null">alarm_name = #{alarmName},</if>
            <if test="alarmType != null">alarm_type = #{alarmType},</if>
            <if test="alarmTime != null">alarm_time = #{alarmTime},</if>
            <if test="deviceId != null">device_id = #{deviceId},</if>
            <if test="deviceName != null">device_name = #{deviceName},</if>
            <if test="chanNo != null">chan_no = #{chanNo},</if>
            <if test="longitude != null">longitude = #{longitude},</if>
            <if test="latitude != null">latitude = #{latitude},</if>
            <if test="altitude != null">altitude = #{altitude},</if>
            <if test="picUrl != null">pic_url = #{picUrl},</if>
            <if test="faceUrl != null">face_url = #{faceUrl},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="viewTime != null">view_time = #{viewTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdAlarmSuperBrainById" parameterType="String">
        delete
        from ard_alarm_super_brain
        where id = #{id}
    </delete>
    <delete id="deleteArdAlarmSuperBrainByIds" parameterType="String">
        delete from ard_alarm_super_brain where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="selectCountByAlarmTime" resultType="Integer">
        SELECT COUNT(DISTINCT aasb.id)
        FROM ard_alarm_super_brain aasb
        WHERE aasb.alarm_time >= CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE
          and aasb.view_time is null
    </select>
    <select id="selectListAllByCommand" resultMap="ArdAlarmSuperBrainResult">
        SELECT T.*
        FROM (
                 SELECT aasb.ID,
                        aasb.alarm_name,
                        aasb.alarm_type,
                        aasb.alarm_time,
                        aasb.longitude,
                        aasb.latitude,
                        aasb.altitude,
                        ROW_NUMBER() OVER ( PARTITION BY aasb.alarm_type ORDER BY aasb.alarm_time DESC ) AS rn, COUNT(CASE WHEN aasb.view_time IS NULL THEN 1 END) OVER ( PARTITION BY aasb.alarm_type ) AS COUNT,
        COUNT ( aasb.alarm_time ) OVER ( PARTITION BY aasb.alarm_type ) AS total
                 FROM
                     ard_alarm_super_brain aasb
                 WHERE
                     aasb.alarm_time >= ( CURRENT_TIMESTAMP - INTERVAL '%${refreshTime}%' MINUTE )
                 ORDER BY
                     aasb.alarm_time DESC
             ) T
        WHERE T.rn = 1
    </select>
    <update id="updateViewTimeByAlarmType" parameterType="String">
        update ard_alarm_super_brain
        set view_time=#{viewTime}
        where alarm_type = #{alarmType}
          and alarm_time &lt;= #{alarmTime}
          and view_time is null
    </update>
</mapper>
ruoyi-admin/src/main/resources/i18n/messages.properties
@@ -212,6 +212,7 @@
dic.data.repeat.period.day=\u65E5
dic.data.repeat.period.hour=\u5C0F\u65F6
dic.data.repeat.period.min=\u5206\u949F
dic.data.alarm.type.ai=AI\u62A5\u8B66
dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
@@ -182,6 +182,7 @@
dic.data.well.type.ketou=ketou
dic.data.work.state.normal=normal
dic.data.work.state.exception=exception
dic.data.alarm.type.ai=AIAlarm
dic.data.equip.type.alarm=alarmHost
dic.data.equip.type.GPS=GPS
dic.data.equip.type.gycgq=gycgq
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
@@ -220,6 +220,7 @@
dic.data.repeat.period.day=\u65E5
dic.data.repeat.period.hour=\u5C0F\u65F6
dic.data.repeat.period.min=\u5206\u949F
dic.data.alarm.type.ai=AI\u62A5\u8B66
dic.data.alarm.type.elec.steal=\u76D7\u7535\u62A5\u8B66
dic.data.alarm.type.radar=\u96F7\u8FBE\u62A5\u8B66
dic.data.alarm.type.camera=\u901A\u7528\u5149\u7535