Commit aa5d6f78 by 杨伟程
parents 6400bdf8 6aafcd38
Showing with 1728 additions and 121 deletions
......@@ -244,7 +244,7 @@ CREATE TABLE `plat_device`
registration_date datetime NOT NULL COMMENT '注册时间',
last_online_data datetime NOT NULL COMMENT '最后上线时间',
description VARCHAR(1024) DEFAULT NULL COMMENT '说明',
status char(1) NOT NULL COMMENT '状态 数据字典 1 在线 0离线',
status varchar(36) DEFAULT NULL COMMENT '状态 DeviceState',
org_id varchar(64) NULL COMMENT '组织id',
city_org_id varchar(64) NULL COMMENT '城市组织id',
district_org_id varchar(64) NULL COMMENT '区组织id',
......
......@@ -109,10 +109,11 @@ CREATE TABLE `plat_role_org` (
CREATE TABLE `plat_logo_config` (
`id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
`logo_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'logo文件ID',
`browser_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '浏览器页签文件Id',
`background_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录背景图片',
`name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
`code` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
`logo_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'logo文件ID',
`browser_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '浏览器页签文件Id',
`background_file_id` VARCHAR ( 64 ) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '登录背景图片',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR ( 1 ) DEFAULT NULL COMMENT '删除标识',
......
......@@ -17,6 +17,8 @@ CREATE TABLE `plat_space`
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` INT(1) DEFAULT '0' COMMENT '删除标记',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ',
`org_id` varchar(64) DEFAULT NULL COMMENT '组织id',
`attribute` char(1) DEFAULT NULL COMMENT '属性 1-居家 2-机构',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = INNODB
DEFAULT CHARSET = utf8mb4 COMMENT = '空间管理';
......
......@@ -10,6 +10,7 @@ import com.makeit.entity.saas.analysis.SaasSleepEvaluateReport;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasDiseaseEvaluateReportService;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -28,6 +29,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/diseaseEvaluateReport")
@Api(tags = "saas端-报告管理")
public class SaasDiseaseEvaluateReportController {
......
......@@ -8,6 +8,7 @@ import com.makeit.dto.saas.analysis.SaasDiseaseModelDTO;
import com.makeit.entity.saas.analysis.SaasDiseaseModel;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasDiseaseModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/diseaseModel")
@Api(tags = "saas端-模型管理")
public class SaasDiseaseModelController {
......
......@@ -8,6 +8,7 @@ import com.makeit.dto.saas.analysis.SaasElderReportConfigDTO;
import com.makeit.entity.saas.analysis.SaasElderReportConfig;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasElderReportConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/elderReportConfig")
@Api(tags = "saas端-报告管理")
public class SaasElderReportConfigController {
@Autowired
private SaasElderReportConfigService saasElderReportConfigService;
......
......@@ -9,6 +9,7 @@ import com.makeit.entity.saas.analysis.SaasModelManage;
import com.makeit.global.annotation.Action;
import com.makeit.module.admin.vo.plat.PlatTenantVO;
import com.makeit.service.saas.SaasModelManageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -28,13 +29,14 @@ import java.util.List;
*/
@RestController
@RequestMapping("/saas/modelManage")
@Api(tags = "saas端-报告管理")
public class SaasModelManageController {
@Autowired
private SaasModelManageService saasModelManageService;
@Action(module = "租户管理-租户", name = "分页列表", code = "saas:modelManage:page")
@Action(module = "数据分析-模型管理", name = "分页列表", code = "saas:modelManage:page")
@ApiOperation("分页列表")
@PostMapping("list")
public ApiResponseEntity<List<SaasModelManage>> list(){
......
......@@ -8,6 +8,7 @@ import com.makeit.entity.saas.analysis.SaasReportManage;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasModelManageService;
import com.makeit.service.saas.SaasReportManageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -26,13 +27,14 @@ import java.util.List;
*/
@RestController
@RequestMapping("/saas/reportManage")
@Api(tags = "saas端-报告管理")
public class SaasReportManageController {
@Autowired
private SaasReportManageService saasReportManageService;
@Action(module = "租户管理-租户", name = "分页列表", code = "saas:reportManage:page")
@Action(module = "数据分析-报告管理", name = "分页列表", code = "saas:reportManage:page")
@ApiOperation("分页列表")
@PostMapping("list")
public ApiResponseEntity<List<SaasReportManage>> list(){
......
......@@ -9,6 +9,7 @@ import com.makeit.entity.saas.analysis.SaasSleepAnalysisModel;
import com.makeit.global.annotation.Action;
import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.service.saas.SaasSleepAnalysisModelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/sleepAnalysisModel")
@Api(tags = "saas端-模型管理")
public class SaasSleepAnalysisModelController {
@Autowired
......
......@@ -8,6 +8,7 @@ import com.makeit.dto.saas.analysis.SaasSleepEvaluateReportDTO;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateReport;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasSleepEvaluateReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/sleepEvaluateReport")
@Api(tags = "saas端-报告管理")
public class SaasSleepEvaluateReportController {
......
......@@ -8,6 +8,7 @@ import com.makeit.dto.saas.analysis.SaasSleepEvaluateStandardReportDTO;
import com.makeit.entity.saas.analysis.SaasSleepEvaluateStandardReport;
import com.makeit.global.annotation.Action;
import com.makeit.service.saas.SaasSleepEvaluateStandardReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
......@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/saas/sleepEvaluateStandardReport")
@Api(tags = "saas端-报告管理")
public class SaasSleepEvaluateStandardReportController {
......
......@@ -6,6 +6,7 @@ import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.device.PlatDeviceDetailDTO;
import com.makeit.dto.platform.device.PlatDeviceEditDTO;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.service.platform.device.PlatDeviceService;
import io.swagger.annotations.Api;
......@@ -37,8 +38,8 @@ public class SaasDeviceController {
@ApiOperation("设备编辑")
@PostMapping("edit")
public ApiResponseEntity<Void> edit(@RequestBody PlatDevice platDevice) {
platDeviceService.edit(platDevice);
public ApiResponseEntity<Void> edit(@RequestBody PlatDeviceEditDTO dto) {
platDeviceService.edit(dto);
return ApiResponseUtils.success();
}
......
......@@ -2,6 +2,7 @@ package com.makeit.controller.saas;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action;
......@@ -33,47 +34,47 @@ import java.util.List;
public class SaasMenuController {
@Autowired
private SaasMenuService platMenuService;
private SaasMenuService saasMenuService;
@Action(module = "saas端-菜单", name = "列表", code = "plat:menu:list")
@Action(module = "saas端-菜单", name = "列表", code = "saas:menu:list")
@ApiOperation("列表")
@PostMapping("list")
public ApiResponseEntity<List<SaasMenuDTOVO>> list(@RequestBody SaasMenuQueryDTO dto) {
return ApiResponseUtils.success(platMenuService.list(dto));
return ApiResponseUtils.success(saasMenuService.list(dto));
}
@Action(module = "saas端-菜单", name = "树形列表", code = "plat:menu:tree")
@Action(module = "saas端-菜单", name = "树形列表", code = "saas:menu:tree")
@ApiOperation("树形列表")
@PostMapping("tree")
public ApiResponseEntity<List<SaasMenuDTOVO>> tree(@RequestBody SaasMenuQueryDTO dto) {
return ApiResponseUtils.success(platMenuService.tree(dto));
return ApiResponseUtils.success(saasMenuService.tree(dto));
}
@ApiOperation("列表(AuthIgnore)")
@PostMapping("listAuthIgnore")
public ApiResponseEntity<List<SaasMenuDTOVO>> listAuthIgnore(@RequestBody SaasMenuQueryDTO dto) {
return ApiResponseUtils.success(platMenuService.list(dto));
return ApiResponseUtils.success(saasMenuService.list(dto));
}
@ApiOperation("树形列表(AuthIgnore)")
@PostMapping("treeAuthIgnore")
public ApiResponseEntity<List<SaasMenuDTOVO>> treeAuthIgnore(@RequestBody SaasMenuQueryDTO dto) {
return ApiResponseUtils.success(platMenuService.tree(dto));
return ApiResponseUtils.success(saasMenuService.tree(dto));
}
@Action(module = "saas端-菜单", name = "新增", code = "plat:menu:add")
@Action(module = "saas端-菜单", name = "新增", code = "saas:menu:add")
@ApiOperation("新增")
@PostMapping("add")
public ApiResponseEntity<String> add(@Validated @RequestBody SaasMenuDTOVO dto) {
String id = platMenuService.add(dto);
String id = saasMenuService.add(dto);
return ApiResponseUtils.success(id);
}
@Action(module = "saas端-菜单", name = "编辑", code = "plat:menu:edit")
@Action(module = "saas端-菜单", name = "编辑", code = "saas:menu:edit")
@ApiOperation("编辑")
@PostMapping("edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SaasMenuDTOVO dto) {
platMenuService.edit(dto);
saasMenuService.edit(dto);
return ApiResponseUtils.success();
}
......@@ -81,21 +82,29 @@ public class SaasMenuController {
@ApiOperation("详情")
@PostMapping("view")
public ApiResponseEntity<SaasMenuDTOVO> view(@RequestBody BaseIdDTO dto) {
return ApiResponseUtils.success(platMenuService.view(dto.getId()));
return ApiResponseUtils.success(saasMenuService.view(dto.getId()));
}
@Action(module = "saas端-菜单", name = "删除", code = "plat:menu:del")
@Action(module = "saas端-菜单", name = "删除", code = "saas:menu:del")
@ApiOperation("删除")
@PostMapping("del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO dto) {
platMenuService.del(dto.getId());
saasMenuService.del(dto.getId());
return ApiResponseUtils.success();
}
@Action(module = "saas端-菜单", name = "启用禁用", code = "saas:menu:changeStatus")
@ApiOperation("启用禁用")
@PostMapping("changeStatus")
public ApiResponseEntity<Void> changeStatus(@RequestBody StatusDTO dto) {
saasMenuService.changeStatus(dto);
return ApiResponseUtils.success();
}
@ApiOperation("同步")
@PostMapping("sync")
public ApiResponseEntity<?> sync() {
platMenuService.sync();
saasMenuService.sync();
return ApiResponseUtils.success();
}
......
......@@ -8,7 +8,7 @@ import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.List;
import java.util.Objects;
import java.util.Map;
@Data
@ApiModel("excel导入错误信息VO")
......@@ -52,9 +52,17 @@ public class ExcelErrorVo implements Serializable {
}
}
public static void notExists(Object object,List<ExcelErrorVo> errorVoList,int i,String title){
if(Objects.isNull(object)){
public static void notExists(String value,List<ExcelErrorVo> errorVoList,int i,String title){
if(StringUtils.isBlank(value)){
errorVoList.add(new ExcelErrorVo(i,title,"数据库数据不存在"));
}
}
public static void exists(Map<String, String> emailMap,String value, List<ExcelErrorVo> errorVoList, int i, String title){
if(StringUtils.isNotBlank(value)){
errorVoList.add(new ExcelErrorVo(i,title,"数据重复"));
}else {
emailMap.put(value,"system");
}
}
}
......@@ -99,6 +99,7 @@ public enum CodeMessageEnum {
PLATFORM_ERROR_SPACE_NOT_DEL(500, "PLATFORM.ERROR.SPACE.NOT.DEL"),
PLATFORM_ERROR_ROOM_EXIT_BAD(500, "PLATFORM.ERROR.ROOM.EXIT.BAD"),
PLATFORM_ERROR_ROOM_BAD_NUMBER_NOT_AUTH(500, "PLATFORM.ERROR.ROOM.BAD.NUMBER.NOT.AUTH"),
PLATFORM_ERROR_ROOM_NAME_EXIT(500, "PLATFORM.ERROR.ROOM.NAME.EXIT"),
PLATFORM_ERROR_BAD_NAME_EXIT(500, "PLATFORM.ERROR.BAD.NAME.EXIT"),
PLATFORM_ERROR_BAD_NOT_DEL(500, "PLATFORM.ERROR.BAD.NOT.DEL"),
PLATFORM_ERROR_ROOM_OTHER_USED_NOT_DEL(500, "PLATFORM.ERROR.ROOM.OTHER.USED.NOT.DEL"),
......
......@@ -94,7 +94,9 @@ public class RedisConst {
public static final String ALARM_DEVICE_ID = "alarm:device:id:";
public static final String ALARM_CONFIG_ORG_ID = "alram:config:org:id";
public static final String ALARM_CONFIG_ORG_ID = "alarm:config:org:id";
public static final String PLAT_IOT_DEVICE_PREFIX = "plat:iot:device:";
......
......@@ -7,11 +7,12 @@ import lombok.Getter;
@AllArgsConstructor
@Getter
public enum DeviceState {
notActive("禁用"),
offline("离线"),
online("在线");
notActive("notActive","禁用"),
offline("offline","离线"),
online("online","在线");
private final String text;
private final String value;
private final String name;
}
......@@ -7,10 +7,11 @@ import lombok.Getter;
@AllArgsConstructor
@Getter
public enum DeviceType {
device("直连设备"),
childrenDevice("网关子设备"),
gateway("网关设备");
device("device","直连设备"),
childrenDevice("device","网关子设备"),
gateway("gateway","网关设备");
private final String value;
private final String text;
......
......@@ -170,6 +170,48 @@ public class IotProductDeviceService extends IotCommonService {
return getDeviceLog(deviceId, 10, typeValue);
}
public List<DeviceOperationLogEntity> getDeviceLogByTimeRange(String deviceId, int pageSize,String startTime,String endTime) {
IotQueryParam iotQueryParam = buildQueryParam(pageSize);
List<Term> terms = Lists.newArrayList();
Term term1 = Term.builder()
.column("timestamp")
.termType("gte")
.type(Term.Type.or)
.value(startTime)
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
.build();
Term term2 = Term.builder()
.column("timestamp")
.termType("lte")
.type(Term.Type.and)
.value(endTime)
.terms(Lists.newArrayList())
.options(Lists.newArrayList())
.build();
terms.add(term1);
terms.add(term2);
iotQueryParam.setTerms(terms);
String body = JsonUtil.toJson(iotQueryParam);
String url = iotUrl + DEVICE_PREFIX_URL + deviceId + "/logs";
HttpRequest request = buildRequest(url, body);
try {
ResponseMessage responseMessage = sendPost(url, request);
if (responseMessage.getStatus() == 200) {
IotPagerResult pagerResult = JSON.parseObject(responseMessage.getResult().toString(), IotPagerResult.class);
List<DeviceOperationLogEntity> deviceOperationLogEntities = JSONArray.parseArray(pagerResult.getData().toString()).toJavaList(DeviceOperationLogEntity.class);
//Map maps = (Map) JSON.parse(datum.getContent().toString());
return deviceOperationLogEntities;
}
log.error("获取设备接口失败:{}", responseMessage.getMessage());
} catch (IOException e) {
log.error("调用:{}接口异常:{}", url, e.getMessage());
}
return Lists.newArrayList();
}
/**
* 获取设备的日志
*
......@@ -183,7 +225,7 @@ public class IotProductDeviceService extends IotCommonService {
List<Term> terms = Lists.newArrayList();
Term term = Term.builder()
.column("type")
.termType("eq")
.termType("btw")
.type(Term.Type.or)
.value(typeValue)
.terms(Lists.newArrayList())
......
package com.makeit.module.iot.vo;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
/**
......@@ -17,7 +18,7 @@ public class DeviceInfo {
private HeaderInfo headers;
private String properties;
private JSONObject properties;
/**
......
package com.makeit.module.iot.vo;
import lombok.Data;
@Data
public class DeviceState {
private String text;
private String value;
}
......@@ -94,6 +94,7 @@ PLATFORM.ERROR.ELDER.CERTIFICATENUMBER.DUPLICATE=证件号不能重复
PLATFORM.ERROR.SPACE.NAME.DUPLICATE=同一层级,空间名称不能重复
PLATFORM.ERROR.SPACE.NOT.DEL=该空间下存在下级或者房间,不可删除
PLATFORM.ERROR.ROOM.EXIT.BAD=房间中存在床位,不可删除
PLATFORM.ERROR.ROOM.NAME.EXIT=该房间名称已存在
PLATFORM.ERROR.ROOM.BAD.NUMBER.NOT.AUTH=床位数量不能改小
PLATFORM.ERROR.BAD.NAME.EXIT=床位名称已存在
PLATFORM.ERROR.BAD.NOT.DEL=床位已绑定长者或设备,不可删除
......
package com.makeit.module.controller.dataScreen;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.service.platform.dataScreen.DataScreenService;
import com.makeit.vo.platform.dataScreen.*;
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("/plat/data/screen")
public class DataScreenController {
@Autowired
private DataScreenService dataScreenService;
@ApiOperation("长者年龄分布")
@PostMapping("ageStatistics")
public ApiResponseEntity<PlatAgeStatisticsVO> ageStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.ageStatistics(dto));
}
@ApiOperation("长者性别比例分布")
@PostMapping("sexStatistics")
public ApiResponseEntity<PlatSexStatisticsVO> sexStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.sexStatistics(dto));
}
@ApiOperation("设备概况")
@PostMapping("deviceStatistics")
public ApiResponseEntity<PlatDeviceStatisticsVO> deviceStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.deviceStatistics(dto));
}
@ApiOperation("实时告警")
@PostMapping("alarmStatistics")
public ApiResponseEntity<PlatAlarmStatisticsVO> alarmStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.alarmStatistics(dto));
}
@ApiOperation("机构养老-基础数据统计")
@PostMapping("baseInfoStatistics")
public ApiResponseEntity<PlatBaseInfoStatisticsVO> baseInfoStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.baseInfoStatistics(dto));
}
@ApiOperation("地图统计")
@PostMapping("mapStatistics")
public ApiResponseEntity<PlatMapStatisticsVO> mapStatistics(@RequestBody PlatDataScreenQueryDTO dto) {
return ApiResponseUtils.success(dataScreenService.mapStatistics(dto));
}
}
......@@ -18,6 +18,8 @@ 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;
/**
* @Author:lzy
* @Date:2023/9/6 11:56
......@@ -38,6 +40,13 @@ public class PlatBedController {
return ApiResponseUtils.success(data);
}
@ApiOperation("列表-无权限(未绑定设备床位)")
@PostMapping("listAuthIgnore")
public ApiResponseEntity<List<PlatBed>> listAuthIgnore(@RequestBody PlatBedQueryDTO dto) {
List<PlatBed> data = platBedService.list(dto);
return ApiResponseUtils.success(data);
}
@ApiOperation("详情")
@PostMapping("view")
public ApiResponseEntity<PlatBed> view(@RequestBody BaseIdDTO baseIdDTO) {
......
......@@ -2,8 +2,10 @@ package com.makeit.module.controller.space;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.space.PlatRoomPanoramaDTO;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.service.platform.space.PlatRoomDynamicService;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.space.PlatRoomPanoramaVO;
......@@ -60,4 +62,11 @@ public class PlatRoomDynamicController {
return ApiResponseUtils.success(data);
}
@ApiOperation("房间详细-下拉长者")
@PostMapping("elderList")
public ApiResponseEntity<List<PlatElder>> elderList(@RequestBody PlatElderQueryDTO dto) {
List<PlatElder> data = platRoomDynamicService.elderList(dto);
return ApiResponseUtils.success(data);
}
}
package com.makeit.module.controller.sys;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.device.PlatDeviceDTO;
import com.makeit.dto.platform.space.PlatSpaceDeviceQueryDTO;
import com.makeit.dto.platform.sys.PlatLogoConfigDTO;
import com.makeit.dto.platform.sys.PlatLogoConfigDTOVO;
import com.makeit.dto.platform.sys.PlatLogoConfigQueryDTO;
import com.makeit.enums.CommonEnum;
import com.makeit.service.platform.sys.PlatLogoConfigService;
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;
/**
* @Author:lzy
* @Date:2023/9/12 10:41
* @Describe:
*/
@Api(tags = "LOGO设置")
@RestController
@RequestMapping("/plat/sys/logo/config/")
public class PlatLogoConfigController {
@Autowired
private PlatLogoConfigService platLogoConfigService;
@ApiOperation("设置LOGO")
@PostMapping("add")
public ApiResponseEntity<?> add(@RequestBody PlatLogoConfigDTO dto) {
platLogoConfigService.add(dto);
return ApiResponseUtils.success();
}
@ApiOperation("查看")
@PostMapping("view")
public ApiResponseEntity<PlatLogoConfigDTOVO> view(@RequestBody PlatLogoConfigQueryDTO dto) {
PlatLogoConfigDTOVO data = platLogoConfigService.view(dto);
return ApiResponseUtils.success(data);
}
}
......@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "子女端小程序-告警记录")
@RestController
@RequestMapping("/children/alarm-record")
public class ChildrenAlarmRecordController {
public class PlatAlarmRecordChildrenController {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
......
......@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "小程序-告警记录")
@RestController
@RequestMapping("/wechat/plat/alarm-record")
public class WechatPlatAlarmRecordController {
public class PlatAlarmRecordWechatController {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
......
package com.makeit.module.controller.wechat.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.PlatRegionSettingQueryDTO;
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("/wechat/plat/region/setting")
public class PlatRegionSettingWechatController {
@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();
}
}
package com.makeit.module.controller.wechat.space;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.dto.platform.device.PlatDeviceDTO;
import com.makeit.dto.platform.space.PlatBedDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatRoomBindDeviceDTO;
import com.makeit.dto.platform.space.PlatSpaceDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatUnbindingDeviceDTO;
import com.makeit.enums.CommonEnum;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
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("/wechat/plat/binding/device/")
public class PlatRoomBedDeviceWechatController {
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@ApiOperation("设备列表(选择设备)-房间绑定")
@PostMapping("pageRoomDevice")
public ApiResponseEntity<PageVO<PlatDeviceDTO>> pageRoomDevice(@RequestBody PageReqDTO<PlatSpaceDeviceQueryDTO> page) {
page.getData().setIsRoom(CommonEnum.YES.getValue());
PageVO<PlatDeviceDTO> data = platRoomBedDeviceService.pageDevice(page);
return ApiResponseUtils.success(data);
}
@ApiOperation("设备列表(选择设备)-床位绑定")
@PostMapping("pageBedDevice")
public ApiResponseEntity<PageVO<PlatDeviceDTO>> pageBedDevice(@RequestBody PageReqDTO<PlatSpaceDeviceQueryDTO> page) {
page.getData().setIsRoom(CommonEnum.NO.getValue());
PageVO<PlatDeviceDTO> data = platRoomBedDeviceService.pageDevice(page);
return ApiResponseUtils.success(data);
}
@ApiOperation("已绑定设备列表")
@PostMapping("listBindDevice")
public ApiResponseEntity<List<PlatDeviceDTO>> listBindDevice(@RequestBody PlatBedDeviceQueryDTO dto) {
List<PlatDeviceDTO> data = platRoomBedDeviceService.listBindDevice(dto);
return ApiResponseUtils.success(data);
}
@ApiOperation("绑定设备")
@PostMapping("bindingDevice")
public ApiResponseEntity<?> bindingDevice(@RequestBody PlatRoomBindDeviceDTO dto) {
platRoomBedDeviceService.bindingDevice(dto);
return ApiResponseUtils.success();
}
@ApiOperation("解绑设备")
@PostMapping("unbindingDevice")
public ApiResponseEntity<?> unbindingDevice(@RequestBody PlatUnbindingDeviceDTO dto) {
platRoomBedDeviceService.unbindingDevice(dto);
return ApiResponseUtils.success();
}
}
package com.makeit.dto.platform.alarm;
import com.alibaba.fastjson.JSONObject;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatRoom;
import lombok.Data;
......@@ -8,9 +11,18 @@ import java.util.ArrayList;
import java.util.List;
@Data
public class PlatAlaramCheckDTO {
public class PlatAlarmCheckDTO {
private List<PlatElder> platElderList = new ArrayList<>();
private PlatRoom platRoom;
private PlatDevice platDevice;
private PlatAlarmConfig platAlarmConfig;
private List<String> param = new ArrayList<>();
private JSONObject properties;
}
......@@ -23,15 +23,15 @@ public class PlatUserImportDTO {
private String mobile;
@ExcelProperty(value = "邮箱")
private String email;
@ExcelProperty(value = "所属组织*")
@ExcelProperty(value = "*所属组织")
private String orgName;
@ExcelProperty(value = "角色*")
@ExcelProperty(value = "*角色")
private String roleName;
@ExcelProperty(value = "备注")
private String remark;
@ExcelIgnore
private String password = "888888";
private String password = "abc888888";
}
package com.makeit.dto.platform.dataScreen;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatDataScreenQueryDto参数")
public class PlatDataScreenQueryDTO {
@ApiModelProperty("组织ids")
private List<String> orgIds;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("开始时间")
private LocalDateTime startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("结束时间")
private LocalDateTime endTime;
}
......@@ -38,5 +38,8 @@ public class PlatElderQueryDTO extends BaseTenantDTO {
@ApiModelProperty(value = "组织id")
private String orgId;
@ApiModelProperty(value = "房间id")
private String roomId;
}
package com.makeit.dto.platform.sys;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author:lzy
* @Date:2023/9/12 10:23
* @Describe:
*/
@Data
@ApiModel("LOGO配置")
public class PlatLogoConfigDTO extends BaseIdDTO {
@ApiModelProperty("系统名称")
private String name;
@ApiModelProperty("LOGO文件ID")
private String logoFileId;
@ApiModelProperty("浏览器文件ID")
private String browserFileId;
@ApiModelProperty("背景图片ID")
private String backgroundFileId;
@ApiModelProperty("编码")
private String code;
}
package com.makeit.dto.platform.sys;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author:lzy
* @Date:2023/9/12 10:25
* @Describe:
*/
@Data
@ApiModel("LOGO配置 PlatLogoConfigDTOVO")
public class PlatLogoConfigDTOVO extends BaseIdDTO {
@ApiModelProperty("系统名称")
private String name;
@ApiModelProperty("LOGO文件ID")
private String logoFileId;
@ApiModelProperty("LOGO文件地址")
private String logoFilePath;
@ApiModelProperty("浏览器文件ID")
private String browserFileId;
@ApiModelProperty("浏览器文件地址")
private String browserFilePath;
@ApiModelProperty("背景图片ID")
private String backgroundFileId;
@ApiModelProperty("背景图片地址")
private String backgroundFilePath;
@ApiModelProperty("编码")
private String code;
}
package com.makeit.dto.platform.sys;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author:lzy
* @Date:2023/9/12 11:22
* @Describe:
*/
@Data
@ApiModel("参数")
public class PlatLogoConfigQueryDTO {
@ApiModelProperty("code")
private String code;
}
......@@ -63,4 +63,6 @@ public class PlatOrg extends BaseBusEntity {
@TableField(exist = false)
private PlatOrg parent;
private String remark;
}
\ No newline at end of file
......@@ -12,10 +12,6 @@ import lombok.Data;
@Data
public class PlatUserRole extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 用户id
......
package com.makeit.entity.platform.device;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.module.iot.enums.DeviceState;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -47,7 +48,10 @@ public class PlatDevice extends BaseBusEntity {
@ApiModelProperty(value = "说明")
private String description;
@ApiModelProperty(value = "状态 数据字典 1 在线 0离线")
/**
* @see DeviceState
*/
@ApiModelProperty(value = "状态 数据字典 1 在线 0离线 ")
private String status;
@ApiModelProperty(value = "组织id")
......
package com.makeit.entity.platform.space;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -25,12 +27,15 @@ public class PlatSpace extends BaseBusEntity {
@ApiModelProperty(value = "空间类型 1:小区/社区/街道 2:楼栋 3:单元 4 楼层")
private String type;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "完整地址")
private String address;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "经度")
private String longitude;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "纬度")
private String latitude;
......@@ -46,5 +51,9 @@ public class PlatSpace extends BaseBusEntity {
@ApiModelProperty(value = "上级全路径")
private String parentPath;
@ApiModelProperty(value = "组织id")
private String orgId;
@ApiModelProperty(value = "属性 1-居家 2-机构")
private String attribute;
}
......@@ -27,4 +27,7 @@ public class PlatLogoConfig extends BaseBusEntity {
@ApiModelProperty("背景图片ID")
private String backgroundFileId;
@ApiModelProperty("code")
private String code;
}
package com.makeit.enums.platform.alarm;
import com.makeit.enums.BaseEnum;
import com.makeit.utils.sys.SysDictUtil;
public class PlatAlarmRecordEnum {
public enum AlarmRecordStatusEnum implements BaseEnum {
HANDLED("alarm.alarmRecordStatus.handled"),
UNHANDLED("alarm.alarmRecordStatus.unhandled");
private String code;
AlarmRecordStatusEnum(String code) {
this.code = code;
}
public String getValue() {
return SysDictUtil.getValue(code);
}
}
}
package com.makeit.enums.platform.auth;
import com.makeit.enums.BaseEnum;
import com.makeit.utils.sys.SysDictUtil;
/**
* Controller
*
* @author zm
* @version 2023/9/8
*/
public class PlatOrgEnum {
public enum OrgTypeEnum implements BaseEnum {
HOME("org.type.home"),
INSTITUTION("org.type.institution");
private String code;
OrgTypeEnum(String code) {
this.code = code;
}
@Override
public String getValue() {
return SysDictUtil.getValue(code);
}
}
}
......@@ -19,7 +19,7 @@ public class PlatDeviceEnum {
}
public enum CategoryEnum implements BaseEnum {
HEART("device.category.heart"), FALL("device.status.fall"), SPACE("device.status.space");
HEART("device.category.heart"), FALL("device.category.fall"), SPACE("device.category.space");
private String code;
......
......@@ -17,4 +17,6 @@ public interface PlatBedMapper extends BaseMapper<PlatBed> {
List<PlatBedPanoramaVO> selectBySpaceIdAndStatus(@Param("dto") PlatBedPanoramaDTO dto);
List<PlatBedPanoramaVO> selectByRoomIdAndStatus(@Param("dto")PlatBedPanoramaDTO dto);
long countByOrdIdsAndType(@Param("orgIds") List<String> orgIds, @Param("orgType")String orgType);
}
package com.makeit.mapper.platform.sys;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.sys.PlatLogoConfig;
/**
* @Author:lzy
* @Date:2023/9/12 10:21
* @Describe:
*/
public interface PlatLogoConfigMapper extends BaseMapper<PlatLogoConfig> {
}
......@@ -3,6 +3,7 @@ package com.makeit.service.platform.alarm;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
......@@ -52,4 +53,8 @@ public interface PlatAlarmRecordService extends IService<PlatAlarmRecord> {
* 设备告警调用 发送消息
*/
void noticeDeviceAlarm(PlatAlarmConfig alarmConfig, PlatAlarmRecord alarmRecord);
PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO);
PlatAlarmCheckDTO getElderListByDeviceId(PlatAlarmCheckDTO platAlarmCheckDTO);
}
package com.makeit.service.platform.alarm.alarmStrategy;
import com.alibaba.fastjson.JSONObject;
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.device.PlatDevice;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Component
public class BehaviorAlarm implements IAlarm{
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
}
/**
* 3.行为异常:若长者当在某个空间停留的时间高于长者最近7天在每个空间区域停留时间的平均值+区间(区间在行为异常告警处配置)
* @param platAlarmCheckDTO
*/
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
return;
}
String personState = (String) properties.get("personState");
PlatAlarmConfigBehaviorDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigBehaviorDTOVO.class);
Integer duration = ruleConfig.getDuration();
duration = duration*60;
//todo duration+平均停留时长
List<String> personStateList = Arrays.asList("1", "2", "3");
//有人
//计数
long endLong = new Date().getTime();
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if (personStateList.contains(personState)) {
long count = endLong - startLong;
if(startLong == null ){
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong);
return;
}
if (count >= duration) {
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,startLong);
}
}else {
//
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,null);
}
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("房间名");
PlatAlarmRecord platAlarmRecord =platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
}
package com.makeit.service.platform.alarm.alarmStrategy;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigRespiratoryDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class BreathAlarm implements IAlarm{
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
}
/**
* 2.呼吸异常/心率异常:长者关联的呼吸心率雷达上报的呼吸和心率不在配置的阈值范围内,且满足持续时间进行告警,
* 若该长者在长者管理处有配置阈值,则以长者个人的阈值为准,若无,则以此处配置的通用规则为准
*
* 心率呼吸率低于阈值且满足持续时间,则对应状态为呼吸过缓/心率过缓,高于阈值且满足持续时间,
* 对应状态为呼吸过速/心率过速,呼吸心率为0且满足持续时间为呼吸暂停
* @param platAlarmCheckDTO
*/
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
return;
}
String personState = (String) properties.get("personState");
//呼吸率
int br = (int) properties.get("br");
PlatAlarmConfigRespiratoryDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigRespiratoryDTOVO.class);
Integer start = ruleConfig.getRespiratoryRateStart();
Integer end = ruleConfig.getRespiratoryRateEnd();
Integer duration = ruleConfig.getDuration();
long endLong = new Date().getTime();
//计数
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if (StringUtils.equals(personState, "0")|| startLong == null) {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
return;
}
long count = endLong - startLong;
if (br > end || br < start) {
if (count >= duration) {
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
} else {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
return;
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111");
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
}
package com.makeit.service.platform.alarm.alarmStrategy;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class FallAlarm implements IAlarm{
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.FALL;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
}
/**
* 1.长者跌倒:长者所在空间的跌倒监测雷达上报跌倒,若一个空间内有多为长者,则同时告警多条
* @param platAlarmCheckDTO
*/
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
JSONObject properties = platAlarmCheckDTO.getProperties();
String personState = (String) properties.get("personState");
if (StringUtils.equals(personState, "1")) {
notice(platAlarmCheckDTO);
}
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("房间名111");
PlatAlarmRecord platAlarmRecord = platAlarmRecordService.createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
}
package com.makeit.service.platform.alarm.alarmStrategy;
import com.alibaba.fastjson.JSONObject;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmConfigHeartDTOVO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.utils.data.convert.JsonUtil;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class HeartAlarm implements IAlarm {
@Autowired
private PlatAlarmRecordService platAlarmRecordService;
private PlatAlarmConfigEnum.AlarmTypeEnum alarmTypeEnum = PlatAlarmConfigEnum.AlarmTypeEnum.HEART;
@Override
public boolean support(String alarmType) {
return StringUtils.equals(alarmType,alarmTypeEnum.getValue());
}
@Override
public void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
String ruleConfigStr = config.getRuleConfig();
JSONObject properties = platAlarmCheckDTO.getProperties();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
String deviceId = platDevice.getOriDeviceId();
if (StringUtils.isBlank(ruleConfigStr)) {
return;
}
String personState = (String) properties.get("personState");
//心率
int hr = (int) properties.get("hr");
PlatAlarmConfigHeartDTOVO ruleConfig = JsonUtil.toObj(ruleConfigStr, PlatAlarmConfigHeartDTOVO.class);
Integer start = ruleConfig.getHeartRateStart();
Integer end = ruleConfig.getHeartRateEnd();
Integer duration = ruleConfig.getDuration();
long endLong = new Date().getTime();
//计数
Long startLong = RedisUtil.get(RedisConst.ALARM_DEVICE_ID + deviceId);
if (StringUtils.equals(personState, "0")|| startLong == null) {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
return;
}
long count = endLong - startLong;
if (hr > end || hr < start) {
if (count >= duration) {
notice(platAlarmCheckDTO);
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
} else {
RedisUtil.set(RedisConst.ALARM_DEVICE_ID + deviceId,endLong/1000);
}
}
@Override
@Async
public void notice(PlatAlarmCheckDTO platAlarmCheckDTO) {
platAlarmRecordService.getElderListByDeviceId(platAlarmCheckDTO);
platAlarmCheckDTO.getParam().add("呼吸状态111");
PlatAlarmRecord platAlarmRecord =platAlarmRecordService. createPlatAlarmRecord(platAlarmCheckDTO);
platAlarmRecordService.noticeDeviceAlarm(platAlarmCheckDTO.getPlatAlarmConfig(),platAlarmRecord);
}
}
package com.makeit.service.platform.alarm.alarmStrategy;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
public interface IAlarm {
boolean support(String alarmType);
void checkConfig(PlatAlarmCheckDTO platAlarmCheckDTO);
void notice(PlatAlarmCheckDTO platAlarmCheckDTO);
}
......@@ -14,17 +14,13 @@ import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.mapper.platform.alarm.PlatAlarmConfigMapper;
import com.makeit.module.admin.dto.plat.PlatTenantDTOVO;
import com.makeit.module.system.entity.SysConfig;
import com.makeit.module.system.entity.SysConfigCategory;
import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.auth.PlatUserService;
import com.makeit.utils.AlarmConfigCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.validate.MapUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.user.plat.PlatUserVO;
import com.makeit.vo.platform.alarm.PlatAlarmConfigListVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -32,7 +28,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
/**
......@@ -49,6 +44,9 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
@Autowired
private PlatUserService platUserService;
@Autowired
private AlarmConfigCacheUtil alarmConfigUtil;
@Override
public List<PlatAlarmConfigListVO> list(PlatAlarmConfigQueryDTO dto) {
......@@ -76,6 +74,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
save(alarmConfig);
alarmConfigUtil.put(alarmConfig);
}
@Override
......@@ -91,12 +91,19 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
updateById(alarmConfig);
alarmConfigUtil.put(alarmConfig);
}
@Override
@Transactional
public void edit(PlatAlarmConfigDTOVO dto) {
updateById(BeanDtoVoUtils.convert(dto, PlatAlarmConfig.class));
PlatAlarmConfig alarmConfig = BeanDtoVoUtils.convert(dto, PlatAlarmConfig.class);
updateById(alarmConfig);
alarmConfigUtil.put(alarmConfig);
}
@Override
......@@ -144,6 +151,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
alarmConfig.setStatus(dto.getStatus());
updateById(alarmConfig);
alarmConfigUtil.put(alarmConfig);
}
@Override
......@@ -162,6 +171,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
alarmConfig.setContentAudit(null);
updateById(alarmConfig);
alarmConfigUtil.put(alarmConfig);
}
@Transactional
......@@ -193,6 +204,8 @@ public class PlatAlarmConfigServiceImpl extends ServiceImpl<PlatAlarmConfigMappe
});
saveBatch(configList);
alarmConfigUtil.putAll(configList);
}
}
......@@ -7,11 +7,16 @@ import com.makeit.common.entity.BaseBusEntity;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.alarm.PlatAlarmCheckDTO;
import com.makeit.dto.platform.alarm.PlatAlarmRecordQueryDTO;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.alarm.PlatAlarmRecord;
import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.elder.PlatElderChildrenInfo;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.enums.CommonEnum;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
......@@ -20,6 +25,9 @@ import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.service.platform.alarm.PlatAlarmRecordService;
import com.makeit.service.platform.auth.PlatUserService;
import com.makeit.service.platform.elder.PlatElderChildrenInfoService;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.msg.MsgSendUtil;
......@@ -40,9 +48,12 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
......@@ -65,6 +76,14 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
@Autowired
private MsgSendUtil msgUtil;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Autowired
private PlatElderService platElderService;
@Autowired
private PlatRoomService platRoomService;
@Override
public PageVO<PlatAlarmRecordVO> page(PageReqDTO<PlatAlarmRecordQueryDTO> dto) {
PlatAlarmRecordQueryDTO param = dto.getData();
......@@ -276,5 +295,78 @@ public class PlatAlarmRecordServiceImpl extends ServiceImpl<PlatAlarmRecordMappe
}
}
@Override
public PlatAlarmRecord createPlatAlarmRecord(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatAlarmConfig config = platAlarmCheckDTO.getPlatAlarmConfig();
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
List<String> param = platAlarmCheckDTO.getParam();
List<PlatElder> elderList = platAlarmCheckDTO.getPlatElderList();
String elderNameJoin = elderList.stream().map(PlatElder::getName).collect(Collectors.joining(" "));
PlatAlarmRecord platAlarmRecord = new PlatAlarmRecord();
platAlarmRecord.setAlarmId(config.getId());
platAlarmRecord.setAlarmType(config.getAlarmType());
platAlarmRecord.setAlarmDate(new Date());
platAlarmRecord.setStatus("0");
//todo
platAlarmRecord.setContent(replaceParam(elderNameJoin, param));
platAlarmRecord.setOrgId(platDevice.getOrgId());
platAlarmRecord.setNotifyUser(config.getNotifyUser());
platAlarmRecord.setDeviceId(platDevice.getId());
platAlarmRecord.setElderIds(elderList.stream().map(BaseEntity::getId).collect(Collectors.joining(",")));
platAlarmRecord.setTenantId(config.getTenantId());
return platAlarmRecord;
}
@Override
public PlatAlarmCheckDTO getElderListByDeviceId(PlatAlarmCheckDTO platAlarmCheckDTO) {
PlatDevice platDevice = platAlarmCheckDTO.getPlatDevice();
LambdaQueryWrapper<PlatRoomBedDevice> roomBedDeviceLambdaQueryWrapper = new LambdaQueryWrapper<>();
roomBedDeviceLambdaQueryWrapper.eq(PlatRoomBedDevice::getDeviceId, platDevice.getId());
PlatRoomBedDevice platRoomBedDevice = platRoomBedDeviceService.getOne(roomBedDeviceLambdaQueryWrapper, false);
PlatRoom platRoom = platRoomService.getById(platRoomBedDevice.getRoomId());
platAlarmCheckDTO.setPlatRoom(platRoom);
if (platRoomBedDevice == null) {
return platAlarmCheckDTO;
}
String bedId = platRoomBedDevice.getBedId();
if (StringUtils.isNotBlank(bedId)) {
LambdaQueryWrapper<PlatElder> elderLambdaQueryWrapper = new LambdaQueryWrapper<>();
elderLambdaQueryWrapper.eq(PlatElder::getBedId, bedId);
List<PlatElder> list = platElderService.list(elderLambdaQueryWrapper);
platAlarmCheckDTO.setPlatElderList(list);
return platAlarmCheckDTO;
}
String roomId = platRoomBedDevice.getRoomId();
if (StringUtils.isNotBlank(roomId)) {
LambdaQueryWrapper<PlatElder> elderLambdaQueryWrapper = new LambdaQueryWrapper<>();
elderLambdaQueryWrapper.eq(PlatElder::getRoomId, roomId);
List<PlatElder> list = platElderService.list(elderLambdaQueryWrapper);
platAlarmCheckDTO.setPlatElderList(list);
return platAlarmCheckDTO;
}
return platAlarmCheckDTO;
}
private String replaceParam(String oriContent,List<String> param) {
Pattern p = Pattern.compile("\\[#\\d+\\]|\\[#[\\p{IsHan}]+\\]|\\[#[^\\]]*\\]");
Matcher m = p.matcher(oriContent);
StringBuffer sb = new StringBuffer();
if (!m.find()) {
return oriContent;
}
m.reset();
int i = 0;
while (m.find()) {
m.appendReplacement(sb, param.get(i));
i++;
}
m.appendTail(sb);
return sb.toString();
}
}
......@@ -94,4 +94,6 @@ public interface PlatOrgService extends IService<PlatOrg> {
* @param platOrg
*/
void saveOrg(PlatOrg platOrg);
List<PlatOrg> createOrgTree(List<PlatOrg> orgList);
}
......@@ -302,9 +302,8 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
public void edit(PlatOrg dto) {
check(dto);
if (StringUtils.isBlank(dto.getParentId())||StringUtils.equals(dto.getParentId(),"1")) {
String tenantId = TenantIdUtil.getTenantId();
dto.setParentId(tenantId);
dto.setPath(tenantId);
dto.setParentId("1");
dto.setPath("1");
} else {
PlatOrg parent = getById(dto.getParentId());
dto.setPath(parent.getPath() + "," + parent.getId());
......@@ -453,7 +452,11 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
public List<PlatOrg> createOrgTree(List<PlatOrg> orgList) {
Map<String, PlatOrg> orgMap = orgList.stream().collect(Collectors.toMap(BaseEntity::getId, vo -> vo, (a, b) -> a));
for (PlatOrg platOrg : orgList) {
String[] split = platOrg.getPath().split(",");
String path = platOrg.getPath();
if(StringUtils.isBlank(path)){
continue;
}
String[] split = path.split(",");
findParent(orgMap,platOrg,split,split.length-1);
}
return orgList.stream().filter(vo->StringUtils.isBlank(vo.getParentNodeId())).collect(Collectors.toList());
......@@ -514,7 +517,9 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
private LambdaQueryWrapper<PlatOrg> getLambdaQueryWrapper(PlatOrgQueryDTO dto) {
LambdaQueryWrapper<PlatOrg> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatOrg::getParentId, dto.getParentId())
queryWrapper.eq(StringUtils.isNotBlank(dto.getParentId()), PlatOrg::getParentId, dto.getParentId())
.like(StringUtils.isNotBlank(dto.getName()),PlatOrg::getName,dto.getName())
.eq(StringUtils.isNotBlank(dto.getType()),PlatOrg::getType,dto.getType())
.orderByDesc(BaseEntity::getUpdateDate);
return queryWrapper;
}
......@@ -524,8 +529,32 @@ public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
public List<PlatOrg> subOrgList(PlatOrgQueryDTO platOrgQueryDTO) {
LambdaQueryWrapper<PlatOrg> queryWrapper = getLambdaQueryWrapper(platOrgQueryDTO);
List<PlatOrg> list = list(queryWrapper);
if(CollectionUtils.isEmpty(list)){
return new ArrayList<>();
}
Set<String> filterSet = list.stream().flatMap(vo -> {
String path = vo.getPath()+","+vo.getId();
String[] split = path.split(",");
return Stream.of(split);
}).collect(Collectors.toSet());
List<PlatOrg> total = list();
List<PlatOrg> orgTree = createOrgTree2(total,filterSet);
return orgTree;
}
private List<PlatOrg> createOrgTree2(List<PlatOrg> orgList,Set<String> filterSet){
if(CollectionUtils.isEmpty(orgList)){
return new ArrayList<>();
}
Map<String, List<PlatOrg>> parentMap = orgList.stream()
.filter(vo->filterSet.contains(vo.getId()))
.collect(Collectors.groupingBy(PlatOrg::getParentId));
orgList.forEach(vo->{
vo.setChildren(parentMap.get(vo.getId()));
});
return list(queryWrapper);
return orgList.stream().filter(vo->StringUtils.equals(vo.getParentId(),"1")).collect(Collectors.toList());
}
/**
......
......@@ -756,7 +756,7 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
private void setRoleList(PlatPersonDTOVO dto) {
platUserRoleService.remove(new QueryWrapper<PlatUserRole>().lambda()
.eq(PlatUserRole::getUserId, dto.getId()));
if (dto.getRoleList() != null) {
if (dto.getRoleIdList() != null) {
List<PlatUserRole> userRoleList = StreamUtil.map(dto.getRoleIdList(), e -> {
PlatUserRole tntUserRole = new PlatUserRole();
tntUserRole.setUserId(dto.getId());
......@@ -1045,33 +1045,37 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
Map<String, String> mobileMap = userList.stream().collect(Collectors.toMap(PlatUser::getMobile, BaseEntity::getId, (a, b) -> a));
Map<String, String> emailMap = userList.stream().collect(Collectors.toMap(PlatUser::getEmail, BaseEntity::getId, (a, b) -> a));
return ExcelValidatorUtil.validate( platUserImportDTOS, list -> {
return ExcelValidatorUtil.validateMain(3, platUserImportDTOS, list -> {
List<ExcelErrorVo> errorVoList = new ArrayList<>();
int start = 3;
for (int i = 0; i < list.size(); i++) {
PlatUserImportDTO dto = list.get(i);
for (int i = 0; i < platUserImportDTOS.size(); i++) {
PlatUserImportDTO dto = platUserImportDTOS.get(i);
ExcelErrorVo.isNotNull(dto.getUsername(),errorVoList, start+i,"姓名*");
ExcelErrorVo.isNotNull(dto.getMobile(),errorVoList,start+i,"手机号*");
ExcelErrorVo.isNotNull(dto.getRoleName(),errorVoList,start+i,"角色*");
ExcelErrorVo.isNotNull(dto.getRoleName(),errorVoList,start+i,"所属组织*");
ExcelErrorVo.isNotNull(dto.getRoleName(),errorVoList,start+i,"*角色");
ExcelErrorVo.isNotNull(dto.getOrgName(),errorVoList,start+i,"*所属组织");
ExcelErrorVo.notExists(orgNameMap.get(dto.getOrgName()),errorVoList,start+i,"所属组织*");
ExcelErrorVo.notExists(roleNameMap.get(dto.getRoleName()),errorVoList,start+i,"角色*");
ExcelErrorVo.notExists(mobileMap.get(dto.getMobile()),errorVoList,start+i,"手机号*");
ExcelErrorVo.notExists(emailMap.get(dto.getEmail()),errorVoList,start+i,"邮箱");
ExcelErrorVo.notExists(orgNameMap.get(dto.getOrgName()),errorVoList,start+i,"*所属组织");
ExcelErrorVo.notExists(roleNameMap.get(dto.getRoleName()),errorVoList,start+i,"*角色");
ExcelErrorVo.exists(mobileMap,mobileMap.get(dto.getMobile()),errorVoList,start+i,"手机号*");
ExcelErrorVo.exists(emailMap,emailMap.get(dto.getEmail()),errorVoList,start+i,"邮箱");
}
if(errorVoList.isEmpty()){
List<PlatUser> platUsers = new ArrayList<>();
list.forEach(vo->{
platUserImportDTOS.forEach(vo->{
PlatUser platUser = BeanDtoVoUtils.convert(vo, PlatUser.class);
setPassword(platUser);
vo.setPassword(PasswordUtils.encryptPassword(vo.getPassword()));
platUser.setStatus(CommonEnum.YES.getValue());
platUser.setTenantId(TenantIdUtil.getTenantId());
platUser.setAccount(platUser.getMobile());
platUser.setIsTenant(CommonEnum.NO.getValue());
platUsers.add(platUser);
});
saveBatch(platUsers);
}
return errorVoList;
},null);
});
}
......
package com.makeit.service.platform.dataScreen;
import com.makeit.dto.platform.dataScreen.PlatDataScreenQueryDTO;
import com.makeit.vo.platform.dataScreen.*;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
public interface DataScreenService {
PlatAgeStatisticsVO ageStatistics(PlatDataScreenQueryDTO dto);
PlatSexStatisticsVO sexStatistics(PlatDataScreenQueryDTO dto);
PlatDeviceStatisticsVO deviceStatistics(PlatDataScreenQueryDTO dto);
PlatAlarmStatisticsVO alarmStatistics(PlatDataScreenQueryDTO dto);
PlatBaseInfoStatisticsVO baseInfoStatistics(PlatDataScreenQueryDTO dto);
PlatMapStatisticsVO mapStatistics(PlatDataScreenQueryDTO dto);
}
......@@ -49,11 +49,4 @@ public interface PlatDeviceService extends IService<PlatDevice> {
* @return
*/
PlatDeviceDetailDTO getDetailDTO(String deviceId);
/**
* 编辑
*
* @param platDevice
*/
void edit(PlatDevice platDevice);
}
......@@ -2,8 +2,6 @@ package com.makeit.service.platform.device.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.entity.BaseBusEntity;
......@@ -25,6 +23,7 @@ import com.makeit.mapper.platform.device.PlatDeviceMapper;
import com.makeit.service.platform.auth.PlatOrgService;
import com.makeit.service.platform.device.PlatDeviceOtherService;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.utils.DeviceCacheUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
......@@ -55,6 +54,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
@Autowired
private PlatOrgService platOrgService;
@Autowired
private DeviceCacheUtil deviceCacheUtil;
@Override
public PageVO<PlatDeviceListVO> page(PageReqDTO<PlatDeviceQueryDTO> pageReqDTO) {
......@@ -105,6 +106,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
updateById(db);
deviceCacheUtil.put(db);
}
@Override
......@@ -144,6 +147,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
updateById(db);
deviceCacheUtil.put(db);
platDeviceOtherService.saveOrUpdate(other);
......@@ -169,6 +174,8 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
updateById(db);
deviceCacheUtil.put(db);
platDeviceOtherService.saveOrUpdate(other);
}
......@@ -214,20 +221,4 @@ public class PlatDeviceServiceImpl extends ServiceImpl<PlatDeviceMapper, PlatDev
.orderByDesc(BaseEntity::getUpdateDate);
}
/**
* 编辑
*
* @param platDevice
*/
@Override
@Transactional
public void edit(PlatDevice platDevice) {
LambdaUpdateWrapper<PlatDevice> updateWrapper = Wrappers.lambdaUpdate(PlatDevice.class)
.eq(BaseEntity::getId, platDevice.getId())
.set(PlatDevice::getOriDeviceId, platDevice.getOriDeviceId())
.set(PlatDevice::getName, platDevice.getName())
.set(PlatDevice::getProductName, platDevice.getProductName())
.set(PlatDevice::getDescription, platDevice.getDescription());
this.update(updateWrapper);
}
}
......@@ -57,4 +57,6 @@ public interface PlatBedService extends IService<PlatBed> {
List<PlatBedPanoramaVO> selectBySpaceIdAndStatus(PlatBedPanoramaDTO dto);
List<PlatBedPanoramaVO> selectByRoomIdAndStatus(PlatBedPanoramaDTO dto);
}
List<PlatBed> list(PlatBedQueryDTO dto);
long countByOrdIds(List<String> orgIds);}
package com.makeit.service.platform.space;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.space.PlatRoomPanoramaDTO;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import com.makeit.vo.platform.space.PlatRoomPanoramaVO;
import com.makeit.vo.platform.space.PlatSpaceAndRoomVO;
......@@ -23,4 +25,5 @@ public interface PlatRoomDynamicService {
List<PlatSpaceAndRoomVO> bedPanoramaTree();
List<PlatElder> elderList(PlatElderQueryDTO dto);
}
......@@ -6,22 +6,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDTO;
import com.makeit.dto.platform.space.*;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.device.PlatDeviceEnum;
import com.makeit.enums.platform.auth.PlatOrgEnum;
import com.makeit.exception.BusinessException;
import com.makeit.mapper.platform.space.PlatBedMapper;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.service.platform.space.PlatRoomService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;import com.makeit.utils.data.convert.PageUtil;
import com.makeit.vo.platform.space.PlatBedPanoramaVO;
import jodd.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -40,7 +38,7 @@ import java.util.stream.Collectors;
public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> implements PlatBedService {
@Autowired
private PlatDeviceService platDeviceService;
private PlatRoomService platRoomService;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
......@@ -106,6 +104,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NAME_EXIT);
}
platBed.setName(dto.getName());
updateById(platBed);
}
@Override
......@@ -127,9 +128,10 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
if(platRoomBedDeviceService.count(queryWrapper) > 0){
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NOT_DEL);
}
removeById(id);
}
PlatRoom platRoom = platRoomService.getById(platBed.getRoomId());
platRoom.setBedNumber(platRoom.getBedNumber()-1);
platRoomService.updateById(platRoom); }
@Transactional(rollbackFor = Exception.class)
@Override
......@@ -157,5 +159,24 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
return baseMapper.selectByRoomIdAndStatus(dto);
}
@Override
public List<PlatBed> list(PlatBedQueryDTO dto) {
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatRoomBedDevice::getRoomId,dto.getRoomId());
queryWrapper.select(PlatRoomBedDevice::getBedId);
List<PlatRoomBedDevice> listDevices = platRoomBedDeviceService.list(queryWrapper);
List<String> listBedIds = listDevices.stream().map(item->item.getBedId()).collect(Collectors.toList());
LambdaQueryWrapper<PlatBed> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(StringUtil.isNotEmpty(dto.getRoomId()), PlatBed::getRoomId, dto.getRoomId());
queryWrapper1.notIn(!listBedIds.isEmpty(),PlatBed::getId,listBedIds);
List<PlatBed> list = list(queryWrapper1);
return list;
}
}
@Override
public long countByOrdIds(List<String> orgIds) {
return baseMapper.countByOrdIdsAndType(orgIds, PlatOrgEnum.OrgTypeEnum.INSTITUTION.getValue());
}}
package com.makeit.service.platform.space.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.makeit.dto.platform.elder.PlatElderQueryDTO;
import com.makeit.dto.platform.space.PlatBedPanoramaDTO;
import com.makeit.dto.platform.space.PlatRoomPanoramaDTO;
import com.makeit.entity.platform.elder.PlatElder;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.platform.space.PlatBedPanoramaSpaceType;
import com.makeit.enums.platform.space.PlatRoomStatusEnum;
import com.makeit.mapper.platform.space.PlatBedMapper;
import com.makeit.mapper.platform.space.PlatRoomMapper;
import com.makeit.mapper.platform.space.PlatSpaceMapper;
import com.makeit.service.platform.elder.PlatElderService;
import com.makeit.service.platform.space.PlatBedService;
import com.makeit.service.platform.space.PlatRoomDynamicService;
import com.makeit.service.platform.space.PlatRoomService;
......@@ -43,6 +43,8 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
private PlatRoomService platRoomService;
@Autowired
private PlatBedService platBedService;
@Autowired
private PlatElderService platElderService;
@Override
......@@ -168,6 +170,13 @@ public class PlatRoomDynamicServiceImpl implements PlatRoomDynamicService {
return data;
}
@Override
public List<PlatElder> elderList(PlatElderQueryDTO dto) {
List<PlatElder> list = platElderService.list(new QueryWrapper<PlatElder>().lambda()
.eq(PlatElder::getRoomId, dto.getRoomId()));
return list;
}
private PlatSpaceAndRoomVO child(PlatSpaceAndRoomVO vo,Map<String,List<PlatSpaceAndRoomVO>> map){
if(!map.containsKey(vo.getId())){
......
......@@ -36,10 +36,27 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
@Autowired
private PlatBedService platBedService;
private void checkName(PlatRoom platRoom){
LambdaQueryWrapper<PlatRoom> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatRoom::getSpaceId,platRoom.getSpaceId());
queryWrapper.eq(PlatRoom::getName,platRoom.getName());
if(platRoom.getId() != null){
queryWrapper.ne(PlatRoom::getId,platRoom.getId());
}
if(count(queryWrapper) > 0){
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_NAME_EXIT);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void add(PlatRoomDTO dto) {
PlatRoom platRoom = BeanDtoVoUtils.convert(dto, PlatRoom.class);
checkName(platRoom);
save(platRoom);
platBedService.add(platRoom);
......@@ -59,8 +76,9 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
platRoom.setDescription(dto.getDescription());
platRoom.setSpaceId(dto.getSpaceId());
platRoom.setSpacePath(dto.getSpacePath());
updateById(platRoom);
checkName(platRoom);
updateById(platRoom);
platBedService.add(platRoom);
}
......
package com.makeit.service.platform.sys;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.dto.platform.sys.PlatLogoConfigDTO;
import com.makeit.dto.platform.sys.PlatLogoConfigDTOVO;
import com.makeit.dto.platform.sys.PlatLogoConfigQueryDTO;
import com.makeit.entity.platform.sys.PlatLogoConfig;
/**
* @Author:lzy
* @Date:2023/9/12 10:19
* @Describe:
*/
public interface PlatLogoConfigService extends IService<PlatLogoConfig> {
/**
* 添加
* @param dto
*/
void add(PlatLogoConfigDTO dto);
/**
* 详情
* @return
*/
PlatLogoConfigDTOVO view(PlatLogoConfigQueryDTO dto);
}
package com.makeit.service.platform.sys.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.dto.platform.sys.PlatLogoConfigDTO;
import com.makeit.dto.platform.sys.PlatLogoConfigDTOVO;
import com.makeit.dto.platform.sys.PlatLogoConfigQueryDTO;
import com.makeit.entity.platform.sys.PlatLogoConfig;
import com.makeit.mapper.platform.sys.PlatLogoConfigMapper;
import com.makeit.module.system.dto.SysFileDTOVO;
import com.makeit.service.platform.sys.PlatLogoConfigService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.sys.FileUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author:lzy
* @Date:2023/9/12 10:19
* @Describe:
*/
@Service
public class PlatLogoConfigServiceImpl extends ServiceImpl<PlatLogoConfigMapper, PlatLogoConfig> implements PlatLogoConfigService {
@Override
@Transactional(rollbackFor = Exception.class)
public void add(PlatLogoConfigDTO dto) {
PlatLogoConfig platLogoConfig = BeanDtoVoUtils.convert(dto,PlatLogoConfig.class);
if(dto.getId() != null){
updateById(platLogoConfig);
}else{
save(platLogoConfig);
}
}
@Override
public PlatLogoConfigDTOVO view(PlatLogoConfigQueryDTO dto) {
LambdaQueryWrapper<PlatLogoConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatLogoConfig::getCode,dto.getCode());
List<PlatLogoConfig> list = list(queryWrapper);
PlatLogoConfigDTOVO data = new PlatLogoConfigDTOVO();
if(!list.isEmpty()){
data = BeanDtoVoUtils.convert(list.get(0),PlatLogoConfigDTOVO.class);
List<String> fileIds = new ArrayList<>();
fileIds.add(data.getLogoFileId());
fileIds.add(data.getBrowserFileId());
fileIds.add(data.getBackgroundFileId());
List<SysFileDTOVO> listFile = FileUtil.convert(fileIds);
Map<String,String> map = listFile.stream().collect(Collectors.toMap(SysFileDTOVO::getId,SysFileDTOVO::getFullUrl,(k1,k2)->k1));
data.setLogoFilePath(map.get(data.getLogoFileId()));
data.setBrowserFilePath(map.get(data.getBrowserFileId()));
data.setBackgroundFilePath(map.get(data.getBackgroundFileId()));
}
return data;
}
}
package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.entity.saas.SaasMenu;
import com.makeit.module.admin.dto.saas.SaasMenuDTOVO;
import com.makeit.module.admin.dto.saas.SaasMenuQueryDTO;
......@@ -30,4 +31,6 @@ public interface SaasMenuService extends IService<SaasMenu> {
void sync();
void changeStatus(StatusDTO dto);
}
......@@ -2,6 +2,7 @@ package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO;
import com.makeit.entity.saas.SaasMenu;
import com.makeit.entity.saas.SaasRoleMenu;
import com.makeit.enums.CodeMessageEnum;
......@@ -332,5 +333,20 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i
return button;
}
@Transactional
@Override
public void changeStatus(StatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
SaasMenu saasMenu = getById(dto.getId());
if (saasMenu.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
saasMenu.setStatus(dto.getStatus());
updateById(saasMenu);
}
}
package com.makeit.task;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.makeit.common.entity.BaseBusEntity;
import com.makeit.entity.platform.device.PlatDevice;
......@@ -8,10 +9,12 @@ import com.makeit.enums.CommonEnum;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.module.iot.service.IotOrgService;
import com.makeit.module.iot.vo.DeviceInstanceEntity;
import com.makeit.module.iot.vo.DeviceState;
import com.makeit.module.system.service.SysDictionaryCategoryService;
import com.makeit.module.system.vo.DictionaryVo;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.DeviceCacheUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -39,13 +42,15 @@ public class IotSyncTask {
private PlatDeviceService platDeviceService;
@Autowired
private SysDictionaryCategoryService sysDictionaryCategoryService;
@Autowired
private DeviceCacheUtil deviceCacheUtil;
/**
* 一小时同步一次
* 启用状态的租户才同步
* 新增和更新平台端设备表
*/
@Scheduled(cron = "0 0 */1 * * ?")
// @Scheduled(cron = "0 0 */1 * * ?")
@TenantIdIgnore
public void syncEquipmentInfo() {
log.info("开始执行同步设备信息接口");
......@@ -73,6 +78,8 @@ public class IotSyncTask {
//更新平台设备
Collection<PlatDevice> platDevices = convertToPlatDevice(iotDeviceList, deviceList, platTenant.getId(), dicNameIdMap);
platDeviceService.saveOrUpdateBatch(platDevices);
deviceCacheUtil.putAll(platDevices);
}
log.info("结束执行同步设备信息接口");
......@@ -106,7 +113,8 @@ public class IotSyncTask {
platDevice.setRegistrationDate(registryTime);
platDevice.setDescription(iotDevice.getDescribe());
String state = iotDevice.getState();
platDevice.setStatus(StringUtils.equals("online", state) ? CommonEnum.YES.getValue() : CommonEnum.NO.getValue());
DeviceState deviceState = JSON.parseObject(state, DeviceState.class);
platDevice.setStatus(deviceState.getValue());
//todo 根据类型名称来匹配
platDevice.setCategory(dicNameIdMap.get(iotDevice.getProductName()));
......@@ -128,5 +136,10 @@ public class IotSyncTask {
});
return deviceMap.values();
}
/**
* 床位id 绑定的所有设备
* 房间id 绑定的所有设备
*
*/
}
package com.makeit.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.makeit.entity.platform.alarm.PlatAlarmConfig;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.platform.alarm.PlatAlarmConfigEnum;
import com.makeit.enums.platform.device.PlatDeviceEnum;
import com.makeit.enums.redis.RedisConst;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.alarm.PlatAlarmConfigService;
import com.makeit.utils.redis.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class AlarmConfigCacheUtil implements ApplicationRunner {
/**
* key orgId:type
*/
@Autowired
private PlatAlarmConfigService platAlarmConfigService;
public List<PlatAlarmConfig> getAll() {
List<PlatAlarmConfig> list = platAlarmConfigService.list(new LambdaQueryWrapper<PlatAlarmConfig>().eq(PlatAlarmConfig::getStatus, CommonEnum.YES.getValue()));
list.stream().forEach(vo -> {
put(vo);
});
return list;
}
public void put(PlatAlarmConfig alarmConfig) {
if (StringUtils.equals(CommonEnum.YES.getValue(),alarmConfig.getStatus())) {
RedisUtil.set(RedisConst.ALARM_CONFIG_ORG_ID+alarmConfig.getOrgId() + ":" + alarmConfig.getAlarmType(),alarmConfig);
} else {
RedisUtil.delete(RedisConst.ALARM_CONFIG_ORG_ID+alarmConfig.getOrgId() + ":" + alarmConfig.getAlarmType());
}
}
public void putAll(List<PlatAlarmConfig> alarmConfigs) {
alarmConfigs.forEach(vo -> {
put(vo);
});
}
public PlatAlarmConfig get(String orgIdType) {
return RedisUtil.get(RedisConst.ALARM_CONFIG_ORG_ID+orgIdType);
}
/**
* Callback used to run the bean.
*
* @param args incoming application arguments
* @throws Exception on error
*/
@Override
@TenantIdIgnore
public void run(ApplicationArguments args) throws Exception {
getAll();
}
public List<PlatAlarmConfig> getDeviceAlarmConfigMap(PlatDevice platDevice) {
if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.HEART.getValue())) {
List<PlatAlarmConfig> set = new ArrayList<>();
set.add(this.get(platDevice.getOrgId() + PlatAlarmConfigEnum.AlarmTypeEnum.BREATHE.getValue()));
set.add(this.get(platDevice.getOrgId() + PlatAlarmConfigEnum.AlarmTypeEnum.HEART.getValue()));
}
if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.FALL.getValue())) {
List<PlatAlarmConfig> set = new ArrayList<>();
set.add(this.get(platDevice.getOrgId() + PlatAlarmConfigEnum.AlarmTypeEnum.FALL.getValue()));
}
if (StringUtils.equals(platDevice.getCategory(), PlatDeviceEnum.CategoryEnum.SPACE.getValue())) {
List<PlatAlarmConfig> set = new ArrayList<>();
set.add(this.get(platDevice.getOrgId() + PlatAlarmConfigEnum.AlarmTypeEnum.BEHAVIOR.getValue()));
}
return new ArrayList<>();
}
}
package com.makeit.utils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.makeit.entity.platform.device.PlatDevice;
import com.makeit.enums.redis.RedisConst;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.utils.redis.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.List;
@Component
public class DeviceCacheUtil implements ApplicationRunner {
@Autowired
private PlatDeviceService platDeviceService;
public List<PlatDevice> getAll() {
List<PlatDevice> list = platDeviceService.list(new LambdaQueryWrapper<PlatDevice>());
list.stream().forEach(vo -> {
put(vo);
});
return list;
}
public void put(PlatDevice platDevice) {
RedisUtil.set(RedisConst.PLAT_IOT_DEVICE_PREFIX+platDevice.getOriDeviceId(), platDevice);
}
public PlatDevice get(String oriDeviceId) {
PlatDevice platDevice = RedisUtil.get(RedisConst.PLAT_IOT_DEVICE_PREFIX + oriDeviceId);
if(platDevice==null){
getAll();
}
return RedisUtil.get(RedisConst.PLAT_IOT_DEVICE_PREFIX + oriDeviceId);
}
public void putAll(Collection<PlatDevice> platDeviceList) {
platDeviceList.forEach(vo -> {
put(vo);
});
}
/**
* Callback used to run the bean.
*
* @param args incoming application arguments
* @throws Exception on error
*/
@Override
@TenantIdIgnore
public void run(ApplicationArguments args) throws Exception {
getAll();
}
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatAgeStatisticsVO对象")
public class PlatAgeStatisticsVO {
@ApiModelProperty(value = "60以下")
private Long belowSixtyNumber;
@ApiModelProperty(value = "60-70")
private Long sixtyToSeventyNumber;
@ApiModelProperty(value = "71-80")
private Long seventyOneToEightyNumber;
@ApiModelProperty(value = "81-90")
private Long EightyOneToNinetyNumber;
@ApiModelProperty(value = "90以上")
private Long aboveNinetyNumber;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Controller
*
* @author zm
* @version 2023/9/12
*/
@Data
@ApiModel("PlatAlarmStatisticsListVo对象")
public class PlatAlarmStatisticsListVo {
@ApiModelProperty(value = "长者姓名")
private String elderName;
@ApiModelProperty(value = "告警类型")
private String type;
@ApiModelProperty(value = "状态")
private String status;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatAlarmStatisticsVO对象")
public class PlatAlarmStatisticsVO {
@ApiModelProperty(value = "累计告警")
private Long totla;
@ApiModelProperty(value = "已处理数")
private Long handledNumber;
@ApiModelProperty(value = "待处理数")
private Long unhandledNumber;
private List<PlatAlarmStatisticsListVo> list;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatAlarmStatisticsVO对象")
public class PlatBaseInfoStatisticsVO {
@ApiModelProperty(value = "累计服务长者")
private Long elderNumber;
@ApiModelProperty(value = "当前在住长者")
private Long currentElderNumber;
@ApiModelProperty(value = "床位总数")
private Long bedNumber;
@ApiModelProperty(value = "服务人员")
private Long userNumber;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatDeviceStatisticsVO对象")
public class PlatDeviceStatisticsVO {
@ApiModelProperty(value = "总数")
private Long totla;
@ApiModelProperty(value = "在线数")
private Long onlineNumber;
@ApiModelProperty(value = "故障数")
private Long faultNumber;
@ApiModelProperty(value = "离线数")
private Long offlineNumber;
@ApiModelProperty(value = "禁用数")
private Long disableNumber;
@ApiModelProperty(value = "呼吸心率雷达数")
private Long heartNumber;
@ApiModelProperty(value = "跌倒检测雷达数")
private Long fallNumber;
@ApiModelProperty(value = "空间人体雷达数")
private Long spaceNumber;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatMapStatisticsSpaceVO对象")
public class PlatMapStatisticsSpaceVO {
@ApiModelProperty(value = "空间id")
private String spaceId;
@ApiModelProperty(value = "空间名称")
private String spaceName;
@ApiModelProperty(value = "空间地址")
private String address;
@ApiModelProperty(value = "经度")
private String longitude;
@ApiModelProperty(value = "纬度")
private String latitude;
@ApiModelProperty(value = "长者数量")
private Long elderNumber;
@ApiModelProperty(value = "今日告警数")
private Long alarmNumber;
@ApiModelProperty(value = "待处理告警")
private Long unHandledNumber;
}
package com.makeit.vo.platform.dataScreen;
import com.makeit.utils.area.ChinaAreaVO;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.util.List;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatMapStatisticsVO对象")
public class PlatMapStatisticsVO {
private List<ChinaAreaVO> areas;
private List<PlatMapStatisticsSpaceVO> spaceList;
}
package com.makeit.vo.platform.dataScreen;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* Controller
*
* @author zm
* @version 2023/9/11
*/
@Data
@ApiModel("PlatSexStatisticsVO对象")
public class PlatSexStatisticsVO {
@ApiModelProperty(value = "男性人数")
private Long manNumber;
@ApiModelProperty(value = "女性人数")
private Long womanNumber;
@ApiModelProperty(value = "男性比例")
private BigDecimal manRate;
@ApiModelProperty(value = "女性比例")
private BigDecimal womanRate;
}
......@@ -33,5 +33,21 @@
</where>
</select>
<select id="countByOrdIdsAndType" resultType="java.lang.Long">
SELECT count(*) from plat_bed pb LEFT JOIN plat_space ps ON pb.space_id = ps.id
<where>
ps.del_flag = 0
<if test="orgIds != null and orgIds != '' ">
AND ps.org_id IN
<foreach collection="orgIds" item="item" separator="," open="(" close=")" index="">
#{item}
</foreach>
</if>
<if test="orgType != null and orgType != ''">
AND ps.type = #{orgType}
</if>
</where>
</select>
</mapper>
......@@ -44,9 +44,7 @@ public class MqttConfig {
@Bean
public MqttPushClient getMqttPushClient() {
String iotToken = iotTokenService.getIotToken();
clientId = StringUtils.isNotEmpty(iotToken) ? iotToken : clientId;
clientId = StringUtils.isNotEmpty(clientId) ? clientId : iotTokenService.getIotToken();
mqttPushClient.connect(hostUrl, clientId, username, password, timeout, keepalive);
// 订阅主题
mqttPushClient.subscribe(defaultTopic, 0);
......
......@@ -115,7 +115,7 @@ mqtt:
username: admin|1693982115969
password: 8e3795ef7b5e95869fa8c323b865b3a9
hostUrl: tcp://124.71.33.17:11883
clientId: ab3a2fd694c8c838aba2686df3a80e7b
clientId:
defaultTopic: /device/*/*/**
timeout: 10
keepalive: 60
......
......@@ -112,7 +112,7 @@ mqtt:
username: admin|1693982115969
password: 8e3795ef7b5e95869fa8c323b865b3a9
hostUrl: tcp://124.71.33.17:11883
clientId: ab3a2fd694c8c838aba2686df3a80e7b
clientId:
defaultTopic: /device/*/*/**
timeout: 10
keepalive: 60
......
......@@ -63,6 +63,11 @@ public class IotTest {
}
@Test
void getDeviceLogByTimeRange() {
iotProductDeviceService.getDeviceLogByTimeRange("1701127702523473920",100,"2023-09-12 00:00:00","2023-09-12 23:59:00");
}
@Test
void getIotOrgInfo() {
iotOrgService.getIotOrgInfo("1698964909267415040");
}
......
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