Commit 8f63af67 by lzy

Merge branch 'dev' of git.xmmakeit.com:huangjiay/iot-platform-server into dev

parents 369a250f 47b92605
Showing with 1167 additions and 179 deletions
...@@ -152,7 +152,7 @@ CREATE TABLE `plat_elder_medical_examination_info` ...@@ -152,7 +152,7 @@ CREATE TABLE `plat_elder_medical_examination_info`
CREATE TABLE `plat_elder_children_info` CREATE TABLE `plat_elder_children_info`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NULL COMMENT '长者id', `elder_id` varchar(600) NULL COMMENT '长者id',
`openid` varchar(64) NOT NULL COMMENT 'openid', `openid` varchar(64) NOT NULL COMMENT 'openid',
`name` varchar(64) DEFAULT NULL COMMENT '姓名', `name` varchar(64) DEFAULT NULL COMMENT '姓名',
`phone` varchar(64) DEFAULT NULL COMMENT '手机号码', `phone` varchar(64) DEFAULT NULL COMMENT '手机号码',
...@@ -293,7 +293,7 @@ CREATE TABLE `plat_elder_sleep` ...@@ -293,7 +293,7 @@ CREATE TABLE `plat_elder_sleep`
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id', `elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
`start_sleep` datetime DEFAULT NULL COMMENT '入睡时间', `start_sleep` datetime DEFAULT NULL COMMENT '入睡时间',
`end_sleep` datetime DEFAULT NULL COMMENT '起床时间', `end_sleep` datetime DEFAULT NULL COMMENT '起床时间',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd', `happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`sleep_record` text DEFAULT NULL COMMENT '睡眠记录 区分时间段记录 [{"sleepType":"","startTime":"","endTime":""},{}]', `sleep_record` text DEFAULT NULL COMMENT '睡眠记录 区分时间段记录 [{"sleepType":"","startTime":"","endTime":""},{}]',
`create_date` datetime DEFAULT NULL COMMENT '创建时间', `create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间', `update_date` datetime DEFAULT NULL COMMENT '更新时间',
...@@ -316,7 +316,7 @@ CREATE TABLE `plat_elder_sleep_analysis` ...@@ -316,7 +316,7 @@ CREATE TABLE `plat_elder_sleep_analysis`
`sleep_time` VARCHAR(64) DEFAULT NULL COMMENT '睡眠时长', `sleep_time` VARCHAR(64) DEFAULT NULL COMMENT '睡眠时长',
`rest_time` VARCHAR(64) DEFAULT NULL COMMENT '休息时长', `rest_time` VARCHAR(64) DEFAULT NULL COMMENT '休息时长',
`sleep_evaluate` VARCHAR(64) DEFAULT NULL COMMENT '评价', `sleep_evaluate` VARCHAR(64) DEFAULT NULL COMMENT '评价',
`happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd', `happen_date` VARCHAR(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`create_date` datetime DEFAULT NULL COMMENT '创建时间', `create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间', `update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识', `del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
...@@ -329,46 +329,54 @@ CREATE TABLE `plat_elder_sleep_analysis` ...@@ -329,46 +329,54 @@ CREATE TABLE `plat_elder_sleep_analysis`
DEFAULT CHARSET = utf8mb4 DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉分析'; ROW_FORMAT = COMPACT COMMENT = '长者每天睡觉分析';
CREATE TABLE `plat_elder_breathe_abnormal` ( CREATE TABLE `plat_elder_breathe_abnormal`
`id` varchar(64) NOT NULL COMMENT 'id', (
`elder_id` varchar(64) NOT NULL COMMENT '长者id', `id` varchar(64) NOT NULL COMMENT 'id',
`breathe_analysis_id` varchar(64) NOT NULL COMMENT '呼吸分析id', `elder_id` varchar(64) NOT NULL COMMENT '长者id',
`happen_time` datetime NOT NULL COMMENT '发生时间', `breathe_analysis_id` varchar(64) NOT NULL COMMENT '呼吸分析id',
`type` varchar(32) DEFAULT NULL COMMENT '异常类型', `happen_time` datetime NOT NULL COMMENT '发生时间',
`value` varchar(64) DEFAULT NULL COMMENT '值', `type` varchar(32) DEFAULT NULL COMMENT '异常类型',
`create_date` datetime DEFAULT NULL COMMENT '创建时间', `value` varchar(64) DEFAULT NULL COMMENT '值',
`update_date` datetime DEFAULT NULL COMMENT '更新时间', `create_date` datetime DEFAULT NULL COMMENT '创建时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识', `update_date` datetime DEFAULT NULL COMMENT '更新时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`), `tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
KEY `index_elder_id` (`elder_id`) USING BTREE PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='长者每天呼吸异常'; KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='长者每天呼吸异常';
CREATE TABLE `plat_elder_breathe_analysis` ( CREATE TABLE `plat_elder_breathe_analysis`
`id` varchar(64) NOT NULL COMMENT 'id', (
`elder_id` varchar(64) NOT NULL COMMENT '长者id', `id` varchar(64) NOT NULL COMMENT 'id',
`breathe_score` varchar(64) DEFAULT NULL COMMENT '睡眠评分', `elder_id` varchar(64) NOT NULL COMMENT '长者id',
`breathe_result` varchar(64) DEFAULT NULL COMMENT '睡眠结果', `breathe_score` varchar(64) DEFAULT NULL COMMENT '睡眠评分',
`breathe_evaluate` varchar(64) DEFAULT NULL COMMENT '评价', `breathe_result` varchar(64) DEFAULT NULL COMMENT '睡眠结果',
`avg_heart_rate` varchar(64) DEFAULT NULL COMMENT '平均心率', `breathe_evaluate` varchar(64) DEFAULT NULL COMMENT '评价',
`avg_breathe_rate` varchar(64) DEFAULT NULL COMMENT '平均呼吸率', `avg_heart_rate` varchar(64) DEFAULT NULL COMMENT '平均心率',
`happen_date` varchar(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd', `avg_breathe_rate` varchar(64) DEFAULT NULL COMMENT '平均呼吸率',
`create_date` datetime DEFAULT NULL COMMENT '创建时间', `happen_date` varchar(64) DEFAULT NULL COMMENT '当前日期 yyyy-mm-dd',
`update_date` datetime DEFAULT NULL COMMENT '更新时间', `create_date` datetime DEFAULT NULL COMMENT '创建时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识', `update_date` datetime DEFAULT NULL COMMENT '更新时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人', `del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人', `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id', `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`), `tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
KEY `index_elder_id` (`elder_id`) USING BTREE PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='长者每天呼吸分析'; KEY `index_elder_id` (`elder_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT COMMENT ='长者每天呼吸分析';
CREATE TABLE `plat_elder_report_month` CREATE TABLE `plat_elder_report_month`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id', `elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
breathe_device_id VARCHAR(64) NULL COMMENT '呼吸心率设备id',
breathe_ori_device_id VARCHAR(64) NULL COMMENT '呼吸心率设备原始id',
day date NOT NULL COMMENT '日期', day date NOT NULL COMMENT '日期',
sleep_result varchar(64) NOT NULL COMMENT '睡眠结果', sleep_result varchar(64) NOT NULL COMMENT '睡眠结果',
heart_rate int NOT NULL COMMENT '心率', heart_rate int NOT NULL COMMENT '心率',
...@@ -389,7 +397,7 @@ CREATE TABLE `plat_elder_report_month` ...@@ -389,7 +397,7 @@ CREATE TABLE `plat_elder_report_month`
ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep_analysis` ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep_analysis`
ADD COLUMN `action_count` int(4) COMMENT '体动次数' AFTER `happen_date`, ADD COLUMN `action_count` int(4) COMMENT '体动次数' AFTER `happen_date`,
ADD COLUMN `turned_count` int(4) COMMENT '翻身次数' AFTER `action_count`; ADD COLUMN `turned_count` int(4) COMMENT '翻身次数' AFTER `action_count`;
ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep` ALTER TABLE `dev_iot_yanglao_platform`.`plat_elder_sleep`
ADD COLUMN `elder_sleep_type` int(4) COMMENT '睡眠类型 1 睡眠 2 小憩' AFTER `happen_date`; ADD COLUMN `elder_sleep_type` int(4) COMMENT '睡眠类型 1 睡眠 2 小憩' AFTER `happen_date`;
......
...@@ -30,7 +30,7 @@ public class SignAuthFilter implements Filter { ...@@ -30,7 +30,7 @@ public class SignAuthFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) req; HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res; HttpServletResponse response = (HttpServletResponse) res;
try { try {
String sign = request.getHeader("sign"); String sign = request.getHeader("token");
if (StringUtils.isEmpty(sign)) { if (StringUtils.isEmpty(sign)) {
response.sendError(403, "Forbidden"); response.sendError(403, "Forbidden");
return; return;
...@@ -47,7 +47,8 @@ public class SignAuthFilter implements Filter { ...@@ -47,7 +47,8 @@ public class SignAuthFilter implements Filter {
String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(RSAUtils.PRIVATE_KEY), "UTF-8"); String decryptJson = RSAUtils.privateDecrypt(sign, RSAUtils.getPrivateKey(RSAUtils.PRIVATE_KEY), "UTF-8");
boolean couldPass = decryptJson.equals(bodyString); boolean couldPass = decryptJson.replaceAll("\n","").replaceAll(" ","").trim()
.equals(bodyString.replaceAll(" ","").trim());
if (couldPass) { if (couldPass) {
// 放行 // 放行
chain.doFilter(requestWrapper, response); chain.doFilter(requestWrapper, response);
......
...@@ -55,9 +55,10 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte ...@@ -55,9 +55,10 @@ public class DataScopeInterceptor extends JsqlParserSupport implements InnerInte
} }
String[] orgIds = dataScope.split(Const.COMMON_SPLIT); String[] orgIds = dataScope.split(Const.COMMON_SPLIT);
List<String> orgIdList = Arrays.asList(orgIds); List<String> orgIdList = Arrays.asList(orgIds);
if(orgIdList.contains(tenantId)){ //2023年10月10日 如果是租户级别的组织,也只能看到本层
return; // if(orgIdList.contains(tenantId)){
} // return;
// }
String tableName = ((Table) ((PlainSelect) select.getSelectBody()).getFromItem()).getName(); String tableName = ((Table) ((PlainSelect) select.getSelectBody()).getFromItem()).getName();
//没有org_id 表字段跳过 //没有org_id 表字段跳过
List<TableFieldInfo> fieldInfoList = TableInfoHelper.getTableInfo(tableName).getFieldList(); List<TableFieldInfo> fieldInfoList = TableInfoHelper.getTableInfo(tableName).getFieldList();
......
...@@ -24,4 +24,6 @@ public class HeaderConst { ...@@ -24,4 +24,6 @@ public class HeaderConst {
public static final String FEIGN_NO_REMOVE="feignNoRemove"; public static final String FEIGN_NO_REMOVE="feignNoRemove";
public static final String DATA_SCOPE = "data-scope"; public static final String DATA_SCOPE = "data-scope";
public static final String ROLE_ID = "role-id";
} }
...@@ -24,7 +24,10 @@ import java.util.Set; ...@@ -24,7 +24,10 @@ import java.util.Set;
public class PlatAuthorizationInterceptor implements HandlerInterceptor { public class PlatAuthorizationInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//todo 按钮权限关闭
if(true){
return true;
}
Action annotation; Action annotation;
if (handler instanceof HandlerMethod) { if (handler instanceof HandlerMethod) {
......
...@@ -72,6 +72,11 @@ public class PlatUserLoginVO implements Serializable { ...@@ -72,6 +72,11 @@ public class PlatUserLoginVO implements Serializable {
private boolean initFlag = false; private boolean initFlag = false;
/**
* 当前账号选择的右上角角色
*/
private String currentRoleId;
public void init(){ public void init(){
if(initFlag){ if(initFlag){
......
...@@ -14,6 +14,8 @@ import com.makeit.module.iot.vo.ResponseMessage; ...@@ -14,6 +14,8 @@ import com.makeit.module.iot.vo.ResponseMessage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -49,6 +51,7 @@ public class IotCommonService { ...@@ -49,6 +51,7 @@ public class IotCommonService {
} }
public ResponseMessage sendPatch(String url, HttpRequest request) throws IOException { public ResponseMessage sendPatch(String url, HttpRequest request) throws IOException {
Response response = request.patch(); Response response = request.patch();
ResponseMessage responseMessage = getResponseMessage(url, response); ResponseMessage responseMessage = getResponseMessage(url, response);
return responseMessage; return responseMessage;
} }
......
...@@ -73,15 +73,17 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -73,15 +73,17 @@ public class IotProductDeviceService extends IotCommonService {
} }
@Async @Async
public void syncUpdateDeviceInfo(String id,String name) { public void syncUpdateDeviceInfo(String id, String name, String productId) {
String url = iotUrl + "/device-instance"; String url = iotUrl + "/device-instance";
// 条件可以自己改
Map<String,Object> reqMap = Maps.newHashMap(); Map<String,Object> reqMap = Maps.newHashMap();
reqMap.put("id",id); reqMap.put("id",id);
reqMap.put("name",name); reqMap.put("name",name);
reqMap.put("productId",productId);
String body = JsonUtil.toJson(reqMap); String body = JsonUtil.toJson(reqMap);
HttpRequest request = buildRequest(url, body); HttpRequest request = buildRequest(url, body);
request.encode("UTF-8");
request.contentType("application/json");
try { try {
ResponseMessage responseMessage = sendPatch(url, request); ResponseMessage responseMessage = sendPatch(url, request);
if (responseMessage.getStatus() == 200) { if (responseMessage.getStatus() == 200) {
...@@ -127,13 +129,12 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -127,13 +129,12 @@ public class IotProductDeviceService extends IotCommonService {
if (deviceOperationLogEntity == null) { if (deviceOperationLogEntity == null) {
return null; return null;
} }
DeviceInfoContentBreathe breathe = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentBreathe.class); DeviceInfoContentBreathe breathe = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentBreathe.class);
LocalDateTime time = LongTimestampUtil.toLocalDateTime(breathe.getTimestamp()); /* LocalDateTime time = LongTimestampUtil.toLocalDateTime(breathe.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) { if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null; return null;
} }*/
return breathe; return breathe;
...@@ -156,6 +157,24 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -156,6 +157,24 @@ public class IotProductDeviceService extends IotCommonService {
} }
public DeviceInfoContentFall getLastDeviceLogFall(String deviceId, Integer ignoreDuration) {//秒
DeviceOperationLogEntity deviceOperationLogEntity = getLastDeviceLogByType(deviceId, REPORT_PROPERTY);
if (deviceOperationLogEntity == null) {
return null;
}
DeviceInfoContentFall fall = JsonUtil.toObj((String) deviceOperationLogEntity.getContent(), DeviceInfoContentFall.class);
LocalDateTime time = LongTimestampUtil.toLocalDateTime(fall.getTimestamp());
if (ignoreDuration != null && Duration.between(time, LocalDateTime.now()).getSeconds() > ignoreDuration) {
return null;
}
return fall;
}
public List<String> getLastDayHourRange(LocalDateTime startDateTime) { public List<String> getLastDayHourRange(LocalDateTime startDateTime) {
int count = 24; int count = 24;
List<String> list = Lists.newArrayList(); List<String> list = Lists.newArrayList();
...@@ -233,9 +252,13 @@ public class IotProductDeviceService extends IotCommonService { ...@@ -233,9 +252,13 @@ public class IotProductDeviceService extends IotCommonService {
public List<DeviceInfoContentSpace> getDeviceLogByTimeRangeSpace(String deviceId, int pageSize, LocalDateTime startTime, LocalDateTime endTime) { public List<DeviceInfoContentSpace> getDeviceLogByTimeRangeSpace(String deviceId, int pageSize, LocalDateTime startTime, LocalDateTime endTime) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
List<DeviceOperationLogEntity> deviceOperationLogEntityList = getDeviceLogByTimeRange(deviceId, REPORT_PROPERTY, pageSize, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime)); List<DeviceInfoContentSpace> deviceInfoContentSpaceList = Lists.newArrayList();
int count = pageSize / 10000;
List<DeviceInfoContentSpace> deviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogEntityList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class)); for (int i = 0; i < count + 1; i++) {
List<DeviceOperationLogEntity> deviceOperationLogList = getDeviceLogByTimeRange(deviceId, REPORT_PROPERTY, 10000, dateTimeFormatter.format(startTime), dateTimeFormatter.format(endTime));
List<DeviceInfoContentSpace> tempDeviceInfoContentSpaceList = StreamUtil.map(deviceOperationLogList, e -> JsonUtil.toObj((String) e.getContent(), DeviceInfoContentSpace.class));
deviceInfoContentSpaceList.addAll(tempDeviceInfoContentSpaceList);
}
return deviceInfoContentSpaceList; return deviceInfoContentSpaceList;
} }
......
...@@ -175,6 +175,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig ...@@ -175,6 +175,7 @@ public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig
Page<SysConfig> pageList = page(p, listLambdaQueryWrapper(sysConfig)); Page<SysConfig> pageList = page(p, listLambdaQueryWrapper(sysConfig));
JoinUtil.join(pageList.getRecords(), sysConfigCategoryService, SysConfig::getCategoryId, SysConfigCategory::getId, (c, cc) -> { JoinUtil.join(pageList.getRecords(), sysConfigCategoryService, SysConfig::getCategoryId, SysConfigCategory::getId, (c, cc) -> {
c.setCategoryCode(cc.getCode());
c.setCategoryName(cc.getName()); c.setCategoryName(cc.getName());
}); });
......
...@@ -48,6 +48,13 @@ public class PlatAlarmRecordController { ...@@ -48,6 +48,13 @@ public class PlatAlarmRecordController {
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@ApiOperation("未读条数")
@PostMapping("unreadCount")
public ApiResponseEntity<Integer> unreadCount(@RequestBody PlatAlarmRecordQueryDTO dto) {
Integer count = platAlarmRecordService.unreadCount(dto);
return ApiResponseUtils.success(count);
}
// @Autowired // @Autowired
// private MailMsgSender mailMsgSender; // private MailMsgSender mailMsgSender;
// @Autowired // @Autowired
......
...@@ -43,5 +43,12 @@ public class PlatAlarmRecordChildrenController { ...@@ -43,5 +43,12 @@ public class PlatAlarmRecordChildrenController {
platAlarmRecordService.read(dto.getId()); platAlarmRecordService.read(dto.getId());
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
@ApiOperation("未读条数")
@PostMapping("unreadCount")
public ApiResponseEntity<Integer> unreadCount(@RequestBody PlatAlarmRecordQueryDTO dto) {
Integer count = platAlarmRecordService.unreadCount(dto);
return ApiResponseUtils.success(count);
}
} }
package com.makeit.module.controller.children.space;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.space.PlatRegionSettingDTO;
import com.makeit.dto.platform.space.PlatRegionSettingListDTO;
import com.makeit.dto.platform.space.PlatRegionSettingLocateDTO;
import com.makeit.dto.platform.space.PlatRegionSettingQueryDTO;
import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.space.PlatRegionSettingService;
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/11
*/
@Api(tags = "子女端小程序-区域设置")
@RestController
@RequestMapping("/children/plat/region/setting")
public class PlatRegionSettingChildrenController {
@Autowired
private PlatRegionSettingService platRegionSettingService;
@ApiOperation("列表")
@PostMapping("list")
public ApiResponseEntity<List<PlatRegionSettingDTO>> list(@RequestBody PlatRegionSettingQueryDTO dto) {
List<PlatRegionSettingDTO> data = platRegionSettingService.list(dto);
return ApiResponseUtils.success(data);
}
@ApiOperation("编辑")
@PostMapping("edit")
public ApiResponseEntity<?> edit(@RequestBody PlatRegionSettingDTO dto) {
platRegionSettingService.edit(dto);
return ApiResponseUtils.success();
}
@ApiOperation("批量编辑")
@PostMapping("batchEdit")
public ApiResponseEntity<?> batchEdit(@RequestBody PlatRegionSettingListDTO dto) {
platRegionSettingService.batchEdit(dto.getList());
return ApiResponseUtils.success();
}
@ApiOperation("定位(时间范围内定位)")
@PostMapping("locate")
public ApiResponseEntity<List<DeviceInfoContentSpace.Properties>> locate(@RequestBody PlatRegionSettingLocateDTO dto) {
List<DeviceInfoContentSpace.Properties> list = platRegionSettingService.locate(dto);
return ApiResponseUtils.success(list);
}
@ApiOperation("跌倒设备定位(时间范围内定位)")
@PostMapping("fallDeviceLocate")
public ApiResponseEntity<List<DeviceInfoContentFall.Properties>> fallDeviceLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
List<DeviceInfoContentFall.Properties> list = platRegionSettingService.fallDeviceLocate(dto);
return ApiResponseUtils.success(list);
}
@ApiOperation("实时定位")
@PostMapping("nowDataLocate")
public ApiResponseEntity<DeviceInfoContentSpace.Properties> nowDataLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
DeviceInfoContentSpace.Properties vo = platRegionSettingService.nowDataLocate(dto);
return ApiResponseUtils.success(vo);
}
@ApiOperation("跌倒设备实时定位")
@PostMapping("fallDeviceNowDataLocate")
public ApiResponseEntity<DeviceInfoContentFall.Properties> fallDeviceNowDataLocate(@RequestBody PlatRegionSettingLocateDTO dto) {
DeviceInfoContentFall.Properties vo = platRegionSettingService.fallDeviceNowDataLocate(dto);
return ApiResponseUtils.success(vo);
}
}
...@@ -5,11 +5,13 @@ import com.makeit.common.page.PageVO; ...@@ -5,11 +5,13 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO; import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.module.system.entity.ChinaArea; import com.makeit.module.system.entity.ChinaArea;
import com.makeit.service.platform.dataScreen.DataScreenService; import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.utils.area.ChinaAreaVO; import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.space.PlatBedVo; import com.makeit.vo.platform.space.PlatBedVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -83,4 +85,10 @@ public class DataScreenController { ...@@ -83,4 +85,10 @@ public class DataScreenController {
return ApiResponseUtils.success(dataScreenService.mapList(dto)); return ApiResponseUtils.success(dataScreenService.mapList(dto));
} }
@ApiOperation("设备分页列表")
@PostMapping("devicePage")
public ApiResponseEntity<PageVO<PlatDeviceListVO>> devicePage(@RequestBody PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO) {
return ApiResponseUtils.success(dataScreenService.devicePage(pageReqDTO));
}
} }
...@@ -57,6 +57,13 @@ public class PlatRoomBedDeviceController { ...@@ -57,6 +57,13 @@ public class PlatRoomBedDeviceController {
return ApiResponseUtils.success(data); return ApiResponseUtils.success(data);
} }
@ApiOperation("已绑定设备分页")
@PostMapping("pageBindDevice")
public ApiResponseEntity<PageVO<PlatDeviceDTO>> pageBindDevice(@RequestBody PageReqDTO<PlatBedDeviceQueryDTO> page) {
PageVO<PlatDeviceDTO> data = platRoomBedDeviceService.pageBindDevice(page);
return ApiResponseUtils.success(data);
}
@ApiOperation("绑定设备") @ApiOperation("绑定设备")
@PostMapping("bindingDevice") @PostMapping("bindingDevice")
public ApiResponseEntity<?> bindingDevice(@RequestBody PlatRoomBindDeviceDTO dto) { public ApiResponseEntity<?> bindingDevice(@RequestBody PlatRoomBindDeviceDTO dto) {
......
...@@ -63,6 +63,8 @@ public class PlatAlarmRecordQueryDTO extends BaseTenantDTO { ...@@ -63,6 +63,8 @@ public class PlatAlarmRecordQueryDTO extends BaseTenantDTO {
*/ */
private String noticeStatus; private String noticeStatus;
private String readFlag;
} }
...@@ -31,4 +31,7 @@ public class PlatDataScreenQueryDTO { ...@@ -31,4 +31,7 @@ public class PlatDataScreenQueryDTO {
@ApiModelProperty("类型 1-居家 2-机构") @ApiModelProperty("类型 1-居家 2-机构")
private String type; private String type;
@ApiModelProperty("设备状态")
private String deviceStatus;
} }
...@@ -38,5 +38,7 @@ public class PlatDeviceQueryDTO extends BaseTenantDTO { ...@@ -38,5 +38,7 @@ public class PlatDeviceQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "组织id") @ApiModelProperty(value = "组织id")
private String orgId; private String orgId;
private String spaceId;
} }
...@@ -40,4 +40,5 @@ public class PlatElderReportDTO extends PlatElderIdDTO { ...@@ -40,4 +40,5 @@ public class PlatElderReportDTO extends PlatElderIdDTO {
@ApiModelProperty("结束时间") @ApiModelProperty("结束时间")
private LocalDateTime endTime; private LocalDateTime endTime;
private String tenantId;
} }
...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel; ...@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
* @Author:lzy * @Author:lzy
* @Date:2023/9/18 11:38 * @Date:2023/9/18 11:38
...@@ -41,7 +42,7 @@ public class PlatSpaceImportDTO { ...@@ -41,7 +42,7 @@ public class PlatSpaceImportDTO {
@ExcelProperty({BIG_TITLE, "床位数量"}) @ExcelProperty({BIG_TITLE, "床位数量"})
@ApiModelProperty(value = "床位数量") @ApiModelProperty(value = "床位数量")
private Integer bedNumber; private String bedNumber;
......
...@@ -27,6 +27,12 @@ public class PlatElderReportMonth extends BaseBusEntity { ...@@ -27,6 +27,12 @@ public class PlatElderReportMonth extends BaseBusEntity {
@ApiModelProperty(value = "长者id") @ApiModelProperty(value = "长者id")
private String elderId; private String elderId;
@ApiModelProperty(value = "呼吸心率设备id")
private String breatheDeviceId;
@ApiModelProperty(value = "呼吸心率设备原始id")
private String breatheOriDeviceId;
@ApiModelProperty(value = "日期") @ApiModelProperty(value = "日期")
private LocalDate day; private LocalDate day;
......
...@@ -27,4 +27,7 @@ public class PlatRoomBedDevice extends BaseBusEntity { ...@@ -27,4 +27,7 @@ public class PlatRoomBedDevice extends BaseBusEntity {
@TableField(updateStrategy = FieldStrategy.IGNORED) @TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "床位Id") @ApiModelProperty(value = "床位Id")
private String bedId; private String bedId;
@TableField(exist = false)
private String path;
} }
package com.makeit.mapper.platform.device; package com.makeit.mapper.platform.device;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import org.apache.ibatis.annotations.Param;
/** /**
* <p> * <p>
...@@ -13,4 +18,8 @@ import com.makeit.entity.platform.device.PlatDevice; ...@@ -13,4 +18,8 @@ import com.makeit.entity.platform.device.PlatDevice;
*/ */
public interface PlatDeviceMapper extends BaseMapper<PlatDevice> { public interface PlatDeviceMapper extends BaseMapper<PlatDevice> {
Page<PlatDeviceListVO> getDeviceIdsBySpaceId(@Param("param")PlatDeviceQueryDTO param, Page page);
Page<PlatDeviceListVO> getDevices(@Param("param")PlatDataScreenQueryDTO param, Page<PlatDevice> page);
} }
...@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO; import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO; import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.dto.platform.workstation.WorkStationQueryDTO; import com.makeit.dto.platform.workstation.WorkStationQueryDTO;
import com.makeit.dto.saas.SaasOperationLogDTO;
import com.makeit.entity.platform.space.PlatBed; import com.makeit.entity.platform.space.PlatBed;
import com.makeit.vo.platform.space.PlatBedPanoramaVO; import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.space.PlatBedVo; import com.makeit.vo.platform.space.PlatBedVo;
......
...@@ -21,4 +21,8 @@ public interface PlatRoomMapper extends BaseMapper<PlatRoom> { ...@@ -21,4 +21,8 @@ public interface PlatRoomMapper extends BaseMapper<PlatRoom> {
List<WorkStationInstitutionRoomVO> workStationList(@Param("dto") WorkStationQueryDTO dto); List<WorkStationInstitutionRoomVO> workStationList(@Param("dto") WorkStationQueryDTO dto);
Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> page, @Param("dto") WorkStationQueryDTO dto); Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> page, @Param("dto") WorkStationQueryDTO dto);
List<PlatSpaceAndRoomVO> spaceList(@Param("orgIds")List<String> orgIds);
List<PlatSpaceAndRoomVO> roomList(@Param("orgIds")List<String> orgIds);
} }
...@@ -63,4 +63,6 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> { ...@@ -63,4 +63,6 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
void dealAlarm(BaseIdDTO dto); void dealAlarm(BaseIdDTO dto);
void read(String id); void read(String id);
Integer unreadCount(PlatAlarmRecordQueryDTO dto);
} }
...@@ -2,17 +2,23 @@ package com.makeit.service.platform.alarm; ...@@ -2,17 +2,23 @@ package com.makeit.service.platform.alarm;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO; import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord; import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.utils.AlarmRedisDTO;
import java.util.List; import java.util.List;
/** /**
* @author lixl * @author lixl
* @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service * @description 针对表【plat_day_duration_record(每天停留时长记录)】的数据库操作Service
* @createDate 2023-09-14 10:14:20 * @createDate 2023-09-14 10:14:20
*/ */
public interface PlatDayDurationRecordService extends IService<PlatDayDurationRecord> { public interface PlatDayDurationRecordService extends IService<PlatDayDurationRecord> {
List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param); List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param);
void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO);
} }
...@@ -127,57 +127,11 @@ public class BehaviorAlarm implements IAlarm { ...@@ -127,57 +127,11 @@ public class BehaviorAlarm implements IAlarm {
return; return;
} }
//保存每次进入空间时长 //保存每次进入空间时长
saveDayDurationRecord(platAlarmCheckDTO, alarmRedisDTO); platDayDurationRecordService.saveDayDurationRecord(platAlarmCheckDTO, alarmRedisDTO);
RedisUtil.delete(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId); RedisUtil.delete(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
} }
} }
/**
* 保存停留时长记录
* 进入雷达开始
* 走出雷达结束
*
* @param platAlarmCheckDTO
* @param alarmRedisDTO
*/
private void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
Date now = new Date();
long endLong = now.getTime();
long count = endLong - alarmRedisDTO.getStartLong();
//save db
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
if(CollectionUtils.isEmpty(platAlarmCheckDTO.getPlatElderList())){
log.error("未关联长者,设备id:"+platDevice.getId());
return;
}
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
if(CollectionUtils.isNotEmpty(platElderList)){
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platElderList = platAlarmCheckDTO.getPlatElderList();
}
for (PlatElder platElder : platElderList) {
if(StringUtils.isBlank(platElder.getRegionName())){
continue;
}
PlatDayDurationRecord durationRecord = new PlatDayDurationRecord();
durationRecord.setElderIds(platElder.getId());
durationRecord.setRegionName(platElder.getRegionName());
durationRecord.setDuration(count);
durationRecord.setOriDeviceId(platDevice.getOriDeviceId());
durationRecord.setDay(alarmRedisDTO.getStart());
durationRecord.setStartDate(alarmRedisDTO.getStart());
durationRecord.setEndDate(now);
durationRecord.setTenantId(config.getTenantId());
durationRecord.setRoomId(platElder.getRoomId());
durationRecord.setDeviceId(platDevice.getId());
platDayDurationRecordService.saveOrUpdate(durationRecord);
}
}
@Override @Override
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) { public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
......
...@@ -70,11 +70,15 @@ public class BreathAlarm implements IAlarm { ...@@ -70,11 +70,15 @@ public class BreathAlarm implements IAlarm {
}else { }else {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig(); PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig(); String ruleConfigStr = config.getRuleConfig();
if (CommonEnum.NO.getValue().equals(config.getStatus())) {
log.error("呼吸告警配置为启用,告警配置id:" + config.getId());
return;
}
if (StringUtils.isBlank(ruleConfigStr)) { if (StringUtils.isBlank(ruleConfigStr)) {
log.error("呼吸告警配置未配置,告警配置id:" + config.getId()); log.error("呼吸告警配置未配置,告警配置id:" + config.getId());
return; return;
} }
ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class); ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class);
} }
......
...@@ -3,7 +3,10 @@ package com.makeit.service.platform.alarm.alarmStrategy; ...@@ -3,7 +3,10 @@ package com.makeit.service.platform.alarm.alarmStrategy;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; 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.PlatAlarmRecord;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
...@@ -11,7 +14,12 @@ import com.makeit.enums.CommonEnum; ...@@ -11,7 +14,12 @@ import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.AlarmRedisDTO; import com.makeit.utils.AlarmRedisDTO;
import com.makeit.utils.DayDurationUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -20,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -20,6 +28,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
@Component @Component
...@@ -28,6 +38,15 @@ public class FallAlarm implements IAlarm { ...@@ -28,6 +38,15 @@ public class FallAlarm implements IAlarm {
@Autowired @Autowired
private PlatAlarmRecordService platAlarmRecordService; private PlatAlarmRecordService platAlarmRecordService;
@Autowired
private PlatDayDurationRecordService platDayDurationRecordService;
@Autowired
private AlarmConfigCacheUtil alarmConfigCacheUtil;
@Autowired
private DayDurationUtil dayDurationUtil;
private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL; private final PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
@Override @Override
...@@ -46,25 +65,108 @@ public class FallAlarm implements IAlarm { ...@@ -46,25 +65,108 @@ public class FallAlarm implements IAlarm {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice(); PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getId(); String deviceId = platDevice.getId();
String personState = Convert.toStr(properties.get("personState")); String personState = Convert.toStr(properties.get("personState"));
//记录停留时长
recordDuration(platAlarmCheckDTO);
//跌倒告警
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_FALL_ID + deviceId); AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_FALL_ID + deviceId);
if(alarmRedisDTO==null){ if (alarmRedisDTO == null) {
alarmRedisDTO = new AlarmRedisDTO(); alarmRedisDTO = new AlarmRedisDTO();
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue()); alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO); RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
} }
if (StringUtils.equals(personState, CommonEnum.YES.getValue())) { if (StringUtils.equals(personState, CommonEnum.YES.getValue())) {
if (StringUtils.equals(alarmRedisDTO.getAlarm(),CommonEnum.YES.getValue())){ if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
log.error("长者跌倒,已告警过,设备plat_id:"+deviceId); log.error("长者跌倒,已告警过,设备plat_id:" + deviceId);
return; return;
} }
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue()); alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO); RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
notice(platAlarmCheckDTO); notice(platAlarmCheckDTO);
} else { } else {
if(StringUtils.equals(alarmRedisDTO.getAlarm(),CommonEnum.YES.getValue())) { if (StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.YES.getValue())) {
alarmRedisDTO.setAlarm(CommonEnum.NO.getValue()); alarmRedisDTO.setAlarm(CommonEnum.NO.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID+ deviceId, alarmRedisDTO); RedisUtil.set(RedisConst.ALARM_DEVICE_FALL_ID + deviceId, alarmRedisDTO);
}
}
}
private void recordDuration(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
PlatAlarmConfig config = alarmConfigCacheUtil.get(platDevice.getOrgId(), PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue());
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
String deviceId = platDevice.getId();
if (StringUtils.isBlank(ruleConfigStr)) {
log.error("行为告警配置未配置,告警配置id:" + config.getId());
return;
}
String personState = Convert.toStr(properties.get("personState"));
String person = Convert.toStr(properties.get("person"));
PlatAlarmConfigBehaviorDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigBehaviorDTOVO.class);
Integer duration = ruleConfig.getAverageDuration();//分钟
PlatDayDurationRecord platDayDurationRecord = dayDurationUtil.get(deviceId);
// if (platDayDurationRecord == null) {
// log.error("行为告警未找到行为异常平均时长,设备plat_id:" + platDevice.getId());
// return;
// }
Integer duration1 = 0;
if (platDayDurationRecord != null) {
duration1 = Math.toIntExact(platDayDurationRecord.getDuration());
}
//duration+平均停留时长
if (duration == null) {
duration = 0;
} else {
duration = duration * 60 + (duration1 / 1000);
}
List<String> personStateList = Arrays.asList("0");
//有人
//计数
Date now = new Date();
long endLong = now.getTime();
AlarmRedisDTO alarmRedisDTO = RedisUtil.get(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
if (alarmRedisDTO == null) {
alarmRedisDTO = new AlarmRedisDTO();
}
//有人
if (!personStateList.contains(person)) {
//第一次进入空间
Long startLong = alarmRedisDTO.getStartLong();
if (startLong == null) {
alarmRedisDTO.setStartLong(endLong);
alarmRedisDTO.setStart(now);
RedisUtil.set(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId, alarmRedisDTO);
log.error("空间雷达上报进入房间,设备plat_id:" + platDevice.getId());
return;
}
long count = endLong - startLong;
//进入空间时间满足告警时长,判断是否已经告警过了
if (duration!= 0 && count / 1000 >= duration && StringUtils.equals(alarmRedisDTO.getAlarm(), CommonEnum.NO.getValue())) {
log.error("空间雷达发出告警,设备plat_id:" + platDevice.getId());
if(duration1 != 0) {
alarmRedisDTO.setAlarm(CommonEnum.YES.getValue());
RedisUtil.set(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId, alarmRedisDTO);
notice(platAlarmCheckDTO);
}else {
return;
}
}
} else {//没人
// 是否有第一次进入记录,有则保存db
Long startLong = alarmRedisDTO.getStartLong();
if (startLong == null) {
return;
} }
//保存每次进入空间时长
PlatAlarmCheckDTO platAlarmCheckDTO_behavior = BeanDtoVoUtils.convert(platAlarmCheckDTO, PlatAlarmCheckDTO.class);
platAlarmCheckDTO_behavior.setPlatAlarmConfig(config);
platDayDurationRecordService.saveDayDurationRecord(platAlarmCheckDTO_behavior, alarmRedisDTO);
RedisUtil.delete(RedisConst.ALARM_DEVICE_BEHAVIOR_ID + deviceId);
} }
} }
...@@ -83,11 +185,11 @@ public class FallAlarm implements IAlarm { ...@@ -83,11 +185,11 @@ public class FallAlarm implements IAlarm {
param.add(platElder.getName()); param.add(platElder.getName());
param.add(platRoom.getName()); param.add(platRoom.getName());
platAlarmCheckDTO.setParam(param); platAlarmCheckDTO.setParam(param);
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO,platElder); PlatAlarmRecord platAlarmRecord = platAlarmRecordService.convertToPlatAlarmRecord(platAlarmCheckDTO, platElder);
platAlarmRecord.setElderIds(platElder.getId()); platAlarmRecord.setElderIds(platElder.getId());
platAlarmRecord.setElderName(platElder.getName()); platAlarmRecord.setElderName(platElder.getName());
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord); platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(), platAlarmRecord);
log.error("长者跌倒,发出告警,设备id:"+platDevice.getId()+", 长者名称:"+platElder.getName()); log.error("长者跌倒,发出告警,设备id:" + platDevice.getId() + ", 长者名称:" + platElder.getName());
} }
} }
} }
...@@ -21,6 +21,7 @@ import com.makeit.entity.platform.elder.PlatElderChildrenInfo; ...@@ -21,6 +21,7 @@ import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.entity.platform.space.PlatRegionSetting; import com.makeit.entity.platform.space.PlatRegionSetting;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice; import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
...@@ -33,6 +34,7 @@ import com.makeit.service.platform.elder.PlatElderService; ...@@ -33,6 +34,7 @@ import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatRegionSettingService; import com.makeit.service.platform.space.PlatRegionSettingService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService; import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService; import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.msg.MsgSendUtil; import com.makeit.utils.msg.MsgSendUtil;
...@@ -89,6 +91,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -89,6 +91,8 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
private PlatRoomService platRoomService; private PlatRoomService platRoomService;
@Autowired @Autowired
private PlatRegionSettingService platRegionSettingService; private PlatRegionSettingService platRegionSettingService;
@Autowired
private PlatTenantService platTenantService;
@Override @Override
...@@ -147,6 +151,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -147,6 +151,7 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
} }
}) })
.eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus()) .eq(StringUtils.isNotBlank(param.getNoticeStatus()),PlatAlarmRecord::getNoticeStatus,param.getNoticeStatus())
.eq(StringUtils.isNotBlank(param.getReadFlag()),PlatAlarmRecord::getReadFlag,param.getReadFlag())
.orderByDesc(BaseEntity::getCreateDate) .orderByDesc(BaseEntity::getCreateDate)
; ;
} }
...@@ -315,8 +320,22 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -315,8 +320,22 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
if(StringUtils.isEmpty(notifyChannel)){ if(StringUtils.isEmpty(notifyChannel)){
return; return;
} }
PlatTenant platTenant = platTenantService.getById(alarmConfig.getTenantId());
if(platTenant == null){
return;
}
String alertChannel = platTenant.getAlertChannel();
if(StringUtils.isBlank(alertChannel)){
return;
}
String[] tenantChannels = alertChannel.split(",");
List<String> tenantChannelList = Arrays.asList(tenantChannels);
String[] split = notifyChannel.split(","); String[] split = notifyChannel.split(",");
for (String sendType : split) { for (String sendType : split) {
//租户告警渠道 没配置的 就不发送
if(!tenantChannelList.contains(sendType)){
continue;
}
SendTypeEnum sendTypeEnum = SendTypeEnum.getByValue(sendType); SendTypeEnum sendTypeEnum = SendTypeEnum.getByValue(sendType);
boolean contains = notifyChannelList.contains(sendTypeEnum); boolean contains = notifyChannelList.contains(sendTypeEnum);
if (contains) { if (contains) {
...@@ -491,4 +510,23 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe ...@@ -491,4 +510,23 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
.set(PlatAlarmRecord::getReadFlag, CommonEnum.YES.getValue()); .set(PlatAlarmRecord::getReadFlag, CommonEnum.YES.getValue());
update(recordLambdaUpdateWrapper); update(recordLambdaUpdateWrapper);
} }
@Override
public Integer unreadCount(PlatAlarmRecordQueryDTO dto) {
PlatElderChildrenInfo platElderChildrenInfo = platElderChildrenInfoService.getById(WechatUserUtil.getUserId());
log.info("子女端账号:"+platElderChildrenInfo.toString());
if (platElderChildrenInfo == null) {
return 0;
}
String elderId = platElderChildrenInfo.getElderId();
if(StringUtils.isBlank(elderId)){
return 0;
}
String[] split = elderId.split(",");
dto.setElderIdList(Arrays.asList(split));
dto.setNoticeStatus(CommonEnum.YES.getValue());
dto.setReadFlag(CommonEnum.NO.getValue());
LambdaQueryWrapper<PlatAlarmRecord> lambdaQueryWrapper = getLambdaQueryWrapper(dto);
return Math.toIntExact(count(lambdaQueryWrapper));
}
} }
...@@ -2,12 +2,22 @@ package com.makeit.service.platform.alarm.impl; ...@@ -2,12 +2,22 @@ package com.makeit.service.platform.alarm.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO; import com.makeit.dto.platform.alarm.PlatDayDurationRecordDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatDayDurationRecord; import com.makeit.entity.platform.alarm.PlatDayDurationRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper; import com.makeit.mapper.platform.alarm.PlatDayDurationRecordMapper;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService; import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.utils.AlarmRedisDTO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -19,8 +29,59 @@ import java.util.List; ...@@ -19,8 +29,59 @@ import java.util.List;
public class PlatDayDurationRecordServiceImpl extends ServiceImpl<PlatDayDurationRecordMapper, PlatDayDurationRecord> public class PlatDayDurationRecordServiceImpl extends ServiceImpl<PlatDayDurationRecordMapper, PlatDayDurationRecord>
implements PlatDayDurationRecordService { implements PlatDayDurationRecordService {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
@Override @Override
public List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param){ public List<PlatDayDurationRecord> getDayMaxDurationList(PlatDayDurationRecordDTO param){
return baseMapper.getDayMaxDurationList(param); return baseMapper.getDayMaxDurationList(param);
} }
/**
* 保存停留时长记录
* 进入雷达开始
* 走出雷达结束
*
* @param platAlarmCheckDTO
* @param alarmRedisDTO
*/
@Override
public void saveDayDurationRecord(PlatAlarmCheckDTO platAlarmCheckDTO, AlarmRedisDTO alarmRedisDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
Date now = new Date();
long endLong = now.getTime();
long count = endLong - alarmRedisDTO.getStartLong();
//save db
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
if(CollectionUtils.isEmpty(platAlarmCheckDTO.getPlatElderList())){
log.error("未关联长者,设备id:"+platDevice.getId());
return;
}
List<PlatElder> platElderList = platAlarmCheckDTO.getPlatElderList();
// if(CollectionUtils.isNotEmpty(platElderList)){
// platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
// platElderList = platAlarmCheckDTO.getPlatElderList();
// }
for (PlatElder platElder : platElderList) {
if(StringUtils.isBlank(platElder.getRegionName())){
continue;
}
PlatDayDurationRecord durationRecord = new PlatDayDurationRecord();
durationRecord.setElderIds(platElder.getId());
durationRecord.setRegionName(platElder.getRegionName());
durationRecord.setDuration(count);
durationRecord.setOriDeviceId(platDevice.getOriDeviceId());
durationRecord.setDay(alarmRedisDTO.getStart());
durationRecord.setStartDate(alarmRedisDTO.getStart());
durationRecord.setEndDate(now);
durationRecord.setTenantId(config.getTenantId());
durationRecord.setRoomId(platElder.getRoomId());
durationRecord.setDeviceId(platDevice.getId());
this.saveOrUpdate(durationRecord);
}
}
} }
...@@ -30,6 +30,7 @@ import com.makeit.entity.saas.PlatTenant; ...@@ -30,6 +30,7 @@ import com.makeit.entity.saas.PlatTenant;
import com.makeit.entity.saas.PlatTenantMenu; import com.makeit.entity.saas.PlatTenantMenu;
import com.makeit.enums.CodeMessageEnum; import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.enums.HeaderConst;
import com.makeit.enums.IsTenantAccountEnum; import com.makeit.enums.IsTenantAccountEnum;
import com.makeit.enums.biz.auth.SysEnum; import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.id.TreeConst; import com.makeit.enums.id.TreeConst;
...@@ -61,6 +62,7 @@ import com.makeit.utils.data.convert.StreamUtil; ...@@ -61,6 +62,7 @@ import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.excel.ExcelUtil; import com.makeit.utils.data.excel.ExcelUtil;
import com.makeit.utils.data.excel.ExcelValidatorUtil; import com.makeit.utils.data.excel.ExcelValidatorUtil;
import com.makeit.utils.data.id.IdGen; import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.sql.groupby.DynamicQuery; import com.makeit.utils.sql.groupby.DynamicQuery;
import com.makeit.utils.sql.groupby.SqlUtil; import com.makeit.utils.sql.groupby.SqlUtil;
import com.makeit.utils.sql.join.JoinUtil; import com.makeit.utils.sql.join.JoinUtil;
...@@ -266,7 +268,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -266,7 +268,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
@Transactional @Transactional
@Override @Override
public void edit(PlatUserDTOVO dto) { public void edit(PlatUserDTOVO dto) {
dto.setAccount(null); //dto.setAccount(null);
check(dto); check(dto);
PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class); PlatUser user = BeanDtoVoUtils.convert(dto, PlatUser.class);
user.setIsTenant(CommonEnum.YES.getValue()); user.setIsTenant(CommonEnum.YES.getValue());
...@@ -537,9 +539,15 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -537,9 +539,15 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
private List<PlatMenu> getMenuListByUserId(PlatUserLoginVO userLoginVO) { private List<PlatMenu> getMenuListByUserId(PlatUserLoginVO userLoginVO) {
String currentRoleId = userLoginVO.getCurrentRoleId();
List<String> roleIdList = new ArrayList<>();
if(StringUtils.isBlank(currentRoleId)) {
List<PlatRole> roleList = getRoleList(userLoginVO.getId());
roleIdList = StreamUtil.map(roleList, PlatRole::getId);
}else {
roleIdList.add(currentRoleId);
}
List<PlatRole> roleList = getRoleList(userLoginVO.getId());
List<String> roleIdList = StreamUtil.map(roleList, PlatRole::getId);
roleIdList.add(-1 + ""); roleIdList.add(-1 + "");
List<PlatRoleMenu> roleMenuList = platRoleMenuService.list(new QueryWrapper<PlatRoleMenu>().lambda() List<PlatRoleMenu> roleMenuList = platRoleMenuService.list(new QueryWrapper<PlatRoleMenu>().lambda()
...@@ -554,7 +562,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -554,7 +562,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
.orderByAsc(PlatMenu::getCreateDate) .orderByAsc(PlatMenu::getCreateDate)
); );
userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, PlatRoleDTOVO.class)); //userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, PlatRoleDTOVO.class));
if (StringUtils.isNotBlank(userLoginVO.getTenantId())) { if (StringUtils.isNotBlank(userLoginVO.getTenantId())) {
Set<String> menuIdSet = StreamUtil.mapToSet(getMenuListByTenantId(userLoginVO.getTenantId()), PlatMenu::getId); Set<String> menuIdSet = StreamUtil.mapToSet(getMenuListByTenantId(userLoginVO.getTenantId()), PlatMenu::getId);
...@@ -589,6 +597,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -589,6 +597,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
return userLoginVO; return userLoginVO;
} }
userLoginVO.setCurrentRoleId(RequestUtil.getHeader(HeaderConst.ROLE_ID));
List<PlatMenu> menuList = getMenuListByUserId(userLoginVO); List<PlatMenu> menuList = getMenuListByUserId(userLoginVO);
fillMenuList(menuList, userLoginVO); fillMenuList(menuList, userLoginVO);
...@@ -900,6 +909,9 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser> ...@@ -900,6 +909,9 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
fillDept(Arrays.asList(userVO)); fillDept(Arrays.asList(userVO));
getRoleList(userVO); getRoleList(userVO);
PlatTenant platTenant = platTenantService.getById(userVO.getTenantId());
userVO.setPlatTenant(platTenant);
return userVO; return userVO;
} }
......
...@@ -3,8 +3,10 @@ package com.makeit.service.platform.dataScreen; ...@@ -3,8 +3,10 @@ package com.makeit.service.platform.dataScreen;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.utils.area.ChinaAreaVO; import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import java.util.List; import java.util.List;
...@@ -30,4 +32,6 @@ public interface DataScreenService { ...@@ -30,4 +32,6 @@ public interface DataScreenService {
List<ChinaAreaVO> mapList(PlatDataScreenQueryDTO dto); List<ChinaAreaVO> mapList(PlatDataScreenQueryDTO dto);
PageVO<PlatAlarmStatisticsListVo> alarmPage(PageReqDTO<PlatDataScreenQueryDTO> page); PageVO<PlatAlarmStatisticsListVo> alarmPage(PageReqDTO<PlatDataScreenQueryDTO> page);
PageVO<PlatDeviceListVO> devicePage(PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO);
} }
package com.makeit.service.platform.dataScreen.impl; package com.makeit.service.platform.dataScreen.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO; import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord; import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatOrg; import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.entity.platform.auth.PlatUser; import com.makeit.entity.platform.auth.PlatUser;
...@@ -12,6 +15,7 @@ import com.makeit.entity.platform.device.PlatDevice; ...@@ -12,6 +15,7 @@ import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder; import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatBed; import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.entity.platform.space.PlatSpace; import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum; import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
...@@ -26,26 +30,33 @@ import com.makeit.service.platform.dataScreen.DataScreenService; ...@@ -26,26 +30,33 @@ import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderService; import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatBedService; import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatSpaceService; import com.makeit.service.platform.space.PlatSpaceService;
import com.makeit.utils.area.AreaUtil; import com.makeit.utils.area.AreaUtil;
import com.makeit.utils.area.ChinaAreaVO; import com.makeit.utils.area.ChinaAreaVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil; import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.vo.platform.dataScreen.*; import com.makeit.vo.platform.dataScreen.*;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.elder.PlatElderListVO; import com.makeit.vo.platform.elder.PlatElderListVO;
import jodd.util.StringUtil; import jodd.util.StringUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* Controller * Controller
...@@ -69,6 +80,8 @@ public class DataScreenServiceImpl implements DataScreenService { ...@@ -69,6 +80,8 @@ public class DataScreenServiceImpl implements DataScreenService {
private PlatSpaceService platSpaceService; private PlatSpaceService platSpaceService;
@Autowired @Autowired
private PlatOrgService platOrgService; private PlatOrgService platOrgService;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Override @Override
public PlatAgeStatisticsVO ageStatistics(PlatDataScreenQueryDTO dto) { public PlatAgeStatisticsVO ageStatistics(PlatDataScreenQueryDTO dto) {
...@@ -295,6 +308,12 @@ public class DataScreenServiceImpl implements DataScreenService { ...@@ -295,6 +308,12 @@ public class DataScreenServiceImpl implements DataScreenService {
@Override @Override
public List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto) { public List<PlatMapStatisticsVO> mapStatistics(PlatDataScreenQueryDTO dto) {
if(dto.getStartTime() == null){
dto.setStartTime(LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN));
}
if(dto.getEndTime() == null){
dto.setEndTime(LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MAX));
}
List<PlatMapStatisticsVO> list = new ArrayList<>(); List<PlatMapStatisticsVO> list = new ArrayList<>();
if(dto.getOrgIds().isEmpty()){ if(dto.getOrgIds().isEmpty()){
//获取该账号的权限组织 //获取该账号的权限组织
...@@ -464,12 +483,87 @@ public class DataScreenServiceImpl implements DataScreenService { ...@@ -464,12 +483,87 @@ public class DataScreenServiceImpl implements DataScreenService {
listVo.setType(record.getAlarmType()); listVo.setType(record.getAlarmType());
listVo.setAlarmDate(record.getAlarmDate().format(df)); listVo.setAlarmDate(record.getAlarmDate().format(df));
listVo.setAlarmTime(record.getAlarmDate().format(dft)); listVo.setAlarmTime(record.getAlarmDate().format(dft));
listVo.setAlarmRecordId(record.getId());
list.add(listVo); list.add(listVo);
} }
return PageUtil.toPageVO(list, pages); return PageUtil.toPageVO(list, pages);
} }
@Override
public PageVO<PlatDeviceListVO> devicePage(PageReqDTO<PlatDataScreenQueryDTO> pageReqDTO) {
PlatDataScreenQueryDTO dto = pageReqDTO.getData();
if(dto.getOrgIds().isEmpty()){
//获取该账号的权限组织
List<PlatOrg> orgs = belongToScopeList(dto.getType());
if(orgs.isEmpty()){
return new PageVO<>();
}
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds);
}else {
//根据类型过滤数据
List<PlatOrg> platOrgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.in(PlatOrg::getId, dto.getOrgIds())
.eq(PlatOrg::getType, dto.getType()));
if(platOrgs.isEmpty()){
return new PageVO<>();
}
List<String> orgIdList = platOrgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIdList);
}
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<PlatDevice>()
// .eq(StringUtils.isNotBlank(dto.getDeviceStatus()), PlatDevice::getStatus, dto.getDeviceStatus())
// .in(PlatDevice::getOrgId, dto.getOrgIds())
// .orderByDesc(BaseEntity::getUpdateDate);
//
// Page<PlatDevice> page = platDeviceService.page(p, queryWrapper);
Page<PlatDeviceListVO> page = platDeviceService.getDevices(dto, p);
List<PlatDeviceListVO> voList = page.getRecords();
if(CollectionUtils.isEmpty(voList)){
return new PageVO<>();
}
List<String> spaceIdList = voList.stream().flatMap(vo -> {
String spaceParentPath = vo.getSpaceParentPath();
String spp = Optional.ofNullable(spaceParentPath).orElse("");
return Stream.of(spp.split(","));
}).collect(Collectors.toList());
spaceIdList.add("-1");
List<PlatSpace> platSpaces = platSpaceService.listByIds(spaceIdList);
Map<String, String> spaceIdNameMap = platSpaces.stream().collect(Collectors.toMap(BaseEntity::getId, vo -> vo.getName(), (v1, v2) -> v1));
for (PlatDeviceListVO record : voList) {
String spaceParentPath = record.getSpaceParentPath();
if(StringUtils.isNotBlank(spaceParentPath)){
String spaceNameJoin = Stream.of(spaceParentPath.split(",")).map(vo -> spaceIdNameMap.get(vo)).collect(Collectors.joining("-"));
String spaceName = spaceNameJoin + "-" + record.getSpaceName() + "-" + record.getRoomName();
if(StringUtils.isNotBlank(record.getBedName())){
spaceName = spaceName +"-"+record.getBedName();
}
record.setSpaceName(spaceName);
}
}
JoinUtil.join(voList, platOrgService, PlatDeviceListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName());
});
JoinUtil.joinSplit(voList, platOrgService, PlatDeviceListVO::getOrgPath, PlatOrg::getId, (d, o) -> {
d.setOrgPathName(StreamUtil.join(o, PlatOrg::getName));
});
return PageUtil.toPageVO(voList, page);
}
private List<PlatOrg> getAncestorsOrgList(List<PlatOrg> orgs, Set<String> parentOrgIds) { private List<PlatOrg> getAncestorsOrgList(List<PlatOrg> orgs, Set<String> parentOrgIds) {
orgs = orgs.stream().filter(t->parentOrgIds.contains(t.getId())).collect(Collectors.toList()); orgs = orgs.stream().filter(t->parentOrgIds.contains(t.getId())).collect(Collectors.toList());
Set<String> ancestorsOrgIdList = new HashSet<>(); Set<String> ancestorsOrgIdList = new HashSet<>();
...@@ -491,7 +585,12 @@ public class DataScreenServiceImpl implements DataScreenService { ...@@ -491,7 +585,12 @@ public class DataScreenServiceImpl implements DataScreenService {
if (elderIds.size() > 0) { if (elderIds.size() > 0) {
if (platElderMap.get(elderIds.get(0)) != null) { if (platElderMap.get(elderIds.get(0)) != null) {
PlatAlarmRecordStatisticsVo statisticsVo = BeanDtoVoUtils.convert(record, PlatAlarmRecordStatisticsVo.class); PlatAlarmRecordStatisticsVo statisticsVo = BeanDtoVoUtils.convert(record, PlatAlarmRecordStatisticsVo.class);
statisticsVo.setSpaceId(platElderMap.get(elderIds.get(0)).getSpaceId()); if(StringUtil.isNotEmpty(platElderMap.get(elderIds.get(0)).getSpacePath())){
String spacePath = platElderMap.get(elderIds.get(0)).getSpacePath();
String spaceId = Arrays.asList(spacePath.split(",")).get(0);
statisticsVo.setSpaceId(spaceId);
}
statisticsVos.add(statisticsVo); statisticsVos.add(statisticsVo);
} }
} }
......
package com.makeit.service.platform.device; package com.makeit.service.platform.device;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO; import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO; import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.dto.platform.device.PlatDeviceQueryDTO; import com.makeit.dto.platform.device.PlatDeviceQueryDTO;
...@@ -62,4 +64,6 @@ public interface PlatDeviceService extends IService<PlatDevice> { ...@@ -62,4 +64,6 @@ public interface PlatDeviceService extends IService<PlatDevice> {
List<DeviceProperties> readDeviceProperties(PlatDeviceAttrWechatDTO dto); List<DeviceProperties> readDeviceProperties(PlatDeviceAttrWechatDTO dto);
List<PlatDevice> productList(PlatDeviceQueryDTO dto); List<PlatDevice> productList(PlatDeviceQueryDTO dto);
Page<PlatDeviceListVO> getDevices(PlatDataScreenQueryDTO dto, Page<PlatDevice> p);
} }
...@@ -49,4 +49,5 @@ public interface PlatElderDayReportDayService { ...@@ -49,4 +49,5 @@ public interface PlatElderDayReportDayService {
List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO); List<PlatElderBehaviorDistributionVO> behaviorDistribution(PlatElderReportDTO platElderIdDTO);
void elderCoordinateListAnalysisTask();
} }
...@@ -13,7 +13,6 @@ import com.makeit.module.iot.enums.DeviceInfoContentFallEnum; ...@@ -13,7 +13,6 @@ import com.makeit.module.iot.enums.DeviceInfoContentFallEnum;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe; import com.makeit.module.iot.vo.breathe.DeviceInfoContentBreathe;
import com.makeit.module.iot.vo.fall.DeviceInfoContentFall; import com.makeit.module.iot.vo.fall.DeviceInfoContentFall;
import com.makeit.module.iot.vo.space.DeviceInfoContentSpace;
import com.makeit.service.platform.alarm.PlatAlarmRecordService; import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.alarm.PlatDayDurationRecordService; import com.makeit.service.platform.alarm.PlatDayDurationRecordService;
import com.makeit.service.platform.elder.*; import com.makeit.service.platform.elder.*;
...@@ -26,11 +25,11 @@ import com.makeit.utils.time.LocalDateTimeUtils; ...@@ -26,11 +25,11 @@ import com.makeit.utils.time.LocalDateTimeUtils;
import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO; import com.makeit.vo.platform.elder.realtime.PlatElderCoordinateVO;
import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO; import com.makeit.vo.platform.elder.realtime.PlatElderRealTimeHeartRespiratoryVO;
import com.makeit.vo.platform.elder.report.day.*; import com.makeit.vo.platform.elder.report.day.*;
import org.apache.commons.lang3.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
...@@ -353,7 +352,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe ...@@ -353,7 +352,13 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
} }
@Override @Override
public void elderCoordinateListAnalysisTask() {
}
@Override
public List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end) { public List<PlatElderCoordinateVO> coordinateList(String elderId, String deviceId, LocalDateTime start, LocalDateTime end) {
List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(elderId, deviceId); List<PlatDevice> platDeviceList = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(platDeviceList)) { if (CollectionUtils.isEmpty(platDeviceList)) {
...@@ -362,14 +367,49 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe ...@@ -362,14 +367,49 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
List<PlatElderCoordinateVO> voList = new ArrayList<>(10); List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
platDeviceList.forEach(e -> { // TODO 暂时为假数据
List<DeviceInfoContentSpace> spaceList = iotProductDeviceService.getDeviceLogByTimeRangeSpace(e.getOriDeviceId(), 2 * 24 * 3600, start, end); int count = 20;
for (PlatDevice platDevice : platDeviceList) {
for (int i = 0; i < count; i++) {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
int distance = RandomUtils.nextInt(1, 1000);
int angle = RandomUtils.nextInt(1,180) -120;
// vo.setX(new BigDecimal(distance).multiply(new BigDecimal(Math.cos(angle) + "")).setScale(2, RoundingMode.HALF_UP));
// vo.setY(new BigDecimal(distance).multiply(new BigDecimal(Math.sin(angle) + "")).setScale(2, RoundingMode.HALF_UP));
vo.setDistance(distance);
vo.setAngle(angle);
vo.setDeviceId(platDevice.getId());
vo.setOriDeviceId(platDevice.getOriDeviceId());
voList.add(vo);
}
}
return voList;
/*
List<PlatDevice> platDeviceListSpace = platElderRealTimeService.getSpaceDevice(elderId, deviceId);
List<PlatDevice> platDeviceListFall = platElderRealTimeService.getFallDevice(elderId, deviceId);
if (CollectionUtils.isEmpty(platDeviceListSpace) && CollectionUtils.isEmpty(platDeviceListFall)) {
return new ArrayList<>(10);
}
List<PlatElderCoordinateVO> voList = new ArrayList<>(10);
platDeviceListSpace.forEach(e -> {
List<DeviceInfoContentSpace> spaceList = iotProductDeviceService.getDeviceLogByTimeRangeSpace(e.getOriDeviceId(), 24 * 3600, start, end);
voList.addAll(StreamUtil.map(spaceList, i -> { voList.addAll(StreamUtil.map(spaceList, i -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO(); 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)); // 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));
vo.setDistance(i.getProperties().getDistance()); vo.setDistance(i.getProperties().getDistance());
vo.setAngle(i.getProperties().getAngle()); vo.setAngle(i.getProperties().getAngle());
...@@ -384,7 +424,27 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe ...@@ -384,7 +424,27 @@ public class PlatElderDayReportDayServiceImpl implements PlatElderDayReportDaySe
}); });
platDeviceListFall.forEach(e -> {
List<DeviceInfoContentFall> fallList = iotProductDeviceService.getDeviceLogByTimeRangeFall(e.getOriDeviceId(), 2 * 24 * 3600, start, end);
voList.addAll(StreamUtil.map(fallList, i -> {
PlatElderCoordinateVO vo = new PlatElderCoordinateVO();
vo.setTrack(i.getProperties().getTrack());
vo.setDeviceId(e.getId());
vo.setOriDeviceId(e.getOriDeviceId());
return vo;
})
);
});
return voList; return voList;
*/
} }
@Override @Override
......
...@@ -2,6 +2,7 @@ package com.makeit.service.platform.elder.impl; ...@@ -2,6 +2,7 @@ package com.makeit.service.platform.elder.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.dto.platform.elder.PlatElderReportDTO; import com.makeit.dto.platform.elder.PlatElderReportDTO;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.*; import com.makeit.entity.platform.elder.*;
...@@ -150,9 +151,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -150,9 +151,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
public PlatElderComprehensiveEvaluationVO comprehensiveEvaluationInternal(PlatElderSleepEvaluationVO platElderSleepEvaluationVO, PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO) { public PlatElderComprehensiveEvaluationVO comprehensiveEvaluationInternal(PlatElderSleepEvaluationVO platElderSleepEvaluationVO, PlatElderHeartRespiratoryEvaluationVO platElderHeartRespiratoryEvaluationVO) {
PlatElderComprehensiveEvaluationVO platElderComprehensiveEvaluationVO = new PlatElderComprehensiveEvaluationVO(); PlatElderComprehensiveEvaluationVO platElderComprehensiveEvaluationVO = new PlatElderComprehensiveEvaluationVO();
platElderComprehensiveEvaluationVO.setScore((platElderSleepEvaluationVO.getScore() + platElderHeartRespiratoryEvaluationVO.getScore()) / 2); int sleepScore = 0;
if (platElderSleepEvaluationVO != null) {
sleepScore = platElderSleepEvaluationVO.getScore();
}
platElderComprehensiveEvaluationVO.setScore((sleepScore + platElderHeartRespiratoryEvaluationVO.getScore()) / 2);
EvaluateReportVO evaluateReportVO = saasElderReportConfigService.getByScore(platElderSleepEvaluationVO.getScore()); EvaluateReportVO evaluateReportVO = saasElderReportConfigService.getByScore(sleepScore);
if (evaluateReportVO != null) { if (evaluateReportVO != null) {
platElderComprehensiveEvaluationVO.setEvaluation(evaluateReportVO.getEvaluate()); platElderComprehensiveEvaluationVO.setEvaluation(evaluateReportVO.getEvaluate());
} }
...@@ -380,13 +385,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -380,13 +385,13 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate); List<LocalDate> dateList = LocalDateTimeUtils.getDateSeries(weekStartDate, weekEndDate);
String deviceId = null; String deviceId = null;
String oriDeviceId = null; //String oriDeviceId = null;
PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId()); PlatDevice platDevice = platElderRealTimeService.getBreathDevice(platElderIdDTO.getElderId(), platElderIdDTO.getDeviceId());
if (platDevice != null) { if (platDevice != null) {
deviceId = platDevice.getId(); deviceId = platDevice.getId();
oriDeviceId = platDevice.getOriDeviceId(); //oriDeviceId = platDevice.getOriDeviceId();
} }
LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda(); LambdaQueryWrapper<PlatElderBreatheDayStat> lambdaQueryWrapper = new QueryWrapper<PlatElderBreatheDayStat>().lambda();
...@@ -395,25 +400,25 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek ...@@ -395,25 +400,25 @@ public class PlatElderDayReportWeekServiceImpl implements PlatElderDayReportWeek
lambdaQueryWrapper.le(PlatElderBreatheDayStat::getDay, weekEndDate); lambdaQueryWrapper.le(PlatElderBreatheDayStat::getDay, weekEndDate);
String finalDeviceId = deviceId; String finalDeviceId = deviceId;
String finalOriDeviceId = oriDeviceId; //String finalOriDeviceId = oriDeviceId;
lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) || StringUtils.isNotBlank(finalOriDeviceId), qw -> { lambdaQueryWrapper.and(StringUtils.isNotBlank(platElderIdDTO.getElderId()) || StringUtils.isNotBlank(finalDeviceId) /*|| StringUtils.isNotBlank(finalOriDeviceId)*/, qw -> {
if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) { if (StringUtils.isNotBlank(platElderIdDTO.getElderId())) {
qw.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId()); qw.eq(PlatElderBreatheDayStat::getElderId, platElderIdDTO.getElderId());
} }
if (StringUtils.isNotBlank(finalDeviceId)) { if (StringUtils.isNotBlank(finalDeviceId)) {
qw.or().eq(PlatElderBreatheDayStat::getDeviceId, finalDeviceId); qw.or().eq(PlatElderBreatheDayStat::getDeviceId, finalDeviceId);
} }
if (StringUtils.isNotBlank(finalOriDeviceId)) { // if (StringUtils.isNotBlank(finalOriDeviceId)) {
qw.or().eq(PlatElderBreatheDayStat::getOriDeviceId, finalOriDeviceId); // qw.or().eq(PlatElderBreatheDayStat::getOriDeviceId, finalOriDeviceId);
} // }
}); });
lambdaQueryWrapper.eq(StringUtils.isNotBlank(platElderIdDTO.getTenantId()), BaseBusEntity::getTenantId,platElderIdDTO.getTenantId());
lambdaQueryWrapper.orderByAsc(PlatElderBreatheDayStat::getDay); lambdaQueryWrapper.orderByAsc(PlatElderBreatheDayStat::getDay);
List<PlatElderBreatheDayStat> breatheDayStatList = platElderBreatheDayStatService.list(lambdaQueryWrapper); List<PlatElderBreatheDayStat> breatheDayStatList = platElderBreatheDayStatService.list(lambdaQueryWrapper);
Map<LocalDate, PlatElderBreatheDayStat> map = StreamUtil.toMap(breatheDayStatList, PlatElderBreatheDayStat::getDay); Map<LocalDate, PlatElderBreatheDayStat> map = StreamUtil.toMapDep(breatheDayStatList, PlatElderBreatheDayStat::getDay);
List<PlatElderRealTimeHeartRespiratoryWeekVO> voList = new ArrayList<>(10); List<PlatElderRealTimeHeartRespiratoryWeekVO> voList = new ArrayList<>(10);
......
...@@ -127,9 +127,11 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport ...@@ -127,9 +127,11 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport
LocalDate end = LocalDateTimeUtils.getMonthMax(start); LocalDate end = LocalDateTimeUtils.getMonthMax(start);
List<PlatElderReportMonth> monthList = list(new QueryWrapper<PlatElderReportMonth>().lambda() List<PlatElderReportMonth> monthList = list(new QueryWrapper<PlatElderReportMonth>().lambda()
.eq(PlatElderReportMonth::getElderId, platElderIdDTO.getElderId()) .eq(StringUtils.isNotBlank(platElderIdDTO.getElderId()), PlatElderReportMonth::getElderId, platElderIdDTO.getElderId())
.eq(StringUtils.isNotBlank(platElderIdDTO.getDeviceId()), PlatElderReportMonth::getBreatheDeviceId, platElderIdDTO.getDeviceId())
.ge(PlatElderReportMonth::getDay, start) .ge(PlatElderReportMonth::getDay, start)
.le(PlatElderReportMonth::getDay, end) .le(PlatElderReportMonth::getDay, end)
.orderByAsc(PlatElderReportMonth::getDay)
); );
List<PlatElderReportMonthVO> voList = BeanDtoVoUtils.listVo(monthList, PlatElderReportMonthVO.class); List<PlatElderReportMonthVO> voList = BeanDtoVoUtils.listVo(monthList, PlatElderReportMonthVO.class);
...@@ -179,6 +181,10 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport ...@@ -179,6 +181,10 @@ public class PlatElderReportMonthServiceImpl extends ServiceImpl<PlatElderReport
List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd); List<DeviceInfoContentBreathe> breatheList = iotProductDeviceService.getDeviceLogByTimeRangeBreathe(platDevice.getOriDeviceId(), 2 * 24 * 3600, yesStart, yesEnd);
if (CollectionUtils.isNotEmpty(breatheList)) { if (CollectionUtils.isNotEmpty(breatheList)) {
reportMonth.setBreatheDeviceId(platDevice.getId());
reportMonth.setBreatheOriDeviceId(platDevice.getOriDeviceId());
reportMonth.setHeartRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size())); reportMonth.setHeartRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getHr(), 0L, Long::sum) / breatheList.size()));
reportMonth.setRespiratoryRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size())); reportMonth.setRespiratoryRate((int) (StreamUtil.reduce(breatheList, i -> (long) i.getProperties().getBr(), 0L, Long::sum) / breatheList.size()));
} }
......
...@@ -114,7 +114,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -114,7 +114,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
.orderByDesc(PlatElder::getId); .orderByDesc(PlatElder::getId);
} }
private void fill(List<PlatElderListVO> list){ private void fill(List<PlatElderListVO> list) {
JoinUtil.join(list, platOrgService, PlatElderListVO::getOrgId, PlatOrg::getId, (d, o) -> { JoinUtil.join(list, platOrgService, PlatElderListVO::getOrgId, PlatOrg::getId, (d, o) -> {
d.setOrgName(o.getName()); d.setOrgName(o.getName());
}); });
...@@ -191,6 +192,15 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -191,6 +192,15 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
List<PlatElder> dbList = list(lambdaQueryWrapper(dto)); List<PlatElder> dbList = list(lambdaQueryWrapper(dto));
dbList.forEach(e->{
if (StringUtils.isNotBlank(e.getHomeAddressDetail())) {
e.setHomeAddressDetail(e.getHomeAddress());
}
if (StringUtils.isNotBlank(e.getRegisterAddressDetail())) {
e.setRegisterAddressDetail(e.getRegisterAddress());
}
});
List<PlatElderHealthInfo> healthInfoList = platElderHealthInfoService.list(new QueryWrapper<PlatElderHealthInfo>().lambda() List<PlatElderHealthInfo> healthInfoList = platElderHealthInfoService.list(new QueryWrapper<PlatElderHealthInfo>().lambda()
.in(PlatElderHealthInfo::getElderId, StreamUtil.mapId(dbList, PlatElder::getId))); .in(PlatElderHealthInfo::getElderId, StreamUtil.mapId(dbList, PlatElder::getId)));
Map<String, PlatElderHealthInfo> healthInfoMap = StreamUtil.toMap(healthInfoList, PlatElderHealthInfo::getElderId); Map<String, PlatElderHealthInfo> healthInfoMap = StreamUtil.toMap(healthInfoList, PlatElderHealthInfo::getElderId);
...@@ -576,9 +586,23 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -576,9 +586,23 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
} }
private void addressToDetail(PlatElderDTOVO dto) {
if (StringUtils.isNotBlank(dto.getHomeAddressDetail())) {
dto.setHomeAddressDetail(dto.getHomeAddress());
}
if (StringUtils.isNotBlank(dto.getRegisterAddressDetail())) {
dto.setRegisterAddressDetail(dto.getRegisterAddress());
}
}
@Transactional @Transactional
@Override @Override
public void addAll(PlatElderDTOVO dto) { public void addAll(PlatElderDTOVO dto) {
addressToDetail(dto);
check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class)); check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class));
PlatElder platElder = BeanDtoVoUtils.convert(dto, PlatElder.class); PlatElder platElder = BeanDtoVoUtils.convert(dto, PlatElder.class);
...@@ -665,6 +689,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -665,6 +689,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
@Transactional @Transactional
public void edit(PlatElderDTOVO dto) { public void edit(PlatElderDTOVO dto) {
addressToDetail(dto);
check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class)); check(BeanDtoVoUtils.convert(dto, PlatElderAddDTO.class));
PlatElder db = getById(dto.getId()); PlatElder db = getById(dto.getId());
...@@ -700,6 +726,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -700,6 +726,8 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
PlatElder platElder = getById(id); PlatElder platElder = getById(id);
PlatElderDTOVO vo = BeanDtoVoUtils.convert(platElder, PlatElderDTOVO.class); PlatElderDTOVO vo = BeanDtoVoUtils.convert(platElder, PlatElderDTOVO.class);
addressToDetail(vo);
FileUtil.convert(Arrays.asList(vo), PlatElderDTOVO::getAvatar, (e, f) -> { FileUtil.convert(Arrays.asList(vo), PlatElderDTOVO::getAvatar, (e, f) -> {
e.setAvatar(f.getFullUrl()); e.setAvatar(f.getFullUrl());
}); });
...@@ -892,6 +920,9 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -892,6 +920,9 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
public List<PlatDevice> getSpaceDevice(String id) { public List<PlatDevice> getSpaceDevice(String id) {
PlatElder platElder = getById(id); PlatElder platElder = getById(id);
if (platElder == null) {
return null;
}
if (StringUtils.isBlank(platElder.getBedId())) { if (StringUtils.isBlank(platElder.getBedId())) {
return null; return null;
} }
...@@ -903,6 +934,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -903,6 +934,10 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
public List<PlatDevice> getFallDevice(String id) { public List<PlatDevice> getFallDevice(String id) {
PlatElder platElder = getById(id); PlatElder platElder = getById(id);
if (platElder == null) {
return null;
}
if (StringUtils.isBlank(platElder.getBedId())) { if (StringUtils.isBlank(platElder.getBedId())) {
return null; return null;
} }
......
...@@ -98,7 +98,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -98,7 +98,11 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
public void elderSleepSleepAnalysisTask() { public void elderSleepSleepAnalysisTask() {
List<String> dayHourRangeList = getLastDayHourRange(); List<String> dayHourRangeList = getLastDayHourRange();
String currentDate = DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN); Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date previousDate = calendar.getTime();
String currentDate = DateUtil.format(previousDate, DatePattern.NORM_DATE_PATTERN);
SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda() SaasSleepAnalysisModel analysisModel = saasSleepAnalysisModelService.getOne(new QueryWrapper<SaasSleepAnalysisModel>().lambda()
.orderByDesc(BaseEntity::getCreateBy) .orderByDesc(BaseEntity::getCreateBy)
...@@ -157,8 +161,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -157,8 +161,8 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
continue; continue;
} }
String tenantId = elder.getTenantId(); String tenantId = elder.getTenantId();
/* String reportStartTime = ""; String reportStartTime = "";
String reportEndTime = "";*/ String reportEndTime = "";
for (String hourRange : dayHourRangeList) { for (String hourRange : dayHourRangeList) {
String[] hourRangeArray = hourRange.split("~"); String[] hourRangeArray = hourRange.split("~");
List<DeviceOperationLogEntity> deviceOperationLogEntities = productDeviceService.getDeviceLogByTimeRange(platDevice.getOriDeviceId(), "reportProperty", 5000, hourRangeArray[0], hourRangeArray[1]); List<DeviceOperationLogEntity> deviceOperationLogEntities = productDeviceService.getDeviceLogByTimeRange(platDevice.getOriDeviceId(), "reportProperty", 5000, hourRangeArray[0], hourRangeArray[1]);
...@@ -180,10 +184,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -180,10 +184,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
Map<String, AnalysisVO> statisticsMap = Maps.newHashMap(); Map<String, AnalysisVO> statisticsMap = Maps.newHashMap();
List<DeviceInfoContentBreathe> deviceInfoContentBreathes; List<DeviceInfoContentBreathe> deviceInfoContentBreathes;
for (Map.Entry<String, List<DeviceInfoContentBreathe>> entry : minuteMap.entrySet()) { for (Map.Entry<String, List<DeviceInfoContentBreathe>> entry : minuteMap.entrySet()) {
/* if (StringUtils.isEmpty(reportStartTime)) { if (StringUtils.isEmpty(reportStartTime)) {
reportStartTime = entry.getKey(); reportStartTime = entry.getKey();
} }
reportEndTime = entry.getKey();*/ reportEndTime = entry.getKey();
deviceInfoContentBreathes = entry.getValue(); deviceInfoContentBreathes = entry.getValue();
DeviceInfoContentBreathe.Properties breatheProperties; DeviceInfoContentBreathe.Properties breatheProperties;
...@@ -500,10 +504,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -500,10 +504,10 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
int timeHourRange = 24; int timeHourRange = 24;
/* if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) { if (StringUtils.isNotEmpty(reportStartTime) && StringUtils.isNotEmpty(reportEndTime)) {
Long durationRange = getDurationRange(reportStartTime, reportEndTime); Long durationRange = getDurationRange(reportStartTime, reportEndTime);
timeHourRange = (int) (durationRange / 60); timeHourRange = (int) (durationRange / 60);
}*/ }
// 判断是否满足配置的呼吸心率异常类型 // 判断是否满足配置的呼吸心率异常类型
BigDecimal dayBrStopRate = brStopCount == 0 ? BigDecimal.ZERO : new BigDecimal(timeHourRange).divide(new BigDecimal(brStopCount), 2, RoundingMode.HALF_UP); BigDecimal dayBrStopRate = brStopCount == 0 ? BigDecimal.ZERO : new BigDecimal(timeHourRange).divide(new BigDecimal(brStopCount), 2, RoundingMode.HALF_UP);
...@@ -610,7 +614,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -610,7 +614,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
platElderBreatheAbnormal.setTenantId(tenantId); platElderBreatheAbnormal.setTenantId(tenantId);
platElderBreatheAbnormalList.add(platElderBreatheAbnormal); platElderBreatheAbnormalList.add(platElderBreatheAbnormal);
} }
// platElderBreatheAbnormalService.saveBatch(platElderBreatheAbnormalList); //platElderBreatheAbnormalService.saveBatch(platElderBreatheAbnormalList);
int totalActionCount = 0; int totalActionCount = 0;
...@@ -1030,7 +1034,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -1030,7 +1034,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleep.setTenantId(tenantId); elderSleep.setTenantId(tenantId);
} }
// TODO 起床时间和入睡时间 // TODO 起床时间和入睡时间
//platElderSleepService.saveBatch(elderSleepList); platElderSleepService.saveBatch(elderSleepList);
EvaluateReportVO elderReport = saasElderReportConfigService.getByScore(totalScore); EvaluateReportVO elderReport = saasElderReportConfigService.getByScore(totalScore);
...@@ -1048,7 +1052,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper, ...@@ -1048,7 +1052,7 @@ public class PlatElderSleepServiceImpl extends ServiceImpl<PlatElderSleepMapper,
elderSleepAnalysis.setSleepResult(sleepReport.getResult()); elderSleepAnalysis.setSleepResult(sleepReport.getResult());
elderSleepAnalysis.setTenantId(tenantId); elderSleepAnalysis.setTenantId(tenantId);
elderSleepAnalysis.setSleepEvaluate(elderReport == null ? "" : elderReport.getEvaluate()); elderSleepAnalysis.setSleepEvaluate(elderReport == null ? "" : elderReport.getEvaluate());
// platElderSleepAnalysisService.save(elderSleepAnalysis); platElderSleepAnalysisService.save(elderSleepAnalysis);
} }
} }
......
...@@ -55,4 +55,6 @@ public interface PlatRoomBedDeviceService extends IService<PlatRoomBedDevice> { ...@@ -55,4 +55,6 @@ public interface PlatRoomBedDeviceService extends IService<PlatRoomBedDevice> {
List<PlatDevice> getSpaceDevice(String bedId); List<PlatDevice> getSpaceDevice(String bedId);
List<PlatDevice> getFallDevice(String bedId); List<PlatDevice> getFallDevice(String bedId);
PageVO<PlatDeviceDTO> pageBindDevice(PageReqDTO<PlatBedDeviceQueryDTO> page);
} }
...@@ -66,4 +66,8 @@ public interface PlatRoomService extends IService<PlatRoom> { ...@@ -66,4 +66,8 @@ public interface PlatRoomService extends IService<PlatRoom> {
List<WorkStationInstitutionRoomVO> workStationList(WorkStationQueryDTO dto); List<WorkStationInstitutionRoomVO> workStationList(WorkStationQueryDTO dto);
Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> objectPage, WorkStationQueryDTO data); Page<WorkStationInstitutionRoomVO> workStationPage(Page<WorkStationQueryDTO> objectPage, WorkStationQueryDTO data);
List<PlatSpaceAndRoomVO> spaceList(List<String> orgIds);
List<PlatSpaceAndRoomVO> roomList(List<String> orgIds);
} }
...@@ -209,7 +209,9 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM ...@@ -209,7 +209,9 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
@Override @Override
public PlatDevice getBreathDevice(String bedId) { public PlatDevice getBreathDevice(String bedId) {
PlatRoomBedDevice device = getOne(new QueryWrapper<PlatRoomBedDevice>().lambda() PlatRoomBedDevice device = getOne(new QueryWrapper<PlatRoomBedDevice>().lambda()
.eq(PlatRoomBedDevice::getBedId, bedId)); .eq(PlatRoomBedDevice::getBedId, bedId)
.last("limit 1")
);
if (device == null) { if (device == null) {
return null; return null;
...@@ -254,4 +256,46 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM ...@@ -254,4 +256,46 @@ public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceM
public List<PlatDevice> getFallDevice(String bedId) { public List<PlatDevice> getFallDevice(String bedId) {
return getDeviceInternal(bedId, PlatDeviceEnum.CategoryEnum.FALL.getValue()); return getDeviceInternal(bedId, PlatDeviceEnum.CategoryEnum.FALL.getValue());
} }
@Override
public PageVO<PlatDeviceDTO> pageBindDevice(PageReqDTO<PlatBedDeviceQueryDTO> pageReqDTO) {
PlatBedDeviceQueryDTO dto = pageReqDTO.getData();
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(PlatRoomBedDevice::getRoomId, dto.getRoomId());
queryWrapper1.eq(StringUtil.isNotEmpty(dto.getBedId()), PlatRoomBedDevice::getBedId, dto.getBedId());
List<PlatRoomBedDevice> list = list(queryWrapper1);
List<String> listEquipmentIds = list.stream().map(item -> item.getDeviceId()).collect(Collectors.toList());
List<String> listBedIds = list.stream().map(item -> item.getBedId()).collect(Collectors.toList());
LambdaQueryWrapper<PlatBed> queryWrapper2 = new LambdaQueryWrapper<>();
queryWrapper2.in(PlatBed::getId, listBedIds);
List<PlatBed> listBeds = platBedService.list(queryWrapper2);
Map<String, String> map = listBeds.stream().collect(Collectors.toMap(PlatBed::getId, PlatBed::getName, (k1, k2) -> k1));
Map<String, String> mapName = new HashMap<>(20);
Map<String, String> mapBedId = new HashMap<>(20);
list.forEach(item -> {
if (map.containsKey(item.getBedId())) {
mapName.put(item.getDeviceId(), map.get(item.getBedId()));
mapBedId.put(item.getDeviceId(), item.getBedId());
}
});
if (!listEquipmentIds.isEmpty()) {
LambdaQueryWrapper<PlatDevice> queryWrapper = new LambdaQueryWrapper<>();
//queryWrapper.eq(PlatDevice::getCategory, PlatDeviceEnum.CategoryEnum.HEART);
queryWrapper.in(PlatDevice::getId, listEquipmentIds);
Page<PlatDevice> pages = platDeviceService.page(p, queryWrapper);
List<PlatDeviceDTO> data = BeanDtoVoUtils.listVo(pages.getRecords(), PlatDeviceDTO.class);
data.forEach(item -> {
item.setBedName(mapName.get(item.getId()));
item.setBedId(mapBedId.get(item.getId()));
});
return PageUtil.toPageVO(data, pages);
}else {
return new PageVO<>();
}
}
} }
...@@ -165,8 +165,13 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService { ...@@ -165,8 +165,13 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
return new ArrayList<>(); return new ArrayList<>();
} }
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList()); List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
//获取空间及房间
List<PlatSpaceAndRoomVO> list = platRoomService.spaceAndRoomList(orgIds); //获取空间
List<PlatSpaceAndRoomVO> spaceList = platRoomService.spaceList(orgIds);
List<PlatSpaceAndRoomVO> roomList = platRoomService.roomList(orgIds);
List<PlatSpaceAndRoomVO> list = new ArrayList<>();
list.addAll(spaceList);
list.addAll(roomList);
//父级 //父级
List<PlatSpaceAndRoomVO> listParent = list.stream().filter(item-> StringUtil.isEmpty(item.getParentId())).collect(Collectors.toList()); List<PlatSpaceAndRoomVO> listParent = list.stream().filter(item-> StringUtil.isEmpty(item.getParentId())).collect(Collectors.toList());
......
...@@ -179,5 +179,14 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -179,5 +179,14 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
return baseMapper.workStationPage(page,params); return baseMapper.workStationPage(page,params);
} }
@Override
public List<PlatSpaceAndRoomVO> spaceList(List<String> orgIds) {
return baseMapper.spaceList(orgIds);
}
@Override
public List<PlatSpaceAndRoomVO> roomList(List<String> orgIds) {
return baseMapper.roomList(orgIds); }
} }
...@@ -39,6 +39,8 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -39,6 +39,8 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.*; import java.util.*;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -413,6 +415,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -413,6 +415,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
Integer errorCount = 0; Integer errorCount = 0;
Integer successCount = 0; Integer successCount = 0;
boolean errorFlag = false; boolean errorFlag = false;
Pattern pattern = Pattern.compile("^\\d+$");
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
PlatSpaceImportDTO item = list.get(i); PlatSpaceImportDTO item = list.get(i);
...@@ -449,6 +452,17 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -449,6 +452,17 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
} }
listKey.add(key+"-"+item.getRoomName()); listKey.add(key+"-"+item.getRoomName());
if(StringUtil.isNotEmpty(item.getBedNumber())){
Matcher matcher = pattern.matcher(item.getBedNumber());
// 进行匹配
if(!matcher.find()){
errorVoList.add(new ExcelErrorVo(i + 3, excelField.get(4), "床位数量格式错误"));
}
}
if (errorFlag) { if (errorFlag) {
errorCount++; errorCount++;
} else { } else {
...@@ -526,7 +540,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -526,7 +540,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
String threeKey = secondId + "-" + item.getUnit(); String threeKey = secondId + "-" + item.getUnit();
if (!childrenIdMap.containsKey(threeKey)) { if (!childrenIdMap.containsKey(threeKey)) {
PlatSpace platSpace = new PlatSpace(); PlatSpace platSpace = new PlatSpace();
platSpace.setName(item.getBuilding()); platSpace.setName(item.getUnit());
platSpace.setType(PlatSpaceEnum.TypeEnum.UNIT.getValue()); platSpace.setType(PlatSpaceEnum.TypeEnum.UNIT.getValue());
platSpace.setOrgId(orgId); platSpace.setOrgId(orgId);
platSpace.setParentId(secondId); platSpace.setParentId(secondId);
...@@ -555,7 +569,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -555,7 +569,7 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
String fourKey = threeId + "-" + item.getFloor(); String fourKey = threeId + "-" + item.getFloor();
if (!childrenIdMap.containsKey(fourKey)) { if (!childrenIdMap.containsKey(fourKey)) {
PlatSpace platSpace = new PlatSpace(); PlatSpace platSpace = new PlatSpace();
platSpace.setName(item.getBuilding()); platSpace.setName(item.getFloor());
platSpace.setType(PlatSpaceEnum.TypeEnum.FLOOR.getValue()); platSpace.setType(PlatSpaceEnum.TypeEnum.FLOOR.getValue());
platSpace.setOrgId(orgId); platSpace.setOrgId(orgId);
platSpace.setParentId(threeId); platSpace.setParentId(threeId);
...@@ -572,8 +586,8 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace ...@@ -572,8 +586,8 @@ public class PlatSpaceServiceImpl extends ServiceImpl<PlatSpaceMapper, PlatSpace
//房间 //房间
PlatRoomDTO platRoomDTO = new PlatRoomDTO(); PlatRoomDTO platRoomDTO = new PlatRoomDTO();
platRoomDTO.setName(item.getRoomName()); platRoomDTO.setName(item.getRoomName());
if(item.getBedNumber()!=null){ if(StringUtil.isNotEmpty(item.getBedNumber())){
platRoomDTO.setBedNumber(item.getBedNumber()); platRoomDTO.setBedNumber(Integer.valueOf(item.getBedNumber()));
}else { }else {
platRoomDTO.setBedNumber(0); platRoomDTO.setBedNumber(0);
} }
......
...@@ -178,10 +178,18 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -178,10 +178,18 @@ public class WorkStationServiceImpl implements WorkStationService {
} }
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList()); List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds); dto.setOrgIds(orgIds);
}else {
List<PlatOrg> orgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getId, dto.getOrgIds()));
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
}
dto.setOrgIds(orgIds);
} }
if (dto.getSpaceIds().isEmpty()) { if (dto.getSpaceIds().isEmpty()) {
spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda() spaces = platSpaceService.list(new QueryWrapper<PlatSpace>().lambda()
.in(PlatSpace::getOrgId, dto.getOrgIds())); .in(PlatSpace::getOrgId, dto.getOrgIds()));
if (spaces.isEmpty()) { if (spaces.isEmpty()) {
...@@ -475,6 +483,15 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -475,6 +483,15 @@ public class WorkStationServiceImpl implements WorkStationService {
} }
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList()); List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
dto.setOrgIds(orgIds); dto.setOrgIds(orgIds);
}else {
List<PlatOrg> orgs = platOrgService.list(new QueryWrapper<PlatOrg>().lambda()
.eq(PlatOrg::getId, dto.getOrgIds()));
List<String> orgIds = orgs.stream().filter(t->PlatOrgEnum.OrgTypeEnum.HOME.getValue().equals(t.getType()))
.map(PlatOrg::getId).collect(Collectors.toList());
if(orgIds.isEmpty()){
return new PageVO<>();
}
dto.setOrgIds(orgIds);
} }
if (dto.getSpaceIds().isEmpty()) { if (dto.getSpaceIds().isEmpty()) {
...@@ -561,7 +578,7 @@ public class WorkStationServiceImpl implements WorkStationService { ...@@ -561,7 +578,7 @@ public class WorkStationServiceImpl implements WorkStationService {
} }
List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList()); List<String> orgIds = orgs.stream().map(PlatOrg::getId).collect(Collectors.toList());
if(!dto.getOrgIds().isEmpty()){ if(dto.getOrgIds()!=null && !dto.getOrgIds().isEmpty()){
orgIds = dto.getOrgIds(); orgIds = dto.getOrgIds();
} }
......
...@@ -94,7 +94,6 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde ...@@ -94,7 +94,6 @@ public class PlatElderChildrenInfoUserLoginWechatServiceImpl implements PlatElde
TokenUtil.wechatLogin(token, wechatUserVo); TokenUtil.wechatLogin(token, wechatUserVo);
return wechatUserVo; return wechatUserVo;
} }
......
...@@ -14,6 +14,7 @@ import com.makeit.module.iot.vo.DeviceState; ...@@ -14,6 +14,7 @@ import com.makeit.module.iot.vo.DeviceState;
import com.makeit.module.system.service.SysDictionaryCategoryService; import com.makeit.module.system.service.SysDictionaryCategoryService;
import com.makeit.module.system.vo.DictionaryVo; import com.makeit.module.system.vo.DictionaryVo;
import com.makeit.service.platform.device.PlatDeviceService; import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.elder.PlatElderDayReportDayService;
import com.makeit.service.platform.elder.PlatElderSleepService; import com.makeit.service.platform.elder.PlatElderSleepService;
import com.makeit.service.saas.PlatTenantService; import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.DeviceCacheUtil; import com.makeit.utils.DeviceCacheUtil;
...@@ -47,13 +48,15 @@ public class IotSyncTask { ...@@ -47,13 +48,15 @@ public class IotSyncTask {
private DeviceCacheUtil deviceCacheUtil; private DeviceCacheUtil deviceCacheUtil;
@Autowired @Autowired
private PlatElderSleepService platElderSleepService; private PlatElderSleepService platElderSleepService;
@Autowired
private PlatElderDayReportDayService platElderDayReportDayService;
/** /**
* 一小时同步一次 * 一小时同步一次
* 启用状态的租户才同步 * 启用状态的租户才同步
* 新增和更新平台端设备表 * 新增和更新平台端设备表
*/ */
@Scheduled(cron = "0 0 */1 * * ?") @Scheduled(cron = "0 0/10 * * * *")
public void syncEquipmentInfo() { public void syncEquipmentInfo() {
savePlatDevice(); savePlatDevice();
} }
...@@ -158,4 +161,13 @@ public class IotSyncTask { ...@@ -158,4 +161,13 @@ public class IotSyncTask {
log.info("定时分析长者睡眠质量结束"); log.info("定时分析长者睡眠质量结束");
} }
/* @Scheduled(cron = "0 0 1 * * ?")
@TenantIdIgnore
public void elderCoordinateListAnalysisTask() {
log.info("开始定时分析24小时热力图");
platElderDayReportDayService.elderCoordinateListAnalysisTask();
log.info("定时分析长者24小时热力图");
}*/
} }
...@@ -3,7 +3,8 @@ package com.makeit.vo.platform.auth; ...@@ -3,7 +3,8 @@ package com.makeit.vo.platform.auth;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO; import com.makeit.common.dto.BaseTenantDTO;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.module.admin.dto.plat.PlatRoleDTOVO; import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -17,7 +18,7 @@ import java.util.List; ...@@ -17,7 +18,7 @@ import java.util.List;
@ApiModel("租户账号 新增 编辑 详情") @ApiModel("租户账号 新增 编辑 详情")
@Data @Data
public class PlatPersonDTOVO extends BaseIdDTO { public class PlatPersonDTOVO extends BaseTenantDTO {
@NotBlank(message = "用户名不能为空") @NotBlank(message = "用户名不能为空")
@Size(max = 64, message = "用户名最长为64字符") @Size(max = 64, message = "用户名最长为64字符")
...@@ -92,6 +93,9 @@ public class PlatPersonDTOVO extends BaseIdDTO { ...@@ -92,6 +93,9 @@ public class PlatPersonDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "角色名称,逗号拼接") @ApiModelProperty(value = "角色名称,逗号拼接")
private String roleNameJoin; private String roleNameJoin;
@ApiModelProperty(value = "租户信息")
private PlatTenant platTenant;
} }
...@@ -28,4 +28,6 @@ public class PlatAlarmStatisticsListVo { ...@@ -28,4 +28,6 @@ public class PlatAlarmStatisticsListVo {
private String alarmTime; private String alarmTime;
@ApiModelProperty(value = "路径") @ApiModelProperty(value = "路径")
private String path; private String path;
@ApiModelProperty(value = "告警id")
private String alarmRecordId;
} }
...@@ -83,5 +83,15 @@ public class PlatDeviceListVO extends BaseTenantDTO { ...@@ -83,5 +83,15 @@ public class PlatDeviceListVO extends BaseTenantDTO {
private String tenantName; private String tenantName;
private String spaceParentPath;
private String spaceParentPathName;
private String spaceName;
private String roomName;
private String bedName;
} }
...@@ -3,7 +3,7 @@ package com.makeit.vo.platform.elder.realtime; ...@@ -3,7 +3,7 @@ package com.makeit.vo.platform.elder.realtime;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.util.List;
@Data @Data
public class PlatElderCoordinateVO { public class PlatElderCoordinateVO {
...@@ -14,11 +14,11 @@ public class PlatElderCoordinateVO { ...@@ -14,11 +14,11 @@ public class PlatElderCoordinateVO {
@ApiModelProperty(value = "原始设备ID") @ApiModelProperty(value = "原始设备ID")
private String oriDeviceId; private String oriDeviceId;
@ApiModelProperty("x") // @ApiModelProperty("x")
private BigDecimal x; // private BigDecimal x;
//
@ApiModelProperty("y") // @ApiModelProperty("y")
private BigDecimal y; // private BigDecimal y;
@ApiModelProperty("人体目标距离雷达位置 范围:0-1000,单位cm") @ApiModelProperty("人体目标距离雷达位置 范围:0-1000,单位cm")
private Integer distance; private Integer distance;
...@@ -26,5 +26,8 @@ public class PlatElderCoordinateVO { ...@@ -26,5 +26,8 @@ public class PlatElderCoordinateVO {
@ApiModelProperty("人体目标偏离雷达法线角度范围:±60,单位°") @ApiModelProperty("人体目标偏离雷达法线角度范围:±60,单位°")
private Integer angle; private Integer angle;
@ApiModelProperty("跌倒设备轨迹")
private List<Integer> track;
} }
...@@ -18,5 +18,10 @@ public class PlatElderRealTimeHeartRespiratoryVO { ...@@ -18,5 +18,10 @@ public class PlatElderRealTimeHeartRespiratoryVO {
@ApiModelProperty("呼吸率") @ApiModelProperty("呼吸率")
private Integer respiratoryRate; private Integer respiratoryRate;
@ApiModelProperty("体动值")
private Integer body;
@ApiModelProperty("状态")
private String status;
} }
...@@ -13,7 +13,9 @@ import lombok.Data; ...@@ -13,7 +13,9 @@ import lombok.Data;
*/ */
@Data @Data
@ApiModel("PlatBedPanoramaVO参数") @ApiModel("PlatBedPanoramaVO参数")
public class PlatBedPanoramaVO extends BaseIdDTO { public class PlatBedPanoramaVO{
private String id;
@ApiModelProperty("空间全路径id") @ApiModelProperty("空间全路径id")
private String spacePath; private String spacePath;
......
...@@ -29,4 +29,7 @@ public class PlatBedVo extends BaseBusEntity { ...@@ -29,4 +29,7 @@ public class PlatBedVo extends BaseBusEntity {
@ApiModelProperty(value = "绑定设备") @ApiModelProperty(value = "绑定设备")
private String deviceName; private String deviceName;
@ApiModelProperty(value = "绑定设备id")
private String deviceId;
} }
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.space.PlatBedMapper"> <mapper namespace="com.makeit.mapper.platform.space.PlatBedMapper">
<select id="selectBySpaceIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO"> <select id="selectBySpaceIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO">
SELECT pb.id,pb.`status`,pb.name bedName ,pm.`name` roomName,pm.space_path,pe.name as elderName,pe.id as elderId,pm.id as roomId SELECT pb.id,pb.status,pb.name as bedName ,pm.name as roomName,pm.space_path as spacePath,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM `plat_bed` pb FROM plat_bed pb
LEFT JOIN plat_room pm on pb.room_id = pm.id LEFT JOIN plat_room pm on pb.room_id = pm.id
LEFT JOIN plat_elder pe on pe.bed_id = pb.id LEFT JOIN plat_elder pe on pe.bed_id = pb.id
<where> <where>
...@@ -20,8 +21,8 @@ ...@@ -20,8 +21,8 @@
</select> </select>
<select id="selectByRoomIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO"> <select id="selectByRoomIdAndStatus" resultType="com.makeit.vo.platform.space.PlatBedPanoramaVO">
SELECT pb.id,pb.`status`,pb.name bedName ,pm.`name` roomName,pm.space_path,pe.name as elderName,pe.id as elderId,pm.id as roomId SELECT pb.id,pb.status,pb.name as bedName ,pm.name as roomName,pm.space_path as spacePath,pe.name as elderName,pe.id as elderId,pm.id as roomId
FROM `plat_bed` pb FROM plat_bed pb
LEFT JOIN plat_room pm on pb.room_id = pm.id LEFT JOIN plat_room pm on pb.room_id = pm.id
LEFT JOIN plat_elder pe on pe.bed_id = pb.id and pe.del_flag = 0 LEFT JOIN plat_elder pe on pe.bed_id = pb.id and pe.del_flag = 0
<where> <where>
...@@ -117,7 +118,8 @@ ...@@ -117,7 +118,8 @@
pb.update_by as updateBy, pb.update_by as updateBy,
pb.update_date as updateDate, pb.update_date as updateDate,
pb.sort as sort, pb.sort as sort,
d.name as deviceName d.name as deviceName,
d.id as deviceId
from plat_bed pb from plat_bed pb
left join plat_room_bed_device prbd on prbd.bed_id = pb.id and prbd.del_flag = 0 left join plat_room_bed_device prbd on prbd.bed_id = pb.id and prbd.del_flag = 0
left join plat_device d on d.id = prbd.device_id and d.del_flag = 0 left join plat_device d on d.id = prbd.device_id and d.del_flag = 0
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.device.PlatDeviceMapper">
<select id="getDeviceIdsBySpaceId" resultType="com.makeit.vo.platform.device.PlatDeviceListVO">
select
distinct
pd.*,
ps.parent_path as spaceParentPath,
ps.name as spaceName,
pr.name as roomName,
pb.name as bedName
from plat_device pd
left join plat_room_bed_device prbd on (pd.id = prbd.device_id and prbd.del_flag = 0)
left join plat_room pr on (pr.id = prbd.room_id and pr.del_flag = 0 )
left join plat_bed pb on ( pb.id = prbd.bed_id and pb.del_flag = 0)
left join plat_space ps on (ps.id = pr.space_id and ps.del_flag = 0)
<where>
pd.del_flag = 0
<if test="param.spaceId != null and param.spaceId != ''">
and ( FIND_IN_SET(#{param.spaceId},ps.parent_path) or ps.id = #{param.spaceId})
</if>
<if test="param.oriDeviceId != null and param.oriDeviceId != ''">
and pd.ori_device_id like concat('%',#{param.oriDeviceId},'%')
</if>
<if test="param.name != null and param.name != ''">
and pd.name like concat('%',#{param.name},'%')
</if>
<if test="param.status != null and param.status != '' ">
and pd.status = #{param.status}
</if>
<if test="param.productName != null and param.productName != '' ">
and pd.product_name like concat('%',#{param.productName},'%')
</if>
<if test="param.productId != null and param.productId != '' ">
and pd.product_id = #{param.productId}
</if>
<if test="param.orgId != null and param.orgId != '' ">
and pd.org_id = #{param.orgId}
</if>
</where>
order by pd.update_date desc,prbd.update_date desc
</select>
<select id="getDevices" resultType="com.makeit.vo.platform.device.PlatDeviceListVO">
select
distinct
pd.*,
ps.parent_path as spaceParentPath,
ps.name as spaceName,
pr.name as roomName,
pb.name as bedName
from plat_device pd
left join plat_room_bed_device prbd on (pd.id = prbd.device_id and prbd.del_flag = 0)
left join plat_room pr on (pr.id = prbd.room_id and pr.del_flag = 0 )
left join plat_bed pb on ( pb.id = prbd.bed_id and pb.del_flag = 0)
left join plat_space ps on (ps.id = pr.space_id and ps.del_flag = 0)
<where>
pd.del_flag = 0
<if test="param.deviceStatus != null and param.deviceStatus != '' ">
and pd.status = #{param.deviceStatus}
</if>
<if test="param.orgIds != null and param.orgIds.size() > 0 ">
AND ps.org_id in
<foreach collection="param.orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
order by pd.update_date desc,prbd.update_date desc
</select>
</mapper>
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.makeit.mapper.platform.space.PlatRoomMapper"> <mapper namespace="com.makeit.mapper.platform.space.PlatRoomMapper">
<select id="spaceAndRoomList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO"> <select id="spaceAndRoomList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT ps.id,ps.`name`,ps.parent_id as parentId,'1' as type FROM plat_space ps SELECT ps.id,ps.`name`,ps.parent_id as parentId,'1' as type FROM plat_space ps
<where> <where>
ps.del_flag = 0 ps.del_flag = 0
...@@ -14,7 +15,7 @@ ...@@ -14,7 +15,7 @@
</foreach> </foreach>
</if> </if>
</where> </where>
UNION UNION ALL
SELECT pr.id,pr.`name`,pr.space_id as parentId,'2' as type FROM plat_room pr SELECT pr.id,pr.`name`,pr.space_id as parentId,'2' as type FROM plat_room pr
LEFT JOIN plat_space p ON p.id = pr.space_id LEFT JOIN plat_space p ON p.id = pr.space_id
<where> <where>
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
</if> </if>
</where> </where>
</select> </select>
<select id="workStationList" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO"> <select id="workStationList" resultType="com.makeit.vo.platform.workstation.WorkStationInstitutionRoomVO">
...@@ -81,5 +83,35 @@ ...@@ -81,5 +83,35 @@
</where> </where>
</select> </select>
<select id="spaceList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT ps.id,ps.`name`,ps.parent_id as parentId,'1' as type FROM plat_space ps
<where>
ps.del_flag = 0
<if test="orgIds != null and orgIds.size()>0 ">
AND ps.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
<select id="roomList" resultType="com.makeit.vo.platform.space.PlatSpaceAndRoomVO">
SELECT pr.id,pr.`name`,pr.space_id as parentId,'2' as type FROM plat_room pr
LEFT JOIN plat_space p ON p.id = pr.space_id
<where>
pr.del_flag = 0
<if test="orgIds != null and orgIds.size()>0 ">
AND p.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>
...@@ -2,16 +2,25 @@ package com.makeit.mqtt; ...@@ -2,16 +2,25 @@ package com.makeit.mqtt;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO; import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig; import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice; import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.saas.PlatTenant;
import com.makeit.global.aspect.tenant.TenantIdIgnore; import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.enums.DeviceState;
import com.makeit.module.iot.vo.DeviceInfo; import com.makeit.module.iot.vo.DeviceInfo;
import com.makeit.module.iot.vo.HeaderInfo; import com.makeit.module.iot.vo.HeaderInfo;
import com.makeit.service.platform.alarm.alarmStrategy.IAlarm; import com.makeit.service.platform.alarm.alarmStrategy.IAlarm;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.AlarmConfigCacheUtil; import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.DeviceCacheUtil; import com.makeit.utils.DeviceCacheUtil;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttClient;
...@@ -19,18 +28,25 @@ import org.eclipse.paho.client.mqttv3.MqttMessage; ...@@ -19,18 +28,25 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch; import org.springframework.util.StopWatch;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component @Component
public class PushCallback implements MqttCallback { public class PushCallback implements MqttCallback {
private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class); private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class);
public static final String DEVICE_BR_DATA = "device:brhr:data:";
public static final String DEVICE_SPACE_DATA = "device:space:data:";
public static final String DEVICE_FALL_DATA = "device:fall:data:";
@Autowired @Autowired
private MqttConfig mqttConfig; private MqttConfig mqttConfig;
...@@ -43,6 +59,13 @@ public class PushCallback implements MqttCallback { ...@@ -43,6 +59,13 @@ public class PushCallback implements MqttCallback {
@Autowired @Autowired
private List<IAlarm> alarmList; private List<IAlarm> alarmList;
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private PlatTenantService platTenantService;
@Autowired
private StringRedisTemplate redisTemplate;
@Override @Override
public void connectionLost(Throwable cause) { public void connectionLost(Throwable cause) {
...@@ -64,6 +87,7 @@ public class PushCallback implements MqttCallback { ...@@ -64,6 +87,7 @@ public class PushCallback implements MqttCallback {
DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class); DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class);
// todo // todo
checkAlarm(device); checkAlarm(device);
} }
...@@ -82,12 +106,28 @@ public class PushCallback implements MqttCallback { ...@@ -82,12 +106,28 @@ public class PushCallback implements MqttCallback {
public void checkAlarm(DeviceInfo device) { public void checkAlarm(DeviceInfo device) {
HeaderInfo headers = device.getHeaders(); HeaderInfo headers = device.getHeaders();
List<HeaderInfo.Bind> bindings = headers.getBindings(); List<HeaderInfo.Bind> bindings = headers.getBindings();
// TODO 先这样判断
if (headers.getProductName().contains("呼吸")) {
redisTemplate.opsForValue().set(DEVICE_BR_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("空间")) {
redisTemplate.opsForValue().set(DEVICE_SPACE_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
if (headers.getProductName().contains("跌倒")) {
redisTemplate.opsForValue().set(DEVICE_FALL_DATA + device.getDeviceId(),JSON.toJSONString(device.getProperties()),
1000, TimeUnit.MILLISECONDS);
}
for (HeaderInfo.Bind binding : bindings) { for (HeaderInfo.Bind binding : bindings) {
try { try {
String iot_tenantId = binding.getId(); String iot_tenantId = binding.getId();
StopWatch stopWatch = new StopWatch(); StopWatch stopWatch = new StopWatch();
stopWatch.start("checkAlarm-1"); stopWatch.start("checkAlarm-1");
String deviceId = device.getDeviceId(); String deviceId = device.getDeviceId();
String messageType = device.getMessageType();
//更新设备状态
updateDeviceStatus(messageType,deviceId,iot_tenantId);
JSONObject properties = device.getProperties(); JSONObject properties = device.getProperties();
...@@ -120,6 +160,8 @@ public class PushCallback implements MqttCallback { ...@@ -120,6 +160,8 @@ public class PushCallback implements MqttCallback {
} }
} }
} }
stopWatch.stop(); stopWatch.stop();
logger.info(stopWatch.prettyPrint()); logger.info(stopWatch.prettyPrint());
}catch (Exception e){ }catch (Exception e){
...@@ -130,6 +172,28 @@ public class PushCallback implements MqttCallback { ...@@ -130,6 +172,28 @@ public class PushCallback implements MqttCallback {
} }
@Transactional
public void updateDeviceStatus(String messageType, String deviceId, String iot_tenantId) {
if(StringUtils.equalsAnyIgnoreCase(messageType, DeviceState.offline.getValue(),DeviceState.online.getValue())){
platDeviceService.update(new UpdateWrapper<PlatDevice>().lambda()
.set(PlatDevice::getStatus,messageType.toLowerCase())
.eq(PlatDevice::getOriDeviceId,deviceId));
LambdaQueryWrapper<PlatDevice> deviceLambdaQueryWrapper = new LambdaQueryWrapper<>();
deviceLambdaQueryWrapper.eq(PlatDevice::getOriDeviceId,deviceId);
List<PlatDevice> deviceList = platDeviceService.list(deviceLambdaQueryWrapper);
if(CollectionUtils.isEmpty(deviceList)){
return;
}
for (PlatDevice platDevice : deviceList) {
platDevice.setStatus(messageType.toLowerCase());
}
deviceCacheUtil.putAll(deviceList);
}
}
} }
...@@ -72,6 +72,7 @@ storage: ...@@ -72,6 +72,7 @@ storage:
type: local type: local
url: http://localhost:8888/${file.filePath} url: http://localhost:8888/${file.filePath}
# aliBaseDir: point # aliBaseDir: point
# aliEndpoint: obs.cn-south-1.myhuaweicloud.com # aliEndpoint: obs.cn-south-1.myhuaweicloud.com
# aliAccessKeyId: HY7KT4GKCOGSRCHLXBAR # aliAccessKeyId: HY7KT4GKCOGSRCHLXBAR
......
...@@ -57,7 +57,7 @@ sign: ...@@ -57,7 +57,7 @@ sign:
# - auth/checkCode # - auth/checkCode
mybatis-plus: mybatis-plus:
configuration: configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
file: file:
filePath: file filePath: file
...@@ -140,4 +140,5 @@ voice-sms: ...@@ -140,4 +140,5 @@ voice-sms:
send: send:
url: http://www.aozoneyun.com/Message/Message/video_send url: http://www.aozoneyun.com/Message/Message/video_send
uid: 362 uid: 362
pwd: xmksyy123456 pwd: xmksyy123456
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志 -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>d1money-web-ys-ems</contextName>
<!-- 定义日志文件 输入位置 -->
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<!-- 日志最大的历史 30天 -->
<property name="maxHistory" value="180" />
<property name="maxFileSize" value="10MB" />
<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
<appender name="ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录WARN级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 可相对、和绝对路径 -->
<fileNamePattern>
${log_dir}/app_error.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6, 则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除 -->
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是1到3,当保存了3个归档文件后,将覆盖最早的日志。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern> <minIndex>1</minIndex>
<maxIndex>3</maxIndex> </rollingPolicy> -->
<!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动 <triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize>
</triggeringPolicy> -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO级别日志 appender -->
<appender name="INFO"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录INFO级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按天回滚 daily -->
<fileNamePattern>
${log_dir}/app_info.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<!-- 日志最大的历史 30天 -->
<maxHistory>${maxHistory}</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${maxFileSize}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="java.sql.PreparedStatement" value="DEBUG" />
<logger name="java.sql.Connection" value="DEBUG" />
<logger name="java.sql.Statement" value="DEBUG" />
<logger name="com.ibatis" value="DEBUG" />
<logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />
<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
value="DEBUG" />
<!-- root级别 DEBUG -->
<root level="INFO">
<!-- 文件输出 -->
<appender-ref ref="ERROR" />
<appender-ref ref="INFO" />
</root>
</configuration>
\ No newline at end of file
...@@ -8,7 +8,12 @@ ...@@ -8,7 +8,12 @@
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{appName}] [%X{profile}] [%X{traceId:-},%X{spanId:-}] [%X{requestId}] [%X{userId}] [%thread] %-5level %logger{50} - %msg%n"/> value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{appName}] [%X{profile}] [%X{traceId:-},%X{spanId:-}] [%X{requestId}] [%X{userId}] [%thread] %-5level %logger{50} - %msg%n"/>
<springProfile name="prod"> <springProfile name="prod">
<property name="logback.logdir" value="/home/group1_lzy/iot-plafform-server/logs"/> <property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<property name="logback.appname" value="app"/>
</springProfile>
<springProfile name="test">
<property name="logback.logdir" value="/home/group1_lzy/iot-server/logs"/>
<property name="logback.appname" value="app"/> <property name="logback.appname" value="app"/>
</springProfile> </springProfile>
......
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