Browse Source

增加健康数据统计分析明细功能

suntianwu 3 years ago
parent
commit
9cfe20d2b3
35 changed files with 982 additions and 5 deletions
  1. 12 0
      src/main/java/com/care/common/cache/RedisKeyConstant.java
  2. 75 0
      src/main/java/com/care/common/entity/CareBedroomInbedDetail.java
  3. 65 0
      src/main/java/com/care/common/entity/CareDevEventDaySta.java
  4. 8 0
      src/main/java/com/care/common/entity/CareDevice.java
  5. 65 0
      src/main/java/com/care/common/entity/CareHeartBreathHourSta.java
  6. 75 0
      src/main/java/com/care/common/entity/CareToiletInoutDetail.java
  7. 65 0
      src/main/java/com/care/common/entity/CareWalkingDistanceDaySta.java
  8. 70 0
      src/main/java/com/care/common/entity/CareWalkingDistanceDetail.java
  9. 38 0
      src/main/java/com/care/common/enums/DeviceInbedStateEnum.java
  10. 41 0
      src/main/java/com/care/common/enums/DeviceMoveStateEnum.java
  11. 15 0
      src/main/java/com/care/common/mapper/CareBedroomInbedDetailMapper.java
  12. 15 0
      src/main/java/com/care/common/mapper/CareDevEventDayStaMapper.java
  13. 15 0
      src/main/java/com/care/common/mapper/CareHeartBreathHourStaMapper.java
  14. 15 0
      src/main/java/com/care/common/mapper/CareToiletInoutDetailMapper.java
  15. 15 0
      src/main/java/com/care/common/mapper/CareWalkingDistanceDayStaMapper.java
  16. 15 0
      src/main/java/com/care/common/mapper/CareWalkingDistanceDetailMapper.java
  17. 14 0
      src/main/java/com/care/common/service/CareBedroomInbedDetailService.java
  18. 14 0
      src/main/java/com/care/common/service/CareDevEventDayStaService.java
  19. 14 0
      src/main/java/com/care/common/service/CareHeartBreathHourStaService.java
  20. 14 0
      src/main/java/com/care/common/service/CareToiletInoutDetailService.java
  21. 14 0
      src/main/java/com/care/common/service/CareWalkingDistanceDayStaService.java
  22. 14 0
      src/main/java/com/care/common/service/CareWalkingDistanceDetailService.java
  23. 18 0
      src/main/java/com/care/common/service/impl/CareBedroomInbedDetailServiceImpl.java
  24. 18 0
      src/main/java/com/care/common/service/impl/CareDevEventDayStaServiceImpl.java
  25. 18 0
      src/main/java/com/care/common/service/impl/CareHeartBreathHourStaServiceImpl.java
  26. 18 0
      src/main/java/com/care/common/service/impl/CareToiletInoutDetailServiceImpl.java
  27. 18 0
      src/main/java/com/care/common/service/impl/CareWalkingDistanceDayStaServiceImpl.java
  28. 18 0
      src/main/java/com/care/common/service/impl/CareWalkingDistanceDetailServiceImpl.java
  29. 150 5
      src/main/java/com/care/mqtt/service/MqttMsgService.java
  30. 6 0
      src/main/resources/mybatis/CareBedroomInbedDetailMapper.xml
  31. 6 0
      src/main/resources/mybatis/CareDevEventDayStaMapper.xml
  32. 6 0
      src/main/resources/mybatis/CareHeartBreathHourStaMapper.xml
  33. 6 0
      src/main/resources/mybatis/CareToiletInoutDetailMapper.xml
  34. 6 0
      src/main/resources/mybatis/CareWalkingDistanceDayStaMapper.xml
  35. 6 0
      src/main/resources/mybatis/CareWalkingDistanceDetailMapper.xml

+ 12 - 0
src/main/java/com/care/common/cache/RedisKeyConstant.java

