瀏覽代碼

数据屏报警监控初版

zhengjie 1 年之前
父節點
當前提交
0c19100c5f

+ 143 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/TDataDisplayController.java

@@ -0,0 +1,143 @@
+package com.ruoyi.web.controller.system;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.LocationUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.domain.TShouhuanAlarmList;
+import com.ruoyi.system.domain.TSosSolve;
+import com.ruoyi.system.domain.dto.*;
+import com.ruoyi.system.service.ITDeviceListService;
+import com.ruoyi.system.service.ITShouhuanAlarmListService;
+import com.ruoyi.system.service.ITSosSolveService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 数据大屏Controller
+ * 
+ * @author zhengjie
+ * @date 2023-09-08
+ */
+@RestController
+@RequestMapping("/system/display")
+public class TDataDisplayController extends BaseController
+{
+    @Autowired
+    private ITShouhuanAlarmListService tShouhuanAlarmListService;
+
+    @Autowired
+    private ITDeviceListService tDeviceListService;
+
+    @Autowired
+    private LocationUtils locationUtils;
+
+    /**
+     * 查询SOS预警处理列表
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(DataAlarmListDto dataAlarmListDto)
+    {
+        startPage();
+        List<DataAlarmListDto> list = tShouhuanAlarmListService.selectTShouhuanAlarmList(dataAlarmListDto);
+        List<AlarmListDto> alarmListDtoList = new ArrayList<>();
+        for (DataAlarmListDto dto : list){
+            AlarmListDto alarmListDto = new AlarmListDto();
+            alarmListDto.setName(dto.getName());
+            alarmListDto.setTelno(dto.getTel_one());
+            alarmListDto.setLocation(getCounterLocation(dto.getGps_long() + "," + dto.getGps_lat()));
+            alarmListDto.setAlarmMessage(tDeviceListService.checkMessage(dto.getAlarm_type()));
+            alarmListDto.setCreatetime(dto.getCreatetime());
+            alarmListDtoList.add(alarmListDto);
+        }
+        return getDataTable(alarmListDtoList);
+    }
+
+    /**
+     * 总数
+     */
+    @GetMapping("/count")
+    public AjaxResult count()
+    {
+        return success(tShouhuanAlarmListService.selectTShouhuanAlarmListCount());
+    }
+
+    /**
+     * 总数
+     */
+    @GetMapping("/alarm")
+    public AjaxResult alarm()
+    {
+        AlarmStatusDto dto = new AlarmStatusDto();
+        dto.setAlarmSOSSolve(tShouhuanAlarmListService.selectTShouhuanAlarmSOSSolve());
+        dto.setUn_alarmSOSSolve(tShouhuanAlarmListService.selectTShouhuanAlarmSOS() - tShouhuanAlarmListService.selectTShouhuanAlarmSOSSolve());
+        dto.setAlarmRailSolve(tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve());
+        dto.setUn_alarmRailSolve(tShouhuanAlarmListService.selectTShouhuanAlarmRail() - tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve());
+        dto.setAlarmHeartSolve(tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve());
+        dto.setUn_alarmHeartSolve(tShouhuanAlarmListService.selectTShouhuanAlarmHeart() - tShouhuanAlarmListService.selectTShouhuanAlarmHeartSolve());
+        dto.setAlarmFallSolve(tShouhuanAlarmListService.selectTShouhuanAlarmFallSolve());
+        dto.setUn_alarmFallSolve(tShouhuanAlarmListService.selectTShouhuanAlarmFall() - tShouhuanAlarmListService.selectTShouhuanAlarmFallSolve());
+        dto.setAlarmLowSolve(tShouhuanAlarmListService.selectTShouhuanAlarmLowSolve());
+        dto.setUn_alarmLowSolve(tShouhuanAlarmListService.selectTShouhuanAlarmLow() - tShouhuanAlarmListService.selectTShouhuanAlarmLowSolve());
+        dto.setAlarmStatusSolve(tShouhuanAlarmListService.selectTShouhuanAlarmStatus());
+        dto.setUn_alarmStatusSolve(tShouhuanAlarmListService.selectTShouhuanAlarmStatusSolve());
+        return success(dto);
+    }
+
+    /**
+     * 总数
+     */
+    @GetMapping("/percent")
+    public AjaxResult percent()
+    {
+        AlarmPercentDto dto = new AlarmPercentDto();
+        dto.setAlarmSOS(checkPercent(tShouhuanAlarmListService.selectTShouhuanAlarmSOSSolve(),tShouhuanAlarmListService.selectTShouhuanAlarmSOS()));
+        dto.setAlarmRail(checkPercent(tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve(),tShouhuanAlarmListService.selectTShouhuanAlarmRail()));
+        dto.setAlarmFall(checkPercent(tShouhuanAlarmListService.selectTShouhuanAlarmFallSolve(),tShouhuanAlarmListService.selectTShouhuanAlarmFall()));
+        int statusSum = tShouhuanAlarmListService.selectTShouhuanAlarmStatus() + tShouhuanAlarmListService.selectTShouhuanAlarmStatusSolve();
+        dto.setAlarmStauts(checkPercent(tShouhuanAlarmListService.selectTShouhuanAlarmStatus(),statusSum));
+        int alarmAll = tShouhuanAlarmListService.selectTShouhuanAlarmSOSSolve() + tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve() + tShouhuanAlarmListService.selectTShouhuanAlarmRailSolve() + tShouhuanAlarmListService.selectTShouhuanAlarmFallSolve() + tShouhuanAlarmListService.selectTShouhuanAlarmOtherSolve();
+        dto.setAlarmAll(checkPercent(alarmAll,tShouhuanAlarmListService.selectTShouhuanAlarmListCount()));
+        return success(dto);
+    }
+
+    /**
+     * 逆地理编码
+     * @param location
+     * @return
+     */
+    public String getCounterLocation(String location){
+
+        Map<String, String> params = new HashMap<>();
+        params.put("location", location);
+        logger.info("获取逆地理编码,请求的参数为:{}", params);
+        JSONObject map = locationUtils.getCounterLocation(params);
+        LocationDto locationDto = com.alibaba.fastjson2.JSONObject.parseObject(String.valueOf(map), LocationDto.class);
+        logger.info("获取逆地理编码,返回的请求结果为:{}", map);
+        return locationDto.getFormatted_address();
+    }
+
+    /**
+     * 计算百分比
+     */
+    public String checkPercent(int num1, int num2){
+        NumberFormat numberFormat = NumberFormat.getInstance();
+        numberFormat.setMaximumFractionDigits(2);
+        String result = numberFormat.format((float)num1/(float)num2*100);
+        return result + "%";
+    }
+}

+ 29 - 0
ruoyi-common/pom.xml

@@ -125,6 +125,35 @@
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.23</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 172 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/LocationUtils.java

@@ -0,0 +1,172 @@
+package com.ruoyi.common.utils;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.net.URI;
+import java.util.Map;
+
+@Component
+public class LocationUtils {
+
+    /**日志对象*/
+    private static final Logger logger = LoggerFactory.getLogger(LocationUtils.class);
+
+    private String KEY = "67019de565fb4aa2a0e101b70ae3fd91";
+
+    /**
+     * 地理编码的url
+     */
+    public final String LOCATION_URL = "https://restapi.amap.com/v3/geocode/geo?parameters";
+
+    /**
+     * 逆地理编码的url
+     */
+    public final String COUNTER_LOCATION_URL = "https://restapi.amap.com/v3/geocode/regeo?parameters";
+
+    /**
+     * 发送get请求
+     * @return
+     */
+    public JSONObject getLocation(Map<String, String> params){
+
+        JSONObject jsonObject = null;
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+
+        // 创建URI对象,并且设置请求参数
+        try {
+            URI uri = getBuilderLocation(LOCATION_URL, params);
+            // 创建http GET请求
+            HttpGet httpGet = new HttpGet(uri);
+            CloseableHttpResponse response = httpclient.execute(httpGet);
+
+            // 判断返回状态是否为200
+            jsonObject = getLocation(response);
+            httpclient.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return jsonObject;
+    }
+
+    /**
+     * 根据地址获取到经纬度
+     * @param response
+     * @return
+     */
+    private static JSONObject getLocation(CloseableHttpResponse response) throws Exception{
+        JSONObject geocode = null;
+        // 判断返回状态是否为200
+        if (response.getStatusLine().getStatusCode() == 200) {
+            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
+            logger.info("调用高德地图接口返回的结果为:{}",content);
+            JSONObject jsonObject = (JSONObject) JSONObject.parse(content);
+            JSONArray geocodes = (JSONArray) jsonObject.get("geocodes");
+            geocode = (JSONObject) geocodes.get(0);
+
+            logger.info("返回的结果为:{}",JSONObject.toJSONString(geocode));
+        }
+        return geocode;
+    }
+
+    /**
+     * 地理编码封装URI
+     * @param url
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    private URI getBuilderLocation(String url, Map<String, String> params) throws Exception{
+        // 详细地址
+        String address = params.get("address");
+        String city = params.get("city");
+
+        URIBuilder uriBuilder = new URIBuilder(url);
+        // 公共参数
+        uriBuilder.setParameter("key", KEY);
+        uriBuilder.setParameter("address", address);
+        uriBuilder.setParameter("city", city);
+
+        logger.info("请求的参数为:{}", JSONObject.toJSONString(uriBuilder));
+        URI uri = uriBuilder.build();
+        return uri;
+    }
+
+    /**
+     * 逆地理编码
+     * @return
+     */
+    public JSONObject getCounterLocation(Map<String, String> params){
+
+        JSONObject jsonObject = null;
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+
+        // 创建URI对象,并且设置请求参数
+        try {
+            URI uri = getBuilderCounterLocation(COUNTER_LOCATION_URL, params);
+            // 创建http GET请求
+            HttpGet httpGet = new HttpGet(uri);
+            CloseableHttpResponse response = httpclient.execute(httpGet);
+
+            // 判断返回状态是否为200
+            jsonObject = getCounterLocation(response);
+            httpclient.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return jsonObject;
+    }
+
+    /**
+     * 逆地理编码封装URI
+     * @param url
+     * @param params
+     * @return
+     * @throws Exception
+     */
+    private URI getBuilderCounterLocation(String url, Map<String, String> params) throws Exception{
+        // 详细地址
+        String location = params.get("location");
+
+        URIBuilder uriBuilder = new URIBuilder(url);
+        // 公共参数
+        uriBuilder.setParameter("key", KEY);
+        uriBuilder.setParameter("location", location);
+
+        logger.info("请求的参数为:{}", JSONObject.toJSONString(uriBuilder));
+        URI uri = uriBuilder.build();
+        return uri;
+    }
+
+    /**
+     * 根据地址获取到经纬度
+     * @param response
+     * @return
+     */
+    private static JSONObject getCounterLocation(CloseableHttpResponse response) throws Exception{
+        JSONObject regeocode = null;
+        // 判断返回状态是否为200
+        if (response.getStatusLine().getStatusCode() == 200) {
+            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
+            logger.info("调用高德地图接口返回的结果为:{}",content);
+            JSONObject jsonObject = (JSONObject) JSONObject.parse(content);
+            regeocode =  (JSONObject)jsonObject.get("regeocode");
+
+            logger.info("返回的结果为:{}",JSONObject.toJSONString(regeocode));
+        }
+        return regeocode;
+    }
+}
+

+ 72 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AlarmListDto.java

@@ -0,0 +1,72 @@
+package com.ruoyi.system.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+
+import java.util.Date;
+
+public class AlarmListDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 告警内容 */
+    @Excel(name = "告警内容")
+    private String alarmMessage;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String name;
+
+    /** 电话 */
+    @Excel(name = "电话")
+    private String telno;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private String location;
+
+    /** 时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "时间")
+    private Date createtime;
+
+    public String getAlarmMessage() {
+        return alarmMessage;
+    }
+
+    public void setAlarmMessage(String alarmMessage) {
+        this.alarmMessage = alarmMessage;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTelno() {
+        return telno;
+    }
+
+    public void setTelno(String telno) {
+        this.telno = telno;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+}

+ 66 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AlarmPercentDto.java

@@ -0,0 +1,66 @@
+package com.ruoyi.system.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+
+import java.util.Date;
+
+public class AlarmPercentDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /** SOS */
+    private String alarmSOS;
+
+    /** 围栏 */
+    private String alarmRail;
+
+    /** 跌倒 */
+    private String alarmFall;
+
+    /** 在线 */
+    private String alarmStauts;
+
+    /** 全部 */
+    private String alarmAll;
+
+    public String getAlarmSOS() {
+        return alarmSOS;
+    }
+
+    public void setAlarmSOS(String alarmSOS) {
+        this.alarmSOS = alarmSOS;
+    }
+
+    public String getAlarmRail() {
+        return alarmRail;
+    }
+
+    public void setAlarmRail(String alarmRail) {
+        this.alarmRail = alarmRail;
+    }
+
+    public String getAlarmFall() {
+        return alarmFall;
+    }
+
+    public void setAlarmFall(String alarmFall) {
+        this.alarmFall = alarmFall;
+    }
+
+    public String getAlarmStauts() {
+        return alarmStauts;
+    }
+
+    public void setAlarmStauts(String alarmStauts) {
+        this.alarmStauts = alarmStauts;
+    }
+
+    public String getAlarmAll() {
+        return alarmAll;
+    }
+
+    public void setAlarmAll(String alarmAll) {
+        this.alarmAll = alarmAll;
+    }
+}

+ 143 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AlarmStatusDto.java

@@ -0,0 +1,143 @@
+package com.ruoyi.system.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+
+import java.util.Date;
+
+public class AlarmStatusDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /** SOS告警处理 */
+    private Integer alarmSOSSolve;
+
+    /** SOS未告警处理 */
+    private Integer un_alarmSOSSolve;
+
+    /** 围栏告警处理 */
+    private Integer alarmRailSolve;
+
+    /** 围栏未告警处理 */
+    private Integer un_alarmRailSolve;
+
+    /** 心率告警处理 */
+    private Integer alarmHeartSolve;
+
+    /** 心率未告警处理 */
+    private Integer un_alarmHeartSolve;
+
+    /** 跌倒告警处理 */
+    private Integer alarmFallSolve;
+
+    /** 跌倒未告警处理 */
+    private Integer un_alarmFallSolve;
+
+    /** 低电告警处理 */
+    private Integer alarmLowSolve;
+
+    /** 低电未告警处理 */
+    private Integer un_alarmLowSolve;
+
+    /** 设备状态告警处理 */
+    private Integer alarmStatusSolve;
+
+    /** 设备状态未告警处理 */
+    private Integer un_alarmStatusSolve;
+
+    public Integer getAlarmSOSSolve() {
+        return alarmSOSSolve;
+    }
+
+    public void setAlarmSOSSolve(Integer alarmSOSSolve) {
+        this.alarmSOSSolve = alarmSOSSolve;
+    }
+
+    public Integer getUn_alarmSOSSolve() {
+        return un_alarmSOSSolve;
+    }
+
+    public void setUn_alarmSOSSolve(Integer un_alarmSOSSolve) {
+        this.un_alarmSOSSolve = un_alarmSOSSolve;
+    }
+
+    public Integer getAlarmRailSolve() {
+        return alarmRailSolve;
+    }
+
+    public void setAlarmRailSolve(Integer alarmRailSolve) {
+        this.alarmRailSolve = alarmRailSolve;
+    }
+
+    public Integer getUn_alarmRailSolve() {
+        return un_alarmRailSolve;
+    }
+
+    public void setUn_alarmRailSolve(Integer un_alarmRailSolve) {
+        this.un_alarmRailSolve = un_alarmRailSolve;
+    }
+
+    public Integer getAlarmHeartSolve() {
+        return alarmHeartSolve;
+    }
+
+    public void setAlarmHeartSolve(Integer alarmHeartSolve) {
+        this.alarmHeartSolve = alarmHeartSolve;
+    }
+
+    public Integer getUn_alarmHeartSolve() {
+        return un_alarmHeartSolve;
+    }
+
+    public void setUn_alarmHeartSolve(Integer un_alarmHeartSolve) {
+        this.un_alarmHeartSolve = un_alarmHeartSolve;
+    }
+
+    public Integer getAlarmFallSolve() {
+        return alarmFallSolve;
+    }
+
+    public void setAlarmFallSolve(Integer alarmFallSolve) {
+        this.alarmFallSolve = alarmFallSolve;
+    }
+
+    public Integer getUn_alarmFallSolve() {
+        return un_alarmFallSolve;
+    }
+
+    public void setUn_alarmFallSolve(Integer un_alarmFallSolve) {
+        this.un_alarmFallSolve = un_alarmFallSolve;
+    }
+
+    public Integer getAlarmLowSolve() {
+        return alarmLowSolve;
+    }
+
+    public void setAlarmLowSolve(Integer alarmLowSolve) {
+        this.alarmLowSolve = alarmLowSolve;
+    }
+
+    public Integer getUn_alarmLowSolve() {
+        return un_alarmLowSolve;
+    }
+
+    public void setUn_alarmLowSolve(Integer un_alarmLowSolve) {
+        this.un_alarmLowSolve = un_alarmLowSolve;
+    }
+
+    public Integer getAlarmStatusSolve() {
+        return alarmStatusSolve;
+    }
+
+    public void setAlarmStatusSolve(Integer alarmStatusSolve) {
+        this.alarmStatusSolve = alarmStatusSolve;
+    }
+
+    public Integer getUn_alarmStatusSolve() {
+        return un_alarmStatusSolve;
+    }
+
+    public void setUn_alarmStatusSolve(Integer un_alarmStatusSolve) {
+        this.un_alarmStatusSolve = un_alarmStatusSolve;
+    }
+}

+ 96 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/DataAlarmListDto.java

@@ -0,0 +1,96 @@
+package com.ruoyi.system.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+
+import java.util.Date;
+
+public class DataAlarmListDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 告警内容 */
+    @Excel(name = "告警内容")
+    private Integer status_type;
+
+    /** 告警内容 */
+    @Excel(name = "告警内容")
+    private Integer alarm_type;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String name;
+
+    /** 电话 */
+    @Excel(name = "电话")
+    private String tel_one;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private float gps_long;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private float gps_lat;
+
+    /** 时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "时间")
+    private Date createtime;
+
+    public Integer getStatus_type() {
+        return status_type;
+    }
+
+    public void setStatus_type(Integer status_type) {
+        this.status_type = status_type;
+    }
+
+    public Integer getAlarm_type() {
+        return alarm_type;
+    }
+
+    public void setAlarm_type(Integer alarm_type) {
+        this.alarm_type = alarm_type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTel_one() {
+        return tel_one;
+    }
+
+    public void setTel_one(String tel_one) {
+        this.tel_one = tel_one;
+    }
+
+    public float getGps_long() {
+        return gps_long;
+    }
+
+    public void setGps_long(float gps_long) {
+        this.gps_long = gps_long;
+    }
+
+    public float getGps_lat() {
+        return gps_lat;
+    }
+
+    public void setGps_lat(float gps_lat) {
+        this.gps_lat = gps_lat;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+}

+ 20 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/LocationDto.java

@@ -0,0 +1,20 @@
+package com.ruoyi.system.domain.dto;
+
+import com.ruoyi.common.annotation.Excel;
+
+public class LocationDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 地址 */
+    @Excel(name = "地址")
+    private String formatted_address;
+
+    public String getFormatted_address() {
+        return formatted_address;
+    }
+
+    public void setFormatted_address(String formatted_address) {
+        this.formatted_address = formatted_address;
+    }
+}

