Commit 6f435dc1 by lzy

绑定设备

parents 2432fac0 51a3266d
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="server-common" /> <orderEntry type="module" module-name="server-common" />
<orderEntry type="module" module-name="server-common" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" />
...@@ -162,6 +161,13 @@ ...@@ -162,6 +161,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" /> <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-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: 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: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:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" /> <orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
......
...@@ -84,6 +84,16 @@ ...@@ -84,6 +84,16 @@
<dependency> <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> <groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId> <artifactId>dysmsapi20170525</artifactId>
</dependency> </dependency>
......
...@@ -94,131 +94,20 @@ public enum CodeMessageEnum { ...@@ -94,131 +94,20 @@ public enum CodeMessageEnum {
PLATFORM_ERROR_ELDER_CERTIFICATENUMBER_DUPLICATE(500, "PLATFORM.ERROR.ELDER.CERTIFICATENUMBER.DUPLICATE"), PLATFORM_ERROR_ELDER_CERTIFICATENUMBER_DUPLICATE(500, "PLATFORM.ERROR.ELDER.CERTIFICATENUMBER.DUPLICATE"),
PLATFORM_ERROR_SPACE_NAME_DUPLICATE(500,"PLATFORM.ERROR.SPACE.NAME.DUPLICATE"), PLATFORM_ERROR_SPACE_NAME_DUPLICATE(500, "PLATFORM.ERROR.SPACE.NAME.DUPLICATE"),
PLATFORM_ERROR_SPACE_NOT_DEL(500,"PLATFORM.ERROR.SPACE.NOT.DEL"), 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_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_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_NAME_EXIT(500, "PLATFORM.ERROR.BAD.NAME.EXIT"),
PLATFORM_ERROR_BAD_NOT_DEL(500,"PLATFORM.ERROR.BAD.NOT.DEL"), 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.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_CANT_CHANGE_TENANT_STATUS(500, "当前时间要在开始时间和结束时间之间才能设置为启用"), 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"),
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_SAVE_CANT_DO(700, "有事件处于拟稿不能进行此操作"),
SYSTEM_ERROR_WAIT_FIRST_CANT_DO(700, "有事件处于待初审不能进行此操作"),
SYSTEM_ERROR_WAIT_SECOND_CANT_DO(700, "有事件处于待终审不能进行此操作"),
SYSTEM_ERROR_EFFECT_CANT_DO(700, "有事件已生效不能进行此操作"),
SYSTEM_ERROR_NO_EFFECT_CANT_DO(700, "有事件未生效不能进行此操作"),
SYSTEM_ERROR_RECORD_NOT_EFFECT_CANT_DO(500, "本人该事件未生效不能举报"),
//SYSTEM_ERROR_RECORD_REPORT_CANT_DO(500, "本人已举报过该事件不能重复举报"),
SYSTEM_ERROR_RECORD_REPORT_CANT_DO(500, "该事件已被本人或其他人举报不能重复举报"),
SYSTEM_ERROR_RECORD_REPORT_RESULT_CANT_DO(500, "已受理或已驳回的举报的不能撤回"),
// SYSTEM_ERROR_RECORD_NO_EFFECT_CANT_INVALID(500, "含不是已生效的事件不能作废"),
// SYSTEM_ERROR_RECORD_INVALID_CANT_INVALID(500, "含已作废的事件不能作废"),
// SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_INVALID(500, "含已结算的事件不能作废"),
SYSTEM_ERROR_RECORD_NO_EFFECT_CANT_DO(700, "已生效的事件才能进行此操作"),
SYSTEM_ERROR_RECORD_INVALID_CANT_DO(700, "包含已作废的事件不能进行此操作"),
SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_DO(700, "包含已结算的事件不能进行此操作"),
SYSTEM_ERROR_RECORD_SETTLEMENT_CANT_SUBMIT(700, "奖扣事件月度积分已结算,不能再提交事件申请"),
SYSTEM_ERROR_RECORD_AWARD_DATE_EXCEED(600, "奖扣时间已超过%s"),
SYSTEM_ERROR_RECORD_VALID_TIME_DAY_EXCEED(600, "%s天内已提交超过%s次"),
SYSTEM_ERROR_RECORD_MULTIPLE_EXCEED(600, "最多只能录入%s次"),
SYSTEM_ERROR_EVENT_NOT_EXIST(600, "该事件不存在或者被禁用"),
SYSTEM_ERROR_AUDIT_ROLE_NOT_EXIST(600, "审核角色不存在或者被禁用"),
//SYSTEM_ERROR_FIRST_AUDIT_ROLE_NOT_EXIST(500,"初审角色不存在或者被禁用"),
//SYSTEM_ERROR_SECOND_AUDIT_ROLE_NOT_EXIST(500,"终审角色不存在或者被禁用"),
SYS_ERROR_SINGLE_AWARD_INTEGRAL_LIMIT(700, "超出单次奖扣额度,请修改后再提交"),
SYS_ERROR_MONTH_AWARD_INTEGRAL_LIMIT(700, "超出当月累计奖扣额度,请修改后再提交"),
SYSTEM_ERROR_SETTLEMENT_CANT_DO(700, "月度内还有事件正在审核中,请审核后再次结算"),
// 标签模块 10000 - 20000
SYSTEM_ERROR_LABEL_NAME_EXIT(10000, "标签编号已存在"),
SYSTEM_ERROR_LABEL_UPLOAD_EXIT(10001, "请上传excel"),
SYSTEM_ERROR_LABEL_NOT_DATA(10002, "请至少上传一条数据"),
SYSTEM_ERROR_LABEL_NOT_APPLY(10003, "该用户已申请了该标签"),
//参数设置 20000 30000
SYSTEM_ERROR_CUSTOM_GROUP_NAME_EXIT(20000, "名称已存在"),
SYSTEM_ERROR_CUSTOM_GROUP_USER_NOT_EXIT(20001, "请至少选择一个人员"),
SYSTEM_ERROR_PROCESS_CONFIG_EXIT(20030, "该事件已设置"),
SYSTEM_ERROR_AWARD_INTEGRAL_CONFIG_EXIT(20060, "名称已存在"),
SYSTEM_ERROR_PERIOD_MONTH_FORMAT(500, "该月份不存在"),
SYSTEM_ERROR_PERIOD_MONTH_NOT_EXIST(800, "未配置年度起始月份"),
TNT_INCIDENT_CATEGORY_ERROR_LEVEL(6001, "事件分类层级最多为3层"),
TNT_INCIDENT_CATEGORY_ERROR_BLANK_ID(6003, "事件分类id不能为空"),
TNT_INCIDENT_CATEGORY_ERROR_CHILDREN_NO_BLANK(6003, "事件分类子类数据需要为空"),
TNT_INCIDENT_UPDATE_NO_ID(6004, "修改数据主键id不能为空"),
TNT_INCIDENT_HOTEL_ID_NO_BLANK(6005, "hotelId不能为空"),
TNT_INCIDENT_DEPT_ID_NO_BLANK(6006, "部门id不能为空"),
TNT_INCIDENT_STANDARD_REPETITION(6007, "标准事件重复"),
TNT_INCIDENT_STANDARD_AUDIT_PERSON_ERROR(6008, "审核人员错误,请使用正确审核人员"),
TNT_INCIDENT_STANDARD_AUDIT_STATUS_ERROR(6009, "事件状态有误,无法审核"),
TNT_INCIDENT_SYS_REPETITION_ERROR(6010, "系统事件重复,无法添加"),
TNT_INCIDENT_TENANT_ID_NO_BLANK(60011, "租户id不能为空"),
TNT_INCIDENT_CATEGORY_HAVE_EVENT(60012, "事件分类下存在事件"),
TNT_DEPT_MAP_NOT_NULL(60013, "请求map不能为空"),
TNT_DEPT_ID_FALSE(60014, "部门id有误,不存在这个部门id"),
TNT_EVENT_EXPIRATION_DATE_TIMEOUT(60015, "事件失效日期已过期"),
TNT_EVENT_MAINTAIN_FLOW_EXIST(60016, "事件维护流程正在申请中"),
TNT_STANDARD_EVENT_HAVE_EVENT(60017, "事件已存在申请记录"),
TNT_ATTENDANCE_REPETITION(60018, "已签到,无法再次签到"),
TNT_INCIDENT_STANDARD_DEL_ERROR(60019, "事件存在申请记录,不允许删除"),
TNT_INCIDENT_STANDARD_DEL_HAVE_AUDIT_ERROR(60019, "事件存在修改记录无法删除"),
TNT_INCIDENT_STANDARD_UPDATE_ERROR(60020, "事件维护流程正在申请中,不能编辑"),
TNT_INCIDENT_STANDARD_MANAGE_DEPT_ID_ERROR(60021, "选择为公共标准事件时,时间管理部门id不能为空"),
TNT_INCIDENT_DURATION_TIME_ERROR(60022, "失效日期不能小于今日日期"),
TNT_INCIDENT_INTEGRAL_CONFIGURATION_NULL_ERROR(60023, "签到积分配置表不能为空"),
TNT_INCIDENT_INTEGRAL_NOT_CONFIG_ERROR(60024, "部门不存在消息模板"),
TNT_START_MONTH_NULL_ERROR(60025, "季度开始月份未配置"),
TNT_REWARD_LEVEL_COUNT_ERROR(60029, "配置总数人数已存在,不能存在两个相同总人数的配置"),
TNT_PROCESS_FIRST_CONFIG_NULL_ERROR(60026, "初审流程设置未配置"),
TNT_PROCESS_FINAL_CONFIG_NULL_ERROR(60026, "终审流程设置未配置"),
TNT_INCIDENT_CATEGORY_REPETITION_ERROR(60027, "事件名称重复"),
TNT_INCIDENT_CATEGORY_NULL_ERROR(60028, "事件分类为空"),
TNT_SYS_EVENT_CATEGORY_NULL_ERROR(60029, "系统事件分类不存在"),
TNT_REWARD_LEVEL_CONFIG_CATEGORY_EXIT(60030, "该等级已存在"),
TNT_INCIDENT_INTEGRAL_CONFIGURATION_TIME_NULL_ERROR(60031, "签到积分配置表事件不存在"),
TNT_REWARD_LEVEL_COUNT_LIST_NULL_ERROR(60032, "奖励级别人数列表不能为空"),
TNT_REWARD_LEVEL_COUNT_TOTAL_AMOUNT_LEST_ERROR(60033, "奖励级别人数总数不能小于档级人数总和"),
TNT_EVENT_CATEGORY_IMPORT_ERROR(60033, "事件导入错误,文件格式有误"),
TNT_PERIOD_NULL_ERROR(60034, "结算周期为空,请在月度结算模块设置结算周期"),
TNT_REWARD_LEVEL_NULL_ERROR(60035, "奖励级别配置为空"),
TNT_REWARD_LEVEL_STATEMENT_CATEGORY_NULL_ERROR(60035, "维度配置不能为空"),
TNT_GRADES_LEVEL_DEPT_CUSTOMER_NULL_ERROR(60035, "部门id列表,自定义小组列表不能都为空"),
TNT_GRADES_LEVEL_TYPE_NULL_ERROR(60036, "查询档级奖金时,type不能为空"),
TNT_GRADES_LEVEL_DEPT_ID_NULL_ERROR(60037, "查询档级奖金时,部门id不能为空"),
TNT_GRADES_LEVEL_DEPT_CUSTOMER_ID_NULL_ERROR(60038, "查询档级奖金时,部门id、分组id不存在"),
TNT_MESSAGE_VIEW_DEPT_ID_ID_ERROR(60039, "部门id和历史数据id不能为空"),
; ;
; ;
......
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 { ...@@ -17,7 +17,9 @@ public class DeviceInstanceEntity {
private String name; private String name;
@Schema(description = "设备类型") @Schema(description = "设备类型 device(\"直连设备\"),\n" +
" childrenDevice(\"网关子设备\"),\n" +
" gateway(\"网关设备\")")
private String deviceType; private String deviceType;
@Schema(description = "说明") @Schema(description = "说明")
......
...@@ -45,7 +45,7 @@ SYSTEM.ERROR.START.LE.END=开始时间要小于等于结束时间 ...@@ -45,7 +45,7 @@ SYSTEM.ERROR.START.LE.END=开始时间要小于等于结束时间
SYSTEM.ERROR.CANT.CHANGE.TENANT.STATUS=当前时间要在开始时间和结束时间之间才能设置为启用 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.CODE.BLANK=验证码不能为空
#SYSTEM.ERROR.TMP.TOKEN.BLANK=token不能为空 #SYSTEM.ERROR.TMP.TOKEN.BLANK=token不能为空
...@@ -55,7 +55,7 @@ SYSTEM.ERROR.TOKEN.BLANK.OR.NOT.EXIST=token失效或不存在 ...@@ -55,7 +55,7 @@ SYSTEM.ERROR.TOKEN.BLANK.OR.NOT.EXIST=token失效或不存在
SYSTEM.ERROR.NO.PERMISSION=无权限访问 SYSTEM.ERROR.NO.PERMISSION=无权限访问
SYSTEM.ERROR.TENANT.ID.NOT.BLANK=租户id不能为空 SYSTEM.ERROR.TENANT.ID.NOT.BLANK=租户id不能为空
SYSTEM.ERROR.TENANT.NOT.EXIST=厂别不存在或者被禁用 SYSTEM.ERROR.TENANT.NOT.EXIST=租户不存在或者被禁用
SYSTEM.ERROR.DUPLICATE.REQUEST=请勿重复请求 SYSTEM.ERROR.DUPLICATE.REQUEST=请勿重复请求
...@@ -95,4 +95,10 @@ PLATFORM.ERROR.SPACE.NOT.DEL=该空间下存在下级或者房间,不可删除 ...@@ -95,4 +95,10 @@ PLATFORM.ERROR.SPACE.NOT.DEL=该空间下存在下级或者房间,不可删除
PLATFORM.ERROR.ROOM.EXIT.BAD=房间中存在床位,不可删除 PLATFORM.ERROR.ROOM.EXIT.BAD=房间中存在床位,不可删除
PLATFORM.ERROR.ROOM.BAD.NUMBER.NOT.AUTH=床位数量不能改小 PLATFORM.ERROR.ROOM.BAD.NUMBER.NOT.AUTH=床位数量不能改小
PLATFORM.ERROR.BAD.NAME.EXIT=床位名称已存在 PLATFORM.ERROR.BAD.NAME.EXIT=床位名称已存在
PLATFORM.ERROR.BAD.NOT.DEL=床位已绑定长者或设备,不可删除 PLATFORM.ERROR.BAD.NOT.DEL=床位已绑定长者或设备,不可删除
\ No newline at end of file
PLATFORM.ERROR.ROOM.OTHER.USED.NOT.DEL=该房间下有床位有其他长者入住
SYSTEM.ERROR.ROLE.ADMIN.CANT.ADD=不能在该节点下新增非管理员角色
SYSTEM.ERROR.ROLE.ADMIN.CANT.EDIT=管理员角色不能修改
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="server-common" /> <orderEntry type="module" module-name="server-common" />
<orderEntry type="module" module-name="server-common" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.6" level="project" />
...@@ -162,6 +161,13 @@ ...@@ -162,6 +161,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" /> <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-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: 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: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:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" /> <orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
......
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;
}
...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.elder.*; import com.makeit.dto.platform.elder.*;
...@@ -16,6 +17,7 @@ import com.makeit.entity.platform.space.PlatBed; ...@@ -16,6 +17,7 @@ import com.makeit.entity.platform.space.PlatBed;
import com.makeit.entity.platform.space.PlatRoom; import com.makeit.entity.platform.space.PlatRoom;
import com.makeit.entity.platform.space.PlatSpace; import com.makeit.entity.platform.space.PlatSpace;
import com.makeit.enums.CodeMessageEnum; import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.FileSuffixEnum; import com.makeit.enums.FileSuffixEnum;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.platform.elder.PlatElderMapper; import com.makeit.mapper.platform.elder.PlatElderMapper;
...@@ -31,7 +33,6 @@ import com.makeit.utils.data.excel.ExcelUtil; ...@@ -31,7 +33,6 @@ import com.makeit.utils.data.excel.ExcelUtil;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil; import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.sys.FileUtil; import com.makeit.utils.sys.FileUtil;
import com.makeit.vo.platform.device.PlatDeviceListVO;
import com.makeit.vo.platform.elder.PlatElderExportVO; import com.makeit.vo.platform.elder.PlatElderExportVO;
import com.makeit.vo.platform.elder.PlatElderListVO; import com.makeit.vo.platform.elder.PlatElderListVO;
import com.makeit.vo.wechat.elder.PlatElderChildrenInfoWechatVO; import com.makeit.vo.wechat.elder.PlatElderChildrenInfoWechatVO;
...@@ -321,6 +322,13 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -321,6 +322,13 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
BeanUtils.copyProperties(dto, db); BeanUtils.copyProperties(dto, db);
updateById(db); updateById(db);
StatusDTO statusDTO = new StatusDTO();
statusDTO.setId(dto.getBedId());
statusDTO.setStatus(CommonEnum.NO.getValue());
platBedService.changeStatus(statusDTO);
} }
@Transactional @Transactional
...@@ -329,6 +337,14 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -329,6 +337,14 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
PlatElder db = getById(dto.getId()); PlatElder db = getById(dto.getId());
if (CommonEnum.YES.getValue().equals(dto.getDelRoomStatus())) {
if (platRoomService.hasUsedBedByBedId(db.getBedId(), CommonEnum.NO.getValue(), db.getBedId())) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_OTHER_USED_NOT_DEL);
}
}
db.setSpaceId(null); db.setSpaceId(null);
db.setStreetSpaceId(null); db.setStreetSpaceId(null);
db.setBuildingSpaceId(null); db.setBuildingSpaceId(null);
...@@ -342,6 +358,16 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder ...@@ -342,6 +358,16 @@ public class PlatElderServiceImpl extends ServiceImpl<PlatElderMapper, PlatElder
//TODO ywc 是否删除房间 及其校验没做 //TODO ywc 是否删除房间 及其校验没做
StatusDTO statusDTO = new StatusDTO();
statusDTO.setId(db.getBedId());
statusDTO.setStatus(CommonEnum.YES.getValue());
platBedService.changeStatus(statusDTO);
if (CommonEnum.YES.getValue().equals(dto.getDelRoomStatus())) {
platRoomService.delCascade(Arrays.asList(platBedService.getById(db.getBedId()).getRoomId()));
}
} }
@Override @Override
......
package com.makeit.service.platform.space; package com.makeit.service.platform.space;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDTO; import com.makeit.dto.platform.device.PlatDeviceDTO;
...@@ -51,6 +52,7 @@ public interface PlatBedService extends IService<PlatBed> { ...@@ -51,6 +52,7 @@ public interface PlatBedService extends IService<PlatBed> {
*/ */
void del(String id); void del(String id);
void changeStatus(StatusDTO dto);
/** /**
* 未绑定设备列表 * 未绑定设备列表
* @param pageReqDTO * @param pageReqDTO
......
...@@ -19,18 +19,19 @@ public interface PlatRoomService extends IService<PlatRoom> { ...@@ -19,18 +19,19 @@ public interface PlatRoomService extends IService<PlatRoom> {
/** /**
* 添加房间 * 添加房间
*
* @param dto * @param dto
*/ */
void add(PlatRoomDTO dto); void add(PlatRoomDTO dto);
/** /**
*
* @param dto * @param dto
*/ */
void edit(PlatRoomDTO dto); void edit(PlatRoomDTO dto);
/** /**
* 详情 * 详情
*
* @param id * @param id
* @return * @return
*/ */
...@@ -38,12 +39,20 @@ public interface PlatRoomService extends IService<PlatRoom> { ...@@ -38,12 +39,20 @@ public interface PlatRoomService extends IService<PlatRoom> {
/** /**
* 删除 * 删除
*
* @param ids * @param ids
*/ */
void del(List<String> ids); void del(List<String> ids);
void delCascade(List<String> ids);
boolean hasUsedBed(String id, String status, String notBedId);
boolean hasUsedBedByBedId(String bedId, String status, String notBedId);
/** /**
* 列表 * 列表
*
* @param page * @param page
* @return * @return
*/ */
......
...@@ -3,6 +3,7 @@ package com.makeit.service.platform.space.impl; ...@@ -3,6 +3,7 @@ package com.makeit.service.platform.space.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.dto.platform.device.PlatDeviceDTO; import com.makeit.dto.platform.device.PlatDeviceDTO;
...@@ -28,9 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -28,9 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -52,21 +51,21 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -52,21 +51,21 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
public void add(PlatRoom platRoom) { public void add(PlatRoom platRoom) {
LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatBed::getRoomId,platRoom.getId()); queryWrapper.eq(PlatBed::getRoomId, platRoom.getId());
queryWrapper.orderByDesc(PlatBed::getSort); queryWrapper.orderByDesc(PlatBed::getSort);
List<PlatBed> list = list(queryWrapper); List<PlatBed> list = list(queryWrapper);
if(platRoom.getBedNumber() >=1){ if (platRoom.getBedNumber() >= 1) {
int start = 1; int start = 1;
int end = platRoom.getBedNumber(); int end = platRoom.getBedNumber();
if(!list.isEmpty()){ if (!list.isEmpty()) {
start = list.get(0).getSort()+1; start = list.get(0).getSort() + 1;
end = platRoom.getBedNumber() - list.size(); end = platRoom.getBedNumber() - list.size();
} }
List<PlatBed> listBad = new ArrayList<>(); List<PlatBed> listBad = new ArrayList<>();
for(int i=0;i<end;i++){ for (int i = 0; i < end; i++) {
int location = start+i; int location = start + i;
PlatBed platBed = new PlatBed(); PlatBed platBed = new PlatBed();
platBed.setName("床位" + location); platBed.setName("床位" + location);
platBed.setSort(location); platBed.setSort(location);
...@@ -76,7 +75,7 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -76,7 +75,7 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
listBad.add(platBed); listBad.add(platBed);
} }
if(!listBad.isEmpty()){ if (!listBad.isEmpty()) {
saveBatch(listBad); saveBatch(listBad);
} }
} }
...@@ -88,9 +87,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -88,9 +87,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
PlatBedQueryDTO dto = pageReqDTO.getData(); PlatBedQueryDTO dto = pageReqDTO.getData();
Page<PlatBed> p = PageUtil.toMpPage(pageReqDTO); Page<PlatBed> p = PageUtil.toMpPage(pageReqDTO);
LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtil.isNotEmpty(dto.getName()),PlatBed::getName,dto.getName()); queryWrapper.like(StringUtil.isNotEmpty(dto.getName()), PlatBed::getName, dto.getName());
queryWrapper.eq(StringUtil.isNotEmpty(dto.getRoomId()),PlatBed::getRoomId,dto.getRoomId()); queryWrapper.eq(StringUtil.isNotEmpty(dto.getRoomId()), PlatBed::getRoomId, dto.getRoomId());
Page<PlatBed> pages = page(p,queryWrapper); Page<PlatBed> pages = page(p, queryWrapper);
return PageUtil.toPageVO(pages.getRecords(), pages); return PageUtil.toPageVO(pages.getRecords(), pages);
} }
...@@ -101,10 +100,10 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -101,10 +100,10 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
PlatBed platBed = getById(dto.getId()); PlatBed platBed = getById(dto.getId());
LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatBed::getRoomId,platBed.getRoomId()); queryWrapper.eq(PlatBed::getRoomId, platBed.getRoomId());
queryWrapper.eq(PlatBed::getName,dto.getName()); queryWrapper.eq(PlatBed::getName, dto.getName());
queryWrapper.ne(PlatBed::getId,dto.getId()); queryWrapper.ne(PlatBed::getId, dto.getId());
if(count(queryWrapper) >0){ if (count(queryWrapper) > 0) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NAME_EXIT); throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NAME_EXIT);
} }
...@@ -120,7 +119,7 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -120,7 +119,7 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
public void del(String id) { public void del(String id) {
PlatBed platBed = getById(id); PlatBed platBed = getById(id);
if(CommonEnum.NO.getValue().equals(platBed.getStatus())){ if (CommonEnum.NO.getValue().equals(platBed.getStatus())) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NOT_DEL); throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_BAD_NOT_DEL);
} }
...@@ -133,6 +132,22 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -133,6 +132,22 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
removeById(id); removeById(id);
} }
@Transactional(rollbackFor = Exception.class)
@Override
public void changeStatus(StatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
PlatBed bed = getById(dto.getId());
if (bed.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
bed.setStatus(dto.getStatus());
updateById(bed);
}
@Override @Override
public PageVO<PlatDeviceDTO> pageDevice(PageReqDTO<PlatDeviceDTO> pageReqDTO) { public PageVO<PlatDeviceDTO> pageDevice(PageReqDTO<PlatDeviceDTO> pageReqDTO) {
...@@ -141,18 +156,17 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -141,18 +156,17 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
List<PlatRoomBedDevice> list = platRoomBedDeviceService.list(queryWrapper1); List<PlatRoomBedDevice> list = platRoomBedDeviceService.list(queryWrapper1);
List<String> listEquipmentIds = list.stream().map(item->item.getEquipmentId()).collect(Collectors.toList()); List<String> listEquipmentIds = list.stream().map(item->item.getEquipmentId()).collect(Collectors.toList());
PlatDeviceDTO dto = pageReqDTO.getData(); PlatDeviceDTO dto = pageReqDTO.getData();
Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO); Page<PlatDevice> p = PageUtil.toMpPage(pageReqDTO);
LambdaQueryWrapper<PlatDevice> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PlatDevice::getCategory, PlatDeviceEnum.CategoryEnum.HEART); queryWrapper.eq(PlatDevice::getCategory, PlatDeviceEnum.CategoryEnum.HEART);
queryWrapper.notIn(PlatDevice::getId,listEquipmentIds); queryWrapper.notIn(PlatDevice::getId, listEquipmentIds);
queryWrapper.like(StringUtil.isNotEmpty(dto.getOriDeviceId()),PlatDevice::getOriDeviceId,dto.getOriDeviceId()); queryWrapper.like(StringUtil.isNotEmpty(dto.getOriDeviceId()), PlatDevice::getOriDeviceId, dto.getOriDeviceId());
queryWrapper.like(StringUtil.isNotEmpty(dto.getName()),PlatDevice::getName,dto.getName()); queryWrapper.like(StringUtil.isNotEmpty(dto.getName()), PlatDevice::getName, dto.getName());
queryWrapper.like(StringUtil.isNotEmpty(dto.getProductName()),PlatDevice::getProductName,dto.getProductName()); queryWrapper.like(StringUtil.isNotEmpty(dto.getProductName()), PlatDevice::getProductName, dto.getProductName());
queryWrapper.eq(StringUtil.isNotEmpty(dto.getStatus()),PlatDevice::getStatus,dto.getStatus()); queryWrapper.eq(StringUtil.isNotEmpty(dto.getStatus()), PlatDevice::getStatus, dto.getStatus());
Page<PlatDevice> pages = platDeviceService.page(p,queryWrapper); Page<PlatDevice> pages = platDeviceService.page(p, queryWrapper);
List<PlatDeviceDTO> listRecord = BeanDtoVoUtils.listVo(pages.getRecords(),PlatDeviceDTO.class); List<PlatDeviceDTO> listRecord = BeanDtoVoUtils.listVo(pages.getRecords(), PlatDeviceDTO.class);
return PageUtil.toPageVO(listRecord, pages); return PageUtil.toPageVO(listRecord, pages);
} }
...@@ -167,10 +181,15 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -167,10 +181,15 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
List<String> listBedIds = list.stream().map(item->item.getBedId()).collect(Collectors.toList()); List<String> listBedIds = list.stream().map(item->item.getBedId()).collect(Collectors.toList());
LambdaQueryWrapper<PlatBed> queryWrapper2 = new LambdaQueryWrapper<>(); 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> map = listBed.stream().collect(Collectors.toMap(PlatBed::getEquipmentId,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<>(); List<PlatDeviceDTO> data = new ArrayList<>();
if(!listEquipmentIds.isEmpty()){ if(!listEquipmentIds.isEmpty()){
...@@ -181,10 +200,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl ...@@ -181,10 +200,9 @@ public class PlatBedServiceImpl extends ServiceImpl<PlatBedMapper, PlatBed> impl
data = BeanDtoVoUtils.listVo(listDevices,PlatDeviceDTO.class); data = BeanDtoVoUtils.listVo(listDevices,PlatDeviceDTO.class);
data.forEach(item->{ data.forEach(item->{
item.setBedName(map.get(item.getId())); item.setBedName(mapName.get(item.getId()));
}); });
} }
return data; return data;
} }
} }
package com.makeit.service.platform.space.impl; package com.makeit.service.platform.space.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
...@@ -37,7 +38,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -37,7 +38,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void add(PlatRoomDTO dto) { public void add(PlatRoomDTO dto) {
PlatRoom platRoom = BeanDtoVoUtils.convert(dto,PlatRoom.class); PlatRoom platRoom = BeanDtoVoUtils.convert(dto, PlatRoom.class);
save(platRoom); save(platRoom);
platBedService.add(platRoom); platBedService.add(platRoom);
...@@ -48,7 +49,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -48,7 +49,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
public void edit(PlatRoomDTO dto) { public void edit(PlatRoomDTO dto) {
PlatRoom platRoom = getById(dto.getId()); PlatRoom platRoom = getById(dto.getId());
if(platRoom.getBedNumber() > dto.getBedNumber()){ if (platRoom.getBedNumber() > dto.getBedNumber()) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_BAD_NUMBER_NOT_AUTH); throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_BAD_NUMBER_NOT_AUTH);
} }
...@@ -65,7 +66,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -65,7 +66,7 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
@Override @Override
public PlatRoomDTO view(String id) { public PlatRoomDTO view(String id) {
PlatRoom room = getById(id); PlatRoom room = getById(id);
PlatRoomDTO data = BeanDtoVoUtils.convert(room,PlatRoomDTO.class); PlatRoomDTO data = BeanDtoVoUtils.convert(room, PlatRoomDTO.class);
return data; return data;
} }
...@@ -74,20 +75,50 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i ...@@ -74,20 +75,50 @@ public class PlatRoomServiceImpl extends ServiceImpl<PlatRoomMapper, PlatRoom> i
public void del(List<String> ids) { public void del(List<String> ids) {
LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatBed> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(PlatBed::getRoomId,ids); queryWrapper.in(PlatBed::getRoomId, ids);
if(platBedService.count(queryWrapper) > 0){ if (platBedService.count(queryWrapper) > 0) {
throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_EXIT_BAD); throw new BusinessException(CodeMessageEnum.PLATFORM_ERROR_ROOM_EXIT_BAD);
} }
removeByIds(ids); removeByIds(ids);
} }
@Transactional
@Override
public void delCascade(List<String> ids) {
removeByIds(ids);
platBedService.remove(new QueryWrapper<PlatBed>().lambda()
.in(PlatBed::getRoomId, ids));
}
@Override
public boolean hasUsedBed(String id, String status, String notBedId) {
return platBedService.count(new QueryWrapper<PlatBed>().lambda()
.in(PlatBed::getRoomId, id)
.eq(StringUtil.isNotBlank(status), PlatBed::getStatus, status)
.ne(StringUtil.isNotBlank(notBedId), PlatBed::getId, notBedId)
) > 0;
}
@Override
public boolean hasUsedBedByBedId(String bedId, String status, String notBedId) {
PlatBed bed = platBedService.getById(bedId);
return platBedService.count(new QueryWrapper<PlatBed>().lambda()
.in(PlatBed::getRoomId, bed.getRoomId())
.eq(StringUtil.isNotBlank(status), PlatBed::getStatus, status)
.ne(StringUtil.isNotBlank(notBedId), PlatBed::getId, notBedId)
) > 0;
}
@Override @Override
public PageVO<PlatRoom> page(PageReqDTO<PlatRoomQueryDTO> page) { public PageVO<PlatRoom> page(PageReqDTO<PlatRoomQueryDTO> page) {
PlatRoomQueryDTO dto = page.getData(); PlatRoomQueryDTO dto = page.getData();
Page<PlatRoom> p = PageUtil.toMpPage(page); Page<PlatRoom> p = PageUtil.toMpPage(page);
LambdaQueryWrapper<PlatRoom> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PlatRoom> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtil.isNotEmpty(dto.getName()),PlatRoom::getName,dto.getName()); queryWrapper.like(StringUtil.isNotEmpty(dto.getName()), PlatRoom::getName, dto.getName());
Page<PlatRoom> pages = page(p,queryWrapper); Page<PlatRoom> pages = page(p, queryWrapper);
return PageUtil.toPageVO(pages.getRecords(), pages); return PageUtil.toPageVO(pages.getRecords(), pages);
} }
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="server-common" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" /> <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
<orderEntry type="module" module-name="server-common" /> <orderEntry type="module" module-name="server-common" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
...@@ -156,6 +155,13 @@ ...@@ -156,6 +155,13 @@
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" /> <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-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: 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: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:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" 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 ...@@ -91,4 +91,13 @@ libreOffice: C:\\Program Files\\LibreOffice\\program\\soffice
iot: iot:
url: http://iot.meiqicloud.com/api/ url: http://iot.meiqicloud.com/api/
clientId: fyxmb5h52iKwE2Hi clientId: fyxmb5h52iKwE2Hi
secureKey: 22fZbnH36wdHn7ZTyKKHraFw233npcez secureKey: 22fZbnH36wdHn7ZTyKKHraFw233npcez
\ No newline at end of file
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; ...@@ -3,6 +3,7 @@ package com.makeit.iotapi;
import com.makeit.module.admin.vo.plat.PlatTenantVO; import com.makeit.module.admin.vo.plat.PlatTenantVO;
import com.makeit.module.iot.service.IotOrgService; import com.makeit.module.iot.service.IotOrgService;
import com.makeit.module.iot.service.IotProductDeviceService; import com.makeit.module.iot.service.IotProductDeviceService;
import com.makeit.module.iot.service.IotTokenService;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
...@@ -11,6 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest; ...@@ -11,6 +12,8 @@ import org.springframework.boot.test.context.SpringBootTest;
public class IotTest { public class IotTest {
@Autowired @Autowired
private IotTokenService tokenService;
@Autowired
private IotOrgService iotOrgService; private IotOrgService iotOrgService;
@Autowired @Autowired
private IotProductDeviceService iotProductDeviceService; private IotProductDeviceService iotProductDeviceService;
...@@ -25,6 +28,11 @@ public class IotTest { ...@@ -25,6 +28,11 @@ public class IotTest {
@Test @Test
void getIotToken() {
tokenService.getIotToken();
}
@Test
void getEquipmentInfo() { void getEquipmentInfo() {
iotProductDeviceService.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