Compare commits
1 Commits
fix#search
...
fix#cache
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c4d3d80b0 |
@@ -121,17 +121,15 @@ public class CommonCache {
|
|||||||
timeoutMap.put(key, new Long[]{currentTime, DEFAULT_CACHE_TIMEOUT});
|
timeoutMap.put(key, new Long[]{currentTime, DEFAULT_CACHE_TIMEOUT});
|
||||||
} else if (cacheTime[0] + cacheTime[1] < currentTime) {
|
} else if (cacheTime[0] + cacheTime[1] < currentTime) {
|
||||||
// 过期了 discard 关闭这个cache的资源
|
// 过期了 discard 关闭这个cache的资源
|
||||||
log.warn("[cache] clean the timeout cache, key {}", key);
|
|
||||||
timeoutMap.remove(key);
|
timeoutMap.remove(key);
|
||||||
cacheMap.remove(key);
|
cacheMap.remove(key);
|
||||||
if (value instanceof CacheCloseable) {
|
if (value instanceof CacheCloseable) {
|
||||||
log.warn("[cache] close the timeout cache, key {}", key);
|
|
||||||
((CacheCloseable)value).close();
|
((CacheCloseable)value).close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("[cache] clean timeout cache error: {}.", e.getMessage(), e);
|
log.error("clean timeout cache error: {}.", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,14 +177,13 @@ public class CommonCache {
|
|||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
if (cacheTime[0] + cacheTime[1] < System.currentTimeMillis()) {
|
if (cacheTime[0] + cacheTime[1] < System.currentTimeMillis()) {
|
||||||
log.warn("[cache] is timeout, remove it, key {}.", key);
|
log.warn("[cache] is timeout, key {}.", key);
|
||||||
timeoutMap.remove(key);
|
timeoutMap.remove(key);
|
||||||
cacheMap.remove(key);
|
cacheMap.remove(key);
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
Object value = cacheMap.get(key);
|
Object value = cacheMap.get(key);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
log.error("[cache] value is null, remove it, key {}.", key);
|
|
||||||
cacheMap.remove(key);
|
cacheMap.remove(key);
|
||||||
timeoutMap.remove(key);
|
timeoutMap.remove(key);
|
||||||
} else if (refreshCache) {
|
} else if (refreshCache) {
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
## docker-compose部署方案
|
|
||||||
|
|
||||||
- 如果您不想部署而是直接使用,我们提供SAAS监控云-[TanCloud探云](https://console.tancloud.cn),即刻 **[登录注册](https://console.tancloud.cn)** 免费使用。
|
|
||||||
- 如果你想自己本地快速部署的话,可以参考下面进行操作。
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
##### 安装Docker&Docker-compose
|
|
||||||
|
|
||||||
1. docker &docker-compos 安装自行百度,如果这也不会,那这个部署方式可能不适合您。
|
|
||||||
|
|
||||||
##### 下载并解压部署包-hertzbeat-for-dockercompose
|
|
||||||
|
|
||||||
1.进入 hertzbeat-for-dockercompose目录
|
|
||||||
|
|
||||||
`docker-compose up -d`
|
|
||||||
|
|
||||||
2.创建tdengine数据库
|
|
||||||
|
|
||||||
`$ docker exec -it tdengine /bin/bash
|
|
||||||
root@tdengine-server:~/TDengine-server-2.4.0.4#`
|
|
||||||
|
|
||||||
创建名称为hertzbeat的数据库 进入容器后,执行 taos shell 客户端程序。
|
|
||||||
|
|
||||||
`root@tdengine-server:~/TDengine-server-2.4.0.4# taos
|
|
||||||
Welcome to the TDengine shell from Linux, Client Version:2.4.0.4
|
|
||||||
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.
|
|
||||||
taos>`
|
|
||||||
|
|
||||||
执行创建数据库命令
|
|
||||||
|
|
||||||
`taos> show databases;`
|
|
||||||
|
|
||||||
`taos> CREATE DATABASE hertzbeat KEEP 90 DAYS 10 BLOCKS 6 UPDATE 1;`
|
|
||||||
|
|
||||||
##### 重启应用
|
|
||||||
|
|
||||||
`docker-compose restart hertzbeat`
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
怎么样是不是很简单,只要几分钟就可以部署完成,赶紧试试吧!
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
server:
|
|
||||||
port: 1157
|
|
||||||
spring:
|
|
||||||
application:
|
|
||||||
name: ${HOSTNAME:@hertzbeat@}${PID}
|
|
||||||
profiles:
|
|
||||||
active: prod
|
|
||||||
mvc:
|
|
||||||
static-path-pattern: /console/**
|
|
||||||
resources:
|
|
||||||
static-locations:
|
|
||||||
- classpath:/dist/
|
|
||||||
- classpath:../dist/
|
|
||||||
jackson:
|
|
||||||
default-property-inclusion: NON_EMPTY
|
|
||||||
|
|
||||||
sureness:
|
|
||||||
auths:
|
|
||||||
- digest
|
|
||||||
- basic
|
|
||||||
- jwt
|
|
||||||
|
|
||||||
---
|
|
||||||
spring:
|
|
||||||
config:
|
|
||||||
activate:
|
|
||||||
on-profile: prod
|
|
||||||
datasource:
|
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
||||||
username: root
|
|
||||||
password: 1234
|
|
||||||
url: jdbc:mysql://mysql:3306/hertzbeat?useUnicode=true&characterEncoding=utf-8&useSSL=false
|
|
||||||
platform: mysql
|
|
||||||
hikari:
|
|
||||||
max-lifetime: 120000
|
|
||||||
jpa:
|
|
||||||
database: mysql
|
|
||||||
|
|
||||||
mail:
|
|
||||||
# 请注意邮件服务器地址:qq邮箱为 smtp.qq.com qq企业邮箱为 smtp.exmail.qq.com
|
|
||||||
host: smtp.qq.com
|
|
||||||
username: 936751812@qq.com
|
|
||||||
# 请注意此非邮箱账户密码 此需填写邮箱授权码
|
|
||||||
password: xxqzvuqbnqvbbdac
|
|
||||||
port: 465
|
|
||||||
default-encoding: UTF-8
|
|
||||||
properties:
|
|
||||||
mail:
|
|
||||||
smtp:
|
|
||||||
socketFactoryClass: javax.net.ssl.SSLSocketFactory
|
|
||||||
ssl:
|
|
||||||
enable: true
|
|
||||||
|
|
||||||
thymeleaf:
|
|
||||||
prefix: classpath:/templates/
|
|
||||||
check-template-location: true
|
|
||||||
cache: true
|
|
||||||
suffix: .html
|
|
||||||
#encoding: UTF-8
|
|
||||||
#content-type: text/html
|
|
||||||
mode: LEGACYHTML5
|
|
||||||
|
|
||||||
warehouse:
|
|
||||||
store:
|
|
||||||
td-engine:
|
|
||||||
enabled: true
|
|
||||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
|
||||||
url: jdbc:TAOS-RS://tdengine:6041/hertzbeat
|
|
||||||
username: root
|
|
||||||
password: taosdata
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
set names utf8mb4;
|
|
||||||
drop database if exists hertzbeat;
|
|
||||||
create database hertzbeat;
|
|
||||||
use hertzbeat;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for monitor
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS monitor ;
|
|
||||||
CREATE TABLE monitor
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '监控ID',
|
|
||||||
job_id bigint not null comment '监控对应下发的任务ID',
|
|
||||||
name varchar(100) not null comment '监控的名称',
|
|
||||||
app varchar(100) not null comment '监控的类型:linux,mysql,jvm...',
|
|
||||||
host varchar(100) not null comment '监控的对端host:ipv4,ipv6,域名',
|
|
||||||
intervals int not null default 600 comment '监控的采集间隔时间,单位秒',
|
|
||||||
status tinyint not null default 1 comment '监控状态 0:未监控,1:可用,2:不可用,3:不可达',
|
|
||||||
description varchar(255) comment '描述备注信息',
|
|
||||||
creator varchar(100) comment '创建者',
|
|
||||||
modifier varchar(100) comment '最新修改者',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id),
|
|
||||||
index query_index (app, host, name)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for param
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS param ;
|
|
||||||
CREATE TABLE param
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '参数ID',
|
|
||||||
monitor_id bigint not null comment '监控ID',
|
|
||||||
field varchar(100) not null comment '参数标识符',
|
|
||||||
value varchar(255) comment '参数值,最大字符长度255',
|
|
||||||
type tinyint not null default 0 comment '参数类型 0:数字 1:字符串 2:加密串',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id),
|
|
||||||
index monitor_id (monitor_id),
|
|
||||||
unique key unique_param (monitor_id, field)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for param
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS param_define ;
|
|
||||||
CREATE TABLE param_define
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '参数ID',
|
|
||||||
app varchar(100) not null comment '监控的类型:linux,mysql,jvm...',
|
|
||||||
name varchar(100) not null comment '参数字段对外显示名称',
|
|
||||||
field varchar(100) not null comment '参数字段标识符',
|
|
||||||
type varchar(20) not null default 'text' comment '字段类型,样式(大部分映射input标签type属性)',
|
|
||||||
required boolean not null default false comment '是否是必输项 true-必填 false-可选',
|
|
||||||
param_range varchar(100) not null comment '当type为number时,用range表示范围 eg: 0-233',
|
|
||||||
param_limit tinyint unsigned not null comment '当type为text时,用limit表示字符串限制大小.最大255',
|
|
||||||
param_option varchar(255) not null comment '当type为radio单选框,checkbox复选框时,option表示可选项值列表',
|
|
||||||
creator varchar(100) comment '创建者',
|
|
||||||
modifier varchar(100) comment '最新修改者',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id),
|
|
||||||
unique key unique_param_define (app, field)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for alert_define
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS alert_define ;
|
|
||||||
CREATE TABLE alert_define
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '告警定义ID',
|
|
||||||
app varchar(100) not null comment '配置告警的监控类型:linux,mysql,jvm...',
|
|
||||||
metric varchar(100) not null comment '配置告警的指标集合:cpu,memory,info...',
|
|
||||||
field varchar(100) not null comment '配置告警的指标:usage,cores...',
|
|
||||||
preset boolean not null default false comment '是否是全局默认告警,是则所有此类型监控默认关联此告警',
|
|
||||||
expr varchar(255) not null comment '告警触发条件表达式',
|
|
||||||
priority tinyint not null default 0 comment '告警级别 0:高-emergency-紧急告警-红色 1:中-critical-严重告警-橙色 2:低-warning-警告告警-黄色',
|
|
||||||
times int not null default 1 comment '触发次数,即达到触发阈值次数要求后才算触发告警',
|
|
||||||
enable boolean not null default true comment '告警阈值开关',
|
|
||||||
template varchar(255) not null comment '告警通知模板内容',
|
|
||||||
creator varchar(100) comment '创建者',
|
|
||||||
modifier varchar(100) comment '最新修改者',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for alert_define_monitor_bind
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS alert_define_monitor_bind ;
|
|
||||||
CREATE TABLE alert_define_monitor_bind
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '告警定义与监控关联ID',
|
|
||||||
alert_define_id bigint not null comment '告警定义ID',
|
|
||||||
monitor_id bigint not null comment '监控ID',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id),
|
|
||||||
index index_bind (alert_define_id, monitor_id)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for alert
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS alert ;
|
|
||||||
CREATE TABLE alert
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '告警ID',
|
|
||||||
target varchar(255) not null comment '告警目标对象: 监控可用性-available 指标-app.metrics.field',
|
|
||||||
monitor_id bigint not null comment '告警对象关联的监控ID',
|
|
||||||
monitor_name varchar(100) comment '告警对象关联的监控名称',
|
|
||||||
alert_define_id bigint comment '告警关联的告警定义ID',
|
|
||||||
priority tinyint not null default 0 comment '告警级别 0:高-emergency-紧急告警-红色 1:中-critical-严重告警-橙色 2:低-warning-警告告警-黄色',
|
|
||||||
content varchar(255) not null comment '告警通知实际内容',
|
|
||||||
status tinyint not null default 0 comment '告警状态: 0-正常告警(待处理) 1-阈值触发但未达到告警次数 2-恢复告警 3-已处理',
|
|
||||||
times int not null comment '触发次数,即达到告警定义的触发阈值次数要求后才会发告警',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
primary key (id)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for notice_rule
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS notice_rule ;
|
|
||||||
CREATE TABLE notice_rule
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '通知策略主键索引ID',
|
|
||||||
name varchar(100) not null comment '策略名称',
|
|
||||||
receiver_id bigint not null comment '消息接收人ID',
|
|
||||||
receiver_name varchar(100) not null comment '消息接收人标识',
|
|
||||||
enable boolean not null default true comment '是否启用此策略',
|
|
||||||
filter_all boolean not null default true comment '是否转发所有',
|
|
||||||
creator varchar(100) comment '创建者',
|
|
||||||
modifier varchar(100) comment '最新修改者',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- Table structure for notice_receiver
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS notice_receiver ;
|
|
||||||
CREATE TABLE notice_receiver
|
|
||||||
(
|
|
||||||
id bigint not null auto_increment comment '消息接收人ID',
|
|
||||||
name varchar(100) not null comment '消息接收人姓名',
|
|
||||||
type tinyint not null comment '通知信息方式: 0-手机短信 1-邮箱 2-webhook 3-微信公众号 4-企业微信机器人 5-钉钉机器人',
|
|
||||||
phone varchar(100) comment '手机号, 通知方式为手机短信时有效',
|
|
||||||
email varchar(100) comment '邮箱账号, 通知方式为邮箱时有效',
|
|
||||||
hook_url varchar(255) comment 'URL地址, 通知方式为webhook有效',
|
|
||||||
wechat_id varchar(255) comment 'openId, 通知方式为微信公众号或企业微信机器人有效',
|
|
||||||
access_token varchar(255) comment '访问token, 通知方式为钉钉机器人有效',
|
|
||||||
creator varchar(100) comment '创建者',
|
|
||||||
modifier varchar(100) comment '最新修改者',
|
|
||||||
gmt_create timestamp default current_timestamp comment 'create time',
|
|
||||||
gmt_update datetime default current_timestamp on update current_timestamp comment 'update time',
|
|
||||||
primary key (id)
|
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
## -- sureness.yml文本数据源 -- ##
|
|
||||||
|
|
||||||
# 加载到匹配字典的资源,也就是需要被保护的,设置了所支持角色访问的资源
|
|
||||||
# 没有配置的资源也默认被认证保护,但不鉴权
|
|
||||||
# eg: /api/v1/source1===get===[role2] 表示 /api/v2/host===post 这条资源支持 role2 这一种角色访问
|
|
||||||
# eg: /api/v1/source2===get===[] 表示 /api/v1/source2===get 这条资源不支持任何角色访问
|
|
||||||
resourceRole:
|
|
||||||
- /account/auth/refresh===post===[role1,role2,role3,role4]
|
|
||||||
|
|
||||||
# 需要被过滤保护的资源,不认证鉴权直接访问
|
|
||||||
# /api/v1/source3===get 表示 /api/v1/source3===get 可以被任何人访问 无需登录认证鉴权
|
|
||||||
excludedResource:
|
|
||||||
- /account/auth/**===*
|
|
||||||
- /===get
|
|
||||||
- /i18n/**===get
|
|
||||||
# web ui 静态资源
|
|
||||||
- /console/**===get
|
|
||||||
- /**/*.html===get
|
|
||||||
- /**/*.js===get
|
|
||||||
- /**/*.css===get
|
|
||||||
- /**/*.ico===get
|
|
||||||
- /**/*.ttf===get
|
|
||||||
- /**/*.png===get
|
|
||||||
- /**/*.gif===get
|
|
||||||
- /**/*.png===*
|
|
||||||
# swagger ui 资源
|
|
||||||
- /swagger-resources/**===get
|
|
||||||
- /v2/api-docs===get
|
|
||||||
- /v3/api-docs===get
|
|
||||||
|
|
||||||
# 用户账户信息
|
|
||||||
# 下面有 admin tom lili 三个账户
|
|
||||||
# eg: admin 拥有[role1,role2]角色,密码为admin
|
|
||||||
# eg: tom 拥有[role1,role2,role3],密码为tom@123
|
|
||||||
# eg: lili 拥有[role1,role2],明文密码为lili, 加盐密码为1A676730B0C7F54654B0E09184448289
|
|
||||||
account:
|
|
||||||
- appId: admin
|
|
||||||
credential: admin@123.
|
|
||||||
role: [role1,role2]
|
|
||||||
- appId: tom
|
|
||||||
credential: tom@123.
|
|
||||||
role: [role1,role2,role3]
|
|
||||||
- appId: lili
|
|
||||||
# 注意 Digest认证不支持加盐加密的密码账户
|
|
||||||
# 加盐加密的密码,通过 MD5(password+salt)计算
|
|
||||||
# 此账户的原始密码为 lili
|
|
||||||
credential: 1A676730B0C7F54654B0E09194448289
|
|
||||||
salt: 123
|
|
||||||
role: [role1,role2]
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
version: "3.7"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
heartzbeat:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
services:
|
|
||||||
mysql:
|
|
||||||
image: "mysql:5.7"
|
|
||||||
container_name: mysql
|
|
||||||
hostname: mysql
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- "3306:3306"
|
|
||||||
environment:
|
|
||||||
TZ: Asia/Shanghai
|
|
||||||
MYSQL_ROOT_PASSWORD: 1234
|
|
||||||
volumes:
|
|
||||||
- ./dbdata/mysqldata:/var/lib/mysql/
|
|
||||||
- ./conf/sql:/docker-entrypoint-initdb.d/
|
|
||||||
networks:
|
|
||||||
- heartzbeat
|
|
||||||
|
|
||||||
TDengine:
|
|
||||||
image: "tdengine/tdengine:latest"
|
|
||||||
container_name: tdengine
|
|
||||||
hostname: tdengine
|
|
||||||
restart: always
|
|
||||||
ports:
|
|
||||||
- "6030-6049:6030-6049"
|
|
||||||
- "6030-6049:6030-6049/udp"
|
|
||||||
volumes:
|
|
||||||
- ./dbdata/taosdata:/var/lib/taos/
|
|
||||||
networks:
|
|
||||||
- heartzbeat
|
|
||||||
|
|
||||||
hertzbeat:
|
|
||||||
image: "tancloud/hertzbeat:1.0-beta.5"
|
|
||||||
container_name: hertzbeat
|
|
||||||
hostname: hertzbeat
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
TZ: Asia/Shanghai
|
|
||||||
volumes:
|
|
||||||
- ./conf/application.yml:/opt/hertzbeat/config/application.yml
|
|
||||||
- ./conf/sureness.yml:/opt/hertzbeat/config/sureness.yml
|
|
||||||
ports:
|
|
||||||
- "1157:1157"
|
|
||||||
networks:
|
|
||||||
- heartzbeat
|
|
||||||
@@ -79,17 +79,9 @@ public class MonitorsController {
|
|||||||
orList.add(predicateName);
|
orList.add(predicateName);
|
||||||
}
|
}
|
||||||
Predicate[] orPredicates = new Predicate[orList.size()];
|
Predicate[] orPredicates = new Predicate[orList.size()];
|
||||||
Predicate orPredicate = criteriaBuilder.or(orList.toArray(orPredicates));
|
Predicate orPredicate = criteriaBuilder.and(orList.toArray(orPredicates));
|
||||||
|
|
||||||
if (andPredicate.getExpressions().isEmpty() && orPredicate.getExpressions().isEmpty()) {
|
return query.where(andPredicate,orPredicate).getRestriction();
|
||||||
return query.where().getRestriction();
|
|
||||||
} else if (andPredicate.getExpressions().isEmpty()) {
|
|
||||||
return query.where(orPredicate).getRestriction();
|
|
||||||
} else if (orPredicate.getExpressions().isEmpty()) {
|
|
||||||
return query.where(andPredicate).getRestriction();
|
|
||||||
} else {
|
|
||||||
return query.where(andPredicate,orPredicate).getRestriction();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
// 分页是必须的
|
// 分页是必须的
|
||||||
Sort sortExp = Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort));
|
Sort sortExp = Sort.by(new Sort.Order(Sort.Direction.fromString(order), sort));
|
||||||
|
|||||||
@@ -96,11 +96,7 @@ export class HeaderSearchComponent implements AfterViewInit, OnDestroy {
|
|||||||
searchMonitors$.unsubscribe();
|
searchMonitors$.unsubscribe();
|
||||||
if (message.code === 0) {
|
if (message.code === 0) {
|
||||||
let page = message.data;
|
let page = message.data;
|
||||||
if (page.content != undefined) {
|
this.options = page.content;
|
||||||
this.options = page.content;
|
|
||||||
} else {
|
|
||||||
this.options = [];
|
|
||||||
}
|
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
} else {
|
} else {
|
||||||
console.warn(message.msg);
|
console.warn(message.msg);
|
||||||
@@ -122,7 +118,7 @@ export class HeaderSearchComponent implements AfterViewInit, OnDestroy {
|
|||||||
qBlur(): void {
|
qBlur(): void {
|
||||||
this.focus = false;
|
this.focus = false;
|
||||||
this.searchToggled = false;
|
this.searchToggled = false;
|
||||||
this.options = [];
|
this.options.length = 0;
|
||||||
this.toggleChangeChange.emit(false);
|
this.toggleChangeChange.emit(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user