Commit 7e7df2c5 by lzy

解冲突

parents baef3ddd 371e4185
Showing with 1369 additions and 187 deletions
......@@ -45,8 +45,8 @@ CREATE TABLE `plat_elder`
org_path varchar(64) NULL COMMENT '组织路径',
`remark` varchar(1024) DEFAULT NULL COMMENT '备注',
avatar varchar(64) NULL COMMENT '头像文件id',
check_in_time datetime DEFAULT NULL COMMENT '入住时间',
check_out_time datetime DEFAULT NULL COMMENT '退住时间',
check_in_time datetime DEFAULT NULL COMMENT '入住时间',
check_out_time datetime DEFAULT NULL COMMENT '退住时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
......@@ -270,12 +270,12 @@ CREATE TABLE `plat_device_other`
installation varchar(64) NULL COMMENT '设备安装方式',
indicator_light varchar(64) NULL COMMENT '开关指示灯',
attribute varchar(3000) NULL COMMENT '设备属性json',
wifi_name varchar(200) NOT NULL COMMENT 'wifi名称',
wifi_password varchar(200) NOT NULL COMMENT 'wifi密码',
protocol_address varchar(100) NOT NULL COMMENT '协议地址',
protocol_port varchar(100) NOT NULL COMMENT '协议端口',
protocol_account varchar(200) NOT NULL COMMENT '协议账号',
protocol_password varchar(200) NOT NULL COMMENT '协议密码',
wifi_name varchar(200) NULL COMMENT 'wifi名称',
wifi_password varchar(200) NULL COMMENT 'wifi密码',
protocol_address varchar(100) NULL COMMENT '协议地址',
protocol_port varchar(100) NULL COMMENT '协议端口',
protocol_account varchar(200) NULL COMMENT '协议账号',
protocol_password varchar(200) NULL COMMENT '协议密码',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
......@@ -287,39 +287,59 @@ CREATE TABLE `plat_device_other`
DEFAULT CHARSET = utf8mb4 COMMENT ='设备其他信息';
CREATE TABLE `plat_elder_sleep` (
`id` VARCHAR ( 64 ) NOT NULL COMMENT 'id',
`elder_id` VARCHAR ( 64 ) NOT NULL COMMENT '长者id',
`start_sleep` datetime DEFAULT NULL COMMENT '入睡时间',
`end_sleep` datetime DEFAULT NULL COMMENT '起床时间',
`current_date` VARCHAR ( 64 ) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`sleep_record` text DEFAULT NULL COMMENT '睡眠记录 区分时间段记录 [{"sleepType":"","startTime":"","endTime":""},{}]',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR ( 1 ) DEFAULT NULL COMMENT '删除标识',
`create_by` VARCHAR ( 64 ) NOT NULL COMMENT '创建人',
`update_by` VARCHAR ( 64 ) NOT NULL COMMENT '更新人',
`tenant_id` VARCHAR ( 64 ) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY ( `id` ),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉记录';
CREATE TABLE `plat_elder_sleep`
(
`id` VARCHAR(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
`start_sleep` datetime DEFAULT NULL COMMENT '入睡时间',
`end_sleep` datetime DEFAULT NULL COMMENT '起床时间',
`current_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`sleep_record` text DEFAULT NULL COMMENT '睡眠记录 区分时间段记录 [{"sleepType":"","startTime":"","endTime":""},{}]',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`create_by` VARCHAR(64) NOT NULL COMMENT '创建人',
`update_by` VARCHAR(64) NOT NULL COMMENT '更新人',
`tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = INNODB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉记录';
CREATE TABLE `plat_elder_sleep_analysis` (
`id` VARCHAR ( 64 ) NOT NULL COMMENT 'id',
`elder_id` VARCHAR ( 64 ) NOT NULL COMMENT '长者id',
`sleep_score` VARCHAR ( 64 ) DEFAULT NULL COMMENT '睡眠评分',
`sleep_result` VARCHAR ( 64 ) DEFAULT NULL COMMENT '睡眠结果',
`sleep_time` VARCHAR ( 64 ) DEFAULT NULL COMMENT '睡眠时长',
`rest_time` VARCHAR ( 64 ) DEFAULT NULL COMMENT '休息时长',
`sleep_evaluate` VARCHAR ( 64 ) DEFAULT NULL COMMENT '评价',
`current_date` VARCHAR ( 64 ) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR ( 1 ) DEFAULT NULL COMMENT '删除标识',
`create_by` VARCHAR ( 64 ) NOT NULL COMMENT '创建人',
`update_by` VARCHAR ( 64 ) NOT NULL COMMENT '更新人',
`tenant_id` VARCHAR ( 64 ) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY ( `id` ),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉分析';
CREATE TABLE `plat_elder_sleep_analysis`
(
`id` VARCHAR(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
`sleep_score` VARCHAR(64) DEFAULT NULL COMMENT '睡眠评分',
`sleep_result` VARCHAR(64) DEFAULT NULL COMMENT '睡眠结果',
`sleep_time` VARCHAR(64) DEFAULT NULL COMMENT '睡眠时长',
`rest_time` VARCHAR(64) DEFAULT NULL COMMENT '休息时长',
`sleep_evaluate` VARCHAR(64) DEFAULT NULL COMMENT '评价',
`current_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`create_by` VARCHAR(64) NOT NULL COMMENT '创建人',
`update_by` VARCHAR(64) NOT NULL COMMENT '更新人',
`tenant_id` VARCHAR(64) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`),
KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = INNODB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉分析';
CREATE TABLE `plat_elder_report_month`
(
`id` varchar(64) NOT NULL COMMENT 'id',
day date NOT NULL COMMENT '日期',
sleep_result varchar(64) NOT 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 char(1) not null comment ' 删除标志 0否 1是 ',
`tenant_id` varchar(64) DEFAULT NULL COMMENT ' 租户id ',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='长者月报';
......@@ -453,4 +453,21 @@ CREATE TABLE `plafform_setting` (
) 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='每天停留时长记录';
......@@ -6,7 +6,7 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService;
......@@ -42,8 +42,8 @@ public class SaasDeviceController {
@ApiOperation("设备编辑")
@PostMapping("edit")
@TenantIdIgnore
public ApiResponseEntity<Void> edit(@RequestBody PlatDeviceEditDTO dto) {
platDeviceService.edit(dto);
public ApiResponseEntity<Void> edit(@RequestBody PlatDeviceEditSaasDTO dto) {
platDeviceService.saasEdit(dto);
return ApiResponseUtils.success();
}
......
package com.makeit.controller.saas;
import com.alibaba.fastjson.JSONObject;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
......@@ -10,8 +11,11 @@ import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action;
import com.makeit.module.admin.dto.saas.SaasUserDTOVO;
import com.makeit.module.admin.dto.saas.SaasUserQueryDTO;
import com.makeit.service.saas.SaasUserService;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.module.admin.vo.saas.SaasUserLoginVO;
import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.user.ThreadLocalUserUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -130,5 +134,18 @@ public class SaasUserController {
return ApiResponseUtils.success(saasUserService.getUserVO());
}
@ApiOperation("获取当前登录用户的用户信息2")
@PostMapping("getUserVOFromTH")
public ApiResponseEntity<JSONObject> getUserInfo2(){
PlatUserLoginVO sysUserLoginVO = ThreadLocalUserUtil.getTntUser();
WechatUserInfo wechatUserInfo = ThreadLocalUserUtil.getWechatUser();
SaasUserLoginVO saasUser = ThreadLocalUserUtil.getSaasUser();
JSONObject jsonObject = new JSONObject();
jsonObject.put("sysUserLoginVO",sysUserLoginVO);
jsonObject.put("wechatUserInfo",wechatUserInfo);
jsonObject.put("saasUser",saasUser);
return ApiResponseUtils.success(jsonObject);
}
}
......@@ -99,7 +99,7 @@ public interface BaseEnum {
static BaseEnum getByValue(Class<? extends BaseEnum> emClazz, String value) {
BaseEnum[] em = emClazz.getEnumConstants();
for (BaseEnum e : em) {
if (e.getValue().equals(value)) {
if (StringUtils.equals(e.getValue(),value)) {
return e;
}
}
......
......@@ -34,8 +34,9 @@ public class TenantIdUtil {
public static String getTenantId() {
List<Supplier<String>> supplierList = Arrays.asList(
//TenantIdUtil::getFromThreadLocal,
TenantIdUtil::getFromHeader//,
TenantIdUtil::getFromThreadLocal,
TenantIdUtil::getFromHeader
);
for (Supplier<String> supplier : supplierList) {
......
......@@ -12,7 +12,9 @@ import com.makeit.module.iot.vo.IotPagerResult;
import com.makeit.module.iot.vo.ResponseMessage;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
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.StreamUtil;
import com.makeit.utils.old.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
......@@ -23,6 +25,7 @@ import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
......@@ -95,7 +98,7 @@ public class IotProductDeviceService extends IotCommonService {
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) {
return null;
}
......@@ -110,9 +113,9 @@ public class IotProductDeviceService extends IotCommonService {
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) {
return null;
}
......@@ -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, "event", 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, "event", pageSize, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogEntityList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class));
return deviceInfoContentSpaceList;
}
/**
* 根据类型查询设备日志
......@@ -171,13 +194,14 @@ 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);
List<Term> terms = Lists.newArrayList();
Term term1 = Term.builder()
.column("timestamp")
.termType("gte")
.type(Term.Type.or)
.type(Term.Type.and)
.value(startTime)
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
......@@ -190,6 +214,15 @@ public class IotProductDeviceService extends IotCommonService {
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
.build();
Term term3 = Term.builder()
.column("type")
.termType("eq")
.type(Term.Type.or)
.value(typeValue)
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
.build();
terms.add(term3);
terms.add(term1);
terms.add(term2);
iotQueryParam.setTerms(terms);
......@@ -225,7 +258,7 @@ public class IotProductDeviceService extends IotCommonService {
List<Term> terms = Lists.newArrayList();
Term term = Term.builder()
.column("type")
.termType("btw")
.termType("eq")
.type(Term.Type.or)
.value(typeValue)
.terms(Lists.newArrayList())
......
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;
@Getter
public enum SendTypeEnum implements BaseEnum {
//1-短信 2-邮件 3-语音短信 4-云龄工单 5-晶奇工单 6-子女端小程序
SMS("alarm.sendType.sms"),
MAIL("alarm.sendType.mail"),
VOICE_SMS("alarm.sendType.voiceSms"),
SMS("alarm.notifyChannel.sms"),
MAIL("alarm.notifyChannel.mail"),
VOICE_SMS("alarm.notifyChannel.voiceMessage"),
//todo 加字典
YUNLING("alarm.sendType.yunling"),
JINGQI("alarm.sendType.jingqi"),
CHILD_WECHAT("alarm.sendType.childWechat")
......
......@@ -5,11 +5,8 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Data
@Builder
......@@ -30,8 +27,6 @@ public class MsgSendDTO {
*/
private String[] param;
private String sendContent;
public void setParam(String... param) {
this.param = param;
}
......
......@@ -80,7 +80,7 @@ public class ThreadLocalUserUtil {
WechatUserInfo wechatUserInfo = THREAD_LOCAL_WECHAT_USER.get();
if (wechatUserInfo == null) {
wechatUserInfo = TokenUtil.getWechatUserDetail();
THREAD_LOCAL_WECHAT_USER.set(wechatUserInfo);
//THREAD_LOCAL_WECHAT_USER.set(wechatUserInfo);
}
return wechatUserInfo;
}
......
......@@ -63,7 +63,9 @@ public class SwaggerPlatformConfig {
ApiSelectorBuilder builder = docket.select();
//api过滤
builder = builder.apis(
RequestHandlerSelectors.basePackage("com.makeit.module.controller.wechat")
RequestHandlerSelectors.basePackage("com.makeit.module.controller")
.and(RequestHandlerSelectors.basePackage("com.makeit.module.controller.wechat").negate())
.and(RequestHandlerSelectors.basePackage("com.makeit.module.controller.children").negate())
);
return builder.build();
}
......
......@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "子女端-组织")
@Api(tags = "子女端小程序-组织")
@RestController
@RequestMapping("/children/plat/org")
public class PlatOrgChildrenController {
......
......@@ -3,7 +3,9 @@ package com.makeit.module.controller.dataScreen;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.module.system.entity.ChinaArea;
import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -64,4 +66,11 @@ public class DataScreenController {
public ApiResponseEntity<List<PlatMapStatisticsVO>> mapStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.mapStatistics(dto));
}
@ApiOperation("地图区域")
@PostMapping("mapList")
public ApiResponseEntity<List<ChinaAreaVO>> mapList(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.mapList(dto));
}
}
......@@ -61,7 +61,7 @@ public class PlatDeviceController {
@Autowired
private IotSyncTask iotSyncTask;
@ApiOperation("详情")
@ApiOperation("手动同步")
@PostMapping("iotSyncTask")
@AuthIgnore
@TenantIdIgnore
......
......@@ -60,7 +60,5 @@ public class PlatElderRealTimeController {
}
//TODO ywc 少一个坐标
}
......@@ -2,12 +2,15 @@ package com.makeit.module.controller.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.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.*;
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;
......@@ -28,6 +31,9 @@ import java.util.List;
@RequestMapping("/plat/elder/report/day")
public class PlatElderReportDayController {
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
@ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
......@@ -61,7 +67,7 @@ public class PlatElderReportDayController {
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<List<PlatElderRealTimeHeartRespiratoryVO>> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportDayService.heartRespiratory(platElderIdDTO));
}
@ApiOperation("行为异常记录")
......@@ -79,7 +85,7 @@ public class PlatElderReportDayController {
@ApiOperation("坐标记录")
@PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
return ApiResponseUtils.success(platElderDayReportDayService.coordinateList(platElderIdDTO));
}
@ApiOperation("行为辐射")
......
......@@ -2,7 +2,7 @@ package com.makeit.module.controller.elder;
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.PlatElderReportMonthVO;
import com.makeit.vo.platform.elder.report.day.PlatElderSleepEvaluationVO;
......@@ -29,26 +29,26 @@ public class PlatElderReportMonthController {
@ApiOperation("综合评价")
@PostMapping("comprehensiveEvaluation")
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("月报表")
@PostMapping("reportMonth")
public ApiResponseEntity<PlatElderReportMonthVO> reportMonth(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderReportMonthVO> reportMonth(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
......
......@@ -2,14 +2,17 @@ package com.makeit.module.controller.elder;
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.report.week.PlatElderComprehensiveEvaluationVO;
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.PlatElderSleepDiagramWeekVO;
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;
......@@ -30,69 +33,72 @@ import java.util.List;
@RequestMapping("/plat/elder/report/week")
public class PlatElderReportWeekController {
@Autowired
private PlatElderDayReportWeekService platElderDayReportWeekService;
@ApiOperation("综合评价")
@PostMapping("comprehensiveEvaluation")
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderComprehensiveEvaluationVO> comprehensiveEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("睡眠评价")
@PostMapping("sleepEvaluation")
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderSleepEvaluationVO> sleepEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("睡眠图表")
@PostMapping("sleepDiagram")
public ApiResponseEntity<List<PlatElderSleepDiagramWeekVO>> sleepDiagram(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderSleepDiagramWeekVO>> sleepDiagram(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率呼吸评价")
@PostMapping("heartRespiratoryEvaluation")
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderHeartRespiratoryEvaluationVO> heartRespiratoryEvaluation(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率异常记录")
@PostMapping("heartExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> heartExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("呼吸率异常记录")
@PostMapping("respiratoryExceptionRecordList")
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderHeartRespiratoryEvaluationRecordVO>> respiratoryExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("心率呼吸率")
@PostMapping("heartRespiratory")
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<PlatElderRealTimeHeartRespiratoryWeekVO> heartRespiratory(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("行为异常记录")
@PostMapping("behaviorExceptionRecordList")
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderBehaviorExceptionRecordVO>> behaviorExceptionRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("跌倒记录")
@PostMapping("failRecordList")
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<String>> failRecordList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return null;
}
@ApiOperation("坐标记录")
@PostMapping("coordinateList")
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderIdDTO platElderIdDTO) {
return null;
public ApiResponseEntity<List<PlatElderCoordinateVO>> coordinateList(@RequestBody PlatElderReportDTO platElderIdDTO) {
return ApiResponseUtils.success(platElderDayReportWeekService.coordinateList(platElderIdDTO));
}
@ApiOperation("行为辐射")
@PostMapping("behaviorDistribution")
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderIdDTO platElderIdDTO) {
public ApiResponseEntity<List<PlatElderBehaviorDistributionVO>> behaviorDistribution(@RequestBody PlatElderReportDTO platElderIdDTO) {
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;
}
}
......@@ -4,8 +4,7 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.service.platform.workstation.WorkStationService;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionStatisticsVO;
import com.makeit.vo.platform.workstation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -35,4 +34,16 @@ public class WorkStationController {
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));
}
@ApiOperation("居家-列表")
@PostMapping("homeList")
public ApiResponseEntity<List<WorkStationHomeBedVO>> homeList(@RequestBody WorkStationQueryDTO dto) {
return ApiResponseUtils.success(workStationService.homeList(dto));
}
}
......@@ -25,4 +25,6 @@ public class PlatAlarmCheckDTO {
private JSONObject properties;
//PlatAlarmRecord.remark
private String remark;
}
package com.makeit.dto.platform.alarm;
import com.makeit.common.dto.BaseTenantDTO;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.global.validator.DictEnum;
import io.swagger.annotations.ApiModel;
......@@ -47,13 +46,13 @@ public class PlatAlarmConfigDTOVO extends BaseTenantDTO {
@ApiModelProperty(value = "规则配置")
private String ruleConfig;
@ApiModelProperty(value = "心率异常")
@ApiModelProperty(value = "呼吸异常")
private PlatAlarmConfigRespiratoryDTOVO respiratory;
@ApiModelProperty(value = "心率异常")
private PlatAlarmConfigHeartDTOVO heart;
@ApiModelProperty(value = "心率异常")
@ApiModelProperty(value = "行为异常")
private PlatAlarmConfigBehaviorDTOVO behavior;
@ApiModelProperty(value = "内容")
......
......@@ -28,5 +28,7 @@ public class PlatDataScreenQueryDTO {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("结束时间")
private LocalDateTime endTime;
@ApiModelProperty("类型 1-居家 2-机构")
private String type;
}
......@@ -15,10 +15,13 @@ import lombok.EqualsAndHashCode;
*/
@Data
@ApiModel(value = "Elder对象", description = "长者基本信息")
public class PlatElderIdDTO{
public class PlatElderIdDTO {
@ApiModelProperty(value = "长者id")
private String elderId;
@ApiModelProperty(value = "设备id")
private String deviceId;
}
......@@ -38,4 +38,7 @@ public class WorkStationQueryDTO {
@ApiModelProperty("告警类型")
private String alarmType;
@ApiModelProperty("老人ids")
private List<String> elderIds;
}
package com.makeit.dto.saas.device;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
/**
* <p>
* 设备
* </p>
*
* @author eugene young
* @since 2023-09-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PlatDevice对象", description = "设备")
public class PlatDeviceEditSaasDTO extends BaseTenantDTO {
@NotBlank(message = "设备名称不能为空")
@Size(max = 50, message = "设备名称最长为50个字符")
@ApiModelProperty(value = "设备名称")
private String name;
@ApiModelProperty(value = "设备安装方式")
private String installation;
@ApiModelProperty(value = "开关指示灯")
private String indicatorLight;
@ApiModelProperty(value = "设备属性json")
private String attribute;
@ApiModelProperty(value = "说明")
private String description;
@ApiModelProperty(value = "有效期-开始")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startDate;
@ApiModelProperty(value = "有效期-结束")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endDate;
}
......@@ -74,6 +74,8 @@ public class PlatAlarmRecord extends BaseBusEntity {
*/
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
package com.makeit.entity.platform.device;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.module.iot.enums.DeviceState;
import io.swagger.annotations.ApiModel;
......@@ -72,7 +73,10 @@ public class PlatDevice extends BaseBusEntity {
@ApiModelProperty(value = "设备类型 0-呼吸心率雷达 1-空间人体雷达 2-跌倒检测雷达")
private String category;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endDate;
......
......@@ -3,6 +3,7 @@ package com.makeit.entity.platform.elder;
import com.baomidou.mybatisplus.annotation.TableField;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.typehandler.ListStringJsonTypeHandler;
import com.makeit.typehandler.ElderListStringJsonTypeHandler;
import com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -40,7 +41,7 @@ public class PlatElderSleep extends BaseBusEntity {
private String currentDate;
@ApiModelProperty(value = "睡眠记录 区分时间段记录 [{\"sleepType\":\"\",\"startTime\":\"\",\"endTime\":\"\"},{}]")
@TableField(typeHandler = ListStringJsonTypeHandler.class)
@TableField(typeHandler = ElderListStringJsonTypeHandler.class)
private List<PlatSleepRangeVO> sleepRecord;
......
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> {
}
......@@ -2,8 +2,11 @@ package com.makeit.mapper.platform.space;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.workstation.WorkStationHomeBedVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -19,4 +22,8 @@ public interface PlatBedMapper extends BaseMapper<PlatBed> {
List<PlatBedPanoramaVO> selectByRoomIdAndStatus(@Param("dto")PlatBedPanoramaDTO dto);
long countByOrdIdsAndType(@Param("orgIds") List<String> orgIds, @Param("orgType")String orgType);
List<WorkStationInstitutionBedVO> selectByRoomIds(@Param("roomIds")List<String> roomIds);
List<WorkStationHomeBedVO> selectByCondition(WorkStationQueryDTO dto);
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.dto.platform.space.PlatSpaceQueryDTO;
import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -15,4 +16,6 @@ import java.util.List;
public interface PlatSpaceMapper extends BaseMapper<PlatSpace> {
List<PlatSpaceAndRoomVO> spaceListExcludeLast();
List<PlatSpace> listChild(@Param("spaceIds") List<String> spaceIds);
}
......@@ -54,7 +54,7 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
*/
void noticeDeviceAlarm(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord);
PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO);
PlatAlarmRecord convertToPlatAlarmRecord(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;
import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigBehaviorDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
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.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.redis.RedisConst;
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.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
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.Date;
import java.util.List;
import java.util.stream.Collectors;
@Component
public class BehaviorAlarm implements IAlarm{
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private PlatDayDurationRecordService platDayDurationRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR;
......@@ -35,6 +50,9 @@ public class BehaviorAlarm implements IAlarm{
/**
* 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置)
* 取前七天的日最长时间,然后取中位数
* 前七天:没有满足七条记录则跳过,如果七条没都包含长者则跳过
* 记录的保存和缓存读取
* @param platAlarmCheckDTO
*/
@Override
......@@ -49,36 +67,87 @@ public class BehaviorAlarm implements IAlarm{
}
String personState = Convert.toStr(properties.get("personState"));
PlatAlarmConfigBehaviorDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigBehaviorDTOVO.class);
Integer duration = ruleConfig.getDuration();
Integer duration = ruleConfig.getDuration();//分钟
duration = duration*60;
//todo duration+平均停留时长
List<String> personStateList = Arrays.asList("1", "2", "3");
//有人
//计数
long endLong = new Date().getTime();
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
Date now = new Date();
long endLong = now.getTime();
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if(alarmRedisDTO==null){
alarmRedisDTO= new AlarmRedisDTO();
}
//有人
if (personStateList.contains(personState)) {
long count = endLong - startLong;
//第一次进入空间
Long startLong = alarmRedisDTO.getStartLong();
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;
}
if (count >= duration) {
long count = endLong - startLong;
//进入空间时间满足告警时长,判断是否已经告警过了
if (count/1000 >= duration && StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.NO.getValue())) {
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,startLong);
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,alarmRedisDTO);
}
}else {//没人
// 是否有第一次进入记录,有则保存db
Long startLong = alarmRedisDTO.getStartLong();
if(startLong==null){
return;
}
}else {
//
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,null);
//保存每次进入空间时长
saveDayDurationRecord(platAlarmCheckDTO,alarmRedisDTO);
RedisUtil.delete(RedisConst.ALARM_DEVICE_ID + deviceId);
}
}
private void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
Date now = new Date();
long endLong = now.getTime();
Long startLong = alarmRedisDTO.getStartLong();
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());
platDayDurationRecordService.saveOrUpdate(durationRecord);
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
//获取长者 空间信息
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("房间名");
PlatAlarmRecord platAlarmRecord =platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isEmpty(platElderList)){
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;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
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.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class BreathAlarm implements IAlarm{
......@@ -67,6 +72,12 @@ public class BreathAlarm implements IAlarm{
long count = endLong - startLong;
if (br > end || br < start) {
if (count >= duration) {
if(br>end){
platAlarmCheckDTO.setRemark("呼吸过速");
}
if(br < start){
platAlarmCheckDTO.setRemark("呼吸过缓");
}
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
......@@ -76,12 +87,27 @@ public class BreathAlarm implements IAlarm{
return;
}
/**
* [#长者姓名][#呼吸状态],请及时处理!
* @param platAlarmCheckDTO
*/
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111");
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
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{
param.add(platElder.getName());
param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
}
......
......@@ -7,17 +7,22 @@ import com.makeit.dto.platform.alarm.PlatAlarmConfigHeartDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
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.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class HeartAlarm implements IAlarm {
......@@ -58,6 +63,12 @@ public class HeartAlarm implements IAlarm {
long count = endLong - startLong;
if (hr > end || hr < start) {
if (count >= duration) {
if(hr>end){
platAlarmCheckDTO.setRemark("心率过速");
}
if(hr < start){
platAlarmCheckDTO.setRemark("心率过缓");
}
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
......@@ -70,8 +81,19 @@ public class HeartAlarm implements IAlarm {
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111");
PlatAlarmRecord platAlarmRecord =platAlarmRecordService. createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
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
@Transactional
@Override
//@TenantIdIgnore
public void copyForOrg(PlatOrg org) {
List<PlatAlarmConfig> configList = TenantIdUtil.execute(IdConst.DEFAULT_TENANT_ID, () -> list());
......@@ -190,20 +191,23 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
String[] split = orgPath.split(",");
configList.forEach(e -> {
e.setId(null);
TenantIdUtil.execute(org.getTenantId(),()->{
configList.forEach(e -> {
e.setTenantId(org.getTenantId());
e.setId(null);
for (int i = 1; i < split.length; i++) {
BiConsumer<PlatAlarmConfig, String> consumer = list.get(i - 1);
consumer.accept(e, split[i]);
}
for (int i = 1; i < split.length; i++) {
BiConsumer<PlatAlarmConfig, String> consumer = list.get(i - 1);
consumer.accept(e, split[i]);
}
e.setOrgId(org.getId());
e.setOrgPath(orgPath);
e.setOrgId(org.getId());
e.setOrgPath(orgPath);
});
});
saveBatch(configList);
saveBatch(configList);
});
alarmConfigUtil.putAll(configList);
}
......
......@@ -271,6 +271,12 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
Set<String> phoneSet = platUserList.stream().map(PlatUser::getMobile).collect(Collectors.toSet());
//发送消息
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
}
@Override
public PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO) {
public PlatAlarmRecord convertToPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
List<String> param = platAlarmCheckDTO.getParam();
List<PlatElder> elderList = platAlarmCheckDTO.getPlatElderList();
String elderNameJoin = elderList.stream().map(PlatElder::getName).collect(Collectors.joining(" "));
PlatAlarmRecord platAlarmRecord = new PlatAlarmRecord();
platAlarmRecord.setAlarmId(config.getId());
platAlarmRecord.setAlarmType(config.getAlarmType());
platAlarmRecord.setAlarmDate(new Date());
platAlarmRecord.setStatus("0");
//todo
platAlarmRecord.setContent(replaceParam(elderNameJoin, param));
platAlarmRecord.setStatus(CommonEnum.NO.getValue());
platAlarmRecord.setNoticeStatus(CommonEnum.NO.getValue());
//模板信息 替换参数
platAlarmRecord.setContent(replaceParam(config.getContent(), param));
platAlarmRecord.setOrgId(platDevice.getOrgId());
platAlarmRecord.setNotifyUser(config.getNotifyUser());
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> {
void saveOrg(PlatOrg platOrg);
List<PlatOrg> createOrgTree(List<PlatOrg> orgList);
List<PlatOrg> belongToScopeList(PlatOrg param);
}
......@@ -457,6 +457,27 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
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 有权限的组织
......
package com.makeit.service.platform.dataScreen;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*;
import java.util.List;
......@@ -23,4 +24,6 @@ public interface DataScreenService {
PlatBaseInfoStatisticsVO baseInfoStatistics(PlatDataScreenQueryDTO dto);
List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto);
List<ChinaAreaVO> mapList(PlatDataScreenQueryDTO dto);
}
......@@ -6,6 +6,7 @@ import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.PlatDeviceEditWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceSetupDTO;
import com.makeit.entity.platform.device.PlatDevice;
......@@ -49,4 +50,6 @@ public interface PlatDeviceService extends IService<PlatDevice> {
* @return
*/
PlatDeviceDetailDTO getDetailDTO(String deviceId);
void saasEdit(PlatDeviceEditSaasDTO dto);
}
......@@ -11,6 +11,7 @@ import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.saas.device.PlatDeviceEditSaasDTO;
import com.makeit.dto.wechat.device.PlatDeviceEditWechatDTO;
import com.makeit.dto.wechat.device.PlatDeviceSetupDTO;
import com.makeit.entity.platform.auth.PlatOrg;
......@@ -113,11 +114,14 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
public PlatDeviceViewVO view(String id) {
PlatDevice db = getById(id);
PlatDeviceViewVO vo = BeanDtoVoUtils.convert(db, PlatDeviceViewVO.class);
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getDeviceId, id));
PlatDeviceViewVO vo = BeanDtoVoUtils.convert(db, PlatDeviceViewVO.class);
BeanUtils.copyProperties(other, vo);
if (other != null) {
BeanUtils.copyProperties(other, vo);
}
vo.setId(db.getId());
......@@ -138,11 +142,15 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
other = new PlatDeviceOther();
}
String otherId = other.getId();
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other);
other.setId(otherId);
other.setDeviceId(id);
other.setOriDeviceId(db.getOriDeviceId());
updateById(db);
......@@ -165,11 +173,15 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
other = new PlatDeviceOther();
}
String otherId = other.getId();
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other);
other.setId(otherId);
other.setDeviceId(id);
other.setOriDeviceId(db.getOriDeviceId());
updateById(db);
......@@ -187,6 +199,31 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
return PageUtil.toPageVO(devicePage);
}
@Override
public void saasEdit(PlatDeviceEditSaasDTO dto) {
PlatDevice db = getById(dto.getId());
String id = db.getId();
PlatDeviceOther other = platDeviceOtherService.getOne(new QueryWrapper<PlatDeviceOther>().lambda()
.eq(PlatDeviceOther::getDeviceId, db.getId()));
if (other == null) {
other = new PlatDeviceOther();
}
BeanUtils.copyProperties(dto, db);
db.setId(id);
BeanUtils.copyProperties(dto, other);
other.setDeviceId(id);
updateById(db);
deviceCacheUtil.put(db);
platDeviceOtherService.saveOrUpdate(other);
}
/**
* 设备信息
*
......
......@@ -2,10 +2,9 @@ package com.makeit.service.platform.elder;
import com.makeit.dto.platform.elder.PlatElderIdDTO;
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 java.time.LocalDateTime;
import java.util.List;
/**
......@@ -18,4 +17,10 @@ import java.util.List;
*/
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;
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.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
......@@ -18,6 +19,10 @@ import java.util.List;
*/
public interface PlatElderRealTimeService {
PlatDevice getBreathDevice(String elderId, String deviceId);
List<PlatDevice> getSpaceDevice(String elderId, String deviceId);
PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO);
PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO);
......
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.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;
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.PlatElderRealTimeService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.utils.data.convert.StreamUtil;
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.PlatElderRealTimeBodyVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
......@@ -20,6 +22,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -40,11 +43,44 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
private PlatElderService platElderService;
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
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) {
return null;
......@@ -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;
}
......@@ -71,7 +107,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override
public PlatElderRealTimeNowVO nowStatus(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId());
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeNowVO platElderRealTimeNowVO = new PlatElderRealTimeNowVO();
......@@ -90,7 +126,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override
public PlatElderRealTimeHeartRespiratoryVO heartRespiratory(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId());
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeHeartRespiratoryVO platElderRealTimeHeartRespiratoryVO = new PlatElderRealTimeHeartRespiratoryVO();
platElderRealTimeHeartRespiratoryVO.setTime(LocalDateTime.now());
......@@ -107,7 +143,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override
public PlatElderRealTimeBodyVO body(PlatElderIdDTO platElderIdDTO) {
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId());
DeviceInfoContentBreathe deviceInfoContentBreathe = getNowDataBreathe(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
PlatElderRealTimeBodyVO platElderRealTimeBodyVO = new PlatElderRealTimeBodyVO();
platElderRealTimeBodyVO.setTime(LocalDateTime.now());
......@@ -124,7 +160,7 @@ public class PlatElderRealTimeServiceImpl implements PlatElderRealTimeService {
@Override
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);
......
......@@ -508,6 +508,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
save(platElder);
if (StringUtils.isNotBlank(dto.getBedId())) {
checkInInternal(dto.getBedId());
}
}
@Override
......@@ -516,6 +520,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class));
PlatElder db = getById(dto.getId());
PlatElder platElder = BeanDtoVoUtils.convert(dto, PlatElder.class);
updateById(platElder);
......@@ -539,6 +545,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
platElderOtherInfoService.saveOrUpdate(otherInfo);
if (StringUtils.isNotBlank(dto.getBedId()) && StringUtils.isBlank(db.getBedId())) {
checkInInternal(dto.getBedId());
}
}
......@@ -610,6 +620,15 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
}
private void checkInInternal(String bedId) {
StatusDTO statusDTO = new StatusDTO();
statusDTO.setId(bedId);
statusDTO.setStatus(CommonEnum.NO.getValue());
platBedService.changeStatus(statusDTO);
}
//TODO ywc 可能要改床位表状态
@Transactional
@Override
......@@ -621,11 +640,7 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
updateById(db);
StatusDTO statusDTO = new StatusDTO();
statusDTO.setId(dto.getBedId());
statusDTO.setStatus(CommonEnum.NO.getValue());
platBedService.changeStatus(statusDTO);
checkInInternal(dto.getBedId());
}
......@@ -643,13 +658,15 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
}
String bedId = db.getBedId();
db.setSpaceId(null);
db.setStreetSpaceId(null);
db.setBuildingSpaceId(null);
db.setUnitSpaceId(null);
db.setFloorSpaceId(null);
db.setRoomId(null);
db.setBedId(null);
db.setBedId(bedId);
db.setSpacePath(null);
db.setCheckOutTime(LocalDateTime.now());
......@@ -659,7 +676,7 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
//TODO ywc 是否删除房间 及其校验没做
StatusDTO statusDTO = new StatusDTO();
statusDTO.setId(db.getBedId());
statusDTO.setId(bedId);
statusDTO.setStatus(CommonEnum.YES.getValue());
platBedService.changeStatus(statusDTO);
......
......@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDTO;
import com.makeit.dto.platform.space.*;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.workstation.WorkStationHomeBedVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO;
import java.util.List;
......@@ -59,4 +61,9 @@ public interface PlatBedService extends IService<PlatBed> {
List<PlatBedPanoramaVO> selectByRoomIdAndStatus(PlatBedPanoramaDTO dto);
List<PlatBed> list(PlatBedQueryDTO dto);
long countByOrdIds(List<String> orgIds);}
long countByOrdIds(List<String> orgIds);
List<WorkStationInstitutionBedVO> selectByRoomIds(List<String> roomIds);
List<WorkStationHomeBedVO> selectByCondition(WorkStationQueryDTO dto);
}
......@@ -56,4 +56,6 @@ public interface PlatSpaceService extends IService<PlatSpace> {
* @return
*/
List<PlatSpaceVO> treeByBed(PlatSpaceQueryDTO dto);
List<PlatSpace> listChild(List<String> spaceIds);
}
......@@ -7,6 +7,7 @@ import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.space.*;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
......@@ -15,12 +16,13 @@ import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.auth.PlatOrgEnum;
import com.makeit.exception.BusinessException;
import com.makeit.mapper.platform.space.PlatBedMapper;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService;
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.PlatBedPanoramaVO;
import com.makeit.vo.platform.workstation.WorkStationHomeBedVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO;
import jodd.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -141,9 +143,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
PlatBed bed = getById(dto.getId());
if (bed.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
// if (bed.getStatus().equals(dto.getStatus())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
// }
bed.setStatus(dto.getStatus());
updateById(bed);
......@@ -183,4 +185,15 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
@Override
public long countByOrdIds(List<String> orgIds) {
return baseMapper.countByOrdIdsAndType(orgIds, PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue());
}}
}
@Override
public List<WorkStationInstitutionBedVO> selectByRoomIds(List<String> roomIds) {
return baseMapper.selectByRoomIds(roomIds);
}
@Override
public List<WorkStationHomeBedVO> selectByCondition(WorkStationQueryDTO dto) {
return baseMapper.selectByCondition(dto);
}
}
......@@ -197,22 +197,30 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
}
private PlatSpaceVO childVo(PlatSpaceVO vo,Map<String,List<PlatSpaceVO>> map){
@Override
public List<PlatSpace> listChild(List<String> spaceIds) {
return baseMapper.listChild(spaceIds);
if(!map.containsKey(vo.getId())){
}
private PlatSpaceVO childVo(PlatSpaceVO vo,Map<String,List<PlatSpaceVO>> map) {
if (!map.containsKey(vo.getId())) {
return vo;
}
List<PlatSpaceVO> list = map.get(vo.getId());
List<PlatSpaceVO> listChild = new ArrayList<>();
for(PlatSpaceVO item:list){
this.childVo(item,map);
for (PlatSpaceVO item : list) {
this.childVo(item, map);
listChild.add(item);
}
vo.setChildren(listChild);
return vo;
}
private PlatSpaceVO child(PlatSpaceVO vo,Map<String,List<PlatSpace>> map){
if(!map.containsKey(vo.getId())){
......
......@@ -2,8 +2,7 @@ package com.makeit.service.platform.workstation;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO;
import com.makeit.vo.platform.workstation.WorkStationInstitutionStatisticsVO;
import com.makeit.vo.platform.workstation.*;
import java.util.List;
......@@ -18,4 +17,8 @@ public interface WorkStationService {
WorkStationInstitutionStatisticsVO institutionStatistics(WorkStationQueryDTO dto);
List<WorkStationInstitutionRoomVO> institutionList(WorkStationQueryDTO dto);
WorkStationHomeStatisticsVO homeStatistics(WorkStationQueryDTO dto);
List<WorkStationHomeBedVO> homeList(WorkStationQueryDTO dto);
}
/*
* Copyright (c) 2011-2021, baomidou (jobob@qq.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.makeit.typehandler;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.makeit.vo.platform.elder.report.day.PlatSleepRangeVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import java.io.IOException;
import java.util.List;
/**
* Jackson 实现 JSON 字段类型处理器
*
* @author hubin
* @since 2019-08-25
*/
@Slf4j
@MappedTypes({List.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class ElderListStringJsonTypeHandler extends AbstractJsonTypeHandler<List> {
private static ObjectMapper OBJECT_MAPPER;
@Override
protected List<PlatSleepRangeVO> parse(String json) {
try {
return getObjectMapper().readValue(json, new TypeReference<List<PlatSleepRangeVO>>() {
});
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
protected String toJson(List obj) {
try {
return getObjectMapper().writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public static ObjectMapper getObjectMapper() {
if (null == OBJECT_MAPPER) {
OBJECT_MAPPER = new ObjectMapper();
}
return OBJECT_MAPPER;
}
public static void setObjectMapper(ObjectMapper objectMapper) {
Assert.notNull(objectMapper, "ObjectMapper should not be null");
ElderListStringJsonTypeHandler.OBJECT_MAPPER = objectMapper;
}
}
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;
}
......@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.enums.redis.RedisConst;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
......@@ -21,7 +23,7 @@ public class DeviceCacheUtil implements ApplicationRunner {
private PlatDeviceService platDeviceService;
public List<PlatDevice> getAll() {
List<PlatDevice> list = platDeviceService.list(new LambdaQueryWrapper<PlatDevice>());
List<PlatDevice> list = platDeviceService.list(new LambdaQueryWrapper<PlatDevice>().eq(PlatDevice::getStatus,DeviceState.online.getValue()));
list.stream().forEach(vo -> {
put(vo);
});
......@@ -29,7 +31,11 @@ public class DeviceCacheUtil implements ApplicationRunner {
}
public void put(PlatDevice platDevice) {
RedisUtil.set(RedisConst.PLAT_IOT_DEVICE_PREFIX+platDevice.getOriDeviceId(), platDevice);
if(StringUtils.equals(platDevice.getStatus(),DeviceState.online.getValue())) {
RedisUtil.set(RedisConst.PLAT_IOT_DEVICE_PREFIX + platDevice.getOriDeviceId(), platDevice);
}else {
RedisUtil.delete(RedisConst.PLAT_IOT_DEVICE_PREFIX + platDevice.getOriDeviceId());
}
}
public PlatDevice get(String oriDeviceId) {
......
......@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* Controller
*
......@@ -20,4 +22,10 @@ public class PlatAlarmStatisticsListVo {
private String type;
@ApiModelProperty(value = "状态")
private String status;
@ApiModelProperty(value = "告警日期")
private String alarmDate;
@ApiModelProperty(value = "告警时间")
private String alarmTime;
@ApiModelProperty(value = "路径")
private String path;
}
......@@ -17,7 +17,7 @@ import java.util.List;
public class PlatAlarmStatisticsVO {
@ApiModelProperty(value = "累计告警")
private Long totla;
private Long total;
@ApiModelProperty(value = "已处理数")
private Long handledNumber;
@ApiModelProperty(value = "待处理数")
......
......@@ -17,7 +17,7 @@ import java.util.List;
public class PlatDeviceStatisticsVO {
@ApiModelProperty(value = "总数")
private Long totla;
private Long total;
@ApiModelProperty(value = "在线数")
private Long onlineNumber;
@ApiModelProperty(value = "故障数")
......
package com.makeit.vo.platform.workstation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* Controller
*
* @author zm
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationHomeBedVO对象")
public class WorkStationHomeBedVO {
@ApiModelProperty(value = "房间路径id")
private String spacePath;
@ApiModelProperty(value = "房间id")
private String roomId;
@ApiModelProperty(value = "房间名称")
private String roomName;
@ApiModelProperty(value = "房间路径")
private String pathName;
@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 = "设备id")
private String deviceId;
@ApiModelProperty(value = "长者状态")
private String elderStatus;
@ApiModelProperty("心率")
private Integer heartRate;
@ApiModelProperty("呼吸率")
private Integer respiratoryRate;
@ApiModelProperty(value = "告警类型")
private Map<String,List<String>> alarmTypeMap;
}
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("WorkStationHomeStatisticsVO对象")
public class WorkStationHomeStatisticsVO {
@ApiModelProperty(value = "待处理告警")
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 com.makeit.entity.platform.alarm.PlatAlarmRecord;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* Controller
......@@ -14,8 +14,8 @@ import java.util.List;
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationRoomVO对象")
public class WorkStationBedVO {
@ApiModel("WorkStationInstitutionBedVO对象")
public class WorkStationInstitutionBedVO {
@ApiModelProperty(value = "床号")
private String bedName;
......@@ -23,6 +23,9 @@ public class WorkStationBedVO {
@ApiModelProperty(value = "床id")
private String bedId;
@ApiModelProperty(value = "房间id")
private String roomId;
@ApiModelProperty(value = "状态")
private String stauts;
......@@ -32,9 +35,12 @@ public class WorkStationBedVO {
@ApiModelProperty(value = "长者姓名")
private String elderName;
@ApiModelProperty(value = "设备id")
private String deviceId;
@ApiModelProperty(value = "长者状态")
private String elderStatus;
@ApiModelProperty(value = "告警类型")
private List<String> alarmTypes;
private Map<String,List<String>> alarmTypeMap;
}
......@@ -13,17 +13,20 @@ import java.util.List;
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationRoomVO对象")
@ApiModel("WorkStationInstitutionRoomVO对象")
public class WorkStationInstitutionRoomVO {
@ApiModelProperty(value = "房间路径id")
private String path;
private String spacePath;
@ApiModelProperty(value = "房间id")
private String roomId;
@ApiModelProperty(value = "房间名称")
private String roomName;
@ApiModelProperty(value = "房间路径")
private String pathName;
private List<WorkStationBedVO> list;
private List<WorkStationInstitutionBedVO> list;
}
......@@ -11,7 +11,7 @@ import lombok.Data;
* @version 2023/9/13
*/
@Data
@ApiModel("WorkStationStatisticsVO对象")
@ApiModel("WorkStationInstitutionStatisticsVO对象")
public class WorkStationInstitutionStatisticsVO {
@ApiModelProperty(value = "待处理告警")
......
......@@ -14,7 +14,7 @@
AND FIND_IN_SET(#{dto.id},pm.space_path)
</if>
<if test="dto.status != null and dto.status != ''">
AND pb.statue = #{dto.status}
AND pb.status = #{dto.status}
</if>
</where>
</select>
......@@ -28,7 +28,7 @@
pb.del_flag = 0
AND pm.id = #{dto.id}
<if test="dto.status != null and dto.status != ''">
AND pb.statue = #{dto.status}
AND pb.status = #{dto.status}
</if>
</where>
</select>
......@@ -49,5 +49,49 @@
</where>
</select>
<select id="selectByRoomIds" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionBedVO">
SELECT pb.`name` as bedName, pb.id as bedId, pb.room_id , pe.id as elderId, pb.name as elderName, prbd.device_id
FROM plat_bed pb
LEFT JOIN plat_elder pe ON pe.bed_id = pb.id
LEFT JOIN plat_room_bed_device rpbd ON rpbd.bed_id = pb.id
<where>
pb.del_flag = 0 and pe.del_flag = 0 and rpbd.del_flag = 0
<if test="roomIds != null and roomIds.size() > 0 ">
AND pb.room_id IN
<foreach collection="roomIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
<select id="selectByCondition" resultType="com.makeit.vo.platform.workstation.WorkStationHomeBedVO">
SELECT pb.`name` as bedName, pb.id as bedId, pb.room_id , pe.id as elderId, pb.name as elderName, prbd.device_id,pm.id as roomId,pm.name as roomName ,pm.space_path
FROM plat_bed pb
LEFT JOIN plat_room pr ON pr.id = pb.room_id
LEFT JOIN plat_space ps ON ps.id = pr.space_id
LEFT JOIN plat_elder pe ON pe.bed_id = pb.id
LEFT JOIN plat_room_bed_device rpbd ON rpbd.bed_id = pb.id
<where>
pb.del_flag = 0 and pe.del_flag = 0 and rpbd.del_flag = 0 and pb.status = 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>
<if test="dto.elderIds != null and dto.elderIds.size()>0 ">
AND pe.id IN
<foreach collection="dto.elderIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
order by pr.room_id
</select>
</mapper>
......@@ -12,7 +12,7 @@
</select>
<select id="workStationList" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO">
SELECT pm.id,pm.name,pm.space_path FROM plat_room pm
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
......@@ -27,6 +27,13 @@
#{item}
</foreach>
</if>
<if test="dto.elderIds != null and dto.elderIds.size()>0 ">
AND pe.id IN
<foreach collection="dto.elderIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
group by pm.id
</where>
</select>
......
......@@ -8,6 +8,19 @@
WHERE ps.id in (SELECT parent_id FROM `plat_space` WHERE del_flag =0) and ps.del_flag = 0
</select>
<select id="listChild" resultType="com.makeit.entity.platform.space.PlatSpace">
SELECT id,name,parent_id,type,address,longitude,latitude,parent_path,tenant_id,org_id,attribute
FROM plat_space
<where>
del_flag = 0
<if test="spaceIds != null and spaceIds.size() > 0 ">
AND (
<foreach collection="spaceIds" item="item" separator="or" open="" close="" index="">
FIND_IN_SET(#{item},parent_path) OR id = #{item}
</foreach>
)
</if>
</where>
</select>
</mapper>
......@@ -83,6 +83,7 @@ public class PushCallback implements MqttCallback {
PlatDevice platDevice = deviceCacheUtil.get(deviceId);
List<PlatAlarmConfig> deviceAlarmConfigList = alarmConfigCacheUtil.getDeviceAlarmConfigMap(platDevice);
if (CollectionUtils.isEmpty(deviceAlarmConfigList)) {
logger.info("该设备没有告警配置:"+deviceId);
return;
}
for (PlatAlarmConfig config : deviceAlarmConfigList) {
......
server:
port: 8888
port: 10005
servlet:
encoding:
charset: UTF-8
......@@ -125,6 +125,10 @@ wx:
config:
appid: wx48720402e3fdbe0f #微信小程序的appid
secret: 2ebae648f45716e70c75b7d78d0660cc #微信小程序的Secret
# appid: wx48720402e3fdbe0f #微信小程序的appid
# secret: 2ebae648f45716e70c75b7d78d0660cc #微信小程序的Secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
......
......@@ -122,6 +122,10 @@ wx:
config:
appid: wx48720402e3fdbe0f #微信小程序的appid
secret: 2ebae648f45716e70c75b7d78d0660cc #微信小程序的Secret
# appid: wx48720402e3fdbe0f #微信小程序的appid
# secret: 2ebae648f45716e70c75b7d78d0660cc #微信小程序的Secret
token: #微信小程序消息服务器配置的token
aesKey: #微信小程序消息服务器配置的EncodingAESKey
msgDataFormat: JSON
......
......@@ -147,6 +147,7 @@ tenant:
- plat_tenant_menu
- plat_user
- plat_menu
- plat_day_duration_record
rsa:
......
......@@ -64,7 +64,7 @@ public class IotTest {
@Test
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
......@@ -74,6 +74,6 @@ public class IotTest {
@Test
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