+ 107 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TShouhuanAlarmListMapper.java

@@ -2,6 +2,7 @@ package com.ruoyi.system.mapper;
 
 import java.util.List;
 import com.ruoyi.system.domain.TShouhuanAlarmList;
+import com.ruoyi.system.domain.dto.DataAlarmListDto;
 
 /**
  * 手环报警列信息Mapper接口
@@ -27,6 +28,21 @@ public interface TShouhuanAlarmListMapper
      */
     public List<TShouhuanAlarmList> selectTShouhuanAlarmListList(TShouhuanAlarmList tShouhuanAlarmList);
 
+    /**
+     * 查询手环报警列信息列表
+     *
+     * @param dataAlarmListDto 手环报警列信息
+     * @return 手环报警列信息集合
+     */
+    public List<DataAlarmListDto> selectTShouhuanAlarmList(DataAlarmListDto dataAlarmListDto);
+
+    /**
+     * 总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmListCount();
+
     /**
      * 新增手环报警列信息
      * 
@@ -58,4 +74,95 @@ public interface TShouhuanAlarmListMapper
      * @return 结果
      */
     public int deleteTShouhuanAlarmListByIds(Integer[] ids);
+
+    /**
+     * SOS总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmSOS();
+
+    /**
+     * SOS
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmSOSSolve();
+
+    /**
+     * 围栏总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmRail();
+
+    /**
+     * 围栏
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmRailSolve();
+
+    /**
+     * 心率总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmHeart();
+
+    /**
+     * 心率
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmHeartSolve();
+
+    /**
+     * 跌倒总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmFall();
+
+    /**
+     * 跌倒
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmFallSolve();
+
+    /**
+     * 低电总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmLow();
+
+    /**
+     * 低电
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmLowSolve();
+
+    /**
+     * 状态在线
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmStatus();
+
+    /**
+     * 状态离线
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmStatusSolve();
+
+    /**
+     * 其他
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmOtherSolve();
 }

+ 108 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/ITShouhuanAlarmListService.java

@@ -2,6 +2,7 @@ package com.ruoyi.system.service;
 
 import java.util.List;
 import com.ruoyi.system.domain.TShouhuanAlarmList;
+import com.ruoyi.system.domain.dto.DataAlarmListDto;
 
 /**
  * 手环报警列信息Service接口
@@ -27,6 +28,21 @@ public interface ITShouhuanAlarmListService
      */
     public List<TShouhuanAlarmList> selectTShouhuanAlarmListList(TShouhuanAlarmList tShouhuanAlarmList);
 
