From f54aa86ef1fb84f88515e4a94d36a864191cb5dd Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 16:06:54 +0800 Subject: [PATCH 01/33] =?UTF-8?q?feat:=20postgrep=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot-data-serviceImpl-rdb/pom.xml | 24 ++-- .../src/main/resources/application.yml | 88 +++++++------- .../src/main/resources/sql/schema-postgre.sql | 112 ++++++++++++++++++ 3 files changed, 171 insertions(+), 53 deletions(-) create mode 100644 iot-starter/src/main/resources/sql/schema-postgre.sql diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml index 26339754..4ebf8c19 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml @@ -48,16 +48,22 @@ yitter-idgenerator - - com.h2database - h2 - + + + + - - - - - + + + + + + + + org.postgresql + postgresql + 42.2.9 + commons-io diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index a127a633..27bf84b5 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -21,50 +21,50 @@ spring: init: schema-locations: classpath:sql/schema.sql mode: ALWAYS - datasource: - url: jdbc:h2:./data/iotkit;MODE=MySQL - username: sa - password: 123456 - driverClassName: org.h2.Driver - type: com.zaxxer.hikari.HikariDataSource - # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content - dynamic: - hikari: - connection-timeout: 5000 - idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 - min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 - max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 - max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 - is-auto-commit: true - primary: master #设置默认的数据源或者数据源组,默认值即为master - strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 - datasource: - # 主库数据源 - master: - type: ${spring.datasource.type} - driverClassName: org.h2.Driver - # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 - # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:h2:./data/iotkit;MODE=MySQL - username: sa - password: 123456 - # 从库数据源 - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: org.h2.Driver - url: jdbc:h2:./data/iotkit;MODE=MySQL - username: sa - password: 123456 - - # 内置h2 web console设置 - platform: h2 - h2: - console: - enabled: true - path: /h2 - settings: - web-allow-others: true +# datasource: +# url: jdbc:h2:./data/iotkit;MODE=MySQL +# username: sa +# password: 123456 +# driverClassName: org.h2.Driver +# type: com.zaxxer.hikari.HikariDataSource +# # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content +# dynamic: +# hikari: +# connection-timeout: 5000 +# idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 +# min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 +# max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 +# max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 +# is-auto-commit: true +# primary: master #设置默认的数据源或者数据源组,默认值即为master +# strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 +# datasource: +# # 主库数据源 +# master: +# type: ${spring.datasource.type} +# driverClassName: org.h2.Driver +# # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 +# # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) +# url: jdbc:h2:./data/iotkit;MODE=MySQL +# username: sa +# password: 123456 +# # 从库数据源 +# slave: +# lazy: true +# type: ${spring.datasource.type} +# driverClassName: org.h2.Driver +# url: jdbc:h2:./data/iotkit;MODE=MySQL +# username: sa +# password: 123456 +# +# # 内置h2 web console设置 +# platform: h2 +# h2: +# console: +# enabled: true +# path: /h2 +# settings: +# web-allow-others: true #=======内置H2数据库连接设置结束==========>> diff --git a/iot-starter/src/main/resources/sql/schema-postgre.sql b/iot-starter/src/main/resources/sql/schema-postgre.sql new file mode 100644 index 00000000..c593d651 --- /dev/null +++ b/iot-starter/src/main/resources/sql/schema-postgre.sql @@ -0,0 +1,112 @@ + +-- ---------------------------- +-- 18、代码生成业务表 +-- ---------------------------- +drop table if exists gen_table; +create table if not exists gen_table +( + table_id int8, + data_name varchar(200) default ''::varchar, + table_name varchar(200) default ''::varchar, + table_comment varchar(500) default ''::varchar, + sub_table_name varchar(64) default ''::varchar, + sub_table_fk_name varchar(64) default ''::varchar, + class_name varchar(100) default ''::varchar, + tpl_category varchar(200) default 'crud'::varchar, + package_name varchar(100) default null::varchar, + module_name varchar(30) default null::varchar, + business_name varchar(30) default null::varchar, + function_name varchar(50) default null::varchar, + function_author varchar(50) default null::varchar, + gen_type char default '0'::bpchar not null, + gen_path varchar(200) default '/'::varchar, + options varchar(1000) default null::varchar, + create_dept int8, + create_by int8, + create_time timestamp, + update_by int8, + update_time timestamp, + remark varchar(500) default null::varchar, + constraint gen_table_pk primary key (table_id) + ); + +comment on table gen_table is '代码生成业务表'; +comment on column gen_table.table_id is '编号'; +comment on column gen_table.data_name is '数据源名称'; +comment on column gen_table.table_name is '表名称'; +comment on column gen_table.table_comment is '表描述'; +comment on column gen_table.sub_table_name is '关联子表的表名'; +comment on column gen_table.sub_table_fk_name is '子表关联的外键名'; +comment on column gen_table.class_name is '实体类名称'; +comment on column gen_table.tpl_category is '使用的模板(CRUD单表操作 TREE树表操作)'; +comment on column gen_table.package_name is '生成包路径'; +comment on column gen_table.module_name is '生成模块名'; +comment on column gen_table.business_name is '生成业务名'; +comment on column gen_table.function_name is '生成功能名'; +comment on column gen_table.function_author is '生成功能作者'; +comment on column gen_table.gen_type is '生成代码方式(0zip压缩包 1自定义路径)'; +comment on column gen_table.gen_path is '生成路径(不填默认项目路径)'; +comment on column gen_table.options is '其它生成选项'; +comment on column gen_table.create_dept is '创建部门'; +comment on column gen_table.create_by is '创建者'; +comment on column gen_table.create_time is '创建时间'; +comment on column gen_table.update_by is '更新者'; +comment on column gen_table.update_time is '更新时间'; +comment on column gen_table.remark is '备注'; + +-- ---------------------------- +-- 19、代码生成业务表字段 +-- ---------------------------- +drop table if exists gen_table_column; +create table if not exists gen_table_column +( + column_id int8, + table_id int8, + column_name varchar(200) default null::varchar, + column_comment varchar(500) default null::varchar, + column_type varchar(100) default null::varchar, + java_type varchar(500) default null::varchar, + java_field varchar(200) default null::varchar, + is_pk char default null::bpchar, + is_increment char default null::bpchar, + is_required char default null::bpchar, + is_insert char default null::bpchar, + is_edit char default null::bpchar, + is_list char default null::bpchar, + is_query char default null::bpchar, + query_type varchar(200) default 'EQ'::varchar, + html_type varchar(200) default null::varchar, + dict_type varchar(200) default ''::varchar, + sort int4, + create_dept int8, + create_by int8, + create_time timestamp, + update_by int8, + update_time timestamp, + constraint gen_table_column_pk primary key (column_id) + ); + +comment on table gen_table_column is '代码生成业务表字段'; +comment on column gen_table_column.column_id is '编号'; +comment on column gen_table_column.table_id is '归属表编号'; +comment on column gen_table_column.column_name is '列名称'; +comment on column gen_table_column.column_comment is '列描述'; +comment on column gen_table_column.column_type is '列类型'; +comment on column gen_table_column.java_type is 'JAVA类型'; +comment on column gen_table_column.java_field is 'JAVA字段名'; +comment on column gen_table_column.is_pk is '是否主键(1是)'; +comment on column gen_table_column.is_increment is '是否自增(1是)'; +comment on column gen_table_column.is_required is '是否必填(1是)'; +comment on column gen_table_column.is_insert is '是否为插入字段(1是)'; +comment on column gen_table_column.is_edit is '是否编辑字段(1是)'; +comment on column gen_table_column.is_list is '是否列表字段(1是)'; +comment on column gen_table_column.is_query is '是否查询字段(1是)'; +comment on column gen_table_column.query_type is '查询方式(等于、不等于、大于、小于、范围)'; +comment on column gen_table_column.html_type is '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)'; +comment on column gen_table_column.dict_type is '字典类型'; +comment on column gen_table_column.sort is '排序'; +comment on column gen_table_column.create_dept is '创建部门'; +comment on column gen_table_column.create_by is '创建者'; +comment on column gen_table_column.create_time is '创建时间'; +comment on column gen_table_column.update_by is '更新者'; +comment on column gen_table_column.update_time is '更新时间'; From 4561f0b6f3574d833136e59485d41c3a71c239f6 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 16:13:27 +0800 Subject: [PATCH 02/33] =?UTF-8?q?feat:=20postgrep=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iot-starter/src/main/resources/application.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index 27bf84b5..4023ae7f 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -19,7 +19,8 @@ spring: format_sql: true sql: init: - schema-locations: classpath:sql/schema.sql +# schema-locations: classpath:sql/schema.sql + schema-locations: classpath:sql/schema-postgre.sql mode: ALWAYS # datasource: # url: jdbc:h2:./data/iotkit;MODE=MySQL From 43df7c4ff5e0ad52a45092bf7635ff8cc0d3cca8 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 16:14:54 +0800 Subject: [PATCH 03/33] =?UTF-8?q?feat:=20postgrep=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 66 ++++++++++++++----- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index 4023ae7f..a4e3d10e 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -69,23 +69,55 @@ spring: #=======内置H2数据库连接设置结束==========>> +# <<==========mysql配置开始============== # <<==========mysql配置开始============== - # datasource: - # url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false - # driverClassName: com.mysql.cj.jdbc.Driver - # username: root - # password: 123456 - # validationQuery: SELECT 1 - # testOnBorrow: true - # jpa: - # database: MySQL - # database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - ## show-sql: true - # hibernate: - # ddl-auto: update - # properties: - # hibernate: - # format_sql: true + datasource: + url: jdbc:postgresql://127.0.0.1:5432/iotkit + driverClassName: org.postgresql.Driver + username: postgres + password: 123456 + validationQuery: SELECT 1 + testOnBorrow: true + + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + hikari: + connection-timeout: 5000 + idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 + min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 + max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 + max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 + is-auto-commit: true + primary: master #设置默认的数据源或者数据源组,默认值即为master + strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: org.postgresql.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:postgresql://127.0.0.1:5432/iotkit + username: postgres + password: 123456 + # 从库数据源 + slave: + lazy: true + type: ${spring.datasource.type} + driverClassName: org.postgresql.Driver + url: jdbc:postgresql://127.0.0.1:5432/iotkit + username: postgres + password: 123456 + jpa: + database: MySQL + database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + # show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true # ============mysql配置结束============>> #<<================es时序数据配置开始=============== @@ -111,7 +143,7 @@ spring: redis: #使用内置redis的配置 #host: redis - host: 127.0.0.1 + host: 192.168.6.129 port: 6379 database: 0 From ef2901037ef0c78efa8a70c00d9d6f61df17e48c Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 16:54:42 +0800 Subject: [PATCH 04/33] =?UTF-8?q?chore:=20docker=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 -- docker-compose/docker-compose-iita.yml | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index b41f8bcf..0c46d671 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,5 +4,3 @@ ADD iot-starter/target/iot-starter-0.4.5-SNAPSHOT.jar /app/app.jar ADD data/init /app/data/init ADD data/components /app/data/components ADD data/converters /app/data/converters -EXPOSE 8086 -ENTRYPOINT ["java", "-classpath", ".:lib/*","cc.iotkit.Application"] diff --git a/docker-compose/docker-compose-iita.yml b/docker-compose/docker-compose-iita.yml index 9e4dac0f..c03dfe3c 100644 --- a/docker-compose/docker-compose-iita.yml +++ b/docker-compose/docker-compose-iita.yml @@ -14,7 +14,8 @@ services: network_mode: "host" volumes: # - ./admin-service.jar:/admin-service.jar - - /app/data:/app/data/ + - /app/data/components:/app/data/components + - /app/data/converters:/app/data/converters - /app/config:/app/config/ - /app/log:/app/log/ command: From 69095099758d029aeccf7dbb54ba43369017cb26 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 19:43:23 +0800 Subject: [PATCH 05/33] =?UTF-8?q?fix:=20post=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 210 +----------------- 1 file changed, 2 insertions(+), 208 deletions(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index a4e3d10e..4c458af4 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -7,217 +7,11 @@ spring: enabled: true max-file-size: 10MB max-request-size: 12MB - - #注: 切换数据库时需要将项目根目录中的.init文件删除再重启 - # <<=======内置H2数据库连接设置开始========== - jpa: - show-sql: true - hibernate: - ddl-auto: update - properties: - hibernate: - format_sql: true - sql: - init: -# schema-locations: classpath:sql/schema.sql - schema-locations: classpath:sql/schema-postgre.sql - mode: ALWAYS -# datasource: -# url: jdbc:h2:./data/iotkit;MODE=MySQL -# username: sa -# password: 123456 -# driverClassName: org.h2.Driver -# type: com.zaxxer.hikari.HikariDataSource -# # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content -# dynamic: -# hikari: -# connection-timeout: 5000 -# idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 -# min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 -# max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 -# max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 -# is-auto-commit: true -# primary: master #设置默认的数据源或者数据源组,默认值即为master -# strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 -# datasource: -# # 主库数据源 -# master: -# type: ${spring.datasource.type} -# driverClassName: org.h2.Driver -# # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 -# # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) -# url: jdbc:h2:./data/iotkit;MODE=MySQL -# username: sa -# password: 123456 -# # 从库数据源 -# slave: -# lazy: true -# type: ${spring.datasource.type} -# driverClassName: org.h2.Driver -# url: jdbc:h2:./data/iotkit;MODE=MySQL -# username: sa -# password: 123456 -# -# # 内置h2 web console设置 -# platform: h2 -# h2: -# console: -# enabled: true -# path: /h2 -# settings: -# web-allow-others: true - #=======内置H2数据库连接设置结束==========>> + profiles: + active: postgres -# <<==========mysql配置开始============== - # <<==========mysql配置开始============== - datasource: - url: jdbc:postgresql://127.0.0.1:5432/iotkit - driverClassName: org.postgresql.Driver - username: postgres - password: 123456 - validationQuery: SELECT 1 - testOnBorrow: true - type: com.zaxxer.hikari.HikariDataSource - # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content - dynamic: - hikari: - connection-timeout: 5000 - idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 - min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 - max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 - max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 - is-auto-commit: true - primary: master #设置默认的数据源或者数据源组,默认值即为master - strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 - datasource: - # 主库数据源 - master: - type: ${spring.datasource.type} - driverClassName: org.postgresql.Driver - # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 - # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:postgresql://127.0.0.1:5432/iotkit - username: postgres - password: 123456 - # 从库数据源 - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: org.postgresql.Driver - url: jdbc:postgresql://127.0.0.1:5432/iotkit - username: postgres - password: 123456 - jpa: - database: MySQL - database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - # show-sql: true - hibernate: - ddl-auto: update - properties: - hibernate: - format_sql: true - # ============mysql配置结束============>> - - #<<================es时序数据配置开始=============== - elasticsearch: - rest: - #使用内置es的配置 - #uris: http://elasticsearch:9200 - uris: http://127.0.0.1:9200 - username: - password: - connection-timeout: 10s - #================es时序数据配置结束===============>> - - #<<===========tdengine时序数据库配置开始============ - # td-datasource: - # url: jdbc:TAOS-RS://127.0.0.1:6041/iotkit?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8 - # username: root - # password: taosdata - # driverClassName: com.taosdata.jdbc.rs.RestfulDriver - #===========tdengine时序数据库配置开始============>> - - - redis: - #使用内置redis的配置 - #host: redis - host: 192.168.6.129 - port: 6379 - database: 0 - - mvc: - pathmatch: - matching-strategy: ant_path_matcher -# profiles: -# active: mysql - -#application.yml中打开注释支持rocketMq作为消息总线,pom.xml中打开注释使用rocketmq消息总线 -#rocketmq: -# name-server: 172.16.1.113:9876 -# producer: -# group: iotkit - -#图片存储用的是阿里云oss,如果需要上传产品图片才需要配置 -aliyun: - bucketId: - endpoint: - accessKeyId: - accessKeySecret: - -sa-token: - # token名称 (同时也是cookie名称) - token-name: token - # token有效期,单位s 默认30天, -1代表永不过期 - timeout: 2592000 - # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - activity-timeout: -1 - # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) - is-concurrent: true - # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) - is-share: false - # token风格 - token-style: uuid - # 是否输出操作日志 - is-log: false - -captcha: - enable: true - # 页面 <参数设置> 可开启关闭 验证码校验 - # 验证码类型 math 数组计算 char 字符验证 - type: MATH - # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰 - category: CIRCLE - # 数字验证码位数 - numberLength: 1 - # 字符验证码长度 - charLength: 4 - -# 用户配置 -user: - password: - # 密码最大错误次数 - maxRetryCount: 5 - # 密码锁定时间(默认10分钟) - lockTime: 10 - -# openapi配置 -openapi: - appid: 123456789 - password: 123456 - -oss: - region: xxxxx - endpoint: xxxxx - accessKey: xxxxx - secretKey: xxxxx - buckName: xxxx -baetyl: - api-type: feign - service-url: http://116.168.30.140:30004 - -# MyBatisPlus配置 # https://baomidou.com/config/ mybatis-plus: # 不支持多包, 如有需要可在注解配置 或 提升扫包等级 From f916e72fc6c565983c19b0e2b01e3c7d2e0c82f1 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 20:26:42 +0800 Subject: [PATCH 06/33] update: docker --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0c46d671..44002f78 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM openjdk:11-jre-slim WORKDIR /app -ADD iot-starter/target/iot-starter-0.4.5-SNAPSHOT.jar /app/app.jar ADD data/init /app/data/init ADD data/components /app/data/components ADD data/converters /app/data/converters +ADD iot-starter/target/iot-starter-0.4.5-SNAPSHOT.jar /app/app.jar \ No newline at end of file From 58998298a35bb58cdcd13b1c6a5e9a1a7aeac305 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 7 Aug 2023 21:33:22 +0800 Subject: [PATCH 07/33] =?UTF-8?q?fix:=20jpa=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iot-starter/src/main/resources/application.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index 4c458af4..0082d9db 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -10,7 +10,13 @@ spring: profiles: active: postgres - + jpa: + show-sql: true + hibernate: + ddl-auto: update + properties: + hibernate: + format_sql: true # https://baomidou.com/config/ mybatis-plus: From f9b73532a65d69161cd43f65bc5d3bfade40ce55 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Wed, 9 Aug 2023 10:34:35 +0800 Subject: [PATCH 08/33] =?UTF-8?q?update:=20nb=E7=BB=84=E4=BB=B6=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E4=B8=8A=20=E6=97=A0=E9=9C=80=E6=81=A2=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../750da259-ff77-4869-a5a5-12a5433b0e4c/component.js | 2 +- iot-components/iot-nb-component/src/main/resources/component.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/components/750da259-ff77-4869-a5a5-12a5433b0e4c/component.js b/data/components/750da259-ff77-4869-a5a5-12a5433b0e4c/component.js index 082f59fa..9020427d 100644 --- a/data/components/750da259-ff77-4869-a5a5-12a5433b0e4c/component.js +++ b/data/components/750da259-ff77-4869-a5a5-12a5433b0e4c/component.js @@ -331,7 +331,7 @@ this.onReceive = function (head, type, payload) { payload: payload } }, - action: action + action: {} } } diff --git a/iot-components/iot-nb-component/src/main/resources/component.js b/iot-components/iot-nb-component/src/main/resources/component.js index 082f59fa..9020427d 100644 --- a/iot-components/iot-nb-component/src/main/resources/component.js +++ b/iot-components/iot-nb-component/src/main/resources/component.js @@ -331,7 +331,7 @@ this.onReceive = function (head, type, payload) { payload: payload } }, - action: action + action: {} } } From cfcbb5d2dfdf6a8047d6951b46f00da63fa574ec Mon Sep 17 00:00:00 2001 From: xiwa Date: Sun, 13 Aug 2023 01:12:52 +0000 Subject: [PATCH 09/33] update README.md. Signed-off-by: xiwa --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2e511c2e..3685e52f 100755 --- a/README.md +++ b/README.md @@ -74,16 +74,18 @@ Vertx event-bus(内置)、RocketMQ,通过扩展模块可接入其它任意 **注:** es版本为7.15.2,mysql版本为8.0+ ##### 关系数据库切换为mysql方法(其它数据库同理) +1、删掉.init、iotkit.mv.db、iotkit.trace.db文件 -1、将iot-data-serviceImpl-rdb/pom.xml中的mysql驱动注释放开 +2、将iot-data-serviceImpl-rdb/pom.xml中的mysql驱动注释放开 -2、启动时指定active: --spring.profiles.active=mysql +3、启动时指定active: --spring.profiles.active=mysql -##### 时序数据库切换为TDengin(版本:2.6x)方法 +##### 时序数据库切换为TDengine(版本:3.x)方法 +1、删掉.init和数据文件 -1、注释掉iot-starter/pom.xml中的 iot-temporal-serviceImpl-es,并打开iot-td-temporal-service的注释 +2、注释掉iot-starter/pom.xml中的 iot-temporal-serviceImpl-es,并打开iot-td-temporal-service的注释 -2、application.xml中注释掉elasticsearch配置,并打开td-datasource配置 +3、注解掉iot-starter下application.xml中的elasticsearch配置,并打开td-datasource配置 ##### 消息总线切换为RocketMq方法 From c51b39b76d58bbdda35109f2d0332c1e57601466 Mon Sep 17 00:00:00 2001 From: xiwa Date: Tue, 15 Aug 2023 15:44:38 +0000 Subject: [PATCH 10/33] update README.md. Signed-off-by: xiwa --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3685e52f..c3baf077 100755 --- a/README.md +++ b/README.md @@ -73,15 +73,15 @@ Vertx event-bus(内置)、RocketMQ,通过扩展模块可接入其它任意 **注:** es版本为7.15.2,mysql版本为8.0+ -##### 关系数据库切换为mysql方法(其它数据库同理) +##### H2数据库切换为mysql方法(其它数据库同理) 1、删掉.init、iotkit.mv.db、iotkit.trace.db文件 2、将iot-data-serviceImpl-rdb/pom.xml中的mysql驱动注释放开 -3、启动时指定active: --spring.profiles.active=mysql +3、application.yml 注释掉内置H2数据库,打开mysql配置注释 -##### 时序数据库切换为TDengine(版本:3.x)方法 -1、删掉.init和数据文件 +##### es切换为TDengine(版本:3.x)方法 +1、删掉.init和关系数据库数据 2、注释掉iot-starter/pom.xml中的 iot-temporal-serviceImpl-es,并打开iot-td-temporal-service的注释 From b49c65312c8afc61f06234f06bb80755688c123a Mon Sep 17 00:00:00 2001 From: zak Date: Thu, 17 Aug 2023 14:49:34 +0800 Subject: [PATCH 11/33] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dmysql=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=95=B0=E6=8D=AE=E6=BA=90=E9=85=8D=E7=BD=AE=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index f5693157..4adfbdbf 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -67,24 +67,37 @@ spring: web-allow-others: true #=======内置H2数据库连接设置结束==========>> - # <<==========mysql配置开始============== - # datasource: - # url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false - # driverClassName: com.mysql.cj.jdbc.Driver - # username: root - # password: 123456 - # validationQuery: SELECT 1 - # testOnBorrow: true - # jpa: - # database: MySQL - # database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - ## show-sql: true - # hibernate: - # ddl-auto: update - # properties: - # hibernate: - # format_sql: true +# jpa: +# database: MySQL +# database-platform: org.hibernate.dialect.MySQL5InnoDBDialect +# show-sql: true +# hibernate: +# ddl-auto: update +# properties: +# hibernate: +# format_sql: true +# datasource: +# type: com.zaxxer.hikari.HikariDataSource +# dynamic: +# hikari: +# connection-timeout: 5000 +# idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 +# min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 +# max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 +# max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 +# is-auto-commit: true +# primary: master #设置默认的数据源或者数据源组,默认值即为master +# strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 +# datasource: +# # 主库数据源 +# master: +# type: ${spring.datasource.type} +# driverClassName: com.mysql.cj.jdbc.Driver +# # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 +# url: jdbc:mysql://192.168.31.136:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false +# username: root +# password: 123456 # ============mysql配置结束============>> #<<================es时序数据配置开始=============== From 4a316f6b87ad6dc6cbc13373ab6b08dda485610e Mon Sep 17 00:00:00 2001 From: zak Date: Fri, 18 Aug 2023 15:36:56 +0800 Subject: [PATCH 12/33] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8C=89?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=8E=92=E5=BA=8F=E5=A4=B1=E6=95=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cc/iotkit/data/util/PageBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/util/PageBuilder.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/util/PageBuilder.java index 4c7b658e..115c4505 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/util/PageBuilder.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/util/PageBuilder.java @@ -54,7 +54,7 @@ public class PageBuilder { Map sortMap = pageRequest.getSortMap(); if (CollUtil.isNotEmpty(sortMap)){ sortMap.forEach((k,v) -> { - orders.add(new Order(Direction.ASC, k)); + orders.add(new Order(Direction.fromString("desc"), k)); }); } return orders; From 9e485741701f0649d374361f2b8d69420a493ad9 Mon Sep 17 00:00:00 2001 From: zak Date: Fri, 18 Aug 2023 17:31:10 +0800 Subject: [PATCH 13/33] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=BC=95=E6=93=8E-=E6=89=A7=E8=A1=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97Mapstruct=E8=BD=AC=E6=8D=A2=E7=B1=BB=E5=9E=8B=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java index 23098668..a4f8ba04 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java @@ -1,6 +1,6 @@ package cc.iotkit.manager.dto.vo.ruleinfo; -import cc.iotkit.model.rule.RuleInfo; +import cc.iotkit.model.rule.RuleLog; import io.github.linpeilie.annotations.AutoMapper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -10,7 +10,7 @@ import java.io.Serializable; @ApiModel(value = "RuleLogVo") @Data -@AutoMapper(target = RuleInfo.class) +@AutoMapper(target = RuleLog.class) public class RuleLogVo implements Serializable { private static final long serialVersionUID = -1L; @@ -18,19 +18,15 @@ public class RuleLogVo implements Serializable { private Long time; @ApiModelProperty(value = "规则id") - private String ruleId; @ApiModelProperty(value = "状态") - private String state1; @ApiModelProperty(value = "内容") - private String content; @ApiModelProperty(value = "是否成功") - private Boolean success; } From 9772801a3c45aa4289673eab04a2f2da7579b552 Mon Sep 17 00:00:00 2001 From: zak Date: Mon, 21 Aug 2023 11:03:16 +0800 Subject: [PATCH 14/33] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=BC=95=E6=93=8E-=E6=89=A7=E8=A1=8C=E6=97=A5?= =?UTF-8?q?=E5=BF=97Mapstruct=E6=98=A0=E5=B0=84=E5=AD=97=E6=AE=B5=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java index a4f8ba04..424e402f 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/dto/vo/ruleinfo/RuleLogVo.java @@ -15,13 +15,13 @@ public class RuleLogVo implements Serializable { private static final long serialVersionUID = -1L; @ApiModelProperty(value = "时间") - private Long time; + private Long logAt; @ApiModelProperty(value = "规则id") private String ruleId; @ApiModelProperty(value = "状态") - private String state1; + private String state; @ApiModelProperty(value = "内容") private String content; From ceca2379b154dc54006a666f5615cf235580ccec Mon Sep 17 00:00:00 2001 From: zak Date: Wed, 23 Aug 2023 11:53:56 +0800 Subject: [PATCH 15/33] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DJavaScriptEngine?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BAargs=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=94=99=E8=AF=AF=EF=BC=8C=E5=B9=B6=E6=8F=90=E5=8F=96=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/iotkit/script/JavaScriptEngine.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/iot-common/iot-script-engine/src/main/java/cc/iotkit/script/JavaScriptEngine.java b/iot-common/iot-script-engine/src/main/java/cc/iotkit/script/JavaScriptEngine.java index 681c7ff2..15c892b7 100644 --- a/iot-common/iot-script-engine/src/main/java/cc/iotkit/script/JavaScriptEngine.java +++ b/iot-common/iot-script-engine/src/main/java/cc/iotkit/script/JavaScriptEngine.java @@ -52,19 +52,13 @@ public class JavaScriptEngine implements IScriptEngine { public T invokeMethod(TypeReference type, String methodName, Object... args) { Value member = jsScript.getMember("invoke"); - StringBuilder sbArgs = new StringBuilder("["); - //将入参转成json - for (int i = 0; i < args.length; i++) { - args[i] = JsonUtils.toJsonString(args[i]); - sbArgs.append(i == args.length - 1 ? "," : "").append(args[i]); - } - sbArgs.append("]"); + StringBuilder sbArgs = formatArgs(args); //通过调用invoke方法将目标方法返回结果转成json Value rst = member.execute(methodName, args); String json = rst.asString(); - log.info("invoke script {},args:{}, result:{}", methodName, sbArgs, json); + log.info("invoke script={}, args={}, result={}", methodName, sbArgs, json); //没有返回值 if (json == null || "null".equals(json)) { @@ -74,4 +68,15 @@ public class JavaScriptEngine implements IScriptEngine { return JsonUtils.parseObject(json, type); } + private static StringBuilder formatArgs(Object[] args) { + StringBuilder sbArgs = new StringBuilder("["); + //将入参转成json + for (int i = 0; i < args.length; i++) { + args[i] = JsonUtils.toJsonString(args[i]); + sbArgs.append(args[i]).append(i != args.length - 1 ? "," : ""); + } + sbArgs.append("]"); + return sbArgs; + } + } \ No newline at end of file From 97f48c4b16494faeb612e9825aa03780692a8a03 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Tue, 5 Sep 2023 11:07:56 +0800 Subject: [PATCH 16/33] =?UTF-8?q?fix:=20=E5=BE=AE=E4=BF=A1=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E9=85=8D=E7=BD=AE=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cc/iotkit/web/service/SysLoginService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java index 3ce5db87..eddc4328 100644 --- a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java +++ b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java @@ -63,13 +63,13 @@ public class SysLoginService { @Value("${user.password.lockTime}") private Integer lockTime; - @Value("${weixin.appid}") + @Value("${weixin.appid:}") private String appid; - @Value("${weixin.secret}") + @Value("${weixin.secret:}") private String secret; - @Value("${weixin.authUrl}") + @Value("${weixin.authUrl:}") private String authUrl; /** From 710ee6c293c1a89ccc29120b4443cb74bee39b9e Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Tue, 5 Sep 2023 11:35:10 +0800 Subject: [PATCH 17/33] =?UTF-8?q?fix:=20=E8=AE=BE=E5=A4=87=E8=A7=A6?= =?UTF-8?q?=E5=8F=91closehandler=E5=90=8E,=E4=BB=8D=E7=84=B6=E8=83=BD?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E6=B6=88=E6=81=AF,=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cc/iotkit/comp/nb/NBVerticle.java | 1 + 1 file changed, 1 insertion(+) diff --git a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java index 6f025c31..c8e31109 100644 --- a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java +++ b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java @@ -114,6 +114,7 @@ public class NBVerticle extends AbstractVerticle { //删除设备与连接关系 endpointMap.remove(getEndpointKey(r)); }); + endpoint.close(); }).disconnectMessageHandler(disconnectMessage -> { log.info("Received disconnect from client, reason code = {}", disconnectMessage.code()); executor.onReceive(new HashMap<>(), "disconnect", clientId, (r) -> { From 27a541ed67ab3df5bddac6c2606c714f6c026b24 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Tue, 5 Sep 2023 19:45:33 +0800 Subject: [PATCH 18/33] =?UTF-8?q?fix:=20=E8=AE=BE=E5=A4=87=E8=A7=A6?= =?UTF-8?q?=E5=8F=91closehandler=E5=90=8E,=E4=BB=8D=E7=84=B6=E8=83=BD?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E6=B6=88=E6=81=AF,=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/iotkit/comp/nb/NBVerticle.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java index c8e31109..eafc3acf 100644 --- a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java +++ b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java @@ -22,6 +22,7 @@ import io.vertx.core.Future; import io.vertx.core.buffer.Buffer; import io.vertx.core.net.PemKeyCertOptions; import io.vertx.mqtt.*; +import io.vertx.mqtt.messages.codes.MqttDisconnectReasonCode; import io.vertx.mqtt.messages.codes.MqttSubAckReasonCode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Hex; @@ -114,7 +115,6 @@ public class NBVerticle extends AbstractVerticle { //删除设备与连接关系 endpointMap.remove(getEndpointKey(r)); }); - endpoint.close(); }).disconnectMessageHandler(disconnectMessage -> { log.info("Received disconnect from client, reason code = {}", disconnectMessage.code()); executor.onReceive(new HashMap<>(), "disconnect", clientId, (r) -> { @@ -159,6 +159,17 @@ public class NBVerticle extends AbstractVerticle { if (StringUtils.isBlank(payload)) { return; } + if(Boolean.FALSE.equals(mqttConnectPool.get(clientId))){ + executor.onReceive(null, "online", clientId); + //保存设备与连接关系 + String productKey = getProductKey(clientId); + String deviceName = getDeviceName(clientId); + endpointMap.put(getEndpointKey(productKey,deviceName ), endpoint); + mqttConnectPool.put(clientId, true); + log.info("mqtt client reconnect success,clientId:{}",clientId); + } + + try { Map head = new HashMap<>(); @@ -187,6 +198,16 @@ public class NBVerticle extends AbstractVerticle { }); } + private String getDeviceName(String clientId) { + String[] s = clientId.split("_"); + return s[0]; + } + + private String getProductKey(String clientId) { + String[] s = clientId.split("_"); + return s[1]; + } + @Override public void stop() throws Exception { for (MqttEndpoint endpoint : endpointMap.values()) { From 79e868095ad7b6a1ebc0b614cd3f3637dabcae0d Mon Sep 17 00:00:00 2001 From: Remember to Smile * <928255825@qq.com> Date: Wed, 6 Sep 2023 03:14:43 +0000 Subject: [PATCH 19/33] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtd=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=88=9D=E5=A7=8B=E5=8C=96sql=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Remember to Smile * <928255825@qq.com> --- .../java/cc/iotkit/temporal/td/service/DbStructureDataImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iot-common/iot-common-dao/iot-temproal-serviceImpl-td/src/main/java/cc/iotkit/temporal/td/service/DbStructureDataImpl.java b/iot-common/iot-common-dao/iot-temproal-serviceImpl-td/src/main/java/cc/iotkit/temporal/td/service/DbStructureDataImpl.java index 18dbfbff..133a45bb 100644 --- a/iot-common/iot-common-dao/iot-temproal-serviceImpl-td/src/main/java/cc/iotkit/temporal/td/service/DbStructureDataImpl.java +++ b/iot-common/iot-common-dao/iot-temproal-serviceImpl-td/src/main/java/cc/iotkit/temporal/td/service/DbStructureDataImpl.java @@ -128,7 +128,7 @@ public class DbStructureDataImpl implements IDbStructureData { @Override @PostConstruct public void initDbStructure() { - tdRestApi.execSql("CREATE DATABASEIF NOT EXISTS iotkit KEEP 365 DURATION 10 BUFFER 16 WAL_LEVEL 1;"); + tdRestApi.execSql("CREATE DATABASE IF NOT EXISTS iotkit KEEP 365 DURATION 10 BUFFER 16 WAL_LEVEL 1;"); //创建规则日志超级表 String sql = TableManager.getCreateSTableSql("rule_log", List.of( From 90298599acfc34d29a85366a51d68d5f78dc270c Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Thu, 7 Sep 2023 18:48:47 +0800 Subject: [PATCH 20/33] =?UTF-8?q?fix:=20=E8=AE=BE=E5=A4=87=E8=A7=A6?= =?UTF-8?q?=E5=8F=91closehandler=E5=90=8E,=E4=BB=8D=E7=84=B6=E8=83=BD?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E6=B6=88=E6=81=AF,=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cc/iotkit/comp/nb/NBVerticle.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java index eafc3acf..c9671ed1 100644 --- a/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java +++ b/iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java @@ -108,15 +108,19 @@ public class NBVerticle extends AbstractVerticle { endpoint.accept(false); endpoint.closeHandler((v) -> { log.warn("client connection closed,clientId:{}", clientId); - if (Boolean.FALSE.equals(mqttConnectPool.get(clientId))) { + if (!mqttConnectPool.get(clientId)) { return; } executor.onReceive(new HashMap<>(), "disconnect", clientId, (r) -> { //删除设备与连接关系 endpointMap.remove(getEndpointKey(r)); + mqttConnectPool.put(clientId, false); }); }).disconnectMessageHandler(disconnectMessage -> { log.info("Received disconnect from client, reason code = {}", disconnectMessage.code()); + if (!mqttConnectPool.get(clientId)) { + return; + } executor.onReceive(new HashMap<>(), "disconnect", clientId, (r) -> { //删除设备与连接关系 endpointMap.remove(getEndpointKey(r)); @@ -159,7 +163,7 @@ public class NBVerticle extends AbstractVerticle { if (StringUtils.isBlank(payload)) { return; } - if(Boolean.FALSE.equals(mqttConnectPool.get(clientId))){ + if(! mqttConnectPool.get(clientId)){ executor.onReceive(null, "online", clientId); //保存设备与连接关系 String productKey = getProductKey(clientId); @@ -169,8 +173,6 @@ public class NBVerticle extends AbstractVerticle { log.info("mqtt client reconnect success,clientId:{}",clientId); } - - try { Map head = new HashMap<>(); String topic = message.topicName(); From a1c84249e59ce421cd3f152191809397f872a67d Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Thu, 7 Sep 2023 19:13:39 +0800 Subject: [PATCH 21/33] =?UTF-8?q?add:=20docker=E7=9B=B8=E5=85=B3=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 75 ++++++++++++++++++++++++++++++++++++++++++++++ docker.env | 19 ++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker.env diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..a354a5c1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,75 @@ +version: "3.4" + +services: + mysql: + container_name: iot-mysql + image: mysql:8 + restart: unless-stopped + tty: true + ports: + - "3306:3306" + environment: + MYSQL_DATABASE: ${MYSQL_DATABASE:-iotkit} + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456} + volumes: + - mysql:/var/lib/mysql/ + + + redis: + container_name: iot-redis + image: redis:6-alpine + restart: unless-stopped + ports: + - "6379:6379" + volumes: + - redis:/data + + server: + container_name: iot-server + build: + context: ./ + image: iot-server + restart: unless-stopped + ports: + - "8086:8086" + environment: + # https://github.com/polovyivan/docker-pass-configs-to-container + SPRING_PROFILES_ACTIVE: local + JAVA_OPTS: + ${JAVA_OPTS:- + -Xms512m + -Xmx512m + -Djava.security.egd=file:/dev/./urandom + } + ARGS: + --spring.datasource.dynamic.datasource.master.url=${MASTER_DATASOURCE_URL:-jdbc:mysql://iot-mysql:3306/iotkit?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true} + --spring.datasource.dynamic.datasource.master.username=${MASTER_DATASOURCE_USERNAME:-root} + --spring.datasource.dynamic.datasource.master.password=${MASTER_DATASOURCE_PASSWORD:-123456} + --spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://iot-mysql:3306/iotkit?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true} + --spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root} + --spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456} + --spring.redis.host=${REDIS_HOST:-iot-redis} + depends_on: + - redis + + admin: + container_name: iot-admin + build: + context: ./iot-ui-admin + args: + NODE_ENV: + ENV=${NODE_ENV:-production} + PUBLIC_PATH=${PUBLIC_PATH:-/} + VUE_APP_TITLE=${VUE_APP_TITLE:-openiita管理系统} + image: iot-admin + restart: unless-stopped + ports: + - "8080:80" + depends_on: + - server + +volumes: + mysql: + driver: local + redis: + driver: local diff --git a/docker.env b/docker.env new file mode 100644 index 00000000..71c3bdc1 --- /dev/null +++ b/docker.env @@ -0,0 +1,19 @@ +## mysql +MYSQL_DATABASE=iotkit +MYSQL_ROOT_PASSWORD=123456 + +## server +JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom + +MASTER_DATASOURCE_URL=jdbc:mysql://iot-mysql:3306/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +MASTER_DATASOURCE_USERNAME=root +MASTER_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD} +SLAVE_DATASOURCE_URL=${MASTER_DATASOURCE_URL} +SLAVE_DATASOURCE_USERNAME=${MASTER_DATASOURCE_USERNAME} +SLAVE_DATASOURCE_PASSWORD=${MASTER_DATASOURCE_PASSWORD} +REDIS_HOST=iot-redis + +## admin +NODE_ENV=production +PUBLIC_PATH=/ +VUE_APP_TITLE=iot管理系统 From 39d7152b9cbd28f24c3fe2cfc5b067dcea73bf58 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 11 Sep 2023 10:23:27 +0800 Subject: [PATCH 22/33] update logo --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c3baf077..4e17b723 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ +

-logo +logo

From de53e07304357455538419ac5272279e98deb7ab Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Thu, 7 Sep 2023 18:48:47 +0800 Subject: [PATCH 23/33] =?UTF-8?q?fix:=20=E9=80=80=E5=87=BA=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/iotkit/common/satoken/config/SaTokenConfig.java | 2 +- .../java/cc/iotkit/common/satoken/utils/LoginHelper.java | 8 +++++++- .../main/java/cc/iotkit/web/service/SysLoginService.java | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java b/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java index 06471950..c5d0733d 100644 --- a/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java +++ b/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java @@ -46,7 +46,7 @@ public class SaTokenConfig implements WebMvcConfigurer { List swaggerUrls = List.of("/doc.html","/favicon.ico", "/webjars/**", "/resources/**" , "/swagger-resources/**", "/swagger-ui.html/**"); - List loginUrls = List.of("/code", "/auth/tenant/list", "/auth/login"); + List loginUrls = List.of("/code", "/auth/tenant/list", "/auth/login", "/auth/logout"); List openApiUrls = List.of( "/openapi/v1/getToken"); List excludeUrls = new ArrayList<>(); diff --git a/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java b/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java index 07a7fa34..cb1ca8fe 100644 --- a/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java +++ b/iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java @@ -4,10 +4,12 @@ import cc.iotkit.common.constant.TenantConstants; import cc.iotkit.common.constant.UserConstants; import cc.iotkit.common.enums.DeviceType; import cc.iotkit.common.enums.UserType; +import cc.iotkit.common.exception.BizException; import cc.iotkit.common.undefined.LoginUser; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.context.model.SaStorage; import cn.dev33.satoken.exception.InvalidContextException; +import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.ObjectUtil; @@ -76,7 +78,11 @@ public class LoginHelper { if (loginUser != null) { return loginUser; } - loginUser = (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY); + SaSession tokenSession = StpUtil.getTokenSession(); + if(tokenSession == null){ + return null; + } + loginUser = (LoginUser) tokenSession.get(LOGIN_USER_KEY); SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser); return loginUser; } diff --git a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java index eddc4328..a0f86750 100644 --- a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java +++ b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java @@ -174,6 +174,9 @@ public class SysLoginService { public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); + if(loginUser==null){ + return; + } if (LoginHelper.isSuperAdmin()) { // 超级管理员 登出清除动态租户 TenantHelper.clearDynamic(); From c866098564fea01486501cb2e81164f216972d0d Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Mon, 18 Sep 2023 14:51:12 +0800 Subject: [PATCH 24/33] =?UTF-8?q?fix:=20=E6=96=B0=E5=A2=9E=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E6=97=B6productKey=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cc/iotkit/common/enums/ErrCode.java | 3 ++- .../cc/iotkit/manager/service/impl/ProductServiceImpl.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/iot-common/iot-common-core/src/main/java/cc/iotkit/common/enums/ErrCode.java b/iot-common/iot-common-core/src/main/java/cc/iotkit/common/enums/ErrCode.java index 930792e4..77b214d9 100644 --- a/iot-common/iot-common-core/src/main/java/cc/iotkit/common/enums/ErrCode.java +++ b/iot-common/iot-common-core/src/main/java/cc/iotkit/common/enums/ErrCode.java @@ -104,7 +104,8 @@ public enum ErrCode implements IEnum { RECORD_NOT_FOUND(00000000, "记录不存在"), ADD_PLATFORM_USER_ERROR(00000000, "添加平台用户失败"), UPLOAD_FILE_ERROR(00000000, "上传文件失败"), - FILE_NAME_IS_NULL(00000000, "文件名为空,获取文件名失败"); + FILE_NAME_IS_NULL(00000000, "文件名为空,获取文件名失败"), + PRODUCT_KEY_EXIST(00000000, "ProductKey已存在"); diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/ProductServiceImpl.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/ProductServiceImpl.java index fdb32411..b1cd2103 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/ProductServiceImpl.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/impl/ProductServiceImpl.java @@ -87,6 +87,11 @@ public class ProductServiceImpl implements IProductService { String secret = UUID.randomUUID().toString(true); product.setProductSecret(secret); + String productKey = data.getProductKey(); + Product oldProduct = productData.findByProductKey(productKey); + if(oldProduct != null){ + throw new BizException(ErrCode.PRODUCT_KEY_EXIST); + } productData.save(product); return MapstructUtils.convert(product, ProductVo.class); From 1229b668b9dc6049cf72438b3a47f7698622f7e8 Mon Sep 17 00:00:00 2001 From: jay <75509151@qq.com> Date: Fri, 22 Sep 2023 10:36:33 +0800 Subject: [PATCH 25/33] revert application.yml revert pom --- .../iot-data-serviceImpl-rdb/pom.xml | 18 +- .../src/main/resources/application.yml | 189 +++++++++++++++++- 2 files changed, 196 insertions(+), 11 deletions(-) diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml index 4ebf8c19..7f9e0162 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/pom.xml @@ -48,10 +48,10 @@ yitter-idgenerator
- - - - + + com.h2database + h2 + @@ -59,11 +59,11 @@ - - org.postgresql - postgresql - 42.2.9 - + + + + + commons-io diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index 0082d9db..c9ba15fd 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -7,9 +7,9 @@ spring: enabled: true max-file-size: 10MB max-request-size: 12MB - profiles: - active: postgres + #注: 切换数据库时需要将项目根目录中的.init文件删除再重启 + # <<=======内置H2数据库连接设置开始========== jpa: show-sql: true hibernate: @@ -17,7 +17,186 @@ spring: properties: hibernate: format_sql: true + sql: + init: + schema-locations: classpath:sql/schema.sql + mode: ALWAYS + datasource: + url: jdbc:h2:./data/iotkit;MODE=MySQL + username: sa + password: 123456 + driverClassName: org.h2.Driver + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + hikari: + connection-timeout: 5000 + idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 + min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 + max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 + max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 + is-auto-commit: true + primary: master #设置默认的数据源或者数据源组,默认值即为master + strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: org.h2.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:h2:./data/iotkit;MODE=MySQL + username: sa + password: 123456 + # 从库数据源 + slave: + lazy: true + type: ${spring.datasource.type} + driverClassName: org.h2.Driver + url: jdbc:h2:./data/iotkit;MODE=MySQL + username: sa + password: 123456 + # 内置h2 web console设置 + platform: h2 + h2: + console: + enabled: true + path: /h2 + settings: + web-allow-others: true + #=======内置H2数据库连接设置结束==========>> + + # <<==========mysql配置开始============== + # jpa: + # database: MySQL + # database-platform: org.hibernate.dialect.MySQL5InnoDBDialect + # show-sql: true + # hibernate: + # ddl-auto: update + # properties: + # hibernate: + # format_sql: true + # datasource: + # type: com.zaxxer.hikari.HikariDataSource + # dynamic: + # hikari: + # connection-timeout: 5000 + # idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 + # min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 + # max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 + # max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 + # is-auto-commit: true + # primary: master #设置默认的数据源或者数据源组,默认值即为master + # strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 + # datasource: + # # 主库数据源 + # master: + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # url: jdbc:mysql://192.168.31.136:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false + # username: root + # password: 123456 + # ============mysql配置结束============>> + + #<<================es时序数据配置开始=============== + elasticsearch: + rest: + #使用内置es的配置 + #uris: http://elasticsearch:9200 + uris: http://127.0.0.1:9200 + username: + password: + connection-timeout: 10s + #================es时序数据配置结束===============>> + + #<<===========tdengine时序数据库配置开始============ + # td-datasource: + # url: jdbc:TAOS-RS://127.0.0.1:6041/iotkit?timezone=UTC-8&charset=UTF-8&locale=en_US.UTF-8 + # username: root + # password: taosdata + # driverClassName: com.taosdata.jdbc.rs.RestfulDriver + #===========tdengine时序数据库配置开始============>> + + redis: + #使用内置redis的配置 + #host: redis + host: 127.0.0.1 + port: 6379 + database: 0 + + mvc: + pathmatch: + matching-strategy: ant_path_matcher +# profiles: +# active: mysql + +#application.yml中打开注释支持rocketMq作为消息总线,pom.xml中打开注释使用rocketmq消息总线 +#rocketmq: +# name-server: 172.16.1.113:9876 +# producer: +# group: iotkit + +#图片存储用的是阿里云oss,如果需要上传产品图片才需要配置 +aliyun: + bucketId: + endpoint: + accessKeyId: + accessKeySecret: + +sa-token: + # token名称 (同时也是cookie名称) + token-name: token + # token有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: uuid + # 是否输出操作日志 + is-log: false + +captcha: + enable: true + # 页面 <参数设置> 可开启关闭 验证码校验 + # 验证码类型 math 数组计算 char 字符验证 + type: MATH + # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰 + category: CIRCLE + # 数字验证码位数 + numberLength: 1 + # 字符验证码长度 + charLength: 4 + +# 用户配置 +user: + password: + # 密码最大错误次数 + maxRetryCount: 5 + # 密码锁定时间(默认10分钟) + lockTime: 10 + +# openapi配置 +openapi: + appid: 123456789 + password: 123456 + +oss: + region: xxxxx + endpoint: xxxxx + accessKey: xxxxx + secretKey: xxxxx + buckName: xxxx +baetyl: + api-type: feign + service-url: http://116.168.30.140:30004 + +# MyBatisPlus配置 # https://baomidou.com/config/ mybatis-plus: # 不支持多包, 如有需要可在注解配置 或 提升扫包等级 @@ -33,3 +212,9 @@ mybatis-plus: # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID # 如需改为自增 需要将数据库表全部设置为自增 idType: ASSIGN_ID + +#微信小程序配置 +weixin: + appid: xx + secret: xx + authUrl: xx \ No newline at end of file From 03525e444fab9a73445cf56eaf6fcaf1cf894332 Mon Sep 17 00:00:00 2001 From: xiwa Date: Fri, 20 Oct 2023 23:02:55 +0800 Subject: [PATCH 26/33] =?UTF-8?q?fix:=E5=88=A0=E9=99=A4iot=5Fadmin?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/iotkit/manager/controller/ProductController.java | 2 -- .../java/cc/iotkit/manager/controller/UserInfoController.java | 3 --- 2 files changed, 5 deletions(-) diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java index 4fe91811..f2b2b293 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/ProductController.java @@ -124,7 +124,6 @@ public class ProductController { } @ApiOperation("品类编辑") - @SaCheckRole("iot_admin") @SaCheckPermission("iot:category:edit") @PostMapping("/category/edit") public boolean saveCategory(@Validated @RequestBody Request req) { @@ -133,7 +132,6 @@ public class ProductController { } @ApiOperation("删除品类") - @SaCheckRole("iot_admin") @SaCheckPermission("iot:category:remove") @PostMapping("/category/delete") public boolean delCategory(@Validated @RequestBody Request req) { diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/UserInfoController.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/UserInfoController.java index dd906438..5a40ce01 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/UserInfoController.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/controller/UserInfoController.java @@ -47,7 +47,6 @@ public class UserInfoController { /** * 平台用户列表 */ - @SaCheckRole("iot_admin") @PostMapping("/platform/users") public List getPlatformUsers() { return userInfoData.findByType(UserInfo.USER_TYPE_PLATFORM); @@ -56,7 +55,6 @@ public class UserInfoController { /** * 添加平台用户 */ - @SaCheckRole("iot_admin") @PostMapping("/platform/user/add") public void addPlatformUser(@RequestBody UserInfo user) { try { @@ -76,7 +74,6 @@ public class UserInfoController { /** * 重置平台用户密码 */ - @SaCheckRole("iot_admin") @PostMapping("/platform/user/{uid}/resetPwd") public void resetPlatformUserPwd(@PathVariable("uid") String uid) { try { From 7684f1e9ee90edb52ca4ec67456e30fbc83987ed Mon Sep 17 00:00:00 2001 From: xiwa Date: Fri, 20 Oct 2023 15:07:04 +0000 Subject: [PATCH 27/33] update README.md. Signed-off-by: xiwa --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e17b723..70eadda7 100755 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ Vertx event-bus(内置)、RocketMQ,通过扩展模块可接入其它任意 2、将iot-data-serviceImpl-rdb/pom.xml中的mysql驱动注释放开 -3、application.yml 注释掉内置H2数据库,打开mysql配置注释 +3、application.yml 注释掉内置H2数据库,打开mysql配置注释(先建好库) ##### es切换为TDengine(版本:3.x)方法 1、删掉.init和关系数据库数据 From 0a90c90498bfbc3a98cf1534cb397dc166dc91d6 Mon Sep 17 00:00:00 2001 From: xiwa Date: Fri, 20 Oct 2023 23:10:34 +0800 Subject: [PATCH 28/33] =?UTF-8?q?fix:mysql=E9=85=8D=E7=BD=AE=E7=BC=A9?= =?UTF-8?q?=E8=BF=9B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/iot-starter/src/main/resources/application.yml b/iot-starter/src/main/resources/application.yml index c9ba15fd..dbd44c3e 100644 --- a/iot-starter/src/main/resources/application.yml +++ b/iot-starter/src/main/resources/application.yml @@ -68,36 +68,36 @@ spring: #=======内置H2数据库连接设置结束==========>> # <<==========mysql配置开始============== - # jpa: - # database: MySQL - # database-platform: org.hibernate.dialect.MySQL5InnoDBDialect - # show-sql: true - # hibernate: - # ddl-auto: update - # properties: - # hibernate: - # format_sql: true - # datasource: - # type: com.zaxxer.hikari.HikariDataSource - # dynamic: - # hikari: - # connection-timeout: 5000 - # idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 - # min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 - # max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 - # max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 - # is-auto-commit: true - # primary: master #设置默认的数据源或者数据源组,默认值即为master - # strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 - # datasource: - # # 主库数据源 - # master: - # type: ${spring.datasource.type} - # driverClassName: com.mysql.cj.jdbc.Driver - # # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 - # url: jdbc:mysql://192.168.31.136:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false - # username: root - # password: 123456 +# jpa: +# database: MySQL +# database-platform: org.hibernate.dialect.MySQL5InnoDBDialect +# show-sql: true +# hibernate: +# ddl-auto: update +# properties: +# hibernate: +# format_sql: true +# datasource: +# type: com.zaxxer.hikari.HikariDataSource +# dynamic: +# hikari: +# connection-timeout: 5000 +# idle-timeout: 30000 # 经过idle-timeout时间如果连接还处于空闲状态, 该连接会被回收 +# min-idle: 5 # 池中维护的最小空闲连接数, 默认为 10 个 +# max-pool-size: 16 # 池中最大连接数, 包括闲置和使用中的连接, 默认为 10 个 +# max-lifetime: 60000 # 如果一个连接超过了时长,且没有被使用, 连接会被回收 +# is-auto-commit: true +# primary: master #设置默认的数据源或者数据源组,默认值即为master +# strict: true #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 +# datasource: +# # 主库数据源 +# master: +# type: ${spring.datasource.type} +# driverClassName: com.mysql.cj.jdbc.Driver +# # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 +# url: jdbc:mysql://127.0.0.1:3306/iotkit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false +# username: root +# password: 123456 # ============mysql配置结束============>> #<<================es时序数据配置开始=============== From 7217438afbb87067d015cc57f985e8c43d68ecaf Mon Sep 17 00:00:00 2001 From: xiwa Date: Fri, 3 Nov 2023 23:10:03 +0800 Subject: [PATCH 29/33] fix:bug#I8DLHU --- .../java/cc/iotkit/data/dao/IJPACommData.java | 30 ++++++++++--------- .../iotkit/data/service/SysUserDataImpl.java | 10 +++---- .../cc/iotkit/config/EmbeddedRedisConfig.java | 11 ++++++- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IJPACommData.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IJPACommData.java index 49e70876..d0416207 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IJPACommData.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/dao/IJPACommData.java @@ -7,6 +7,7 @@ import cc.iotkit.data.ICommonData; import cc.iotkit.data.util.PageBuilder; import cc.iotkit.model.Id; import org.springframework.data.domain.Example; +import org.springframework.data.domain.ExampleMatcher; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; @@ -21,7 +22,7 @@ import java.util.Optional; * @Version: V1.0 * @Description: 基础数据操作接口 */ -public interface IJPACommData< T extends Id, ID> extends ICommonData { +public interface IJPACommData, ID> extends ICommonData { JpaRepository getBaseRepository(); @@ -73,15 +74,15 @@ public interface IJPACommData< T extends Id, ID> extends ICommonData findAll(PageRequest pageRequest) { + default Paging findAll(PageRequest pageRequest) { Example example = genExample(pageRequest.getData()); Page all = null; - if(Objects.isNull(example)){ + if (Objects.isNull(example)) { all = getBaseRepository().findAll(PageBuilder.toPageable(pageRequest)); - }else{ - all =getBaseRepository().findAll(example, PageBuilder.toPageable(pageRequest)); + } else { + all = getBaseRepository().findAll(example, PageBuilder.toPageable(pageRequest)); } - return PageBuilder.toPaging(all, getTClass()); + return PageBuilder.toPaging(all, getTClass()); } /** @@ -91,11 +92,11 @@ public interface IJPACommData< T extends Id, ID> extends ICommonData findAllByCondition(T data) { Example example = genExample(data); List all = null; - if(Objects.isNull(example)){ - all = getBaseRepository().findAll(); + if (Objects.isNull(example)) { + all = getBaseRepository().findAll(); - }else{ - all = getBaseRepository().findAll(example); + } else { + all = getBaseRepository().findAll(example); } return MapstructUtils.convert(all, getTClass()); @@ -109,7 +110,7 @@ public interface IJPACommData< T extends Id, ID> extends ICommonData, ID> extends ICommonData tbSysUser.status.eq(data.getStatus())) .and(Objects.nonNull(data.getDeptId()), () -> tbSysUser.deptId.eq(data.getDeptId())) .and(tbSysUser.delFlag.eq(UserConstants.ROLE_NORMAL)) - .and(Objects.nonNull(data.getRoleId()),()-> tbSysRole.id.eq(data.getRoleId())); + .and(Objects.nonNull(data.getRoleId()), () -> tbSysRole.id.eq(data.getRoleId())); QueryResults tbSysUserQueryResults = jpaQueryFactory.select(Projections.bean(TbSysUser.class, tbSysUser.id, tbSysUser.deptId, tbSysUser.userName, tbSysUser.nickName, tbSysUser.email, tbSysUser.phonenumber, tbSysUser.createTime)).from(tbSysUser) @@ -244,7 +244,7 @@ public class SysUserDataImpl implements ISysUserData, IJPACommData selectUnallocatedList(PageRequest to) { SysUser data = to.getData(); PredicateBuilder builder = PredicateBuilder.instance(); - if(Objects.nonNull(data)){ + if (Objects.nonNull(data)) { builder.and(StringUtils.isNotBlank(data.getPhonenumber()), () -> tbSysUser.phonenumber.like(data.getPhonenumber())) .and(StringUtils.isNotBlank(data.getUserName()), () -> tbSysUser.userName.like(data.getUserName())) .and(StringUtils.isNotBlank(data.getStatus()), () -> tbSysUser.status.eq(data.getStatus())) @@ -303,9 +303,9 @@ public class SysUserDataImpl implements ISysUserData, IJPACommData tbSysUser.id.eq(user.getId())) - .and(StringUtils.isNotEmpty(user.getUserName()), () -> tbSysUser.userName.like(user.getUserName())) + .and(StringUtils.isNotEmpty(user.getUserName()), () -> tbSysUser.userName.like("%" + user.getUserName() + "%")) .and(StringUtils.isNotEmpty(user.getStatus()), () -> tbSysUser.status.eq(user.getStatus())) - .and(StringUtils.isNotEmpty(user.getPhonenumber()), () -> tbSysUser.phonenumber.like(user.getPhonenumber())) + .and(StringUtils.isNotEmpty(user.getPhonenumber()), () -> tbSysUser.phonenumber.like("%" + user.getPhonenumber() + "%")) .and(ObjectUtil.isNotEmpty(ids), () -> tbSysUser.deptId.in(ids)).build(); } } diff --git a/iot-starter/src/main/java/cc/iotkit/config/EmbeddedRedisConfig.java b/iot-starter/src/main/java/cc/iotkit/config/EmbeddedRedisConfig.java index de0ed01d..b6cf4f17 100644 --- a/iot-starter/src/main/java/cc/iotkit/config/EmbeddedRedisConfig.java +++ b/iot-starter/src/main/java/cc/iotkit/config/EmbeddedRedisConfig.java @@ -9,8 +9,10 @@ */ package cc.iotkit.config; +import lombok.extern.slf4j.Slf4j; import redis.embedded.RedisServer; +@Slf4j public class EmbeddedRedisConfig { public static boolean embeddedEnable() { @@ -28,7 +30,14 @@ public class EmbeddedRedisConfig { } else { redisServer = new RedisServer(); } - redisServer.start(); + try { + redisServer.start(); + } catch (Exception e) { + if (e.getMessage().contains("Address already in use")) { + throw new RuntimeException("redis端口被占用,请先停止本地的redis服务"); + } + log.error("start redis server failed", e); + } } } From ce6988f9e38a164af8c8dc9006e4addc87d0823e Mon Sep 17 00:00:00 2001 From: xiwa Date: Wed, 8 Nov 2023 00:17:36 +0800 Subject: [PATCH 30/33] =?UTF-8?q?fix:debug=20toString=E5=BE=AA=E7=8E=AF?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cc/iotkit/comps/DeviceMessageHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/iot-components/iot-component-server/src/main/java/cc/iotkit/comps/DeviceMessageHandler.java b/iot-components/iot-component-server/src/main/java/cc/iotkit/comps/DeviceMessageHandler.java index 3a1d9b2a..d988f1a6 100755 --- a/iot-components/iot-component-server/src/main/java/cc/iotkit/comps/DeviceMessageHandler.java +++ b/iot-components/iot-component-server/src/main/java/cc/iotkit/comps/DeviceMessageHandler.java @@ -24,6 +24,8 @@ import cc.iotkit.model.device.message.ThingModelMessage; import cc.iotkit.script.IScriptEngine; import com.fasterxml.jackson.core.type.TypeReference; import lombok.Data; +import lombok.Getter; +import lombok.Setter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -35,7 +37,8 @@ import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @Slf4j -@Data +@Getter +@Setter public class DeviceMessageHandler implements IMessageHandler { From 24d4b2862838ec22d6603c13e3bdaa08395472be Mon Sep 17 00:00:00 2001 From: tangfudong <280620913@qq.com> Date: Wed, 20 Dec 2023 11:29:33 +0800 Subject: [PATCH 31/33] =?UTF-8?q?update=EF=BC=9A=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E4=B8=AD=E6=B7=BB=E5=8A=A0=E7=B3=BB=E7=BB=9Fapp?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/init/sys_app.json | 9 +++++++++ .../src/main/java/cc/iotkit/data/model/TbSysApp.java | 2 +- .../java/cc/iotkit/manager/service/ExampleDataInit.java | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 data/init/sys_app.json diff --git a/data/init/sys_app.json b/data/init/sys_app.json new file mode 100644 index 00000000..35ac726d --- /dev/null +++ b/data/init/sys_app.json @@ -0,0 +1,9 @@ + [ + { + "id": 1, + "appId": "wx5eebdd2bab2d805c", + "appSecret": "a92c69537573141d06a59a5c814dd02c", + "appType": "1", + "remark": "智能家居小程序" + } + ] diff --git a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysApp.java b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysApp.java index e7cc8503..98d51635 100644 --- a/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysApp.java +++ b/iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysApp.java @@ -66,7 +66,7 @@ public class TbSysApp extends TenantModel implements TenantAware { * 备注 */ @ApiModelProperty(value = "备注") - private String REMARK; + private String remark; } diff --git a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java index 4e45493f..4204a938 100644 --- a/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java +++ b/iot-module/iot-manager/src/main/java/cc/iotkit/manager/service/ExampleDataInit.java @@ -39,7 +39,6 @@ import cc.iotkit.temporal.IDbStructureData; import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; -import org.hibernate.exception.DataException; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -160,6 +159,9 @@ public class ExampleDataInit implements SmartInitializingSingleton { @Autowired private ISysUserRoleData sysUserRoleData; + @Autowired + private ISysAppData sysAppData; + @Override public void afterSingletonsInstantiated() { //等redis实例化后再执行 @@ -291,6 +293,9 @@ public class ExampleDataInit implements SmartInitializingSingleton { initData("sys_user_role", sysUserRoleData, new TypeReference>() { }); + + initData("sys_app", sysAppData, new TypeReference>() { + }); } private T initData(String name, ICommonData service, TypeReference type) { From 8bd516de55e28fa6623e8f7362b61ed54e12a164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=81=93=E7=94=AB?= Date: Wed, 27 Dec 2023 17:59:00 +0800 Subject: [PATCH 32/33] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E8=AE=BE=E5=A4=87=E4=B8=8B=E8=A1=8C=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=8A=A5=E9=94=99=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E8=AE=BE=E5=A4=87=E4=B8=8B=E8=A1=8C=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/iotkit/plugin/main/PluginMainImpl.java | 15 +++++++++------ .../ruleengine/handler/RuleDeviceConsumer.java | 4 ++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/PluginMainImpl.java b/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/PluginMainImpl.java index 014aeb03..22db6d7e 100644 --- a/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/PluginMainImpl.java +++ b/iot-module/iot-plugin/iot-plugin-main/src/main/java/cc/iotkit/plugin/main/PluginMainImpl.java @@ -104,17 +104,16 @@ public class PluginMainImpl implements IPluginMain, DeviceService { throw new BizException(ErrCode.PLUGIN_SERVICE_NOT_FOUND); } - if (!(service.getParams() instanceof Map)) { - throw new BizException(ErrCode.PARAMS_EXCEPTION); - } - Map params = (Map) service.getParams(); - IDevice deviceService = deviceServices.get(0); String type = service.getType(); String identifier = service.getIdentifier(); ActionResult result = null; if (ThingService.TYPE_SERVICE.equals(type)) { + if (!(service.getParams() instanceof Map)) { + throw new BizException(ErrCode.PARAMS_EXCEPTION); + } + Map params = (Map) service.getParams(); //服务调用 ServiceInvoke action = ServiceInvoke.builder() .id(service.getMid()) @@ -128,6 +127,10 @@ public class PluginMainImpl implements IPluginMain, DeviceService { publish(service, result.getCode()); } else if (ThingService.TYPE_PROPERTY.equals(type)) { if ("set".equals(identifier)) { + if (!(service.getParams() instanceof Map)) { + throw new BizException(ErrCode.PARAMS_EXCEPTION); + } + Map params = (Map) service.getParams(); //属性设置 PropertySet action = PropertySet.builder() .id(service.getMid()) @@ -144,7 +147,7 @@ public class PluginMainImpl implements IPluginMain, DeviceService { .id(service.getMid()) .productKey(linkPk) .deviceName(linkDn) - .keys(new ArrayList<>(params.keySet())) + .keys((List) service.getParams()) .build(); //调用插件设备服务接口 result = deviceService.propertyGet(action); diff --git a/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/RuleDeviceConsumer.java b/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/RuleDeviceConsumer.java index 67cd4e80..1b3539eb 100644 --- a/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/RuleDeviceConsumer.java +++ b/iot-module/iot-rule-engine/src/main/java/cc/iotkit/ruleengine/handler/RuleDeviceConsumer.java @@ -23,6 +23,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ScheduledThreadPoolExecutor; @@ -53,6 +54,9 @@ public class RuleDeviceConsumer implements ConsumerHandler, A for (DeviceMessageHandler handler : this.handlers) { messageHandlerPool.submit(() -> { try { + if (!(msg.getData() instanceof Map)) { + msg.setData(new HashMap<>()); + } handler.handle(msg); } catch (Throwable e) { log.error("handler message error", e); From eb434732cf341bab2ba0acf957d3adf5ba8ea6e7 Mon Sep 17 00:00:00 2001 From: tangfudong <280620913@qq.com> Date: Thu, 4 Jan 2024 17:35:19 +0800 Subject: [PATCH 33/33] =?UTF-8?q?fix=EF=BC=9A=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E7=9A=84=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iotkit/web/controller/AuthController.java | 17 +++++++++++++++++ .../cc/iotkit/web/service/SysLoginService.java | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/iot-starter/src/main/java/cc/iotkit/web/controller/AuthController.java b/iot-starter/src/main/java/cc/iotkit/web/controller/AuthController.java index 54ed8b9e..260f7d72 100644 --- a/iot-starter/src/main/java/cc/iotkit/web/controller/AuthController.java +++ b/iot-starter/src/main/java/cc/iotkit/web/controller/AuthController.java @@ -19,6 +19,7 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; @@ -69,6 +70,22 @@ public class AuthController { return loginVo; } + /** + * 小程序登录(示例) + * + * @param xcxCode 小程序code + * @return 结果 + */ + @ApiOperation("小程序登录") + @PostMapping("/xcxLogin") + public LoginVo xcxLogin(@NotBlank(message = "{xcx.appId.not.blank}") String appId,@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) { + LoginVo loginVo = new LoginVo(); + // 生成令牌 + String token = loginService.xcxLogin(appId,xcxCode); + loginVo.setToken(token); + return loginVo; + } + /** * 退出登录 diff --git a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java index 8fad215f..9e8b1a69 100644 --- a/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java +++ b/iot-starter/src/main/java/cc/iotkit/web/service/SysLoginService.java @@ -172,7 +172,7 @@ public class SysLoginService { // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.XCX); -// recordLoginInfo(loginUser.getTenantId(), user.getNickName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(loginUser.getTenantId(), user.getNickName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); // recordLoginInfo(user.getId()); return StpUtil.getTokenValue(); }