@@ -68,4 +68,16 @@ public class RedisKeyConstant {
 
     // 与安服务平台 -> 小程序, 请求TOKEN, 100m
     public static final String YUANSERVICE_ACCESSTOKEN = "YUANSERVICE:ACCESSTOKEN";
+
+    //进出卫生间信息 2天
+    public static final String OPTINOUT_TOILET_INFO = "OPTINOUT:TOILET";
+    public static final int OPTINOUT_TOILET_INFO_TIME = 3600 * 24 * 2;
+
+    //进出卫生间信息 2天
+    public static final String OPTINOUT_BEDROOM_INFO = "OPTINOUT:BEDROOM";
+    public static final int OPTINOUT_BEDROOM_INFO_TIME = 3600 * 24 * 2;
+
+    //活动信息 1天
+    public static final String PEOPLEEVENT_ACTIVE_INFO = "PEOPLEEVENT:ACTIVE";
+    public static final int PEOPLEEVENT_ACTIVE_INFO_TIME = 3600 * 24 * 1;
 }

+ 75 - 0
src/main/java/com/care/common/entity/CareBedroomInbedDetail.java

@@ -0,0 +1,75 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 卧室在床明细表(CareBedroomInbedDetail)实体类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:30:41
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_bedroom_inbed_detail")
+@ApiModel(value = "卧室在床明细表", description = "")
+public class CareBedroomInbedDetail implements Serializable {
+    private static final long serialVersionUID = -74970592214079918L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("事件目标的id")
+    @TableField("TID")
+    private Integer tid;
+
+
+    @ApiModelProperty("在床时间")
+    @TableField("IN_TIME")
+    private Date inTime;
+
+
+    @ApiModelProperty("离床时间")
+    @TableField("OUT_TIME")
+    private Date outTime;
+
+
+    @ApiModelProperty("时长(秒)")
+    @TableField("DURATION")
+    private Long duration;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 65 - 0
src/main/java/com/care/common/entity/CareDevEventDaySta.java

@@ -0,0 +1,65 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 每日安全事件统计表(CareDevEventDaySta)实体类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:31:49
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_dev_event_day_sta")
+@ApiModel(value = "每日安全事件统计表", description = "")
+public class CareDevEventDaySta implements Serializable {
+    private static final long serialVersionUID = -15158005495794907L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("事件分类: 21:跌倒 22:久滞 23坠床 31主动呼叫")
+    @TableField("EVENT_TYPE")
+    private String eventType;
+
+
+    @ApiModelProperty("次数")
+    @TableField("FREQUENCY")
+    private Integer frequency;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 8 - 0
src/main/java/com/care/common/entity/CareDevice.java

@@ -85,6 +85,14 @@ public class CareDevice implements Serializable {
     @TableField("ACTIVE_STATUS")
     private String activeStatus;
 
+    @ApiModelProperty("移动状态:0无人, 1活动, 2静止")
+    @TableField("MOVE_STATUS")
+    private String moveStatus;
+
+    @ApiModelProperty("在床状态:1在床, 2离床(卧室)")
+    @TableField("INBED_STATUS")
+    private String inbedStatus;
+
     @ApiModelProperty("经度")
     @TableField("LONGITUDE")
     private Double longitude;

+ 65 - 0
src/main/java/com/care/common/entity/CareHeartBreathHourSta.java

@@ -0,0 +1,65 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 每小时心率呼吸统计表(CareHeartBreathHourSta)实体类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:22
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_heart_breath_hour_sta")
+@ApiModel(value = "每小时心率呼吸统计表", description = "")
+public class CareHeartBreathHourSta implements Serializable {
+    private static final long serialVersionUID = 787362495816454791L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("心跳频率")
+    @TableField("HEART_RATE")
+    private Integer heartRate;
+
+
+    @ApiModelProperty("呼吸频率")
+    @TableField("BREATH_RATE")
+    private Integer breathRate;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 75 - 0
src/main/java/com/care/common/entity/CareToiletInoutDetail.java

@@ -0,0 +1,75 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 卫生间进出明细表(CareToiletInoutDetail)实体类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:49
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_toilet_inout_detail")
+@ApiModel(value = "卫生间进出明细表", description = "")
+public class CareToiletInoutDetail implements Serializable {
+    private static final long serialVersionUID = -52658931975348464L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("事件目标的id")
+    @TableField("TID")
+    private Integer tid;
+
+
+    @ApiModelProperty("进入时间")
+    @TableField("IN_TIME")
+    private Date inTime;
+
+
+    @ApiModelProperty("离开时间")
+    @TableField("OUT_TIME")
+    private Date outTime;
+
+
+    @ApiModelProperty("时长(秒)")
+    @TableField("DURATION")
+    private Long duration;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 65 - 0
src/main/java/com/care/common/entity/CareWalkingDistanceDaySta.java

@@ -0,0 +1,65 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 每日行走距离统计表(CareWalkingDistanceDaySta)实体类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:33:25
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_walking_distance_day_sta")
+@ApiModel(value = "每日行走距离统计表", description = "")
+public class CareWalkingDistanceDaySta implements Serializable {
+    private static final long serialVersionUID = -47269238100661474L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("设备场景:1客厅,2卫浴,3卧室,4其他")
+    @TableField("DEV_SCENE")
+    private String devScene;
+
+
+    @ApiModelProperty("行走距离(m)")
+    @TableField("WALKING_DISTANCE")
+    private Double walkingDistance;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 70 - 0
src/main/java/com/care/common/entity/CareWalkingDistanceDetail.java

@@ -0,0 +1,70 @@
+package com.care.common.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 行走距离明细表(CareWalkingDistanceDetail)实体类
+ *
+ * @author makejava
+ * @since 2021-11-17 16:07:54
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("care_walking_distance_detail")
+@ApiModel(value = "行走距离明细表", description = "")
+public class CareWalkingDistanceDetail implements Serializable {
+    private static final long serialVersionUID = 891619364898326572L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("设备ID")
+    @TableField("DEV_ID")
+    private Long devId;
+
+
+    @ApiModelProperty("事件目标的id")
+    @TableField("TID")
+    private Integer tid;
+
+
+    @ApiModelProperty("设备场景:1客厅,2卫浴,3卧室,4其他")
+    @TableField("DEV_SCENE")
+    private String devScene;
+
+
+    @ApiModelProperty("行走距离(m)")
+    @TableField("WALKING_DISTANCE")
+    private Double walkingDistance;
+
+
+    @ApiModelProperty("createTime")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("modifyTime")
+    @TableField("MODIFY_TIME")
+    private Date modifyTime;
+
+
+}

+ 38 - 0
src/main/java/com/care/common/enums/DeviceInbedStateEnum.java

@@ -0,0 +1,38 @@
+package com.care.common.enums;
+
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * @Author:java
+ * @Date: 2021/05/27
+ */
+public enum DeviceInbedStateEnum {
+    /**
+     * 设备在床状态
+     */
+    INBED("0","在床"),
+    OUTBED("1","离床");
+    private String value;
+    private String name;
+    DeviceInbedStateEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+    public String getValue() {
+        return value;
+    }
+
+    public static String getCodeToName(String code){
+        if (StrUtil.isEmpty(code)){
+            return null;
+        }
+        if (INBED.getValue().equals(code)){
+            return  INBED.name;
+        } else if (OUTBED.getValue().equals(code)){
+            return  OUTBED.name;
+        }
+
+        return null;
+    }
+}

+ 41 - 0
src/main/java/com/care/common/enums/DeviceMoveStateEnum.java

@@ -0,0 +1,41 @@
+package com.care.common.enums;
+
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * @Author:java
+ * @Date: 2021/05/27
+ */
+public enum DeviceMoveStateEnum {
+    /**
+     * 设备活动状态
+     */
+    NONE("0","无人"),
+    MOVE("1","活动"),
+    STATIC("2","静止");
+    private String value;
+    private String name;
+    DeviceMoveStateEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+    public String getValue() {
+        return value;
+    }
+
+    public static String getCodeToName(String code){
+        if (StrUtil.isEmpty(code)){
+            return null;
+        }
+        if (NONE.getValue().equals(code)){
+            return  NONE.name;
+        } else if (MOVE.getValue().equals(code)){
+            return  MOVE.name;
+        } else if (STATIC.getValue().equals(code)){
+            return  STATIC.name;
+        }
+
+        return null;
+    }
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareBedroomInbedDetailMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareBedroomInbedDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 卧室在床明细表(CareBedroomInbedDetail)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-16 19:30:42
+ */
+public interface CareBedroomInbedDetailMapper extends BaseMapper<CareBedroomInbedDetail> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareDevEventDayStaMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareDevEventDaySta;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 每日安全事件统计表(CareDevEventDaySta)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-16 19:31:49
+ */
+public interface CareDevEventDayStaMapper extends BaseMapper<CareDevEventDaySta> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareHeartBreathHourStaMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareHeartBreathHourSta;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 每小时心率呼吸统计表(CareHeartBreathHourSta)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:22
+ */
+public interface CareHeartBreathHourStaMapper extends BaseMapper<CareHeartBreathHourSta> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareToiletInoutDetailMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareToiletInoutDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 卫生间进出明细表(CareToiletInoutDetail)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:49
+ */
+public interface CareToiletInoutDetailMapper extends BaseMapper<CareToiletInoutDetail> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareWalkingDistanceDayStaMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareWalkingDistanceDaySta;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 每日行走距离统计表(CareWalkingDistanceDaySta)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-16 19:33:25
+ */
+public interface CareWalkingDistanceDayStaMapper extends BaseMapper<CareWalkingDistanceDaySta> {
+
+}

+ 15 - 0
src/main/java/com/care/common/mapper/CareWalkingDistanceDetailMapper.java

@@ -0,0 +1,15 @@
+package com.care.common.mapper;
+
+import com.care.common.entity.CareWalkingDistanceDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 行走距离明细表(CareWalkingDistanceDetail)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-11-17 16:07:54
+ */
+public interface CareWalkingDistanceDetailMapper extends BaseMapper<CareWalkingDistanceDetail> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareBedroomInbedDetailService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareBedroomInbedDetail;
+
+/**
+ * 卧室在床明细表(CareBedroomInbedDetail)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-16 19:30:42
+ */
+public interface CareBedroomInbedDetailService extends IService<CareBedroomInbedDetail> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareDevEventDayStaService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareDevEventDaySta;
+
+/**
+ * 每日安全事件统计表(CareDevEventDaySta)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-16 19:31:50
+ */
+public interface CareDevEventDayStaService extends IService<CareDevEventDaySta> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareHeartBreathHourStaService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareHeartBreathHourSta;
+
+/**
+ * 每小时心率呼吸统计表(CareHeartBreathHourSta)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:22
+ */
+public interface CareHeartBreathHourStaService extends IService<CareHeartBreathHourSta> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareToiletInoutDetailService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareToiletInoutDetail;
+
+/**
+ * 卫生间进出明细表(CareToiletInoutDetail)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:49
+ */
+public interface CareToiletInoutDetailService extends IService<CareToiletInoutDetail> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareWalkingDistanceDayStaService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareWalkingDistanceDaySta;
+
+/**
+ * 每日行走距离统计表(CareWalkingDistanceDaySta)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-16 19:33:25
+ */
+public interface CareWalkingDistanceDayStaService extends IService<CareWalkingDistanceDaySta> {
+
+}

+ 14 - 0
src/main/java/com/care/common/service/CareWalkingDistanceDetailService.java

@@ -0,0 +1,14 @@
+package com.care.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.care.common.entity.CareWalkingDistanceDetail;
+
+/**
+ * 行走距离明细表(CareWalkingDistanceDetail)表服务接口
+ *
+ * @author makejava
+ * @since 2021-11-17 16:07:54
+ */
+public interface CareWalkingDistanceDetailService extends IService<CareWalkingDistanceDetail> {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareBedroomInbedDetailServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareBedroomInbedDetailMapper;
+import com.care.common.entity.CareBedroomInbedDetail;
+import com.care.common.service.CareBedroomInbedDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 卧室在床明细表(CareBedroomInbedDetail)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:30:42
+ */
+@Service
+public class CareBedroomInbedDetailServiceImpl extends ServiceImpl<CareBedroomInbedDetailMapper, CareBedroomInbedDetail> implements CareBedroomInbedDetailService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareDevEventDayStaServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareDevEventDayStaMapper;
+import com.care.common.entity.CareDevEventDaySta;
+import com.care.common.service.CareDevEventDayStaService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 每日安全事件统计表(CareDevEventDaySta)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:31:50
+ */
+@Service
+public class CareDevEventDayStaServiceImpl extends ServiceImpl<CareDevEventDayStaMapper, CareDevEventDaySta> implements CareDevEventDayStaService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareHeartBreathHourStaServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareHeartBreathHourStaMapper;
+import com.care.common.entity.CareHeartBreathHourSta;
+import com.care.common.service.CareHeartBreathHourStaService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 每小时心率呼吸统计表(CareHeartBreathHourSta)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:22
+ */
+@Service
+public class CareHeartBreathHourStaServiceImpl extends ServiceImpl<CareHeartBreathHourStaMapper, CareHeartBreathHourSta> implements CareHeartBreathHourStaService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareToiletInoutDetailServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareToiletInoutDetailMapper;
+import com.care.common.entity.CareToiletInoutDetail;
+import com.care.common.service.CareToiletInoutDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 卫生间进出明细表(CareToiletInoutDetail)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:32:49
+ */
+@Service
+public class CareToiletInoutDetailServiceImpl extends ServiceImpl<CareToiletInoutDetailMapper, CareToiletInoutDetail> implements CareToiletInoutDetailService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareWalkingDistanceDayStaServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareWalkingDistanceDayStaMapper;
+import com.care.common.entity.CareWalkingDistanceDaySta;
+import com.care.common.service.CareWalkingDistanceDayStaService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 每日行走距离统计表(CareWalkingDistanceDaySta)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-16 19:33:25
+ */
+@Service
+public class CareWalkingDistanceDayStaServiceImpl extends ServiceImpl<CareWalkingDistanceDayStaMapper, CareWalkingDistanceDaySta> implements CareWalkingDistanceDayStaService {
+
+}

+ 18 - 0
src/main/java/com/care/common/service/impl/CareWalkingDistanceDetailServiceImpl.java

@@ -0,0 +1,18 @@
+package com.care.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.care.common.mapper.CareWalkingDistanceDetailMapper;
+import com.care.common.entity.CareWalkingDistanceDetail;
+import com.care.common.service.CareWalkingDistanceDetailService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 行走距离明细表(CareWalkingDistanceDetail)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-11-17 16:07:54
+ */
+@Service
+public class CareWalkingDistanceDetailServiceImpl extends ServiceImpl<CareWalkingDistanceDetailMapper, CareWalkingDistanceDetail> implements CareWalkingDistanceDetailService {
+
+}

+ 150 - 5
src/main/java/com/care/mqtt/service/MqttMsgService.java

@@ -12,9 +12,7 @@ import com.care.common.cache.RedisKeyConstant;
 import com.care.common.cache.RedisUtil;
 import com.care.common.entity.*;
 
-import com.care.common.enums.MqttMsgStatusEnum;
-import com.care.common.enums.OrderStatusEnum;
-import com.care.common.enums.OrderTypeEnum;
+import com.care.common.enums.*;
 import com.care.common.service.*;
 import com.care.common.vo.device.MqttMsgVO;
 import org.apache.commons.lang3.StringUtils;
@@ -25,6 +23,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Date;
 
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -53,6 +52,12 @@ public class MqttMsgService {
     private MqttMsgRedisService mqttMsgRedisService;
     @Resource
     private RedisUtil redisUtil;
+    @Resource
+    private CareToiletInoutDetailService careToiletInoutDetailService;
+    @Resource
+    private CareBedroomInbedDetailService careBedroomInbedDetailService;
+    @Resource
+    private CareWalkingDistanceDetailService careWalkingDistanceDetailService;
 
 
     private static Logger logger = LoggerFactory.getLogger(MqttMsgService.class);
@@ -89,7 +94,8 @@ public class MqttMsgService {
                 return;
             }
 
-            if(!"BreathHeartRate".equals(type) && !"FallDown".equals(type) && !"StayTooLong".equals(type)){
+            if(!"BreathHeartRate".equals(type) && !"FallDown".equals(type) && !"StayTooLong".equals(type)
+                    && !"OptInOut".equals(type) && !"PeopleEvent".equals(type)){
                // logger.error("不是要处理的消息");
                 return;
             }
@@ -124,11 +130,27 @@ public class MqttMsgService {
                 return;
             }
 
-            if( careDevice.getHouseId() == null ) {
+            if (careDevice.getHouseId() == null) {
                 logger.error("设备没有配置房屋地址");
                 return;
             }
 
+            //活动信息
+            if ("PeopleEvent".equals(type)) {
+                careMqttMsg.setStatus(MqttMsgStatusEnum.HANDLED.getValue());
+                this.careMqttMsgService.save(careMqttMsg);
+                handlePeopleEvent(msg,careDevice,date);
+                return;
+            }
+
+            //进出事件
+            if ("OptInOut".equals(type)) {
+                careMqttMsg.setStatus(MqttMsgStatusEnum.HANDLED.getValue());
+                this.careMqttMsgService.save(careMqttMsg);
+                handleOptInOut(msg,careDevice,date);
+                return;
+            }
+
             handleOrderEvent(map,type,careDevice,date,careMqttMsg);
 
         } catch (Exception e){
@@ -136,6 +158,129 @@ public class MqttMsgService {
         }
     }
 
+    private void handlePeopleEvent(Map msg,CareDevice careDevice,Date date){
+        Integer amount = (Integer) msg.get("amount");
+        List<Map> targets = (List) msg.get("targets");
+        String moveState = DeviceMoveStateEnum.STATIC.getValue();
+        if(amount == 0){ //无人
+            moveState = DeviceMoveStateEnum.NONE.getValue();
+        } else { //有人,静止或活动
+            for(Map target : targets) {
+                Integer tid = (Integer) target.get("tid");
+                Integer cls = (Integer) target.get("cls");
+                double x = (double) target.get("x");
+                double y = (double) target.get("y");
+                if (cls == 1) { //是人
+                    //先查是否存在
+                    String content = (String)redisUtil.hget(RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO,careDevice.getDevCode()+ "_" + tid);
+                    if (content != null) {//之前有存储redis
+                        //计算当前的和存储的之间距离
+                        double distance = getDistance(Double.parseDouble(content.split("_")[1]),x,Double.parseDouble(content.split("_")[2]),y);
+                        //加上之前累积的距离
+                        double distanceTotal = distance + Double.parseDouble(content.split("_")[3]);
+
+                        //存储行走距离明细表
+                        CareWalkingDistanceDetail careWalkingDistanceDetail = new CareWalkingDistanceDetail();
+                        careWalkingDistanceDetail.setDevId(careDevice.getId());
+                        careWalkingDistanceDetail.setTid(tid);
+                        careWalkingDistanceDetail.setDevScene(careDevice.getDevScene());
+                        careWalkingDistanceDetail.setWalkingDistance(distance);
+                        careWalkingDistanceDetail.setCreateTime(date);
+                        careWalkingDistanceDetail.setModifyTime(date);
+                        careWalkingDistanceDetailService.save(careWalkingDistanceDetail);
+
+                        long timeTotal = (date.getTime() - Long.parseLong(content.split("_")[0])) +  Long.parseLong(content.split("_")[4]);
+
+                        if ( timeTotal < 1000) { //累计时间不够一秒
+                            //更新redis
+                            redisUtil.hset(RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO, careDevice.getDevCode() + "_" + tid, System.currentTimeMillis() +  "_" + x + "_" + y + "_" + distanceTotal +"_" + timeTotal, RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO_TIME);
+
+                        } else { //够一秒
+                            if ( distanceTotal > 0.3) {
+                                moveState = DeviceMoveStateEnum.MOVE.getValue();
+                            }
+                            //清除redis
+                            redisUtil.hset(RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO, careDevice.getDevCode() + "_" + tid, null, RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO_TIME);
+                        }
+                    } else { //之前没有存储redis,则存储redis
+                        redisUtil.hset(RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO, careDevice.getDevCode() + "_" + tid, System.currentTimeMillis() +  "_" + x + "_" + y + "_" + 0 + "_" + 0, RedisKeyConstant.PEOPLEEVENT_ACTIVE_INFO_TIME);
+                    }
+                }
+            }
+        }
+
+        //更新数据库dev
+        careDevice.setMoveStatus(moveState);
+        careDeviceService.updateById(careDevice);
+
+    }
+
+    private double getDistance(double x1, double y1,double x2, double y2) {
+        double distance =  Math.sqrt(Math.abs((x1 - x2)*(x1 - x2))+Math.abs((y1 - y2)*(y1 - y2)));
+        return distance;
+    }
+    private void handleOptInOut(Map msg,CareDevice careDevice,Date date){
+        Integer event = (Integer) msg.get("event"); //1 进事件,2 出事件
+        Integer type = (Integer) msg.get("type");
+        Integer subType = (Integer) msg.get("subType");
+        Integer tid = (Integer) msg.get("tid");
+        if(DeviceSceneEnum.TOILET.getValue().equals(careDevice.getDevScene()) && type == 2 ){ //type字段的2代表进出事件,卫生间
+            if(subType == 1) { //subtype字段的1代表门
+                if(event == 1) {
+                    //进事件,先存起来
+                    redisUtil.hset(RedisKeyConstant.OPTINOUT_TOILET_INFO, careDevice.getDevCode()+ "_" + tid, System.currentTimeMillis(), RedisKeyConstant.OPTINOUT_TOILET_INFO_TIME);
+                } else {//出事件,
+                    //先查是否存在进事件
+                    Long inTime = (Long)redisUtil.hget(RedisKeyConstant.OPTINOUT_TOILET_INFO,careDevice.getDevCode()+ "_" + tid);
+                    if(inTime != null) { //存在进事件
+                        CareToiletInoutDetail careToiletInoutDetail = new CareToiletInoutDetail();
+                        careToiletInoutDetail.setDevId(careDevice.getId());
+                        careToiletInoutDetail.setTid(tid);
+                        careToiletInoutDetail.setInTime(new Date(inTime));
+                        careToiletInoutDetail.setOutTime(date);
+                        careToiletInoutDetail.setDuration((date.getTime() - inTime) / 1000);
+                        careToiletInoutDetail.setCreateTime(date);
+                        careToiletInoutDetail.setModifyTime(date);
+                        careToiletInoutDetailService.save(careToiletInoutDetail);
+                        redisUtil.hset(RedisKeyConstant.OPTINOUT_TOILET_INFO, careDevice.getDevCode()+ "_" + tid, null, RedisKeyConstant.OPTINOUT_TOILET_INFO_TIME);
+                    } else { //不存在进事件
+                        //do nothing
+                    }
+                }
+            }
+        } else if(DeviceSceneEnum.BEDROOM.getValue().equals(careDevice.getDevScene()) && type == 1 ) { //type字段的1代表上下床事件,卧室
+            if(subType == 1) { //subtype字段的1代表床
+                if(event == 1) {
+                    //上床事件,先存起来
+                    redisUtil.hset(RedisKeyConstant.OPTINOUT_BEDROOM_INFO, careDevice.getDevCode()+ "_" + tid, System.currentTimeMillis(), RedisKeyConstant.OPTINOUT_BEDROOM_INFO_TIME);
+                    //更新数据库dev
+                    careDevice.setInbedStatus(DeviceInbedStateEnum.INBED.getValue());
+                    careDeviceService.updateById(careDevice);
+                } else {//下床事件,
+                    //先查是否存在上床事件
+                    Long inTime = (Long)redisUtil.hget(RedisKeyConstant.OPTINOUT_BEDROOM_INFO,careDevice.getDevCode()+ "_" + tid);
+                    if(inTime != null) { //存在上床事件
+                        CareBedroomInbedDetail careBedroomInbedDetail = new CareBedroomInbedDetail();
+                        careBedroomInbedDetail.setDevId(careDevice.getId());
+                        careBedroomInbedDetail.setTid(tid);
+                        careBedroomInbedDetail.setInTime(new Date(inTime));
+                        careBedroomInbedDetail.setOutTime(date);
+                        careBedroomInbedDetail.setDuration((date.getTime() - inTime) / 1000);
+                        careBedroomInbedDetail.setCreateTime(date);
+                        careBedroomInbedDetail.setModifyTime(date);
+                        careBedroomInbedDetailService.save(careBedroomInbedDetail);
+                        redisUtil.hset(RedisKeyConstant.OPTINOUT_BEDROOM_INFO, careDevice.getDevCode()+ "_" + tid, null, RedisKeyConstant.OPTINOUT_BEDROOM_INFO_TIME);
+                    } else { //不存在上床事件
+                        //do nothing
+                    }
+                    //更新数据库dev
+                    careDevice.setInbedStatus(DeviceInbedStateEnum.OUTBED.getValue());
+                    careDeviceService.updateById(careDevice);
+                }
+            }
+        }
+    }
+
     private void handleOrderEvent(Map map,String type,CareDevice careDevice,Date date, CareMqttMsg careMqttMsg){
         String key = RedisKeyConstant.CREATE_ORDER + ":" + careDevice.getId();
         String requestId = UUID.randomUUID().toString();

+ 6 - 0
src/main/resources/mybatis/CareBedroomInbedDetailMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareBedroomInbedDetailMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareDevEventDayStaMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareDevEventDayStaMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareHeartBreathHourStaMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareHeartBreathHourStaMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareToiletInoutDetailMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareToiletInoutDetailMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareWalkingDistanceDayStaMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareWalkingDistanceDayStaMapper">
+
+
+</mapper>

+ 6 - 0
src/main/resources/mybatis/CareWalkingDistanceDetailMapper.xml

@@ -0,0 +1,6 @@
+<?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.care.common.mapper.CareWalkingDistanceDetailMapper">
+
+
+</mapper>