Commit ff95625f by huangjy

Merge remote-tracking branch 'origin/dev' into dev

parents 6c06d528 710a7f6c
Showing with 1108 additions and 145 deletions
...@@ -453,4 +453,21 @@ CREATE TABLE `plafform_setting` ( ...@@ -453,4 +453,21 @@ CREATE TABLE `plafform_setting` (
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '平台设置'; ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COMMENT = '平台设置';
CREATE TABLE `plat_day_duration_record` (
`id` varchar(64) NOT NULL COMMENT 'id',
`elder_ids` varchar(1024) NOT NULL COMMENT '长者id,逗号拼接',
`duration` bigint(64) NOT NULL COMMENT '当天本次进入该区域的时长',
`ori_device_id` varchar(64) NOT NULL COMMENT 'iot设备id',
`day` varchar(64) NOT NULL COMMENT '日期 yyyyMMdd',
`start_date` datetime DEFAULT NULL COMMENT '本次进入时间',
`end_date` datetime DEFAULT NULL COMMENT '本次离开时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` int(1) DEFAULT '0' COMMENT '删除标记',
`tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id ',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='每天停留时长记录';
...@@ -99,7 +99,7 @@ public interface BaseEnum { ...@@ -99,7 +99,7 @@ public interface BaseEnum {
static BaseEnum getByValue(Class<? extends BaseEnum> emClazz, String value) { static BaseEnum getByValue(Class<? extends BaseEnum> emClazz, String value) {
BaseEnum[] em = emClazz.getEnumConstants(); BaseEnum[] em = emClazz.getEnumConstants();
for (BaseEnum e : em) { for (BaseEnum e : em) {
if (e.getValue().equals(value)) { if (StringUtils.equals(e.getValue(),value)) {
return e; return e;
} }
} }
......
...@@ -35,7 +35,8 @@ public class TenantIdUtil { ...@@ -35,7 +35,8 @@ public class TenantIdUtil {
List<Supplier<String>> supplierList = Arrays.asList( List<Supplier<String>> supplierList = Arrays.asList(
TenantIdUtil::getFromThreadLocal, TenantIdUtil::getFromThreadLocal,
TenantIdUtil::getFromHeader//, TenantIdUtil::getFromHeader
); );
for (Supplier<String> supplier : supplierList) { for (Supplier<String> supplier : supplierList) {
......
...@@ -12,7 +12,9 @@ import com.makeit.module.iot.vo.IotPagerResult; ...@@ -12,7 +12,9 @@ import com.makeit.module.iot.vo.IotPagerResult;
import com.makeit.module.iot.vo.ResponseMessage; import com.makeit.module.iot.vo.ResponseMessage;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe; import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace; import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace;
import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.JsonUtil; import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -23,6 +25,7 @@ import java.time.Duration; ...@@ -23,6 +25,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
/** /**
...@@ -95,7 +98,7 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -95,7 +98,7 @@ public class IotProductDeviceService extends IotCommonService {
DeviceInfoContentBreathe breathe = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentBreathe.class); DeviceInfoContentBreathe breathe = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentBreathe.class);
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(breathe.getTimestamp()), ZoneId.systemDefault()); LocalDateTime time = LongTimestampUtil.toLocalDateTime(breathe.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) { if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null; return null;
} }
...@@ -110,9 +113,9 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -110,9 +113,9 @@ public class IotProductDeviceService extends IotCommonService {
return null; return null;
} }
DeviceInfoContentSpace space = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentSpace.class); DeviceInfoContentSpace space = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentSpace.class);
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(space.getTimestamp()), ZoneId.systemDefault()); LocalDateTime time = LongTimestampUtil.toLocalDateTime(space.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) { if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null; return null;
} }
...@@ -121,6 +124,26 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -121,6 +124,26 @@ public class IotProductDeviceService extends IotCommonService {
} }
public List<DeviceInfoContentBreathe> getDeviceLogByTimeRangeBreathe(String deviceId, int pageSize, LocalDateTime startTime, LocalDateTime endTime) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<DeviceOperationLogEntity> deviceOperationLogEntityList = getDeviceLogByTimeRange(deviceId, "reportProperty", pageSize, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentBreathe> deviceInfoContentBreatheList = StreamUtil.map(deviceOperationLogEntityList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentBreathe.class));
return deviceInfoContentBreatheList;
}
public List<DeviceInfoContentSpace> getDeviceLogByTimeRangeSpace(String deviceId, int pageSize, LocalDateTime startTime, LocalDateTime endTime) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<DeviceOperationLogEntity> deviceOperationLogEntityList = getDeviceLogByTimeRange(deviceId, "reportProperty", pageSize, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogEntityList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class));
return deviceInfoContentSpaceList;
}
/** /**
* 根据类型查询设备日志 * 根据类型查询设备日志
...@@ -171,9 +194,20 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -171,9 +194,20 @@ public class IotProductDeviceService extends IotCommonService {
} }
public List<DeviceOperationLogEntity> getDeviceLogByTimeRange(String deviceId, int pageSize,String startTime,String endTime) { public List<DeviceOperationLogEntity> getDeviceLogByTimeRange(String deviceId, String typeValue, int pageSize, String startTime, String endTime) {
IotQueryParam iotQueryParam = buildQueryParam(pageSize); IotQueryParam iotQueryParam = buildQueryParam(pageSize);
List<Term> terms = Lists.newArrayList(); List<Term> terms = Lists.newArrayList();
Term term = Term.builder()
.column("type")
.termType("btw")
.type(Term.Type.or)
.value(typeValue)
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
.build();
terms.add(term);
Term term1 = Term.builder() Term term1 = Term.builder()
.column("timestamp") .column("timestamp")
.termType("gte") .termType("gte")
......
package com.makeit.utils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class LongTimestampUtil {
public static LocalDateTime toLocalDateTime(Long timestamp) {
if (timestamp == null) {
return null;
}
LocalDateTime time = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
return time;
}
}
...@@ -9,9 +9,10 @@ import lombok.Getter; ...@@ -9,9 +9,10 @@ import lombok.Getter;
@Getter @Getter
public enum SendTypeEnum implements BaseEnum { public enum SendTypeEnum implements BaseEnum {
//1-短信 2-邮件 3-语音短信 4-云龄工单 5-晶奇工单 6-子女端小程序 //1-短信 2-邮件 3-语音短信 4-云龄工单 5-晶奇工单 6-子女端小程序
SMS("alarm.sendType.sms"), SMS("alarm.notifyChannel.sms"),
MAIL("alarm.sendType.mail"), MAIL("alarm.notifyChannel.mail"),
VOICE_SMS("alarm.sendType.voiceSms"), VOICE_SMS("alarm.notifyChannel.voiceMessage"),
//todo 加字典
YUNLING("alarm.sendType.yunling"), YUNLING("alarm.sendType.yunling"),
JINGQI("alarm.sendType.jingqi"), JINGQI("alarm.sendType.jingqi"),
CHILD_WECHAT("alarm.sendType.childWechat") CHILD_WECHAT("alarm.sendType.childWechat")
......
...@@ -5,11 +5,8 @@ import lombok.AllArgsConstructor; ...@@ -5,11 +5,8 @@ import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection; import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Data @Data
@Builder @Builder
...@@ -30,8 +27,6 @@ public class MsgSendDTO { ...@@ -30,8 +27,6 @@ public class MsgSendDTO {
*/ */
private String[] param; private String[] param;
private String sendContent;
public void setParam(String... param) { public void setParam(String... param) {
this.param = param; this.param = param;
} }
......
...@@ -39,11 +39,11 @@ public class PlatUserUtil { ...@@ -39,11 +39,11 @@ public class PlatUserUtil {
// return userVO; // return userVO;
// } // }
//或者这里用策略模式 // //或者这里用策略模式
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull(); // WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) { // if (wechatUserInfo != null) {
return BeanDtoVoUtils.convert(wechatUserInfo, PlatUserVO.class); // return BeanDtoVoUtils.convert(wechatUserInfo, PlatUserVO.class);
} // }
PlatUserLoginVO tntUserLoginVO = TokenUtil.getTntUserDetail(); PlatUserLoginVO tntUserLoginVO = TokenUtil.getTntUserDetail();
if (tntUserLoginVO != null) { if (tntUserLoginVO != null) {
......
...@@ -3,7 +3,9 @@ package com.makeit.module.controller.dataScreen; ...@@ -3,7 +3,9 @@ package com.makeit.module.controller.dataScreen;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.module.system.entity.ChinaArea;
import com.makeit.service.platform.dataScreen.DataScreenService; import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.vo.platform.dataScreen.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -64,4 +66,11 @@ public class DataScreenController { ...@@ -64,4 +66,11 @@ public class DataScreenController {
public ApiResponseEntity<List<PlatMapStatisticsVO>> mapStatistics(@RequestBody PlatDataScreenQueryDTO dto) { public ApiResponseEntity<List<PlatMapStatisticsVO>> mapStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.mapStatistics(dto)); return ApiResponseUtils.success(dataScreenService.mapStatistics(dto));
} }
@ApiOperation("地图区域")
@PostMapping("mapList")
public ApiResponseEntity<List<ChinaAreaVO>> mapList(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.mapList(dto));
}
} }
...@@ -60,7 +60,5 @@ public class PlatElderRealTimeController { ...@@ -60,7 +60,5 @@ public class PlatElderRealTimeController {
} }
//TODO ywc 少一个坐标
} }
...@@ -2,12 +2,15 @@ package com.makeit.module.controller.elder; ...@@ -2,12 +2,15 @@ package com.makeit.module.controller.elder;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO; import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.*; import com.makeit.vo.platform.elder.report.day.*;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -28,6 +31,9 @@ import java.util.List; ...@@ -28,6 +31,9 @@ import java.util.List;
@RequestMapping("/plat/elder/report/day") @RequestMapping("/plat/elder/report/day")
public class PlatElderReportDayController { public class PlatElderReportDayController {
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@ApiOperation("睡眠评价") @ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation") @PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
...@@ -61,7 +67,7 @@ public class PlatElderReportDayController { ...@@ -61,7 +67,7 @@ public class PlatElderReportDayController {
@ApiOperation("心率呼吸率") @ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory") @PostMapping("heartRespiratory")
public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryVO>> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryVO>> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null; return ApiResponseUtils.success(platElderDayReportDayService.heartRespiratory(platElderIdDTO));
} }
@ApiOperation("行为异常记录") @ApiOperation("行为异常记录")
...@@ -79,7 +85,7 @@ public class PlatElderReportDayController { ...@@ -79,7 +85,7 @@ public class PlatElderReportDayController {
@ApiOperation("坐标记录") @ApiOperation("坐标记录")
@PostMapping("coordinateList") @PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null; return ApiResponseUtils.success(platElderDayReportDayService.coordinateList(platElderIdDTO));
} }
@ApiOperation("行为辐射") @ApiOperation("行为辐射")
......
...@@ -2,7 +2,7 @@ package com.makeit.module.controller.elder; ...@@ -2,7 +2,7 @@ package com.makeit.module.controller.elder;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.dto.platform.elder.PlatElderIdDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.vo.platform.elder.report.day.PlatElderHeartRespiratoryEvaluationVO; import com.makeit.vo.platform.elder.report.day.PlatElderHeartRespiratoryEvaluationVO;
import com.makeit.vo.platform.elder.report.day.PlatElderReportMonthVO; import com.makeit.vo.platform.elder.report.day.PlatElderReportMonthVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO; import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO;
...@@ -29,26 +29,26 @@ public class PlatElderReportMonthController { ...@@ -29,26 +29,26 @@ public class PlatElderReportMonthController {
@ApiOperation("综合评价") @ApiOperation("综合评价")
@PostMapping("comprehensiveEvaluation") @PostMapping("comprehensiveEvaluation")
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("睡眠评价") @ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation") @PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("心率呼吸评价") @ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation") @PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("月报表") @ApiOperation("月报表")
@PostMapping("reportMonth") @PostMapping("reportMonth")
public ApiResponseEntity<PlatElderReportMonthVO> reportMonth(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderReportMonthVO> reportMonth(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
......
...@@ -2,14 +2,17 @@ package com.makeit.module.controller.elder; ...@@ -2,14 +2,17 @@ package com.makeit.module.controller.elder;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.dto.platform.elder.PlatElderIdDTO; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.report.week.PlatElderComprehensiveEvaluationVO;
import com.makeit.vo.platform.elder.report.day.*; import com.makeit.vo.platform.elder.report.day.*;
import com.makeit.vo.platform.elder.report.week.PlatElderComprehensiveEvaluationVO;
import com.makeit.vo.platform.elder.report.week.PlatElderRealTimeHeartRespiratoryWeekVO; import com.makeit.vo.platform.elder.report.week.PlatElderRealTimeHeartRespiratoryWeekVO;
import com.makeit.vo.platform.elder.report.week.PlatElderSleepDiagramWeekVO; import com.makeit.vo.platform.elder.report.week.PlatElderSleepDiagramWeekVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -30,69 +33,72 @@ import java.util.List; ...@@ -30,69 +33,72 @@ import java.util.List;
@RequestMapping("/plat/elder/report/week") @RequestMapping("/plat/elder/report/week")
public class PlatElderReportWeekController { public class PlatElderReportWeekController {
@Autowired
private PlatElderDayReportWeekService platElderDayReportWeekService;
@ApiOperation("综合评价") @ApiOperation("综合评价")
@PostMapping("comprehensiveEvaluation") @PostMapping("comprehensiveEvaluation")
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("睡眠评价") @ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation") @PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("睡眠图表") @ApiOperation("睡眠图表")
@PostMapping("sleepDiagram") @PostMapping("sleepDiagram")
public ApiResponseEntity<List<PlatElderSleepDiagramWeekVO>> sleepDiagram(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderSleepDiagramWeekVO>> sleepDiagram(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("心率呼吸评价") @ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation") @PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("心率异常记录") @ApiOperation("心率异常记录")
@PostMapping("heartExceptionRecordList") @PostMapping("heartExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("呼吸率异常记录") @ApiOperation("呼吸率异常记录")
@PostMapping("respiratoryExceptionRecordList") @PostMapping("respiratoryExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("心率呼吸率") @ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory") @PostMapping("heartRespiratory")
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("行为异常记录") @ApiOperation("行为异常记录")
@PostMapping("behaviorExceptionRecordList") @PostMapping("behaviorExceptionRecordList")
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("跌倒记录") @ApiOperation("跌倒记录")
@PostMapping("failRecordList") @PostMapping("failRecordList")
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
@ApiOperation("坐标记录") @ApiOperation("坐标记录")
@PostMapping("coordinateList") @PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return ApiResponseUtils.success(platElderDayReportWeekService.coordinateList(platElderIdDTO));
} }
@ApiOperation("行为辐射") @ApiOperation("行为辐射")
@PostMapping("behaviorDistribution") @PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderIdDTO platElderIdDTO) { public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null; return null;
} }
......
package com.makeit.module.controller.space;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeNowVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/8
*/
@Api(tags = "房间详情")
@RestController
@RequestMapping("/plat/room/dynamic/detail")
public class PlatRoomDynamicDetailController {
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@ApiOperation("现在状态")
@PostMapping("nowStatus")
public ApiResponseEntity<PlatElderRealTimeNowVO> nowStatus(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.nowStatus(platElderIdDTO));
}
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.heartRespiratory(platElderIdDTO));
}
@ApiOperation("体动")
@PostMapping("body")
public ApiResponseEntity<PlatElderRealTimeBodyVO> body(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.body(platElderIdDTO));
}
@ApiOperation("坐标")
@PostMapping("coordinate")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinate(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.coordinate(platElderIdDTO));
}
}
package com.makeit.module.controller.wechat.elder;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeNowVO;
import com.makeit.vo.platform.elder.report.day.PlatElderBehaviorDistributionVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 长者基本信息 前端控制器
* </p>
*
* @author eugene young
* @since 2023-08-29
*/
@Api(tags = "平台端小程序-房间详情")
@RestController
@RequestMapping("/wechat/elder/realTime")
public class PlatElderRealTimeWechatController {
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@ApiOperation("现在状态")
@PostMapping("nowStatus")
public ApiResponseEntity<PlatElderRealTimeNowVO> nowStatus(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.nowStatus(platElderIdDTO));
}
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.heartRespiratory(platElderIdDTO));
}
@ApiOperation("体动")
@PostMapping("body")
public ApiResponseEntity<PlatElderRealTimeBodyVO> body(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.body(platElderIdDTO));
}
@ApiOperation("坐标")
@PostMapping("coordinate")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinate(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderRealTimeService.coordinate(platElderIdDTO));
}
@ApiOperation("坐标记录")
@PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportDayService.coordinateList(platElderIdDTO));
}
@ApiOperation("行为辐射")
@PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
}
}
...@@ -2,11 +2,11 @@ package com.makeit.module.controller.workstation; ...@@ -2,11 +2,11 @@ package com.makeit.module.controller.workstation;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.service.platform.workstation.WorkStationService; import com.makeit.service.platform.workstation.WorkStationService;
import com.makeit.vo.platform.dataScreen.PlatAgeStatisticsVO; import com.makeit.vo.platform.workstation.WorkStationHomeStatisticsVO;
import com.makeit.vo.platform.workstation.WorkStationStatisticsVO; import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionStatisticsVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "平台端-工作台") @Api(tags = "平台端-工作台")
@RestController @RestController
@RequestMapping("/plat/workstation") @RequestMapping("/plat/workstation")
...@@ -23,10 +25,21 @@ public class WorkStationController { ...@@ -23,10 +25,21 @@ public class WorkStationController {
@Autowired @Autowired
private WorkStationService workStationService; private WorkStationService workStationService;
@ApiOperation("统计") @ApiOperation("机构-统计")
@PostMapping("statistics") @PostMapping("institutionStatistics")
public ApiResponseEntity<WorkStationStatisticsVO> statistics(@RequestBody WorkStationQueryDTO dto) { public ApiResponseEntity<WorkStationInstitutionStatisticsVO> institutionStatistics(@RequestBody WorkStationQueryDTO dto) {
return ApiResponseUtils.success(workStationService.statistics(dto)); return ApiResponseUtils.success(workStationService.institutionStatistics(dto));
}
@ApiOperation("机构-列表")
@PostMapping("institutionList")
public ApiResponseEntity<List<WorkStationInstitutionRoomVO>> institutionList(@RequestBody WorkStationQueryDTO dto) {
return ApiResponseUtils.success(workStationService.institutionList(dto));
} }
@ApiOperation("居家-统计")
@PostMapping("homeStatistics")
public ApiResponseEntity<WorkStationHomeStatisticsVO> homeStatistics(@RequestBody WorkStationQueryDTO dto) {
return ApiResponseUtils.success(workStationService.homeStatistics(dto));
}
} }
...@@ -25,4 +25,6 @@ public class PlatAlarmCheckDTO { ...@@ -25,4 +25,6 @@ public class PlatAlarmCheckDTO {
private JSONObject properties; private JSONObject properties;
//PlatAlarmRecord.remark
private String remark;
} }
...@@ -28,5 +28,7 @@ public class PlatDataScreenQueryDTO { ...@@ -28,5 +28,7 @@ public class PlatDataScreenQueryDTO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("结束时间") @ApiModelProperty("结束时间")
private LocalDateTime endTime; private LocalDateTime endTime;
@ApiModelProperty("类型 1-居家 2-机构")
private String type;
} }
...@@ -33,4 +33,8 @@ public class PlatDeviceDTO { ...@@ -33,4 +33,8 @@ public class PlatDeviceDTO {
@ApiModelProperty(value = "床位名称") @ApiModelProperty(value = "床位名称")
private String bedName; private String bedName;
@ApiModelProperty(value = "床位Id")
private String bedId;
} }
...@@ -15,10 +15,13 @@ import lombok.EqualsAndHashCode; ...@@ -15,10 +15,13 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@ApiModel(value = "Elder对象", description = "长者基本信息") @ApiModel(value = "Elder对象", description = "长者基本信息")
public class PlatElderIdDTO{ public class PlatElderIdDTO {
@ApiModelProperty(value = "长者id") @ApiModelProperty(value = "长者id")
private String elderId; private String elderId;
@ApiModelProperty(value = "设备id")
private String deviceId;
} }
...@@ -36,6 +36,9 @@ public class WorkStationQueryDTO { ...@@ -36,6 +36,9 @@ public class WorkStationQueryDTO {
private List<String> spaceIds; private List<String> spaceIds;
@ApiModelProperty("告警类型") @ApiModelProperty("告警类型")
private String type; private String alarmType;
@ApiModelProperty("老人ids")
private List<String> elderIds;
} }
...@@ -74,6 +74,8 @@ public class PlatAlarmRecord extends BaseBusEntity { ...@@ -74,6 +74,8 @@ public class PlatAlarmRecord extends BaseBusEntity {
*/ */
private String elderIds; private String elderIds;
private String remark;
} }
......
package com.makeit.entity.platform.alarm;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
import java.util.Date;
/**
* 每天停留时长记录
* @TableName plat_day_duration_record
*/
@TableName(value ="plat_day_duration_record")
@Data
public class PlatDayDurationRecord extends BaseBusEntity {
/**
* 长者id,逗号拼接
*/
private String elderIds;
/**
* 当天本次进入该区域的时长
*/
private Long duration;
/**
* iot设备id
*/
private String oriDeviceId;
/**
* 日期 yyyyMMdd
*/
private String day;
/**
* 本次进入时间
*/
private Date startDate;
/**
* 本次离开时间
*/
private Date endDate;
}
\ No newline at end of file
...@@ -13,10 +13,6 @@ public class PlatBedStatusEnum { ...@@ -13,10 +13,6 @@ public class PlatBedStatusEnum {
public enum BedStatusEnum implements BaseEnum { public enum BedStatusEnum implements BaseEnum {
//SPARE 空闲
//NOT_FULL 未住满
//FULL 已住满
SPARE("room.status.spare"), SPARE("room.status.spare"),
CHECKED_IN("bed.status.CheckedIn"); CHECKED_IN("bed.status.CheckedIn");
......
package com.makeit.mapper.platform.alarm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Mapper
* @createDate 2023-09-14 10:14:20
* @Entity generator.entity.PlatDayDurationRecord
*/
public interface PlatDayDurationRecordMapper extends BaseMapper<PlatDayDurationRecord> {
}
package com.makeit.mapper.platform.space; package com.makeit.mapper.platform.space;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.platform.space.PlatSpaceQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.vo.platform.space.PlatRoomVO;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO; import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -16,4 +16,6 @@ import java.util.List; ...@@ -16,4 +16,6 @@ import java.util.List;
*/ */
public interface PlatRoomMapper extends BaseMapper<PlatRoom> { public interface PlatRoomMapper extends BaseMapper<PlatRoom> {
List<PlatSpaceAndRoomVO> spaceAndRoomList(); List<PlatSpaceAndRoomVO> spaceAndRoomList();
List<WorkStationInstitutionRoomVO> workStationList(@Param("dto") WorkStationQueryDTO dto);
} }
...@@ -54,7 +54,7 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> { ...@@ -54,7 +54,7 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
*/ */
void noticeDeviceAlarm(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord); void noticeDeviceAlarm(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord);
PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO); PlatAlarmRecord convertToPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO);
void getElderListByDeviceId(PlatAlarmCheckDTO platAlarmCheckDTO); void getElderListByDeviceId(PlatAlarmCheckDTO platAlarmCheckDTO);
} }
package com.makeit.service.platform.alarm;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
* @createDate 2023-09-14 10:14:20
*/
public interface PlatDayDurationRecordService extends IService<PlatDayDurationRecord> {
}
...@@ -2,29 +2,44 @@ package com.makeit.service.platform.alarm.alarmStrategy; ...@@ -2,29 +2,44 @@ package com.makeit.service.platform.alarm.alarmStrategy;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO; import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.data.convert.JsonUtil; import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class BehaviorAlarm implements IAlarm{ public class BehaviorAlarm implements IAlarm{
@Autowired @Autowired
private PlatAlarmRecordService platAlarmRecordService; private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private PlatDayDurationRecordService platDayDurationRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR; private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR;
...@@ -35,6 +50,9 @@ public class BehaviorAlarm implements IAlarm{ ...@@ -35,6 +50,9 @@ public class BehaviorAlarm implements IAlarm{
/** /**
* 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置) * 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置)
* 取前七天的日最长时间,然后取中位数
* 前七天:没有满足七条记录则跳过,如果七条没都包含长者则跳过
* 记录的保存和缓存读取
* @param platAlarmCheckDTO * @param platAlarmCheckDTO
*/ */
@Override @Override
...@@ -55,20 +73,48 @@ public class BehaviorAlarm implements IAlarm{ ...@@ -55,20 +73,48 @@ public class BehaviorAlarm implements IAlarm{
List<String> personStateList = Arrays.asList("1", "2", "3"); List<String> personStateList = Arrays.asList("1", "2", "3");
//有人 //有人
//计数 //计数
long endLong = new Date().getTime(); Date now = new Date();
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId); long endLong = now.getTime();
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if(alarmRedisDTO==null){
alarmRedisDTO= new AlarmRedisDTO();
}
if (personStateList.contains(personState)) { if (personStateList.contains(personState)) {
long count = endLong - startLong; //第一次进入空间
Long startLong = alarmRedisDTO.getStartLong();
if(startLong == null ){ if(startLong == null ){
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong); alarmRedisDTO.setStartLong(endLong);
alarmRedisDTO.setStart(now);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,alarmRedisDTO);
return; return;
} }
if (count >= duration) { long count = endLong - startLong;
//进入空间时间满足告警时长,判断是否已经告警过了
if (count >= duration && StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.NO.getValue())) {
notice(platAlarmCheckDTO); notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,startLong); alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,alarmRedisDTO);
} }
}else { }else {
// //todo 是否有第一次进入记录,有则保存db
Long startLong = alarmRedisDTO.getStartLong();
if(startLong==null){
return;
}
long count = endLong - alarmRedisDTO.getStartLong();
//save db
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
PlatDayDurationRecord durationRecord = new PlatDayDurationRecord();
durationRecord.setElderIds(platElderList.stream().map(BaseEntity::getId).collect(Collectors.joining(",")));
durationRecord.setDuration(count);
durationRecord.setOriDeviceId(platDevice.getOriDeviceId());
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
durationRecord.setDay(dateTimeFormatter.format( LocalDateTime.ofEpochSecond(startLong/1000, 0, ZoneOffset.ofHours(8))));
durationRecord.setStartDate(alarmRedisDTO.getStart());
durationRecord.setEndDate(now);
durationRecord.setTenantId(config.getTenantId());
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,null); RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,null);
} }
} }
...@@ -76,9 +122,20 @@ public class BehaviorAlarm implements IAlarm{ ...@@ -76,9 +122,20 @@ public class BehaviorAlarm implements IAlarm{
@Override @Override
@Async @Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) { public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
//获取长者 空间信息
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("房间名"); List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
PlatAlarmRecord platAlarmRecord =platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO); if(CollectionUtils.isEmpty(platElderList)){
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord); return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
for (PlatElder platElder : platElderList) {
List<String> param = new ArrayList<>();
param.add(platElder.getName());
param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
} }
} }
...@@ -7,17 +7,22 @@ import com.makeit.dto.platform.alarm.PlatAlarmConfigRespiratoryDTOVO; ...@@ -7,17 +7,22 @@ import com.makeit.dto.platform.alarm.PlatAlarmConfigRespiratoryDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil; import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
@Component @Component
public class BreathAlarm implements IAlarm{ public class BreathAlarm implements IAlarm{
...@@ -67,6 +72,12 @@ public class BreathAlarm implements IAlarm{ ...@@ -67,6 +72,12 @@ public class BreathAlarm implements IAlarm{
long count = endLong - startLong; long count = endLong - startLong;
if (br > end || br < start) { if (br > end || br < start) {
if (count >= duration) { if (count >= duration) {
if(br>end){
platAlarmCheckDTO.setRemark("呼吸过速");
}
if(br < start){
platAlarmCheckDTO.setRemark("呼吸过缓");
}
notice(platAlarmCheckDTO); notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000); RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
} }
...@@ -76,12 +87,27 @@ public class BreathAlarm implements IAlarm{ ...@@ -76,12 +87,27 @@ public class BreathAlarm implements IAlarm{
return; return;
} }
/**
* [#长者姓名][#呼吸状态],请及时处理!
* @param platAlarmCheckDTO
*/
@Override @Override
@Async @Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) { public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111"); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO); List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord); if(CollectionUtils.isEmpty(platElderList)){
return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
for (PlatElder platElder : platElderList) {
List<String> param = new ArrayList<>();
param.add(platElder.getName());
param.add(platAlarmCheckDTO.getRemark());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
} }
} }
...@@ -54,7 +54,7 @@ public class FallAlarm implements IAlarm{ ...@@ -54,7 +54,7 @@ public class FallAlarm implements IAlarm{
param.add(platElder.getName()); param.add(platElder.getName());
param.add(platRoom.getName()); param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param); platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO); PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord); platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
} }
} }
......
...@@ -7,17 +7,22 @@ import com.makeit.dto.platform.alarm.PlatAlarmConfigHeartDTOVO; ...@@ -7,17 +7,22 @@ import com.makeit.dto.platform.alarm.PlatAlarmConfigHeartDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil; import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
@Component @Component
public class HeartAlarm implements IAlarm { public class HeartAlarm implements IAlarm {
...@@ -58,6 +63,12 @@ public class HeartAlarm implements IAlarm { ...@@ -58,6 +63,12 @@ public class HeartAlarm implements IAlarm {
long count = endLong - startLong; long count = endLong - startLong;
if (hr > end || hr < start) { if (hr > end || hr < start) {
if (count >= duration) { if (count >= duration) {
if(hr>end){
platAlarmCheckDTO.setRemark("心率过速");
}
if(hr < start){
platAlarmCheckDTO.setRemark("心率过缓");
}
notice(platAlarmCheckDTO); notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000); RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
} }
...@@ -70,8 +81,19 @@ public class HeartAlarm implements IAlarm { ...@@ -70,8 +81,19 @@ public class HeartAlarm implements IAlarm {
@Async @Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) { public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111"); platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
PlatAlarmRecord platAlarmRecord =platAlarmRecordService. createPlatAlarmRecord(platAlarmCheckDTO); List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord); if(CollectionUtils.isEmpty(platElderList)){
return;
}
PlatRoom platRoom = platAlarmCheckDTO.getPlatRoom();
for (PlatElder platElder : platElderList) {
List<String> param = new ArrayList<>();
param.add(platElder.getName());
param.add(platAlarmCheckDTO.getRemark());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
} }
} }
...@@ -177,6 +177,7 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe ...@@ -177,6 +177,7 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
@Transactional @Transactional
@Override @Override
//@TenantIdIgnore
public void copyForOrg(PlatOrg org) { public void copyForOrg(PlatOrg org) {
List<PlatAlarmConfig> configList = TenantIdUtil.execute(IdConst.DEFAULT_TENANT_ID, () -> list()); List<PlatAlarmConfig> configList = TenantIdUtil.execute(IdConst.DEFAULT_TENANT_ID, () -> list());
...@@ -190,20 +191,23 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe ...@@ -190,20 +191,23 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
String[] split = orgPath.split(","); String[] split = orgPath.split(",");
configList.forEach(e -> { TenantIdUtil.execute(org.getTenantId(),()->{
e.setId(null); configList.forEach(e -> {
e.setTenantId(org.getTenantId());
e.setId(null);
for (int i = 1; i < split.length; i++) { for (int i = 1; i < split.length; i++) {
BiConsumer<PlatAlarmConfig, String> consumer = list.get(i - 1); BiConsumer<PlatAlarmConfig, String> consumer = list.get(i - 1);
consumer.accept(e, split[i]); consumer.accept(e, split[i]);
} }
e.setOrgId(org.getId()); e.setOrgId(org.getId());
e.setOrgPath(orgPath); e.setOrgPath(orgPath);
}); });
saveBatch(configList); saveBatch(configList);
});
alarmConfigUtil.putAll(configList); alarmConfigUtil.putAll(configList);
} }
......
...@@ -271,6 +271,12 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -271,6 +271,12 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
Set<String> phoneSet = platUserList.stream().map(PlatUser::getMobile).collect(Collectors.toSet()); Set<String> phoneSet = platUserList.stream().map(PlatUser::getMobile).collect(Collectors.toSet());
//发送消息 //发送消息
noticeByChannel(alarmConfig, alarmRecord, phoneSet, notifyChannelList); noticeByChannel(alarmConfig, alarmRecord, phoneSet, notifyChannelList);
String userIdJoin = platUserList.stream().map(PlatUser::getId).collect(Collectors.joining(","));
alarmRecord.setNotifyUser(userIdJoin);
saveOrUpdate(alarmRecord);
} }
/** /**
...@@ -299,21 +305,21 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -299,21 +305,21 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
} }
@Override @Override
public PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO) { public PlatAlarmRecord convertToPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig(); PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice(); PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
List<String> param = platAlarmCheckDTO.getParam(); List<String> param = platAlarmCheckDTO.getParam();
List<PlatElder> elderList = platAlarmCheckDTO.getPlatElderList(); List<PlatElder> elderList = platAlarmCheckDTO.getPlatElderList();
String elderNameJoin = elderList.stream().map(PlatElder::getName).collect(Collectors.joining(" "));
PlatAlarmRecord platAlarmRecord = new PlatAlarmRecord(); PlatAlarmRecord platAlarmRecord = new PlatAlarmRecord();
platAlarmRecord.setAlarmId(config.getId()); platAlarmRecord.setAlarmId(config.getId());
platAlarmRecord.setAlarmType(config.getAlarmType()); platAlarmRecord.setAlarmType(config.getAlarmType());
platAlarmRecord.setAlarmDate(new Date()); platAlarmRecord.setAlarmDate(new Date());
platAlarmRecord.setStatus("0"); platAlarmRecord.setStatus(CommonEnum.NO.getValue());
//todo platAlarmRecord.setNoticeStatus(CommonEnum.NO.getValue());
platAlarmRecord.setContent(replaceParam(elderNameJoin, param)); //模板信息 替换参数
platAlarmRecord.setContent(replaceParam(config.getContent(), param));
platAlarmRecord.setOrgId(platDevice.getOrgId()); platAlarmRecord.setOrgId(platDevice.getOrgId());
platAlarmRecord.setNotifyUser(config.getNotifyUser()); platAlarmRecord.setNotifyUser(config.getNotifyUser());
platAlarmRecord.setDeviceId(platDevice.getId()); platAlarmRecord.setDeviceId(platDevice.getId());
......
package com.makeit.service.platform.alarm.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service实现
* @createDate 2023-09-14 10:14:20
*/
@Service
public class PlatDayDurationRecordServiceImpl extends ServiceImpl<PlatDayDurationRecordMapper, PlatDayDurationRecord>
implements PlatDayDurationRecordService {
}
...@@ -96,4 +96,6 @@ public interface PlatOrgService extends IService<PlatOrg> { ...@@ -96,4 +96,6 @@ public interface PlatOrgService extends IService<PlatOrg> {
void saveOrg(PlatOrg platOrg); void saveOrg(PlatOrg platOrg);
List<PlatOrg> createOrgTree(List<PlatOrg> orgList); List<PlatOrg> createOrgTree(List<PlatOrg> orgList);
List<PlatOrg> belongToScopeList(PlatOrg param);
} }
...@@ -457,6 +457,27 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg> ...@@ -457,6 +457,27 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
return orgList.stream().filter(vo->StringUtils.isBlank(vo.getParentNodeId())).collect(Collectors.toList()); return orgList.stream().filter(vo->StringUtils.isBlank(vo.getParentNodeId())).collect(Collectors.toList());
} }
@Override
public List<PlatOrg> belongToScopeList(PlatOrg param) {
PlatUserVO userVO = PlatUserUtil.getUserVO();
String isTenant = userVO.getIsTenant();
//如果是租户账号 则有所有权限
if (StringUtils.equals(isTenant, CommonEnum.YES.getValue())) {
List<PlatOrg> orgList = this.list(new LambdaQueryWrapper<PlatOrg>()
.eq(PlatOrg::getStatus, CommonEnum.YES.getValue())
);
return orgList;
}
//平台账号
Set<String> orgIdList = getOrgIdListByUserId(userVO.getId());
List<PlatOrg> orgList = this.list(new LambdaQueryWrapper<PlatOrg>().in(BaseEntity::getId, orgIdList).eq(PlatOrg::getStatus, CommonEnum.YES.getValue()));
if (CollectionUtils.isEmpty(orgList)) {
return new ArrayList<>();
}
return orgList;
}
/** /**
* 寻找最近的父节点 * 寻找最近的父节点
* @param orgMap 有权限的组织 * @param orgMap 有权限的组织
......
package com.makeit.service.platform.dataScreen; package com.makeit.service.platform.dataScreen;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.vo.platform.dataScreen.*;
import java.util.List; import java.util.List;
...@@ -23,4 +24,6 @@ public interface DataScreenService { ...@@ -23,4 +24,6 @@ public interface DataScreenService {
PlatBaseInfoStatisticsVO baseInfoStatistics(PlatDataScreenQueryDTO dto); PlatBaseInfoStatisticsVO baseInfoStatistics(PlatDataScreenQueryDTO dto);
List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto); List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto);
List<ChinaAreaVO> mapList(PlatDataScreenQueryDTO dto);
} }
...@@ -113,11 +113,14 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev ...@@ -113,11 +113,14 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
public PlatDeviceViewVO view(String id) { public PlatDeviceViewVO view(String id) {
PlatDevice db = getById(id); PlatDevice db = getById(id);
PlatDeviceViewVO vo = BeanDtoVoUtils.convert(db, PlatDeviceViewVO.class);
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda() PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getDeviceId, id)); .eq(PlatDeviceOther::getDeviceId, id));
PlatDeviceViewVO vo = BeanDtoVoUtils.convert(db, PlatDeviceViewVO.class); if (other != null) {
BeanUtils.copyProperties(other, vo); BeanUtils.copyProperties(other, vo);
}
vo.setId(db.getId()); vo.setId(db.getId());
......
...@@ -2,10 +2,9 @@ package com.makeit.service.platform.elder; ...@@ -2,10 +2,9 @@ package com.makeit.service.platform.elder;
import com.makeit.dto.platform.elder.PlatElderIdDTO; import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeNowVO;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
...@@ -18,4 +17,10 @@ import java.util.List; ...@@ -18,4 +17,10 @@ import java.util.List;
*/ */
public interface PlatElderDayReportDayService { public interface PlatElderDayReportDayService {
List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderIdDTO platElderIdDTO);
List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end);
List<PlatElderCoordinateVO> coordinateList(PlatElderIdDTO platElderIdDTO);
} }
package com.makeit.service.platform.elder;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import java.util.List;
/**
* <p>
* 长者健康状态 服务类
* </p>
*
* @author eugene young
* @since 2023-08-29
*/
public interface PlatElderDayReportWeekService {
List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO);
}
package com.makeit.service.platform.elder; package com.makeit.service.platform.elder;
import com.makeit.dto.platform.elder.PlatElderIdDTO; import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
...@@ -18,6 +19,10 @@ import java.util.List; ...@@ -18,6 +19,10 @@ import java.util.List;
*/ */
public interface PlatElderRealTimeService { public interface PlatElderRealTimeService {
PlatDevice getBreathDevice(String elderId, String deviceId);
List<PlatDevice> getSpaceDevice(String elderId, String deviceId);
PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO); PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO);
PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO); PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO);
......
package com.makeit.service.platform.elder.impl; package com.makeit.service.platform.elder.impl;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService; import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.utils.LongTimestampUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDayService { import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Service
public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDayService {
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Autowired
private PlatElderRealTimeService platElderRealTimeService;
@Override
public List<PlatElderRealTimeHeartRespiratoryVO> heartRespiratory(PlatElderIdDTO platElderIdDTO) {
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice == null) {
return new ArrayList<>(10);
}
LocalDateTime now = LocalDateTime.now();
LocalDateTime start = LocalDateTimeUtils.getDayStart(now);
LocalDateTime end = LocalDateTimeUtils.getDayEnd(now);
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, start, end);
List<PlatElderRealTimeHeartRespiratoryVO> voList = StreamUtil.map(breatheList, e -> {
PlatElderRealTimeHeartRespiratoryVO vo = new PlatElderRealTimeHeartRespiratoryVO();
vo.setTime(LongTimestampUtil.toLocalDateTime(e.getTimestamp()));
vo.setHeartRate(e.getProperties().getHr());
vo.setRespiratoryRate(e.getProperties().getBr());
return vo;
});
return voList;
}
@Override
public List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(platDeviceList)) {
return new ArrayList<>(10);
}
List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
platDeviceList.forEach(e -> {
List<DeviceInfoContentSpace> spaceList = iotProductDeviceService.getDeviceLogByTimeRangeSpace(e.getOriDeviceId(), 2 * 24 * 3600, start, end);
voList.addAll(StreamUtil.map(spaceList, i -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setX(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.cos(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setY(new BigDecimal(i.getProperties().getDistance()).multiply(new BigDecimal(Math.sin(i.getProperties().getAngle()) + "")).setScale(2, RoundingMode.HALF_UP));
return vo;
})
);
});
return voList;
}
@Override
public List<PlatElderCoordinateVO> coordinateList(PlatElderIdDTO platElderIdDTO) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime start = LocalDateTimeUtils.getDayStart(now);
LocalDateTime end = LocalDateTimeUtils.getDayEnd(now);
return coordinateList(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId(), start, end);
}
} }
package com.makeit.service.platform.elder.impl;
import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderDayReportWeekService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeekService {
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@Autowired
private PlatElderService platElderService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
@Override
public List<PlatElderCoordinateVO> coordinateList(PlatElderReportDTO platElderIdDTO) {
return platElderDayReportDayService.coordinateList(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId(), platElderIdDTO.getStartTime(), platElderIdDTO.getEndTime());
}
}
...@@ -5,10 +5,12 @@ import com.makeit.entity.platform.device.PlatDevice; ...@@ -5,10 +5,12 @@ import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe; import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace; import com.makeit.module.iot.vo.breathe.DeviceInfoContentSpace;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderRealTimeService; import com.makeit.service.platform.elder.PlatElderRealTimeService;
import com.makeit.service.platform.elder.PlatElderService; import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.CollectionUtils; import com.makeit.utils.data.validate.CollectionUtils;
import com.makeit.utils.old.StringUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
...@@ -20,6 +22,7 @@ import java.math.BigDecimal; ...@@ -20,6 +22,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -40,11 +43,44 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -40,11 +43,44 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
private PlatElderService platElderService; private PlatElderService platElderService;
@Autowired @Autowired
private PlatDeviceService platDeviceService;
@Autowired
private IotProductDeviceService iotProductDeviceService; private IotProductDeviceService iotProductDeviceService;
private DeviceInfoContentBreathe getNowDataBreathe(String elderId) { @Override
public PlatDevice getBreathDevice(String elderId, String deviceId) {
PlatDevice platDevice = null;
if (StringUtils.isNotBlank(elderId)) {
platDevice = platElderService.getBreathDevice(elderId);
}
if (StringUtils.isNotBlank(deviceId)) {
platDevice = platDeviceService.getById(deviceId);
}
return platDevice;
}
@Override
public List<PlatDevice> getSpaceDevice(String elderId, String deviceId) {
List<PlatDevice> deviceList = null;
if (StringUtils.isNotBlank(elderId)) {
deviceList = platElderService.getSpaceDevice(elderId);
}
if (StringUtils.isNotBlank(deviceId)) {
deviceList = Arrays.asList(platDeviceService.getById(deviceId));
}
return deviceList;
}
private DeviceInfoContentBreathe getNowDataBreathe(String elderId, String deviceId) {
PlatDevice platDevice = platElderService.getBreathDevice(elderId); PlatDevice platDevice = getBreathDevice(elderId, deviceId);
if (platDevice == null) { if (platDevice == null) {
return null; return null;
...@@ -56,11 +92,11 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -56,11 +92,11 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
} }
private List<DeviceInfoContentSpace> getNowDataSpace(String elderId) { private List<DeviceInfoContentSpace> getNowDataSpace(String elderId, String deviceId) {
List<PlatDevice> deviceList = platElderService.getSpaceDevice(elderId); List<PlatDevice> deviceList = getSpaceDevice(elderId, deviceId);
if (CollectionUtils.isNotEmpty(deviceList)) { if (CollectionUtils.isEmpty(deviceList)) {
return null; return null;
} }
...@@ -71,7 +107,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -71,7 +107,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override @Override
public PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO) { public PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId()); DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeNowVO platElderRealTimeNowVO = new PlatElderRealTimeNowVO(); PlatElderRealTimeNowVO platElderRealTimeNowVO = new PlatElderRealTimeNowVO();
...@@ -90,7 +126,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -90,7 +126,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override @Override
public PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO) { public PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId()); DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeHeartRespiratoryVO platElderRealTimeHeartRespiratoryVO = new PlatElderRealTimeHeartRespiratoryVO(); PlatElderRealTimeHeartRespiratoryVO platElderRealTimeHeartRespiratoryVO = new PlatElderRealTimeHeartRespiratoryVO();
platElderRealTimeHeartRespiratoryVO.setTime(LocalDateTime.now()); platElderRealTimeHeartRespiratoryVO.setTime(LocalDateTime.now());
...@@ -107,7 +143,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -107,7 +143,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override @Override
public PlatElderRealTimeBodyVO body(PlatElderIdDTO platElderIdDTO) { public PlatElderRealTimeBodyVO body(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId()); DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO(); PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO();
platElderRealTimeBodyVO.setTime(LocalDateTime.now()); platElderRealTimeBodyVO.setTime(LocalDateTime.now());
...@@ -124,7 +160,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService { ...@@ -124,7 +160,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override @Override
public List<PlatElderCoordinateVO> coordinate(PlatElderIdDTO platElderIdDTO) { public List<PlatElderCoordinateVO> coordinate(PlatElderIdDTO platElderIdDTO) {
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = getNowDataSpace(platElderIdDTO.getElderId()); List<DeviceInfoContentSpace> deviceInfoContentSpaceList = getNowDataSpace(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
List<PlatElderCoordinateVO> voList = new ArrayList<>(10); List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
......
...@@ -3,12 +3,12 @@ package com.makeit.service.platform.space; ...@@ -3,12 +3,12 @@ package com.makeit.service.platform.space;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.space.PlatRoomDTO; import com.makeit.dto.platform.space.PlatRoomDTO;
import com.makeit.dto.platform.space.PlatRoomQueryDTO; import com.makeit.dto.platform.space.PlatRoomQueryDTO;
import com.makeit.dto.platform.space.PlatSpaceQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO; import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import java.util.List; import java.util.List;
...@@ -61,4 +61,6 @@ public interface PlatRoomService extends IService<PlatRoom> { ...@@ -61,4 +61,6 @@ public interface PlatRoomService extends IService<PlatRoom> {
PageVO<PlatRoom> page(PageReqDTO<PlatRoomQueryDTO> page); PageVO<PlatRoom> page(PageReqDTO<PlatRoomQueryDTO> page);
List<PlatSpaceAndRoomVO> spaceAndRoomList(); List<PlatSpaceAndRoomVO> spaceAndRoomList();
List<WorkStationInstitutionRoomVO> workStationList(WorkStationQueryDTO dto);
} }
...@@ -165,9 +165,13 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -165,9 +165,13 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatRoomBedDevice::getRoomId,dto.getRoomId()); queryWrapper.eq(PlatRoomBedDevice::getRoomId,dto.getRoomId());
queryWrapper.select(PlatRoomBedDevice::getBedId); queryWrapper.select(PlatRoomBedDevice::getBedId);
queryWrapper.isNotNull(PlatRoomBedDevice::getBedId);
List<PlatRoomBedDevice> listDevices = platRoomBedDeviceService.list(queryWrapper); List<PlatRoomBedDevice> listDevices = platRoomBedDeviceService.list(queryWrapper);
List<String> listBedIds = listDevices.stream().map(item->item.getBedId()).collect(Collectors.toList());
List<String> listBedIds = new ArrayList<>();
if(!listDevices.isEmpty()){
listBedIds = listDevices.stream().map(item->item.getBedId()).collect(Collectors.toList());
}
LambdaQueryWrapper<PlatBed> queryWrapper1 = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatBed> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(StringUtil.isNotEmpty(dto.getRoomId()), PlatBed::getRoomId, dto.getRoomId()); queryWrapper1.eq(StringUtil.isNotEmpty(dto.getRoomId()), PlatBed::getRoomId, dto.getRoomId());
......
...@@ -119,10 +119,12 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM ...@@ -119,10 +119,12 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
queryWrapper2.in(PlatBed::getId,listBedIds); queryWrapper2.in(PlatBed::getId,listBedIds);
List<PlatBed> listBeds = platBedService.list(queryWrapper2); List<PlatBed> listBeds = platBedService.list(queryWrapper2);
Map<String,String> map = listBeds.stream().collect(Collectors.toMap(PlatBed::getId,PlatBed::getName,(k1, k2)->k1)); Map<String,String> map = listBeds.stream().collect(Collectors.toMap(PlatBed::getId,PlatBed::getName,(k1, k2)->k1));
Map<String,String> mapName = new HashMap<>(); Map<String,String> mapName = new HashMap<>(20);
Map<String,String> mapBedId = new HashMap<>(20);
list.forEach(item->{ list.forEach(item->{
if(map.containsKey(item.getBedId())){ if(map.containsKey(item.getBedId())){
mapName.put(item.getDeviceId(),map.get(item.getBedId())); mapName.put(item.getDeviceId(),map.get(item.getBedId()));
mapBedId.put(item.getDeviceId(),item.getBedId());
} }
}); });
...@@ -136,6 +138,7 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM ...@@ -136,6 +138,7 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
data.forEach(item->{ data.forEach(item->{
item.setBedName(mapName.get(item.getId())); item.setBedName(mapName.get(item.getId()));
item.setBedId(mapBedId.get(item.getId()));
}); });
} }
return data; return data;
......
...@@ -71,7 +71,7 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService { ...@@ -71,7 +71,7 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
PlatRoomVO vo = convertToVO(room,bedMap); PlatRoomVO vo = convertToVO(room,bedMap);
roomVOList.add(vo); roomVOList.add(vo);
} }
platRoomPanoramaVO.setList(roomVOList); platRoomPanoramaVO.setChildren(roomVOList);
list.add(platRoomPanoramaVO); list.add(platRoomPanoramaVO);
} }
} }
...@@ -189,7 +189,7 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService { ...@@ -189,7 +189,7 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
this.child(item,map); this.child(item,map);
listChild.add(item); listChild.add(item);
} }
vo.setChild(listChild); vo.setChildren(listChild);
return vo; return vo;
} }
} }
...@@ -8,6 +8,7 @@ import com.makeit.common.page.PageReqDTO; ...@@ -8,6 +8,7 @@ import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.space.PlatRoomDTO; import com.makeit.dto.platform.space.PlatRoomDTO;
import com.makeit.dto.platform.space.PlatRoomQueryDTO; import com.makeit.dto.platform.space.PlatRoomQueryDTO;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatBed; import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.enums.CodeMessageEnum; import com.makeit.enums.CodeMessageEnum;
...@@ -18,6 +19,7 @@ import com.makeit.service.platform.space.PlatRoomService; ...@@ -18,6 +19,7 @@ import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO; import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -147,5 +149,10 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -147,5 +149,10 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
return baseMapper.spaceAndRoomList(); return baseMapper.spaceAndRoomList();
} }
@Override
public List<WorkStationInstitutionRoomVO> workStationList(WorkStationQueryDTO dto) {
return baseMapper.workStationList(dto);
}
} }
...@@ -2,7 +2,11 @@ package com.makeit.service.platform.workstation; ...@@ -2,7 +2,11 @@ package com.makeit.service.platform.workstation;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.vo.platform.workstation.WorkStationStatisticsVO; import com.makeit.vo.platform.workstation.WorkStationHomeStatisticsVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionStatisticsVO;
import java.util.List;
/** /**
* Controller * Controller
...@@ -12,5 +16,9 @@ import com.makeit.vo.platform.workstation.WorkStationStatisticsVO; ...@@ -12,5 +16,9 @@ import com.makeit.vo.platform.workstation.WorkStationStatisticsVO;
*/ */
public interface WorkStationService { public interface WorkStationService {
WorkStationStatisticsVO statistics(WorkStationQueryDTO dto); WorkStationInstitutionStatisticsVO institutionStatistics(WorkStationQueryDTO dto);
List<WorkStationInstitutionRoomVO> institutionList(WorkStationQueryDTO dto);
WorkStationHomeStatisticsVO homeStatistics(WorkStationQueryDTO dto);
} }
package com.makeit.service.platform.workstation.impl; package com.makeit.service.platform.workstation.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatUser; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatSpace; import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.platform.alarm.PlatAlarmRecordEnum; import com.makeit.enums.platform.alarm.PlatAlarmRecordEnum;
import com.makeit.enums.platform.device.PlatDeviceEnum; import com.makeit.enums.platform.auth.PlatOrgEnum;
import com.makeit.enums.platform.elder.PlatElderEnum; import com.makeit.enums.platform.space.PlatBedStatusEnum;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.auth.PlatOrgService; import com.makeit.service.platform.auth.PlatOrgService;
import com.makeit.service.platform.auth.PlatUserService;
import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderService; import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatBedService; import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.service.platform.space.PlatSpaceService; import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.service.platform.workstation.WorkStationService; import com.makeit.service.platform.workstation.WorkStationService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.vo.platform.workstation.WorkStationStatisticsVO; import com.makeit.vo.platform.workstation.WorkStationHomeStatisticsVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionStatisticsVO;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -49,12 +46,10 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -49,12 +46,10 @@ public class WorkStationServiceImpl implements WorkStationService {
@Autowired @Autowired
private PlatElderService platElderService; private PlatElderService platElderService;
@Autowired @Autowired
private PlatDeviceService platDeviceService; private PlatRoomService platRoomService;
@Autowired @Autowired
private PlatBedService platBedService; private PlatBedService platBedService;
@Autowired @Autowired
private PlatUserService platUserService;
@Autowired
private PlatAlarmRecordService platAlarmRecordService; private PlatAlarmRecordService platAlarmRecordService;
@Autowired @Autowired
private PlatSpaceService platSpaceService; private PlatSpaceService platSpaceService;
...@@ -63,13 +58,114 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -63,13 +58,114 @@ public class WorkStationServiceImpl implements WorkStationService {
@Override @Override
public WorkStationStatisticsVO statistics(WorkStationQueryDTO dto) { public WorkStationInstitutionStatisticsVO institutionStatistics(WorkStationQueryDTO dto) {
WorkStationStatisticsVO vo = new WorkStationStatisticsVO(); WorkStationInstitutionStatisticsVO vo = new WorkStationInstitutionStatisticsVO();
//代处理告警 if(dto.getOrgIds().isEmpty()){
//获取该账号的权限组织
PlatOrg param = new PlatOrg();
param.setType(PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue());
List<PlatOrg> orgs = platOrgService.belongToScopeList(param);
if(orgs.isEmpty()){
return vo;
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
}
//待处理告警
long unHandledNumber = platAlarmRecordService.count(new QueryWrapper<PlatAlarmRecord>().lambda() long unHandledNumber = platAlarmRecordService.count(new QueryWrapper<PlatAlarmRecord>().lambda()
.eq(PlatAlarmRecord::getStatus, PlatAlarmRecordEnum.AlarmRecordStatusEnum.UNHANDLED.getValue()) .eq(PlatAlarmRecord::getStatus, PlatAlarmRecordEnum.AlarmRecordStatusEnum.UNHANDLED.getValue())
.in(PlatAlarmRecord::getOrgId, dto.getOrgIds())); .in(PlatAlarmRecord::getOrgId, dto.getOrgIds()));
//在住长者
long elderNumber = platElderService.count(new QueryWrapper<PlatElder>().lambda()
.isNotNull(PlatElder::getBedId)
.in(PlatElder::getOrgId, dto.getOrgIds()));
//今日入住
long checkInNumber = platElderService.count(new QueryWrapper<PlatElder>().lambda()
.between(PlatElder::getCheckInTime, dto.getStartTime(), dto.getEndTime())
.in(PlatElder::getOrgId, dto.getOrgIds()));
//今日退住
long checkOutNumber = platElderService.count(new QueryWrapper<PlatElder>().lambda()
.between(PlatElder::getCheckOutTime, dto.getStartTime(), dto.getEndTime())
.in(PlatElder::getOrgId, dto.getOrgIds()));
//空闲床位
List<PlatSpace> spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getOrgId, dto.getOrgIds()));
List<String> spaceIds = spaces.stream().map(PlatSpace::getId).collect(Collectors.toList());
if(!spaceIds.isEmpty()){
long spareBedNumber = platBedService.count(new QueryWrapper<PlatBed>().lambda()
.eq(PlatBed::getStatus, PlatBedStatusEnum.BedStatusEnum.SPARE.getValue())
.in(PlatBed::getSpaceId, spaceIds));
vo.setSpareBedNumber(spareBedNumber);
}else {
vo.setSpareBedNumber(0L);
}
vo.setUnHandledNumber(unHandledNumber); vo.setUnHandledNumber(unHandledNumber);
vo.setElderNumber(elderNumber);
vo.setCheckInNumber(checkInNumber);
vo.setCheckOutNumber(checkOutNumber);
return vo;
}
@Override
public List<WorkStationInstitutionRoomVO> institutionList(WorkStationQueryDTO dto) {
List<PlatSpace> spaces = new ArrayList<>();
if(dto.getSpaceIds().isEmpty()){
//获取该账号的权限组织
PlatOrg param = new PlatOrg();
param.setType(PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue());
List<PlatOrg> orgs = platOrgService.belongToScopeList(param);
if(orgs.isEmpty()){
return new ArrayList<>();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getOrgId, dto.getOrgIds()));
if(spaces.isEmpty()){
return new ArrayList<>();
}
List<String> spaceIds = spaces.stream().map(PlatSpace::getId).collect(Collectors.toList());
dto.setSpaceIds(spaceIds);
}else {
spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getId, dto.getSpaceIds()));
}
Map<String, PlatSpace> platSpaceMap = spaces.stream().collect(Collectors.toMap(PlatSpace::getId, Function.identity()));
List<String> elderIdList = new ArrayList<>();
List<PlatAlarmRecord> alarmRecords = platAlarmRecordService.list(
new QueryWrapper<PlatAlarmRecord>().lambda()
.eq(StringUtil.isNotEmpty(dto.getAlarmType()), PlatAlarmRecord::getAlarmType, dto.getAlarmType())
.eq(PlatAlarmRecord::getStatus, PlatAlarmRecordEnum.AlarmRecordStatusEnum.UNHANDLED.getValue())
.in(PlatAlarmRecord::getOrgId, dto.getOrgIds())
);
List<String> elderIds = alarmRecords.stream().filter(t->StringUtil.isNotEmpty(t.getElderIds()))
.map(PlatAlarmRecord::getElderIds).collect(Collectors.toList());
if(elderIds.isEmpty()){
return new ArrayList<>();
}
elderIds.forEach(e->{
elderIdList.addAll(Arrays.asList(e.split(",")));
});
List<WorkStationInstitutionRoomVO> roomVOList = platRoomService.workStationList(dto);
if(roomVOList.isEmpty()){
return new ArrayList<>();
}
List<String> roomIds = roomVOList.stream().map(WorkStationInstitutionRoomVO::getRoomId).collect(Collectors.toList());
//获取床号及长者
return null;
}
@Override
public WorkStationHomeStatisticsVO homeStatistics(WorkStationQueryDTO dto) {
return null; return null;
} }
......
package com.makeit.utils;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class AlarmRedisDTO implements Serializable {
private static final long serialVersionUID = -1136022758968665492L;
/**
* 雷达第一次记录时间/进入空间时间
*/
private Long startLong;
/**
* 是否告警过 0-未告警 1-告警了
*/
private String alarm = "0";
private Date start;
}
...@@ -23,5 +23,5 @@ public class PlatRoomPanoramaVO{ ...@@ -23,5 +23,5 @@ public class PlatRoomPanoramaVO{
@ApiModelProperty("空间id") @ApiModelProperty("空间id")
private String spaceId; private String spaceId;
private List<PlatRoomVO> list; private List<PlatRoomVO> children;
} }
...@@ -27,5 +27,5 @@ public class PlatSpaceAndRoomVO extends BaseIdDTO { ...@@ -27,5 +27,5 @@ public class PlatSpaceAndRoomVO extends BaseIdDTO {
private String type; private String type;
@ApiModelProperty("子集") @ApiModelProperty("子集")
private List<PlatSpaceAndRoomVO> child; private List<PlatSpaceAndRoomVO> children;
} }
package com.makeit.vo.platform.workstation;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationRoomVO对象")
public class WorkStationBedVO {
@ApiModelProperty(value = "床号")
private String bedName;
@ApiModelProperty(value = "床id")
private String bedId;
@ApiModelProperty(value = "状态")
private String stauts;
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "长者姓名")
private String elderName;
@ApiModelProperty(value = "长者状态")
private String elderStatus;
@ApiModelProperty(value = "告警类型")
private List<String> alarmTypes;
}
...@@ -11,9 +11,15 @@ import lombok.Data; ...@@ -11,9 +11,15 @@ import lombok.Data;
* @version 2023/9/13 * @version 2023/9/13
*/ */
@Data @Data
@ApiModel("WorkStationStatisticsVO对象") @ApiModel("WorkStationHomeStatisticsVO对象")
public class WorkStationStatisticsVO { public class WorkStationHomeStatisticsVO {
@ApiModelProperty(value = "待处理告警") @ApiModelProperty(value = "待处理告警")
private Long unHandledNumber; private Long unHandledNumber;
@ApiModelProperty(value = "今日告警数")
private Long alarmNumber;
@ApiModelProperty(value = "今日已处理告警数")
private Long handledNumber;
@ApiModelProperty(value = "长者数")
private Long elderNumber;
} }
package com.makeit.vo.platform.workstation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationInstitutionRoomVO对象")
public class WorkStationInstitutionRoomVO {
@ApiModelProperty(value = "房间路径id")
private String spacePath;
@ApiModelProperty(value = "房间id")
private String roomId;
@ApiModelProperty(value = "房间路径")
private String pathName;
private List<WorkStationBedVO> list;
}
package com.makeit.vo.platform.workstation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Controller
*
* @author zm
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationInstitutionStatisticsVO对象")
public class WorkStationInstitutionStatisticsVO {
@ApiModelProperty(value = "待处理告警")
private Long unHandledNumber;
@ApiModelProperty(value = "在住长者")
private Long elderNumber;
@ApiModelProperty(value = "空闲床位")
private Long spareBedNumber;
@ApiModelProperty(value = "今日入住")
private Long checkInNumber;
@ApiModelProperty(value = "今日退住")
private Long checkOutNumber;
}
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
AND FIND_IN_SET(#{dto.id},pm.space_path) AND FIND_IN_SET(#{dto.id},pm.space_path)
</if> </if>
<if test="dto.status != null and dto.status != ''"> <if test="dto.status != null and dto.status != ''">
AND pb.statue = #{dto.status} AND pb.status = #{dto.status}
</if> </if>
</where> </where>
</select> </select>
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
pb.del_flag = 0 pb.del_flag = 0
AND pm.id = #{dto.id} AND pm.id = #{dto.id}
<if test="dto.status != null and dto.status != ''"> <if test="dto.status != null and dto.status != ''">
AND pb.statue = #{dto.status} AND pb.status = #{dto.status}
</if> </if>
</where> </where>
</select> </select>
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
SELECT count(*) from plat_bed pb LEFT JOIN plat_space ps ON pb.space_id = ps.id SELECT count(*) from plat_bed pb LEFT JOIN plat_space ps ON pb.space_id = ps.id
<where> <where>
ps.del_flag = 0 ps.del_flag = 0
<if test="orgIds != null and orgIds != '' "> <if test="orgIds != null and orgIds.size() > 0 ">
AND ps.org_id IN AND ps.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index=""> <foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item} #{item}
......
...@@ -11,6 +11,25 @@ ...@@ -11,6 +11,25 @@
WHERE pr.del_flag = 0 WHERE pr.del_flag = 0
</select> </select>
<select id="workStationList" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO">
SELECT pm.id as roomId,pm.name as roomName ,pm.space_path FROM plat_room pm
LEFT JOIN plat_space ps ON pm.space_id = ps.id
LEFT JOIN plat_bed pb ON pb.room_id = pm.id
LEFT JOIN plat_elder pe ON pe.bed_id = pb.id
<where>
pm.del_flag = 0
<if test="dto.elderName != null and dto.elderName != ''">
AND pe.naem LIKE CONCAT('%',#{dto.elderName},'%')
</if>
<if test="dto.spaceIds != null and dto.spaceIds.size()>0 ">
AND pm.space_id IN
<foreach collection="dto.spaceIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>
...@@ -147,6 +147,7 @@ tenant: ...@@ -147,6 +147,7 @@ tenant:
- plat_tenant_menu - plat_tenant_menu
- plat_user - plat_user
- plat_menu - plat_menu
- plat_day_duration_record
rsa: rsa:
......
...@@ -64,7 +64,7 @@ public class IotTest { ...@@ -64,7 +64,7 @@ public class IotTest {
@Test @Test
void getDeviceLogByTimeRange() { void getDeviceLogByTimeRange() {
iotProductDeviceService.getDeviceLogByTimeRange("1701127702523473920",100,"2023-09-11 00:00:00","2023-09-11 23:59:00"); iotProductDeviceService.getDeviceLogByTimeRange("1701127702523473920", "reportProperty", 100, "2023-09-12 00:00:00", "2023-09-12 23:59:00");
} }
@Test @Test
...@@ -74,6 +74,6 @@ public class IotTest { ...@@ -74,6 +74,6 @@ public class IotTest {
@Test @Test
void updateIotOrgInfo() { void updateIotOrgInfo() {
iotOrgService.updateIotOrgInfo("1698964909267415040","lxl2234"); iotOrgService.updateIotOrgInfo("1698964909267415040", "lxl2234");
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment