Commit c8f76b4a by 杨伟程
parents b8858c7b 88f748b6
Showing with 831 additions and 62 deletions
......@@ -61,7 +61,7 @@ CREATE TABLE `saas_role_menu` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端角色菜单关联表';
CREATE TABLE `saas_menu` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT 'id',
`id` varchar(64) NOT NULL COMMENT 'id',
`parent_id` varchar(64) NOT NULL COMMENT '父级id',
`name` varchar(100) NOT NULL COMMENT '名称',
`code` varchar(100) DEFAULT NULL COMMENT '模块+类名+方法',
......@@ -76,33 +76,36 @@ CREATE TABLE `saas_menu` (
`hidden_status` char(1) DEFAULT NULL COMMENT '隐藏状态 0不隐藏 1隐藏',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`cache_status` char(1) DEFAULT NULL COMMENT '缓存状态 0不缓存 1缓存',
`create_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
`page_type` varchar(4) DEFAULT NULL COMMENT '页面类别',
`page_query` varchar(512) DEFAULT NULL COMMENT '跳转参数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端菜单';
CREATE TABLE `plat_menu` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT '主键id',
`parent_id` varchar(64) NOT NULL COMMENT '父级id',
`name` varchar(100) NOT NULL COMMENT '资源名称',
`request_path` varchar(200) DEFAULT NULL COMMENT '账号链接',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`icon` varchar(100) DEFAULT NULL COMMENT '图标',
`resource_type` varchar(20) NOT NULL COMMENT '类型 1目录 2菜单/功能 3按钮/应用',
`hidden_status` char(1) DEFAULT NULL COMMENT '隐藏状态 0不隐藏 1隐藏',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`cache_status` char(1) DEFAULT NULL COMMENT '缓存状态 0不缓存 1缓存',
`status` char(1) NOT NULL COMMENT '状态 0禁用 1启用',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
`id` varchar(64) NOT NULL COMMENT '主键id',
`parent_id` varchar(64) NOT NULL COMMENT '父级id',
`name` varchar(100) NOT NULL COMMENT '资源名称',
`request_path` varchar(200) DEFAULT NULL COMMENT '账号链接',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`icon` varchar(100) DEFAULT NULL COMMENT '图标',
`resource_type` varchar(20) NOT NULL COMMENT '类型 1目录 2菜单/功能 3按钮/应用',
`hidden_status` char(1) DEFAULT NULL COMMENT '隐藏状态 0不隐藏 1隐藏',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`cache_status` char(1) DEFAULT NULL COMMENT '缓存状态 0不缓存 1缓存',
`status` char(1) NOT NULL COMMENT '状态 0禁用 1启用',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` char(1) DEFAULT NULL COMMENT '删除标识',
`create_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
`page_type` varchar(4) DEFAULT NULL COMMENT '页面类别',
`page_query` varchar(512) DEFAULT NULL COMMENT '跳转参数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='租户端资源管理';
CREATE TABLE `saas_privacy_config` (
......
......@@ -46,7 +46,6 @@ CREATE TABLE `plat_bed`
`room_id` varchar(64) NOT NULL COMMENT '房间id',
`space_id` varchar(64) NOT NULL COMMENT '空间id',
`sort` INT(4) NOT NULL COMMENT '序号',
`equipment_id` varchar(64) DEFAULT NULL COMMENT '设备id',
`status` char(1) DEFAULT 1 COMMENT '是否空闲 1 是 0 否 ',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
......@@ -59,6 +58,24 @@ CREATE TABLE `plat_bed`
DEFAULT CHARSET = utf8mb4 COMMENT ='床位管理';
CREATE TABLE `plat_room_bed_device`
(
`id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(128) NOT NULL COMMENT '床位名称 床位1,床位2',
`room_id` varchar(64) NOT NULL COMMENT '房间id',
`bed_id` varchar(64) NOT NULL COMMENT '空间id',
`equipment_id` varchar(64) DEFAULT NULL COMMENT '设备id',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` int(1) DEFAULT '0' COMMENT '删除标记',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='设备房间床位关联表';
-- 待完善 区域设置表
CREATE TABLE `plat_region_setting`
......
......@@ -153,6 +153,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-stream:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dysmsapi20170525:2.0.9" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
......
......@@ -84,6 +84,16 @@
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
</dependency>
......
......@@ -100,22 +100,15 @@ public enum CodeMessageEnum {
PLATFORM_ERROR_ROOM_BAD_NUMBER_NOT_AUTH(500, "PLATFORM.ERROR.ROOM.BAD.NUMBER.NOT.AUTH"),
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"),
SYSTEM_ERROR_CANT_CHANGE_TENANT_STATUS(500, "当前时间要在开始时间和结束时间之间才能设置为启用"),
SYSTEM_ERROR_CANT_REMOVE_TENANT_USER_LINK(500, "已经关联了租户的管理员账号不允许删除"),
SYSTEM_ERROR_TENANT_ID_NOT_BLANK(510, "租户id不能为空"),
SYSTEM_ERROR_TENANT_NOT_EXIST(510, "该租户不存在或者被禁用"),
SYSTEM_ERROR_AUTH_DEPT_LEVEL(500, "部门标签只能是集团、品牌、酒店(品牌和酒店可以同层级)、部门这样的顺序"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_ADD(500, "不能在该节点下新增非管理员角色"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_EDIT(500, "管理员角色不能修改"),
SYSTEM_ERROR_CANT_CHANGE_TENANT_STATUS(500, "SYSTEM.ERROR.CANT.CHANGE.TENANT.STATUS"),
SYSTEM_ERROR_CANT_REMOVE_TENANT_USER_LINK(500, "SYSTEM.ERROR.CANT.REMOVE.TENANT.USER.LINK"),
SYSTEM_ERROR_TENANT_ID_NOT_BLANK(510, "SYSTEM.ERROR.TENANT.ID.NOT.BLANK"),
SYSTEM_ERROR_TENANT_NOT_EXIST(510, "SYSTEM.ERROR.TENANT.NOT.EXIST"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_ADD(500, "SYSTEM.ERROR.ROLE.ADMIN.CANT.ADD"),
SYSTEM_ERROR_ROLE_ADMIN_CANT_EDIT(500, "SYSTEM.ERROR.ROLE.ADMIN.CANT.EDIT"),
;
;
/**
......
......@@ -7,7 +7,7 @@ public class RegConst {
//public static final String PW_PATTERN = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{6,18}$";
public static final String PW_PATTERN = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\\W]{6,18}$";
public static final String PW_PATTERN = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z\\W]{6,20}$";
public static final String LINE_CODE = "\\w{0,64}";
......
......@@ -68,4 +68,14 @@ public class PlatMenuDTOVO extends BaseIdDTO {
@ApiModelProperty(value = "缓存状态 0不缓存 1缓存")
private String cacheStatus;
/**
* 页面类别
*/
private String pageType;
/**
* 跳转参数
*/
private String pageQuery;
}
......@@ -72,4 +72,8 @@ public class SaasMenuDTOVO extends BaseIdDTO implements Serializable {
@TableField(exist = false)
@ApiModelProperty(value = "子集")
private List<SaasMenuDTOVO> children;
private String pageType;
private String pageQuery;
}
......@@ -4,9 +4,12 @@ import com.makeit.module.admin.dto.plat.PlatMenuDTOVO;
import com.makeit.module.admin.dto.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiConsumer;
@Data
public class PlatUserLoginVO implements Serializable {
......@@ -32,6 +35,18 @@ public class PlatUserLoginVO implements Serializable {
@ApiModelProperty(value = "部门树id")
private String orgId;
@ApiModelProperty(value = "城市组织id")
private String cityOrgId;
@ApiModelProperty(value = "区组织id")
private String districtOrgId;
@ApiModelProperty(value = "街道组织id")
private String streetOrgId;
@ApiModelProperty(value = "组织路径")
private String orgPath;
@ApiModelProperty("token")
private String token;
......@@ -55,4 +70,41 @@ public class PlatUserLoginVO implements Serializable {
private String userType = "plat";
private boolean initFlag = false;
public void init(){
if(initFlag){
return;
}
if(StringUtils.isBlank(orgPath)){
return;
}
List<BiConsumer<PlatUserLoginVO,String>> list = Arrays.asList(
PlatUserLoginVO::setCityOrgId,
PlatUserLoginVO::setDistrictOrgId,
PlatUserLoginVO::setStreetOrgId
);
String[] split = orgPath.split(",");
for (int i = 1; i < split.length; i++) {
BiConsumer<PlatUserLoginVO, String> e = list.get(i-1);
e.accept(this,split[i]);
}
this.initFlag = true;
}
public String getCityOrgId() {
init();
return cityOrgId;
}
public String getDistrictOrgId() {
init();
return districtOrgId;
}
public String getStreetOrgId() {
init();
return streetOrgId;
}
}
package com.makeit.module.iot.mqtt;
import lombok.Data;
/**
* 接收设备的数据实体类
*/
@Data
public class DeviceInfo {
private String deviceId;
private Long timestamp;
private String messageType;
private HeaderInfo headers;
private String properties;
/**
* {
* "deviceId": "1694547143952007168",
* "headers": {
* "bindings": [{
* "id": "1694915814306185216",
* "type": "org"
* }],
* "deviceName": "设备测试",
* "productName": "测试产品2",
* "productId": "1694546594502377472",
* "_uid": "Iopp3Ep8avkvFYCekKxrwmhDCdJ3y4YO",
* "creatorId": "1199596756811550720",
* "traceparent": "00-c141385bf0a33bd88f7b50e41c2a7d03-76e248a7fa43f731-01"* },
* "messageType": "REPORT_PROPERTY",
* "properties": {
* "test": 555
* } ,
* "timestamp": 1693993159292
* }
*/
}
package com.makeit.module.iot.mqtt;
import lombok.Data;
import java.util.List;
@Data
public class HeaderInfo {
private String deviceName;
private String productName;
private String productId;
private String _uid;
private String creatorId;
private String traceparent;
private List<Bind> bindings;
@Data
public class Bind {
private String id;
private String type;
}
}
package com.makeit.module.iot.mqtt;
import com.makeit.module.iot.service.IotTokenService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties("mqtt")
public class MqttConfig {
@Autowired
private MqttPushClient mqttPushClient;
@Autowired
private IotTokenService iotTokenService;
private String username;
private String password;
private String hostUrl;
private String clientId;
private String defaultTopic;
private int timeout;
private int keepalive;
public MqttConfig() {
super();
}
public MqttConfig(MqttPushClient mqttPushClient, String username, String password, String hostUrl, String clientId,
String defaultTopic, int timeout, int keepalive) {
super();
this.mqttPushClient = mqttPushClient;
this.username = username;
this.password = password;
this.hostUrl = hostUrl;
this.clientId = clientId;
this.defaultTopic = defaultTopic;
this.timeout = timeout;
this.keepalive = keepalive;
}
@Bean
public MqttPushClient getMqttPushClient() {
String iotToken = iotTokenService.getIotToken();
clientId = StringUtils.isNotEmpty(iotToken) ? iotToken : clientId;
mqttPushClient.connect(hostUrl, clientId, username, password, timeout, keepalive);
// 订阅主题
mqttPushClient.subscribe("/device/*/*/**", 0);
return mqttPushClient;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getHostUrl() {
return hostUrl;
}
public void setHostUrl(String hostUrl) {
this.hostUrl = hostUrl;
}
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getDefaultTopic() {
return defaultTopic;
}
public void setDefaultTopic(String defaultTopic) {
this.defaultTopic = defaultTopic;
}
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public int getKeepalive() {
return keepalive;
}
public void setKeepalive(int keepalive) {
this.keepalive = keepalive;
}
public void setMqttPushClient(MqttPushClient mqttPushClient) {
this.mqttPushClient = mqttPushClient;
}
}
package com.makeit.module.iot.mqtt;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MqttPushClient {
private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class);
@Autowired
private PushCallback pushCallback;
private static MqttClient mqttClient;
public static MqttClient getMqttClient() {
return mqttClient;
}
public static void setMqttClient(MqttClient mqttClient) {
MqttPushClient.mqttClient = mqttClient;
}
/**
* 客户端连接
*
* @param host
* @param clientId
* @param username
* @param password
* @param timeout
* @param keepalive
*/
public void connect(String host, String clientId, String username, String password, int timeout, int keepalive) {
MqttClient client;
try {
client = new MqttClient(host, clientId, new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
options.setUserName(username);
options.setPassword(password.toCharArray());
options.setConnectionTimeout(timeout);
options.setKeepAliveInterval(keepalive);
MqttPushClient.setMqttClient(client);
try {
client.setCallback(pushCallback);
client.connect(options);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发布
*
* @param qos
* @param retained
* @param topic
* @param pushMessage
*/
public void publish(int qos, boolean retained, String topic, String pushMessage) {
MqttMessage message = new MqttMessage();
message.setQos(qos);
message.setRetained(retained);
message.setPayload(pushMessage.getBytes());
MqttTopic mqttTopic = MqttPushClient.getMqttClient().getTopic(topic);
if (mqttTopic == null) {
logger.error("topic not exist");
}
MqttDeliveryToken token;
try {
token = mqttTopic.publish(message);
token.waitForCompletion();
} catch (Exception e) {
e.printStackTrace();
}
}
public void subscribe(String defaultTopic, int qos) {
logger.info("开始订阅主题" + defaultTopic);
try {
MqttPushClient.getMqttClient().subscribe(defaultTopic, qos);
} catch (MqttException e) {
e.printStackTrace();
logger.error(e.getMessage());
}
}
}
package com.makeit.module.iot.mqtt;
import com.alibaba.fastjson.JSON;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PushCallback implements MqttCallback {
private static final Logger logger = LoggerFactory.getLogger(MqttPushClient.class);
@Autowired
private MqttConfig mqttConfig;
private static MqttClient client;
@Override
public void connectionLost(Throwable cause) {
logger.info("连接断开,可以重连");
if (client == null || !client.isConnected()) {
mqttConfig.getMqttPushClient();
}
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
// 收到消息并设置返回字符串格式
String payload = new String(message.getPayload(), "UTF-8");
logger.info("接收消息主题:{}, 接收消息QoS:{}", topic, message.getQos());
logger.info("接收消息内容:payload格式:{}", payload);
// 解析数据
DeviceInfo device = JSON.parseObject(payload, DeviceInfo.class);
// todo
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
logger.info("deliveryComplete--------------" + token.isComplete());
}
}
package com.makeit.module.iot.service;
import com.makeit.module.iot.util.HttpRequest;
import com.makeit.module.iot.vo.ResponseMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* iot 获取token服务类
*/
@Component
@Slf4j
public class IotTokenService extends IotCommonService {
/**
* 获取iotToken
*/
public String getIotToken() {
String url = iotUrl + "token";
String body = "{\"expires\": -1}";
HttpRequest request = buildRequest(url, body);
try {
ResponseMessage responseMessage = sendPost(url, request);
if (responseMessage.getStatus() == 200) {
return responseMessage.getResult().toString();
}
log.error("获取token接口失败:{}", responseMessage.getMessage());
} catch (IOException e) {
log.error("调用:{}接口异常:{}", url, e.getMessage());
}
return "";
}
}
......@@ -17,7 +17,9 @@ public class DeviceInstanceEntity {
private String name;
@Schema(description = "设备类型")
@Schema(description = "设备类型 device(\"直连设备\"),\n" +
" childrenDevice(\"网关子设备\"),\n" +
" gateway(\"网关设备\")")
private String deviceType;
@Schema(description = "说明")
......
package com.makeit.utils.user;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.RegConst;
import com.makeit.exception.BusinessException;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.old.encode.Digests;
......@@ -21,14 +22,14 @@ public class PasswordUtils {
public static void validatePasswordFormat(String plainPassword) {
// if (StringUtils.isBlank(plainPassword) || !plainPassword.matches(PW_PATTERN) || plainPassword.contains(" ")) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_FORMAT_ERROR);
// }
if (StringUtils.isBlank(plainPassword) ) {
if (StringUtils.isBlank(plainPassword) || !plainPassword.matches(RegConst.PW_PATTERN) || plainPassword.contains(" ")) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_FORMAT_ERROR);
}
// if (StringUtils.isBlank(plainPassword) ) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_FORMAT_ERROR);
// }
}
......
package com.makeit.utils.user.plat;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiConsumer;
@Data
public class PlatUserVO implements Serializable {
......@@ -16,6 +20,20 @@ public class PlatUserVO implements Serializable {
private String orgId;
//城市组织id
private String cityOrgId;
//区组织id
private String districtOrgId;
//街道组织id
private String streetOrgId;
//组织全路径 逗号拼接
private String orgPath;
public PlatUserVO() {
}
......@@ -29,4 +47,46 @@ public class PlatUserVO implements Serializable {
this.id = id;
this.name = name;
}
private boolean initFlag = false;
public void init(){
if(initFlag){
return;
}
if(StringUtils.isBlank(orgPath)){
return;
}
List<BiConsumer<PlatUserVO,String>> list = Arrays.asList(
PlatUserVO::setCityOrgId,
PlatUserVO::setDistrictOrgId,
PlatUserVO::setStreetOrgId
);
String[] split = orgPath.split(",");
for (int i = 1; i < split.length; i++) {
BiConsumer<PlatUserVO, String> e = list.get(i-1);
e.accept(this,split[i]);
}
this.initFlag = true;
}
public String getCityOrgId() {
init();
return cityOrgId;
}
public String getDistrictOrgId() {
init();
return districtOrgId;
}
public String getStreetOrgId() {
init();
return streetOrgId;
}
}
......@@ -32,7 +32,7 @@ SYSTEM.ERROR.CODE.RATE.LIMIT=验证码发送过于频繁,请稍后在发送
SYSTEM.ERROR.USER.PASSWORD.NOT.BLANK=密码不能为空
#SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR=密码必须是包含大写字母、小写字母、数字、特殊符号(不含空格)的6~18位组合
SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR=含字母和数字的6-18位密码
SYSTEM.ERROR.USER.PASSWORD.FORMAT.ERROR=含字母和数字的6-20位密码
SYSTEM.ERROR.USER.PASSWORD.SAME=支付密码不能与登录密码一致
SYSTEM.ERROR.USER.SUPER.ADMIN.CANT.DO=超级管理员或超级管理员角色不支持该操作
......@@ -45,7 +45,7 @@ SYSTEM.ERROR.START.LE.END=开始时间要小于等于结束时间
SYSTEM.ERROR.CANT.CHANGE.TENANT.STATUS=当前时间要在开始时间和结束时间之间才能设置为启用
SYSTEM.ERROR.CANT.REMOVE.TENANT.USER.LINK=已经关联了厂别的管理员账号不允许删除
SYSTEM.ERROR.CANT.REMOVE.TENANT.USER.LINK=已经关联了租户的管理员账号不允许删除
SYSTEM.ERROR.TMP.CODE.BLANK=验证码不能为空
#SYSTEM.ERROR.TMP.TOKEN.BLANK=token不能为空
......@@ -55,7 +55,7 @@ SYSTEM.ERROR.TOKEN.BLANK.OR.NOT.EXIST=token失效或不存在
SYSTEM.ERROR.NO.PERMISSION=无权限访问
SYSTEM.ERROR.TENANT.ID.NOT.BLANK=租户id不能为空
SYSTEM.ERROR.TENANT.NOT.EXIST=厂别不存在或者被禁用
SYSTEM.ERROR.TENANT.NOT.EXIST=租户不存在或者被禁用
SYSTEM.ERROR.DUPLICATE.REQUEST=请勿重复请求
......@@ -98,3 +98,7 @@ PLATFORM.ERROR.BAD.NAME.EXIT=床位名称已存在
PLATFORM.ERROR.BAD.NOT.DEL=床位已绑定长者或设备,不可删除
PLATFORM.ERROR.ROOM.OTHER.USED.NOT.DEL=该房间下有床位有其他长者入住
SYSTEM.ERROR.ROLE.ADMIN.CANT.ADD=不能在该节点下新增非管理员角色
SYSTEM.ERROR.ROLE.ADMIN.CANT.EDIT=管理员角色不能修改
......@@ -153,6 +153,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-stream:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dysmsapi20170525:2.0.9" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
......
......@@ -6,10 +6,10 @@ 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.PlatBedEditDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.service.platform.device.PlatDeviceService;
import com.makeit.service.platform.space.PlatBedService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -20,6 +20,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
......@@ -68,4 +70,11 @@ public class PlatBedController {
return ApiResponseUtils.success(data);
}
@ApiOperation("绑定设备列表")
@PostMapping("listBindDevice")
public ApiResponseEntity<List<PlatDeviceDTO>> listBindDevice(@RequestBody PlatBedDeviceQueryDTO dto) {
List<PlatDeviceDTO> data = platBedService.listBindDevice(dto);
return ApiResponseUtils.success(data);
}
}
......@@ -13,6 +13,9 @@ import lombok.Data;
@ApiModel("PlatDeviceDTO 模型")
public class PlatDeviceDTO {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "原始设备ID")
private String oriDeviceId;
......@@ -24,4 +27,10 @@ public class PlatDeviceDTO {
@ApiModelProperty(value = "状态 数据字典 1 在线 0离线")
private String status;
@ApiModelProperty(value = "心率")
private int heart;
@ApiModelProperty(value = "床位名称")
private String bedName;
}
package com.makeit.dto.platform.space;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author:lzy
* @Date:2023/9/6 16:32
* @Describe:
*/
@Data
@ApiModel("PlatBedDeviceQueryDTO 参数")
public class PlatBedDeviceQueryDTO {
@ApiModelProperty("房间Id")
private String roomId;
}
package com.makeit.dto.platform.space;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author:lzy
* @Date:2023/9/6 18:11
* @Describe:
*/
@Data
@ApiModel("PlatRoomBindDeviceDTO 设备绑定")
public class PlatRoomBindDeviceDTO {
@ApiModelProperty(value = "房间ID")
private String roomId;
@ApiModelProperty(value = "设备Id")
private List<String> listEquipmentId;
@ApiModelProperty(value = "床位Id")
private String bedId;
}
......@@ -25,9 +25,6 @@ public class PlatBed extends BaseBusEntity {
@ApiModelProperty(value = "空间Id")
private String spaceId;
@ApiModelProperty(value = "设备Id")
private String equipmentId;
@ApiModelProperty(value = "是否空闲 1 是 0 否")
private String status;
......
package com.makeit.entity.platform.space;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @Author:lzy
* @Date:2023/9/6 17:41
* @Describe:
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PlatRoomBedDevice对象", description = "房间床位设备中间表")
public class PlatRoomBedDevice extends BaseBusEntity {
@ApiModelProperty(value = "房间ID")
private String roomId;
@ApiModelProperty(value = "设备Id")
private String equipmentId;
@ApiModelProperty(value = "床位Id")
private String bedId;
}
......@@ -62,4 +62,14 @@ public class PlatMenu extends BaseEntity {
*/
private String status;
/**
* 页面类别
*/
private String pageType;
/**
* 跳转参数
*/
private String pageQuery;
}
\ No newline at end of file
......@@ -77,4 +77,14 @@ public class SaasMenu extends BaseEntity {
*/
private String cacheStatus;
/**
* 页面类别
*/
private String pageType;
/**
* 跳转参数
*/
private String pageQuery;
}
\ No newline at end of file
package com.makeit.mapper.platform.space;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
/**
* @Author:lzy
* @Date:2023/9/6 17:43
* @Describe:
*/
public interface PlatRoomBedDeviceMapper extends BaseMapper<PlatRoomBedDevice> {
}
......@@ -784,6 +784,9 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
user.setStatus(CommonEnum.YES.getValue());
user.setAccount(dto.getMobile());
PlatOrg platOrg = platOrgService.getById(dto.getId());
user.setOrgPath(platOrg.getPath()+","+platOrg.getId());
save(user);
dto.setId(user.getId());
setRoleList(dto);
......@@ -802,6 +805,8 @@ public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
setPassword(user);
PlatOrg platOrg = platOrgService.getById(dto.getId());
user.setOrgPath(platOrg.getPath()+","+platOrg.getId());
updateById(user);
setRoleList(dto);
}
......
......@@ -5,11 +5,14 @@ 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.PlatBedDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatBedEditDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO;
import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom;
import java.util.List;
/**
* @Author:lzy
* @Date:2023/8/31 15:08
......@@ -57,5 +60,14 @@ public interface PlatBedService extends IService<PlatBed> {
*/
PageVO<PlatDeviceDTO> pageDevice(PageReqDTO<PlatDeviceDTO> pageReqDTO);
/**
* 已绑定设备
* @param dto
* @return
*/
List<PlatDeviceDTO> listBindDevice(PlatBedDeviceQueryDTO dto);
}
package com.makeit.service.platform.space;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
/**
* @Author:lzy
* @Date:2023/9/6 17:44
* @Describe:
*/
public interface PlatRoomBedDeviceService extends IService<PlatRoomBedDevice> {
}
......@@ -7,11 +7,13 @@ 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.PlatBedDeviceQueryDTO;
import com.makeit.dto.platform.space.PlatBedEditDTO;
import com.makeit.dto.platform.space.PlatBedQueryDTO;
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;
......@@ -19,6 +21,7 @@ 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 jodd.util.StringUtil;
......@@ -26,9 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -42,6 +43,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
@Autowired
private PlatDeviceService platDeviceService;
@Autowired
private PlatRoomBedDeviceService platRoomBedDeviceService;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(PlatRoom platRoom) {
......@@ -119,14 +123,16 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NOT_DEL);
}
if (StringUtil.isNotEmpty(platBed.getEquipmentId())) {
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatRoomBedDevice::getBedId,id);
if(platRoomBedDeviceService.count(queryWrapper) > 0){
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NOT_DEL);
}
removeById(id);
}
@Transactional
@Transactional(rollbackFor = Exception.class)
@Override
public void changeStatus(StatusDTO dto) {
......@@ -145,11 +151,10 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
@Override
public PageVO<PlatDeviceDTO> pageDevice(PageReqDTO<PlatDeviceDTO> pageReqDTO) {
LambdaQueryWrapper<PlatBed> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.select(PlatBed::getEquipmentId);
queryWrapper1.isNotNull(PlatBed::getEquipmentId);
List<PlatBed> listBed = list(queryWrapper1);
List<String> listEquipmentIds = listBed.stream().map(item -> item.getEquipmentId()).collect(Collectors.toList());
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.select(PlatRoomBedDevice::getEquipmentId);
List<PlatRoomBedDevice> list = platRoomBedDeviceService.list(queryWrapper1);
List<String> listEquipmentIds = list.stream().map(item->item.getEquipmentId()).collect(Collectors.toList());
PlatDeviceDTO dto = pageReqDTO.getData();
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
......@@ -165,4 +170,39 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
return PageUtil.toPageVO(listRecord, pages);
}
@Override
public List<PlatDeviceDTO> listBindDevice(PlatBedDeviceQueryDTO dto) {
LambdaQueryWrapper<PlatRoomBedDevice> queryWrapper1 = new LambdaQueryWrapper<>();
queryWrapper1.eq(PlatRoomBedDevice::getRoomId,dto.getRoomId());
List<PlatRoomBedDevice> list = platRoomBedDeviceService.list(queryWrapper1);
List<String> listEquipmentIds = list.stream().map(item->item.getEquipmentId()).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 = list(queryWrapper2);
Map<String,String> map = listBeds.stream().collect(Collectors.toMap(PlatBed::getId,PlatBed::getName,(k1,k2)->k1));
Map<String,String> mapName = new HashMap<>();
list.forEach(item->{
if(map.containsKey(item.getBedId())){
mapName.put(item.getEquipmentId(),map.get(item.getBedId()));
}
});
List<PlatDeviceDTO> data = new ArrayList<>();
if(!listEquipmentIds.isEmpty()){
LambdaQueryWrapper<PlatDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatDevice::getCategory, PlatDeviceEnum.CategoryEnum.HEART);
queryWrapper.in(PlatDevice::getId,listEquipmentIds);
List<PlatDevice> listDevices = platDeviceService.list(queryWrapper);
data = BeanDtoVoUtils.listVo(listDevices,PlatDeviceDTO.class);
data.forEach(item->{
item.setBedName(mapName.get(item.getId()));
});
}
return data;
}
}
package com.makeit.service.platform.space.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.space.PlatRoomBedDevice;
import com.makeit.mapper.platform.space.PlatRoomBedDeviceMapper;
import com.makeit.service.platform.space.PlatRoomBedDeviceService;
import org.springframework.stereotype.Service;
/**
* @Author:lzy
* @Date:2023/9/6 17:44
* @Describe:
*/
@Service
public class PlatRoomBedDeviceServiceImpl extends ServiceImpl<PlatRoomBedDeviceMapper, PlatRoomBedDevice> implements PlatRoomBedDeviceService {
}
......@@ -80,7 +80,6 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_EXIT_BAD);
}
removeByIds(ids);
}
@Transactional
......
......@@ -147,6 +147,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-stream:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-core:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.12" level="project" />
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.integration:spring-integration-mqtt:5.5.5" level="project" />
<orderEntry type="library" name="Maven: org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:dysmsapi20170525:2.0.9" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
......
......@@ -91,4 +91,13 @@ libreOffice: C:\\Program Files\\LibreOffice\\program\\soffice
iot:
url: http://iot.meiqicloud.com/api/
clientId: fyxmb5h52iKwE2Hi
secureKey: 22fZbnH36wdHn7ZTyKKHraFw233npcez
\ No newline at end of file
secureKey: 22fZbnH36wdHn7ZTyKKHraFw233npcez
mqtt:
username: admin|1693982115969
password: 8e3795ef7b5e95869fa8c323b865b3a9
hostUrl: tcp://124.71.33.17:11883
clientId: ab3a2fd694c8c838aba2686df3a80e7b
defaultTopic:
timeout: 10
keepalive: 60
\ No newline at end of file
......@@ -3,6 +3,7 @@ package com.makeit.iotapi;
import com.makeit.module.admin.vo.plat.PlatTenantVO;
import com.makeit.module.iot.service.IotOrgService;
import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.service.IotTokenService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -11,6 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest;
public class IotTest {
@Autowired
private IotTokenService tokenService;
@Autowired
private IotOrgService iotOrgService;
@Autowired
private IotProductDeviceService iotProductDeviceService;
......@@ -25,6 +28,11 @@ public class IotTest {
@Test
void getIotToken() {
tokenService.getIotToken();
}
@Test
void getEquipmentInfo() {
iotProductDeviceService.getEquipmentInfo();
}
......
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