whycxzp
2025-03-29 c57812396fb34070b6970d08457e090a1b6bcc47
hik温度更新
7个文件已修改
3个文件已添加
204 ■■■■ 已修改文件
src/main/java/com/whyc/controller/BattStationTempAlarmController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/listener/ApplicationListener.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattCameraMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_alarm/BattStationTempAlarm.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_batt/BattCamera.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/db_power_rt/BattStationTemp.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/schedule/BattStationTempScheduleService.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattCameraService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattStationTempAlarmService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/HikTempUtil.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BattStationTempAlarmController.java
@@ -7,7 +7,6 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
src/main/java/com/whyc/listener/ApplicationListener.java
@@ -3,6 +3,8 @@
import com.whyc.constant.YamlProperties;
import com.whyc.dto.IpInfo;
import com.whyc.dto.Response;
import com.whyc.pojo.db_batt.BattCamera;
import com.whyc.service.BattCameraService;
import com.whyc.service.VideoService;
import com.whyc.util.HikTempUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +26,7 @@
public class ApplicationListener implements ServletContextListener {
    @Autowired
    private VideoService videoService;
    private BattCameraService cameraService;
    /**
     * 1.初始化,开启视频流并启动录像存储
@@ -34,7 +36,8 @@
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext application = servletContextEvent.getServletContext();
        //初始化hik sdk
        HikTempUtil.init();
        List<BattCamera> list = cameraService.getList();
        HikTempUtil.init(list);
    }
src/main/java/com/whyc/mapper/BattCameraMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.db_batt.BattCamera;
public interface BattCameraMapper extends CustomMapper<BattCamera> {
}
src/main/java/com/whyc/pojo/db_alarm/BattStationTempAlarm.java
@@ -29,14 +29,16 @@
    private Float temp;
    @ApiModelProperty("温度坐标")
    private Integer level;
    /*@ApiModelProperty("温度坐标")
    private String point;
    @ApiModelProperty("分辨率,格式示例:384*288")
    private String pixel;
    @ApiModelProperty("单体编号")
    private Integer monNum;
    private Integer monNum;*/
    private Date startTime;
src/main/java/com/whyc/pojo/db_batt/BattCamera.java
New file
@@ -0,0 +1,21 @@
package com.whyc.pojo.db_batt;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.ToString;
/**
 * 电池机房的摄像头
 */
@TableName(schema = "db_batt",value = "tb_batt_camera")
@ToString
@Data
public class BattCamera {
    private Integer id;
    private String cameraId;
    private String cameraIp;
    private Integer battGroupId;
    private Integer stationId;
}
src/main/java/com/whyc/pojo/db_power_rt/BattStationTemp.java
@@ -32,6 +32,8 @@
    private String minTempPoint;
    private String maxTempPoint;
    private String cameraId;
    private Integer battGroupId;
    private Integer stationId;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordTime;
src/main/java/com/whyc/schedule/BattStationTempScheduleService.java
@@ -1,13 +1,16 @@
package com.whyc.schedule;
import com.whyc.constant.YamlProperties;
import com.whyc.dto.*;
import com.whyc.dto.Point;
import com.whyc.dto.Response;
import com.whyc.dto.TempPoint;
import com.whyc.factory.ThreadPoolExecutorFactory;
import com.whyc.pojo.db_alarm.BattStationTempAlarm;
import com.whyc.pojo.db_batt.BattCamera;
import com.whyc.pojo.db_param.PageParam;
import com.whyc.pojo.db_power_rt.BattStationTemp;
import com.whyc.service.BattStationTempAlarmService;
import com.whyc.service.BattStationTempService;
import com.whyc.service.VideoService;
import com.whyc.util.DateUtil;
import com.whyc.util.FileUtil;
import com.whyc.service.PageParamService;
import com.whyc.util.HikTempUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,8 +18,9 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@EnableScheduling
@@ -27,17 +31,28 @@
    @Autowired
    private BattStationTempService service;
    @Autowired
    private BattStationTempAlarmService alarmService;
    @Autowired
    private PageParamService paramService;
    /**
     * 温度实时
     * */
    @Scheduled(fixedRate = 4000,initialDelay = 2000)
    public void startRecordAndCheck(){
        List<IpInfo> ipInfoList = HikTempUtil.ipInfoList;
        List<BattCamera> ipInfoList = HikTempUtil.cameraInfoList;
        List<PageParam> tempParmList = paramService.getTempParmList();
        Integer level2AlarmTemp =  tempParmList.get(0).getValue();
        Integer level1AlarmTemp = tempParmList.get(1).getValue();
        for (int i = 0; i < ipInfoList.size(); i++) {
            IpInfo ipInfo = ipInfoList.get(i);
            BattCamera cameraInfo = ipInfoList.get(i);
            ThreadPoolExecutorFactory.getPoolExecutor().execute(()-> {
                String ip = ipInfo.getIp();
                String cameraId = ipInfo.getCameraId();
                String ip = cameraInfo.getCameraIp();
                String cameraId = cameraInfo.getCameraId();
                Integer battGroupId = cameraInfo.getBattGroupId();
                Integer stationId = cameraInfo.getStationId();
                Response response = HikTempUtil.getTempPoint(ip);
                if ((Boolean) response.getData()){
@@ -68,8 +83,70 @@
                    battStationTemp.setCameraId(cameraId);
                    Date date = new Date();
                    battStationTemp.setRecordTime(date);
                    battStationTemp.setBattGroupId(battGroupId);
                    battStationTemp.setStationId(stationId);
                    service.addOrUpdate(battStationTemp);
                    //温度历史-TODO
                    //温度告警判断
                    //查询温度告警表,如果存在
                    BattStationTempAlarm alarmInDB = alarmService.getByBattGroupId(battGroupId);
                    if(alarmInDB != null){
                        //如果存在,同时当前温度大于2级,则更新温度和告警等级
                        if(battStationTemp.getMaxTemp()>=level2AlarmTemp){
                            //温度相同,查看下告警等级是否一样
                            if(alarmInDB.getTemp().floatValue() == battStationTemp.getMaxTemp()){
                                if((alarmInDB.getTemp().floatValue() == level2AlarmTemp
                                        && alarmInDB.getLevel() == 2)
                                        ||
                                    (alarmInDB.getTemp().floatValue() == level1AlarmTemp
                                            && alarmInDB.getLevel() == 1)
                                ){
                                }else{ //告警等级不同,调整告警等级
                                    BattStationTempAlarm alarm = new BattStationTempAlarm();
                                    alarm.setLevel(alarmInDB.getLevel()==1?2:1);
                                    alarm.setId(alarmInDB.getId());
                                    alarmService.updateById(alarm);
                                }
                            }
                            //温度不同
                            else {
                                BattStationTempAlarm alarm = new BattStationTempAlarm();
                                alarm.setId(alarmInDB.getId());
                                alarm.setTemp(battStationTemp.getMaxTemp());
                                if (battStationTemp.getMaxTemp() >= level1AlarmTemp) { //温度大于1级报警温度
                                    alarm.setLevel(1);
                                } else {
                                    alarm.setLevel(2);
                                }
                                alarmService.updateById(alarm);
                            }
                        }else {
                            //如果不存在了,表明告警结束,更新结束时间
                            BattStationTempAlarm alarm = new BattStationTempAlarm();
                            alarm.setId(alarmInDB.getId());
                            alarm.setEndTime(date);
                            alarmService.updateById(alarm);
                        }
                    }
                    // 告警表内不存在当前电池组的告警,如果超过报警温度,则生成告警
                    else if(battStationTemp.getMaxTemp()>=level2AlarmTemp){ //温度大于2级报警温度
                        BattStationTempAlarm alarm = new BattStationTempAlarm();
                        alarm.setBattGroupId(battGroupId);
                        alarm.setStationId(stationId);
                        alarm.setTemp(battStationTemp.getMaxTemp());
                        alarm.setStartTime(date);
                        if (battStationTemp.getMaxTemp()>=level1AlarmTemp){ //温度大于1级报警温度
                            alarm.setLevel(1);
                        }else{
                            alarm.setLevel(2);
                        }
                        alarmService.add(alarm);
                    }
                }else{
                    String msg = response.getMsg();
src/main/java/com/whyc/service/BattCameraService.java
New file
@@ -0,0 +1,24 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.whyc.mapper.BattCameraMapper;
import com.whyc.pojo.db_batt.BattCamera;
import com.whyc.util.ActionUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class BattCameraService {
    @Autowired
    private BattCameraMapper mapper;
    public List<BattCamera> getList(){
        return mapper.selectList((Wrapper<BattCamera>) ActionUtil.objeNull);
    }
}
src/main/java/com/whyc/service/BattStationTempAlarmService.java
@@ -1,5 +1,7 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.Response;
@@ -29,4 +31,18 @@
        PageInfo<BattStationTempAlarm> pageInfo = new PageInfo<>(list);
        return new Response<PageInfo<BattStationTempAlarm>>().set(1,pageInfo);
    }
    public BattStationTempAlarm getByBattGroupId(int battGroupId) {
        QueryWrapper<BattStationTempAlarm> query = Wrappers.query();
        query.eq("batt_group_id",battGroupId);
        return mapper.selectOne(query);
    }
    public void updateById(BattStationTempAlarm alarm) {
        mapper.updateById(alarm);
    }
    public void add(BattStationTempAlarm alarm) {
        mapper.insert(alarm);
    }
}
src/main/java/com/whyc/util/HikTempUtil.java
@@ -8,6 +8,7 @@
import com.whyc.dto.TempPoint;
import com.whyc.hik.Commom.osSelect;
import com.whyc.hik.NetSDKDemo.HCNetSDK;
import com.whyc.pojo.db_batt.BattCamera;
import org.springframework.stereotype.Service;
import java.io.FileOutputStream;
@@ -30,19 +31,7 @@
    public static List<Integer> lUserIDs = new LinkedList<>();
    public static Map<String,Integer> ipLUserIdMap = new HashMap<>();
    public static FExceptionCallBack_Imp fExceptionCallBack;
    public static List<IpInfo> ipInfoList = new LinkedList<>();
    static {
        //TODO 暂时定义,后续要改成对应的
        ipInfoList.add(new IpInfo("192.168.10.11","1"));
        ipInfoList.add(new IpInfo("192.168.10.12","2"));
        ipInfoList.add(new IpInfo("192.168.10.13","3"));
        ipInfoList.add(new IpInfo("192.168.10.14","4"));
        ipInfoList.add(new IpInfo("192.168.10.15","5"));
        ipInfoList.add(new IpInfo("192.168.10.16","6"));
        ipInfoList.add(new IpInfo("192.168.10.17","7"));
        ipInfoList.add(new IpInfo("192.168.10.18","8"));
    }
    public static List<BattCamera> cameraInfoList = new LinkedList<>();
    public static Response getTempPoint(String ip){
        Integer lUserID = ipLUserIdMap.get(ip);
@@ -207,7 +196,8 @@
        return new Response().setII(1,true,tempPointMap,null);
    }
    public static void init(){
    public static void init(List<BattCamera> list){
        cameraInfoList = list;
        if (hCNetSDK == null) {
            if (!createSDKInstance()) {
                System.out.println("Load SDK fail");
@@ -251,8 +241,8 @@
        //登录设备,每一台设备只需要登录一次
        //lUserID = TestDemo.loginDevice("10.9.137.21", (short) 8000, "admin", "Cpfwb518+");
        //int lUserID = HikTempUtil.loginDevice("192.168.10.16", (short) 8000, "admin", "fg001@hdw");
        for (int i = 0; i < ipInfoList.size(); i++) {
            String ip = ipInfoList.get(i).getIp();
        for (int i = 0; i < cameraInfoList.size(); i++) {
            String ip = cameraInfoList.get(i).getCameraIp();
            int lUserID = HikTempUtil.loginDevice(ip, (short) 8000, "admin", "fg001@hdw");
            lUserIDs.add(lUserID);
            ipLUserIdMap.put(ip,lUserID);