+    /**
+     * 查询手环报警列信息列表
+     *
+     * @param dataAlarmListDto 手环报警列信息
+     * @return 手环报警列信息集合
+     */
+    public List<DataAlarmListDto> selectTShouhuanAlarmList(DataAlarmListDto dataAlarmListDto);
+
+    /**
+     * 总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmListCount();
+
     /**
      * 新增手环报警列信息
      * 
@@ -58,4 +74,96 @@ public interface ITShouhuanAlarmListService
      * @return 结果
      */
     public int deleteTShouhuanAlarmListById(Integer id);
+
+
+    /**
+     * SOS总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmSOS();
+
+    /**
+     * SOS
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmSOSSolve();
+
+    /**
+     * 围栏总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmRail();
+
+    /**
+     * 围栏
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmRailSolve();
+
+    /**
+     * 心率总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmHeart();
+
+    /**
+     * 心率
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmHeartSolve();
+
+    /**
+     * 跌倒总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmFall();
+
+    /**
+     * 跌倒
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmFallSolve();
+
+    /**
+     * 低电总数
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmLow();
+
+    /**
+     * 低电
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmLowSolve();
+
+    /**
+     * 状态在线
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmStatus();
+
+    /**
+     * 状态离线
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmStatusSolve();
+
+    /**
+     * 其他
+     *
+     * @return 结果
+     */
+    public int selectTShouhuanAlarmOtherSolve();
 }

+ 6 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDeviceListServiceImpl.java

@@ -233,6 +233,12 @@ public class TDeviceListServiceImpl implements ITDeviceListService
                 return "跌倒报警";
             case 22:
                 return "心率异常报警";
+            case 23:
+                return "血压异常报警";
+            case 24:
+                return "体温异常报警";
+            case 25:
+                return "血氧异常报警";
             default:
                 return "无效";
         }

+ 76 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TShouhuanAlarmListServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl;
 
 import java.util.List;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.domain.dto.DataAlarmListDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.system.mapper.TShouhuanAlarmListMapper;
@@ -44,6 +45,16 @@ public class TShouhuanAlarmListServiceImpl implements ITShouhuanAlarmListService
         return tShouhuanAlarmListMapper.selectTShouhuanAlarmListList(tShouhuanAlarmList);
     }
 
+    @Override
+    public List<DataAlarmListDto> selectTShouhuanAlarmList(DataAlarmListDto dataAlarmListDto) {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmList(dataAlarmListDto);
+    }
+
+    @Override
+    public int selectTShouhuanAlarmListCount() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmListCount();
+    }
+
     /**
      * 新增手环报警列信息
      * 
@@ -92,4 +103,69 @@ public class TShouhuanAlarmListServiceImpl implements ITShouhuanAlarmListService
     {
         return tShouhuanAlarmListMapper.deleteTShouhuanAlarmListById(id);
     }
+
+    @Override
+    public int selectTShouhuanAlarmSOS() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmSOS();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmSOSSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmSOSSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmRail() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmRail();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmRailSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmRailSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmHeart() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmHeart();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmHeartSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmHeartSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmFall() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmFall();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmFallSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmFallSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmLow() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmLow();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmLowSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmLowSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmStatus() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmStatus();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmStatusSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmStatusSolve();
+    }
+
+    @Override
+    public int selectTShouhuanAlarmOtherSolve() {
+        return tShouhuanAlarmListMapper.selectTShouhuanAlarmOtherSolve();
+    }
 }

+ 55 - 1
ruoyi-system/src/main/resources/mapper/system/TShouhuanAlarmListMapper.xml

@@ -60,7 +60,61 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectTShouhuanAlarmListVo"/>
         where id = #{id}
     </select>
-        
+    <select id="selectTShouhuanAlarmList" resultType="com.ruoyi.system.domain.dto.DataAlarmListDto">
+        SELECT c.name,c.tel_one,a.gps_long,a.gps_lat,a.createtime,a.status_type,a.alarm_type FROM `t_shouhuan_alarm_list` a
+        left join t_device_list b on a.device_id_code=b.device_id
+        left join t_user_profile c on c.id=b.userid
+    </select>
+    <select id="selectTShouhuanAlarmListCount" resultType="java.lang.Integer">
+        select IFNULL(count(*),0) from t_shouhuan_alarm_list
+    </select>
+    <select id="selectTShouhuanAlarmSOS" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_alarm_list` where alarm_type=16
+    </select>
+    <select id="selectTShouhuanAlarmSOSSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_sos_solve`
+        where solve_status = 1
+    </select>
+    <select id="selectTShouhuanAlarmRail" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_alarm_list` where status_type=2
+    </select>
+    <select id="selectTShouhuanAlarmRailSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_rail_solve`
+        where solve_status = 1
+    </select>
+    <select id="selectTShouhuanAlarmHeart" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_alarm_list` where alarm_type=22
+    </select>
+    <select id="selectTShouhuanAlarmHeartSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_health_solve`
+        where solve_status = 1
+    </select>
+    <select id="selectTShouhuanAlarmFall" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_alarm_list` where alarm_type=21
+    </select>
+    <select id="selectTShouhuanAlarmFallSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_fall_solve`
+        where solve_status = 1
+    </select>
+    <select id="selectTShouhuanAlarmLow" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_alarm_list` where alarm_type=17
+    </select>
+    <select id="selectTShouhuanAlarmLowSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_other_solve` a left join t_shouhuan_alarm_list b
+        on a.alarmid= b.id
+        where b.alarm_type=17
+    </select>
+    <select id="selectTShouhuanAlarmStatus" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_info` where online_statis=1
+    </select>
+    <select id="selectTShouhuanAlarmStatusSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_shouhuan_info` where online_statis=0
+    </select>
+    <select id="selectTShouhuanAlarmOtherSolve" resultType="java.lang.Integer">
+        SELECT IFNULL(count(*),0) FROM `t_other_solve`
+        where solve_status = 1
+    </select>
+
     <insert id="insertTShouhuanAlarmList" parameterType="TShouhuanAlarmList" useGeneratedKeys="true" keyProperty="id">
         insert into t_shouhuan_alarm_list
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -36,7 +36,7 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         target: `http://localhost:8088`,
-        // target: `http://118.195.207.241:8088`,
+        // target: `http://152.136.61.163:8088`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''