diff --git a/carrera-console/carrera-boot/pom.xml b/carrera-console/carrera-boot/pom.xml new file mode 100644 index 0000000..bd6719a --- /dev/null +++ b/carrera-console/carrera-boot/pom.xml @@ -0,0 +1,244 @@ + + + + org.springframework.boot + spring-boot-starter-parent + 2.1.5.RELEASE + + + 4.0.0 + + com.xiaojukeji.ddmq + carrera-boot + 1.0-SNAPSHOT + + + UTF-8 + zh_CN + 1.8 + 3.6.1 + + 1.0.31 + 8.0.16 + 4.2.5 + + 1.7.25 + 1.2.3 + + + + + org.projectlombok + lombok + + + com.alibaba + druid + ${druid-version} + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.2 + + + + mysql + mysql-connector-java + ${mysql-connector-version} + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + + javax.transaction + jta + 1.1 + + + com.atomikos + atomikos-util + 4.0.2 + + + com.atomikos + transactions + 4.0.2 + + + com.atomikos + transactions-jta + 4.0.2 + + + com.atomikos + transactions-jdbc + 4.0.2 + + + com.atomikos + transactions-api + 4.0.2 + + + + org.aspectj + aspectjrt + 1.8.10 + + + org.aspectj + aspectjweaver + 1.8.10 + + + + org.apache.commons + commons-lang3 + 3.4 + + + commons-beanutils + commons-beanutils + 1.9.2 + + + + com.xiaojukeji.ddmq + carrera-common + 1.0.0-SNAPSHOT + + + org.apache.logging.log4j + log4j-api + + + org.apache.logging.log4j + log4j-core + + + org.apache.logging.log4j + log4j-slf4j-impl + + + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + org.yaml + snakeyaml + + + com.google.guava + guava + 21.0 + + + org.apache.commons + commons-collections4 + 4.1 + + + org.hibernate + hibernate-validator + 5.0.2.Final + + + com.alibaba + fastjson + 1.2.36 + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + + + ch.qos.logback + logback-classic + ${logback.version} + + + ch.qos.logback + logback-core + ${logback.version} + + + + org.slf4j + log4j-over-slf4j + ${slf4j.version} + runtime + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + runtime + + + + + org.slf4j + jul-to-slf4j + ${slf4j.version} + runtime + + + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4 + 1.15 + runtime + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/ConsoleApplication.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/ConsoleApplication.java new file mode 100644 index 0000000..8da6ea9 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/ConsoleApplication.java @@ -0,0 +1,52 @@ +package com.didi.carrera.console; + +import lombok.extern.slf4j.Slf4j; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.core.env.Environment; +import org.springframework.util.StringUtils; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +@Slf4j +@SpringBootApplication +@MapperScan("com.didi.carrera.console.dao.mapper") +public class ConsoleApplication { + public static void main(String[] args) { + SpringApplication app = new SpringApplication(ConsoleApplication.class); + Environment env = app.run(args).getEnvironment(); + log(env); + } + + /** + * 格式化运行成功后输出项目地址 + * + * @param env + */ + private static void log(Environment env) { + String name = env.getProperty("spring.application.name"); + String port = env.getProperty("server.port"); + String path = env.getProperty("server.servlet.context-path"); + String ssl = env.getProperty("server.ssl.enabled"); + String http = "true".equals(ssl) ? "https" : "http"; + String address = null; + try { + address = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + address = "127.0.0.1"; + e.printStackTrace(); + } + name = StringUtils.isEmpty(name) ? "" : name; + port = StringUtils.isEmpty(port) ? "8080" : port; + path = StringUtils.isEmpty(path) ? "" : path; + log.info( + "\n----------------------------------------------------------\n\t" + + "Application '{}' is running! Access URLs:\n\t" + + "Local: \t\t{}://localhost:{}{}\n\t" + + "External: \t{}://{}:{}{}" + + "\n----------------------------------------------------------", + name, http, port, path, http, address, port, path); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/offset/RocketMQProduceOffsetFetcher.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/offset/RocketMQProduceOffsetFetcher.java new file mode 100644 index 0000000..6bff2a3 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/offset/RocketMQProduceOffsetFetcher.java @@ -0,0 +1,76 @@ +package com.didi.carrera.console.common.offset; + +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.admin.ConsumeStats; +import org.apache.rocketmq.common.message.MessageQueue; +import org.apache.rocketmq.common.protocol.body.AllMaxOffset; +import org.apache.rocketmq.common.protocol.body.ClusterInfo; +import org.apache.rocketmq.common.protocol.route.BrokerData; +import org.apache.rocketmq.tools.admin.DefaultMQAdminExt; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + + +public class RocketMQProduceOffsetFetcher { + + private static final Logger LOGGER = LoggerFactory.getLogger(RocketMQProduceOffsetFetcher.class); + + private DefaultMQAdminExt defaultMQAdminExt; + + public RocketMQProduceOffsetFetcher(String namesvrAddr) { + this.defaultMQAdminExt = new DefaultMQAdminExt(); + defaultMQAdminExt.setNamesrvAddr(namesvrAddr); + defaultMQAdminExt.setInstanceName("admin-" + System.currentTimeMillis()); + } + + public void start() throws MQClientException { + defaultMQAdminExt.start(); + } + + public void shutdown() { + defaultMQAdminExt.shutdown(); + } + + public Collection getBrokers() { + try { + ClusterInfo clusterInfo = defaultMQAdminExt.examineBrokerClusterInfo(); + Map brokerAddrTable = clusterInfo.getBrokerAddrTable(); + return brokerAddrTable.values(); + } catch (Exception e) { + LOGGER.error("GetBrokers Exception", e); + } + return Collections.emptyList(); + } + + public Map getMaxOffset(Collection brokers) { + HashMap offsetTable = Maps.newHashMap(); + if (CollectionUtils.isNotEmpty(brokers)) { + for (BrokerData broker : brokers) { + try { + AllMaxOffset allMaxOffset = defaultMQAdminExt.getAllMaxOffset(broker.selectBrokerAddr()); + for (Map.Entry> entry : allMaxOffset.getOffsetTable().entrySet()) { + for (Map.Entry entry1 : entry.getValue().entrySet()) { + MessageQueue mq = new MessageQueue(entry.getKey(), broker.getBrokerName(), entry1.getKey()); + offsetTable.put(mq, entry1.getValue()); + } + } + } catch (Exception e) { + LOGGER.error("GetMaxOffset Exception", e); + } + } + } + return offsetTable; + } + + public ConsumeStats getConsumeStats(String group, String topic) throws Exception { + return defaultMQAdminExt.examineConsumeStats(group, topic); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CacheLockUtils.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CacheLockUtils.java new file mode 100644 index 0000000..04f1a37 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CacheLockUtils.java @@ -0,0 +1,16 @@ +package com.didi.carrera.console.common.util; + +import java.util.concurrent.ConcurrentHashMap; + + +public class CacheLockUtils { + private static final ConcurrentHashMap CACHE_LOCK = new ConcurrentHashMap<>(); + + public static boolean lock(String key) { + return CACHE_LOCK.putIfAbsent(key, 1) == null; + } + + public static void unlock(String key) { + CACHE_LOCK.remove(key); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CodecsUtils.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CodecsUtils.java new file mode 100644 index 0000000..4910977 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/CodecsUtils.java @@ -0,0 +1,73 @@ +package com.didi.carrera.console.common.util; + + +public class CodecsUtils { + /** + * This method is used to judge whether byte[] is utf-8 encoding principle + * @param bytes + * @return true for bytes is utf-8 encoding principle + */ + public static boolean isUtf8(byte[] bytes) { + int len = bytes.length; + for (int i = 0; i < len; ++i) { + if (((bytes[i] >>> 7) & 0x1) == 0) { // 0xxxxxxxx + continue; + } else if (((bytes[i] >>> 5) & 0x7) == 0x6) { // 110xxxxx + for (int j = 0; j < 1; ++j) { + if (isRegular(bytes[i+1])) { + i += 1; + } else { + return false; + } + } + continue; + } else if (((bytes[i] >>> 4) & 0xf) == 0xe) { // 1110xxxx + for (int j = 0; j < 2; ++j) { + if (isRegular(bytes[i+1])) { + i += 1; + } else { + return false; + } + } + continue; + } else if (((bytes[i] >>> 3) & 0x1f) == 0x1e) { // 11110xxx + for (int j = 0; j < 3; ++j) { + if (isRegular(bytes[i+1])) { + i += 1; + } else { + return false; + } + } + continue; + } else if (((bytes[i] >>> 2) & 0x3f) == 0x3e) { // 1110xxxx + for (int j = 0; j < 4; ++j) { + if (isRegular(bytes[i+1])) { + i += 1; + } else { + return false; + } + } + continue; + } else if (((bytes[i] >>> 1) & 0x7f) == 0x7e) { // 1110xxxx + for (int j = 0; j < 5; ++j) { + if (isRegular(bytes[i+1])) { + i += 1; + } else { + return false; + } + } + continue; + } + } + return true; + } + + /** + * This method supports isUtf8 method to judge whether byte b is 10xxxxxx + * @param b + * @return result of judgement + */ + private static boolean isRegular(byte b) { + return ((b >>> 6) & 0x3) == 0x2; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/FastJsonUtils.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/FastJsonUtils.java new file mode 100644 index 0000000..d6b1ee5 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/FastJsonUtils.java @@ -0,0 +1,26 @@ +package com.didi.carrera.console.common.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.serializer.SerializerFeature; + + +public class FastJsonUtils { + + public static String toJsonString(Object obj) { + return JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.DisableCircularReferenceDetect); + } + + public static String toJson(Object obj) { + return JSON.toJSONString(obj); + } + + public static T toObject(String json, Class cls) { + return JSON.parseObject(json, cls); + } + + public static T toObject(String json, TypeReference typeReference) { + return JSON.parseObject(json, typeReference); + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/HostUtils.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/HostUtils.java new file mode 100644 index 0000000..63e545f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/HostUtils.java @@ -0,0 +1,40 @@ +package com.didi.carrera.console.common.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.regex.Pattern; + + +public class HostUtils { + private static final Logger logger = LoggerFactory.getLogger(HostUtils.class); + + public static final Pattern IP_PATTERN = Pattern.compile("^[\\d.:]+$"); + + public static String getIp(String host) { + if (IP_PATTERN.matcher(host).matches()) { + return host; + } + + try { + InetAddress address = InetAddress.getByName(host); + return address.getHostAddress(); + } catch (UnknownHostException e) { + logger.error("get ip exception", e); + return host; + } + } + + public static String getIpPortFromHost(String host, int defaultPort) { + String[] hostArr = host.split(":"); + String hostIp = getIp(hostArr[0]); + if (hostArr.length == 2) { + hostIp = hostIp + ":" + hostArr[1]; + } else { + hostIp = hostIp + ":" + defaultPort; + } + return hostIp; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/LogUtils.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/LogUtils.java new file mode 100644 index 0000000..73816cb --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/common/util/LogUtils.java @@ -0,0 +1,14 @@ +package com.didi.carrera.console.common.util; + +import java.util.Random; + + +public class LogUtils { + + private static final Random random = new Random(); + + public static String genLogid() { + Long logid = (System.currentTimeMillis() << 22) + random.nextInt(1 << 23); + return logid.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ApplicationStartedLintener.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ApplicationStartedLintener.java new file mode 100644 index 0000000..10b1938 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ApplicationStartedLintener.java @@ -0,0 +1,28 @@ +package com.didi.carrera.console.config; + +import com.didi.carrera.console.service.ZKV4ConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class ApplicationStartedLintener { + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + + @EventListener(ApplicationReadyEvent.class) + public void onApplicationStartedListener() { + log.info("应用启动成功,开始注册zk"); + try { + zkv4ConfigService.initZkPath(); + zkv4ConfigService.initAllZk(); + log.info("zk注册成功"); + } catch (Exception e) { + log.error("zk注册失败", e); + } + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ConsoleConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ConsoleConfig.java new file mode 100644 index 0000000..425a711 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/ConsoleConfig.java @@ -0,0 +1,60 @@ +package com.didi.carrera.console.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class ConsoleConfig { + @Value("${console.carrera.zookeeper}") + private String zookeeper; + @Value("${console.env}") + private String env; + @Value("#{'${console.admin.user}'.split(',')}") + private List carreraAdminUser; + @Value("#{'${console.admin.password}'.split(',')}") + private List carreraAdminPassword; + + public String getZookeeper() { + return zookeeper; + } + + public void setZookeeper(String zookeeper) { + this.zookeeper = zookeeper; + } + + public String getEnv() { + return env; + } + + public void setEnv(String env) { + this.env = env; + } + + public List getCarreraAdminUser() { + return carreraAdminUser; + } + + public void setCarreraAdminUser(List carreraAdminUser) { + this.carreraAdminUser = carreraAdminUser; + } + + public List getCarreraAdminPassword() { + return carreraAdminPassword; + } + + public void setCarreraAdminPassword(List carreraAdminPassword) { + this.carreraAdminPassword = carreraAdminPassword; + } + + @Override + public String toString() { + return "ConsoleConfig{" + + "zookeeper='" + zookeeper + '\'' + + ", env='" + env + '\'' + + ", carreraAdminUser=" + carreraAdminUser + + ", carreraAdminPassword=" + carreraAdminPassword + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/SpringBeanConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/SpringBeanConfig.java new file mode 100644 index 0000000..3763a07 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/config/SpringBeanConfig.java @@ -0,0 +1,77 @@ +package com.didi.carrera.console.config; + +import com.atomikos.icatch.jta.UserTransactionImp; +import com.atomikos.icatch.jta.UserTransactionManager; +import com.didi.carrera.console.web.controller.LoginInterceptor; +import com.xiaojukeji.carrera.biz.ZkService; +import com.xiaojukeji.carrera.biz.ZkServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.jta.JtaTransactionManager; +import org.springframework.transaction.jta.TransactionFactory; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import javax.transaction.SystemException; +import javax.transaction.TransactionManager; +import javax.transaction.UserTransaction; + +@Configuration +@EnableTransactionManagement +@Slf4j +public class SpringBeanConfig implements WebMvcConfigurer { + + @Value("${console.carrera.zookeeper}") + private String zkHost; + + @Bean + public ZkService getZkService() { + try { + return new ZkServiceImpl(zkHost, true); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Bean + @Primary + public TransactionManager atomikosTransactionManager() { + UserTransactionManager userTransactionManager = new UserTransactionManager(); + userTransactionManager.setForceShutdown(false); + return userTransactionManager; + } + + @Bean + @Primary + public UserTransaction atomikosUserTransaction() { + try { + UserTransactionImp userTransactionImp = new UserTransactionImp(); + userTransactionImp.setTransactionTimeout(300); + return userTransactionImp; + } catch (SystemException e) { + e.printStackTrace(); + } + return null; + } + + @Bean + @Primary + public TransactionFactory jtaTransactionManager(TransactionManager atomikosTransactionManager, UserTransaction atomikosUserTransaction) { + JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(); + jtaTransactionManager.setTransactionManager(atomikosTransactionManager); + jtaTransactionManager.setUserTransaction(atomikosUserTransaction); + jtaTransactionManager.setAllowCustomIsolationLevels(true); + jtaTransactionManager.setDefaultTimeout(300); + return jtaTransactionManager; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**"); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/BaseMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/BaseMapper.java new file mode 100644 index 0000000..cbf0d6b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/BaseMapper.java @@ -0,0 +1,5 @@ +package com.didi.carrera.console.dao; + + +public interface BaseMapper { +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/DaoUtil.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/DaoUtil.java new file mode 100644 index 0000000..fc004cd --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/DaoUtil.java @@ -0,0 +1,14 @@ +package com.didi.carrera.console.dao; + +import org.apache.commons.lang3.StringUtils; + + +public class DaoUtil { + + public static String getLikeField(String field) { + if(StringUtils.isEmpty(field)) { + return null; + } + return "%" + field + "%"; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/MybatisInterceptor.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/MybatisInterceptor.java new file mode 100755 index 0000000..6fc479c --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/MybatisInterceptor.java @@ -0,0 +1,150 @@ +package com.didi.carrera.console.dao; + +import org.apache.commons.lang3.time.DateFormatUtils; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ParameterMapping; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.plugin.Intercepts; +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.plugin.Plugin; +import org.apache.ibatis.plugin.Signature; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; +import org.apache.ibatis.type.TypeHandlerRegistry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; +import java.util.List; +import java.util.Properties; +import java.util.regex.Matcher; + +@Intercepts({ + @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}), + @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, + RowBounds.class, ResultHandler.class})}) +public class MybatisInterceptor implements Interceptor { + + + protected static final String SHOW_DETAILSQL_KEY = "showDetailSql"; + protected static final String SHOW_COSTTIME_KEY = "showCostTime"; + protected static final String SLOW_SQL_MS_KEY = "slowSqlMs"; + + protected static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + protected Logger log = LoggerFactory.getLogger(MybatisInterceptor.class); + + private boolean showDetailSql = true; + private boolean showCostTime = true; + private long slowSqlMs = 0; + + public Object intercept(Invocation invocation) throws Throwable { + Object returnValue; + if (showDetailSql || showCostTime) { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + Object parameter = null; + if (invocation.getArgs().length > 1) { + parameter = invocation.getArgs()[1]; + } + String sqlId = mappedStatement.getId(); + BoundSql boundSql = mappedStatement.getBoundSql(parameter); + Configuration configuration = mappedStatement.getConfiguration(); + + long start = System.currentTimeMillis(); + returnValue = invocation.proceed(); + long end = System.currentTimeMillis(); + long time = (end - start); + + String sql = getSql(configuration, boundSql, sqlId, time); + if (slowSqlMs != 0 && time > slowSqlMs) { + log.warn(sql); + } else { + log.info(sql); + } + } else { + returnValue = invocation.proceed(); + } + return returnValue; + } + + public String getSql(Configuration configuration, BoundSql boundSql, String sqlId, long time) { + StringBuilder str = new StringBuilder(100); + str.append(sqlId); + if (showDetailSql) { + str.append("||"); + str.append(showSql(configuration, boundSql)); + } + if (showCostTime) { + str.append("||cost="); + str.append(time); + str.append("ms"); + } + return str.toString(); + } + + private String getParameterValue(Object obj) { + String value; + if (obj instanceof String) { + value = "'" + obj.toString() + "'"; + } else if (obj instanceof Date) { + value = "'" + DateFormatUtils.format((Date) obj, DATE_FORMAT) + "'"; + } else { + if (obj != null) { + value = obj.toString(); + } else { + value = ""; + } + } + return Matcher.quoteReplacement(value); + } + + public String showSql(Configuration configuration, BoundSql boundSql) { + Object parameterObject = boundSql.getParameterObject(); + List parameterMappings = boundSql.getParameterMappings(); + // Remove unnecessary empty characters + String sql = boundSql.getSql().replaceAll("[\\s]+", " "); + + if(parameterMappings.size() > 200) { + return sql; + } + if (parameterMappings.size() > 0 && parameterObject != null) { + TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry(); + if (typeHandlerRegistry.hasTypeHandler(parameterObject.getClass())) { + sql = sql.replaceFirst("\\?", getParameterValue(parameterObject)); + } else { + MetaObject metaObject = configuration.newMetaObject(parameterObject); + for (ParameterMapping parameterMapping : parameterMappings) { + String propertyName = parameterMapping.getProperty(); + if (metaObject.hasGetter(propertyName)) { + Object obj = metaObject.getValue(propertyName); + sql = sql.replaceFirst("\\?", getParameterValue(obj)); + } else if (boundSql.hasAdditionalParameter(propertyName)) { + Object obj = boundSql.getAdditionalParameter(propertyName); + sql = sql.replaceFirst("\\?", getParameterValue(obj)); + } + } + } + } + return sql; + } + + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + public void setProperties(Properties properties) { + if (properties != null) { + String showDetailSql = properties.getProperty(SHOW_DETAILSQL_KEY, Boolean.TRUE.toString()); + String showCostTime = properties.getProperty(SHOW_COSTTIME_KEY, Boolean.TRUE.toString()); + String slowSqlMs = properties.getProperty(SLOW_SQL_MS_KEY, "0"); + this.showDetailSql = Boolean.parseBoolean(showDetailSql); + this.showCostTime = Boolean.parseBoolean(showCostTime); + this.slowSqlMs = Long.parseLong(slowSqlMs); + } + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ClusterMqServerRelationType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ClusterMqServerRelationType.java new file mode 100644 index 0000000..55a144f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ClusterMqServerRelationType.java @@ -0,0 +1,42 @@ +package com.didi.carrera.console.dao.dict; + + +public enum ClusterMqServerRelationType { + P_PROXY((byte)0, "pproxy"), + C_PROXY((byte)1, "cproxy"); + + private byte index; + + private String name; + + ClusterMqServerRelationType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ClusterMqServerRelationType getByIndex(byte index) { + ClusterMqServerRelationType[] all = values(); + for (ClusterMqServerRelationType type : all) { + if (type.getIndex() == index) { + return type; + } + } + return null; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionAlarmType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionAlarmType.java new file mode 100644 index 0000000..f43a0d2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionAlarmType.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionAlarmType { + EXTEND_GROUP_CONFIG((byte)0, "Same as group alarm configuration"), + SEPARATE_CONFIG((byte)1, "own alarm configuration"); + + private byte index; + + private String name; + + ConsumeSubscriptionAlarmType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionAlarmType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionAlarmType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionApiType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionApiType.java new file mode 100644 index 0000000..70494be --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionApiType.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionApiType { + HIGH_LEVEL((byte)1, "highlevel"), + LOW_LEVEL((byte)2, "lowlevel"); + + private byte index; + + private String name; + + ConsumeSubscriptionApiType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionApiType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionApiType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionBigDataType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionBigDataType.java new file mode 100644 index 0000000..9487d03 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionBigDataType.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionBigDataType { + HDFS((byte)0, "hdfs"), + HBASE((byte)1, "hbase"), + REDIS((byte)2, "redis"); + + private byte index; + + private String name; + + ConsumeSubscriptionBigDataType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionBigDataType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionBigDataType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionConsumeType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionConsumeType.java new file mode 100644 index 0000000..8845c36 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionConsumeType.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionConsumeType { + SDK((byte)1, "SDK"), + HTTP((byte)2, "HTTP"), + BIG_DATA((byte)3, "Write straightly to other component"); + + private byte index; + + private String name; + + ConsumeSubscriptionConsumeType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionConsumeType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionConsumeType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionHttpMethod.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionHttpMethod.java new file mode 100644 index 0000000..f824db4 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionHttpMethod.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionHttpMethod { + POST((byte)0, "POST"), + GET((byte)1, "GET"); + + private byte index; + + private String name; + + ConsumeSubscriptionHttpMethod(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionHttpMethod getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionHttpMethod level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgPushType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgPushType.java new file mode 100644 index 0000000..a639b19 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgPushType.java @@ -0,0 +1,47 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionMsgPushType { + + FORM_PARAMS((byte)1, "Post Body:params="), + FORM_PARAMS2((byte)2, "Post Body:flatten message's first layer to key=value"); + + private byte index; + + private String name; + + ConsumeSubscriptionMsgPushType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionMsgPushType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionMsgPushType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgType.java new file mode 100644 index 0000000..c99374d --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionMsgType.java @@ -0,0 +1,47 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionMsgType { + JSON((byte)1, "JSON"), + TEXT((byte)2, "Text"), + BINARY((byte)3, "Binary"); + + private byte index; + + private String name; + + ConsumeSubscriptionMsgType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionMsgType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionMsgType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionPressureTraffic.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionPressureTraffic.java new file mode 100644 index 0000000..85d176f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/ConsumeSubscriptionPressureTraffic.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum ConsumeSubscriptionPressureTraffic { + DISABLE((byte)0, "not consume pressure traffic"), + ENABLE((byte)1, "consume pressure traffic"); + + private byte index; + + private String name; + + ConsumeSubscriptionPressureTraffic(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionPressureTraffic getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionPressureTraffic level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsDelete.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsDelete.java new file mode 100644 index 0000000..93dc75a --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsDelete.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum IsDelete { + NO((byte)0, "normal"), + YES((byte)1, "deleted"); + + private byte index; + + private String name; + + IsDelete(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static IsDelete getByIndex(byte index) { + List all = Arrays.asList(values()); + for (IsDelete level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsEnable.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsEnable.java new file mode 100644 index 0000000..2c477e0 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/IsEnable.java @@ -0,0 +1,54 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum IsEnable { + ENABLE((byte)0, "enable"), + DISABLE((byte)1, "disable"); + + private byte index; + + private String name; + + IsEnable(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static IsEnable getByIndex(byte index) { + List all = Arrays.asList(values()); + for (IsEnable level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + + public static boolean isEnable(Byte index) { + if(index == null) { + return false; + } + + return index == ENABLE.index; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/MqServerType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/MqServerType.java new file mode 100644 index 0000000..4b55ea6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/MqServerType.java @@ -0,0 +1,45 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum MqServerType { + ROCKETMQ((byte)0, "rocketmq"), + KAFKA((byte)1, "kafka"); + + private byte index; + + private String name; + + MqServerType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static MqServerType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (MqServerType type : all) { + if (type.getIndex() == index) { + return type; + } + } + return null; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/NodeType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/NodeType.java new file mode 100644 index 0000000..a754814 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/NodeType.java @@ -0,0 +1,54 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum NodeType { + + ROCKETMQ_BROKER_MASTER((byte)1, "rocketmq broker master"), + + ROCKETMQ_NAMESERVER((byte)2, "rocketmq nameserver"), + + PRODUCER_PROXY((byte)3, "producer proxy"), + + CONSUMER_PROXY((byte)4, "consumer proxy"), + + ROCKETMQ_BROKER_SLAVE((byte)9, "rocketmq broker slave"); + + private byte index; + + private String name; + + NodeType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static NodeType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (NodeType item : all) { + if (item.getIndex() == index) { + return item; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicCompressionType.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicCompressionType.java new file mode 100644 index 0000000..28751e3 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicCompressionType.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum TopicCompressionType { + + RMQ_COMPRESSION((byte)0, "RMQ"), + SNAPPY_COMPRESSION((byte)1, "Snappy"); + + private byte index; + + private String name; + + TopicCompressionType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static TopicCompressionType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (TopicCompressionType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicDelayTopic.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicDelayTopic.java new file mode 100644 index 0000000..4c3bd15 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicDelayTopic.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + + +public enum TopicDelayTopic { + DELAY_TOPIC((byte)0, "delay topic"), + REAL_TIME_TOPIC((byte)1, "real-time topic"); + + private byte index; + + private String name; + + TopicDelayTopic(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static TopicDelayTopic getByIndex(byte index) { + List all = Arrays.asList(values()); + for (TopicDelayTopic level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicProduceMode.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicProduceMode.java new file mode 100644 index 0000000..b0c8f36 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/dict/TopicProduceMode.java @@ -0,0 +1,62 @@ +package com.didi.carrera.console.dao.dict; + +import java.util.Arrays; +import java.util.List; + +import com.xiaojukeji.carrera.config.v4.TopicConfig; + + +public enum TopicProduceMode { + SAME_IDC((byte) 0, "同机房生产"), + OTHER((byte) 1, "自定义"); + + private byte index; + + private String name; + + TopicProduceMode(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static TopicProduceMode getByIndex(byte index) { + List all = Arrays.asList(values()); + for (TopicProduceMode level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + + public static TopicConfig.ProduceMode getZkMode(Byte index) { + if(index == null) { + return null; + } + + if(index == SAME_IDC.index) { + return TopicConfig.ProduceMode.SAME_IDC; + } else if (index == OTHER.index) { + return TopicConfig.ProduceMode.OTHER; + } + + return null; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMapper.java new file mode 100644 index 0000000..ec189d6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ClusterCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface ClusterMapper { + long countByExample(ClusterCriteria example); + + int deleteByExample(ClusterCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(Cluster record); + + int insertSelective(Cluster record); + + List selectByExample(ClusterCriteria example); + + Cluster selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Cluster record, @Param("example") ClusterCriteria example); + + int updateByExample(@Param("record") Cluster record, @Param("example") ClusterCriteria example); + + int updateByPrimaryKeySelective(Cluster record); + + int updateByPrimaryKey(Cluster record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMqserverRelationMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMqserverRelationMapper.java new file mode 100644 index 0000000..1ecbd94 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ClusterMqserverRelationMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.ClusterMqserverRelation; +import com.didi.carrera.console.dao.model.ClusterMqserverRelationCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface ClusterMqserverRelationMapper { + long countByExample(ClusterMqserverRelationCriteria example); + + int deleteByExample(ClusterMqserverRelationCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(ClusterMqserverRelation record); + + int insertSelective(ClusterMqserverRelation record); + + List selectByExample(ClusterMqserverRelationCriteria example); + + ClusterMqserverRelation selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") ClusterMqserverRelation record, @Param("example") ClusterMqserverRelationCriteria example); + + int updateByExample(@Param("record") ClusterMqserverRelation record, @Param("example") ClusterMqserverRelationCriteria example); + + int updateByPrimaryKeySelective(ClusterMqserverRelation record); + + int updateByPrimaryKey(ClusterMqserverRelation record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeGroupMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeGroupMapper.java new file mode 100644 index 0000000..a3aeee2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeGroupMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.dao.model.ConsumeGroupCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface ConsumeGroupMapper { + long countByExample(ConsumeGroupCriteria example); + + int deleteByExample(ConsumeGroupCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(ConsumeGroup record); + + int insertSelective(ConsumeGroup record); + + List selectByExample(ConsumeGroupCriteria example); + + ConsumeGroup selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") ConsumeGroup record, @Param("example") ConsumeGroupCriteria example); + + int updateByExample(@Param("record") ConsumeGroup record, @Param("example") ConsumeGroupCriteria example); + + int updateByPrimaryKeySelective(ConsumeGroup record); + + int updateByPrimaryKey(ConsumeGroup record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeSubscriptionMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeSubscriptionMapper.java new file mode 100644 index 0000000..88c93a7 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/ConsumeSubscriptionMapper.java @@ -0,0 +1,37 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.ConsumeSubscriptionCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface ConsumeSubscriptionMapper { + long countByExample(ConsumeSubscriptionCriteria example); + + int deleteByExample(ConsumeSubscriptionCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(ConsumeSubscription record); + + int insertSelective(ConsumeSubscription record); + + List selectByExampleWithBLOBs(ConsumeSubscriptionCriteria example); + + List selectByExample(ConsumeSubscriptionCriteria example); + + ConsumeSubscription selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") ConsumeSubscription record, @Param("example") ConsumeSubscriptionCriteria example); + + int updateByExampleWithBLOBs(@Param("record") ConsumeSubscription record, @Param("example") ConsumeSubscriptionCriteria example); + + int updateByExample(@Param("record") ConsumeSubscription record, @Param("example") ConsumeSubscriptionCriteria example); + + int updateByPrimaryKeySelective(ConsumeSubscription record); + + int updateByPrimaryKeyWithBLOBs(ConsumeSubscription record); + + int updateByPrimaryKey(ConsumeSubscription record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/IdcMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/IdcMapper.java new file mode 100644 index 0000000..bcf0d88 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/IdcMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.Idc; +import com.didi.carrera.console.dao.model.IdcCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface IdcMapper { + long countByExample(IdcCriteria example); + + int deleteByExample(IdcCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(Idc record); + + int insertSelective(Idc record); + + List selectByExample(IdcCriteria example); + + Idc selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Idc record, @Param("example") IdcCriteria example); + + int updateByExample(@Param("record") Idc record, @Param("example") IdcCriteria example); + + int updateByPrimaryKeySelective(Idc record); + + int updateByPrimaryKey(Idc record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/MqServerMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/MqServerMapper.java new file mode 100644 index 0000000..dc45c15 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/MqServerMapper.java @@ -0,0 +1,32 @@ +package com.didi.carrera.console.dao.mapper; + +import java.util.List; + +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.dao.model.MqServerCriteria; +import org.apache.ibatis.annotations.Param; + + +public interface MqServerMapper { + long countByExample(MqServerCriteria example); + + int deleteByExample(MqServerCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(MqServer record); + + int insertSelective(MqServer record); + + List selectByExample(MqServerCriteria example); + + MqServer selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") MqServer record, @Param("example") MqServerCriteria example); + + int updateByExample(@Param("record") MqServer record, @Param("example") MqServerCriteria example); + + int updateByPrimaryKeySelective(MqServer record); + + int updateByPrimaryKey(MqServer record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/NodeMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/NodeMapper.java new file mode 100644 index 0000000..86bb727 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/NodeMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.Node; +import com.didi.carrera.console.dao.model.NodeCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface NodeMapper { + long countByExample(NodeCriteria example); + + int deleteByExample(NodeCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(Node record); + + int insertSelective(Node record); + + List selectByExample(NodeCriteria example); + + Node selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Node record, @Param("example") NodeCriteria example); + + int updateByExample(@Param("record") Node record, @Param("example") NodeCriteria example); + + int updateByPrimaryKeySelective(Node record); + + int updateByPrimaryKey(Node record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicConfMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicConfMapper.java new file mode 100644 index 0000000..7b8b6c6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicConfMapper.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.dao.model.TopicConfCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface TopicConfMapper { + long countByExample(TopicConfCriteria example); + + int deleteByExample(TopicConfCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(TopicConf record); + + int insertSelective(TopicConf record); + + List selectByExample(TopicConfCriteria example); + + TopicConf selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") TopicConf record, @Param("example") TopicConfCriteria example); + + int updateByExample(@Param("record") TopicConf record, @Param("example") TopicConfCriteria example); + + int updateByPrimaryKeySelective(TopicConf record); + + int updateByPrimaryKey(TopicConf record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicMapper.java new file mode 100644 index 0000000..35e629f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/TopicMapper.java @@ -0,0 +1,37 @@ +package com.didi.carrera.console.dao.mapper; + +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.dao.model.TopicCriteria; +import java.util.List; +import org.apache.ibatis.annotations.Param; + + +public interface TopicMapper { + long countByExample(TopicCriteria example); + + int deleteByExample(TopicCriteria example); + + int deleteByPrimaryKey(Long id); + + int insert(Topic record); + + int insertSelective(Topic record); + + List selectByExampleWithBLOBs(TopicCriteria example); + + List selectByExample(TopicCriteria example); + + Topic selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Topic record, @Param("example") TopicCriteria example); + + int updateByExampleWithBLOBs(@Param("record") Topic record, @Param("example") TopicCriteria example); + + int updateByExample(@Param("record") Topic record, @Param("example") TopicCriteria example); + + int updateByPrimaryKeySelective(Topic record); + + int updateByPrimaryKeyWithBLOBs(Topic record); + + int updateByPrimaryKey(Topic record); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeGroupCustomMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeGroupCustomMapper.java new file mode 100644 index 0000000..962c961 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeGroupCustomMapper.java @@ -0,0 +1,121 @@ +package com.didi.carrera.console.dao.mapper.custom; + +import java.util.List; + +import com.didi.carrera.console.dao.BaseMapper; +import com.didi.carrera.console.dao.model.ConsumeGroup; +import org.apache.ibatis.annotations.Param; + + +public interface ConsumeGroupCustomMapper extends BaseMapper { + + List selectByCondition(@Param("contacters") String user, @Param("text") String text, @Param("limit") Integer index, @Param("size") Integer pageSize); + + Integer selectCountByCondition(@Param("contacters") String user, @Param("text") String text); + +// @Insert(SCRIPT_START + +// "insert into consume_group\n" + +// " \n" + +// " \n" + +// " id,\n" + +// " \n" + +// " \n" + +// " group_name,\n" + +// " \n" + +// " \n" + +// " department,\n" + +// " \n" + +// " \n" + +// " service,\n" + +// " \n" + +// " \n" + +// " contacters,\n" + +// " \n" + +// " \n" + +// " alarm_is_enable,\n" + +// " \n" + +// " \n" + +// " alarm_group,\n" + +// " \n" + +// " \n" + +// " alarm_level,\n" + +// " \n" + +// " \n" + +// " alarm_msg_lag,\n" + +// " \n" + +// " \n" + +// " alarm_delay_time,\n" + +// " \n" + +// " \n" + +// " extra_params,\n" + +// " \n" + +// " \n" + +// " config,\n" + +// " \n" + +// " \n" + +// " remark,\n" + +// " \n" + +// " \n" + +// " is_delete,\n" + +// " \n" + +// " \n" + +// " create_time,\n" + +// " \n" + +// " \n" + +// " modify_time,\n" + +// " \n" + +// " \n" + +// " \n" + +// " \n" + +// " #{id,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{groupName,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{department,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{service,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{contacters,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{alarmIsEnable,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{alarmGroup,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{alarmLevel,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{alarmMsgLag,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{alarmDelayTime,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{extraParams,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{config,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{remark,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{isDelete,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{createTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " \n" + +// " #{modifyTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " " + +// SCRIPT_END) +// int insertSelectiveWithPrimaryKey(ConsumeGroup consumeGroup); + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeSubscriptionCustomMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeSubscriptionCustomMapper.java new file mode 100644 index 0000000..7992d23 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/ConsumeSubscriptionCustomMapper.java @@ -0,0 +1,278 @@ +package com.didi.carrera.console.dao.mapper.custom; + +import java.util.List; + +import com.didi.carrera.console.dao.BaseMapper; +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomSubscriptionStateCount; +import org.apache.ibatis.annotations.Param; + + +public interface ConsumeSubscriptionCustomMapper extends BaseMapper { + + List selectByTopicIdClusterId(@Param("topicId") Long topicId, @Param("clusterId") Long clusterId); + + List selectStateCountByGroupId(List list); + + List selectByCondition(@Param("contacters") String user, @Param("groupId") Long groupId, @Param("clusterId") Long clusterId, @Param("consumeType") Integer consumeType, @Param("state") Integer state, @Param("text") String text, @Param("limit") Integer index, @Param("size") Integer pageSize); + + Integer selectCountByCondition(@Param("contacters") String user, @Param("groupId") Long groupId, @Param("clusterId") Long clusterId, @Param("consumeType") Integer consumeType, @Param("state") Integer state, @Param("text") String text); + + +// @Insert(SCRIPT_START + +// "insert into consume_subscription\n" + +// " \n" + +// " \n" + +// " id,\n" + +// " \n" + +// " \n" + +// " group_id,\n" + +// " \n" + +// " \n" + +// " group_name,\n" + +// " \n" + +// " \n" + +// " topic_id,\n" + +// " \n" + +// " \n" + +// " topic_name,\n" + +// " \n" + +// " \n" + +// " cluster_id,\n" + +// " \n" + +// " \n" + +// " cluster_name,\n" + +// " \n" + +// " \n" + +// " pressure_traffic,\n" + +// " \n" + +// " \n" + +// " max_tps,\n" + +// " \n" + +// " \n" + +// " alarm_type,\n" + +// " \n" + +// " \n" + +// " alarm_is_enable,\n" + +// " \n" + +// " \n" + +// " alarm_level,\n" + +// " \n" + +// " \n" + +// " alarm_msg_lag,\n" + +// " \n" + +// " \n" + +// " alarm_delay_time,\n" + +// " \n" + +// " \n" + +// " api_type,\n" + +// " \n" + +// " \n" + +// " consume_timeout,\n" + +// " \n" + +// " \n" + +// " error_retry_times,\n" + +// " \n" + +// " \n" + +// " retry_intervals,\n" + +// " \n" + +// " \n" + +// " msg_type,\n" + +// " \n" + +// " \n" + +// " enable_groovy,\n" + +// " \n" + +// " \n" + +// " enable_transit,\n" + +// " \n" + +// " \n" + +// " transit,\n" + +// " \n" + +// " \n" + +// " enable_order,\n" + +// " \n" + +// " \n" + +// " order_key,\n" + +// " \n" + +// " \n" + +// " consume_type,\n" + +// " \n" + +// " \n" + +// " urls,\n" + +// " \n" + +// " \n" + +// " http_method,\n" + +// " \n" + +// " \n" + +// " http_headers,\n" + +// " \n" + +// " \n" + +// " http_query_params,\n" + +// " \n" + +// " \n" + +// " msg_push_type,\n" + +// " \n" + +// " \n" + +// " http_token,\n" + +// " \n" + +// " \n" + +// " push_max_concurrency,\n" + +// " \n" + +// " \n" + +// " actions,\n" + +// " \n" + +// " \n" + +// " config,\n" + +// " \n" + +// " \n" + +// " state,\n" + +// " \n" + +// " \n" + +// " extra_params,\n" + +// " \n" + +// " \n" + +// " remark,\n" + +// " \n" + +// " \n" + +// " is_delete,\n" + +// " \n" + +// " \n" + +// " create_time,\n" + +// " \n" + +// " \n" + +// " modify_time,\n" + +// " \n" + +// " \n" + +// " groovy,\n" + +// " \n" + +// " \n" + +// " \n" + +// " \n" + +// " #{id,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{groupId,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{groupName,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{topicId,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{topicName,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{clusterId,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{clusterName,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{pressureTraffic,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{maxTps,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{alarmType,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{alarmIsEnable,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{alarmLevel,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{alarmMsgLag,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{alarmDelayTime,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{apiType,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{consumeTimeout,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{errorRetryTimes,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{retryIntervals,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{msgType,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{enableGroovy,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{enableTransit,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{transit,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{enableOrder,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{orderKey,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{consumeType,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{urls,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{httpMethod,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{httpHeaders,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{httpQueryParams,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{msgPushType,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{httpToken,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{pushMaxConcurrency,jdbcType=INTEGER},\n" + +// " \n" + +// " \n" + +// " #{actions,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{config,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{state,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{extraParams,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{remark,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{isDelete,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{createTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " \n" + +// " #{modifyTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " \n" + +// " #{groovy,jdbcType=LONGVARCHAR},\n" + +// " \n" + +// " " + +// SCRIPT_END) +// int insertSelectiveWithPrimaryKey(ConsumeSubscription consumeSubscription); + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicConfCustomMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicConfCustomMapper.java new file mode 100644 index 0000000..6702bee --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicConfCustomMapper.java @@ -0,0 +1,11 @@ +package com.didi.carrera.console.dao.mapper.custom; + +import java.util.List; + +import com.didi.carrera.console.dao.model.custom.CustomTopicConf; + + +public interface TopicConfCustomMapper { + + List selectByTopicId(List list); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicCustomMapper.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicCustomMapper.java new file mode 100644 index 0000000..f190f7e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/mapper/custom/TopicCustomMapper.java @@ -0,0 +1,114 @@ +package com.didi.carrera.console.dao.mapper.custom; + +import java.util.List; + +import com.didi.carrera.console.dao.BaseMapper; +import com.didi.carrera.console.dao.model.Topic; +import org.apache.ibatis.annotations.Param; + + +public interface TopicCustomMapper extends BaseMapper { + + List selectByCondition(@Param("clusterId") Long clusterId, @Param("contacters") String user, @Param("text") String text, @Param("limit") Integer curPage, @Param("size") Integer pageSize); + + Integer selectCountByCondition(@Param("clusterId") Long clusterId, @Param("contacters") String user, @Param("text") String text); + +// @Insert(SCRIPT_START + +// "insert into topic\n" + +// " \n" + +// " \n" + +// " id,\n" + +// " \n" + +// " \n" + +// " topic_name,\n" + +// " \n" + +// " \n" + +// " department,\n" + +// " \n" + +// " \n" + +// " service,\n" + +// " \n" + +// " \n" + +// " contacters,\n" + +// " \n" + +// " \n" + +// " alarm_group,\n" + +// " \n" + +// " \n" + +// " delay_topic,\n" + +// " \n" + +// " \n" + +// " state,\n" + +// " \n" + +// " \n" + +// " config,\n" + +// " \n" + +// " \n" + +// " description,\n" + +// " \n" + +// " \n" + +// " extra_params,\n" + +// " \n" + +// " \n" + +// " is_delete,\n" + +// " \n" + +// " \n" + +// " create_time,\n" + +// " \n" + +// " \n" + +// " modify_time,\n" + +// " \n" + +// " \n" + +// " topic_schema,\n" + +// " \n" + +// " \n" + +// " \n" + +// " \n" + +// " #{id,jdbcType=BIGINT},\n" + +// " \n" + +// " \n" + +// " #{topicName,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{department,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{service,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{contacters,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{alarmGroup,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{delayTopic,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{state,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{config,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{description,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{extraParams,jdbcType=VARCHAR},\n" + +// " \n" + +// " \n" + +// " #{isDelete,jdbcType=TINYINT},\n" + +// " \n" + +// " \n" + +// " #{createTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " \n" + +// " #{modifyTime,jdbcType=TIMESTAMP},\n" + +// " \n" + +// " \n" + +// " #{topicSchema,jdbcType=LONGVARCHAR},\n" + +// " \n" + +// " " + +// SCRIPT_END) +// int insertSelectiveWithPrimaryKey(Topic topic); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Cluster.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Cluster.java new file mode 100644 index 0000000..af84e8b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Cluster.java @@ -0,0 +1,202 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; + + +public class Cluster implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * 集群名称 + * default = + * length = 256 + */ + private String name; + + /** + * 描述信息 + * default = + * length = 1024 + */ + private String description; + + /** + * idc table primarykey + * default = 0 + * length = 19 + */ + private Long idcId; + + /** + * 集群所属机房 + * default = gz01 + * length = 256 + */ + private String idc; + + /** + * 备注 + * default = + * length = 1024 + */ + private String remark; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + public Long getIdcId() { + return idcId; + } + + public void setIdcId(Long idcId) { + this.idcId = idcId; + } + + public String getIdc() { + return idc; + } + + public void setIdc(String idc) { + this.idc = idc == null ? null : idc.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + Cluster other = (Cluster) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName())) + && (this.getDescription() == null ? other.getDescription() == null : this.getDescription().equals(other.getDescription())) + && (this.getIdcId() == null ? other.getIdcId() == null : this.getIdcId().equals(other.getIdcId())) + && (this.getIdc() == null ? other.getIdc() == null : this.getIdc().equals(other.getIdc())) + && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); + result = prime * result + ((getDescription() == null) ? 0 : getDescription().hashCode()); + result = prime * result + ((getIdcId() == null) ? 0 : getIdcId().hashCode()); + result = prime * result + ((getIdc() == null) ? 0 : getIdc().hashCode()); + result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", name=" + name + + ", description=" + description + + ", idcId=" + idcId + + ", idc=" + idc + + ", remark=" + remark + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterCriteria.java new file mode 100644 index 0000000..c87c8d4 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterCriteria.java @@ -0,0 +1,801 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class ClusterCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public ClusterCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("description is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("description is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("description =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("description <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("description >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("description >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("description <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("description <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("description like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("description not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("description in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("description not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("description between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("description not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andIdcIdIsNull() { + addCriterion("idc_id is null"); + return (Criteria) this; + } + + public Criteria andIdcIdIsNotNull() { + addCriterion("idc_id is not null"); + return (Criteria) this; + } + + public Criteria andIdcIdEqualTo(Long value) { + addCriterion("idc_id =", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdNotEqualTo(Long value) { + addCriterion("idc_id <>", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdGreaterThan(Long value) { + addCriterion("idc_id >", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdGreaterThanOrEqualTo(Long value) { + addCriterion("idc_id >=", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdLessThan(Long value) { + addCriterion("idc_id <", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdLessThanOrEqualTo(Long value) { + addCriterion("idc_id <=", value, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdIn(List values) { + addCriterion("idc_id in", values, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdNotIn(List values) { + addCriterion("idc_id not in", values, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdBetween(Long value1, Long value2) { + addCriterion("idc_id between", value1, value2, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIdNotBetween(Long value1, Long value2) { + addCriterion("idc_id not between", value1, value2, "idcId"); + return (Criteria) this; + } + + public Criteria andIdcIsNull() { + addCriterion("idc is null"); + return (Criteria) this; + } + + public Criteria andIdcIsNotNull() { + addCriterion("idc is not null"); + return (Criteria) this; + } + + public Criteria andIdcEqualTo(String value) { + addCriterion("idc =", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcNotEqualTo(String value) { + addCriterion("idc <>", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcGreaterThan(String value) { + addCriterion("idc >", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcGreaterThanOrEqualTo(String value) { + addCriterion("idc >=", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcLessThan(String value) { + addCriterion("idc <", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcLessThanOrEqualTo(String value) { + addCriterion("idc <=", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcLike(String value) { + addCriterion("idc like", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcNotLike(String value) { + addCriterion("idc not like", value, "idc"); + return (Criteria) this; + } + + public Criteria andIdcIn(List values) { + addCriterion("idc in", values, "idc"); + return (Criteria) this; + } + + public Criteria andIdcNotIn(List values) { + addCriterion("idc not in", values, "idc"); + return (Criteria) this; + } + + public Criteria andIdcBetween(String value1, String value2) { + addCriterion("idc between", value1, value2, "idc"); + return (Criteria) this; + } + + public Criteria andIdcNotBetween(String value1, String value2) { + addCriterion("idc not between", value1, value2, "idc"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelation.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelation.java new file mode 100644 index 0000000..a091d18 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelation.java @@ -0,0 +1,220 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; + + +public class ClusterMqserverRelation implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * 集群id + * default = 0 + * length = 19 + */ + private Long clusterId; + + /** + * 集群名称 + * default = + * length = 256 + */ + private String clusterName; + + /** + * mqserver id + * default = 0 + * length = 19 + */ + private Long mqServerId; + + /** + * mqserver名称 + * default = + * length = 256 + */ + private String mqServerName; + + /** + * 集群配置 + * default = + * length = 2048 + */ + private String proxyConf; + + /** + * 集群和mqserver关联类型,0:pproxy 1:cproxy + * default = 0 + * length = 3 + */ + private Byte type; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName == null ? null : clusterName.trim(); + } + + public Long getMqServerId() { + return mqServerId; + } + + public void setMqServerId(Long mqServerId) { + this.mqServerId = mqServerId; + } + + public String getMqServerName() { + return mqServerName; + } + + public void setMqServerName(String mqServerName) { + this.mqServerName = mqServerName == null ? null : mqServerName.trim(); + } + + public String getProxyConf() { + return proxyConf; + } + + public void setProxyConf(String proxyConf) { + this.proxyConf = proxyConf == null ? null : proxyConf.trim(); + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + ClusterMqserverRelation other = (ClusterMqserverRelation) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getClusterId() == null ? other.getClusterId() == null : this.getClusterId().equals(other.getClusterId())) + && (this.getClusterName() == null ? other.getClusterName() == null : this.getClusterName().equals(other.getClusterName())) + && (this.getMqServerId() == null ? other.getMqServerId() == null : this.getMqServerId().equals(other.getMqServerId())) + && (this.getMqServerName() == null ? other.getMqServerName() == null : this.getMqServerName().equals(other.getMqServerName())) + && (this.getProxyConf() == null ? other.getProxyConf() == null : this.getProxyConf().equals(other.getProxyConf())) + && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getClusterId() == null) ? 0 : getClusterId().hashCode()); + result = prime * result + ((getClusterName() == null) ? 0 : getClusterName().hashCode()); + result = prime * result + ((getMqServerId() == null) ? 0 : getMqServerId().hashCode()); + result = prime * result + ((getMqServerName() == null) ? 0 : getMqServerName().hashCode()); + result = prime * result + ((getProxyConf() == null) ? 0 : getProxyConf().hashCode()); + result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", clusterId=" + clusterId + + ", clusterName=" + clusterName + + ", mqServerId=" + mqServerId + + ", mqServerName=" + mqServerName + + ", proxyConf=" + proxyConf + + ", type=" + type + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelationCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelationCriteria.java new file mode 100644 index 0000000..23ee911 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ClusterMqserverRelationCriteria.java @@ -0,0 +1,851 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class ClusterMqserverRelationCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public ClusterMqserverRelationCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNull() { + addCriterion("cluster_id is null"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNotNull() { + addCriterion("cluster_id is not null"); + return (Criteria) this; + } + + public Criteria andClusterIdEqualTo(Long value) { + addCriterion("cluster_id =", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotEqualTo(Long value) { + addCriterion("cluster_id <>", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThan(Long value) { + addCriterion("cluster_id >", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThanOrEqualTo(Long value) { + addCriterion("cluster_id >=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThan(Long value) { + addCriterion("cluster_id <", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThanOrEqualTo(Long value) { + addCriterion("cluster_id <=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdIn(List values) { + addCriterion("cluster_id in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotIn(List values) { + addCriterion("cluster_id not in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdBetween(Long value1, Long value2) { + addCriterion("cluster_id between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotBetween(Long value1, Long value2) { + addCriterion("cluster_id not between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNull() { + addCriterion("cluster_name is null"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNotNull() { + addCriterion("cluster_name is not null"); + return (Criteria) this; + } + + public Criteria andClusterNameEqualTo(String value) { + addCriterion("cluster_name =", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotEqualTo(String value) { + addCriterion("cluster_name <>", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThan(String value) { + addCriterion("cluster_name >", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThanOrEqualTo(String value) { + addCriterion("cluster_name >=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThan(String value) { + addCriterion("cluster_name <", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThanOrEqualTo(String value) { + addCriterion("cluster_name <=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLike(String value) { + addCriterion("cluster_name like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotLike(String value) { + addCriterion("cluster_name not like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameIn(List values) { + addCriterion("cluster_name in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotIn(List values) { + addCriterion("cluster_name not in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameBetween(String value1, String value2) { + addCriterion("cluster_name between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotBetween(String value1, String value2) { + addCriterion("cluster_name not between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andMqServerIdIsNull() { + addCriterion("mq_server_id is null"); + return (Criteria) this; + } + + public Criteria andMqServerIdIsNotNull() { + addCriterion("mq_server_id is not null"); + return (Criteria) this; + } + + public Criteria andMqServerIdEqualTo(Long value) { + addCriterion("mq_server_id =", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotEqualTo(Long value) { + addCriterion("mq_server_id <>", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdGreaterThan(Long value) { + addCriterion("mq_server_id >", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdGreaterThanOrEqualTo(Long value) { + addCriterion("mq_server_id >=", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdLessThan(Long value) { + addCriterion("mq_server_id <", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdLessThanOrEqualTo(Long value) { + addCriterion("mq_server_id <=", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdIn(List values) { + addCriterion("mq_server_id in", values, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotIn(List values) { + addCriterion("mq_server_id not in", values, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdBetween(Long value1, Long value2) { + addCriterion("mq_server_id between", value1, value2, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotBetween(Long value1, Long value2) { + addCriterion("mq_server_id not between", value1, value2, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerNameIsNull() { + addCriterion("mq_server_name is null"); + return (Criteria) this; + } + + public Criteria andMqServerNameIsNotNull() { + addCriterion("mq_server_name is not null"); + return (Criteria) this; + } + + public Criteria andMqServerNameEqualTo(String value) { + addCriterion("mq_server_name =", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotEqualTo(String value) { + addCriterion("mq_server_name <>", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameGreaterThan(String value) { + addCriterion("mq_server_name >", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameGreaterThanOrEqualTo(String value) { + addCriterion("mq_server_name >=", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLessThan(String value) { + addCriterion("mq_server_name <", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLessThanOrEqualTo(String value) { + addCriterion("mq_server_name <=", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLike(String value) { + addCriterion("mq_server_name like", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotLike(String value) { + addCriterion("mq_server_name not like", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameIn(List values) { + addCriterion("mq_server_name in", values, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotIn(List values) { + addCriterion("mq_server_name not in", values, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameBetween(String value1, String value2) { + addCriterion("mq_server_name between", value1, value2, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotBetween(String value1, String value2) { + addCriterion("mq_server_name not between", value1, value2, "mqServerName"); + return (Criteria) this; + } + + public Criteria andProxyConfIsNull() { + addCriterion("proxy_conf is null"); + return (Criteria) this; + } + + public Criteria andProxyConfIsNotNull() { + addCriterion("proxy_conf is not null"); + return (Criteria) this; + } + + public Criteria andProxyConfEqualTo(String value) { + addCriterion("proxy_conf =", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfNotEqualTo(String value) { + addCriterion("proxy_conf <>", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfGreaterThan(String value) { + addCriterion("proxy_conf >", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfGreaterThanOrEqualTo(String value) { + addCriterion("proxy_conf >=", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfLessThan(String value) { + addCriterion("proxy_conf <", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfLessThanOrEqualTo(String value) { + addCriterion("proxy_conf <=", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfLike(String value) { + addCriterion("proxy_conf like", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfNotLike(String value) { + addCriterion("proxy_conf not like", value, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfIn(List values) { + addCriterion("proxy_conf in", values, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfNotIn(List values) { + addCriterion("proxy_conf not in", values, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfBetween(String value1, String value2) { + addCriterion("proxy_conf between", value1, value2, "proxyConf"); + return (Criteria) this; + } + + public Criteria andProxyConfNotBetween(String value1, String value2) { + addCriterion("proxy_conf not between", value1, value2, "proxyConf"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(Byte value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(Byte value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(Byte value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(Byte value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(Byte value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(Byte value1, Byte value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(Byte value1, Byte value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroup.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroup.java new file mode 100644 index 0000000..328baad --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroup.java @@ -0,0 +1,423 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.TypeReference; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.dao.model.custom.ConsumeGroupConfig; +import org.apache.commons.lang3.StringUtils; + + +public class ConsumeGroup implements Serializable { + /** + * 主键id + * default = null + * length = 20 + */ + private Long id; + + /** + * groupname + * default = + * length = 256 + */ + private String groupName; + + /** + * 成本分摊方 + * default = + * length = 256 + */ + private String service; + + /** + * 部门,;分割 + * default = + * length = 256 + */ + private String department; + + /** + * 负责rd,;分割 + * default = + * length = 512 + */ + private String contacters; + + /** + * 0启用报警 1禁用报警 + * default = 0 + * length = 3 + */ + private Byte alarmIsEnable; + + /** + * 报警组信息, ;分割 + * default = + * length = 256 + */ + private List alarmGroup; + + /** + * 报警级别,默认 二级报警,1,2,3级报警 + * default = 2 + * length = 3 + */ + private Byte alarmLevel; + + /** + * 消息积压报警阈值,默认积压10000条 + * default = 10000 + * length = 10 + */ + private Integer alarmMsgLag; + + /** + * 消息延迟报警时间,单位ms,默认5分钟 + * default = 300000 + * length = 10 + */ + private Integer alarmDelayTime; + + /** + * 是否广播消费 0启用 1禁用,默认1 + * default = 1 + * length = 3 + */ + private Byte broadcastConsume; + + /** + * 0同机房消费 1跨机房消费 2自定义,默认1 + * default = 1 + * length = 3 + */ + private Byte consumeMode; + + /** + * 自定义消费模式,map结构,key为client idc,value为cproxy idc列表 + * default = + * length = 2048 + */ + private Map> consumeModeMapper; + + /** + * 额外参数 + * default = + * length = 2048 + */ + private Map extraParams; + + /** + * 运维端配置参数 + * default = + * length = 2048 + */ + private ConsumeGroupConfig config; + + /** + * group 备注 + * default = + * length = 256 + */ + private String remark; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName == null ? null : groupName.trim(); + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service == null ? null : service.trim(); + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department == null ? null : department.trim(); + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters == null ? null : contacters.trim(); + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public String getAlarmGroup() { + return this.alarmGroup == null ? null : FastJsonUtils.toJsonString(alarmGroup); + } + + public void setAlarmGroup(String alarmGroup) { + this.alarmGroup = StringUtils.isBlank(alarmGroup) ? null : FastJsonUtils.toObject(alarmGroup, List.class); + } + + public List getGroupAlarmGroup() { + return alarmGroup; + } + + public void setGroupAlarmGroup(List alarmGroup) { + this.alarmGroup = alarmGroup; + } + + + public Byte getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(Byte alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public Integer getAlarmMsgLag() { + return alarmMsgLag; + } + + public void setAlarmMsgLag(Integer alarmMsgLag) { + this.alarmMsgLag = alarmMsgLag; + } + + public Integer getAlarmDelayTime() { + return alarmDelayTime; + } + + public void setAlarmDelayTime(Integer alarmDelayTime) { + this.alarmDelayTime = alarmDelayTime; + } + + public Byte getBroadcastConsume() { + return broadcastConsume; + } + + public void setBroadcastConsume(Byte broadcastConsume) { + this.broadcastConsume = broadcastConsume; + } + + public Byte getConsumeMode() { + return consumeMode; + } + + public void setConsumeMode(Byte consumeMode) { + this.consumeMode = consumeMode; + } + + public String getConsumeModeMapper() { + return this.consumeModeMapper == null ? null : FastJsonUtils.toJsonString(consumeModeMapper); + } + + public void setConsumeModeMapper(String consumeModeMapper) { + this.consumeModeMapper = StringUtils.isBlank(consumeModeMapper) ? null : FastJsonUtils.toObject(consumeModeMapper, new TypeReference/*server idc*/>>() { + }); + } + + public Map/*server idc*/> getGroupConsumeModeMapper() { + return consumeModeMapper; + } + + public void setGroupConsumeModeMapper(Map/*server idc*/> consumeModeMapper) { + this.consumeModeMapper = consumeModeMapper; + } + + public String getExtraParams() { + return this.extraParams == null ? null : FastJsonUtils.toJsonString(extraParams); + } + + public void setExtraParams(String extraParams) { + this.extraParams = StringUtils.isBlank(extraParams) ? null : FastJsonUtils.toObject(extraParams, Map.class); + } + + public Map getGroupExtraParams() { + return extraParams; + } + + public void setGroupExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public ConsumeGroupConfig getConsumeGroupConfig() { + return config; + } + + public void setConsumeGroupConfig(ConsumeGroupConfig config) { + this.config = config; + } + + public String getConfig() { + return this.config == null ? null : FastJsonUtils.toJsonString(config); + } + + public void setConfig(String config) { + this.config = StringUtils.isBlank(config) ? null : FastJsonUtils.toObject(config, ConsumeGroupConfig.class); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + ConsumeGroup other = (ConsumeGroup) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getGroupName() == null ? other.getGroupName() == null : this.getGroupName().equals(other.getGroupName())) + && (this.getService() == null ? other.getService() == null : this.getService().equals(other.getService())) + && (this.getDepartment() == null ? other.getDepartment() == null : this.getDepartment().equals(other.getDepartment())) + && (this.getContacters() == null ? other.getContacters() == null : this.getContacters().equals(other.getContacters())) + && (this.getAlarmIsEnable() == null ? other.getAlarmIsEnable() == null : this.getAlarmIsEnable().equals(other.getAlarmIsEnable())) + && (this.getAlarmGroup() == null ? other.getAlarmGroup() == null : this.getAlarmGroup().equals(other.getAlarmGroup())) + && (this.getAlarmLevel() == null ? other.getAlarmLevel() == null : this.getAlarmLevel().equals(other.getAlarmLevel())) + && (this.getAlarmMsgLag() == null ? other.getAlarmMsgLag() == null : this.getAlarmMsgLag().equals(other.getAlarmMsgLag())) + && (this.getAlarmDelayTime() == null ? other.getAlarmDelayTime() == null : this.getAlarmDelayTime().equals(other.getAlarmDelayTime())) + && (this.getBroadcastConsume() == null ? other.getBroadcastConsume() == null : this.getBroadcastConsume().equals(other.getBroadcastConsume())) + && (this.getConsumeMode() == null ? other.getConsumeMode() == null : this.getConsumeMode().equals(other.getConsumeMode())) + && (this.getConsumeModeMapper() == null ? other.getConsumeModeMapper() == null : this.getConsumeModeMapper().equals(other.getConsumeModeMapper())) + && (this.getExtraParams() == null ? other.getExtraParams() == null : this.getExtraParams().equals(other.getExtraParams())) + && (this.getConfig() == null ? other.getConfig() == null : this.getConfig().equals(other.getConfig())) + && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getGroupName() == null) ? 0 : getGroupName().hashCode()); + result = prime * result + ((getService() == null) ? 0 : getService().hashCode()); + result = prime * result + ((getDepartment() == null) ? 0 : getDepartment().hashCode()); + result = prime * result + ((getContacters() == null) ? 0 : getContacters().hashCode()); + result = prime * result + ((getAlarmIsEnable() == null) ? 0 : getAlarmIsEnable().hashCode()); + result = prime * result + ((getAlarmGroup() == null) ? 0 : getAlarmGroup().hashCode()); + result = prime * result + ((getAlarmLevel() == null) ? 0 : getAlarmLevel().hashCode()); + result = prime * result + ((getAlarmMsgLag() == null) ? 0 : getAlarmMsgLag().hashCode()); + result = prime * result + ((getAlarmDelayTime() == null) ? 0 : getAlarmDelayTime().hashCode()); + result = prime * result + ((getBroadcastConsume() == null) ? 0 : getBroadcastConsume().hashCode()); + result = prime * result + ((getConsumeMode() == null) ? 0 : getConsumeMode().hashCode()); + result = prime * result + ((getConsumeModeMapper() == null) ? 0 : getConsumeModeMapper().hashCode()); + result = prime * result + ((getExtraParams() == null) ? 0 : getExtraParams().hashCode()); + result = prime * result + ((getConfig() == null) ? 0 : getConfig().hashCode()); + result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", groupName=" + groupName + + ", service=" + service + + ", department=" + department + + ", contacters=" + contacters + + ", alarmIsEnable=" + alarmIsEnable + + ", alarmGroup=" + alarmGroup + + ", alarmLevel=" + alarmLevel + + ", alarmMsgLag=" + alarmMsgLag + + ", alarmDelayTime=" + alarmDelayTime + + ", broadcastConsume=" + broadcastConsume + + ", consumeMode=" + consumeMode + + ", consumeModeMapper=" + consumeModeMapper + + ", extraParams=" + extraParams + + ", config=" + config + + ", remark=" + remark + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroupCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroupCriteria.java new file mode 100644 index 0000000..2c153db --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeGroupCriteria.java @@ -0,0 +1,1451 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class ConsumeGroupCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public ConsumeGroupCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andGroupNameIsNull() { + addCriterion("group_name is null"); + return (Criteria) this; + } + + public Criteria andGroupNameIsNotNull() { + addCriterion("group_name is not null"); + return (Criteria) this; + } + + public Criteria andGroupNameEqualTo(String value) { + addCriterion("group_name =", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotEqualTo(String value) { + addCriterion("group_name <>", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameGreaterThan(String value) { + addCriterion("group_name >", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameGreaterThanOrEqualTo(String value) { + addCriterion("group_name >=", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLessThan(String value) { + addCriterion("group_name <", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLessThanOrEqualTo(String value) { + addCriterion("group_name <=", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLike(String value) { + addCriterion("group_name like", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotLike(String value) { + addCriterion("group_name not like", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameIn(List values) { + addCriterion("group_name in", values, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotIn(List values) { + addCriterion("group_name not in", values, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameBetween(String value1, String value2) { + addCriterion("group_name between", value1, value2, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotBetween(String value1, String value2) { + addCriterion("group_name not between", value1, value2, "groupName"); + return (Criteria) this; + } + + public Criteria andServiceIsNull() { + addCriterion("service is null"); + return (Criteria) this; + } + + public Criteria andServiceIsNotNull() { + addCriterion("service is not null"); + return (Criteria) this; + } + + public Criteria andServiceEqualTo(String value) { + addCriterion("service =", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotEqualTo(String value) { + addCriterion("service <>", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceGreaterThan(String value) { + addCriterion("service >", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceGreaterThanOrEqualTo(String value) { + addCriterion("service >=", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLessThan(String value) { + addCriterion("service <", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLessThanOrEqualTo(String value) { + addCriterion("service <=", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLike(String value) { + addCriterion("service like", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotLike(String value) { + addCriterion("service not like", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceIn(List values) { + addCriterion("service in", values, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotIn(List values) { + addCriterion("service not in", values, "service"); + return (Criteria) this; + } + + public Criteria andServiceBetween(String value1, String value2) { + addCriterion("service between", value1, value2, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotBetween(String value1, String value2) { + addCriterion("service not between", value1, value2, "service"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNull() { + addCriterion("department is null"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNotNull() { + addCriterion("department is not null"); + return (Criteria) this; + } + + public Criteria andDepartmentEqualTo(String value) { + addCriterion("department =", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotEqualTo(String value) { + addCriterion("department <>", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThan(String value) { + addCriterion("department >", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThanOrEqualTo(String value) { + addCriterion("department >=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThan(String value) { + addCriterion("department <", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThanOrEqualTo(String value) { + addCriterion("department <=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLike(String value) { + addCriterion("department like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotLike(String value) { + addCriterion("department not like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentIn(List values) { + addCriterion("department in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotIn(List values) { + addCriterion("department not in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentBetween(String value1, String value2) { + addCriterion("department between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotBetween(String value1, String value2) { + addCriterion("department not between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andContactersIsNull() { + addCriterion("contacters is null"); + return (Criteria) this; + } + + public Criteria andContactersIsNotNull() { + addCriterion("contacters is not null"); + return (Criteria) this; + } + + public Criteria andContactersEqualTo(String value) { + addCriterion("contacters =", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotEqualTo(String value) { + addCriterion("contacters <>", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersGreaterThan(String value) { + addCriterion("contacters >", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersGreaterThanOrEqualTo(String value) { + addCriterion("contacters >=", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLessThan(String value) { + addCriterion("contacters <", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLessThanOrEqualTo(String value) { + addCriterion("contacters <=", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLike(String value) { + addCriterion("contacters like", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotLike(String value) { + addCriterion("contacters not like", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersIn(List values) { + addCriterion("contacters in", values, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotIn(List values) { + addCriterion("contacters not in", values, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersBetween(String value1, String value2) { + addCriterion("contacters between", value1, value2, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotBetween(String value1, String value2) { + addCriterion("contacters not between", value1, value2, "contacters"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNull() { + addCriterion("alarm_is_enable is null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNotNull() { + addCriterion("alarm_is_enable is not null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableEqualTo(Byte value) { + addCriterion("alarm_is_enable =", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotEqualTo(Byte value) { + addCriterion("alarm_is_enable <>", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThan(Byte value) { + addCriterion("alarm_is_enable >", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable >=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThan(Byte value) { + addCriterion("alarm_is_enable <", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable <=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIn(List values) { + addCriterion("alarm_is_enable in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotIn(List values) { + addCriterion("alarm_is_enable not in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable not between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIsNull() { + addCriterion("alarm_group is null"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIsNotNull() { + addCriterion("alarm_group is not null"); + return (Criteria) this; + } + + public Criteria andAlarmGroupEqualTo(String value) { + addCriterion("alarm_group =", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotEqualTo(String value) { + addCriterion("alarm_group <>", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupGreaterThan(String value) { + addCriterion("alarm_group >", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupGreaterThanOrEqualTo(String value) { + addCriterion("alarm_group >=", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLessThan(String value) { + addCriterion("alarm_group <", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLessThanOrEqualTo(String value) { + addCriterion("alarm_group <=", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLike(String value) { + addCriterion("alarm_group like", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotLike(String value) { + addCriterion("alarm_group not like", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIn(List values) { + addCriterion("alarm_group in", values, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotIn(List values) { + addCriterion("alarm_group not in", values, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupBetween(String value1, String value2) { + addCriterion("alarm_group between", value1, value2, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotBetween(String value1, String value2) { + addCriterion("alarm_group not between", value1, value2, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIsNull() { + addCriterion("alarm_level is null"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIsNotNull() { + addCriterion("alarm_level is not null"); + return (Criteria) this; + } + + public Criteria andAlarmLevelEqualTo(Byte value) { + addCriterion("alarm_level =", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotEqualTo(Byte value) { + addCriterion("alarm_level <>", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelGreaterThan(Byte value) { + addCriterion("alarm_level >", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_level >=", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelLessThan(Byte value) { + addCriterion("alarm_level <", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelLessThanOrEqualTo(Byte value) { + addCriterion("alarm_level <=", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIn(List values) { + addCriterion("alarm_level in", values, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotIn(List values) { + addCriterion("alarm_level not in", values, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelBetween(Byte value1, Byte value2) { + addCriterion("alarm_level between", value1, value2, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_level not between", value1, value2, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIsNull() { + addCriterion("alarm_msg_lag is null"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIsNotNull() { + addCriterion("alarm_msg_lag is not null"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagEqualTo(Integer value) { + addCriterion("alarm_msg_lag =", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotEqualTo(Integer value) { + addCriterion("alarm_msg_lag <>", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagGreaterThan(Integer value) { + addCriterion("alarm_msg_lag >", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagGreaterThanOrEqualTo(Integer value) { + addCriterion("alarm_msg_lag >=", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagLessThan(Integer value) { + addCriterion("alarm_msg_lag <", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagLessThanOrEqualTo(Integer value) { + addCriterion("alarm_msg_lag <=", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIn(List values) { + addCriterion("alarm_msg_lag in", values, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotIn(List values) { + addCriterion("alarm_msg_lag not in", values, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagBetween(Integer value1, Integer value2) { + addCriterion("alarm_msg_lag between", value1, value2, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotBetween(Integer value1, Integer value2) { + addCriterion("alarm_msg_lag not between", value1, value2, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIsNull() { + addCriterion("alarm_delay_time is null"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIsNotNull() { + addCriterion("alarm_delay_time is not null"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeEqualTo(Integer value) { + addCriterion("alarm_delay_time =", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotEqualTo(Integer value) { + addCriterion("alarm_delay_time <>", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeGreaterThan(Integer value) { + addCriterion("alarm_delay_time >", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeGreaterThanOrEqualTo(Integer value) { + addCriterion("alarm_delay_time >=", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeLessThan(Integer value) { + addCriterion("alarm_delay_time <", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeLessThanOrEqualTo(Integer value) { + addCriterion("alarm_delay_time <=", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIn(List values) { + addCriterion("alarm_delay_time in", values, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotIn(List values) { + addCriterion("alarm_delay_time not in", values, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeBetween(Integer value1, Integer value2) { + addCriterion("alarm_delay_time between", value1, value2, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotBetween(Integer value1, Integer value2) { + addCriterion("alarm_delay_time not between", value1, value2, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeIsNull() { + addCriterion("broadcast_consume is null"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeIsNotNull() { + addCriterion("broadcast_consume is not null"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeEqualTo(Byte value) { + addCriterion("broadcast_consume =", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeNotEqualTo(Byte value) { + addCriterion("broadcast_consume <>", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeGreaterThan(Byte value) { + addCriterion("broadcast_consume >", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeGreaterThanOrEqualTo(Byte value) { + addCriterion("broadcast_consume >=", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeLessThan(Byte value) { + addCriterion("broadcast_consume <", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeLessThanOrEqualTo(Byte value) { + addCriterion("broadcast_consume <=", value, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeIn(List values) { + addCriterion("broadcast_consume in", values, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeNotIn(List values) { + addCriterion("broadcast_consume not in", values, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeBetween(Byte value1, Byte value2) { + addCriterion("broadcast_consume between", value1, value2, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andBroadcastConsumeNotBetween(Byte value1, Byte value2) { + addCriterion("broadcast_consume not between", value1, value2, "broadcastConsume"); + return (Criteria) this; + } + + public Criteria andConsumeModeIsNull() { + addCriterion("consume_mode is null"); + return (Criteria) this; + } + + public Criteria andConsumeModeIsNotNull() { + addCriterion("consume_mode is not null"); + return (Criteria) this; + } + + public Criteria andConsumeModeEqualTo(Byte value) { + addCriterion("consume_mode =", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeNotEqualTo(Byte value) { + addCriterion("consume_mode <>", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeGreaterThan(Byte value) { + addCriterion("consume_mode >", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeGreaterThanOrEqualTo(Byte value) { + addCriterion("consume_mode >=", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeLessThan(Byte value) { + addCriterion("consume_mode <", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeLessThanOrEqualTo(Byte value) { + addCriterion("consume_mode <=", value, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeIn(List values) { + addCriterion("consume_mode in", values, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeNotIn(List values) { + addCriterion("consume_mode not in", values, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeBetween(Byte value1, Byte value2) { + addCriterion("consume_mode between", value1, value2, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeNotBetween(Byte value1, Byte value2) { + addCriterion("consume_mode not between", value1, value2, "consumeMode"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperIsNull() { + addCriterion("consume_mode_mapper is null"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperIsNotNull() { + addCriterion("consume_mode_mapper is not null"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperEqualTo(String value) { + addCriterion("consume_mode_mapper =", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperNotEqualTo(String value) { + addCriterion("consume_mode_mapper <>", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperGreaterThan(String value) { + addCriterion("consume_mode_mapper >", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperGreaterThanOrEqualTo(String value) { + addCriterion("consume_mode_mapper >=", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperLessThan(String value) { + addCriterion("consume_mode_mapper <", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperLessThanOrEqualTo(String value) { + addCriterion("consume_mode_mapper <=", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperLike(String value) { + addCriterion("consume_mode_mapper like", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperNotLike(String value) { + addCriterion("consume_mode_mapper not like", value, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperIn(List values) { + addCriterion("consume_mode_mapper in", values, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperNotIn(List values) { + addCriterion("consume_mode_mapper not in", values, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperBetween(String value1, String value2) { + addCriterion("consume_mode_mapper between", value1, value2, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andConsumeModeMapperNotBetween(String value1, String value2) { + addCriterion("consume_mode_mapper not between", value1, value2, "consumeModeMapper"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNull() { + addCriterion("extra_params is null"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNotNull() { + addCriterion("extra_params is not null"); + return (Criteria) this; + } + + public Criteria andExtraParamsEqualTo(String value) { + addCriterion("extra_params =", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotEqualTo(String value) { + addCriterion("extra_params <>", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThan(String value) { + addCriterion("extra_params >", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThanOrEqualTo(String value) { + addCriterion("extra_params >=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThan(String value) { + addCriterion("extra_params <", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThanOrEqualTo(String value) { + addCriterion("extra_params <=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLike(String value) { + addCriterion("extra_params like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotLike(String value) { + addCriterion("extra_params not like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsIn(List values) { + addCriterion("extra_params in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotIn(List values) { + addCriterion("extra_params not in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsBetween(String value1, String value2) { + addCriterion("extra_params between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotBetween(String value1, String value2) { + addCriterion("extra_params not between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andConfigIsNull() { + addCriterion("config is null"); + return (Criteria) this; + } + + public Criteria andConfigIsNotNull() { + addCriterion("config is not null"); + return (Criteria) this; + } + + public Criteria andConfigEqualTo(String value) { + addCriterion("config =", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotEqualTo(String value) { + addCriterion("config <>", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThan(String value) { + addCriterion("config >", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThanOrEqualTo(String value) { + addCriterion("config >=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThan(String value) { + addCriterion("config <", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThanOrEqualTo(String value) { + addCriterion("config <=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLike(String value) { + addCriterion("config like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotLike(String value) { + addCriterion("config not like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigIn(List values) { + addCriterion("config in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotIn(List values) { + addCriterion("config not in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigBetween(String value1, String value2) { + addCriterion("config between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotBetween(String value1, String value2) { + addCriterion("config not between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscription.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscription.java new file mode 100644 index 0000000..b7cb2cf --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscription.java @@ -0,0 +1,884 @@ +package com.didi.carrera.console.dao.model; + +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.dao.model.custom.ConsumeSubscriptionConfig; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + + +public class ConsumeSubscription implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * 组id + * default = 0 + * length = 19 + */ + private Long groupId; + + /** + * 组名称 + * default = + * length = 256 + */ + private String groupName; + + /** + * topic主键id + * default = 0 + * length = 19 + */ + private Long topicId; + + /** + * topic名称 + * default = + * length = 256 + */ + private String topicName; + + /** + * 集群id + * default = 0 + * length = 19 + */ + private Long clusterId; + + /** + * 集群名称 + * default = + * length = 256 + */ + private String clusterName; + + /** + * 0 否不接收压测流量,1 接收压测流量,默认0否不接收压测流量 + * default = 0 + * length = 3 + */ + private Byte pressureTraffic; + + /** + * 限流tps + * default = 1000.00 + * length = 11 + */ + private Double maxTps; + + /** + * 报警类型:0.继承消费组配置 1.单独配置 + * default = 0 + * length = 3 + */ + private Byte alarmType; + + /** + * 0启用报警 1禁用报警 + * default = 0 + * length = 3 + */ + private Byte alarmIsEnable; + + /** + * 报警级别,默认 二级报警,1,2,3级报警 + * default = 2 + * length = 3 + */ + private Byte alarmLevel; + + /** + * 消息积压报警阈值,默认积压10000条 + * default = 10000 + * length = 10 + */ + private Integer alarmMsgLag; + + /** + * 消息延迟报警时间,单位ms,默认5分钟 + * default = 300000 + * length = 10 + */ + private Integer alarmDelayTime; + + /** + * 使用消息接口类型,1:highlevel 2 lowlevel,默认1 + * default = 1 + * length = 3 + */ + private Byte apiType; + + /** + * 消息超时时间,默认1000ms,单位ms + * default = 1000 + * length = 10 + */ + private Integer consumeTimeout; + + /** + * 消息错误重试次数,默认3次,-1 为一直重试 + * default = 3 + * length = 10 + */ + private Integer errorRetryTimes; + + /** + * 消息重试间隔,分号分隔 + * default = + * length = 1024 + */ + private List retryIntervals; + + /** + * 消息类型:1Json 2text 3二进制数据 + * default = 0 + * length = 3 + */ + private Byte msgType; + + /** + * 是否启用groovy 0 启用 1禁用 + * default = 0 + * length = 3 + */ + private Byte enableGroovy; + + /** + * 是否启用Transit 0 启用 1禁用 + * default = 0 + * length = 3 + */ + private Byte enableTransit; + + /** + * 是否启用保序,0启用 1禁用 + * default = 0 + * length = 3 + */ + private Byte enableOrder; + + /** + * 保序key + * default = + * length = 512 + */ + private String orderKey; + + /** + * 消费类型:1SDK 2HTTP 3直写第三方组件 + * default = 0 + * length = 3 + */ + private Byte consumeType; + + /** + * 写入类型,0:hdfs 1:hbase 2:redis + * default = 0 + * length = 3 + */ + private Byte bigDataType; + + /** + * 大数据配置内容,json格式 + * default = + * length = 2048 + */ + private String bigDataConfig; + + /** + * url列表,多个以分号分隔 + * default = + * length = 2048 + */ + private List urls; + + /** + * 0 Post 1Get + * default = 0 + * length = 3 + */ + private Byte httpMethod; + + /** + * header 分号分隔,key:val;key:val + * default = + * length = 1024 + */ + private Map httpHeaders; + + /** + * queryParmas,分号分隔,key:val;key:val + * default = + * length = 1024 + */ + private Map httpQueryParams; + + /** + * 消息推送方式:1.放在http消息体 2.param= 3.消息体第一层打平 + * default = 0 + * length = 3 + */ + private Byte msgPushType; + + /** + * token 校验 + * default = + * length = 1024 + */ + private String httpToken; + + /** + * http消息支持最大并发 + * default = 0 + * length = 10 + */ + private Integer pushMaxConcurrency; + + /** + * 消息链,根据config配置推算出actions + * default = + * length = 1024 + */ + private List actions; + + /** + * 运维端配置参数 + * default = + * length = 2048 + */ + private ConsumeSubscriptionConfig config; + + /** + * 消息订阅状态,0:启用 1:禁用 + * default = 0 + * length = 3 + */ + private Byte state; + + /** + * 额外参数 + * default = + * length = 2048 + */ + private Map extraParams; + + /** + * 备注 + * default = + * length = 1024 + */ + private String remark; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + /** + * groovy脚本 + * default = null + * length = 65535 + */ + private String groovy; + + /** + * transit json字符串,key->val + * default = + * length = 1024 + */ + private Map transit; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName == null ? null : groupName.trim(); + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName == null ? null : topicName.trim(); + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName == null ? null : clusterName.trim(); + } + + public Byte getPressureTraffic() { + return pressureTraffic; + } + + public void setPressureTraffic(Byte pressureTraffic) { + this.pressureTraffic = pressureTraffic; + } + + public Double getMaxTps() { + return maxTps; + } + + public void setMaxTps(Double maxTps) { + this.maxTps = maxTps; + } + + public Byte getAlarmType() { + return alarmType; + } + + public void setAlarmType(Byte alarmType) { + this.alarmType = alarmType; + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public Byte getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(Byte alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public Integer getAlarmMsgLag() { + return alarmMsgLag; + } + + public void setAlarmMsgLag(Integer alarmMsgLag) { + this.alarmMsgLag = alarmMsgLag; + } + + public Integer getAlarmDelayTime() { + return alarmDelayTime; + } + + public void setAlarmDelayTime(Integer alarmDelayTime) { + this.alarmDelayTime = alarmDelayTime; + } + + public Byte getApiType() { + return apiType; + } + + public void setApiType(Byte apiType) { + this.apiType = apiType; + } + + public Integer getConsumeTimeout() { + return consumeTimeout; + } + + public void setConsumeTimeout(Integer consumeTimeout) { + this.consumeTimeout = consumeTimeout; + } + + public Integer getErrorRetryTimes() { + return errorRetryTimes; + } + + public void setErrorRetryTimes(Integer errorRetryTimes) { + this.errorRetryTimes = errorRetryTimes; + } + + public String getRetryIntervals() { + return this.retryIntervals == null ? null : FastJsonUtils.toJsonString(retryIntervals); + } + + public void setRetryIntervals(String retryIntervals) { + this.retryIntervals = StringUtils.isBlank(retryIntervals) ? null : FastJsonUtils.toObject(retryIntervals, List.class); + } + + public List getSubRetryIntervals() { + return retryIntervals; + } + + public void setSubRetryIntervals(List retryIntervals) { + this.retryIntervals = retryIntervals; + } + + public Byte getMsgType() { + return msgType; + } + + public void setMsgType(Byte msgType) { + this.msgType = msgType; + } + + public Byte getEnableGroovy() { + return enableGroovy; + } + + public void setEnableGroovy(Byte enableGroovy) { + this.enableGroovy = enableGroovy; + } + + public Byte getEnableTransit() { + return enableTransit; + } + + public void setEnableTransit(Byte enableTransit) { + this.enableTransit = enableTransit; + } + + public Byte getEnableOrder() { + return enableOrder; + } + + public void setEnableOrder(Byte enableOrder) { + this.enableOrder = enableOrder; + } + + public String getOrderKey() { + return orderKey; + } + + public void setOrderKey(String orderKey) { + this.orderKey = orderKey == null ? null : orderKey.trim(); + } + + public Byte getConsumeType() { + return consumeType; + } + + public void setConsumeType(Byte consumeType) { + this.consumeType = consumeType; + } + + public Byte getBigDataType() { + return bigDataType; + } + + public void setBigDataType(Byte bigDataType) { + this.bigDataType = bigDataType; + } + + public String getBigDataConfig() { + return bigDataConfig; + } + + public void setBigDataConfig(String bigDataConfig) { + this.bigDataConfig = bigDataConfig == null ? null : bigDataConfig.trim(); + } + + public String getUrls() { + return this.urls == null ? null : FastJsonUtils.toJsonString(urls); + } + + public void setUrls(String urls) { + this.urls = StringUtils.isBlank(urls) ? null : FastJsonUtils.toObject(urls, List.class); + } + + public List getSubUrls() { + return urls; + } + + public void setSubUrls(List urls) { + this.urls = urls; + } + + public Byte getHttpMethod() { + return httpMethod; + } + + public void setHttpMethod(Byte httpMethod) { + this.httpMethod = httpMethod; + } + + public String getHttpHeaders() { + return this.httpHeaders == null ? null : FastJsonUtils.toJsonString(httpHeaders); + } + + public void setHttpHeaders(String httpHeaders) { + this.httpHeaders = StringUtils.isBlank(httpHeaders) ? null : FastJsonUtils.toObject(httpHeaders, Map.class); + } + + public Map getSubHttpHeaders() { + return httpHeaders; + } + + public void setSubHttpHeaders(Map httpHeaders) { + this.httpHeaders = httpHeaders; + } + + public String getHttpQueryParams() { + return this.httpQueryParams == null ? null : FastJsonUtils.toJsonString(httpQueryParams); + } + + public void setHttpQueryParams(String httpQueryParams) { + this.httpQueryParams = StringUtils.isBlank(httpQueryParams) ? null : FastJsonUtils.toObject(httpQueryParams, Map.class); + } + + public Map getSubHttpQueryParams() { + return httpQueryParams; + } + + public void setSubHttpQueryParams(Map httpQueryParams) { + this.httpQueryParams = httpQueryParams; + } + + public Byte getMsgPushType() { + return msgPushType; + } + + public void setMsgPushType(Byte msgPushType) { + this.msgPushType = msgPushType; + } + + public String getHttpToken() { + return httpToken; + } + + public void setHttpToken(String httpToken) { + this.httpToken = httpToken == null ? null : httpToken.trim(); + } + + public Integer getPushMaxConcurrency() { + return pushMaxConcurrency; + } + + public void setPushMaxConcurrency(Integer pushMaxConcurrency) { + this.pushMaxConcurrency = pushMaxConcurrency; + } + + public String getActions() { + return this.actions == null ? null : FastJsonUtils.toJsonString(actions); + } + + public void setActions(String actions) { + this.actions = StringUtils.isBlank(actions) ? null : FastJsonUtils.toObject(actions, List.class); + } + + public List getSubActions() { + return actions; + } + + public void setSubActions(List actions) { + this.actions = actions; + } + + public String getConfig() { + return this.config == null ? null : FastJsonUtils.toJsonString(this.config); + } + + public void setConfig(String config) { + this.config = StringUtils.isBlank(config) ? null : FastJsonUtils.toObject(config, ConsumeSubscriptionConfig.class); + } + + public ConsumeSubscriptionConfig getConsumeSubscriptionConfig() { + return config; + } + + public void setConsumeSubscriptionConfig(ConsumeSubscriptionConfig config) { + this.config = config; + } + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + public String getExtraParams() { + return this.extraParams == null ? null : FastJsonUtils.toJsonString(extraParams); + } + + public void setExtraParams(String extraParams) { + this.extraParams = StringUtils.isBlank(extraParams) ? null : FastJsonUtils.toObject(extraParams, Map.class); + } + + public Map getSubExtraParams() { + return extraParams; + } + + public void setSubExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getGroovy() { + return groovy; + } + + public void setGroovy(String groovy) { + this.groovy = groovy == null ? null : groovy.trim(); + } + + public String getTransit() { + return this.transit == null ? null : FastJsonUtils.toJsonString(transit); + } + + public void setTransit(String transit) { + this.transit = StringUtils.isBlank(transit) ? null : FastJsonUtils.toObject(transit, Map.class); + } + + public Map getSubTransit() { + return transit; + } + + public void setSubTransit(Map transit) { + this.transit = transit; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + ConsumeSubscription other = (ConsumeSubscription) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getGroupId() == null ? other.getGroupId() == null : this.getGroupId().equals(other.getGroupId())) + && (this.getGroupName() == null ? other.getGroupName() == null : this.getGroupName().equals(other.getGroupName())) + && (this.getTopicId() == null ? other.getTopicId() == null : this.getTopicId().equals(other.getTopicId())) + && (this.getTopicName() == null ? other.getTopicName() == null : this.getTopicName().equals(other.getTopicName())) + && (this.getClusterId() == null ? other.getClusterId() == null : this.getClusterId().equals(other.getClusterId())) + && (this.getClusterName() == null ? other.getClusterName() == null : this.getClusterName().equals(other.getClusterName())) + && (this.getPressureTraffic() == null ? other.getPressureTraffic() == null : this.getPressureTraffic().equals(other.getPressureTraffic())) + && (this.getMaxTps() == null ? other.getMaxTps() == null : this.getMaxTps().equals(other.getMaxTps())) + && (this.getAlarmType() == null ? other.getAlarmType() == null : this.getAlarmType().equals(other.getAlarmType())) + && (this.getAlarmIsEnable() == null ? other.getAlarmIsEnable() == null : this.getAlarmIsEnable().equals(other.getAlarmIsEnable())) + && (this.getAlarmLevel() == null ? other.getAlarmLevel() == null : this.getAlarmLevel().equals(other.getAlarmLevel())) + && (this.getAlarmMsgLag() == null ? other.getAlarmMsgLag() == null : this.getAlarmMsgLag().equals(other.getAlarmMsgLag())) + && (this.getAlarmDelayTime() == null ? other.getAlarmDelayTime() == null : this.getAlarmDelayTime().equals(other.getAlarmDelayTime())) + && (this.getApiType() == null ? other.getApiType() == null : this.getApiType().equals(other.getApiType())) + && (this.getConsumeTimeout() == null ? other.getConsumeTimeout() == null : this.getConsumeTimeout().equals(other.getConsumeTimeout())) + && (this.getErrorRetryTimes() == null ? other.getErrorRetryTimes() == null : this.getErrorRetryTimes().equals(other.getErrorRetryTimes())) + && (this.getRetryIntervals() == null ? other.getRetryIntervals() == null : this.getRetryIntervals().equals(other.getRetryIntervals())) + && (this.getMsgType() == null ? other.getMsgType() == null : this.getMsgType().equals(other.getMsgType())) + && (this.getEnableGroovy() == null ? other.getEnableGroovy() == null : this.getEnableGroovy().equals(other.getEnableGroovy())) + && (this.getEnableTransit() == null ? other.getEnableTransit() == null : this.getEnableTransit().equals(other.getEnableTransit())) + && (this.getEnableOrder() == null ? other.getEnableOrder() == null : this.getEnableOrder().equals(other.getEnableOrder())) + && (this.getOrderKey() == null ? other.getOrderKey() == null : this.getOrderKey().equals(other.getOrderKey())) + && (this.getConsumeType() == null ? other.getConsumeType() == null : this.getConsumeType().equals(other.getConsumeType())) + && (this.getBigDataType() == null ? other.getBigDataType() == null : this.getBigDataType().equals(other.getBigDataType())) + && (this.getBigDataConfig() == null ? other.getBigDataConfig() == null : this.getBigDataConfig().equals(other.getBigDataConfig())) + && (this.getUrls() == null ? other.getUrls() == null : this.getUrls().equals(other.getUrls())) + && (this.getHttpMethod() == null ? other.getHttpMethod() == null : this.getHttpMethod().equals(other.getHttpMethod())) + && (this.getHttpHeaders() == null ? other.getHttpHeaders() == null : this.getHttpHeaders().equals(other.getHttpHeaders())) + && (this.getHttpQueryParams() == null ? other.getHttpQueryParams() == null : this.getHttpQueryParams().equals(other.getHttpQueryParams())) + && (this.getMsgPushType() == null ? other.getMsgPushType() == null : this.getMsgPushType().equals(other.getMsgPushType())) + && (this.getHttpToken() == null ? other.getHttpToken() == null : this.getHttpToken().equals(other.getHttpToken())) + && (this.getPushMaxConcurrency() == null ? other.getPushMaxConcurrency() == null : this.getPushMaxConcurrency().equals(other.getPushMaxConcurrency())) + && (this.getActions() == null ? other.getActions() == null : this.getActions().equals(other.getActions())) + && (this.getConfig() == null ? other.getConfig() == null : this.getConfig().equals(other.getConfig())) + && (this.getState() == null ? other.getState() == null : this.getState().equals(other.getState())) + && (this.getExtraParams() == null ? other.getExtraParams() == null : this.getExtraParams().equals(other.getExtraParams())) + && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())) + && (this.getGroovy() == null ? other.getGroovy() == null : this.getGroovy().equals(other.getGroovy())) + && (this.getTransit() == null ? other.getTransit() == null : this.getTransit().equals(other.getTransit())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getGroupId() == null) ? 0 : getGroupId().hashCode()); + result = prime * result + ((getGroupName() == null) ? 0 : getGroupName().hashCode()); + result = prime * result + ((getTopicId() == null) ? 0 : getTopicId().hashCode()); + result = prime * result + ((getTopicName() == null) ? 0 : getTopicName().hashCode()); + result = prime * result + ((getClusterId() == null) ? 0 : getClusterId().hashCode()); + result = prime * result + ((getClusterName() == null) ? 0 : getClusterName().hashCode()); + result = prime * result + ((getPressureTraffic() == null) ? 0 : getPressureTraffic().hashCode()); + result = prime * result + ((getMaxTps() == null) ? 0 : getMaxTps().hashCode()); + result = prime * result + ((getAlarmType() == null) ? 0 : getAlarmType().hashCode()); + result = prime * result + ((getAlarmIsEnable() == null) ? 0 : getAlarmIsEnable().hashCode()); + result = prime * result + ((getAlarmLevel() == null) ? 0 : getAlarmLevel().hashCode()); + result = prime * result + ((getAlarmMsgLag() == null) ? 0 : getAlarmMsgLag().hashCode()); + result = prime * result + ((getAlarmDelayTime() == null) ? 0 : getAlarmDelayTime().hashCode()); + result = prime * result + ((getApiType() == null) ? 0 : getApiType().hashCode()); + result = prime * result + ((getConsumeTimeout() == null) ? 0 : getConsumeTimeout().hashCode()); + result = prime * result + ((getErrorRetryTimes() == null) ? 0 : getErrorRetryTimes().hashCode()); + result = prime * result + ((getRetryIntervals() == null) ? 0 : getRetryIntervals().hashCode()); + result = prime * result + ((getMsgType() == null) ? 0 : getMsgType().hashCode()); + result = prime * result + ((getEnableGroovy() == null) ? 0 : getEnableGroovy().hashCode()); + result = prime * result + ((getEnableTransit() == null) ? 0 : getEnableTransit().hashCode()); + result = prime * result + ((getEnableOrder() == null) ? 0 : getEnableOrder().hashCode()); + result = prime * result + ((getOrderKey() == null) ? 0 : getOrderKey().hashCode()); + result = prime * result + ((getConsumeType() == null) ? 0 : getConsumeType().hashCode()); + result = prime * result + ((getBigDataType() == null) ? 0 : getBigDataType().hashCode()); + result = prime * result + ((getBigDataConfig() == null) ? 0 : getBigDataConfig().hashCode()); + result = prime * result + ((getUrls() == null) ? 0 : getUrls().hashCode()); + result = prime * result + ((getHttpMethod() == null) ? 0 : getHttpMethod().hashCode()); + result = prime * result + ((getHttpHeaders() == null) ? 0 : getHttpHeaders().hashCode()); + result = prime * result + ((getHttpQueryParams() == null) ? 0 : getHttpQueryParams().hashCode()); + result = prime * result + ((getMsgPushType() == null) ? 0 : getMsgPushType().hashCode()); + result = prime * result + ((getHttpToken() == null) ? 0 : getHttpToken().hashCode()); + result = prime * result + ((getPushMaxConcurrency() == null) ? 0 : getPushMaxConcurrency().hashCode()); + result = prime * result + ((getActions() == null) ? 0 : getActions().hashCode()); + result = prime * result + ((getConfig() == null) ? 0 : getConfig().hashCode()); + result = prime * result + ((getState() == null) ? 0 : getState().hashCode()); + result = prime * result + ((getExtraParams() == null) ? 0 : getExtraParams().hashCode()); + result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + result = prime * result + ((getGroovy() == null) ? 0 : getGroovy().hashCode()); + result = prime * result + ((getTransit() == null) ? 0 : getTransit().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", groupId=" + groupId + + ", groupName=" + groupName + + ", topicId=" + topicId + + ", topicName=" + topicName + + ", clusterId=" + clusterId + + ", clusterName=" + clusterName + + ", pressureTraffic=" + pressureTraffic + + ", maxTps=" + maxTps + + ", alarmType=" + alarmType + + ", alarmIsEnable=" + alarmIsEnable + + ", alarmLevel=" + alarmLevel + + ", alarmMsgLag=" + alarmMsgLag + + ", alarmDelayTime=" + alarmDelayTime + + ", apiType=" + apiType + + ", consumeTimeout=" + consumeTimeout + + ", errorRetryTimes=" + errorRetryTimes + + ", retryIntervals=" + retryIntervals + + ", msgType=" + msgType + + ", enableGroovy=" + enableGroovy + + ", enableTransit=" + enableTransit + + ", enableOrder=" + enableOrder + + ", orderKey=" + orderKey + + ", consumeType=" + consumeType + + ", bigDataType=" + bigDataType + + ", bigDataConfig=" + bigDataConfig + + ", urls=" + urls + + ", httpMethod=" + httpMethod + + ", httpHeaders=" + httpHeaders + + ", httpQueryParams=" + httpQueryParams + + ", msgPushType=" + msgPushType + + ", httpToken=" + httpToken + + ", pushMaxConcurrency=" + pushMaxConcurrency + + ", actions=" + actions + + ", config=" + config + + ", state=" + state + + ", extraParams=" + extraParams + + ", remark=" + remark + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", groovy=" + groovy + + ", transit=" + transit + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscriptionCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscriptionCriteria.java new file mode 100644 index 0000000..c85eb38 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/ConsumeSubscriptionCriteria.java @@ -0,0 +1,2821 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class ConsumeSubscriptionCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public ConsumeSubscriptionCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andGroupIdIsNull() { + addCriterion("group_id is null"); + return (Criteria) this; + } + + public Criteria andGroupIdIsNotNull() { + addCriterion("group_id is not null"); + return (Criteria) this; + } + + public Criteria andGroupIdEqualTo(Long value) { + addCriterion("group_id =", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdNotEqualTo(Long value) { + addCriterion("group_id <>", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdGreaterThan(Long value) { + addCriterion("group_id >", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdGreaterThanOrEqualTo(Long value) { + addCriterion("group_id >=", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdLessThan(Long value) { + addCriterion("group_id <", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdLessThanOrEqualTo(Long value) { + addCriterion("group_id <=", value, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdIn(List values) { + addCriterion("group_id in", values, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdNotIn(List values) { + addCriterion("group_id not in", values, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdBetween(Long value1, Long value2) { + addCriterion("group_id between", value1, value2, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupIdNotBetween(Long value1, Long value2) { + addCriterion("group_id not between", value1, value2, "groupId"); + return (Criteria) this; + } + + public Criteria andGroupNameIsNull() { + addCriterion("group_name is null"); + return (Criteria) this; + } + + public Criteria andGroupNameIsNotNull() { + addCriterion("group_name is not null"); + return (Criteria) this; + } + + public Criteria andGroupNameEqualTo(String value) { + addCriterion("group_name =", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotEqualTo(String value) { + addCriterion("group_name <>", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameGreaterThan(String value) { + addCriterion("group_name >", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameGreaterThanOrEqualTo(String value) { + addCriterion("group_name >=", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLessThan(String value) { + addCriterion("group_name <", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLessThanOrEqualTo(String value) { + addCriterion("group_name <=", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameLike(String value) { + addCriterion("group_name like", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotLike(String value) { + addCriterion("group_name not like", value, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameIn(List values) { + addCriterion("group_name in", values, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotIn(List values) { + addCriterion("group_name not in", values, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameBetween(String value1, String value2) { + addCriterion("group_name between", value1, value2, "groupName"); + return (Criteria) this; + } + + public Criteria andGroupNameNotBetween(String value1, String value2) { + addCriterion("group_name not between", value1, value2, "groupName"); + return (Criteria) this; + } + + public Criteria andTopicIdIsNull() { + addCriterion("topic_id is null"); + return (Criteria) this; + } + + public Criteria andTopicIdIsNotNull() { + addCriterion("topic_id is not null"); + return (Criteria) this; + } + + public Criteria andTopicIdEqualTo(Long value) { + addCriterion("topic_id =", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotEqualTo(Long value) { + addCriterion("topic_id <>", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdGreaterThan(Long value) { + addCriterion("topic_id >", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdGreaterThanOrEqualTo(Long value) { + addCriterion("topic_id >=", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdLessThan(Long value) { + addCriterion("topic_id <", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdLessThanOrEqualTo(Long value) { + addCriterion("topic_id <=", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdIn(List values) { + addCriterion("topic_id in", values, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotIn(List values) { + addCriterion("topic_id not in", values, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdBetween(Long value1, Long value2) { + addCriterion("topic_id between", value1, value2, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotBetween(Long value1, Long value2) { + addCriterion("topic_id not between", value1, value2, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNull() { + addCriterion("topic_name is null"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNotNull() { + addCriterion("topic_name is not null"); + return (Criteria) this; + } + + public Criteria andTopicNameEqualTo(String value) { + addCriterion("topic_name =", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotEqualTo(String value) { + addCriterion("topic_name <>", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThan(String value) { + addCriterion("topic_name >", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThanOrEqualTo(String value) { + addCriterion("topic_name >=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThan(String value) { + addCriterion("topic_name <", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThanOrEqualTo(String value) { + addCriterion("topic_name <=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLike(String value) { + addCriterion("topic_name like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotLike(String value) { + addCriterion("topic_name not like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameIn(List values) { + addCriterion("topic_name in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotIn(List values) { + addCriterion("topic_name not in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameBetween(String value1, String value2) { + addCriterion("topic_name between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotBetween(String value1, String value2) { + addCriterion("topic_name not between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNull() { + addCriterion("cluster_id is null"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNotNull() { + addCriterion("cluster_id is not null"); + return (Criteria) this; + } + + public Criteria andClusterIdEqualTo(Long value) { + addCriterion("cluster_id =", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotEqualTo(Long value) { + addCriterion("cluster_id <>", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThan(Long value) { + addCriterion("cluster_id >", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThanOrEqualTo(Long value) { + addCriterion("cluster_id >=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThan(Long value) { + addCriterion("cluster_id <", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThanOrEqualTo(Long value) { + addCriterion("cluster_id <=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdIn(List values) { + addCriterion("cluster_id in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotIn(List values) { + addCriterion("cluster_id not in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdBetween(Long value1, Long value2) { + addCriterion("cluster_id between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotBetween(Long value1, Long value2) { + addCriterion("cluster_id not between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNull() { + addCriterion("cluster_name is null"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNotNull() { + addCriterion("cluster_name is not null"); + return (Criteria) this; + } + + public Criteria andClusterNameEqualTo(String value) { + addCriterion("cluster_name =", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotEqualTo(String value) { + addCriterion("cluster_name <>", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThan(String value) { + addCriterion("cluster_name >", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThanOrEqualTo(String value) { + addCriterion("cluster_name >=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThan(String value) { + addCriterion("cluster_name <", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThanOrEqualTo(String value) { + addCriterion("cluster_name <=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLike(String value) { + addCriterion("cluster_name like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotLike(String value) { + addCriterion("cluster_name not like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameIn(List values) { + addCriterion("cluster_name in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotIn(List values) { + addCriterion("cluster_name not in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameBetween(String value1, String value2) { + addCriterion("cluster_name between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotBetween(String value1, String value2) { + addCriterion("cluster_name not between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andPressureTrafficIsNull() { + addCriterion("pressure_traffic is null"); + return (Criteria) this; + } + + public Criteria andPressureTrafficIsNotNull() { + addCriterion("pressure_traffic is not null"); + return (Criteria) this; + } + + public Criteria andPressureTrafficEqualTo(Byte value) { + addCriterion("pressure_traffic =", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficNotEqualTo(Byte value) { + addCriterion("pressure_traffic <>", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficGreaterThan(Byte value) { + addCriterion("pressure_traffic >", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficGreaterThanOrEqualTo(Byte value) { + addCriterion("pressure_traffic >=", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficLessThan(Byte value) { + addCriterion("pressure_traffic <", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficLessThanOrEqualTo(Byte value) { + addCriterion("pressure_traffic <=", value, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficIn(List values) { + addCriterion("pressure_traffic in", values, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficNotIn(List values) { + addCriterion("pressure_traffic not in", values, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficBetween(Byte value1, Byte value2) { + addCriterion("pressure_traffic between", value1, value2, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andPressureTrafficNotBetween(Byte value1, Byte value2) { + addCriterion("pressure_traffic not between", value1, value2, "pressureTraffic"); + return (Criteria) this; + } + + public Criteria andMaxTpsIsNull() { + addCriterion("max_tps is null"); + return (Criteria) this; + } + + public Criteria andMaxTpsIsNotNull() { + addCriterion("max_tps is not null"); + return (Criteria) this; + } + + public Criteria andMaxTpsEqualTo(Double value) { + addCriterion("max_tps =", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsNotEqualTo(Double value) { + addCriterion("max_tps <>", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsGreaterThan(Double value) { + addCriterion("max_tps >", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsGreaterThanOrEqualTo(Double value) { + addCriterion("max_tps >=", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsLessThan(Double value) { + addCriterion("max_tps <", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsLessThanOrEqualTo(Double value) { + addCriterion("max_tps <=", value, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsIn(List values) { + addCriterion("max_tps in", values, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsNotIn(List values) { + addCriterion("max_tps not in", values, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsBetween(Double value1, Double value2) { + addCriterion("max_tps between", value1, value2, "maxTps"); + return (Criteria) this; + } + + public Criteria andMaxTpsNotBetween(Double value1, Double value2) { + addCriterion("max_tps not between", value1, value2, "maxTps"); + return (Criteria) this; + } + + public Criteria andAlarmTypeIsNull() { + addCriterion("alarm_type is null"); + return (Criteria) this; + } + + public Criteria andAlarmTypeIsNotNull() { + addCriterion("alarm_type is not null"); + return (Criteria) this; + } + + public Criteria andAlarmTypeEqualTo(Byte value) { + addCriterion("alarm_type =", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeNotEqualTo(Byte value) { + addCriterion("alarm_type <>", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeGreaterThan(Byte value) { + addCriterion("alarm_type >", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_type >=", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeLessThan(Byte value) { + addCriterion("alarm_type <", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeLessThanOrEqualTo(Byte value) { + addCriterion("alarm_type <=", value, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeIn(List values) { + addCriterion("alarm_type in", values, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeNotIn(List values) { + addCriterion("alarm_type not in", values, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeBetween(Byte value1, Byte value2) { + addCriterion("alarm_type between", value1, value2, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmTypeNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_type not between", value1, value2, "alarmType"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNull() { + addCriterion("alarm_is_enable is null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNotNull() { + addCriterion("alarm_is_enable is not null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableEqualTo(Byte value) { + addCriterion("alarm_is_enable =", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotEqualTo(Byte value) { + addCriterion("alarm_is_enable <>", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThan(Byte value) { + addCriterion("alarm_is_enable >", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable >=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThan(Byte value) { + addCriterion("alarm_is_enable <", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable <=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIn(List values) { + addCriterion("alarm_is_enable in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotIn(List values) { + addCriterion("alarm_is_enable not in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable not between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIsNull() { + addCriterion("alarm_level is null"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIsNotNull() { + addCriterion("alarm_level is not null"); + return (Criteria) this; + } + + public Criteria andAlarmLevelEqualTo(Byte value) { + addCriterion("alarm_level =", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotEqualTo(Byte value) { + addCriterion("alarm_level <>", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelGreaterThan(Byte value) { + addCriterion("alarm_level >", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_level >=", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelLessThan(Byte value) { + addCriterion("alarm_level <", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelLessThanOrEqualTo(Byte value) { + addCriterion("alarm_level <=", value, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelIn(List values) { + addCriterion("alarm_level in", values, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotIn(List values) { + addCriterion("alarm_level not in", values, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelBetween(Byte value1, Byte value2) { + addCriterion("alarm_level between", value1, value2, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmLevelNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_level not between", value1, value2, "alarmLevel"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIsNull() { + addCriterion("alarm_msg_lag is null"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIsNotNull() { + addCriterion("alarm_msg_lag is not null"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagEqualTo(Integer value) { + addCriterion("alarm_msg_lag =", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotEqualTo(Integer value) { + addCriterion("alarm_msg_lag <>", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagGreaterThan(Integer value) { + addCriterion("alarm_msg_lag >", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagGreaterThanOrEqualTo(Integer value) { + addCriterion("alarm_msg_lag >=", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagLessThan(Integer value) { + addCriterion("alarm_msg_lag <", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagLessThanOrEqualTo(Integer value) { + addCriterion("alarm_msg_lag <=", value, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagIn(List values) { + addCriterion("alarm_msg_lag in", values, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotIn(List values) { + addCriterion("alarm_msg_lag not in", values, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagBetween(Integer value1, Integer value2) { + addCriterion("alarm_msg_lag between", value1, value2, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmMsgLagNotBetween(Integer value1, Integer value2) { + addCriterion("alarm_msg_lag not between", value1, value2, "alarmMsgLag"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIsNull() { + addCriterion("alarm_delay_time is null"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIsNotNull() { + addCriterion("alarm_delay_time is not null"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeEqualTo(Integer value) { + addCriterion("alarm_delay_time =", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotEqualTo(Integer value) { + addCriterion("alarm_delay_time <>", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeGreaterThan(Integer value) { + addCriterion("alarm_delay_time >", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeGreaterThanOrEqualTo(Integer value) { + addCriterion("alarm_delay_time >=", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeLessThan(Integer value) { + addCriterion("alarm_delay_time <", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeLessThanOrEqualTo(Integer value) { + addCriterion("alarm_delay_time <=", value, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeIn(List values) { + addCriterion("alarm_delay_time in", values, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotIn(List values) { + addCriterion("alarm_delay_time not in", values, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeBetween(Integer value1, Integer value2) { + addCriterion("alarm_delay_time between", value1, value2, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andAlarmDelayTimeNotBetween(Integer value1, Integer value2) { + addCriterion("alarm_delay_time not between", value1, value2, "alarmDelayTime"); + return (Criteria) this; + } + + public Criteria andApiTypeIsNull() { + addCriterion("api_type is null"); + return (Criteria) this; + } + + public Criteria andApiTypeIsNotNull() { + addCriterion("api_type is not null"); + return (Criteria) this; + } + + public Criteria andApiTypeEqualTo(Byte value) { + addCriterion("api_type =", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeNotEqualTo(Byte value) { + addCriterion("api_type <>", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeGreaterThan(Byte value) { + addCriterion("api_type >", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("api_type >=", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeLessThan(Byte value) { + addCriterion("api_type <", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeLessThanOrEqualTo(Byte value) { + addCriterion("api_type <=", value, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeIn(List values) { + addCriterion("api_type in", values, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeNotIn(List values) { + addCriterion("api_type not in", values, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeBetween(Byte value1, Byte value2) { + addCriterion("api_type between", value1, value2, "apiType"); + return (Criteria) this; + } + + public Criteria andApiTypeNotBetween(Byte value1, Byte value2) { + addCriterion("api_type not between", value1, value2, "apiType"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutIsNull() { + addCriterion("consume_timeout is null"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutIsNotNull() { + addCriterion("consume_timeout is not null"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutEqualTo(Integer value) { + addCriterion("consume_timeout =", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutNotEqualTo(Integer value) { + addCriterion("consume_timeout <>", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutGreaterThan(Integer value) { + addCriterion("consume_timeout >", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutGreaterThanOrEqualTo(Integer value) { + addCriterion("consume_timeout >=", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutLessThan(Integer value) { + addCriterion("consume_timeout <", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutLessThanOrEqualTo(Integer value) { + addCriterion("consume_timeout <=", value, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutIn(List values) { + addCriterion("consume_timeout in", values, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutNotIn(List values) { + addCriterion("consume_timeout not in", values, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutBetween(Integer value1, Integer value2) { + addCriterion("consume_timeout between", value1, value2, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andConsumeTimeoutNotBetween(Integer value1, Integer value2) { + addCriterion("consume_timeout not between", value1, value2, "consumeTimeout"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesIsNull() { + addCriterion("error_retry_times is null"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesIsNotNull() { + addCriterion("error_retry_times is not null"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesEqualTo(Integer value) { + addCriterion("error_retry_times =", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesNotEqualTo(Integer value) { + addCriterion("error_retry_times <>", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesGreaterThan(Integer value) { + addCriterion("error_retry_times >", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesGreaterThanOrEqualTo(Integer value) { + addCriterion("error_retry_times >=", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesLessThan(Integer value) { + addCriterion("error_retry_times <", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesLessThanOrEqualTo(Integer value) { + addCriterion("error_retry_times <=", value, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesIn(List values) { + addCriterion("error_retry_times in", values, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesNotIn(List values) { + addCriterion("error_retry_times not in", values, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesBetween(Integer value1, Integer value2) { + addCriterion("error_retry_times between", value1, value2, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andErrorRetryTimesNotBetween(Integer value1, Integer value2) { + addCriterion("error_retry_times not between", value1, value2, "errorRetryTimes"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsIsNull() { + addCriterion("retry_intervals is null"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsIsNotNull() { + addCriterion("retry_intervals is not null"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsEqualTo(String value) { + addCriterion("retry_intervals =", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsNotEqualTo(String value) { + addCriterion("retry_intervals <>", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsGreaterThan(String value) { + addCriterion("retry_intervals >", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsGreaterThanOrEqualTo(String value) { + addCriterion("retry_intervals >=", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsLessThan(String value) { + addCriterion("retry_intervals <", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsLessThanOrEqualTo(String value) { + addCriterion("retry_intervals <=", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsLike(String value) { + addCriterion("retry_intervals like", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsNotLike(String value) { + addCriterion("retry_intervals not like", value, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsIn(List values) { + addCriterion("retry_intervals in", values, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsNotIn(List values) { + addCriterion("retry_intervals not in", values, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsBetween(String value1, String value2) { + addCriterion("retry_intervals between", value1, value2, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andRetryIntervalsNotBetween(String value1, String value2) { + addCriterion("retry_intervals not between", value1, value2, "retryIntervals"); + return (Criteria) this; + } + + public Criteria andMsgTypeIsNull() { + addCriterion("msg_type is null"); + return (Criteria) this; + } + + public Criteria andMsgTypeIsNotNull() { + addCriterion("msg_type is not null"); + return (Criteria) this; + } + + public Criteria andMsgTypeEqualTo(Byte value) { + addCriterion("msg_type =", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeNotEqualTo(Byte value) { + addCriterion("msg_type <>", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeGreaterThan(Byte value) { + addCriterion("msg_type >", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("msg_type >=", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeLessThan(Byte value) { + addCriterion("msg_type <", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeLessThanOrEqualTo(Byte value) { + addCriterion("msg_type <=", value, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeIn(List values) { + addCriterion("msg_type in", values, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeNotIn(List values) { + addCriterion("msg_type not in", values, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeBetween(Byte value1, Byte value2) { + addCriterion("msg_type between", value1, value2, "msgType"); + return (Criteria) this; + } + + public Criteria andMsgTypeNotBetween(Byte value1, Byte value2) { + addCriterion("msg_type not between", value1, value2, "msgType"); + return (Criteria) this; + } + + public Criteria andEnableGroovyIsNull() { + addCriterion("enable_groovy is null"); + return (Criteria) this; + } + + public Criteria andEnableGroovyIsNotNull() { + addCriterion("enable_groovy is not null"); + return (Criteria) this; + } + + public Criteria andEnableGroovyEqualTo(Byte value) { + addCriterion("enable_groovy =", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyNotEqualTo(Byte value) { + addCriterion("enable_groovy <>", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyGreaterThan(Byte value) { + addCriterion("enable_groovy >", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyGreaterThanOrEqualTo(Byte value) { + addCriterion("enable_groovy >=", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyLessThan(Byte value) { + addCriterion("enable_groovy <", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyLessThanOrEqualTo(Byte value) { + addCriterion("enable_groovy <=", value, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyIn(List values) { + addCriterion("enable_groovy in", values, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyNotIn(List values) { + addCriterion("enable_groovy not in", values, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyBetween(Byte value1, Byte value2) { + addCriterion("enable_groovy between", value1, value2, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableGroovyNotBetween(Byte value1, Byte value2) { + addCriterion("enable_groovy not between", value1, value2, "enableGroovy"); + return (Criteria) this; + } + + public Criteria andEnableTransitIsNull() { + addCriterion("enable_transit is null"); + return (Criteria) this; + } + + public Criteria andEnableTransitIsNotNull() { + addCriterion("enable_transit is not null"); + return (Criteria) this; + } + + public Criteria andEnableTransitEqualTo(Byte value) { + addCriterion("enable_transit =", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitNotEqualTo(Byte value) { + addCriterion("enable_transit <>", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitGreaterThan(Byte value) { + addCriterion("enable_transit >", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitGreaterThanOrEqualTo(Byte value) { + addCriterion("enable_transit >=", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitLessThan(Byte value) { + addCriterion("enable_transit <", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitLessThanOrEqualTo(Byte value) { + addCriterion("enable_transit <=", value, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitIn(List values) { + addCriterion("enable_transit in", values, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitNotIn(List values) { + addCriterion("enable_transit not in", values, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitBetween(Byte value1, Byte value2) { + addCriterion("enable_transit between", value1, value2, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableTransitNotBetween(Byte value1, Byte value2) { + addCriterion("enable_transit not between", value1, value2, "enableTransit"); + return (Criteria) this; + } + + public Criteria andEnableOrderIsNull() { + addCriterion("enable_order is null"); + return (Criteria) this; + } + + public Criteria andEnableOrderIsNotNull() { + addCriterion("enable_order is not null"); + return (Criteria) this; + } + + public Criteria andEnableOrderEqualTo(Byte value) { + addCriterion("enable_order =", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderNotEqualTo(Byte value) { + addCriterion("enable_order <>", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderGreaterThan(Byte value) { + addCriterion("enable_order >", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderGreaterThanOrEqualTo(Byte value) { + addCriterion("enable_order >=", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderLessThan(Byte value) { + addCriterion("enable_order <", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderLessThanOrEqualTo(Byte value) { + addCriterion("enable_order <=", value, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderIn(List values) { + addCriterion("enable_order in", values, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderNotIn(List values) { + addCriterion("enable_order not in", values, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderBetween(Byte value1, Byte value2) { + addCriterion("enable_order between", value1, value2, "enableOrder"); + return (Criteria) this; + } + + public Criteria andEnableOrderNotBetween(Byte value1, Byte value2) { + addCriterion("enable_order not between", value1, value2, "enableOrder"); + return (Criteria) this; + } + + public Criteria andOrderKeyIsNull() { + addCriterion("order_key is null"); + return (Criteria) this; + } + + public Criteria andOrderKeyIsNotNull() { + addCriterion("order_key is not null"); + return (Criteria) this; + } + + public Criteria andOrderKeyEqualTo(String value) { + addCriterion("order_key =", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyNotEqualTo(String value) { + addCriterion("order_key <>", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyGreaterThan(String value) { + addCriterion("order_key >", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyGreaterThanOrEqualTo(String value) { + addCriterion("order_key >=", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyLessThan(String value) { + addCriterion("order_key <", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyLessThanOrEqualTo(String value) { + addCriterion("order_key <=", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyLike(String value) { + addCriterion("order_key like", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyNotLike(String value) { + addCriterion("order_key not like", value, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyIn(List values) { + addCriterion("order_key in", values, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyNotIn(List values) { + addCriterion("order_key not in", values, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyBetween(String value1, String value2) { + addCriterion("order_key between", value1, value2, "orderKey"); + return (Criteria) this; + } + + public Criteria andOrderKeyNotBetween(String value1, String value2) { + addCriterion("order_key not between", value1, value2, "orderKey"); + return (Criteria) this; + } + + public Criteria andConsumeTypeIsNull() { + addCriterion("consume_type is null"); + return (Criteria) this; + } + + public Criteria andConsumeTypeIsNotNull() { + addCriterion("consume_type is not null"); + return (Criteria) this; + } + + public Criteria andConsumeTypeEqualTo(Byte value) { + addCriterion("consume_type =", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeNotEqualTo(Byte value) { + addCriterion("consume_type <>", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeGreaterThan(Byte value) { + addCriterion("consume_type >", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("consume_type >=", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeLessThan(Byte value) { + addCriterion("consume_type <", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeLessThanOrEqualTo(Byte value) { + addCriterion("consume_type <=", value, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeIn(List values) { + addCriterion("consume_type in", values, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeNotIn(List values) { + addCriterion("consume_type not in", values, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeBetween(Byte value1, Byte value2) { + addCriterion("consume_type between", value1, value2, "consumeType"); + return (Criteria) this; + } + + public Criteria andConsumeTypeNotBetween(Byte value1, Byte value2) { + addCriterion("consume_type not between", value1, value2, "consumeType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeIsNull() { + addCriterion("big_data_type is null"); + return (Criteria) this; + } + + public Criteria andBigDataTypeIsNotNull() { + addCriterion("big_data_type is not null"); + return (Criteria) this; + } + + public Criteria andBigDataTypeEqualTo(Byte value) { + addCriterion("big_data_type =", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeNotEqualTo(Byte value) { + addCriterion("big_data_type <>", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeGreaterThan(Byte value) { + addCriterion("big_data_type >", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("big_data_type >=", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeLessThan(Byte value) { + addCriterion("big_data_type <", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeLessThanOrEqualTo(Byte value) { + addCriterion("big_data_type <=", value, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeIn(List values) { + addCriterion("big_data_type in", values, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeNotIn(List values) { + addCriterion("big_data_type not in", values, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeBetween(Byte value1, Byte value2) { + addCriterion("big_data_type between", value1, value2, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataTypeNotBetween(Byte value1, Byte value2) { + addCriterion("big_data_type not between", value1, value2, "bigDataType"); + return (Criteria) this; + } + + public Criteria andBigDataConfigIsNull() { + addCriterion("big_data_config is null"); + return (Criteria) this; + } + + public Criteria andBigDataConfigIsNotNull() { + addCriterion("big_data_config is not null"); + return (Criteria) this; + } + + public Criteria andBigDataConfigEqualTo(String value) { + addCriterion("big_data_config =", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigNotEqualTo(String value) { + addCriterion("big_data_config <>", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigGreaterThan(String value) { + addCriterion("big_data_config >", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigGreaterThanOrEqualTo(String value) { + addCriterion("big_data_config >=", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigLessThan(String value) { + addCriterion("big_data_config <", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigLessThanOrEqualTo(String value) { + addCriterion("big_data_config <=", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigLike(String value) { + addCriterion("big_data_config like", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigNotLike(String value) { + addCriterion("big_data_config not like", value, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigIn(List values) { + addCriterion("big_data_config in", values, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigNotIn(List values) { + addCriterion("big_data_config not in", values, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigBetween(String value1, String value2) { + addCriterion("big_data_config between", value1, value2, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andBigDataConfigNotBetween(String value1, String value2) { + addCriterion("big_data_config not between", value1, value2, "bigDataConfig"); + return (Criteria) this; + } + + public Criteria andUrlsIsNull() { + addCriterion("urls is null"); + return (Criteria) this; + } + + public Criteria andUrlsIsNotNull() { + addCriterion("urls is not null"); + return (Criteria) this; + } + + public Criteria andUrlsEqualTo(String value) { + addCriterion("urls =", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsNotEqualTo(String value) { + addCriterion("urls <>", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsGreaterThan(String value) { + addCriterion("urls >", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsGreaterThanOrEqualTo(String value) { + addCriterion("urls >=", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsLessThan(String value) { + addCriterion("urls <", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsLessThanOrEqualTo(String value) { + addCriterion("urls <=", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsLike(String value) { + addCriterion("urls like", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsNotLike(String value) { + addCriterion("urls not like", value, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsIn(List values) { + addCriterion("urls in", values, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsNotIn(List values) { + addCriterion("urls not in", values, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsBetween(String value1, String value2) { + addCriterion("urls between", value1, value2, "urls"); + return (Criteria) this; + } + + public Criteria andUrlsNotBetween(String value1, String value2) { + addCriterion("urls not between", value1, value2, "urls"); + return (Criteria) this; + } + + public Criteria andHttpMethodIsNull() { + addCriterion("http_method is null"); + return (Criteria) this; + } + + public Criteria andHttpMethodIsNotNull() { + addCriterion("http_method is not null"); + return (Criteria) this; + } + + public Criteria andHttpMethodEqualTo(Byte value) { + addCriterion("http_method =", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodNotEqualTo(Byte value) { + addCriterion("http_method <>", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodGreaterThan(Byte value) { + addCriterion("http_method >", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodGreaterThanOrEqualTo(Byte value) { + addCriterion("http_method >=", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodLessThan(Byte value) { + addCriterion("http_method <", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodLessThanOrEqualTo(Byte value) { + addCriterion("http_method <=", value, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodIn(List values) { + addCriterion("http_method in", values, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodNotIn(List values) { + addCriterion("http_method not in", values, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodBetween(Byte value1, Byte value2) { + addCriterion("http_method between", value1, value2, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpMethodNotBetween(Byte value1, Byte value2) { + addCriterion("http_method not between", value1, value2, "httpMethod"); + return (Criteria) this; + } + + public Criteria andHttpHeadersIsNull() { + addCriterion("http_headers is null"); + return (Criteria) this; + } + + public Criteria andHttpHeadersIsNotNull() { + addCriterion("http_headers is not null"); + return (Criteria) this; + } + + public Criteria andHttpHeadersEqualTo(String value) { + addCriterion("http_headers =", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersNotEqualTo(String value) { + addCriterion("http_headers <>", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersGreaterThan(String value) { + addCriterion("http_headers >", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersGreaterThanOrEqualTo(String value) { + addCriterion("http_headers >=", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersLessThan(String value) { + addCriterion("http_headers <", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersLessThanOrEqualTo(String value) { + addCriterion("http_headers <=", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersLike(String value) { + addCriterion("http_headers like", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersNotLike(String value) { + addCriterion("http_headers not like", value, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersIn(List values) { + addCriterion("http_headers in", values, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersNotIn(List values) { + addCriterion("http_headers not in", values, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersBetween(String value1, String value2) { + addCriterion("http_headers between", value1, value2, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpHeadersNotBetween(String value1, String value2) { + addCriterion("http_headers not between", value1, value2, "httpHeaders"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsIsNull() { + addCriterion("http_query_params is null"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsIsNotNull() { + addCriterion("http_query_params is not null"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsEqualTo(String value) { + addCriterion("http_query_params =", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsNotEqualTo(String value) { + addCriterion("http_query_params <>", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsGreaterThan(String value) { + addCriterion("http_query_params >", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsGreaterThanOrEqualTo(String value) { + addCriterion("http_query_params >=", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsLessThan(String value) { + addCriterion("http_query_params <", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsLessThanOrEqualTo(String value) { + addCriterion("http_query_params <=", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsLike(String value) { + addCriterion("http_query_params like", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsNotLike(String value) { + addCriterion("http_query_params not like", value, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsIn(List values) { + addCriterion("http_query_params in", values, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsNotIn(List values) { + addCriterion("http_query_params not in", values, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsBetween(String value1, String value2) { + addCriterion("http_query_params between", value1, value2, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andHttpQueryParamsNotBetween(String value1, String value2) { + addCriterion("http_query_params not between", value1, value2, "httpQueryParams"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeIsNull() { + addCriterion("msg_push_type is null"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeIsNotNull() { + addCriterion("msg_push_type is not null"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeEqualTo(Byte value) { + addCriterion("msg_push_type =", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeNotEqualTo(Byte value) { + addCriterion("msg_push_type <>", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeGreaterThan(Byte value) { + addCriterion("msg_push_type >", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("msg_push_type >=", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeLessThan(Byte value) { + addCriterion("msg_push_type <", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeLessThanOrEqualTo(Byte value) { + addCriterion("msg_push_type <=", value, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeIn(List values) { + addCriterion("msg_push_type in", values, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeNotIn(List values) { + addCriterion("msg_push_type not in", values, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeBetween(Byte value1, Byte value2) { + addCriterion("msg_push_type between", value1, value2, "msgPushType"); + return (Criteria) this; + } + + public Criteria andMsgPushTypeNotBetween(Byte value1, Byte value2) { + addCriterion("msg_push_type not between", value1, value2, "msgPushType"); + return (Criteria) this; + } + + public Criteria andHttpTokenIsNull() { + addCriterion("http_token is null"); + return (Criteria) this; + } + + public Criteria andHttpTokenIsNotNull() { + addCriterion("http_token is not null"); + return (Criteria) this; + } + + public Criteria andHttpTokenEqualTo(String value) { + addCriterion("http_token =", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenNotEqualTo(String value) { + addCriterion("http_token <>", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenGreaterThan(String value) { + addCriterion("http_token >", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenGreaterThanOrEqualTo(String value) { + addCriterion("http_token >=", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenLessThan(String value) { + addCriterion("http_token <", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenLessThanOrEqualTo(String value) { + addCriterion("http_token <=", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenLike(String value) { + addCriterion("http_token like", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenNotLike(String value) { + addCriterion("http_token not like", value, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenIn(List values) { + addCriterion("http_token in", values, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenNotIn(List values) { + addCriterion("http_token not in", values, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenBetween(String value1, String value2) { + addCriterion("http_token between", value1, value2, "httpToken"); + return (Criteria) this; + } + + public Criteria andHttpTokenNotBetween(String value1, String value2) { + addCriterion("http_token not between", value1, value2, "httpToken"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyIsNull() { + addCriterion("push_max_concurrency is null"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyIsNotNull() { + addCriterion("push_max_concurrency is not null"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyEqualTo(Integer value) { + addCriterion("push_max_concurrency =", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyNotEqualTo(Integer value) { + addCriterion("push_max_concurrency <>", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyGreaterThan(Integer value) { + addCriterion("push_max_concurrency >", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyGreaterThanOrEqualTo(Integer value) { + addCriterion("push_max_concurrency >=", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyLessThan(Integer value) { + addCriterion("push_max_concurrency <", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyLessThanOrEqualTo(Integer value) { + addCriterion("push_max_concurrency <=", value, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyIn(List values) { + addCriterion("push_max_concurrency in", values, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyNotIn(List values) { + addCriterion("push_max_concurrency not in", values, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyBetween(Integer value1, Integer value2) { + addCriterion("push_max_concurrency between", value1, value2, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andPushMaxConcurrencyNotBetween(Integer value1, Integer value2) { + addCriterion("push_max_concurrency not between", value1, value2, "pushMaxConcurrency"); + return (Criteria) this; + } + + public Criteria andActionsIsNull() { + addCriterion("actions is null"); + return (Criteria) this; + } + + public Criteria andActionsIsNotNull() { + addCriterion("actions is not null"); + return (Criteria) this; + } + + public Criteria andActionsEqualTo(String value) { + addCriterion("actions =", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsNotEqualTo(String value) { + addCriterion("actions <>", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsGreaterThan(String value) { + addCriterion("actions >", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsGreaterThanOrEqualTo(String value) { + addCriterion("actions >=", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsLessThan(String value) { + addCriterion("actions <", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsLessThanOrEqualTo(String value) { + addCriterion("actions <=", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsLike(String value) { + addCriterion("actions like", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsNotLike(String value) { + addCriterion("actions not like", value, "actions"); + return (Criteria) this; + } + + public Criteria andActionsIn(List values) { + addCriterion("actions in", values, "actions"); + return (Criteria) this; + } + + public Criteria andActionsNotIn(List values) { + addCriterion("actions not in", values, "actions"); + return (Criteria) this; + } + + public Criteria andActionsBetween(String value1, String value2) { + addCriterion("actions between", value1, value2, "actions"); + return (Criteria) this; + } + + public Criteria andActionsNotBetween(String value1, String value2) { + addCriterion("actions not between", value1, value2, "actions"); + return (Criteria) this; + } + + public Criteria andConfigIsNull() { + addCriterion("config is null"); + return (Criteria) this; + } + + public Criteria andConfigIsNotNull() { + addCriterion("config is not null"); + return (Criteria) this; + } + + public Criteria andConfigEqualTo(String value) { + addCriterion("config =", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotEqualTo(String value) { + addCriterion("config <>", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThan(String value) { + addCriterion("config >", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThanOrEqualTo(String value) { + addCriterion("config >=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThan(String value) { + addCriterion("config <", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThanOrEqualTo(String value) { + addCriterion("config <=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLike(String value) { + addCriterion("config like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotLike(String value) { + addCriterion("config not like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigIn(List values) { + addCriterion("config in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotIn(List values) { + addCriterion("config not in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigBetween(String value1, String value2) { + addCriterion("config between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotBetween(String value1, String value2) { + addCriterion("config not between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andStateIsNull() { + addCriterion("state is null"); + return (Criteria) this; + } + + public Criteria andStateIsNotNull() { + addCriterion("state is not null"); + return (Criteria) this; + } + + public Criteria andStateEqualTo(Byte value) { + addCriterion("state =", value, "state"); + return (Criteria) this; + } + + public Criteria andStateNotEqualTo(Byte value) { + addCriterion("state <>", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThan(Byte value) { + addCriterion("state >", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThanOrEqualTo(Byte value) { + addCriterion("state >=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThan(Byte value) { + addCriterion("state <", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThanOrEqualTo(Byte value) { + addCriterion("state <=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateIn(List values) { + addCriterion("state in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateNotIn(List values) { + addCriterion("state not in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateBetween(Byte value1, Byte value2) { + addCriterion("state between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andStateNotBetween(Byte value1, Byte value2) { + addCriterion("state not between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNull() { + addCriterion("extra_params is null"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNotNull() { + addCriterion("extra_params is not null"); + return (Criteria) this; + } + + public Criteria andExtraParamsEqualTo(String value) { + addCriterion("extra_params =", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotEqualTo(String value) { + addCriterion("extra_params <>", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThan(String value) { + addCriterion("extra_params >", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThanOrEqualTo(String value) { + addCriterion("extra_params >=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThan(String value) { + addCriterion("extra_params <", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThanOrEqualTo(String value) { + addCriterion("extra_params <=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLike(String value) { + addCriterion("extra_params like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotLike(String value) { + addCriterion("extra_params not like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsIn(List values) { + addCriterion("extra_params in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotIn(List values) { + addCriterion("extra_params not in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsBetween(String value1, String value2) { + addCriterion("extra_params between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotBetween(String value1, String value2) { + addCriterion("extra_params not between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Idc.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Idc.java new file mode 100644 index 0000000..c270fdb --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Idc.java @@ -0,0 +1,148 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; + + +public class Idc implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * 集群名称 + * default = + * length = 256 + */ + private String name; + + /** + * 备注 + * default = + * length = 1024 + */ + private String remark; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + Idc other = (Idc) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName())) + && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); + result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", name=" + name + + ", remark=" + remark + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/IdcCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/IdcCriteria.java new file mode 100644 index 0000000..49b0c66 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/IdcCriteria.java @@ -0,0 +1,601 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class IdcCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public IdcCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServer.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServer.java new file mode 100644 index 0000000..7926b67 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServer.java @@ -0,0 +1,166 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; + + +public class MqServer implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * mq 集群名称 + * default = + * length = 256 + */ + private String name; + + /** + * mq 集群地址 + * default = + * length = 512 + */ + private String addr; + + /** + * mq 集群类型 0:rmq 1:kafka 2:virtual kafka + * default = 0 + * length = 3 + */ + private Byte type; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getAddr() { + return addr; + } + + public void setAddr(String addr) { + this.addr = addr == null ? null : addr.trim(); + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + MqServer other = (MqServer) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName())) + && (this.getAddr() == null ? other.getAddr() == null : this.getAddr().equals(other.getAddr())) + && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getName() == null) ? 0 : getName().hashCode()); + result = prime * result + ((getAddr() == null) ? 0 : getAddr().hashCode()); + result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", name=" + name + + ", addr=" + addr + + ", type=" + type + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServerCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServerCriteria.java new file mode 100644 index 0000000..7681e08 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/MqServerCriteria.java @@ -0,0 +1,661 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class MqServerCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public MqServerCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andAddrIsNull() { + addCriterion("addr is null"); + return (Criteria) this; + } + + public Criteria andAddrIsNotNull() { + addCriterion("addr is not null"); + return (Criteria) this; + } + + public Criteria andAddrEqualTo(String value) { + addCriterion("addr =", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrNotEqualTo(String value) { + addCriterion("addr <>", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrGreaterThan(String value) { + addCriterion("addr >", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrGreaterThanOrEqualTo(String value) { + addCriterion("addr >=", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrLessThan(String value) { + addCriterion("addr <", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrLessThanOrEqualTo(String value) { + addCriterion("addr <=", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrLike(String value) { + addCriterion("addr like", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrNotLike(String value) { + addCriterion("addr not like", value, "addr"); + return (Criteria) this; + } + + public Criteria andAddrIn(List values) { + addCriterion("addr in", values, "addr"); + return (Criteria) this; + } + + public Criteria andAddrNotIn(List values) { + addCriterion("addr not in", values, "addr"); + return (Criteria) this; + } + + public Criteria andAddrBetween(String value1, String value2) { + addCriterion("addr between", value1, value2, "addr"); + return (Criteria) this; + } + + public Criteria andAddrNotBetween(String value1, String value2) { + addCriterion("addr not between", value1, value2, "addr"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(Byte value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(Byte value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(Byte value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(Byte value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(Byte value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(Byte value1, Byte value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(Byte value1, Byte value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Node.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Node.java new file mode 100644 index 0000000..cbb0f4c --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Node.java @@ -0,0 +1,202 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; + + +public class Node implements Serializable { + /** + * 自增id + * default = null + * length = 20 + */ + private Long id; + + /** + * 集群id + * default = 0 + * length = 19 + */ + private Long clusterId; + + /** + * 机型id + * default = 0 + * length = 19 + */ + private Long modelId; + + /** + * broker主节点 + * default = 0 + * length = 19 + */ + private Long masterId; + + /** + * 机器地址 ip:port + * default = + * length = 128 + */ + private String host; + + /** + * node类型, kafkabroker, rmqbroker xxxx + * default = 0 + * length = 3 + */ + private Byte nodeType; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public Long getModelId() { + return modelId; + } + + public void setModelId(Long modelId) { + this.modelId = modelId; + } + + public Long getMasterId() { + return masterId; + } + + public void setMasterId(Long masterId) { + this.masterId = masterId; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host == null ? null : host.trim(); + } + + public Byte getNodeType() { + return nodeType; + } + + public void setNodeType(Byte nodeType) { + this.nodeType = nodeType; + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + Node other = (Node) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getClusterId() == null ? other.getClusterId() == null : this.getClusterId().equals(other.getClusterId())) + && (this.getModelId() == null ? other.getModelId() == null : this.getModelId().equals(other.getModelId())) + && (this.getMasterId() == null ? other.getMasterId() == null : this.getMasterId().equals(other.getMasterId())) + && (this.getHost() == null ? other.getHost() == null : this.getHost().equals(other.getHost())) + && (this.getNodeType() == null ? other.getNodeType() == null : this.getNodeType().equals(other.getNodeType())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getClusterId() == null) ? 0 : getClusterId().hashCode()); + result = prime * result + ((getModelId() == null) ? 0 : getModelId().hashCode()); + result = prime * result + ((getMasterId() == null) ? 0 : getMasterId().hashCode()); + result = prime * result + ((getHost() == null) ? 0 : getHost().hashCode()); + result = prime * result + ((getNodeType() == null) ? 0 : getNodeType().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", clusterId=" + clusterId + + ", modelId=" + modelId + + ", masterId=" + masterId + + ", host=" + host + + ", nodeType=" + nodeType + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/NodeCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/NodeCriteria.java new file mode 100644 index 0000000..288e45b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/NodeCriteria.java @@ -0,0 +1,771 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class NodeCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public NodeCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNull() { + addCriterion("cluster_id is null"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNotNull() { + addCriterion("cluster_id is not null"); + return (Criteria) this; + } + + public Criteria andClusterIdEqualTo(Long value) { + addCriterion("cluster_id =", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotEqualTo(Long value) { + addCriterion("cluster_id <>", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThan(Long value) { + addCriterion("cluster_id >", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThanOrEqualTo(Long value) { + addCriterion("cluster_id >=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThan(Long value) { + addCriterion("cluster_id <", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThanOrEqualTo(Long value) { + addCriterion("cluster_id <=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdIn(List values) { + addCriterion("cluster_id in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotIn(List values) { + addCriterion("cluster_id not in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdBetween(Long value1, Long value2) { + addCriterion("cluster_id between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotBetween(Long value1, Long value2) { + addCriterion("cluster_id not between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andModelIdIsNull() { + addCriterion("model_id is null"); + return (Criteria) this; + } + + public Criteria andModelIdIsNotNull() { + addCriterion("model_id is not null"); + return (Criteria) this; + } + + public Criteria andModelIdEqualTo(Long value) { + addCriterion("model_id =", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdNotEqualTo(Long value) { + addCriterion("model_id <>", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdGreaterThan(Long value) { + addCriterion("model_id >", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdGreaterThanOrEqualTo(Long value) { + addCriterion("model_id >=", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdLessThan(Long value) { + addCriterion("model_id <", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdLessThanOrEqualTo(Long value) { + addCriterion("model_id <=", value, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdIn(List values) { + addCriterion("model_id in", values, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdNotIn(List values) { + addCriterion("model_id not in", values, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdBetween(Long value1, Long value2) { + addCriterion("model_id between", value1, value2, "modelId"); + return (Criteria) this; + } + + public Criteria andModelIdNotBetween(Long value1, Long value2) { + addCriterion("model_id not between", value1, value2, "modelId"); + return (Criteria) this; + } + + public Criteria andMasterIdIsNull() { + addCriterion("master_id is null"); + return (Criteria) this; + } + + public Criteria andMasterIdIsNotNull() { + addCriterion("master_id is not null"); + return (Criteria) this; + } + + public Criteria andMasterIdEqualTo(Long value) { + addCriterion("master_id =", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdNotEqualTo(Long value) { + addCriterion("master_id <>", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdGreaterThan(Long value) { + addCriterion("master_id >", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdGreaterThanOrEqualTo(Long value) { + addCriterion("master_id >=", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdLessThan(Long value) { + addCriterion("master_id <", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdLessThanOrEqualTo(Long value) { + addCriterion("master_id <=", value, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdIn(List values) { + addCriterion("master_id in", values, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdNotIn(List values) { + addCriterion("master_id not in", values, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdBetween(Long value1, Long value2) { + addCriterion("master_id between", value1, value2, "masterId"); + return (Criteria) this; + } + + public Criteria andMasterIdNotBetween(Long value1, Long value2) { + addCriterion("master_id not between", value1, value2, "masterId"); + return (Criteria) this; + } + + public Criteria andHostIsNull() { + addCriterion("host is null"); + return (Criteria) this; + } + + public Criteria andHostIsNotNull() { + addCriterion("host is not null"); + return (Criteria) this; + } + + public Criteria andHostEqualTo(String value) { + addCriterion("host =", value, "host"); + return (Criteria) this; + } + + public Criteria andHostNotEqualTo(String value) { + addCriterion("host <>", value, "host"); + return (Criteria) this; + } + + public Criteria andHostGreaterThan(String value) { + addCriterion("host >", value, "host"); + return (Criteria) this; + } + + public Criteria andHostGreaterThanOrEqualTo(String value) { + addCriterion("host >=", value, "host"); + return (Criteria) this; + } + + public Criteria andHostLessThan(String value) { + addCriterion("host <", value, "host"); + return (Criteria) this; + } + + public Criteria andHostLessThanOrEqualTo(String value) { + addCriterion("host <=", value, "host"); + return (Criteria) this; + } + + public Criteria andHostLike(String value) { + addCriterion("host like", value, "host"); + return (Criteria) this; + } + + public Criteria andHostNotLike(String value) { + addCriterion("host not like", value, "host"); + return (Criteria) this; + } + + public Criteria andHostIn(List values) { + addCriterion("host in", values, "host"); + return (Criteria) this; + } + + public Criteria andHostNotIn(List values) { + addCriterion("host not in", values, "host"); + return (Criteria) this; + } + + public Criteria andHostBetween(String value1, String value2) { + addCriterion("host between", value1, value2, "host"); + return (Criteria) this; + } + + public Criteria andHostNotBetween(String value1, String value2) { + addCriterion("host not between", value1, value2, "host"); + return (Criteria) this; + } + + public Criteria andNodeTypeIsNull() { + addCriterion("node_type is null"); + return (Criteria) this; + } + + public Criteria andNodeTypeIsNotNull() { + addCriterion("node_type is not null"); + return (Criteria) this; + } + + public Criteria andNodeTypeEqualTo(Byte value) { + addCriterion("node_type =", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotEqualTo(Byte value) { + addCriterion("node_type <>", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeGreaterThan(Byte value) { + addCriterion("node_type >", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeGreaterThanOrEqualTo(Byte value) { + addCriterion("node_type >=", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeLessThan(Byte value) { + addCriterion("node_type <", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeLessThanOrEqualTo(Byte value) { + addCriterion("node_type <=", value, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeIn(List values) { + addCriterion("node_type in", values, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotIn(List values) { + addCriterion("node_type not in", values, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeBetween(Byte value1, Byte value2) { + addCriterion("node_type between", value1, value2, "nodeType"); + return (Criteria) this; + } + + public Criteria andNodeTypeNotBetween(Byte value1, Byte value2) { + addCriterion("node_type not between", value1, value2, "nodeType"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Topic.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Topic.java new file mode 100644 index 0000000..95c4a25 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/Topic.java @@ -0,0 +1,441 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.TypeReference; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.dao.model.custom.TopicConfig; +import org.apache.commons.lang3.StringUtils; + + +public class Topic implements Serializable { + /** + * 主键id + * default = null + * length = 20 + */ + private Long id; + + /** + * topic名称 + * default = + * length = 256 + */ + private String topicName; + + /** + * 成本分摊方 + * default = + * length = 256 + */ + private String service; + + /** + * 部门 一级部门 - 二级部门 + * default = + * length = 256 + */ + private String department; + + /** + * 联系人,;分割 + * default = + * length = 1024 + */ + private String contacters; + + /** + * 报警组信息, ;分割 + * default = + * length = 256 + */ + private List alarmGroup; + + /** + * 是否启用报警,0 启用 1禁用,默认启用 + * default = 0 + * length = 3 + */ + private Byte alarmIsEnable; + + /** + * 是否是延时Topic,0 延时 1非延时,默认1 + * default = 1 + * length = 3 + */ + private Byte delayTopic; + + /** + * 是否需要审核订阅信息 0需要审核订阅信息 1不需要审核订阅信息,默认1 + * default = 1 + * length = 3 + */ + private Byte needAuditSubinfo; + + /** + * 是否启用schema校验 0启用 1禁用,默认1 + * default = 1 + * length = 3 + */ + private Byte enableSchemaVerify; + + /** + * 0 同机房生产 1 自定义,默认0 + * default = 0 + * length = 3 + */ + private Byte produceMode; + + /** + * 生产模式自定义,map结构,key为client idc,value为pproxy idc列表 + * default = + * length = 2048 + */ + private Map/*pproxy idc*/> produceModeMapper; + + /** + * topic状态,0启用,1禁用 + * default = 0 + * length = 3 + */ + private Byte state; + + /** + * 运维端配置参数 + * default = + * length = 2048 + */ + private TopicConfig config; + + /** + * topic描述信息 + * default = + * length = 1024 + */ + private String description; + + /** + * 额外参数 + * default = + * length = 2048 + */ + private Map extraParams; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + /** + * topicschema + * default = null + * length = 65535 + */ + private String topicSchema; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName == null ? null : topicName.trim(); + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service == null ? null : service.trim(); + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department == null ? null : department.trim(); + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters == null ? null : contacters.trim(); + } + + public String getAlarmGroup() { + return this.alarmGroup == null ? null : FastJsonUtils.toJsonString(alarmGroup); + } + + public void setAlarmGroup(String alarmGroup) { + this.alarmGroup = StringUtils.isBlank(alarmGroup) ? null : FastJsonUtils.toObject(alarmGroup, List.class); + } + + public List getTopicAlarmGroup() { + return alarmGroup; + } + + public void setTopicAlarmGroup(List alarmGroup) { + this.alarmGroup = alarmGroup; + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public Byte getDelayTopic() { + return delayTopic; + } + + public void setDelayTopic(Byte delayTopic) { + this.delayTopic = delayTopic; + } + + public Byte getNeedAuditSubinfo() { + return needAuditSubinfo; + } + + public void setNeedAuditSubinfo(Byte needAuditSubinfo) { + this.needAuditSubinfo = needAuditSubinfo; + } + + public Byte getEnableSchemaVerify() { + return enableSchemaVerify; + } + + public void setEnableSchemaVerify(Byte enableSchemaVerify) { + this.enableSchemaVerify = enableSchemaVerify; + } + + public Byte getProduceMode() { + return produceMode; + } + + public void setProduceMode(Byte produceMode) { + this.produceMode = produceMode; + } + + public String getProduceModeMapper() { + return this.produceModeMapper == null ? null : FastJsonUtils.toJsonString(produceModeMapper); + } + + public void setProduceModeMapper(String produceModeMapper) { + this.produceModeMapper = StringUtils.isBlank(produceModeMapper) ? null : FastJsonUtils.toObject(produceModeMapper, new TypeReference/*pproxy idc*/>>() { + }); + } + + public Map/*pproxy idc*/> getTopicProduceModeMapper() { + return produceModeMapper; + } + + public void setTopicProduceModeMapper(Map/*pproxy idc*/> produceModeMapper) { + this.produceModeMapper = produceModeMapper; + } + + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + public TopicConfig getTopicConfig() { + return config; + } + + public void setTopicConfig(TopicConfig config) { + this.config = config; + } + + public String getConfig() { + return this.config == null ? null : FastJsonUtils.toJsonString(config); + } + + public void setConfig(String config) { + this.config = StringUtils.isBlank(config) ? null : FastJsonUtils.toObject(config, TopicConfig.class); + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + public String getExtraParams() { + return this.extraParams == null ? null : FastJsonUtils.toJsonString(extraParams); + } + + public void setExtraParams(String extraParams) { + this.extraParams = StringUtils.isBlank(extraParams) ? null : FastJsonUtils.toObject(extraParams, Map.class); + } + + public Map getTopicExtraParams() { + return extraParams; + } + + public void setTopicExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getTopicSchema() { + return topicSchema; + } + + public void setTopicSchema(String topicSchema) { + this.topicSchema = topicSchema == null ? null : topicSchema.trim(); + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + Topic other = (Topic) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getTopicName() == null ? other.getTopicName() == null : this.getTopicName().equals(other.getTopicName())) + && (this.getService() == null ? other.getService() == null : this.getService().equals(other.getService())) + && (this.getDepartment() == null ? other.getDepartment() == null : this.getDepartment().equals(other.getDepartment())) + && (this.getContacters() == null ? other.getContacters() == null : this.getContacters().equals(other.getContacters())) + && (this.getAlarmGroup() == null ? other.getAlarmGroup() == null : this.getAlarmGroup().equals(other.getAlarmGroup())) + && (this.getAlarmIsEnable() == null ? other.getAlarmIsEnable() == null : this.getAlarmIsEnable().equals(other.getAlarmIsEnable())) + && (this.getDelayTopic() == null ? other.getDelayTopic() == null : this.getDelayTopic().equals(other.getDelayTopic())) + && (this.getNeedAuditSubinfo() == null ? other.getNeedAuditSubinfo() == null : this.getNeedAuditSubinfo().equals(other.getNeedAuditSubinfo())) + && (this.getEnableSchemaVerify() == null ? other.getEnableSchemaVerify() == null : this.getEnableSchemaVerify().equals(other.getEnableSchemaVerify())) + && (this.getProduceMode() == null ? other.getProduceMode() == null : this.getProduceMode().equals(other.getProduceMode())) + && (this.getProduceModeMapper() == null ? other.getProduceModeMapper() == null : this.getProduceModeMapper().equals(other.getProduceModeMapper())) + && (this.getState() == null ? other.getState() == null : this.getState().equals(other.getState())) + && (this.getConfig() == null ? other.getConfig() == null : this.getConfig().equals(other.getConfig())) + && (this.getDescription() == null ? other.getDescription() == null : this.getDescription().equals(other.getDescription())) + && (this.getExtraParams() == null ? other.getExtraParams() == null : this.getExtraParams().equals(other.getExtraParams())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())) + && (this.getTopicSchema() == null ? other.getTopicSchema() == null : this.getTopicSchema().equals(other.getTopicSchema())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getTopicName() == null) ? 0 : getTopicName().hashCode()); + result = prime * result + ((getService() == null) ? 0 : getService().hashCode()); + result = prime * result + ((getDepartment() == null) ? 0 : getDepartment().hashCode()); + result = prime * result + ((getContacters() == null) ? 0 : getContacters().hashCode()); + result = prime * result + ((getAlarmGroup() == null) ? 0 : getAlarmGroup().hashCode()); + result = prime * result + ((getAlarmIsEnable() == null) ? 0 : getAlarmIsEnable().hashCode()); + result = prime * result + ((getDelayTopic() == null) ? 0 : getDelayTopic().hashCode()); + result = prime * result + ((getNeedAuditSubinfo() == null) ? 0 : getNeedAuditSubinfo().hashCode()); + result = prime * result + ((getEnableSchemaVerify() == null) ? 0 : getEnableSchemaVerify().hashCode()); + result = prime * result + ((getProduceMode() == null) ? 0 : getProduceMode().hashCode()); + result = prime * result + ((getProduceModeMapper() == null) ? 0 : getProduceModeMapper().hashCode()); + result = prime * result + ((getState() == null) ? 0 : getState().hashCode()); + result = prime * result + ((getConfig() == null) ? 0 : getConfig().hashCode()); + result = prime * result + ((getDescription() == null) ? 0 : getDescription().hashCode()); + result = prime * result + ((getExtraParams() == null) ? 0 : getExtraParams().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + result = prime * result + ((getTopicSchema() == null) ? 0 : getTopicSchema().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", topicName=" + topicName + + ", service=" + service + + ", department=" + department + + ", contacters=" + contacters + + ", alarmGroup=" + alarmGroup + + ", alarmIsEnable=" + alarmIsEnable + + ", delayTopic=" + delayTopic + + ", needAuditSubinfo=" + needAuditSubinfo + + ", enableSchemaVerify=" + enableSchemaVerify + + ", produceMode=" + produceMode + + ", produceModeMapper=" + produceModeMapper + + ", state=" + state + + ", config=" + config + + ", description=" + description + + ", extraParams=" + extraParams + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", topicSchema=" + topicSchema + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConf.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConf.java new file mode 100644 index 0000000..fcbf689 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConf.java @@ -0,0 +1,387 @@ +package com.didi.carrera.console.dao.model; + +import java.io.Serializable; +import java.util.Date; +import java.util.Map; + +import com.alibaba.fastjson.TypeReference; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.dao.model.custom.TopicConfConfig; +import org.apache.commons.lang3.StringUtils; + + +public class TopicConf implements Serializable { + /** + * 主键id + * default = null + * length = 20 + */ + private Long id; + + /** + * topic 主键id + * default = 0 + * length = 19 + */ + private Long topicId; + + /** + * topic名称 + * default = + * length = 256 + */ + private String topicName; + + /** + * 集群id + * default = 0 + * length = 19 + */ + private Long clusterId; + + /** + * 集群名称 + * default = + * length = 256 + */ + private String clusterName; + + /** + * mqserver id + * default = 0 + * length = 19 + */ + private Long mqServerId; + + /** + * mqserver名称 + * default = + * length = 256 + */ + private String mqServerName; + + /** + * server对应的机房id + * default = 0 + * length = 19 + */ + private Long serverIdcId; + + /** + * server对应的机房名称 + * default = + * length = 256 + */ + private String serverIdcName; + + /** + * clientidc对应的id和value + * default = + * length = 1024 + */ + private Map clientIdc; + + /** + * 预估生产tps,默认1024 + * default = 1024 + * length = 10 + */ + private Integer produceTps; + + /** + * 消息平均大小,单位字节 + * default = 0 + * length = 10 + */ + private Integer msgAvgSize; + + /** + * 消息最大大小,单位字节 + * default = 0 + * length = 10 + */ + private Integer msgMaxSize; + + /** + * topic状态,0启用,1禁用 + * default = 0 + * length = 3 + */ + private Byte state; + + /** + * 运维端配置参数 + * default = + * length = 2048 + */ + private TopicConfConfig config; + + /** + * 是否删除 0:未删除 1:删除 + * default = 0 + * length = 3 + */ + private Byte isDelete; + + /** + * 创建时间 + * default = 1970-01-01 00:00:00 + * length = 19 + */ + private Date createTime; + + /** + * 修改时间 + * default = CURRENT_TIMESTAMP + * length = 19 + */ + private Date modifyTime; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName == null ? null : topicName.trim(); + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName == null ? null : clusterName.trim(); + } + + public Long getMqServerId() { + return mqServerId; + } + + public void setMqServerId(Long mqServerId) { + this.mqServerId = mqServerId; + } + + public String getMqServerName() { + return mqServerName; + } + + public void setMqServerName(String mqServerName) { + this.mqServerName = mqServerName == null ? null : mqServerName.trim(); + } + + public Long getServerIdcId() { + return serverIdcId; + } + + public void setServerIdcId(Long serverIdcId) { + this.serverIdcId = serverIdcId; + } + + public String getServerIdcName() { + return serverIdcName; + } + + public void setServerIdcName(String serverIdcName) { + this.serverIdcName = serverIdcName == null ? null : serverIdcName.trim(); + } + + public String getClientIdc() { + return this.clientIdc == null ? null : FastJsonUtils.toJsonString(clientIdc); + } + + public void setClientIdc(String clientIdc) { + this.clientIdc = StringUtils.isBlank(clientIdc) ? null : FastJsonUtils.toObject(clientIdc, new TypeReference>() { + }); + } + + public Map getTopicConfClientIdc() { + return clientIdc; + } + + public void setTopicConfClientIdc(Map clientIdcMapper) { + this.clientIdc = clientIdcMapper; + } + + public Integer getProduceTps() { + return produceTps; + } + + public void setProduceTps(Integer produceTps) { + this.produceTps = produceTps; + } + + public Integer getMsgAvgSize() { + return msgAvgSize; + } + + public void setMsgAvgSize(Integer msgAvgSize) { + this.msgAvgSize = msgAvgSize; + } + + public Integer getMsgMaxSize() { + return msgMaxSize; + } + + public void setMsgMaxSize(Integer msgMaxSize) { + this.msgMaxSize = msgMaxSize; + } + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + public TopicConfConfig getTopicConfConfig() { + return config; + } + + public void setTopicConfig(TopicConfConfig config) { + this.config = config; + } + + public String getConfig() { + return this.config == null ? null : FastJsonUtils.toJsonString(config); + } + + public void setConfig(String config) { + this.config = StringUtils.isBlank(config) ? null : FastJsonUtils.toObject(config, TopicConfConfig.class); + } + + public Byte getIsDelete() { + return isDelete; + } + + public void setIsDelete(Byte isDelete) { + this.isDelete = isDelete; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + @Override + public boolean equals(Object that) { + if (this == that) { + return true; + } + if (that == null) { + return false; + } + if (getClass() != that.getClass()) { + return false; + } + TopicConf other = (TopicConf) that; + return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getTopicId() == null ? other.getTopicId() == null : this.getTopicId().equals(other.getTopicId())) + && (this.getTopicName() == null ? other.getTopicName() == null : this.getTopicName().equals(other.getTopicName())) + && (this.getClusterId() == null ? other.getClusterId() == null : this.getClusterId().equals(other.getClusterId())) + && (this.getClusterName() == null ? other.getClusterName() == null : this.getClusterName().equals(other.getClusterName())) + && (this.getMqServerId() == null ? other.getMqServerId() == null : this.getMqServerId().equals(other.getMqServerId())) + && (this.getMqServerName() == null ? other.getMqServerName() == null : this.getMqServerName().equals(other.getMqServerName())) + && (this.getServerIdcId() == null ? other.getServerIdcId() == null : this.getServerIdcId().equals(other.getServerIdcId())) + && (this.getServerIdcName() == null ? other.getServerIdcName() == null : this.getServerIdcName().equals(other.getServerIdcName())) + && (this.getClientIdc() == null ? other.getClientIdc() == null : this.getClientIdc().equals(other.getClientIdc())) + && (this.getProduceTps() == null ? other.getProduceTps() == null : this.getProduceTps().equals(other.getProduceTps())) + && (this.getMsgAvgSize() == null ? other.getMsgAvgSize() == null : this.getMsgAvgSize().equals(other.getMsgAvgSize())) + && (this.getMsgMaxSize() == null ? other.getMsgMaxSize() == null : this.getMsgMaxSize().equals(other.getMsgMaxSize())) + && (this.getState() == null ? other.getState() == null : this.getState().equals(other.getState())) + && (this.getConfig() == null ? other.getConfig() == null : this.getConfig().equals(other.getConfig())) + && (this.getIsDelete() == null ? other.getIsDelete() == null : this.getIsDelete().equals(other.getIsDelete())) + && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) + && (this.getModifyTime() == null ? other.getModifyTime() == null : this.getModifyTime().equals(other.getModifyTime())); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getTopicId() == null) ? 0 : getTopicId().hashCode()); + result = prime * result + ((getTopicName() == null) ? 0 : getTopicName().hashCode()); + result = prime * result + ((getClusterId() == null) ? 0 : getClusterId().hashCode()); + result = prime * result + ((getClusterName() == null) ? 0 : getClusterName().hashCode()); + result = prime * result + ((getMqServerId() == null) ? 0 : getMqServerId().hashCode()); + result = prime * result + ((getMqServerName() == null) ? 0 : getMqServerName().hashCode()); + result = prime * result + ((getServerIdcId() == null) ? 0 : getServerIdcId().hashCode()); + result = prime * result + ((getServerIdcName() == null) ? 0 : getServerIdcName().hashCode()); + result = prime * result + ((getClientIdc() == null) ? 0 : getClientIdc().hashCode()); + result = prime * result + ((getProduceTps() == null) ? 0 : getProduceTps().hashCode()); + result = prime * result + ((getMsgAvgSize() == null) ? 0 : getMsgAvgSize().hashCode()); + result = prime * result + ((getMsgMaxSize() == null) ? 0 : getMsgMaxSize().hashCode()); + result = prime * result + ((getState() == null) ? 0 : getState().hashCode()); + result = prime * result + ((getConfig() == null) ? 0 : getConfig().hashCode()); + result = prime * result + ((getIsDelete() == null) ? 0 : getIsDelete().hashCode()); + result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); + result = prime * result + ((getModifyTime() == null) ? 0 : getModifyTime().hashCode()); + return result; + } + + @Override + public String toString() { + String sb = getClass().getSimpleName() + + " [" + + "Hash = " + hashCode() + + ", id=" + id + + ", topicId=" + topicId + + ", topicName=" + topicName + + ", clusterId=" + clusterId + + ", clusterName=" + clusterName + + ", mqServerId=" + mqServerId + + ", mqServerName=" + mqServerName + + ", serverIdcId=" + serverIdcId + + ", serverIdcName=" + serverIdcName + + ", clientIdc=" + clientIdc + + ", produceTps=" + produceTps + + ", msgAvgSize=" + msgAvgSize + + ", msgMaxSize=" + msgMaxSize + + ", state=" + state + + ", config=" + config + + ", isDelete=" + isDelete + + ", createTime=" + createTime + + ", modifyTime=" + modifyTime + + ", serialVersionUID=" + serialVersionUID + + "]"; + return sb; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConfCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConfCriteria.java new file mode 100644 index 0000000..712d9bd --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicConfCriteria.java @@ -0,0 +1,1361 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class TopicConfCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public TopicConfCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTopicIdIsNull() { + addCriterion("topic_id is null"); + return (Criteria) this; + } + + public Criteria andTopicIdIsNotNull() { + addCriterion("topic_id is not null"); + return (Criteria) this; + } + + public Criteria andTopicIdEqualTo(Long value) { + addCriterion("topic_id =", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotEqualTo(Long value) { + addCriterion("topic_id <>", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdGreaterThan(Long value) { + addCriterion("topic_id >", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdGreaterThanOrEqualTo(Long value) { + addCriterion("topic_id >=", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdLessThan(Long value) { + addCriterion("topic_id <", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdLessThanOrEqualTo(Long value) { + addCriterion("topic_id <=", value, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdIn(List values) { + addCriterion("topic_id in", values, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotIn(List values) { + addCriterion("topic_id not in", values, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdBetween(Long value1, Long value2) { + addCriterion("topic_id between", value1, value2, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicIdNotBetween(Long value1, Long value2) { + addCriterion("topic_id not between", value1, value2, "topicId"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNull() { + addCriterion("topic_name is null"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNotNull() { + addCriterion("topic_name is not null"); + return (Criteria) this; + } + + public Criteria andTopicNameEqualTo(String value) { + addCriterion("topic_name =", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotEqualTo(String value) { + addCriterion("topic_name <>", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThan(String value) { + addCriterion("topic_name >", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThanOrEqualTo(String value) { + addCriterion("topic_name >=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThan(String value) { + addCriterion("topic_name <", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThanOrEqualTo(String value) { + addCriterion("topic_name <=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLike(String value) { + addCriterion("topic_name like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotLike(String value) { + addCriterion("topic_name not like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameIn(List values) { + addCriterion("topic_name in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotIn(List values) { + addCriterion("topic_name not in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameBetween(String value1, String value2) { + addCriterion("topic_name between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotBetween(String value1, String value2) { + addCriterion("topic_name not between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNull() { + addCriterion("cluster_id is null"); + return (Criteria) this; + } + + public Criteria andClusterIdIsNotNull() { + addCriterion("cluster_id is not null"); + return (Criteria) this; + } + + public Criteria andClusterIdEqualTo(Long value) { + addCriterion("cluster_id =", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotEqualTo(Long value) { + addCriterion("cluster_id <>", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThan(Long value) { + addCriterion("cluster_id >", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdGreaterThanOrEqualTo(Long value) { + addCriterion("cluster_id >=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThan(Long value) { + addCriterion("cluster_id <", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdLessThanOrEqualTo(Long value) { + addCriterion("cluster_id <=", value, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdIn(List values) { + addCriterion("cluster_id in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotIn(List values) { + addCriterion("cluster_id not in", values, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdBetween(Long value1, Long value2) { + addCriterion("cluster_id between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterIdNotBetween(Long value1, Long value2) { + addCriterion("cluster_id not between", value1, value2, "clusterId"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNull() { + addCriterion("cluster_name is null"); + return (Criteria) this; + } + + public Criteria andClusterNameIsNotNull() { + addCriterion("cluster_name is not null"); + return (Criteria) this; + } + + public Criteria andClusterNameEqualTo(String value) { + addCriterion("cluster_name =", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotEqualTo(String value) { + addCriterion("cluster_name <>", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThan(String value) { + addCriterion("cluster_name >", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameGreaterThanOrEqualTo(String value) { + addCriterion("cluster_name >=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThan(String value) { + addCriterion("cluster_name <", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLessThanOrEqualTo(String value) { + addCriterion("cluster_name <=", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameLike(String value) { + addCriterion("cluster_name like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotLike(String value) { + addCriterion("cluster_name not like", value, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameIn(List values) { + addCriterion("cluster_name in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotIn(List values) { + addCriterion("cluster_name not in", values, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameBetween(String value1, String value2) { + addCriterion("cluster_name between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andClusterNameNotBetween(String value1, String value2) { + addCriterion("cluster_name not between", value1, value2, "clusterName"); + return (Criteria) this; + } + + public Criteria andMqServerIdIsNull() { + addCriterion("mq_server_id is null"); + return (Criteria) this; + } + + public Criteria andMqServerIdIsNotNull() { + addCriterion("mq_server_id is not null"); + return (Criteria) this; + } + + public Criteria andMqServerIdEqualTo(Long value) { + addCriterion("mq_server_id =", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotEqualTo(Long value) { + addCriterion("mq_server_id <>", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdGreaterThan(Long value) { + addCriterion("mq_server_id >", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdGreaterThanOrEqualTo(Long value) { + addCriterion("mq_server_id >=", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdLessThan(Long value) { + addCriterion("mq_server_id <", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdLessThanOrEqualTo(Long value) { + addCriterion("mq_server_id <=", value, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdIn(List values) { + addCriterion("mq_server_id in", values, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotIn(List values) { + addCriterion("mq_server_id not in", values, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdBetween(Long value1, Long value2) { + addCriterion("mq_server_id between", value1, value2, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerIdNotBetween(Long value1, Long value2) { + addCriterion("mq_server_id not between", value1, value2, "mqServerId"); + return (Criteria) this; + } + + public Criteria andMqServerNameIsNull() { + addCriterion("mq_server_name is null"); + return (Criteria) this; + } + + public Criteria andMqServerNameIsNotNull() { + addCriterion("mq_server_name is not null"); + return (Criteria) this; + } + + public Criteria andMqServerNameEqualTo(String value) { + addCriterion("mq_server_name =", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotEqualTo(String value) { + addCriterion("mq_server_name <>", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameGreaterThan(String value) { + addCriterion("mq_server_name >", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameGreaterThanOrEqualTo(String value) { + addCriterion("mq_server_name >=", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLessThan(String value) { + addCriterion("mq_server_name <", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLessThanOrEqualTo(String value) { + addCriterion("mq_server_name <=", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameLike(String value) { + addCriterion("mq_server_name like", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotLike(String value) { + addCriterion("mq_server_name not like", value, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameIn(List values) { + addCriterion("mq_server_name in", values, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotIn(List values) { + addCriterion("mq_server_name not in", values, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameBetween(String value1, String value2) { + addCriterion("mq_server_name between", value1, value2, "mqServerName"); + return (Criteria) this; + } + + public Criteria andMqServerNameNotBetween(String value1, String value2) { + addCriterion("mq_server_name not between", value1, value2, "mqServerName"); + return (Criteria) this; + } + + public Criteria andServerIdcIdIsNull() { + addCriterion("server_idc_id is null"); + return (Criteria) this; + } + + public Criteria andServerIdcIdIsNotNull() { + addCriterion("server_idc_id is not null"); + return (Criteria) this; + } + + public Criteria andServerIdcIdEqualTo(Long value) { + addCriterion("server_idc_id =", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdNotEqualTo(Long value) { + addCriterion("server_idc_id <>", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdGreaterThan(Long value) { + addCriterion("server_idc_id >", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdGreaterThanOrEqualTo(Long value) { + addCriterion("server_idc_id >=", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdLessThan(Long value) { + addCriterion("server_idc_id <", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdLessThanOrEqualTo(Long value) { + addCriterion("server_idc_id <=", value, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdIn(List values) { + addCriterion("server_idc_id in", values, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdNotIn(List values) { + addCriterion("server_idc_id not in", values, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdBetween(Long value1, Long value2) { + addCriterion("server_idc_id between", value1, value2, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcIdNotBetween(Long value1, Long value2) { + addCriterion("server_idc_id not between", value1, value2, "serverIdcId"); + return (Criteria) this; + } + + public Criteria andServerIdcNameIsNull() { + addCriterion("server_idc_name is null"); + return (Criteria) this; + } + + public Criteria andServerIdcNameIsNotNull() { + addCriterion("server_idc_name is not null"); + return (Criteria) this; + } + + public Criteria andServerIdcNameEqualTo(String value) { + addCriterion("server_idc_name =", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameNotEqualTo(String value) { + addCriterion("server_idc_name <>", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameGreaterThan(String value) { + addCriterion("server_idc_name >", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameGreaterThanOrEqualTo(String value) { + addCriterion("server_idc_name >=", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameLessThan(String value) { + addCriterion("server_idc_name <", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameLessThanOrEqualTo(String value) { + addCriterion("server_idc_name <=", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameLike(String value) { + addCriterion("server_idc_name like", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameNotLike(String value) { + addCriterion("server_idc_name not like", value, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameIn(List values) { + addCriterion("server_idc_name in", values, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameNotIn(List values) { + addCriterion("server_idc_name not in", values, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameBetween(String value1, String value2) { + addCriterion("server_idc_name between", value1, value2, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andServerIdcNameNotBetween(String value1, String value2) { + addCriterion("server_idc_name not between", value1, value2, "serverIdcName"); + return (Criteria) this; + } + + public Criteria andClientIdcIsNull() { + addCriterion("client_idc is null"); + return (Criteria) this; + } + + public Criteria andClientIdcIsNotNull() { + addCriterion("client_idc is not null"); + return (Criteria) this; + } + + public Criteria andClientIdcEqualTo(String value) { + addCriterion("client_idc =", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcNotEqualTo(String value) { + addCriterion("client_idc <>", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcGreaterThan(String value) { + addCriterion("client_idc >", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcGreaterThanOrEqualTo(String value) { + addCriterion("client_idc >=", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcLessThan(String value) { + addCriterion("client_idc <", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcLessThanOrEqualTo(String value) { + addCriterion("client_idc <=", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcLike(String value) { + addCriterion("client_idc like", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcNotLike(String value) { + addCriterion("client_idc not like", value, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcIn(List values) { + addCriterion("client_idc in", values, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcNotIn(List values) { + addCriterion("client_idc not in", values, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcBetween(String value1, String value2) { + addCriterion("client_idc between", value1, value2, "clientIdc"); + return (Criteria) this; + } + + public Criteria andClientIdcNotBetween(String value1, String value2) { + addCriterion("client_idc not between", value1, value2, "clientIdc"); + return (Criteria) this; + } + + public Criteria andProduceTpsIsNull() { + addCriterion("produce_tps is null"); + return (Criteria) this; + } + + public Criteria andProduceTpsIsNotNull() { + addCriterion("produce_tps is not null"); + return (Criteria) this; + } + + public Criteria andProduceTpsEqualTo(Integer value) { + addCriterion("produce_tps =", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsNotEqualTo(Integer value) { + addCriterion("produce_tps <>", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsGreaterThan(Integer value) { + addCriterion("produce_tps >", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsGreaterThanOrEqualTo(Integer value) { + addCriterion("produce_tps >=", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsLessThan(Integer value) { + addCriterion("produce_tps <", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsLessThanOrEqualTo(Integer value) { + addCriterion("produce_tps <=", value, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsIn(List values) { + addCriterion("produce_tps in", values, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsNotIn(List values) { + addCriterion("produce_tps not in", values, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsBetween(Integer value1, Integer value2) { + addCriterion("produce_tps between", value1, value2, "produceTps"); + return (Criteria) this; + } + + public Criteria andProduceTpsNotBetween(Integer value1, Integer value2) { + addCriterion("produce_tps not between", value1, value2, "produceTps"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeIsNull() { + addCriterion("msg_avg_size is null"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeIsNotNull() { + addCriterion("msg_avg_size is not null"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeEqualTo(Integer value) { + addCriterion("msg_avg_size =", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeNotEqualTo(Integer value) { + addCriterion("msg_avg_size <>", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeGreaterThan(Integer value) { + addCriterion("msg_avg_size >", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeGreaterThanOrEqualTo(Integer value) { + addCriterion("msg_avg_size >=", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeLessThan(Integer value) { + addCriterion("msg_avg_size <", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeLessThanOrEqualTo(Integer value) { + addCriterion("msg_avg_size <=", value, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeIn(List values) { + addCriterion("msg_avg_size in", values, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeNotIn(List values) { + addCriterion("msg_avg_size not in", values, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeBetween(Integer value1, Integer value2) { + addCriterion("msg_avg_size between", value1, value2, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgAvgSizeNotBetween(Integer value1, Integer value2) { + addCriterion("msg_avg_size not between", value1, value2, "msgAvgSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeIsNull() { + addCriterion("msg_max_size is null"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeIsNotNull() { + addCriterion("msg_max_size is not null"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeEqualTo(Integer value) { + addCriterion("msg_max_size =", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeNotEqualTo(Integer value) { + addCriterion("msg_max_size <>", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeGreaterThan(Integer value) { + addCriterion("msg_max_size >", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeGreaterThanOrEqualTo(Integer value) { + addCriterion("msg_max_size >=", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeLessThan(Integer value) { + addCriterion("msg_max_size <", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeLessThanOrEqualTo(Integer value) { + addCriterion("msg_max_size <=", value, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeIn(List values) { + addCriterion("msg_max_size in", values, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeNotIn(List values) { + addCriterion("msg_max_size not in", values, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeBetween(Integer value1, Integer value2) { + addCriterion("msg_max_size between", value1, value2, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andMsgMaxSizeNotBetween(Integer value1, Integer value2) { + addCriterion("msg_max_size not between", value1, value2, "msgMaxSize"); + return (Criteria) this; + } + + public Criteria andStateIsNull() { + addCriterion("state is null"); + return (Criteria) this; + } + + public Criteria andStateIsNotNull() { + addCriterion("state is not null"); + return (Criteria) this; + } + + public Criteria andStateEqualTo(Byte value) { + addCriterion("state =", value, "state"); + return (Criteria) this; + } + + public Criteria andStateNotEqualTo(Byte value) { + addCriterion("state <>", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThan(Byte value) { + addCriterion("state >", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThanOrEqualTo(Byte value) { + addCriterion("state >=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThan(Byte value) { + addCriterion("state <", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThanOrEqualTo(Byte value) { + addCriterion("state <=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateIn(List values) { + addCriterion("state in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateNotIn(List values) { + addCriterion("state not in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateBetween(Byte value1, Byte value2) { + addCriterion("state between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andStateNotBetween(Byte value1, Byte value2) { + addCriterion("state not between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andConfigIsNull() { + addCriterion("config is null"); + return (Criteria) this; + } + + public Criteria andConfigIsNotNull() { + addCriterion("config is not null"); + return (Criteria) this; + } + + public Criteria andConfigEqualTo(String value) { + addCriterion("config =", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotEqualTo(String value) { + addCriterion("config <>", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThan(String value) { + addCriterion("config >", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThanOrEqualTo(String value) { + addCriterion("config >=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThan(String value) { + addCriterion("config <", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThanOrEqualTo(String value) { + addCriterion("config <=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLike(String value) { + addCriterion("config like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotLike(String value) { + addCriterion("config not like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigIn(List values) { + addCriterion("config in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotIn(List values) { + addCriterion("config not in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigBetween(String value1, String value2) { + addCriterion("config between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotBetween(String value1, String value2) { + addCriterion("config not between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicCriteria.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicCriteria.java new file mode 100644 index 0000000..c8683e2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/TopicCriteria.java @@ -0,0 +1,1451 @@ +package com.didi.carrera.console.dao.model; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +public class TopicCriteria { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + protected Integer start; + + protected Integer end; + + public TopicCriteria() { + oredCriteria = new ArrayList<>(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + return new Criteria(); + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + public void setStart(Integer start) { + this.start=start; + } + + public Integer getStart() { + return start; + } + + public void setEnd(Integer end) { + this.end=end; + } + + public Integer getEnd() { + return end; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList<>(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNull() { + addCriterion("topic_name is null"); + return (Criteria) this; + } + + public Criteria andTopicNameIsNotNull() { + addCriterion("topic_name is not null"); + return (Criteria) this; + } + + public Criteria andTopicNameEqualTo(String value) { + addCriterion("topic_name =", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotEqualTo(String value) { + addCriterion("topic_name <>", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThan(String value) { + addCriterion("topic_name >", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameGreaterThanOrEqualTo(String value) { + addCriterion("topic_name >=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThan(String value) { + addCriterion("topic_name <", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLessThanOrEqualTo(String value) { + addCriterion("topic_name <=", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameLike(String value) { + addCriterion("topic_name like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotLike(String value) { + addCriterion("topic_name not like", value, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameIn(List values) { + addCriterion("topic_name in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotIn(List values) { + addCriterion("topic_name not in", values, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameBetween(String value1, String value2) { + addCriterion("topic_name between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andTopicNameNotBetween(String value1, String value2) { + addCriterion("topic_name not between", value1, value2, "topicName"); + return (Criteria) this; + } + + public Criteria andServiceIsNull() { + addCriterion("service is null"); + return (Criteria) this; + } + + public Criteria andServiceIsNotNull() { + addCriterion("service is not null"); + return (Criteria) this; + } + + public Criteria andServiceEqualTo(String value) { + addCriterion("service =", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotEqualTo(String value) { + addCriterion("service <>", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceGreaterThan(String value) { + addCriterion("service >", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceGreaterThanOrEqualTo(String value) { + addCriterion("service >=", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLessThan(String value) { + addCriterion("service <", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLessThanOrEqualTo(String value) { + addCriterion("service <=", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceLike(String value) { + addCriterion("service like", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotLike(String value) { + addCriterion("service not like", value, "service"); + return (Criteria) this; + } + + public Criteria andServiceIn(List values) { + addCriterion("service in", values, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotIn(List values) { + addCriterion("service not in", values, "service"); + return (Criteria) this; + } + + public Criteria andServiceBetween(String value1, String value2) { + addCriterion("service between", value1, value2, "service"); + return (Criteria) this; + } + + public Criteria andServiceNotBetween(String value1, String value2) { + addCriterion("service not between", value1, value2, "service"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNull() { + addCriterion("department is null"); + return (Criteria) this; + } + + public Criteria andDepartmentIsNotNull() { + addCriterion("department is not null"); + return (Criteria) this; + } + + public Criteria andDepartmentEqualTo(String value) { + addCriterion("department =", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotEqualTo(String value) { + addCriterion("department <>", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThan(String value) { + addCriterion("department >", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentGreaterThanOrEqualTo(String value) { + addCriterion("department >=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThan(String value) { + addCriterion("department <", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLessThanOrEqualTo(String value) { + addCriterion("department <=", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentLike(String value) { + addCriterion("department like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotLike(String value) { + addCriterion("department not like", value, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentIn(List values) { + addCriterion("department in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotIn(List values) { + addCriterion("department not in", values, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentBetween(String value1, String value2) { + addCriterion("department between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andDepartmentNotBetween(String value1, String value2) { + addCriterion("department not between", value1, value2, "department"); + return (Criteria) this; + } + + public Criteria andContactersIsNull() { + addCriterion("contacters is null"); + return (Criteria) this; + } + + public Criteria andContactersIsNotNull() { + addCriterion("contacters is not null"); + return (Criteria) this; + } + + public Criteria andContactersEqualTo(String value) { + addCriterion("contacters =", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotEqualTo(String value) { + addCriterion("contacters <>", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersGreaterThan(String value) { + addCriterion("contacters >", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersGreaterThanOrEqualTo(String value) { + addCriterion("contacters >=", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLessThan(String value) { + addCriterion("contacters <", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLessThanOrEqualTo(String value) { + addCriterion("contacters <=", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersLike(String value) { + addCriterion("contacters like", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotLike(String value) { + addCriterion("contacters not like", value, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersIn(List values) { + addCriterion("contacters in", values, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotIn(List values) { + addCriterion("contacters not in", values, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersBetween(String value1, String value2) { + addCriterion("contacters between", value1, value2, "contacters"); + return (Criteria) this; + } + + public Criteria andContactersNotBetween(String value1, String value2) { + addCriterion("contacters not between", value1, value2, "contacters"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIsNull() { + addCriterion("alarm_group is null"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIsNotNull() { + addCriterion("alarm_group is not null"); + return (Criteria) this; + } + + public Criteria andAlarmGroupEqualTo(String value) { + addCriterion("alarm_group =", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotEqualTo(String value) { + addCriterion("alarm_group <>", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupGreaterThan(String value) { + addCriterion("alarm_group >", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupGreaterThanOrEqualTo(String value) { + addCriterion("alarm_group >=", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLessThan(String value) { + addCriterion("alarm_group <", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLessThanOrEqualTo(String value) { + addCriterion("alarm_group <=", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupLike(String value) { + addCriterion("alarm_group like", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotLike(String value) { + addCriterion("alarm_group not like", value, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupIn(List values) { + addCriterion("alarm_group in", values, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotIn(List values) { + addCriterion("alarm_group not in", values, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupBetween(String value1, String value2) { + addCriterion("alarm_group between", value1, value2, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmGroupNotBetween(String value1, String value2) { + addCriterion("alarm_group not between", value1, value2, "alarmGroup"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNull() { + addCriterion("alarm_is_enable is null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIsNotNull() { + addCriterion("alarm_is_enable is not null"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableEqualTo(Byte value) { + addCriterion("alarm_is_enable =", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotEqualTo(Byte value) { + addCriterion("alarm_is_enable <>", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThan(Byte value) { + addCriterion("alarm_is_enable >", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableGreaterThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable >=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThan(Byte value) { + addCriterion("alarm_is_enable <", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableLessThanOrEqualTo(Byte value) { + addCriterion("alarm_is_enable <=", value, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableIn(List values) { + addCriterion("alarm_is_enable in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotIn(List values) { + addCriterion("alarm_is_enable not in", values, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andAlarmIsEnableNotBetween(Byte value1, Byte value2) { + addCriterion("alarm_is_enable not between", value1, value2, "alarmIsEnable"); + return (Criteria) this; + } + + public Criteria andDelayTopicIsNull() { + addCriterion("delay_topic is null"); + return (Criteria) this; + } + + public Criteria andDelayTopicIsNotNull() { + addCriterion("delay_topic is not null"); + return (Criteria) this; + } + + public Criteria andDelayTopicEqualTo(Byte value) { + addCriterion("delay_topic =", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicNotEqualTo(Byte value) { + addCriterion("delay_topic <>", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicGreaterThan(Byte value) { + addCriterion("delay_topic >", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicGreaterThanOrEqualTo(Byte value) { + addCriterion("delay_topic >=", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicLessThan(Byte value) { + addCriterion("delay_topic <", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicLessThanOrEqualTo(Byte value) { + addCriterion("delay_topic <=", value, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicIn(List values) { + addCriterion("delay_topic in", values, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicNotIn(List values) { + addCriterion("delay_topic not in", values, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicBetween(Byte value1, Byte value2) { + addCriterion("delay_topic between", value1, value2, "delayTopic"); + return (Criteria) this; + } + + public Criteria andDelayTopicNotBetween(Byte value1, Byte value2) { + addCriterion("delay_topic not between", value1, value2, "delayTopic"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoIsNull() { + addCriterion("need_audit_subinfo is null"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoIsNotNull() { + addCriterion("need_audit_subinfo is not null"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoEqualTo(Byte value) { + addCriterion("need_audit_subinfo =", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoNotEqualTo(Byte value) { + addCriterion("need_audit_subinfo <>", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoGreaterThan(Byte value) { + addCriterion("need_audit_subinfo >", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoGreaterThanOrEqualTo(Byte value) { + addCriterion("need_audit_subinfo >=", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoLessThan(Byte value) { + addCriterion("need_audit_subinfo <", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoLessThanOrEqualTo(Byte value) { + addCriterion("need_audit_subinfo <=", value, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoIn(List values) { + addCriterion("need_audit_subinfo in", values, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoNotIn(List values) { + addCriterion("need_audit_subinfo not in", values, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoBetween(Byte value1, Byte value2) { + addCriterion("need_audit_subinfo between", value1, value2, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andNeedAuditSubinfoNotBetween(Byte value1, Byte value2) { + addCriterion("need_audit_subinfo not between", value1, value2, "needAuditSubinfo"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyIsNull() { + addCriterion("enable_schema_verify is null"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyIsNotNull() { + addCriterion("enable_schema_verify is not null"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyEqualTo(Byte value) { + addCriterion("enable_schema_verify =", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyNotEqualTo(Byte value) { + addCriterion("enable_schema_verify <>", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyGreaterThan(Byte value) { + addCriterion("enable_schema_verify >", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyGreaterThanOrEqualTo(Byte value) { + addCriterion("enable_schema_verify >=", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyLessThan(Byte value) { + addCriterion("enable_schema_verify <", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyLessThanOrEqualTo(Byte value) { + addCriterion("enable_schema_verify <=", value, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyIn(List values) { + addCriterion("enable_schema_verify in", values, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyNotIn(List values) { + addCriterion("enable_schema_verify not in", values, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyBetween(Byte value1, Byte value2) { + addCriterion("enable_schema_verify between", value1, value2, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andEnableSchemaVerifyNotBetween(Byte value1, Byte value2) { + addCriterion("enable_schema_verify not between", value1, value2, "enableSchemaVerify"); + return (Criteria) this; + } + + public Criteria andProduceModeIsNull() { + addCriterion("produce_mode is null"); + return (Criteria) this; + } + + public Criteria andProduceModeIsNotNull() { + addCriterion("produce_mode is not null"); + return (Criteria) this; + } + + public Criteria andProduceModeEqualTo(Byte value) { + addCriterion("produce_mode =", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeNotEqualTo(Byte value) { + addCriterion("produce_mode <>", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeGreaterThan(Byte value) { + addCriterion("produce_mode >", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeGreaterThanOrEqualTo(Byte value) { + addCriterion("produce_mode >=", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeLessThan(Byte value) { + addCriterion("produce_mode <", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeLessThanOrEqualTo(Byte value) { + addCriterion("produce_mode <=", value, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeIn(List values) { + addCriterion("produce_mode in", values, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeNotIn(List values) { + addCriterion("produce_mode not in", values, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeBetween(Byte value1, Byte value2) { + addCriterion("produce_mode between", value1, value2, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeNotBetween(Byte value1, Byte value2) { + addCriterion("produce_mode not between", value1, value2, "produceMode"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperIsNull() { + addCriterion("produce_mode_mapper is null"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperIsNotNull() { + addCriterion("produce_mode_mapper is not null"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperEqualTo(String value) { + addCriterion("produce_mode_mapper =", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperNotEqualTo(String value) { + addCriterion("produce_mode_mapper <>", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperGreaterThan(String value) { + addCriterion("produce_mode_mapper >", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperGreaterThanOrEqualTo(String value) { + addCriterion("produce_mode_mapper >=", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperLessThan(String value) { + addCriterion("produce_mode_mapper <", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperLessThanOrEqualTo(String value) { + addCriterion("produce_mode_mapper <=", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperLike(String value) { + addCriterion("produce_mode_mapper like", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperNotLike(String value) { + addCriterion("produce_mode_mapper not like", value, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperIn(List values) { + addCriterion("produce_mode_mapper in", values, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperNotIn(List values) { + addCriterion("produce_mode_mapper not in", values, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperBetween(String value1, String value2) { + addCriterion("produce_mode_mapper between", value1, value2, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andProduceModeMapperNotBetween(String value1, String value2) { + addCriterion("produce_mode_mapper not between", value1, value2, "produceModeMapper"); + return (Criteria) this; + } + + public Criteria andStateIsNull() { + addCriterion("state is null"); + return (Criteria) this; + } + + public Criteria andStateIsNotNull() { + addCriterion("state is not null"); + return (Criteria) this; + } + + public Criteria andStateEqualTo(Byte value) { + addCriterion("state =", value, "state"); + return (Criteria) this; + } + + public Criteria andStateNotEqualTo(Byte value) { + addCriterion("state <>", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThan(Byte value) { + addCriterion("state >", value, "state"); + return (Criteria) this; + } + + public Criteria andStateGreaterThanOrEqualTo(Byte value) { + addCriterion("state >=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThan(Byte value) { + addCriterion("state <", value, "state"); + return (Criteria) this; + } + + public Criteria andStateLessThanOrEqualTo(Byte value) { + addCriterion("state <=", value, "state"); + return (Criteria) this; + } + + public Criteria andStateIn(List values) { + addCriterion("state in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateNotIn(List values) { + addCriterion("state not in", values, "state"); + return (Criteria) this; + } + + public Criteria andStateBetween(Byte value1, Byte value2) { + addCriterion("state between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andStateNotBetween(Byte value1, Byte value2) { + addCriterion("state not between", value1, value2, "state"); + return (Criteria) this; + } + + public Criteria andConfigIsNull() { + addCriterion("config is null"); + return (Criteria) this; + } + + public Criteria andConfigIsNotNull() { + addCriterion("config is not null"); + return (Criteria) this; + } + + public Criteria andConfigEqualTo(String value) { + addCriterion("config =", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotEqualTo(String value) { + addCriterion("config <>", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThan(String value) { + addCriterion("config >", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigGreaterThanOrEqualTo(String value) { + addCriterion("config >=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThan(String value) { + addCriterion("config <", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLessThanOrEqualTo(String value) { + addCriterion("config <=", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigLike(String value) { + addCriterion("config like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotLike(String value) { + addCriterion("config not like", value, "config"); + return (Criteria) this; + } + + public Criteria andConfigIn(List values) { + addCriterion("config in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotIn(List values) { + addCriterion("config not in", values, "config"); + return (Criteria) this; + } + + public Criteria andConfigBetween(String value1, String value2) { + addCriterion("config between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andConfigNotBetween(String value1, String value2) { + addCriterion("config not between", value1, value2, "config"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("description is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("description is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("description =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("description <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("description >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("description >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("description <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("description <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("description like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("description not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("description in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("description not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("description between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("description not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNull() { + addCriterion("extra_params is null"); + return (Criteria) this; + } + + public Criteria andExtraParamsIsNotNull() { + addCriterion("extra_params is not null"); + return (Criteria) this; + } + + public Criteria andExtraParamsEqualTo(String value) { + addCriterion("extra_params =", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotEqualTo(String value) { + addCriterion("extra_params <>", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThan(String value) { + addCriterion("extra_params >", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsGreaterThanOrEqualTo(String value) { + addCriterion("extra_params >=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThan(String value) { + addCriterion("extra_params <", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLessThanOrEqualTo(String value) { + addCriterion("extra_params <=", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsLike(String value) { + addCriterion("extra_params like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotLike(String value) { + addCriterion("extra_params not like", value, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsIn(List values) { + addCriterion("extra_params in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotIn(List values) { + addCriterion("extra_params not in", values, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsBetween(String value1, String value2) { + addCriterion("extra_params between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andExtraParamsNotBetween(String value1, String value2) { + addCriterion("extra_params not between", value1, value2, "extraParams"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNull() { + addCriterion("is_delete is null"); + return (Criteria) this; + } + + public Criteria andIsDeleteIsNotNull() { + addCriterion("is_delete is not null"); + return (Criteria) this; + } + + public Criteria andIsDeleteEqualTo(Byte value) { + addCriterion("is_delete =", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotEqualTo(Byte value) { + addCriterion("is_delete <>", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThan(Byte value) { + addCriterion("is_delete >", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteGreaterThanOrEqualTo(Byte value) { + addCriterion("is_delete >=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThan(Byte value) { + addCriterion("is_delete <", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteLessThanOrEqualTo(Byte value) { + addCriterion("is_delete <=", value, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteIn(List values) { + addCriterion("is_delete in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotIn(List values) { + addCriterion("is_delete not in", values, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteBetween(Byte value1, Byte value2) { + addCriterion("is_delete between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andIsDeleteNotBetween(Byte value1, Byte value2) { + addCriterion("is_delete not between", value1, value2, "isDelete"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("create_time is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("create_time is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("create_time =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("create_time <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("create_time >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("create_time >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("create_time <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("create_time <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("create_time in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("create_time not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("create_time between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("create_time not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNull() { + addCriterion("modify_time is null"); + return (Criteria) this; + } + + public Criteria andModifyTimeIsNotNull() { + addCriterion("modify_time is not null"); + return (Criteria) this; + } + + public Criteria andModifyTimeEqualTo(Date value) { + addCriterion("modify_time =", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotEqualTo(Date value) { + addCriterion("modify_time <>", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThan(Date value) { + addCriterion("modify_time >", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeGreaterThanOrEqualTo(Date value) { + addCriterion("modify_time >=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThan(Date value) { + addCriterion("modify_time <", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeLessThanOrEqualTo(Date value) { + addCriterion("modify_time <=", value, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeIn(List values) { + addCriterion("modify_time in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotIn(List values) { + addCriterion("modify_time not in", values, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeBetween(Date value1, Date value2) { + addCriterion("modify_time between", value1, value2, "modifyTime"); + return (Criteria) this; + } + + public Criteria andModifyTimeNotBetween(Date value1, Date value2) { + addCriterion("modify_time not between", value1, value2, "modifyTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeGroupConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeGroupConfig.java new file mode 100644 index 0000000..1ad641e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeGroupConfig.java @@ -0,0 +1,53 @@ +package com.didi.carrera.console.dao.model.custom; + +import java.io.Serializable; + +import com.alibaba.fastjson.annotation.JSONField; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.xiaojukeji.carrera.config.v4.cproxy.RedisConfiguration; +import org.apache.commons.lang3.StringUtils; + + +public class ConsumeGroupConfig implements Serializable { + + public static final String key_asyncThreads = "asyncThreads"; + public static final String key_redisConfigStr = "redisConfigStr"; + + + private Integer asyncThreads = 8; + private RedisConfiguration redisConfig; + + public Integer getAsyncThreads() { + return asyncThreads; + } + + public void setAsyncThreads(Integer asyncThreads) { + this.asyncThreads = asyncThreads; + } + + public RedisConfiguration getRedisConfig() { + return redisConfig; + } + + public void setRedisConfig(RedisConfiguration redisConfig) { + this.redisConfig = redisConfig; + } + + public void setRedisConfigStr(String redisConfigStr) { + this.redisConfig = StringUtils.isBlank(redisConfigStr) ? null : FastJsonUtils.toObject(redisConfigStr, RedisConfiguration.class); + } + + @JSONField(serialize = false) + public String getRedisConfigStr() { + return this.redisConfig == null ? null : FastJsonUtils.toJson(redisConfig); + } + + @Override + public String toString() { + return "ConsumeGroupConfig{" + + "asyncThreads=" + asyncThreads + + ", redisConfig=" + redisConfig + + '}'; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeSubscriptionConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeSubscriptionConfig.java new file mode 100644 index 0000000..ef7b0b2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/ConsumeSubscriptionConfig.java @@ -0,0 +1,136 @@ +package com.didi.carrera.console.dao.model.custom; + +import com.google.common.collect.Lists; +import com.xiaojukeji.carrera.config.AppendContext; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +public class ConsumeSubscriptionConfig implements Serializable { + + public static final String key_fetchThreads = "fetchThreads"; + public static final String key_concurrency = "concurrency"; + public static final String key_maxPullBatchSize = "maxPullBatchSize"; + public static final String key_httpMaxTps = "httpMaxTps"; + public static final String key_maxConsumeLag = "maxConsumeLag"; + + + private Integer fetchThreads = 1; + + private Integer concurrency = 1024; + + private Integer maxPullBatchSize = 8; + + private Double httpMaxTps = -1D; + + private List appendContext = Lists.newArrayList(AppendContext.values()); + + private boolean needResetOffset = false; + + private Integer maxConsumeLag = -1; + + private boolean isOldDbData = false; + + private boolean binlog = false; + + private Map> proxies; + + public Integer getFetchThreads() { + return fetchThreads; + } + + public void setFetchThreads(Integer fetchThreads) { + this.fetchThreads = fetchThreads; + } + + public Integer getConcurrency() { + return concurrency; + } + + public void setConcurrency(Integer concurrency) { + this.concurrency = concurrency; + } + + public Integer getMaxPullBatchSize() { + return maxPullBatchSize; + } + + public void setMaxPullBatchSize(Integer maxPullBatchSize) { + this.maxPullBatchSize = maxPullBatchSize; + } + + public List getAppendContext() { + return appendContext; + } + + public void setAppendContext(List appendContext) { + this.appendContext = appendContext; + } + + public boolean isNeedResetOffset() { + return needResetOffset; + } + + public void setNeedResetOffset(boolean needResetOffset) { + this.needResetOffset = needResetOffset; + } + + public Integer getMaxConsumeLag() { + return maxConsumeLag; + } + + public void setMaxConsumeLag(Integer maxConsumeLag) { + this.maxConsumeLag = maxConsumeLag; + } + + public boolean isOldDbData() { + return isOldDbData; + } + + public void setOldDbData(boolean oldDbData) { + isOldDbData = oldDbData; + } + + public Double getHttpMaxTps() { + return httpMaxTps; + } + + public void setHttpMaxTps(Double httpMaxTps) { + this.httpMaxTps = httpMaxTps; + } + + public boolean isBinlog() { + return binlog; + } + + public void setBinlog(boolean binlog) { + this.binlog = binlog; + } + + public Map> getProxies() { + return proxies; + } + + public void setProxies(Map> proxies) { + this.proxies = proxies; + } + + @Override + public String toString() { + return "ConsumeSubscriptionConfig{" + + "fetchThreads=" + fetchThreads + + ", concurrency=" + concurrency + + ", maxPullBatchSize=" + maxPullBatchSize + + ", httpMaxTps=" + httpMaxTps + + ", appendContext=" + appendContext + + ", needResetOffset=" + needResetOffset + + ", maxConsumeLag=" + maxConsumeLag + + ", isOldDbData=" + isOldDbData + + ", binlog=" + binlog + + ", proxies=" + proxies + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomConsumeSubscription.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomConsumeSubscription.java new file mode 100644 index 0000000..2e6fefe --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomConsumeSubscription.java @@ -0,0 +1,85 @@ +package com.didi.carrera.console.dao.model.custom; + +import java.io.Serializable; +import java.util.Date; + + +public class CustomConsumeSubscription implements Serializable { + + private Long groupId; + private String groupName; + private String contacters; + private Long topicId; + private Long clusterId; + private Byte state; + private Date createTime; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters; + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Override + public String toString() { + return "CustomConsumeSubscription{" + + "groupId=" + groupId + + ", groupName='" + groupName + '\'' + + ", contacters='" + contacters + '\'' + + ", topicId=" + topicId + + ", clusterId=" + clusterId + + ", state=" + state + + ", createTime=" + createTime + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomSubscriptionStateCount.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomSubscriptionStateCount.java new file mode 100644 index 0000000..5afe550 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomSubscriptionStateCount.java @@ -0,0 +1,44 @@ +package com.didi.carrera.console.dao.model.custom; + +import java.io.Serializable; + + +public class CustomSubscriptionStateCount implements Serializable { + + private Long groupId; + private Integer state; + private Integer count; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public Integer getState() { + return state; + } + + public void setState(Integer state) { + this.state = state; + } + + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + @Override + public String toString() { + return "CustomSubscriptionStateCount{" + + "groupId=" + groupId + + ", state=" + state + + ", count=" + count + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomTopicConf.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomTopicConf.java new file mode 100644 index 0000000..1c72c70 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/CustomTopicConf.java @@ -0,0 +1,158 @@ +package com.didi.carrera.console.dao.model.custom; + +import java.io.Serializable; +import java.util.Map; + +import com.alibaba.fastjson.TypeReference; +import com.didi.carrera.console.common.util.FastJsonUtils; +import org.apache.commons.lang3.StringUtils; + + +public class CustomTopicConf implements Serializable { + + private Long topicId; + private Long confId; + private Long clusterId; + private String clusterName; + private Long mqServerId; + private String mqServerName; + private Long serverIdcId; + private String serverIdcName; + private Map clientIdc; + private Integer produceTps; + private Integer msgAvgSize; + private Integer msgMaxSize; + private Integer consumerNum; + private TopicConfConfig config; + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public Long getConfId() { + return confId; + } + + public void setConfId(Long confId) { + this.confId = confId; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public Long getMqServerId() { + return mqServerId; + } + + public void setMqServerId(Long mqServerId) { + this.mqServerId = mqServerId; + } + + public String getMqServerName() { + return mqServerName; + } + + public void setMqServerName(String mqServerName) { + this.mqServerName = mqServerName; + } + + public Integer getProduceTps() { + return produceTps; + } + + public void setProduceTps(Integer produceTps) { + this.produceTps = produceTps; + } + + public Integer getMsgAvgSize() { + return msgAvgSize; + } + + public void setMsgAvgSize(Integer msgAvgSize) { + this.msgAvgSize = msgAvgSize; + } + + public Integer getMsgMaxSize() { + return msgMaxSize; + } + + public void setMsgMaxSize(Integer msgMaxSize) { + this.msgMaxSize = msgMaxSize; + } + + public Integer getConsumerNum() { + return consumerNum; + } + + public void setConsumerNum(Integer consumerNum) { + this.consumerNum = consumerNum; + } + + public TopicConfConfig getTopicConfConfig() { + return config; + } + + public void setTopicConfig(TopicConfConfig config) { + this.config = config; + } + + public String getConfig() { + return this.config == null ? null : FastJsonUtils.toJsonString(config); + } + + public void setConfig(String config) { + this.config = StringUtils.isBlank(config) ? null : FastJsonUtils.toObject(config, TopicConfConfig.class); + } + + public Long getServerIdcId() { + return serverIdcId; + } + + public void setServerIdcId(Long serverIdcId) { + this.serverIdcId = serverIdcId; + } + + public String getServerIdcName() { + return serverIdcName; + } + + public void setServerIdcName(String serverIdcName) { + this.serverIdcName = serverIdcName; + } + + + + public String getClientIdc() { + return this.clientIdc == null ? null : FastJsonUtils.toJsonString(clientIdc); + } + + public void setClientIdc(String clientIdc) { + this.clientIdc = StringUtils.isBlank(clientIdc) ? null : FastJsonUtils.toObject(clientIdc, new TypeReference>() { + }); + } + + public Map getTopicConfClientIdc() { + return clientIdc; + } + + public void setTopicConfClientIdc(Map clientIdcMapper) { + this.clientIdc = clientIdcMapper; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfConfig.java new file mode 100644 index 0000000..8527c9b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfConfig.java @@ -0,0 +1,27 @@ +package com.didi.carrera.console.dao.model.custom; + +import java.io.Serializable; +import java.util.Map; +import java.util.Set; + + +public class TopicConfConfig implements Serializable { + public static final String key_proxies = "proxies"; + + private Map> proxies; + + public Map> getProxies() { + return proxies; + } + + public void setProxies(Map> proxies) { + this.proxies = proxies; + } + + @Override + public String toString() { + return "TopicConfConfig{" + + "proxies=" + proxies + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfig.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfig.java new file mode 100644 index 0000000..f96fd21 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/dao/model/custom/TopicConfig.java @@ -0,0 +1,51 @@ +package com.didi.carrera.console.dao.model.custom; + +import com.didi.carrera.console.dao.dict.TopicCompressionType; + +import java.io.Serializable; + + +public class TopicConfig implements Serializable { + public static final String key_useCache = "useCache"; + public static final String key_autoBatch = "autoBatch"; + public static final String key_compressionType = "compressionType"; + + private boolean useCache = true; + + private boolean autoBatch = false; + + private Byte compressionType = TopicCompressionType.RMQ_COMPRESSION.getIndex(); + + public boolean isUseCache() { + return useCache; + } + + public void setUseCache(boolean useCache) { + this.useCache = useCache; + } + + public boolean isAutoBatch() { + return autoBatch; + } + + public void setAutoBatch(boolean autoBatch) { + this.autoBatch = autoBatch; + } + + public Byte getCompressionType() { + return compressionType; + } + + public void setCompressionType(Byte compressionType) { + this.compressionType = compressionType; + } + + @Override + public String toString() { + return "TopicConfig{" + + "useCache=" + useCache + + ", autoBatch=" + autoBatch + + ", compressionType=" + compressionType + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/data/Message.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/data/Message.java new file mode 100644 index 0000000..d0a645d --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/data/Message.java @@ -0,0 +1,85 @@ +package com.didi.carrera.console.data; + + +public class Message { + + private String tags; + private String keys; + private Integer storeSize; + private Long bornTimestamp; + + private String qid; + private long offset; + private String body; + + public Message(String qid, long offset, String body, String tags, String keys, Integer storeSize, Long bornTimestamp) { + this.tags = tags; + this.keys = keys; + this.storeSize = storeSize; + this.bornTimestamp = bornTimestamp; + this.qid = qid; + this.offset = offset; + this.body = body; + } + + public String getQid() { + return qid; + } + + public void setQid(String qid) { + this.qid = qid; + } + + public long getOffset() { + return offset; + } + + public void setOffset(long offset) { + this.offset = offset; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getKeys() { + return keys; + } + + public void setKeys(String keys) { + this.keys = keys; + } + + public Integer getStoreSize() { + return storeSize; + } + + public void setStoreSize(Integer storeSize) { + this.storeSize = storeSize; + } + + public Long getBornTimestamp() { + return bornTimestamp; + } + + public void setBornTimestamp(Long bornTimestamp) { + this.bornTimestamp = bornTimestamp; + } + + @Override + public String toString() { + return super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterMqserverRelationService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterMqserverRelationService.java new file mode 100644 index 0000000..1e01c57 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterMqserverRelationService.java @@ -0,0 +1,21 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.dict.ClusterMqServerRelationType; +import com.didi.carrera.console.dao.model.ClusterMqserverRelation; + +import java.util.List; + + +public interface ClusterMqserverRelationService { + + List findByClusterId(Long clusterId); + + List findByClusterId(Long clusterId, ClusterMqServerRelationType type); + + List findByMqServerId(Long mqServerId); + + boolean insert(ClusterMqserverRelation relation); + + boolean updateByPrimaryKey(ClusterMqserverRelation relation); + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterService.java new file mode 100644 index 0000000..22ee662 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ClusterService.java @@ -0,0 +1,18 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.Cluster; + +import java.util.List; +import java.util.Map; + + +public interface ClusterService { + + Cluster findById(Long clusterId); + + Cluster findByClusterName(String clusterName); + + List findAll(); + + Map findMap(); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeGroupService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeGroupService.java new file mode 100644 index 0000000..312ff26 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeGroupService.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.vo.ConsumeGroupSearchItemVo; +import com.didi.carrera.console.service.vo.ConsumeGroupVo; +import com.didi.carrera.console.service.vo.GroupConsumeStateVo; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupBo; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupResetOffsetBo; + +import java.util.List; + + +public interface ConsumeGroupService { + ConsumeGroup findByGroupName(String groupName); + + ConsumeGroup findById(Long groupId); + + List findById(List idList); + + List findByClusterId(Long clusterId); + + List findAll(); + + ConsoleBaseResponse> findAll(String user, String text, Integer curPage, Integer pageSize); + + ConsoleBaseResponse create(ConsumeGroupBo groupBo) throws Exception; + + ConsoleBaseResponse changeState(String user, Long groupId, Integer state) throws Exception; + + ConsoleBaseResponse> getConsumeState(String user, Long groupId, Long topicId, Long clusterId); + + ConsoleBaseResponse resetOffset(ConsumeGroupResetOffsetBo resetOffsetBo) throws Exception; + + ConsoleBaseResponse findSearchItem(String user, Long groupId); + + boolean validUserExist(String user, Long groupId); + + ConsoleBaseResponse> findAllWithoutPage(String user); + + ConsoleBaseResponse delete(String user, Long groupId) throws Exception; + + void insertOrUpdate(ConsumeGroup group); + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeSubscriptionService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeSubscriptionService.java new file mode 100644 index 0000000..d590333 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ConsumeSubscriptionService.java @@ -0,0 +1,63 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomSubscriptionStateCount; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.exception.ZkConfigException; +import com.didi.carrera.console.service.vo.SearchItemVo; +import com.didi.carrera.console.service.vo.SubscriptionOrderListVo; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupResetOffsetBo; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + + +public interface ConsumeSubscriptionService { + + ConsoleBaseResponse validateConsumeSubscriptionBo(ConsumeSubscriptionOrderBo subscriptionBo) throws ZkConfigException; + + List findByTopicIdClusterId(Long topicId, Long clusterId); + + ConsoleBaseResponse findByGroupClusterTopicId(Long groupId, Long clusterId, Long topicId); + + List findByNotNullGroupClusterTopicId(Long groupId, Long clusterId, Long topicId); + + ConsumeSubscription findById(Long subId); + + List findEnableByGroupId(Long groupId); + + List findEnableByClusterId(Long clusterId); + + List findByClusterId(Long clusterId); + + ConsoleBaseResponse> findAll(String user, String text, Long clusterId, Long groupId, Integer consumeType, Integer state, Integer curPage, @RequestParam Integer pageSize); + + ConsoleBaseResponse changeState(String user, Long subId, Integer state) throws Exception; + + ConsoleBaseResponse changeState(Long groupId, Integer state) throws Exception; + + List findByGroupId(Long groupId); + + List findStateCountByGroupId(List groupIds); + + ConsoleBaseResponse createConsumeSubscription(ConsumeSubscriptionOrderBo subscriptionBo) throws Exception; + + ConsoleBaseResponse resetOffset(ConsumeGroupResetOffsetBo resetOffsetBo) throws Exception; + + ConsoleBaseResponse delete(String user, Long subId) throws Exception; + + ConsoleBaseResponse deleteByGroupId(String user, Long groupId) throws Exception; + + ConsoleBaseResponse> findMsgPushType(String user); + + List findAll(); + + ConsoleBaseResponse addCProxy(String clusterName, String host) throws Exception; + ConsoleBaseResponse addCProxy(String groupName, String clusterName, String host) throws Exception; + ConsoleBaseResponse removeCProxy(String host) throws Exception; + ConsoleBaseResponse removeCProxy(String groupName, String host) throws Exception; + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/MqServerService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/MqServerService.java new file mode 100644 index 0000000..fea4b3f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/MqServerService.java @@ -0,0 +1,21 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.MqServerBo; + +import java.util.List; + + +public interface MqServerService { + + List findAll(); + + MqServer findById(Long mqServerId); + + MqServer findByName(String mqServerName); + + ConsoleBaseResponse create(MqServerBo bo) throws Exception; + + boolean updateAddrById(Long mqServerId, String addr); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/NodeService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/NodeService.java new file mode 100644 index 0000000..1dc01b3 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/NodeService.java @@ -0,0 +1,27 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.dict.NodeType; +import com.didi.carrera.console.dao.model.Node; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.NodeBo; + +import java.util.List; + + +public interface NodeService { + + Node findById(Long nodeId); + + List findByClusterId(Long clusterId); + + List findByClusterIdNodeType(Long clusterId, NodeType nodeType); + + List findByHostNodeType(String host, NodeType nodeType); + + List findByClusterHostNodeType(Long clusterId, String host, NodeType nodeType); + + ConsoleBaseResponse create(NodeBo bo) throws Exception; + + List findAll(); + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/OffsetManagerService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/OffsetManagerService.java new file mode 100644 index 0000000..7831269 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/OffsetManagerService.java @@ -0,0 +1,16 @@ +package com.didi.carrera.console.service; + +import java.util.Date; +import java.util.Map; + + +public interface OffsetManagerService { + void resetOffsetToLatest(Long clusterId, Long groupId, Long topicId) throws Exception; + + void resetOffsetByTime(Long clusterId, Long groupId, Long topicId, Date time) throws Exception; + + void resetOffsetByOffset(Long clusterId, Long groupId, Long topicId, String qid, long offset) throws Exception; + + Map> getProduceOffset(Long clusterId, Long topicId) throws Exception; + Map> getConsumeOffset(Long clusterId, Long groupId, Long topicId) throws Exception; +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/RmqAdminService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/RmqAdminService.java new file mode 100644 index 0000000..0e7a965 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/RmqAdminService.java @@ -0,0 +1,25 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.data.Message; +import org.apache.rocketmq.common.admin.TopicStatsTable; +import org.apache.rocketmq.common.protocol.body.ClusterInfo; + +import java.util.Date; + + +public interface RmqAdminService { + + void createTopic(Long clusterId, String topic) throws Exception; + + Message queryLatestMessage(String nameServer, String topic) throws Exception; + + TopicStatsTable queryTopicConsumeState(String nameServer, String topic) throws Exception; + + void resetOffsetToLatest(String nameServer, String group, String topic) throws Exception; + + void resetOffsetByTime(String nameServer, String group, String topic, Date date) throws Exception; + + ClusterInfo examineBrokerClusterInfo(String nameServer) throws Exception; + + String getClusterName(String nameServer) throws Exception; +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicConfService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicConfService.java new file mode 100644 index 0000000..f370911 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicConfService.java @@ -0,0 +1,32 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.dao.model.custom.CustomTopicConf; + +import java.util.List; + + +public interface TopicConfService { + + List findByTopicId(List topicIds); + + List findByTopicId(Long topicId); + + List findByClusterId(Long clusterId); + + List findByTopicClusterId(Long topicId, Long clusterId); + + boolean insert(TopicConf conf) throws Exception; + + boolean insert(List confList) throws Exception; + + boolean updateByPrimaryKey(TopicConf conf) throws Exception; + + boolean deleteByIds(List configIds); + + List findAll(); + + List findTopicByClusterIdWithDeleted(Long clusterId); + + List findByTopicClusterIds(List topicIds, List clusterIds); +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicService.java new file mode 100644 index 0000000..80c81ba --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/TopicService.java @@ -0,0 +1,52 @@ +package com.didi.carrera.console.service; + +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.vo.TopicListGroupVo; +import com.didi.carrera.console.service.vo.TopicMessageVo; +import com.didi.carrera.console.service.vo.TopicOrderVo; +import com.didi.carrera.console.service.vo.TopicSimpleVo; +import com.didi.carrera.console.service.vo.TopicStateVo; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.AcceptTopicConfBo; +import com.didi.carrera.console.web.controller.bo.TopicConfBo; +import com.didi.carrera.console.web.controller.bo.TopicOrderBo; + +import java.util.List; + + +public interface TopicService { + + Topic findByTopicName(String topicName); + + List findByTopicNameWithDelete(String topicName); + + List findByClusterId(Long clusterId); + + List findById(List idList); + + Topic findById(Long topicId); + + ConsoleBaseResponse validateTopicBo(TopicOrderBo topicInfo); + + ConsoleBaseResponse> findAll(Long clusterId, String text, String user, Integer curPage, Integer pageSize); + + ConsoleBaseResponse> findAllSimple(String user); + + List findAllWithoutPage(); + + ConsoleBaseResponse> findGroup(String user, Long topicId, Long clusterId); + + ConsoleBaseResponse create(TopicOrderBo topicOrderBo) throws Exception; + + ConsoleBaseResponse> findState(String user, Long topicId, Long clusterId); + + ConsoleBaseResponse findMessage(String user, Long topicId, Long clusterId); + + ConsoleBaseResponse findVoById(Long topicId); + + ConsoleBaseResponse addPProxy(String clusterName, String host) throws Exception; + ConsoleBaseResponse addPProxy(String topicName, String clusterName, String host) throws Exception; + ConsoleBaseResponse removePProxy(String host) throws Exception; + ConsoleBaseResponse removePProxy(String topicName, String host) throws Exception; +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ZKV4ConfigService.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ZKV4ConfigService.java new file mode 100644 index 0000000..50adcb9 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/ZKV4ConfigService.java @@ -0,0 +1,49 @@ +package com.didi.carrera.console.service; + +import java.util.Set; + +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.service.exception.ZkConfigException; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.xiaojukeji.carrera.config.v4.GroupConfig; +import com.xiaojukeji.carrera.config.v4.cproxy.UpstreamTopic; + + +public interface ZKV4ConfigService { + void updateTopicConfig(Long topicId, Set clusterIdSet) throws Exception; + + void updateSubConfig(Long groupId, Set clusterIdSet) throws Exception; + + void onlyUpdateGroupConfig(Long groupId) throws Exception; + + void updatePProxyConfig(Long nodeId) throws Exception; + + void updateCProxyConfig(Long nodeId) throws Exception; + + void updateBrokerConfig(Long mqServerId) throws Exception; + + void initAllZk() throws Exception; + + void initZkPath() throws Exception; + + ConsoleBaseResponse pushCproxyConfig(String host) throws Exception; + + ConsoleBaseResponse pushPproxyConfig(String host) throws Exception; + + ConsoleBaseResponse pushTopicConfig(String topicName) throws Exception; + + ConsoleBaseResponse pushGroupConfig(String groupName) throws Exception; + + ConsoleBaseResponse pushTopicByCluster(String clusterName) throws Exception; + + ConsoleBaseResponse pushGroupByCluster(String clusterName) throws Exception; + + ConsoleBaseResponse pushPProxyByCluster(String clusterName) throws Exception; + + ConsoleBaseResponse pushCProxyByCluster(String clusterName) throws Exception; + + UpstreamTopic buildUpstreamTopic(GroupConfig groupConfig, ConsumeSubscription subscription, String brokerCluster) throws ZkConfigException; + + void updatePProxyConfigByClusterId(String topic, Set clusterIdSet) throws Exception; + void updateCProxyConfigByClusterId(String group, Set clusterIdSet) throws Exception; +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/bean/PageModel.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/bean/PageModel.java new file mode 100644 index 0000000..24163ab --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/bean/PageModel.java @@ -0,0 +1,97 @@ +package com.didi.carrera.console.service.bean; + +import com.alibaba.fastjson.annotation.JSONField; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.List; + + +public class PageModel { + + private Integer curPage; + private Integer pageSize; + private Integer totalSize; + private Integer totalPage; + + private List list; + + public PageModel(Integer curPageNum, Integer pageSize, Integer totalSize) { + this.curPage = curPageNum; + this.pageSize = pageSize; + this.totalSize = totalSize; + this.totalPage = (this.totalSize - 1) / this.pageSize + 1; + + if (curPageNum < 1) { + this.curPage = 1; + } else if (curPageNum > this.totalPage) { + this.curPage = this.totalPage; + } else { + this.curPage = curPageNum; + } + } + + public Integer getCurPage() { + return curPage; + } + + public void setCurPage(Integer curPage) { + this.curPage = curPage; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Integer getTotalSize() { + return totalSize; + } + + public void setTotalSize(Integer totalSize) { + this.totalSize = totalSize; + } + + public Integer getTotalPage() { + return totalPage; + } + + public void setTotalPage(Integer totalPage) { + this.totalPage = totalPage; + } + + @JSONField(serialize = false) + public Integer getPageIndex() { + return (curPage-1) * pageSize; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public void addListItem(T t) { + if(CollectionUtils.isEmpty(list)) { + list = Lists.newArrayList(); + } + + list.add(t); + } + + @Override + public String toString() { + return "PageModel{" + + "curPage=" + curPage + + ", pageSize=" + pageSize + + ", totalSize=" + totalSize + + ", totalPage=" + totalPage + + ", list=" + list + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ConvertDataException.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ConvertDataException.java new file mode 100644 index 0000000..651670a --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ConvertDataException.java @@ -0,0 +1,6 @@ +package com.didi.carrera.console.service.exception; + + +public class ConvertDataException extends Exception { + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/MqException.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/MqException.java new file mode 100644 index 0000000..b4f8c16 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/MqException.java @@ -0,0 +1,12 @@ +package com.didi.carrera.console.service.exception; + + +public class MqException extends Exception { + public MqException(String message) { + super(message); + } + + public MqException(String message, Throwable cause) { + super(message, cause); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ZkConfigException.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ZkConfigException.java new file mode 100644 index 0000000..1f0a4b4 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/exception/ZkConfigException.java @@ -0,0 +1,8 @@ +package com.didi.carrera.console.service.exception; + + +public class ZkConfigException extends Exception { + public ZkConfigException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterMqserverRelationServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterMqserverRelationServiceImpl.java new file mode 100644 index 0000000..cbf336e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterMqserverRelationServiceImpl.java @@ -0,0 +1,70 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.dict.ClusterMqServerRelationType; +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.mapper.ClusterMqserverRelationMapper; +import com.didi.carrera.console.dao.model.ClusterMqserverRelation; +import com.didi.carrera.console.dao.model.ClusterMqserverRelationCriteria; +import com.didi.carrera.console.service.ClusterMqserverRelationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +public class ClusterMqserverRelationServiceImpl implements ClusterMqserverRelationService { + + @Autowired + private ClusterMqserverRelationMapper clusterMqserverRelationMapper; + + private List findByCondition(Long clusterId, Long mqServerId, ClusterMqServerRelationType type) { + ClusterMqserverRelationCriteria cmrc = getClusterMqserverRelationCriteria(clusterId, mqServerId, type); + + return clusterMqserverRelationMapper.selectByExample(cmrc); + } + + private ClusterMqserverRelationCriteria getClusterMqserverRelationCriteria(Long clusterId, Long mqServerId, ClusterMqServerRelationType type) { + ClusterMqserverRelationCriteria cmrc = new ClusterMqserverRelationCriteria(); + ClusterMqserverRelationCriteria.Criteria cmrcc = cmrc.createCriteria(); + cmrcc.andIsDeleteEqualTo(IsDelete.NO.getIndex()); + if(clusterId != null && clusterId > 0) { + cmrcc.andClusterIdEqualTo(clusterId); + } + + if(mqServerId != null && mqServerId > 0) { + cmrcc.andMqServerIdEqualTo(mqServerId); + } + + if(type != null) { + cmrcc.andTypeEqualTo(type.getIndex()); + } + return cmrc; + } + + @Override + public List findByClusterId(Long clusterId) { + return findByCondition(clusterId, null, null); + } + + @Override + public List findByClusterId(Long clusterId, ClusterMqServerRelationType type) { + return findByCondition(clusterId, null, type); + } + + @Override + public List findByMqServerId(Long mqServerId) { + return findByCondition(null, mqServerId, null); + } + + @Override + public boolean insert(ClusterMqserverRelation relation) { + relation.setId(null); + return clusterMqserverRelationMapper.insertSelective(relation) > 0; + } + + @Override + public boolean updateByPrimaryKey(ClusterMqserverRelation relation) { + return clusterMqserverRelationMapper.updateByPrimaryKeySelective(relation) > 0; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterServiceImpl.java new file mode 100644 index 0000000..be8906f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ClusterServiceImpl.java @@ -0,0 +1,54 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.mapper.ClusterMapper; +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ClusterCriteria; +import com.didi.carrera.console.service.ClusterService; +import com.google.common.collect.Maps; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + + +@Service("didiClusterServiceImpl") +public class ClusterServiceImpl implements ClusterService { + + @Autowired + private ClusterMapper clusterMapper; + + @Override + public Cluster findById(Long clusterId) { + return clusterMapper.selectByPrimaryKey(clusterId); + } + + @Override + public Cluster findByClusterName(String clusterName) { + ClusterCriteria cc = new ClusterCriteria(); + cc.createCriteria().andNameEqualTo(clusterName).andIsDeleteEqualTo(IsDelete.NO.getIndex()); + List list = clusterMapper.selectByExample(cc); + if (CollectionUtils.isNotEmpty(list)) { + return list.get(0); + } + + return null; + } + + @Override + public List findAll() { + ClusterCriteria cc = new ClusterCriteria(); + cc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return clusterMapper.selectByExample(cc); + } + + + @Override + public Map findMap() { + Map map = Maps.newHashMap(); + findAll().forEach(cluster -> map.put(cluster.getId(), cluster)); + return map; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeGroupServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeGroupServiceImpl.java new file mode 100644 index 0000000..41bd010 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeGroupServiceImpl.java @@ -0,0 +1,439 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.DaoUtil; +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.mapper.ConsumeGroupMapper; +import com.didi.carrera.console.dao.mapper.custom.ConsumeGroupCustomMapper; +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.dao.model.ConsumeGroupCriteria; +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.dao.model.custom.ConsumeGroupConfig; +import com.didi.carrera.console.dao.model.custom.CustomSubscriptionStateCount; +import com.didi.carrera.console.service.ConsumeGroupService; +import com.didi.carrera.console.service.ConsumeSubscriptionService; +import com.didi.carrera.console.service.MqServerService; +import com.didi.carrera.console.service.OffsetManagerService; +import com.didi.carrera.console.service.RmqAdminService; +import com.didi.carrera.console.service.TopicConfService; +import com.didi.carrera.console.service.ZKV4ConfigService; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.vo.ConsumeGroupSearchItemVo; +import com.didi.carrera.console.service.vo.ConsumeGroupVo; +import com.didi.carrera.console.service.vo.GroupConsumeStateVo; +import com.didi.carrera.console.service.vo.SearchItemVo; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupBo; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupResetOffsetBo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.rocketmq.common.admin.TopicStatsTable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +@Service("didiConsumeGroupServiceImpl") +@EnableTransactionManagement +public class ConsumeGroupServiceImpl implements ConsumeGroupService { + private static final Logger LOGGER = LoggerFactory.getLogger(ConsumeGroupServiceImpl.class); + + @Autowired + private ConsumeGroupCustomMapper consumeGroupCustomMapper; + + @Autowired + private ConsumeGroupMapper consumeGroupMapper; + + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + @Resource(name = "didiTopicConfServiceImpl") + private TopicConfService topicConfService; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Resource(name = "didiOffsetManagerServiceImpl") + private OffsetManagerService offsetManagerService; + + @Resource(name = "didiRmqAdminServiceImpl") + private RmqAdminService rmqAdminService; + + @Override + public ConsumeGroup findByGroupName(String groupName) { + ConsumeGroupCriteria cgc = new ConsumeGroupCriteria(); + cgc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andGroupNameEqualTo(groupName); + List list = consumeGroupMapper.selectByExample(cgc); + if (CollectionUtils.isEmpty(list)) { + return null; + } + + return list.get(0); + } + + @Override + public ConsumeGroup findById(Long groupId) { + return consumeGroupMapper.selectByPrimaryKey(groupId); + } + + @Override + public List findById(List idList) { + ConsumeGroupCriteria cgc = new ConsumeGroupCriteria(); + cgc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andIdIn(idList); + return consumeGroupMapper.selectByExample(cgc); + } + + @Override + public List findByClusterId(Long clusterId) { + List subList = consumeSubscriptionService.findByClusterId(clusterId); + if (CollectionUtils.isEmpty(subList)) { + return Collections.emptyList(); + } + + Set groupIdSet = Sets.newHashSet(); + subList.forEach(sub -> groupIdSet.add(sub.getGroupId())); + + return findById(Lists.newArrayList(groupIdSet)); + } + + @Override + public List findAll() { + ConsumeGroupCriteria cgc = new ConsumeGroupCriteria(); + cgc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return consumeGroupMapper.selectByExample(cgc); + } + + @Override + public ConsoleBaseResponse> findAllWithoutPage(String user) { + user = DaoUtil.getLikeField(user + ";"); + ConsumeGroupCriteria cgc = new ConsumeGroupCriteria(); + cgc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andContactersLike(user); + cgc.setOrderByClause("create_time desc"); + + List list = consumeGroupMapper.selectByExample(cgc); + + return ConsoleBaseResponse.success(Lists.newArrayList(getConsumeGroupVoMap(list).values())); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse delete(String user, Long groupId) throws Exception { + ConsumeGroup group = findById(groupId); + if (group == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, String.format("groupId<%s>subscription info not exist.", groupId)); + } + + ConsoleBaseResponse ret = consumeSubscriptionService.deleteByGroupId(user, groupId); + if (ret.isSuccess()) { + deleteById(user, groupId); + } + + return ConsoleBaseResponse.success(); + } + + private void deleteById(String user, Long subId) { + ConsumeGroup group = new ConsumeGroup(); + group.setIsDelete(IsDelete.YES.getIndex()); + group.setId(subId); + group.setRemark(user); + consumeGroupMapper.updateByPrimaryKeySelective(group); + + } + + @Override + public ConsoleBaseResponse> findAll(String user, String text, Integer curPage, Integer pageSize) { + return findAllByCondition(user, text, curPage, pageSize); + } + + private ConsoleBaseResponse> findAllByCondition(String user, String text, Integer curPage, Integer pageSize) { + if (!StringUtils.isEmpty(user)) { + user = DaoUtil.getLikeField(user + ";"); + } + + if (!StringUtils.isEmpty(text)) { + text = DaoUtil.getLikeField(text); + } + + Integer totalCount = consumeGroupCustomMapper.selectCountByCondition(user, text); + PageModel pageModel = new PageModel<>(curPage, pageSize, totalCount); + if (totalCount == 0) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + List list = consumeGroupCustomMapper.selectByCondition(user, text, pageModel.getPageIndex(), pageModel.getPageSize()); + if (CollectionUtils.isEmpty(list)) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + Map retMap = getConsumeGroupVoMap(list); + fillSubCount(retMap, Lists.newArrayList(retMap.keySet())); + + pageModel.setList(Lists.newArrayList(retMap.values())); + return ConsoleBaseResponse.success(pageModel); + } + + private Map getConsumeGroupVoMap(List list) { + Map retMap = Maps.newLinkedHashMap(); + list.forEach(consumeGroup -> { + ConsumeGroupVo vo = ConsumeGroupVo.buildConsumeGroupVo(consumeGroup); + retMap.put(consumeGroup.getId(), vo); + }); + + return retMap; + } + + private void fillSubCount(Map retMap, List groupIdList) { + List consumeNumList = consumeSubscriptionService.findStateCountByGroupId(groupIdList); + if (CollectionUtils.isNotEmpty(consumeNumList)) { + consumeNumList.forEach(item -> { + if (retMap.containsKey(item.getGroupId())) { + ConsumeGroupVo vo = retMap.get(item.getGroupId()); + int subNum = vo.getSubscriptionNum() == null ? 0 : vo.getSubscriptionNum(); + vo.setSubscriptionNum(subNum + item.getCount()); + + if (IsEnable.isEnable(item.getState().byteValue())) { + int subEnableNum = vo.getSubscriptionEnableNum() == null ? 0 : vo.getSubscriptionEnableNum(); + vo.setSubscriptionEnableNum(subEnableNum + item.getCount()); + } + } + }); + } + } + + private List findByGroupNameWithDelete(String groupName) { + ConsumeGroupCriteria cgc = new ConsumeGroupCriteria(); + cgc.createCriteria().andGroupNameEqualTo(groupName); + + return consumeGroupMapper.selectByExample(cgc); + } + + private ConsoleBaseResponse validConsumeGroupBo(ConsumeGroupBo groupBo) { + if (!groupBo.isModify() && CollectionUtils.isNotEmpty(findByGroupNameWithDelete(groupBo.getGroupName()))) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "consumer group already exist."); + } + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse create(ConsumeGroupBo groupBo) throws Exception { + ConsoleBaseResponse validRet = validConsumeGroupBo(groupBo); + if (!validRet.isSuccess()) { + return validRet; + } + + groupBo.setContacters(groupBo.getContacters().toLowerCase()); + + ConsumeGroup group = groupBo.buildConsumeGroup(); + if (groupBo.isModify()) { + group.setId(groupBo.getGroupId()); + + ConsumeGroup dbGroup = findById(groupBo.getGroupId()); + if (dbGroup == null || dbGroup.getIsDelete() == IsDelete.YES.getIndex()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "groupId<" + groupBo.getGroupId() + "> not exist"); + } + group.setConsumeGroupConfig(dbGroup.getConsumeGroupConfig() == null ? new ConsumeGroupConfig() : dbGroup.getConsumeGroupConfig()); + + insertOrUpdate(group); + } else { + group.setId(null); + group.setConsumeGroupConfig(new ConsumeGroupConfig()); + group.setCreateTime(new Date()); + group.setIsDelete(IsDelete.NO.getIndex()); + + insertOrUpdate(group); + } + pushV4ZkInfo(group.getId()); + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public void insertOrUpdate(ConsumeGroup group) { + if (group.getId() != null && group.getId() > 0) { + consumeGroupMapper.updateByPrimaryKeySelective(group); + } else { + consumeGroupMapper.insertSelective(group); + } + } + + private void pushV4ZkInfo(Long groupId) throws Exception { + zkv4ConfigService.onlyUpdateGroupConfig(groupId); + } + + @Override + public boolean validUserExist(String user, Long groupId) { + if (StringUtils.isBlank(user)) { + return false; + } + + ConsumeGroupCriteria csc = new ConsumeGroupCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andIdEqualTo(groupId).andContactersLike(DaoUtil.getLikeField(user)); + return consumeGroupMapper.countByExample(csc) > 0; + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse changeState(String user, Long groupId, Integer state) throws Exception { + if (IsEnable.getByIndex(state.byteValue()) == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "only 0 or 1"); + } + + if (!validUserExist(user, groupId)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, user + "not authorized"); + } + return consumeSubscriptionService.changeState(groupId, state); + } + + private boolean primaryKeyIsNull(Long id) { + return id == null || id.equals(0L); + } + + @Override + public ConsoleBaseResponse> getConsumeState(String user, Long groupId, Long topicId, Long clusterId) { + if (primaryKeyIsNull(groupId)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "consumerGroup is empty"); + } + + List list = consumeSubscriptionService.findByNotNullGroupClusterTopicId(groupId, clusterId, topicId); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription info not found"); + } + + ConsumeSubscription sub = list.get(0); + + return ConsoleBaseResponse.success(buildGroupConsumeStateVoList(groupId, sub.getTopicId(), sub.getClusterId(), sub)); + } + + private List buildGroupConsumeStateVoList(Long groupId, Long topicId, Long clusterId, ConsumeSubscription sub) { + List voList = Lists.newArrayList(); + Map> minOffsetMap = getRmqTopicMinOffsetMap(topicId, clusterId); + try { + Map> consumeOffsetMap = offsetManagerService.getConsumeOffset(clusterId, groupId, topicId); + Map> produceOffsetMap = offsetManagerService.getProduceOffset(clusterId, topicId); + + consumeOffsetMap.forEach((mqType, offsetMap) -> offsetMap.forEach((qid, consumeOffset) -> { + GroupConsumeStateVo vo = new GroupConsumeStateVo(); + BeanUtils.copyProperties(sub, vo); + voList.add(vo); + + if (MqServerType.ROCKETMQ.getName().equalsIgnoreCase(mqType)) { + vo.setQid(qid); + vo.setConsumeOffset(consumeOffset); + vo.setMinOffset(minOffsetMap.get("min").getOrDefault(qid, null)); + vo.setMaxOffset(minOffsetMap.get("max").containsKey(qid) ? minOffsetMap.get("max").get(qid) : null); + vo.setLag(getConsumeLag(produceOffsetMap, MqServerType.ROCKETMQ.getName(), qid, consumeOffset)); + } else { + vo.setQid(qid); + vo.setConsumeOffset(consumeOffset); + vo.setMinOffset(null); + vo.setLag(getConsumeLag(produceOffsetMap, MqServerType.KAFKA.getName(), qid, consumeOffset)); + } + })); + } catch (Exception e) { + LOGGER.error("build GroupConsumeStateVo exception", e); + } + + return voList; + } + + private long getConsumeLag(Map> produceOffsetMap, String mqType, String qid, Long consumeOffset) { + long produceOffset = -1L; + if (produceOffsetMap.containsKey(mqType) && produceOffsetMap.get(mqType).containsKey(qid)) { + produceOffset = produceOffsetMap.get(mqType).remove(qid); + } + return produceOffset > consumeOffset ? produceOffset - consumeOffset : 0; + } + + private Map> getRmqTopicMinOffsetMap(Long topicId, Long clusterId) { + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + MqServer rmqServer = null; + TopicConf topicConf = null; + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + topicConf = conf; + rmqServer = mqServer; + } + } + Map> ret = Maps.newHashMap(); + Map minOffsetMap = Maps.newHashMap(); + Map maxOffsetMap = Maps.newHashMap(); + ret.put("min", minOffsetMap); + ret.put("max", maxOffsetMap); + if (rmqServer == null) { + return ret; + } + + try { + TopicStatsTable statsTable = rmqAdminService.queryTopicConsumeState(rmqServer.getAddr(), topicConf.getTopicName()); + statsTable.getOffsetTable().forEach(((messageQueue, topicOffset) -> { + minOffsetMap.put(RmqAdminServiceImpl.getNewQid(messageQueue), topicOffset.getMinOffset()); + maxOffsetMap.put(RmqAdminServiceImpl.getNewQid(messageQueue), topicOffset.getMaxOffset()); + })); + + return ret; + } catch (Exception e) { + LOGGER.error("queryTopicConsumeState exception, topic:" + topicConf.getTopicName() + ", mqserver:" + topicConf.getMqServerName()); + return ret; + } + } + + @Override + public ConsoleBaseResponse resetOffset(ConsumeGroupResetOffsetBo resetOffsetBo) throws Exception { + return consumeSubscriptionService.resetOffset(resetOffsetBo); + } + + @Override + public ConsoleBaseResponse findSearchItem(String user, Long groupId) { + ConsumeGroupSearchItemVo vo = new ConsumeGroupSearchItemVo(); + vo.setCluster(Lists.newArrayList()); + vo.setTopic(Lists.newArrayList()); + + List list = consumeSubscriptionService.findByGroupId(groupId); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.success(vo); + } + + Map clusterMap = Maps.newHashMap(); + Map topicMap = Maps.newHashMap(); + list.forEach(sub -> { + if (!clusterMap.containsKey(sub.getClusterId())) { + clusterMap.put(sub.getClusterId(), new SearchItemVo(sub.getClusterId(), sub.getClusterName())); + } + + if (!topicMap.containsKey(sub.getTopicId())) { + topicMap.put(sub.getTopicId(), new SearchItemVo(sub.getTopicId(), sub.getTopicName())); + } + }); + vo.getCluster().addAll(clusterMap.values()); + vo.getTopic().addAll(topicMap.values()); + + return ConsoleBaseResponse.success(vo); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeSubscriptionServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeSubscriptionServiceImpl.java new file mode 100644 index 0000000..79cfeec --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ConsumeSubscriptionServiceImpl.java @@ -0,0 +1,827 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.common.util.CacheLockUtils; +import com.didi.carrera.console.common.util.HostUtils; +import com.didi.carrera.console.dao.DaoUtil; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionMsgPushType; +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.dict.NodeType; +import com.didi.carrera.console.dao.mapper.ConsumeSubscriptionMapper; +import com.didi.carrera.console.dao.mapper.custom.ConsumeSubscriptionCustomMapper; +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.ConsumeSubscriptionCriteria; +import com.didi.carrera.console.dao.model.Node; +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.dao.model.custom.ConsumeSubscriptionConfig; +import com.didi.carrera.console.dao.model.custom.CustomConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomSubscriptionStateCount; +import com.didi.carrera.console.service.ClusterService; +import com.didi.carrera.console.service.ConsumeGroupService; +import com.didi.carrera.console.service.ConsumeSubscriptionService; +import com.didi.carrera.console.service.NodeService; +import com.didi.carrera.console.service.OffsetManagerService; +import com.didi.carrera.console.service.TopicService; +import com.didi.carrera.console.service.ZKV4ConfigService; +import com.didi.carrera.console.service.exception.ZkConfigException; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.vo.SearchItemVo; +import com.didi.carrera.console.service.vo.SubscriptionOrderListVo; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupResetOffsetBo; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import com.didi.carrera.console.web.controller.bo.NodeBo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.xiaojukeji.carrera.config.Actions; +import com.xiaojukeji.carrera.config.AppendContext; +import com.xiaojukeji.carrera.config.v4.GroupConfig; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + + +@Service("didiConsumeSubscriptionServiceImpl") +@EnableTransactionManagement +public class ConsumeSubscriptionServiceImpl implements ConsumeSubscriptionService { + private static final Logger LOGGER = LoggerFactory.getLogger(ConsumeSubscriptionServiceImpl.class); + + @Autowired + private ConsumeSubscriptionCustomMapper consumeSubscriptionCustomMapper; + + @Autowired + private ConsumeSubscriptionMapper consumeSubscriptionMapper; + + @Resource(name = "didiConsumeGroupServiceImpl") + private ConsumeGroupService consumeGroupService; + + @Resource(name = "didiOffsetManagerServiceImpl") + private OffsetManagerService offsetManagerService; + + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + @Resource(name = "didiTopicServiceImpl") + private TopicService topicService; + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Resource(name = "didiNodeServiceImpl") + private NodeService nodeService; + + @Override + public ConsoleBaseResponse validateConsumeSubscriptionBo(ConsumeSubscriptionOrderBo subscriptionBo) throws ZkConfigException { + Topic topic = topicService.findById(subscriptionBo.getTopicId()); + if (topic == null) { + LOGGER.info("validate error:topic not exist ", subscriptionBo.getTopicId()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic not exist"); + } + + subscriptionBo.setTopicName(topic.getTopicName()); + + ConsumeGroup group = consumeGroupService.findById(subscriptionBo.getGroupId()); + if (group == null) { + LOGGER.info("validate error:group not exist ", subscriptionBo.getGroupId()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "group not exist"); + } + + subscriptionBo.setGroupName(group.getGroupName()); + + for (Long clusterId : subscriptionBo.getClusters().values()) { + Cluster cluster = clusterService.findById(clusterId); + if (cluster == null) { + LOGGER.info("validate error:cluster not exist ", clusterId); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster<" + subscriptionBo.getClusters().get(clusterId) + ">not exist"); + } + + subscriptionBo.getClusters().put(cluster.getName(), clusterId); + } + + if (!subscriptionBo.isModify()) { + for (Long clusterId : subscriptionBo.getClusters().values()) { + if (findByIds(subscriptionBo.getGroupId(), clusterId, subscriptionBo.getTopicId()) != null) { + LOGGER.info("validate error:subscription exist ", subscriptionBo.getGroupId(), clusterId, subscriptionBo.getTopicId()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription existed"); + } + } + } else { + ConsumeSubscription dbSub = findById(subscriptionBo.getSubId()); + if (dbSub == null || dbSub.getIsDelete() == IsDelete.YES.getIndex()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription not found"); + } + + if (IsEnable.isEnable(dbSub.getState())) { + validateMixAction(subscriptionBo.getSubId(), subscriptionBo.getGroupId(), subscriptionBo.buildActions()); + } + } + + com.xiaojukeji.carrera.config.v4.cproxy.UpstreamTopic upstreamTopic = buildUpstreamTopicV4(subscriptionBo); + + try { + if (!upstreamTopic.validate()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "UpstreamTopic validate Failed"); + } + } catch (Exception e) { + LOGGER.error("validate error:" + e.getMessage(), e); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, e.getMessage()); + } + + return ConsoleBaseResponse.success(); + } + + private com.xiaojukeji.carrera.config.v4.cproxy.UpstreamTopic buildUpstreamTopicV4(ConsumeSubscriptionOrderBo subscriptionBo) throws ZkConfigException { + ConsumeSubscription subscription = subscriptionBo.buildConsumeSubscription(); + subscription.setState(IsEnable.DISABLE.getIndex()); + + ConsumeSubscriptionConfig config = new ConsumeSubscriptionConfig(); + subscription.setConsumeSubscriptionConfig(config); + return zkv4ConfigService.buildUpstreamTopic(new GroupConfig(), subscription, "0"); + } + + @Override + public List findAll() { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + private void initProxies(ConsumeSubscription sub) { + ConsumeGroup group = consumeGroupService.findById(sub.getGroupId()); + if (group == null) { + throw new RuntimeException("group not found, subId=" + sub.getId()); + } + doInitProxies(sub); + } + + private void doInitProxies(ConsumeSubscription sub) { + ConsumeSubscriptionConfig config = sub.getConsumeSubscriptionConfig(); + if (config.getProxies() == null) { + config.setProxies(Maps.newHashMap()); + } + config.getProxies().clear(); + + List nodeList; + String clusterName = sub.getClusterName(); + + nodeList = nodeService.findByClusterIdNodeType(sub.getClusterId(), NodeType.CONSUMER_PROXY); + + if (CollectionUtils.isNotEmpty(nodeList)) { + Set hostSet = nodeList.stream().map(n -> HostUtils.getIpPortFromHost(n.getHost(), ZKV4ConfigServiceImpl.DEFAULT_CPROXY_PORT)).collect(Collectors.toSet()); + config.getProxies().computeIfAbsent("C_" + clusterName, s -> Sets.newHashSet()).addAll(hostSet); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse addCProxy(String clusterName, String host) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster not found"); + } + + if (!validNodeExist(host, cluster, NodeType.CONSUMER_PROXY)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host not found"); + } + + List subscriptionList = findByClusterId(cluster.getId()); + if (CollectionUtils.isEmpty(subscriptionList)) { + return ConsoleBaseResponse.success(); + } + addCProxy(host, subscriptionList); + + return ConsoleBaseResponse.success(); + } + + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse addCProxy(String groupName, String clusterName, String host) throws Exception { + ConsumeGroup group = consumeGroupService.findByGroupName(groupName); + if (group == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "group not found"); + } + + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster not found"); + } + + if (!validNodeExist(host, cluster, NodeType.CONSUMER_PROXY)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host not found"); + } + + List subscriptionList = findByNotNullGroupClusterTopicId(group.getId(), cluster.getId(), null); + if (CollectionUtils.isEmpty(subscriptionList)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription not found"); + } + addCProxy(host, subscriptionList); + + return ConsoleBaseResponse.success(); + } + + private boolean validNodeExist(String host, Cluster cluster, NodeType nodeType) { + List nodeList = nodeService.findByClusterHostNodeType(cluster.getId(), host, nodeType); + if (CollectionUtils.isEmpty(nodeList)) { + String ip = HostUtils.getIp(host); + if (host.equals(ip)) { + return createCProxyNode(host, cluster, nodeType); + } + nodeList = nodeService.findByClusterHostNodeType(cluster.getId(), host, nodeType); + if (CollectionUtils.isEmpty(nodeList)) { + return createCProxyNode(host, cluster, nodeType); + } + } + return true; + } + + private boolean createCProxyNode(String host, Cluster cluster, NodeType nodeType) { + try { + NodeBo nodeBo = new NodeBo(); + nodeBo.setClusterid(cluster.getId()); + nodeBo.setHost(host); + nodeBo.setNodetype(nodeType.getIndex()); + nodeService.create(nodeBo); + return true; + } catch (Exception e) { + LOGGER.error("create node error {}, {}", host, cluster); + return false; + } + } + + private void addCProxy(String host, List subList) throws Exception { + String ipPort = HostUtils.getIpPortFromHost(host, ZKV4ConfigServiceImpl.DEFAULT_CPROXY_PORT); + Set clusterIds = Sets.newHashSet(); + for (ConsumeSubscription sub : subList) { + if (sub.getConsumeSubscriptionConfig() != null && MapUtils.isNotEmpty(sub.getConsumeSubscriptionConfig().getProxies())) { + Map> proxyMap = sub.getConsumeSubscriptionConfig().getProxies(); + for (Map.Entry> entry : proxyMap.entrySet()) { + Set ipLists = entry.getValue(); + if (!ipLists.contains(ipPort)) { + ipLists.add(ipPort); + clusterIds.add(sub.getClusterId()); + updateByPrimaryKey(sub); + + pushV4ZkInfo(sub.getGroupId(), null); + LOGGER.info("add cproxy {} success, subId={}, group={}, topic={}, cluster={}", ipPort, sub.getId(), sub.getGroupName(), sub.getTopicName(), sub.getClusterName()); + } + } + } + } + if (CollectionUtils.isNotEmpty(clusterIds)) { + zkv4ConfigService.updateCProxyConfigByClusterId("addCProxy", clusterIds); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse removeCProxy(String host) throws Exception { + List subList = findAll(); + removeCProxy(host, subList); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse removeCProxy(String groupName, String host) throws Exception { + ConsumeGroup group = consumeGroupService.findByGroupName(groupName); + if (group == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "groupName not found"); + } + List subList = findByGroupId(group.getId()); + if (CollectionUtils.isEmpty(subList)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription not found"); + } + removeCProxy(host, subList); + + return ConsoleBaseResponse.success(); + } + + private void removeCProxy(String host, List subList) throws Exception { + String ipPort = HostUtils.getIpPortFromHost(host, ZKV4ConfigServiceImpl.DEFAULT_CPROXY_PORT); + Set clusterIds = Sets.newHashSet(); + for (ConsumeSubscription sub : subList) { + if (sub.getConsumeSubscriptionConfig() != null && MapUtils.isNotEmpty(sub.getConsumeSubscriptionConfig().getProxies())) { + Map> proxyMap = sub.getConsumeSubscriptionConfig().getProxies(); + for (Set ipLists : proxyMap.values()) { + if (ipLists.contains(ipPort)) { + ipLists.remove(ipPort); + clusterIds.add(sub.getClusterId()); + updateByPrimaryKey(sub); + + pushV4ZkInfo(sub.getGroupId(), null); + LOGGER.info("remove cproxy {} success, subId={}, group={}, topic={}, cluster={}", ipPort, sub.getId(), sub.getGroupName(), sub.getTopicName(), sub.getClusterName()); + } + } + } + } + if (CollectionUtils.isNotEmpty(clusterIds)) { + zkv4ConfigService.updateCProxyConfigByClusterId("removeCProxy", clusterIds); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse createConsumeSubscription(ConsumeSubscriptionOrderBo subscriptionBo) throws Exception { + ConsoleBaseResponse validateBo = validateConsumeSubscriptionBo(subscriptionBo); + if (!validateBo.isSuccess()) { + return validateBo; + } + + ConsumeSubscription subscription = subscriptionBo.buildConsumeSubscription(); + + if (!subscriptionBo.isModify()) { + for (Map.Entry entry : subscriptionBo.getClusters().entrySet()) { + Long clusterId = entry.getValue(); + String clusterName = entry.getKey(); + subscription.setClusterId(clusterId); + subscription.setClusterName(clusterName); + + subscription.setId(null); + ConsumeSubscriptionConfig config = new ConsumeSubscriptionConfig(); + if (subscription.getSubActions().contains(Actions.PULL_SERVER)) { + config.setAppendContext(null); + } + config.setNeedResetOffset(true); + + subscription.setConsumeSubscriptionConfig(config); + subscription.setIsDelete(IsDelete.NO.getIndex()); + subscription.setCreateTime(new Date()); + //创建默认禁用 + subscription.setState(IsEnable.DISABLE.getIndex()); + + initProxies(subscription); + + consumeSubscriptionMapper.insertSelective(subscription); + } + } else { + subscription.setId(subscriptionBo.getSubId()); + + subscription.setGroupName(null); + subscription.setTopicName(null); + subscription.setClusterName(null); + subscription.setClusterId(null); + ConsumeSubscription dbSub = findById(subscriptionBo.getSubId()); + if (dbSub == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subId<" + subscriptionBo.getSubId() + "> not found"); + } + + updateSubConfig(subscription, dbSub); + } + + pushV4ZkInfo(subscription.getGroupId(), null); + return ConsoleBaseResponse.success(); + } + + private void updateSubConfig(ConsumeSubscription subscription, ConsumeSubscription dbSub) throws Exception { + ConsumeSubscriptionConfig config = dbSub.getConsumeSubscriptionConfig(); + if (dbSub.getSubActions().contains(Actions.ASYNC_HTTP) && subscription.getSubActions().contains(Actions.PULL_SERVER)) { + config.setAppendContext(null); + } else if (dbSub.getSubActions().contains(Actions.PULL_SERVER) && subscription.getSubActions().contains(Actions.ASYNC_HTTP)) { + config.setAppendContext(Lists.newArrayList(AppendContext.values())); + } else if (dbSub.getSubActions().contains(Actions.ASYNC_HTTP) && subscription.getSubActions().contains(Actions.ASYNC_HTTP)) { + config.setAppendContext(Lists.newArrayList(AppendContext.values())); + } + + subscription.setConsumeSubscriptionConfig(config); + + updateByPrimaryKey(subscription); + } + + private void updateByPrimaryKey(ConsumeSubscription subscription) { + consumeSubscriptionMapper.updateByPrimaryKeySelective(subscription); + } + + @Override + public List findByNotNullGroupClusterTopicId(Long groupId, Long clusterId, Long topicId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + ConsumeSubscriptionCriteria.Criteria cscc = csc.createCriteria(); + cscc.andIsDeleteEqualTo(IsDelete.NO.getIndex()); + if (groupId != null) { + cscc.andGroupIdEqualTo(groupId); + } + if (clusterId != null) { + cscc.andClusterIdEqualTo(clusterId); + } + if (topicId != null) { + cscc.andTopicIdEqualTo(topicId); + } + + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + @Override + public List findEnableByClusterId(Long clusterId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId).andStateEqualTo(IsEnable.ENABLE.getIndex()); + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + @Override + public List findEnableByGroupId(Long groupId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andGroupIdEqualTo(groupId).andStateEqualTo(IsEnable.ENABLE.getIndex()); + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + @Override + public List findByClusterId(Long clusterId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId); + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + @Override + public List findByTopicIdClusterId(Long topicId, Long clusterId) { + return consumeSubscriptionCustomMapper.selectByTopicIdClusterId(topicId, clusterId); + } + + @Override + public ConsumeSubscription findById(Long subId) { + return consumeSubscriptionMapper.selectByPrimaryKey(subId); + } + + private Map getClusterMap() { + Map clusterMap = Maps.newHashMap(); + clusterService.findAll().forEach(cluster -> clusterMap.put(cluster.getId(), cluster)); + return clusterMap; + } + + @Override + public ConsoleBaseResponse> findAll(String user, String text, Long clusterId, Long groupId, Integer consumeType, Integer state, Integer curPage, Integer pageSize) { + return findAllByCondition(user, text, clusterId, groupId, consumeType, state, curPage, pageSize); + } + + private ConsoleBaseResponse> findAllByCondition(String user, String text, Long clusterId, Long groupId, Integer consumeType, Integer state, Integer curPage, Integer pageSize) { + + if (StringUtils.isNotEmpty(user)) { + user = DaoUtil.getLikeField(user); + } + if (StringUtils.isNotEmpty(text)) { + text = DaoUtil.getLikeField(text); + } + + Integer totalCount = consumeSubscriptionCustomMapper.selectCountByCondition(user, groupId, clusterId, consumeType, state, text); + PageModel pageModel = new PageModel<>(curPage, pageSize, totalCount); + if (totalCount == 0) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + List list = consumeSubscriptionCustomMapper.selectByCondition(user, groupId, clusterId, consumeType, state, text, pageModel.getPageIndex(), pageModel.getPageSize()); + if (CollectionUtils.isEmpty(list)) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + Map clusterMap = getClusterMap(); + + List retList = Lists.newArrayList(); + list.forEach(sub -> retList.add(SubscriptionOrderListVo.buildSubscriptionListVo(sub, clusterMap.get(sub.getClusterId()).getIdcId(), clusterMap.get(sub.getClusterId()).getIdc(), clusterMap.get(sub.getClusterId()).getDescription()))); + + pageModel.setList(retList); + return ConsoleBaseResponse.success(pageModel); + } + + @Override + public ConsoleBaseResponse findByGroupClusterTopicId(Long groupId, Long clusterId, Long topicId) { + ConsumeSubscription sub = findByIds(groupId, clusterId, topicId); + if (sub == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription info not found"); + } + + Cluster cluster = clusterService.findById(sub.getClusterId()); + + return ConsoleBaseResponse.success(SubscriptionOrderListVo.buildSubscriptionListVo(sub, cluster.getIdcId(), cluster.getIdc(), cluster.getDescription())); + } + + private ConsumeSubscription findByIds(Long groupId, Long clusterId, Long topicId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andGroupIdEqualTo(groupId).andClusterIdEqualTo(clusterId).andTopicIdEqualTo(topicId); + + List list = consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + if (CollectionUtils.isEmpty(list)) { + return null; + } + return list.get(0); + } + + private String getStateLockKey(Long id) { + return "CARRERA_GROUP_STAT_LOCK_" + id; + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse changeState(String user, Long subId, Integer state) throws Exception { + ConsumeSubscription sub = findById(subId); + if (!consumeGroupService.validUserExist(user, sub.getGroupId())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, user + "not authorized"); + } + if (IsEnable.getByIndex(state.byteValue()) == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "only 0 or 1"); + } + + return updateSubStateById(sub, state); + } + + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse changeState(Long groupId, Integer state) throws Exception { + List list = findByGroupId(groupId); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "not subscription info found"); + } + for (ConsumeSubscription sub : list) { + updateSubStateById(sub, state); + } + return ConsoleBaseResponse.success(); + } + + private ConsoleBaseResponse updateSubStateById(ConsumeSubscription subscription, Integer state) throws Exception { + if (subscription == null || subscription.getIsDelete() == IsDelete.YES.getIndex()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription<" + (subscription == null ? "" : subscription.getId()) + ">not found"); + } + + if (subscription.getState() == state.byteValue()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription<" + subscription.getId() + ">is " + IsEnable.getByIndex(state.byteValue()).getName() + " state"); + } + + if (IsEnable.isEnable(state.byteValue())) { + validateMixAction(subscription.getId(), subscription.getGroupId(), subscription.getSubActions()); + } + + + if (!CacheLockUtils.lock(getStateLockKey(subscription.getGroupId()))) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, subscription.getGroupName() + "is" + IsEnable.getByIndex(state.byteValue()).getName() + ""); + } + + try { + boolean updateConfig = false; + ConsumeSubscriptionConfig config = subscription.getConsumeSubscriptionConfig(); + if (IsEnable.isEnable(state.byteValue()) && config.isNeedResetOffset()) { + try { + offsetManagerService.resetOffsetToLatest(subscription.getClusterId(), subscription.getGroupId(), subscription.getTopicId()); + } catch (Exception e) { + LOGGER.error("resetOffsetToLatest exception", e); + } + + updateConfig = true; + config.setNeedResetOffset(false); + } + ConsumeSubscription cs = new ConsumeSubscription(); + cs.setId(subscription.getId()); + if (updateConfig) { + cs.setConsumeSubscriptionConfig(config); + } + cs.setState(state.byteValue()); + int ret = consumeSubscriptionMapper.updateByPrimaryKeySelective(cs); + if (ret > 0) { + Set clusterIdSet = Sets.newHashSet(subscription.getClusterId()); + pushV4ZkInfo(subscription.getGroupId(), clusterIdSet); + } + } finally { + CacheLockUtils.unlock(getStateLockKey(subscription.getGroupId())); + } + return ConsoleBaseResponse.success(); + } + + private void validateMixAction(Long subId, Long groupId, List actions) { + List subList = findEnableByGroupId(groupId); + if (CollectionUtils.isEmpty(subList)) { + return; + } + + int lowLevelCount = 0; + int httpCount = 0; + int totalCount = subList.size(); + boolean containsCurSub = false; + + for (ConsumeSubscription sub : subList) { + if (sub.getId().equals(subId)) { + containsCurSub = true; + continue; + } + if (sub.getActions().contains(Actions.LowLevel)) { + lowLevelCount++; + } + if (sub.getActions().contains(Actions.ASYNC_HTTP)) { + httpCount++; + } + } + + if (!containsCurSub) { + totalCount++; + } + + if (actions.contains(Actions.LowLevel)) { + lowLevelCount++; + } + + if (actions.contains(Actions.ASYNC_HTTP)) { + httpCount++; + } + + if (lowLevelCount > 0 && lowLevelCount != totalCount) { + LOGGER.info("validate error:subscription can not mix low-level and non-low-level topics ", subId, groupId); + throw new RuntimeException("HighLevel and LowLevel can not mixed"); + } + + if (httpCount > 0 && httpCount != totalCount) { + LOGGER.info("validate error:subscription can not mix SDK and Http ", subId, groupId); + throw new RuntimeException("SDK and Http can not mixed"); + } + } + + private void pushV4ZkInfo(Long groupId, Set clusterIdSet) throws Exception { + zkv4ConfigService.updateSubConfig(groupId, clusterIdSet); + } + + @Override + public List findByGroupId(Long groupId) { + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andGroupIdEqualTo(groupId); + + return consumeSubscriptionMapper.selectByExampleWithBLOBs(csc); + } + + @Override + public List findStateCountByGroupId(List groupIds) { + if (CollectionUtils.isEmpty(groupIds)) { + return Collections.emptyList(); + } + return consumeSubscriptionCustomMapper.selectStateCountByGroupId(groupIds); + } + + private ConsoleBaseResponse validateConsumeGroupResetOffsetBo(ConsumeGroupResetOffsetBo resetOffsetBo) { + if (!consumeGroupService.validUserExist(resetOffsetBo.getUser(), resetOffsetBo.getGroupId())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, resetOffsetBo.getUser() + "not authorized"); + } + + ConsumeSubscription sub = findByIds(resetOffsetBo.getGroupId(), resetOffsetBo.getClusterId(), resetOffsetBo.getTopicId()); + if (sub == null) { + LOGGER.info("validate error:subscription not exist ", resetOffsetBo.getGroupId(), resetOffsetBo.getClusterId(), resetOffsetBo.getTopicId()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "subscription not found"); + } + + if (IsEnable.isEnable(sub.getState())) { + LOGGER.info("validate error:subscription must is disable ", sub.getId(), resetOffsetBo.getGroupId(), resetOffsetBo.getClusterId(), resetOffsetBo.getTopicId()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Reset Offset require disable subscription first!"); + } + + if (resetOffsetBo.getResetType().byteValue() == ConsumeSubscriptionResetType.RESET_BY_TIME.getIndex() && resetOffsetBo.getResetTime() == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Please Specify Timestamp"); + } + + if (resetOffsetBo.getResetType().byteValue() == ConsumeSubscriptionResetType.RESET_BY_OFFSET.getIndex() && (resetOffsetBo.getOffset() == null || resetOffsetBo.getOffset().equals(0L))) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Please Specify Offset Value"); + } + + return ConsoleBaseResponse.success(); + } + + @Override + public ConsoleBaseResponse resetOffset(ConsumeGroupResetOffsetBo resetOffsetBo) throws Exception { + ConsoleBaseResponse validateBo = validateConsumeGroupResetOffsetBo(resetOffsetBo); + if (!validateBo.isSuccess()) { + return validateBo; + } + + switch (ConsumeSubscriptionResetType.getByIndex(resetOffsetBo.getResetType().byteValue())) { + case RESET_TO_LATEST: + offsetManagerService.resetOffsetToLatest(resetOffsetBo.getClusterId(), resetOffsetBo.getGroupId(), resetOffsetBo.getTopicId()); + break; + case RESET_BY_TIME: + offsetManagerService.resetOffsetByTime(resetOffsetBo.getClusterId(), resetOffsetBo.getGroupId(), resetOffsetBo.getTopicId(), resetOffsetBo.getResetTime()); + break; + case RESET_BY_OFFSET: + offsetManagerService.resetOffsetByOffset(resetOffsetBo.getClusterId(), resetOffsetBo.getGroupId(), resetOffsetBo.getTopicId(), resetOffsetBo.getQid(), resetOffsetBo.getOffset()); + break; + } + + return ConsoleBaseResponse.success(); + } + + private boolean deleteById(String user, Long subId) throws Exception { + ConsumeSubscription sub = new ConsumeSubscription(); + sub.setIsDelete(IsDelete.YES.getIndex()); + sub.setId(subId); + sub.setRemark(user); + updateByPrimaryKey(sub); + return true; + } + + private boolean deleteByIds(String user, List subIds) throws Exception { + ConsumeSubscription sub = new ConsumeSubscription(); + sub.setIsDelete(IsDelete.YES.getIndex()); + sub.setRemark(user); + + ConsumeSubscriptionCriteria csc = new ConsumeSubscriptionCriteria(); + csc.createCriteria().andIdIn(subIds); + consumeSubscriptionMapper.updateByExampleSelective(sub, csc); + return true; + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse delete(String user, Long subId) throws Exception { + ConsumeSubscription sub = findById(subId); + if (sub == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, String.format("subId<%s>not found", subId)); + } + + deleteById(user, subId); + + Set clusterIdSet = Sets.newHashSet(sub.getClusterId()); + pushV4ZkInfo(sub.getGroupId(), clusterIdSet); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse deleteByGroupId(String user, Long groupId) throws Exception { + List list = findByGroupId(groupId); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.success(); + } + + deleteByIds(user, list.stream().map(ConsumeSubscription::getId).collect(Collectors.toList())); + + Set clusterIdSet = list.stream().map(ConsumeSubscription::getClusterId).collect(Collectors.toSet()); + pushV4ZkInfo(groupId, clusterIdSet); + + return ConsoleBaseResponse.success(); + } + + @Override + public ConsoleBaseResponse> findMsgPushType(String user) { + List list = Lists.newArrayList(); + for (ConsumeSubscriptionMsgPushType type : ConsumeSubscriptionMsgPushType.values()) { + SearchItemVo vo = new SearchItemVo((long) type.getIndex(), type.getName()); + list.add(vo); + } + return ConsoleBaseResponse.success(list); + } + + public enum ConsumeSubscriptionResetType { + //1.重置到最新2.按时间点重置 3. 重置到指定offset + RESET_TO_LATEST((byte) 1, "reset to latest"), + RESET_BY_TIME((byte) 2, "reset by time"), + RESET_BY_OFFSET((byte) 3, "reset by offset"); + + private byte index; + + private String name; + + ConsumeSubscriptionResetType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public void setIndex(byte index) { + this.index = index; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public static ConsumeSubscriptionResetType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (ConsumeSubscriptionResetType item : all) { + if (item.getIndex() == index) { + return item; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/MqServerServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/MqServerServiceImpl.java new file mode 100644 index 0000000..de30a7b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/MqServerServiceImpl.java @@ -0,0 +1,103 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.mapper.MqServerMapper; +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.dao.model.MqServerCriteria; +import com.didi.carrera.console.service.MqServerService; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.MqServerBo; +import com.google.common.collect.Maps; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; + + +@Service("didiMqServerServiceImpl") +public class MqServerServiceImpl implements MqServerService { + private static final Logger LOGGER = LoggerFactory.getLogger(MqServerServiceImpl.class); + + @Autowired + private MqServerMapper mqServerMapper; + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse create(MqServerBo bo) throws Exception { + if (findByName(bo.getName()) != null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster name existed"); + } + + if(bo.getType() == MqServerType.ROCKETMQ.getIndex()) { + if(!bo.getAddr().contains(";") && bo.getAddr().split(":").length > 2) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "RMQ cluster address must be separated by semicolon"); + } + } else { + if(!bo.getAddr().contains(",") && bo.getAddr().split(":").length > 2) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Kafka cluster address must be separated by comma"); + } + } + + MqServer mqServer = new MqServer(); + BeanUtils.copyProperties(bo, mqServer); + mqServer.setIsDelete(IsDelete.NO.getIndex()); + mqServer.setCreateTime(new Date()); + + mqServerMapper.insertSelective(mqServer); + + Map map = Maps.newHashMap(); + map.put("id", mqServer.getId()); + return ConsoleBaseResponse.success(map); + } + + @Override + public boolean updateAddrById(Long mqServerId, String addr) { + MqServer mqServer = findById(mqServerId); + if (mqServer == null) { + LOGGER.error("mq_server not found id = {}", mqServerId); + return false; + } + mqServer.setAddr(addr); + mqServerMapper.updateByPrimaryKeySelective(mqServer); + return true; + } + + @Override + public List findAll() { + MqServerCriteria msc = new MqServerCriteria(); + msc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return mqServerMapper.selectByExample(msc); + } + + @Override + public MqServer findById(Long mqServerId) { + MqServerCriteria msc = new MqServerCriteria(); + msc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andIdEqualTo(mqServerId); + List list = mqServerMapper.selectByExample(msc); + if (CollectionUtils.isEmpty(list)) { + return null; + } + return list.get(0); + } + + @Override + public MqServer findByName(String mqServerName) { + MqServerCriteria msc = new MqServerCriteria(); + msc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andNameEqualTo(mqServerName); + List list = mqServerMapper.selectByExample(msc); + if (CollectionUtils.isEmpty(list)) { + return null; + } + return list.get(0); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/NodeServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/NodeServiceImpl.java new file mode 100644 index 0000000..b1a7d7a --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/NodeServiceImpl.java @@ -0,0 +1,166 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.NodeType; +import com.didi.carrera.console.dao.mapper.NodeMapper; +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ClusterMqserverRelation; +import com.didi.carrera.console.dao.model.Node; +import com.didi.carrera.console.dao.model.NodeCriteria; +import com.didi.carrera.console.service.ClusterMqserverRelationService; +import com.didi.carrera.console.service.ClusterService; +import com.didi.carrera.console.service.NodeService; +import com.didi.carrera.console.service.ZKV4ConfigService; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.NodeBo; +import com.google.common.collect.Maps; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; + + +@Service("didiNodeServiceImpl") +public class NodeServiceImpl implements NodeService { + private static final Logger LOGGER = LoggerFactory.getLogger(NodeServiceImpl.class); + + @Autowired + private NodeMapper nodeMapper; + + @Autowired + private ClusterMqserverRelationService clusterMqserverRelationService; + + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Override + public List findByClusterId(Long clusterId) { + NodeCriteria nc = new NodeCriteria(); + nc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId); + return nodeMapper.selectByExample(nc); + } + + @Override + public Node findById(Long nodeId) { + Node node = nodeMapper.selectByPrimaryKey(nodeId); + if (node == null) { + return null; + } + + return node; + } + + @Override + public List findAll() { + NodeCriteria nc = new NodeCriteria(); + nc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return nodeMapper.selectByExample(nc); + } + + @Override + public List findByClusterIdNodeType(Long clusterId, NodeType nodeType) { + NodeCriteria nc = new NodeCriteria(); + nc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId).andNodeTypeEqualTo(nodeType.getIndex()); + return nodeMapper.selectByExample(nc); + } + + @Override + public List findByHostNodeType(String host, NodeType nodeType) { + NodeCriteria nc = new NodeCriteria(); + nc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andHostEqualTo(host).andNodeTypeEqualTo(nodeType.getIndex()); + return nodeMapper.selectByExample(nc); + } + + @Override + public List findByClusterHostNodeType(Long clusterId, String host, NodeType nodeType) { + NodeCriteria nc = new NodeCriteria(); + nc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId).andHostEqualTo(host).andNodeTypeEqualTo(nodeType.getIndex()); + return nodeMapper.selectByExample(nc); + } + + + private List findByCondition(Node node) { + NodeCriteria nc = new NodeCriteria(); + NodeCriteria.Criteria ncc = nc.createCriteria(); + ncc.andIsDeleteEqualTo(IsDelete.NO.getIndex()); + if (node.getClusterId() != null) { + ncc.andClusterIdEqualTo(node.getClusterId()); + } + if (node.getNodeType() != null && NodeType.getByIndex(node.getNodeType()) != null) { + ncc.andNodeTypeEqualTo(node.getNodeType()); + } + if (node.getHost() != null) { + ncc.andHostEqualTo(node.getHost()); + } + if (node.getMasterId() != null) { + ncc.andMasterIdEqualTo(node.getMasterId()); + } + return nodeMapper.selectByExample(nc); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse create(NodeBo bo) throws Exception { + + Node node = new Node(); + node.setClusterId(bo.getClusterid()); + node.setNodeType(bo.getNodetype()); + node.setHost(bo.getHost()); + node.setModelId(bo.getModelid()); + node.setIsDelete(IsDelete.NO.getIndex()); + node.setCreateTime(new Date()); + + create(node); + + Map ret = Maps.newHashMap(); + ret.put("id", node.getId()); + return ConsoleBaseResponse.success(ret); + } + + private Long create(Node node) throws Exception { + Cluster cluster = clusterService.findById(node.getClusterId()); + if (cluster == null) { + throw new RuntimeException("cluster not found"); + } + + if (CollectionUtils.isNotEmpty(findByCondition(node))) { + throw new RuntimeException("node existed"); + } + + nodeMapper.insertSelective(node); + updateV4Zk(node, cluster); + + return node.getId(); + } + + private void updateV4Zk(Node node, Cluster cluster) throws Exception { + Byte nodeType = node.getNodeType(); + if (nodeType == NodeType.CONSUMER_PROXY.getIndex()) { + zkv4ConfigService.updateCProxyConfig(node.getId()); + } else if (nodeType == NodeType.PRODUCER_PROXY.getIndex()) { + zkv4ConfigService.updatePProxyConfig(node.getId()); + } else if (nodeType == NodeType.ROCKETMQ_BROKER_MASTER.getIndex() || nodeType == NodeType.ROCKETMQ_BROKER_SLAVE.getIndex()) { + List relationList = clusterMqserverRelationService.findByClusterId(cluster.getId()); + if (CollectionUtils.isEmpty(relationList)) { + LOGGER.warn("MqServer Relation not found, cluster=" + cluster.getName()); + return; + } + + for (ClusterMqserverRelation relation : relationList) { + zkv4ConfigService.updateBrokerConfig(relation.getMqServerId()); + } + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/OffsetManagerServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/OffsetManagerServiceImpl.java new file mode 100644 index 0000000..dd6fcf4 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/OffsetManagerServiceImpl.java @@ -0,0 +1,325 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.common.offset.RocketMQProduceOffsetFetcher; +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.service.ClusterService; +import com.didi.carrera.console.service.ConsumeGroupService; +import com.didi.carrera.console.service.ConsumeSubscriptionService; +import com.didi.carrera.console.service.exception.MqException; +import com.didi.carrera.console.service.MqServerService; +import com.didi.carrera.console.service.OffsetManagerService; +import com.didi.carrera.console.service.RmqAdminService; +import com.didi.carrera.console.service.TopicConfService; +import com.didi.carrera.console.service.TopicService; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.rocketmq.client.exception.MQClientException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +@Service("didiOffsetManagerServiceImpl") +public class OffsetManagerServiceImpl implements OffsetManagerService { + private static final Logger LOGGER = LoggerFactory.getLogger(OffsetManagerServiceImpl.class); + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Resource(name = "didiConsumeGroupServiceImpl") + private ConsumeGroupService consumeGroupService; + + @Resource(name = "didiTopicConfServiceImpl") + private TopicConfService topicConfService; + + @Resource(name = "didiTopicServiceImpl") + private TopicService topicService; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Resource(name = "didiRmqAdminServiceImpl") + private RmqAdminService rmqAdminService; + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + private ConcurrentMap rocketMQProduceOffsetFetcherMap = new ConcurrentHashMap<>(); + + @Override + public void resetOffsetToLatest(Long clusterId, Long groupId, Long topicId) throws Exception { + Cluster cluster = clusterService.findById(clusterId); + if (cluster == null || cluster.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(clusterId + " cluster not found"); + } + + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null || group.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(groupId + " consumerGroup not found"); + } + + Topic topic = topicService.findById(topicId); + if (topic == null || topic.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(topicId + " Topic not found"); + } + + List subList = consumeSubscriptionService.findByNotNullGroupClusterTopicId(groupId, clusterId, topicId); + if (CollectionUtils.isEmpty(subList)) { + throw new MqException("subscription not found"); + } + + ConsumeSubscription sub = subList.get(0); + if (MapUtils.isNotEmpty(sub.getSubExtraParams()) && sub.getSubExtraParams().containsKey(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER)) { + String tmpCluster = sub.getSubExtraParams().get(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER); + String[] arr = tmpCluster.split(";"); + for (String _cluster : arr) { + MqServer mqServer = mqServerService.findByName(_cluster); + if (mqServer == null) { + throw new MqException("subId<" + sub.getId() + ">'s cluster info <" + _cluster + "> error"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + rmqAdminService.resetOffsetToLatest(mqServer.getAddr(), group.getGroupName(), topic.getTopicName()); + } + + } + return; + } + + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(confList)) { + throw new MqException("Topic<" + topicId + ">not found in cluster <" + clusterId + ">"); + } + + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer == null || mqServer.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(conf.getMqServerId() + " MqServer not found"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + rmqAdminService.resetOffsetToLatest(mqServer.getAddr(), group.getGroupName(), topic.getTopicName()); + } + } + } + + @Override + public void resetOffsetByTime(Long clusterId, Long groupId, Long topicId, Date time) throws Exception { + Cluster cluster = clusterService.findById(clusterId); + if (cluster == null || cluster.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(clusterId + " cluster not found"); + } + + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null || group.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(groupId + " consumerGroup not found"); + } + + Topic topic = topicService.findById(topicId); + if (topic == null || topic.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(topicId + " Topic not found"); + } + + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(confList)) { + throw new MqException("Topic<" + topicId + ">not found in cluster<" + clusterId + ">"); + } + + List subList = consumeSubscriptionService.findByNotNullGroupClusterTopicId(groupId, clusterId, topicId); + if (CollectionUtils.isEmpty(subList)) { + throw new MqException("subscription not found"); + } + + ConsumeSubscription sub = subList.get(0); + if (MapUtils.isNotEmpty(sub.getSubExtraParams()) && sub.getSubExtraParams().containsKey(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER)) { + String tmpCluster = sub.getSubExtraParams().get(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER); + String[] arr = tmpCluster.split(";"); + for (String _cluster : arr) { + MqServer mqServer = mqServerService.findByName(_cluster); + if (mqServer == null) { + throw new MqException("subId<" + sub.getId() + ">'s cluster info <" + _cluster + ">error"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + rmqAdminService.resetOffsetByTime(mqServer.getAddr(), group.getGroupName(), topic.getTopicName(), time); + } else { + throw new MqException("Kafka do not support reset Offset by timestamp"); + } + } + return; + } + + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer == null || mqServer.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(conf.getMqServerId() + " MqServer not found"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + rmqAdminService.resetOffsetByTime(mqServer.getAddr(), group.getGroupName(), topic.getTopicName(), time); + } else { + throw new MqException("Kafka do not support reset Offset by timestamp"); + } + } + } + + @Override + public void resetOffsetByOffset(Long clusterId, Long groupId, Long topicId, String qid, long offset) throws Exception { + Cluster cluster = clusterService.findById(clusterId); + if (cluster == null || cluster.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(clusterId + " cluster not found"); + } + + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null || group.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(groupId + " consumerGroup not found"); + } + + Topic topic = topicService.findById(topicId); + if (topic == null || topic.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(topicId + " Topic not found"); + } + + List subList = consumeSubscriptionService.findByNotNullGroupClusterTopicId(groupId, clusterId, topicId); + if (CollectionUtils.isEmpty(subList)) { + throw new MqException("subscription not found"); + } + + ConsumeSubscription sub = subList.get(0); + if (MapUtils.isNotEmpty(sub.getSubExtraParams()) && sub.getSubExtraParams().containsKey(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER)) { + String tmpCluster = sub.getSubExtraParams().get(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER); + String[] arr = tmpCluster.split(";"); + for (String _cluster : arr) { + MqServer mqServer = mqServerService.findByName(_cluster); + if (mqServer == null) { + throw new MqException("subId<" + sub.getId() + ">'s cluster info<" + _cluster + ">error"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + throw new MqException("RocketMQ do not support reset by offset value"); + } else { + + } + } + return; + } + + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(confList)) { + throw new MqException("Topic<" + topicId + ">not found in cluster<" + clusterId + ">"); + } + + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer == null || mqServer.getIsDelete() == IsDelete.YES.getIndex()) { + throw new MqException(conf.getMqServerId() + " MqServer not found"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + throw new MqException("RocketMQ do not support reset by offset value"); + } else { + + } + } + } + + @Override + public Map> getProduceOffset(Long clusterId, Long topicId) throws Exception { + List topicConfList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(topicConfList)) throw new MqException("unexist topic"); + + return getProduceOffsetMap(topicConfList.get(0).getTopicName(), topicConfList.get(0)); + } + + @Override + public Map> getConsumeOffset(Long clusterId, Long groupId, Long topicId) throws Exception { + List topicConfList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(topicConfList)) throw new MqException("unexist topic"); + + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null) { + throw new MqException("unexist groupId"); + } + + return getConsumeOffsetMap(group.getGroupName(), topicConfList.get(0).getTopicName(), topicConfList); + } + + private Map> getProduceOffsetMap(String topic, TopicConf topicConf) throws MqException { + Map> returnMap = new HashMap<>(); + + MqServer mqServer = mqServerService.findById(topicConf.getMqServerId()); + if (mqServer == null) { + throw new MqException("unexist mqserver"); + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + RocketMQProduceOffsetFetcher fetcher = getRocketMQProduceOffsetFetcher(mqServer); + + Map maxOffsets = new HashMap<>(); + fetcher.getMaxOffset(fetcher.getBrokers()).entrySet().stream().filter(entry -> entry.getKey().getTopic().equals(topic)) + .forEach(entry -> maxOffsets.put(RmqAdminServiceImpl.getNewQid(entry.getKey()), entry.getValue())); + returnMap.put(MqServerType.ROCKETMQ.getName(), maxOffsets); + } else { + + } + return returnMap; + } + + private Map> getConsumeOffsetMap(String group, String topic, List topicConfList) throws Exception { + Map> returnMap = new HashMap<>(); + + for (TopicConf topicConf : topicConfList) { + + MqServer mqServer = mqServerService.findById(topicConf.getMqServerId()); + if (mqServer == null) throw new MqException("unexist mqserver"); + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + RocketMQProduceOffsetFetcher fetcher = getRocketMQProduceOffsetFetcher(mqServer); + + Map consumeOffsets = new HashMap<>(); + fetcher.getConsumeStats(group, topic).getOffsetTable().forEach((mq, offset) -> consumeOffsets.put(RmqAdminServiceImpl.getNewQid(mq), offset.getConsumerOffset())); + returnMap.put(MqServerType.ROCKETMQ.getName(), consumeOffsets); + } else { + + } + } + return returnMap; + } + + private RocketMQProduceOffsetFetcher getRocketMQProduceOffsetFetcher(MqServer mqServer) { + return rocketMQProduceOffsetFetcherMap.computeIfAbsent(mqServer.getId(), mqserverId -> { + try { + RocketMQProduceOffsetFetcher fetcher = new RocketMQProduceOffsetFetcher(mqServer.getAddr()); + fetcher.start(); + return fetcher; + } catch (MQClientException e) { + LOGGER.error("start rocketmq produce fetcher error, mqserverId:" + mqserverId, e); + throw new RuntimeException("start RocketMQProduceOffsetFetcher error, name=" + mqServer.getName() + ",nameServer:" + mqServer.getAddr()); + } + }); + } + + @PreDestroy + public void destory() { + LOGGER.info("OffsetManagerServiceImpl shutdown start"); + rocketMQProduceOffsetFetcherMap.forEach((k, v) -> v.shutdown()); + LOGGER.info("OffsetManagerServiceImpl shutdown end"); + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/RmqAdminServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/RmqAdminServiceImpl.java new file mode 100644 index 0000000..a34a514 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/RmqAdminServiceImpl.java @@ -0,0 +1,338 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.common.util.CodecsUtils; +import com.didi.carrera.console.dao.dict.ClusterMqServerRelationType; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.model.Cluster; +import com.didi.carrera.console.dao.model.ClusterMqserverRelation; +import com.didi.carrera.console.dao.model.MqServer; +import com.didi.carrera.console.service.ClusterMqserverRelationService; +import com.didi.carrera.console.service.ClusterService; +import com.didi.carrera.console.service.exception.MqException; +import com.didi.carrera.console.service.MqServerService; +import com.didi.carrera.console.service.RmqAdminService; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.didi.carrera.console.data.Message; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.rocketmq.client.consumer.DefaultMQPullConsumer; +import org.apache.rocketmq.client.consumer.PullResult; +import org.apache.rocketmq.client.consumer.PullStatus; +import org.apache.rocketmq.client.exception.MQBrokerException; +import org.apache.rocketmq.client.exception.MQClientException; +import org.apache.rocketmq.common.MixAll; +import org.apache.rocketmq.common.TopicConfig; +import org.apache.rocketmq.common.admin.TopicStatsTable; +import org.apache.rocketmq.common.message.MessageExt; +import org.apache.rocketmq.common.message.MessageQueue; +import org.apache.rocketmq.common.protocol.ResponseCode; +import org.apache.rocketmq.common.protocol.body.ClusterInfo; +import org.apache.rocketmq.common.protocol.body.ConsumerConnection; +import org.apache.rocketmq.common.protocol.route.BrokerData; +import org.apache.rocketmq.common.protocol.route.QueueData; +import org.apache.rocketmq.common.protocol.route.TopicRouteData; +import org.apache.rocketmq.remoting.exception.RemotingException; +import org.apache.rocketmq.tools.admin.DefaultMQAdminExt; +import org.apache.rocketmq.tools.admin.MQAdminExt; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PreDestroy; +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + + +@Service("didiRmqAdminServiceImpl") +public class RmqAdminServiceImpl implements RmqAdminService { + private static final Logger LOGGER = LoggerFactory.getLogger(RmqAdminServiceImpl.class); + + private static final int DEFAULT_READ_QUEUE_NUMS = 8; + private static final int DEFAULT_WRITE_QUEUE_NUMS = 8; + + private Map mqAdminExtMap = new ConcurrentHashMap<>(); + private Map mqPullConsumerMap = new ConcurrentHashMap<>(); + + private static final String CONSOLE_CONSUMER_GROUP = "CONSOLE_CONSUMER_GROUP"; + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Autowired + private ClusterMqserverRelationService clusterMqserverRelationService; + + @Override + public void createTopic(Long clusterId, String topic) throws Exception { + createTopic(clusterId, topic, DEFAULT_READ_QUEUE_NUMS, DEFAULT_WRITE_QUEUE_NUMS); + } + + private void createTopic(Long clusterId, String topic, int readQueueNums, int writeQueueNums) throws Exception { + Cluster cluster = clusterService.findById(clusterId); + if (cluster == null) { + throw new MqException("[RMQ] cluster not found, clusterId=" + clusterId); + } + + List relationList = clusterMqserverRelationService.findByClusterId(clusterId, ClusterMqServerRelationType.P_PROXY); + if (CollectionUtils.isEmpty(relationList)) { + throw new MqException("[RMQ] cluster not bind to MqServer, clusterId=" + clusterId); + } + + Map mqServerMap = Maps.newHashMap(); + mqServerService.findAll().forEach(server -> mqServerMap.put(server.getId(), server)); + + List bindRmqList = Lists.newArrayList(); + for (ClusterMqserverRelation relation : relationList) { + if (!mqServerMap.containsKey(relation.getMqServerId())) { + throw new MqException("[RMQ] MqServer not found, mqServerId=" + relation.getMqServerId()); + } + if (mqServerMap.get(relation.getMqServerId()).getType() == MqServerType.ROCKETMQ.getIndex()) { + if (StringUtils.isBlank(mqServerMap.get(relation.getMqServerId()).getAddr())) { + throw new MqException("[RMQ] MqServer NameServer info empty, mqServer=" + mqServerMap.get(relation.getMqServerId()).getName()); + } + bindRmqList.add(mqServerMap.get(relation.getMqServerId())); + } + } + + if (bindRmqList.size() != 1) { + List mqServerNameList = bindRmqList.stream().map(MqServer::getName).collect(Collectors.toList()); + throw new MqException("[RMQ] " + cluster.getName() + "bind multiple RMQ<" + mqServerNameList + ">"); + } + + String rmqCluster = getClusterName(bindRmqList.get(0).getAddr()); + + createTopic(rmqCluster, bindRmqList.get(0), topic, readQueueNums, writeQueueNums); + } + + + private Set getMasterBrokerByBrokerName(String nameServer, String rmqClusterName) throws Exception { + ClusterInfo clusterInfoSerializeWrapper = examineBrokerClusterInfo(nameServer); + Set brokerNameSet = clusterInfoSerializeWrapper.getClusterAddrTable().get(rmqClusterName); + + if (brokerNameSet == null) { + throw new RuntimeException("Make sure the specified clusterName exists or the nameserver which connected is correct"); + } + + Set masterSet = Sets.newHashSet(); + + for (String brokerName : brokerNameSet) { + BrokerData brokerData = clusterInfoSerializeWrapper.getBrokerAddrTable().get(brokerName); + if (brokerData != null) { + String addr = brokerData.getBrokerAddrs().get(MixAll.MASTER_ID); + if (addr != null) { + masterSet.add(addr); + } + } + } + + return masterSet; + } + + private void createTopic(String rmqClusterName, MqServer mqServer, String topic, int readQueueNums, int writeQueueNums) throws MqException { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(mqServer.getAddr()); + + if (isTopicExist(topic, defaultMQAdminExt)) { + LOGGER.info("rmq topic has exist, namesvr={}, topic={}", mqServer.getAddr(), topic); + return; + } + + try { + Set masterSet = getMasterBrokerByBrokerName(mqServer.getAddr(), rmqClusterName); + + TopicConfig topicConfig = new TopicConfig(); + topicConfig.setReadQueueNums(readQueueNums); + topicConfig.setWriteQueueNums(writeQueueNums); + topicConfig.setTopicName(topic); + for (String addr : masterSet) { + defaultMQAdminExt.createAndUpdateTopicConfig(addr, topicConfig); + } + } catch (Exception e) { + LOGGER.error("[RMQ] createTopic exception, topic:" + topic + ", rmqClusterName:" + rmqClusterName, e); + throw new MqException("[RMQ] create topic<" + topic + "> error:" + e.getMessage(), e); + } + } + + private boolean isTopicExist(String topic, DefaultMQAdminExt defaultMQAdminExt) throws MqException { + try { + TopicStatsTable topicStatsTable = defaultMQAdminExt.examineTopicStats(topic); + if (topicStatsTable == null || MapUtils.isEmpty(topicStatsTable.getOffsetTable())) { + return false; + } + return true; + } catch (MQClientException e) { + if (e.getResponseCode() == ResponseCode.TOPIC_NOT_EXIST) { + return false; + } + throw new MqException("get topic status error, " + e.getMessage(), e); + } catch (InterruptedException | RemotingException | MQBrokerException e) { + throw new MqException("get topic status error, " + e.getMessage(), e); + } + } + + @Override + public Message queryLatestMessage(String nameServer, String topic) throws Exception { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(nameServer); + + TopicRouteData topicRouteData = defaultMQAdminExt.examineTopicRouteInfo(topic); + if (topicRouteData == null) { + throw new MqException("[RMQ] topic<" + topic + "> route info is null"); + } + + List queueDatas = topicRouteData.getQueueDatas(); + Collections.shuffle(queueDatas); + for (QueueData queueData : queueDatas) { + for (int i = 0; i < queueData.getReadQueueNums(); i++) { + long maxOffsets = defaultMQAdminExt.maxOffset(new MessageQueue(topic, queueData.getBrokerName(), i)); + if (maxOffsets <= 0) { + continue; + } + Message msg = queryMessageByOffset(nameServer, topic, queueData.getBrokerName(), i, maxOffsets - 1); + if (msg != null) { + return msg; + } + } + } + + throw new MqException("[RMQ] fetch rmq latestmsg error, not exist"); + } + + private Message queryMessageByOffset(String nameServer, String topic, String brokerName, Integer qid, long offset) throws Exception { + DefaultMQPullConsumer mqPullConsumer = getMqPullConsumer(nameServer); + + MessageQueue mq = new MessageQueue(); + mq.setTopic(topic); + mq.setBrokerName(brokerName); + mq.setQueueId(qid); + + PullResult pullResult = mqPullConsumer.pull(mq, "*", offset, 1, 5000); + if (pullResult == null || pullResult.getPullStatus() != PullStatus.FOUND) { + throw new MqException(String.format("[RMQ] message not exsit, nsrv:%s, topic:%s, brokerName:%s, qid:%s, offset:%d", nameServer, topic, brokerName, qid, offset)); + } + + MessageExt messageExt = pullResult.getMsgFoundList().get(0); + if (messageExt.getBody().length == 0) { + return null; + } + + String msg; + if (CodecsUtils.isUtf8(messageExt.getBody())) { + msg = new String(messageExt.getBody(), "UTF-8"); + } else { + msg = java.util.Base64.getEncoder().encodeToString(messageExt.getBody()); + } + return new Message(brokerName + "_" + qid, offset, msg, messageExt.getTags(), messageExt.getKeys(), messageExt.getStoreSize(), messageExt.getBornTimestamp()); + } + + @Override + public TopicStatsTable queryTopicConsumeState(String nameServer, String topic) throws Exception { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(nameServer); + return defaultMQAdminExt.examineTopicStats(topic); + } + + + @Override + public void resetOffsetToLatest(String nameServer, String group, String topic) throws Exception { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(nameServer); + + if (isRmqConsumerConnect(defaultMQAdminExt, group, topic)) { + throw new RuntimeException(String.format("%s订阅%s的消费正在停止中,请稍后再试", group, topic)); + } + + defaultMQAdminExt.resetOffsetByTimestampOld(group, topic, -1, true); + } + + private boolean isRmqConsumerConnect(MQAdminExt mqAdminExt, String group, String topic) { + try { + ConsumerConnection connection = mqAdminExt.examineConsumerConnectionInfo(group); + if (connection == null || MapUtils.isEmpty(connection.getSubscriptionTable())) { + return false; + } + return connection.getSubscriptionTable().containsKey(topic); + } catch (Exception e) { + LOGGER.error("mqAdminExt.examineConsumerConnectionInfo(" + group + ") exception", e); + return false; + } + } + + @Override + public void resetOffsetByTime(String nameServer, String group, String topic, Date date) throws Exception { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(nameServer); + if (isRmqConsumerConnect(defaultMQAdminExt, group, topic)) { + throw new RuntimeException(String.format("%s订阅%s的消费正在停止中,请稍后再试", group, topic)); + } + defaultMQAdminExt.resetOffsetByTimestampOld(group, topic, date.getTime(), true); + } + + @Override + public ClusterInfo examineBrokerClusterInfo(String nameServer) throws Exception { + DefaultMQAdminExt defaultMQAdminExt = getMQAdminExt(nameServer); + return defaultMQAdminExt.examineBrokerClusterInfo(); + } + + + @Override + public String getClusterName(String nameServer) throws Exception { + ClusterInfo clusterInfo = examineBrokerClusterInfo(nameServer); + + String[] clusterNameArr = clusterInfo.retrieveAllClusterNames(); + if (ArrayUtils.isEmpty(clusterNameArr)) { + throw new MqException(String.format("can't found cluster info, namesvr=%s", nameServer)); + } + + return clusterNameArr[0]; + } + + private DefaultMQAdminExt getMQAdminExt(String addr) { + return mqAdminExtMap.computeIfAbsent(addr, s -> { + try { + DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt(); + defaultMQAdminExt.setNamesrvAddr(addr); + defaultMQAdminExt.setInstanceName(String.valueOf(System.currentTimeMillis())); + defaultMQAdminExt.start(); + return defaultMQAdminExt; + } catch (MQClientException e) { + LOGGER.error("[RMQ] start mqadminext error, nameServer:" + addr, e); + throw new RuntimeException("[RMQ] start mqAdminExt error, nameServer:" + addr); + } + }); + } + + private DefaultMQPullConsumer getMqPullConsumer(String addr) { + return mqPullConsumerMap.computeIfAbsent(addr, s -> { + try { + DefaultMQPullConsumer mqPullConsumer = new DefaultMQPullConsumer(CONSOLE_CONSUMER_GROUP); + mqPullConsumer.setNamesrvAddr(addr); + mqPullConsumer.setInstanceName(String.valueOf(System.currentTimeMillis())); + mqPullConsumer.start(); + return mqPullConsumer; + } catch (MQClientException e) { + LOGGER.error("start mqPullConsumer error, addr:" + addr, e); + throw new RuntimeException("[RMQ] start mqPullConsumer error, nameServer:" + addr); + } + }); + } + + public static String getNewQid(MessageQueue mq) { + return mq.getBrokerName() + "_" + mq.getQueueId(); + } + + @PreDestroy + public void destory() { + LOGGER.info("RmqAdminServiceImpl shutdown"); + mqAdminExtMap.values().forEach(DefaultMQAdminExt::shutdown); + mqPullConsumerMap.values().forEach(DefaultMQPullConsumer::shutdown); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicConfServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicConfServiceImpl.java new file mode 100644 index 0000000..5ab8741 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicConfServiceImpl.java @@ -0,0 +1,142 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.mapper.TopicConfMapper; +import com.didi.carrera.console.dao.mapper.custom.TopicConfCustomMapper; +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.dao.model.TopicConfCriteria; +import com.didi.carrera.console.dao.model.custom.CustomTopicConf; +import com.didi.carrera.console.service.MqServerService; +import com.didi.carrera.console.service.RmqAdminService; +import com.didi.carrera.console.service.TopicConfService; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + + +@Service("didiTopicConfServiceImpl") +public class TopicConfServiceImpl implements TopicConfService { + private static final Logger LOGGER = LoggerFactory.getLogger(TopicConfServiceImpl.class); + + @Autowired + private TopicConfMapper topicConfMapper; + + @Autowired + private TopicConfCustomMapper topicConfCustomMapper; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Resource(name = "didiRmqAdminServiceImpl") + private RmqAdminService rmqAdminService; + + @Override + public List findByTopicId(List topicIds) { + return topicConfCustomMapper.selectByTopicId(topicIds); + } + + @Override + public List findByTopicClusterIds(List topicIds, List clusterIds) { + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andTopicIdIn(topicIds).andClusterIdIn(clusterIds); + return topicConfMapper.selectByExample(tcc); + } + + @Override + public List findByTopicId(Long topicId) { + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andTopicIdEqualTo(topicId); + return topicConfMapper.selectByExample(tcc); + } + + @Override + public List findByClusterId(Long clusterId) { + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andClusterIdEqualTo(clusterId); + return topicConfMapper.selectByExample(tcc); + } + + @Override + public List findTopicByClusterIdWithDeleted(Long clusterId) { + List ret = Lists.newArrayList(); + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andClusterIdEqualTo(clusterId); + List list = topicConfMapper.selectByExample(tcc); + if(CollectionUtils.isEmpty(list)) { + return ret; + } + ret.addAll(list.stream().map(TopicConf::getTopicId).collect(Collectors.toSet())); + return ret; + } + + @Override + public List findAll() { + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + return topicConfMapper.selectByExample(tcc); + } + + + @Override + public List findByTopicClusterId(Long topicId, Long clusterId) { + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andTopicIdEqualTo(topicId).andClusterIdEqualTo(clusterId); + return topicConfMapper.selectByExample(tcc); + } + + @Override + public boolean deleteByIds(List configIds) { + TopicConf conf = new TopicConf(); + conf.setIsDelete(IsDelete.YES.getIndex()); + + TopicConfCriteria tcc = new TopicConfCriteria(); + tcc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andIdIn(configIds); + topicConfMapper.updateByExampleSelective(conf, tcc); + + return true; + } + + @Override + public boolean updateByPrimaryKey(TopicConf conf) throws Exception { + return topicConfMapper.updateByPrimaryKeySelective(conf) > 0; + } + + @Override + public boolean insert(TopicConf conf) throws Exception { + conf.setId(null); + + if (topicConfMapper.insertSelective(conf) > 0) { + if (mqServerService.findById(conf.getMqServerId()).getType() == MqServerType.ROCKETMQ.getIndex()) { + LOGGER.info("create rmq broker topic, conf:{}", conf); + rmqAdminService.createTopic(conf.getClusterId(), conf.getTopicName()); + } else { + LOGGER.info("conf mqserver is Kafka, skip create broker topic", conf); + } + + return true; + } + return false; + } + + @Override + public boolean insert(List confList) throws Exception { + if (CollectionUtils.isEmpty(confList)) { + return true; + } + + final boolean[] ret = {false}; + for (TopicConf conf : confList) { + ret[0] = insert(conf); + } + + return ret[0]; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicServiceImpl.java new file mode 100644 index 0000000..2244f2f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/TopicServiceImpl.java @@ -0,0 +1,698 @@ +package com.didi.carrera.console.service.impl; + +import com.didi.carrera.console.common.util.HostUtils; +import com.didi.carrera.console.dao.dict.IsDelete; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.dict.MqServerType; +import com.didi.carrera.console.dao.dict.NodeType; +import com.didi.carrera.console.dao.mapper.TopicMapper; +import com.didi.carrera.console.dao.mapper.custom.TopicCustomMapper; +import com.didi.carrera.console.dao.model.*; +import com.didi.carrera.console.dao.model.custom.CustomConsumeSubscription; +import com.didi.carrera.console.dao.model.custom.CustomTopicConf; +import com.didi.carrera.console.dao.model.custom.TopicConfConfig; +import com.didi.carrera.console.dao.model.custom.TopicConfig; +import com.didi.carrera.console.data.Message; +import com.didi.carrera.console.service.*; +import com.didi.carrera.console.service.bean.PageModel; +import com.didi.carrera.console.service.vo.*; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.AcceptTopicConfBo; +import com.didi.carrera.console.web.controller.bo.NodeBo; +import com.didi.carrera.console.web.controller.bo.TopicConfBo; +import com.didi.carrera.console.web.controller.bo.TopicOrderBo; +import com.didi.carrera.console.web.util.DateUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.rocketmq.common.admin.TopicStatsTable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + + +@Service("didiTopicServiceImpl") +@EnableTransactionManagement +public class TopicServiceImpl implements TopicService { + private static final Logger LOGGER = LoggerFactory.getLogger(TopicServiceImpl.class); + + @Autowired + private TopicMapper topicMapper; + + @Autowired + private TopicCustomMapper topicCustomMapper; + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + @Resource(name = "didiTopicConfServiceImpl") + private TopicConfService topicConfService; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + @Resource(name = "didiRmqAdminServiceImpl") + private RmqAdminService rmqAdminService; + + @Resource(name = "didiNodeServiceImpl") + private NodeService nodeService; + + public ConsoleBaseResponse validateTopicBo(TopicOrderBo topicInfo) { + if (!topicInfo.isModify() && CollectionUtils.isNotEmpty(findByTopicNameWithDelete(topicInfo.getTopicName()))) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Topic existed"); + } + + if (CollectionUtils.isEmpty(topicInfo.getConf())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Please specify cluster config"); + } + + Map mqServerMap = getAllMqServer(); + + if (IsEnable.isEnable(topicInfo.getEnableSchemaVerify()) && StringUtils.isEmpty(topicInfo.getSchema())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "Enable Schema verify,Schema can not be empty"); + } + + Map clusterCountMap = Maps.newHashMap(); + topicInfo.getConf().forEach(conf -> clusterCountMap.computeIfAbsent(conf.getClusterId(), s -> new AtomicInteger(0)).incrementAndGet()); + + List dbConfList = null; + Map dbClusterCountMap = Maps.newHashMap(); + if (topicInfo.isModify()) { + dbConfList = topicConfService.findByTopicId(topicInfo.getTopicId()); + if (CollectionUtils.isNotEmpty(dbConfList)) { + dbConfList.forEach(conf -> dbClusterCountMap.computeIfAbsent(conf.getClusterId(), s -> new AtomicInteger(0)).incrementAndGet()); + } + + for (Map.Entry entry : clusterCountMap.entrySet()) { + if (entry.getValue().get() > 1 && (!dbClusterCountMap.containsKey(entry.getKey()) || dbClusterCountMap.get(entry.getKey()).get() <= 1)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster<" + entry.getKey() + ">repeated"); + } else if (dbClusterCountMap.containsKey(entry.getKey()) && dbClusterCountMap.get(entry.getKey()).get() > 1 && dbClusterCountMap.get(entry.getKey()).get() != entry.getValue().get()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "multi-cluster<" + entry.getKey() + ">number can not be modified"); + } + } + + } else { + for (Map.Entry entry : clusterCountMap.entrySet()) { + if (entry.getValue().get() > 1) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster<" + entry.getKey() + ">repeated"); + } + } + } + + Map> confIdcMap = Maps.newHashMap(); + for (T bo : topicInfo.getConf()) { + Cluster cluster = clusterService.findById(bo.getClusterId()); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster<" + bo.getClusterName() + ">not found"); + } else { + bo.setClusterName(cluster.getName()); + } + + if (confIdcMap.containsKey(bo.getServerIdcId())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群 " + confIdcMap.get(bo.getServerIdcId()).get(0) + " 和 " + bo.getClusterName() + " 同属于一个IDC, 不允许重复添加"); + } else { + confIdcMap.put(bo.getServerIdcId(), Lists.newArrayList(bo.getClusterName())); + } + + if (bo instanceof AcceptTopicConfBo) { + AcceptTopicConfBo acceptBo = (AcceptTopicConfBo) bo; + if (acceptBo.getMqServerId() == null || acceptBo.getMqServerId().equals(0L)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "必须指定mqServerId"); + } + if (!mqServerMap.containsKey(acceptBo.getMqServerId())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "mqServerId<" + acceptBo.getMqServerId() + ">不存在"); + } + + acceptBo.setMqServerName(mqServerMap.get(acceptBo.getMqServerId()).getName()); + } + } + + if (topicInfo.isModify()) { + if (CollectionUtils.isNotEmpty(dbConfList)) { + for (TopicConf topicConf : dbConfList) { + List groupList = consumeSubscriptionService.findByTopicIdClusterId(topicConf.getTopicId(), topicConf.getClusterId()); + + if (CollectionUtils.isNotEmpty(groupList) && !clusterCountMap.containsKey(topicConf.getClusterId())) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群 " + topicConf.getClusterName() + " 已经被订阅,必须先删除订阅,才能删除此集群"); + } + } + + } + } + return ConsoleBaseResponse.success(); + } + + + private Map getAllMqServer() { + Map mqServerMap = Maps.newHashMap(); + mqServerService.findAll().forEach(server -> mqServerMap.put(server.getId(), server)); + + return mqServerMap; + } + + private void setProxies(TopicConf topicConf) { + TopicConfConfig config = new TopicConfConfig(); + config.setProxies(Maps.newHashMap()); + topicConf.setTopicConfig(config); + + List nodeList = nodeService.findByClusterIdNodeType(topicConf.getClusterId(), NodeType.PRODUCER_PROXY); + if (CollectionUtils.isNotEmpty(nodeList)) { + Set hostSet = nodeList.stream().map(n -> HostUtils.getIpPortFromHost(n.getHost(), ZKV4ConfigServiceImpl.DEFAULT_PPROXY_PORT)).collect(Collectors.toSet()); + + config.getProxies().computeIfAbsent("P_" + topicConf.getClusterName(), s -> Sets.newHashSet()).addAll(hostSet); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse addPProxy(String clusterName, String host) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster not found"); + } + if (!validNodeExist(host, cluster)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host not found"); + } + + List confList = topicConfService.findByClusterId(cluster.getId()); + if (CollectionUtils.isEmpty(confList)) { + return ConsoleBaseResponse.success(); + } + + addPProxy(host, confList); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse addPProxy(String topicName, String clusterName, String host) throws Exception { + Topic topic = findByTopicName(topicName); + if (topic == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic not found"); + } + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster not found"); + } + if (!validNodeExist(host, cluster)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host not found"); + } + + List confList = topicConfService.findByTopicClusterId(topic.getId(), cluster.getId()); + if (CollectionUtils.isEmpty(confList)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic conf not found"); + } + + addPProxy(host, confList); + + return ConsoleBaseResponse.success(); + } + + private boolean validNodeExist(String host, Cluster cluster) { + List nodeList = nodeService.findByClusterHostNodeType(cluster.getId(), host, NodeType.PRODUCER_PROXY); + if (CollectionUtils.isEmpty(nodeList)) { + String ip = HostUtils.getIp(host); + if (host.equals(ip)) { + return createPProxyNode(host, cluster); + } + nodeList = nodeService.findByClusterHostNodeType(cluster.getId(), host, NodeType.PRODUCER_PROXY); + if (CollectionUtils.isEmpty(nodeList)) { + return createPProxyNode(host, cluster); + } + } + return true; + } + + private boolean createPProxyNode(String host, Cluster cluster) { + try { + NodeBo nodeBo = new NodeBo(); + nodeBo.setClusterid(cluster.getId()); + nodeBo.setHost(host); + nodeBo.setNodetype(NodeType.PRODUCER_PROXY.getIndex()); + nodeService.create(nodeBo); + return true; + } catch (Exception e) { + LOGGER.error("create node error {}, {}", host, cluster); + return false; + } + } + + private void addPProxy(String host, List confList) throws Exception { + String ipPort = HostUtils.getIpPortFromHost(host, ZKV4ConfigServiceImpl.DEFAULT_PPROXY_PORT); + Set clusterIds = Sets.newHashSet(); + for (TopicConf topicConf : confList) { + if (topicConf.getTopicConfConfig() != null && MapUtils.isNotEmpty(topicConf.getTopicConfConfig().getProxies())) { + Map> proxyMap = topicConf.getTopicConfConfig().getProxies(); + for (Set ipLists : proxyMap.values()) { + if (ipLists.contains(ipPort)) { + continue; + } + + ipLists.add(ipPort); + clusterIds.add(topicConf.getClusterId()); + topicConfService.updateByPrimaryKey(topicConf); + pushV4ZkInfo(topicConf.getTopicId(), null); + + LOGGER.info("add pproxy {} success, topicConfId={}, topic={}", ipPort, topicConf.getId(), topicConf.getTopicName()); + } + } + } + if (CollectionUtils.isNotEmpty(clusterIds)) { + zkv4ConfigService.updatePProxyConfigByClusterId("addPProxy", clusterIds); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse removePProxy(String host) throws Exception { + List confList = topicConfService.findAll(); + removePProxy(host, confList); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse removePProxy(String topicName, String host) throws Exception { + Topic topic = findByTopicName(topicName); + if (topic == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topicName not found"); + } + List confList = topicConfService.findByTopicId(topic.getId()); + if (CollectionUtils.isEmpty(confList)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic conf not found"); + } + removePProxy(host, confList); + + return ConsoleBaseResponse.success(); + } + + private void removePProxy(String host, List confList) throws Exception { + String ipPort = HostUtils.getIpPortFromHost(host, ZKV4ConfigServiceImpl.DEFAULT_PPROXY_PORT); + Set clusterIds = Sets.newHashSet(); + for (TopicConf topicConf : confList) { + if (topicConf.getTopicConfConfig() != null && MapUtils.isNotEmpty(topicConf.getTopicConfConfig().getProxies())) { + Map> proxyMap = topicConf.getTopicConfConfig().getProxies(); + for (Set ipLists : proxyMap.values()) { + if (ipLists.contains(ipPort)) { + ipLists.remove(ipPort); + clusterIds.add(topicConf.getClusterId()); + topicConfService.updateByPrimaryKey(topicConf); + pushV4ZkInfo(topicConf.getTopicId(), null); + + LOGGER.info("remove pproxy {} success, topicConfId={}, topic={}", ipPort, topicConf.getId(), topicConf.getTopicName()); + } + } + } + } + if (CollectionUtils.isNotEmpty(clusterIds)) { + zkv4ConfigService.updatePProxyConfigByClusterId("removePProxy", clusterIds); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse create(TopicOrderBo topicOrderBo) throws Exception { + ConsoleBaseResponse validateBo = validateTopicBo(topicOrderBo); + if (!validateBo.isSuccess()) { + return validateBo; + } + + Topic topic = topicOrderBo.buildTopic(); + List confList = topicOrderBo.buildTopicConf(); + Set clusterIdSet = Sets.newHashSet(); + Set dbClusterIdSet = Sets.newHashSet(); + Set changedClusterIdSet = Sets.newHashSet(); + + Map newClusterMqserverMap = Maps.newHashMap(); + Map oldClusterMqserverMap = Maps.newHashMap(); + Map newConfBoMap = Maps.newHashMap(); + topicOrderBo.getConf().forEach(conf -> newConfBoMap.put(getClusterMqserverIdKey(conf.getClusterId(), conf.getMqServerId()), conf)); + + confList.forEach(conf -> { + conf.setId(null); + conf.setIsDelete(IsDelete.NO.getIndex()); + conf.setCreateTime(new Date()); + conf.setState(IsEnable.ENABLE.getIndex()); + + newClusterMqserverMap.put(getClusterMqserverIdKey(conf.getClusterId(), conf.getMqServerId()), conf); + clusterIdSet.add(conf.getClusterId()); + }); + changedClusterIdSet.addAll(clusterIdSet); + + if (!topicOrderBo.isModify()) { + topic.setId(null); + topic.setIsDelete(IsDelete.NO.getIndex()); + topic.setCreateTime(new Date()); + topic.setState(IsEnable.ENABLE.getIndex()); + topic.setTopicConfig(new TopicConfig()); + + topicMapper.insertSelective(topic); + + for (TopicConf conf : confList) { + conf.setTopicId(topic.getId()); + setProxies(conf); + topicConfService.insert(conf); + } + } else { + Topic dbTopic = findById(topic.getId()); + if (dbTopic == null || dbTopic.getIsDelete() == IsDelete.YES.getIndex()) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topicId<" + topic.getId() + "> not found"); + } + topic.setTopicConfig(dbTopic.getTopicConfig() == null ? new TopicConfig() : dbTopic.getTopicConfig()); + + List dbConfList = topicConfService.findByTopicId(topic.getId()); + if (CollectionUtils.isNotEmpty(dbConfList)) { + dbConfList.forEach(conf -> { + dbClusterIdSet.add(conf.getClusterId()); + oldClusterMqserverMap.put(getClusterMqserverIdKey(conf.getClusterId(), conf.getMqServerId()), conf); + }); + } + + changedClusterIdSet.addAll(dbClusterIdSet); + + topicMapper.updateByPrimaryKeySelective(topic); + + for (Map.Entry entry : newClusterMqserverMap.entrySet()) { + String key = entry.getKey(); + TopicConf newConf = entry.getValue(); + if (oldClusterMqserverMap.containsKey(key)) { + newConf.setId(oldClusterMqserverMap.get(key).getId()); + newConf.setTopicConfig(oldClusterMqserverMap.get(key).getTopicConfConfig()); + topicConfService.updateByPrimaryKey(newConf); + oldClusterMqserverMap.remove(key); + } else { + setProxies(newConf); + topicConfService.insert(newConf); + } + } + + if (MapUtils.isNotEmpty(oldClusterMqserverMap)) { + topicConfService.deleteByIds(oldClusterMqserverMap.values().stream().map(TopicConf::getId).collect(Collectors.toList())); + } + + } + + Set v4ClusterSet = Sets.newHashSet(changedClusterIdSet); + Set retainClusterSet = Sets.newHashSet(dbClusterIdSet); + retainClusterSet.retainAll(clusterIdSet); + v4ClusterSet.removeAll(retainClusterSet); + pushV4ZkInfo(topic.getId(), v4ClusterSet); + return ConsoleBaseResponse.success(); + } + + private String getClusterMqserverIdKey(Long clusterId, Long mqServerId) { + return clusterId + "_" + mqServerId; + } + + private void pushV4ZkInfo(Long topicId, Set clusterIds) throws Exception { + zkv4ConfigService.updateTopicConfig(topicId, clusterIds); + } + + @Override + public Topic findByTopicName(String topicName) { + TopicCriteria tc = new TopicCriteria(); + tc.createCriteria().andTopicNameEqualTo(topicName).andIsDeleteEqualTo(IsDelete.NO.getIndex()); + List list = topicMapper.selectByExampleWithBLOBs(tc); + if (CollectionUtils.isEmpty(list)) { + return null; + } + + return list.get(0); + } + + @Override + public List findByTopicNameWithDelete(String topicName) { + TopicCriteria tc = new TopicCriteria(); + tc.createCriteria().andTopicNameEqualTo(topicName); + return topicMapper.selectByExampleWithBLOBs(tc); + } + + @Override + public List findById(List idList) { + TopicCriteria tc = new TopicCriteria(); + tc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()).andIdIn(idList); + return topicMapper.selectByExampleWithBLOBs(tc); + } + + @Override + public Topic findById(Long topicId) { + return topicMapper.selectByPrimaryKey(topicId); + } + + @Override + public List findByClusterId(Long clusterId) { + List confList = topicConfService.findByClusterId(clusterId); + if (CollectionUtils.isEmpty(confList)) { + return Collections.emptyList(); + } + + Set topicIdSet = Sets.newHashSet(); + confList.forEach(conf -> topicIdSet.add(conf.getTopicId())); + + return findById(Lists.newArrayList(topicIdSet)); + } + + private ConsoleBaseResponse> findListByPage(Long clusterId, String text, String user, Integer curPage, Integer pageSize) { + if (StringUtils.isNotEmpty(user)) { + user = user + ";"; + } + Integer totalCount = topicCustomMapper.selectCountByCondition(clusterId, user, text); + PageModel pageModel = new PageModel<>(curPage, pageSize, totalCount); + if (totalCount == 0) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + List list = topicCustomMapper.selectByCondition(clusterId, user, text, pageModel.getPageIndex(), pageModel.getPageSize()); + if (CollectionUtils.isEmpty(list)) { + pageModel.setList(Collections.emptyList()); + return ConsoleBaseResponse.success(pageModel); + } + + List confList = topicConfService.findByTopicId(getTopicIdList(list)); + + pageModel.setList(Lists.newArrayList(getTopicVoMap(list, confList, true).values())); + + return ConsoleBaseResponse.success(pageModel); + } + + private List getTopicIdList(List list) { + List idList = Lists.newArrayListWithCapacity(list.size()); + list.forEach(t -> idList.add(t.getId())); + return idList; + } + + private Map getTopicVoMap(List list, List confList, Boolean needExtraParams) { + Map topicVoMap = Maps.newLinkedHashMap(); + list.forEach((topic -> { + TopicOrderVo vo = TopicOrderVo.buildTopicVo(topic); + topicVoMap.put(topic.getId(), vo); + })); + if (CollectionUtils.isNotEmpty(confList)) { + Map clusterMap = clusterService.findMap(); + + confList.forEach(conf -> { + if (topicVoMap.containsKey(conf.getTopicId())) { + try { + TopicConfVo confVo = TopicConfVo.buildTopicConfVo(conf); + confVo.setClusterDesc(clusterMap.get(conf.getClusterId()).getDescription()); + topicVoMap.get(conf.getTopicId()).addConf(confVo); + + } catch (Exception e) { + LOGGER.error("getTopicVoMap exception", e); + } + } + }); + } + return topicVoMap; + } + + @Override + public ConsoleBaseResponse findVoById(Long topicId) { + Topic topic = findById(topicId); + if (topic == null) { + return ConsoleBaseResponse.success(); + } + + List confList = topicConfService.findByTopicId(Lists.newArrayList(topicId)); + return ConsoleBaseResponse.success(getTopicVoMap(Lists.newArrayList(topic), confList, false).get(topicId)); + } + + @Override + public ConsoleBaseResponse> findAll(Long clusterId, String text, String user, Integer curPage, Integer pageSize) { + return findListByPage(clusterId, text, null, curPage, pageSize); + } + + @Override + public ConsoleBaseResponse> findAllSimple(String user) { + List list = findAllWithoutPage(); + List voList = Lists.newArrayListWithCapacity(list.size()); + list.forEach((topic -> voList.add(TopicSimpleVo.buildVo(topic)))); + return ConsoleBaseResponse.success(voList); + } + + + @Override + public List findAllWithoutPage() { + TopicCriteria tc = new TopicCriteria(); + tc.createCriteria().andIsDeleteEqualTo(IsDelete.NO.getIndex()); + tc.setOrderByClause("create_time desc"); + + return topicMapper.selectByExample(tc); + } + + @Override + public ConsoleBaseResponse> findGroup(String user, Long topicId, Long clusterId) { + List list = consumeSubscriptionService.findByTopicIdClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.success(); + } + + List voList = Lists.newArrayListWithCapacity(list.size()); + list.forEach(sub -> { + TopicListGroupVo vo = new TopicListGroupVo(); + BeanUtils.copyProperties(sub, vo); + voList.add(vo); + }); + + return ConsoleBaseResponse.success(voList); + } + + @Override + public ConsoleBaseResponse> findState(String user, Long topicId, Long clusterId) { + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(confList)) { + return ConsoleBaseResponse.success(); + } + + MqServer rmqServer = null; + TopicConf topicConf = null; + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer == null) { + continue; + } + + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + rmqServer = mqServer; + topicConf = conf; + } + } + + if (rmqServer == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "only support query RMQ cluster state"); + } + + final TopicConf conf = topicConf; + List voList = Lists.newArrayList(); + try { + TopicStatsTable topicStatsTable = rmqAdminService.queryTopicConsumeState(rmqServer.getAddr(), topicConf.getTopicName()); + topicStatsTable.getOffsetTable().forEach(((messageQueue, topicOffset) -> { + TopicStateVo vo = new TopicStateVo(); + vo.setTopicId(conf.getTopicId()); + vo.setTopicName(conf.getTopicName()); + vo.setClusterId(conf.getClusterId()); + vo.setQid(getRmqQid(conf.getClusterName(), RmqAdminServiceImpl.getNewQid(messageQueue))); + vo.setMaxOffset(topicOffset.getMaxOffset()); + vo.setMinOffset(topicOffset.getMinOffset()); + vo.setLastUpdateTime(topicOffset.getLastUpdateTimestamp() <= 0 ? "2 days ago(data is kept for 2 days only)" : DateUtil.longToString(topicOffset.getLastUpdateTimestamp(), DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS_CN)); + voList.add(vo); + })); + } catch (Exception e) { + LOGGER.error("Query Topic State Exception", e); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "no data,retry later"); + } + + return ConsoleBaseResponse.success(voList); + } + + private String getBrokerQid(String prefix, String clusterName, String qid) { + return prefix + "_" + clusterName + "_" + qid; + } + + private String getRmqQid(String clusterName, String qid) { + return getBrokerQid("R", clusterName, qid); + } + + private String getKafkaQid(String clusterName, String qid) { + return getBrokerQid("K", clusterName, qid); + } + + + @Override + public ConsoleBaseResponse findMessage(String user, Long topicId, Long clusterId) { + List confList = topicConfService.findByTopicClusterId(topicId, clusterId); + if (CollectionUtils.isEmpty(confList)) { + return ConsoleBaseResponse.success(); + } + + MqServer rmqServer = null; + TopicConf topicConf = null; + for (TopicConf conf : confList) { + MqServer mqServer = mqServerService.findById(conf.getMqServerId()); + if (mqServer == null) { + continue; + } + rmqServer = mqServer; + topicConf = conf; + } + + if (rmqServer == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "cluster info not found"); + } + + Message message = null; + try { + if (rmqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + message = rmqAdminService.queryLatestMessage(rmqServer.getAddr(), topicConf.getTopicName()); + } + } catch (Exception e) { + LOGGER.error("query Topic latest message Exception, topic=" + topicConf.getTopicName(), e); + } + + TopicMessageVo vo = new TopicMessageVo(); + vo.setTopicId(topicConf.getTopicId()); + vo.setTopicName(topicConf.getTopicName()); + vo.setClusterId(topicConf.getClusterId()); + vo.setClusterName(topicConf.getClusterName()); + + if (message == null) { + vo.setQid(""); + vo.setOffset(0L); + vo.setMsg("no msg"); + } else { + if (rmqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + vo.setQid(getRmqQid(topicConf.getClusterName(), message.getQid())); + } else { + vo.setQid(getKafkaQid(topicConf.getClusterName(), message.getQid())); + } + + vo.setOffset(message.getOffset()); + vo.setMsg(message.getBody()); + } + + return ConsoleBaseResponse.success(vo); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ZKV4ConfigServiceImpl.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ZKV4ConfigServiceImpl.java new file mode 100644 index 0000000..f966126 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/impl/ZKV4ConfigServiceImpl.java @@ -0,0 +1,1076 @@ +package com.didi.carrera.console.service.impl; + +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.TypeReference; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.common.util.HostUtils; +import com.didi.carrera.console.config.ConsoleConfig; +import com.didi.carrera.console.dao.dict.*; +import com.didi.carrera.console.dao.model.*; +import com.didi.carrera.console.dao.model.custom.ConsumeGroupConfig; +import com.didi.carrera.console.service.*; +import com.didi.carrera.console.service.exception.ZkConfigException; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.xiaojukeji.carrera.biz.ZkService; +import com.xiaojukeji.carrera.config.Actions; +import com.xiaojukeji.carrera.config.CompressType; +import com.xiaojukeji.carrera.config.ConfigurationValidator; +import com.xiaojukeji.carrera.config.v4.*; +import com.xiaojukeji.carrera.config.v4.cproxy.*; +import com.xiaojukeji.carrera.config.v4.pproxy.CarreraConfiguration; +import com.xiaojukeji.carrera.config.v4.pproxy.RocketmqConfiguration; +import com.xiaojukeji.carrera.config.v4.pproxy.TopicConfiguration; +import com.xiaojukeji.carrera.dynamic.ParameterDynamicConfig; +import com.xiaojukeji.carrera.dynamic.ParameterDynamicZookeeper; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + + +@Service +public class ZKV4ConfigServiceImpl implements ZKV4ConfigService { + private static final Logger LOGGER = LoggerFactory.getLogger(ZKV4ConfigServiceImpl.class); + + public static final int DEFAULT_BROKER_PORT = 10911; + public static final int DEFAULT_PPROXY_PORT = 9613; + public static final int DEFAULT_CPROXY_PORT = 9713; + + private static final int DEFAULT_MIN_CONCURRENCY = 1000; + + @Resource(name = "didiClusterServiceImpl") + private ClusterService clusterService; + + @Resource(name = "didiTopicServiceImpl") + private TopicService topicService; + + @Resource(name = "didiTopicConfServiceImpl") + private TopicConfService topicConfService; + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + @Resource(name = "didiConsumeGroupServiceImpl") + private ConsumeGroupService consumeGroupService; + + @Resource(name = "didiNodeServiceImpl") + private NodeService nodeService; + + @Resource(name = "didiMqServerServiceImpl") + private MqServerService mqServerService; + + @Autowired + private ClusterMqserverRelationService mqserverRelationService; + + @Autowired + private ZkService zkService; + + @Autowired + private ConsoleConfig consoleConfig; + + private Map getMqServerMap() { + Map mqServerMap = Maps.newHashMap(); + mqServerService.findAll().forEach(mqServer -> mqServerMap.put(mqServer.getId(), mqServer)); + return mqServerMap; + } + + private Map getMqServerNameMap() { + Map mqServerMap = Maps.newHashMap(); + mqServerService.findAll().forEach(mqServer -> mqServerMap.put(mqServer.getName(), mqServer)); + return mqServerMap; + } + + private Map getClusterMap() { + Map clusterMap = Maps.newHashMap(); + clusterService.findAll().forEach(cluster -> clusterMap.put(cluster.getId(), cluster)); + return clusterMap; + } + +// @PostConstruct + public void initZkData() { + LOGGER.info("start initZkData"); + + List children = zkService.getChildren("/"); + if (CollectionUtils.isNotEmpty(children) && children.contains("carrera")) { + LOGGER.info("already inited, skip."); + return; + } + + try { + initAllZk(); + initZkPath(); + } catch (Exception e) { + LOGGER.error("failed to init zk on cluster init, possible zk not startup.", e); + } + } + + @Override + public void initZkPath() throws Exception { + ParameterDynamicZookeeper parameterDynamic = null; + try { + ParameterDynamicConfig config = new ParameterDynamicConfig(consoleConfig.getZookeeper()); + config.setConfigCentre(true); + parameterDynamic = new ParameterDynamicZookeeper(config); + parameterDynamic.setData("/carrera/v4/config/topic", "default"); + parameterDynamic.setData("/carrera/v4/config/group", "default"); + parameterDynamic.setData("/carrera/v4/config/pproxy", "default"); + parameterDynamic.setData("/carrera/v4/config/cproxy", "default"); + parameterDynamic.setData("/carrera/v4/config/broker", "default"); + parameterDynamic.setData("/carrera/v4/config/monitor/host", "default"); + parameterDynamic.setData("/carrera/v4/config/monitor/assigned", "default"); + + LOGGER.info("init all zk path success"); + } finally { + if (parameterDynamic != null) { + parameterDynamic.shutdown(); + } + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushCproxyConfig(String host) throws Exception { + List nodeList = nodeService.findByHostNodeType(host, NodeType.CONSUMER_PROXY); + if (CollectionUtils.isEmpty(nodeList)) { + nodeList = nodeService.findByHostNodeType(HostUtils.getIp(host), NodeType.CONSUMER_PROXY); + } + + if (CollectionUtils.isEmpty(nodeList)) { + LOGGER.warn("[ZK_V4] not found cproxy node, host={}", host); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host不存在"); + } + updateCProxyConfig(nodeList.get(0).getId()); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushPproxyConfig(String host) throws Exception { + List nodeList = nodeService.findByHostNodeType(host, NodeType.PRODUCER_PROXY); + if (CollectionUtils.isEmpty(nodeList)) { + nodeList = nodeService.findByHostNodeType(HostUtils.getIp(host), NodeType.PRODUCER_PROXY); + } + + if (CollectionUtils.isEmpty(nodeList)) { + LOGGER.warn("[ZK_V4] not found pproxy node, host={}", host); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "host不存在"); + } + updatePProxyConfig(nodeList.get(0).getId()); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushTopicConfig(String topicName) throws Exception { + Topic topic = topicService.findByTopicName(topicName); + if (topic == null) { + LOGGER.warn("[ZK_V4] not found topic, topic={}", topicName); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic不存在"); + } + return pushTopicConfig(topic); + } + + private ConsoleBaseResponse pushTopicConfig(Topic topic) throws Exception { + List confList = topicConfService.findByTopicId(topic.getId()); + if (CollectionUtils.isEmpty(confList)) { + LOGGER.warn("[ZK_V4] not found topic conf, topic={}", topic.getTopicName()); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "topic conf不存在"); + } + updateTopicConfig(topic.getId(), confList.stream().map(TopicConf::getClusterId).collect(Collectors.toSet())); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushGroupConfig(String groupName) throws Exception { + ConsumeGroup group = consumeGroupService.findByGroupName(groupName); + if (group == null) { + LOGGER.warn("[ZK_V4] not found group, group={}", groupName); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "group不存在"); + } + return pushGroupConfig(group); + } + + private ConsoleBaseResponse pushGroupConfig(ConsumeGroup group) throws Exception { + List subList = consumeSubscriptionService.findByGroupId(group.getId()); + updateSubConfig(group.getId(), subList.stream().map(ConsumeSubscription::getClusterId).collect(Collectors.toSet())); + + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushTopicByCluster(String clusterName) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群不存在"); + } + List list = topicConfService.findTopicByClusterIdWithDeleted(cluster.getId()); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群不存在topic"); + } + Set clusters = Sets.newHashSet(); + for (Long topicId : list) { + List confList = topicConfService.findByTopicId(topicId); + clusters.addAll(confList.stream().map(TopicConf::getClusterId).collect(Collectors.toSet())); + updateTopicConfig(topicId, null); + } + updatePProxyConfigByClusterId("pushTopicByCluster", clusters); + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushGroupByCluster(String clusterName) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群不存在"); + } + List list = consumeGroupService.findByClusterId(cluster.getId()); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群暂无订阅"); + } + + Set clusters = Sets.newHashSet(); + for (ConsumeGroup group : list) { + List subList = consumeSubscriptionService.findByGroupId(group.getId()); + + clusters.addAll(subList.stream().map(ConsumeSubscription::getClusterId).collect(Collectors.toSet())); + updateSubConfig(group.getId(), null); + } + + updateCProxyConfigByClusterId("pushGroupByCluster", clusters); + return ConsoleBaseResponse.success(); + } + + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushPProxyByCluster(String clusterName) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群不存在"); + } + List list = nodeService.findByClusterIdNodeType(cluster.getId(), NodeType.PRODUCER_PROXY); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群暂无PProxy"); + } + + for (Node node : list) { + updatePProxyConfig(node.getId()); + } + return ConsoleBaseResponse.success(); + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public ConsoleBaseResponse pushCProxyByCluster(String clusterName) throws Exception { + Cluster cluster = clusterService.findByClusterName(clusterName); + if (cluster == null) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群不存在"); + } + List list = nodeService.findByClusterIdNodeType(cluster.getId(), NodeType.CONSUMER_PROXY); + if (CollectionUtils.isEmpty(list)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "集群暂无CProxy"); + } + + for (Node node : list) { + updateCProxyConfig(node.getId()); + } + return ConsoleBaseResponse.success(); + } + + @Override + public void initAllZk() throws Exception { + List topicList = topicService.findAllWithoutPage(); + for (Topic topic : topicList) { + updateTopicConfig(topic.getId(), null); + } + + List groupList = consumeGroupService.findAll(); + for (ConsumeGroup consumeGroup : groupList) { + updateSubConfig(consumeGroup.getId(), null); + } + + List nodeList = nodeService.findAll(); + for (Node node : nodeList) { + NodeType nodeType = NodeType.getByIndex(node.getNodeType()); + if (nodeType == null) { + continue; + } + switch (nodeType) { + case PRODUCER_PROXY: + updatePProxyConfig(node.getId()); + break; + case CONSUMER_PROXY: + updateCProxyConfig(node.getId()); + break; + default: + break; + } + } + + List mqServerList = mqServerService.findAll(); + for (MqServer mqServer : mqServerList) { + if (mqServer.getType() == MqServerType.ROCKETMQ.getIndex()) { + updateBrokerConfig(mqServer.getId()); + } + } + } + + @Override + public void updateTopicConfig(Long topicId, Set clusterIdSet) throws Exception { + Topic topic = topicService.findById(topicId); + if (topic == null) { + LOGGER.warn("[ZK_V4_Topic] topic not found, topicId={}", topicId); + throw new ZkConfigException(String.format("[Topic] topic not found, topicId=%s", topicId)); + } + + TopicConfig zkTopicConfig = zkService.getTopic(topic.getTopicName()); + if (topic.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn("[ZK_V4_Topic] topic is deleted, delete it from zk, topicId={}, topic={}", topicId, topic.getTopicName()); + if (zkTopicConfig != null) { + zkService.deleteTopic(topic.getTopicName()); + updatePProxyConfigByClusterId(topic.getTopicName(), clusterIdSet); + } + return; + } + List topicConfList = topicConfService.findByTopicId(topicId); + if (CollectionUtils.isEmpty(topicConfList)) { + LOGGER.warn("[ZK_V4_Topic] topic conf not found, delete topic from zk, topicId={}, topic={}", topicId, topic.getTopicName()); + if (zkTopicConfig != null) { + zkService.deleteTopic(topic.getTopicName()); + updatePProxyConfigByClusterId(topic.getTopicName(), clusterIdSet); + } + return; + } + + TopicConfig topicConfig = buildTopicConfig(topic, topicConfList); + zkService.createOrUpdateTopic(topicConfig); + updatePProxyConfigByClusterId(topic.getTopicName(), clusterIdSet); + LOGGER.debug("[ZK_V4_Topic] topic update success, topicId={}, topicConfig={}", topicId, topicConfig); + LOGGER.info("[ZK_V4_Topic] topic update success, topicId={}, topicName={}, topicConf size={}", topicId, topic.getTopicName(), topicConfList.size()); + } + + @Override + public void updatePProxyConfigByClusterId(String topic, Set clusterIdSet) throws Exception { + if (CollectionUtils.isEmpty(clusterIdSet)) { + LOGGER.warn("[ZK_V4_PProxy] clusterIdSet is empty, skip update, topic={}", topic); + return; + } + for (Long clusterId : clusterIdSet) { + List nodeList = nodeService.findByClusterIdNodeType(clusterId, NodeType.PRODUCER_PROXY); + if (CollectionUtils.isNotEmpty(nodeList)) { + for (Node node : nodeList) { + updatePProxyConfig(node.getId()); + } + } + } + } + + @Override + public void updateCProxyConfigByClusterId(String group, Set clusterIdSet) throws Exception { + if (CollectionUtils.isEmpty(clusterIdSet)) { + LOGGER.warn("[ZK_V4_CProxy] clusterIdSet is empty, skip update, group={}", group); + return; + } + for (Long clusterId : clusterIdSet) { + List nodeList = nodeService.findByClusterIdNodeType(clusterId, NodeType.CONSUMER_PROXY); + if (CollectionUtils.isNotEmpty(nodeList)) { + for (Node node : nodeList) { + updateCProxyConfig(node.getId()); + } + } + } + } + + private TopicConfig buildTopicConfig(Topic topic, List topicConfList) throws ZkConfigException { + TopicConfig topicConfig = new TopicConfig(); + topicConfig.setTopic(topic.getTopicName()); + topicConfig.setAlarmGroup(topic.getTopicAlarmGroup()); + topicConfig.setDelayTopic(topic.getDelayTopic() == TopicDelayTopic.DELAY_TOPIC.getIndex()); + topicConfig.setAutoBatch(topic.getTopicConfig().isAutoBatch()); + + if (topic.getTopicConfig().getCompressionType() == TopicCompressionType.RMQ_COMPRESSION.getIndex()) { + topicConfig.setCompressType(CompressType.PRIMORDIAL); + } else if (topic.getTopicConfig().getCompressionType() == TopicCompressionType.SNAPPY_COMPRESSION.getIndex()) { + topicConfig.setCompressType(CompressType.SNAPPY); + } + + List confList = Lists.newArrayList(); + topicConfig.setTopicUnits(confList); + + Map mqServerTypeTable = getMqServerMap(); + Map clusterTable = getClusterMap(); + + for (TopicConf conf : topicConfList) { + if (!mqServerTypeTable.containsKey(conf.getMqServerId())) { + throw new ZkConfigException(String.format("[Topic] topicConfId(%s) not found mqserver(%s)", conf.getId(), conf.getMqServerId())); + } + + if (!clusterTable.containsKey(conf.getClusterId())) { + throw new ZkConfigException(String.format("[Topic] topicConfId(%s) not found cluster(%s)", conf.getId(), conf.getClusterId())); + } + + TopicConfiguration topicConfiguration = new TopicConfiguration(); + topicConfiguration.setBrokerCluster(mqServerTypeTable.get(conf.getMqServerId()).getName()); + + if (conf.getTopicConfConfig() != null) { + if (MapUtils.isNotEmpty(conf.getTopicConfConfig().getProxies())) { + topicConfiguration.setProxies(conf.getTopicConfConfig().getProxies()); + } + } + + topicConfiguration.setTotalMaxTps(conf.getProduceTps()); + + //同一个broker下如果绑定多个proxy,分摊总tps + if (MapUtils.isNotEmpty(topicConfiguration.getProxies())) { + int totalProxies = 0; + for (Set proxySet : topicConfiguration.getProxies().values()) { + totalProxies += proxySet.size(); + } + topicConfiguration.setMaxTps((int) (Math.ceil((double) topicConfiguration.getTotalMaxTps() / (double) totalProxies))); + } + confList.add(topicConfiguration); + } + + return topicConfig; + } + + @Override + public void onlyUpdateGroupConfig(Long groupId) throws Exception { + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null) { + LOGGER.warn("[ZK_V4_Group] group not found, groupId={}", groupId); + throw new ZkConfigException(String.format("[Group] group not found, groupId=%s", groupId)); + } + + if (group.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn("[ZK_V4_Group] group is deleted, skip update zk, groupId={}, group={}", groupId, group.getGroupName()); + return; + } + + List subList = consumeSubscriptionService.findByGroupId(groupId); + if (CollectionUtils.isEmpty(subList)) { + LOGGER.warn("[ZK_V4_Group] sub is empty, skip update zk, groupId={}, group={}", groupId, group.getGroupName()); + return; + } + + GroupConfig groupConfig = buildGroupConfig(group, subList); + zkService.createOrUpdateGroup(groupConfig); + LOGGER.debug("[ZK_V4_Group] update group success, groupId={}, groupConfig={}", groupId, groupConfig); + LOGGER.info("[ZK_V4_Group] update group success, groupId={}, group={}, sub size={}", groupId, group.getGroupName(), subList.size()); + } + + @Override + public void updateSubConfig(Long groupId, Set clusterIdSet) throws Exception { + ConsumeGroup group = consumeGroupService.findById(groupId); + if (group == null) { + LOGGER.warn("[ZK_V4_Sub] group not found, groupId={}", groupId); + throw new ZkConfigException(String.format("[Group] group not found, groupId=%s", groupId)); + } + + if (group.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn("[ZK_V4_Sub] group is deleted, delete it from zk, groupId={}, group={}", groupId, group.getGroupName()); + deleteGroupConfig(clusterIdSet, group); + return; + } + + List subList = consumeSubscriptionService.findByGroupId(groupId); + if (CollectionUtils.isEmpty(subList)) { + LOGGER.warn("[ZK_V4_Sub] sub not found, delete group from zk, groupId={}, group={}", groupId, group.getGroupName()); + deleteGroupConfig(clusterIdSet, group); + return; + } + + GroupConfig groupConfig = buildGroupConfig(group, subList); + zkService.createOrUpdateGroup(groupConfig); + updateCProxyConfigByClusterId(group.getGroupName(), clusterIdSet); + + LOGGER.debug("[ZK_V4_Sub] update group success, groupId={}, groupConfig={}", groupId, groupConfig); + LOGGER.info("[ZK_V4_Sub] update group success, groupId={}, group={}, sub size={}", groupId, group.getGroupName(), subList.size()); + } + + private void deleteGroupConfig(Set clusterIdSet, ConsumeGroup group) throws Exception { + GroupConfig zkGroupConfig = zkService.getGroup(group.getGroupName()); + if (zkGroupConfig != null) { + zkService.deleteGroup(group.getGroupName()); + updateCProxyConfigByClusterId(group.getGroupName(), clusterIdSet); + } + } + + private GroupConfig buildGroupConfig(ConsumeGroup group, List subList) throws ZkConfigException { + GroupConfig groupConfig = new GroupConfig(); + groupConfig.setGroup(group.getGroupName()); + + if (group.getConsumeGroupConfig() != null) { + ConsumeGroupConfig config = group.getConsumeGroupConfig(); + groupConfig.setAsyncThreads(config.getAsyncThreads()); + groupConfig.setRedisConfig(config.getRedisConfig()); + } + + if (MapUtils.isNotEmpty(group.getGroupExtraParams())) { + if (group.getGroupExtraParams().containsKey("asyncThreads")) { + groupConfig.setAsyncThreads(Integer.parseInt(group.getGroupExtraParams().get("asyncThreads"))); + } + } + + groupConfig.setAlarmGroup(group.getGroupAlarmGroup()); + groupConfig.setEnableAlarm(IsEnable.isEnable(group.getAlarmIsEnable())); + groupConfig.setDelayTimeThreshold(group.getAlarmDelayTime()); + groupConfig.setCommittedLagThreshold(group.getAlarmMsgLag()); + + List upstreamTopics = Lists.newArrayList(); + groupConfig.setTopics(upstreamTopics); + + Map mqServerTypeTable = getMqServerMap(); + Map clusterTable = getClusterMap(); + Map> topicConfMap = findTopicConfMap(subList); + for (ConsumeSubscription sub : subList) { + if (!clusterTable.containsKey(sub.getClusterId())) { + throw new ZkConfigException(String.format("[Group] subId(%s) not found cluster(%s)", sub.getId(), sub.getClusterId())); + } + + String topicConfMapKey = getTopicConfMapKey(sub.getTopicId(), sub.getClusterId()); + if (!topicConfMap.containsKey(topicConfMapKey) || CollectionUtils.isEmpty(topicConfMap.get(topicConfMapKey))) { + throw new ZkConfigException(String.format("[Group] subId(%s) not found topicConf, topicId=%s, clusterId=%s", sub.getId(), sub.getTopicId(), sub.getClusterId())); + } + + String mqServer = getSubExtraParamsMqServer(sub); + if (StringUtils.isNotEmpty(mqServer)) { + UpstreamTopic upstreamTopic = buildUpstreamTopic(groupConfig, sub, mqServer); + upstreamTopics.add(upstreamTopic); + continue; + } + + for (TopicConf topicConf : topicConfMap.get(topicConfMapKey)) { + if (!mqServerTypeTable.containsKey(topicConf.getMqServerId())) { + throw new ZkConfigException(String.format("[Group] subId(%s) not found mqserverId, topicConfId=%s, mqServerId=%s", sub.getId(), topicConf.getId(), topicConf.getMqServerId())); + } + + UpstreamTopic upstreamTopic = buildUpstreamTopic(groupConfig, sub, topicConf.getMqServerName()); + upstreamTopics.add(upstreamTopic); + } + } + return groupConfig; + } + + private Map> findTopicConfMap(List subList) { + Set topicIdSet = Sets.newHashSet(); + Set clusterIdSet = Sets.newHashSet(); + subList.forEach(sub -> { + topicIdSet.add(sub.getTopicId()); + clusterIdSet.add(sub.getClusterId()); + }); + + List topicConfList = topicConfService.findByTopicClusterIds(Lists.newArrayList(topicIdSet), Lists.newArrayList(clusterIdSet)); + Map> topicConfMap = Maps.newHashMap(); + if (CollectionUtils.isNotEmpty(topicConfList)) { + topicConfList.forEach(conf -> topicConfMap.computeIfAbsent(getTopicConfMapKey(conf.getTopicId(), conf.getClusterId()), s -> Lists.newArrayList()).add(conf)); + } + return topicConfMap; + } + + private String getTopicConfMapKey(Long topicId, Long clusterId) { + return topicId + "_" + clusterId; + } + + private String getSubExtraParamsMqServer(ConsumeSubscription sub) throws ZkConfigException { + if (MapUtils.isNotEmpty(sub.getSubExtraParams()) && sub.getSubExtraParams().containsKey(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER)) { + String tmpCluster = sub.getSubExtraParams().get(ConsumeSubscriptionOrderBo.SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER); + String[] arr = tmpCluster.split(";"); + for (String cluster : arr) { + if (mqServerService.findByName(cluster) == null) { + LOGGER.error("[Upstream] mqServer not found, subId={}, extraParams={}, ", sub.getId(), sub.getSubExtraParams()); + throw new ZkConfigException(String.format("[Upstream] subId<%s> not found extraParam mqserver<%s>", sub.getId(), sub.getTopicId())); + } + } + return tmpCluster; + } + + return null; + } + + public UpstreamTopic buildUpstreamTopic(GroupConfig groupConfig, ConsumeSubscription subscription, String brokerCluster) throws ZkConfigException { + UpstreamTopic upstreamTopic = new UpstreamTopic(); + + upstreamTopic.setBrokerCluster(brokerCluster); + if (subscription.getConsumeSubscriptionConfig() != null && MapUtils.isNotEmpty(subscription.getConsumeSubscriptionConfig().getProxies())) { + upstreamTopic.setProxies(Maps.newHashMap(subscription.getConsumeSubscriptionConfig().getProxies())); + } + + upstreamTopic.setTopic(subscription.getTopicName()); + upstreamTopic.setEnabled(subscription.getState() == IsEnable.ENABLE.getIndex()); + + upstreamTopic.setMaxPullBatchSize(subscription.getConsumeSubscriptionConfig().getMaxPullBatchSize()); + + upstreamTopic.setFetchThreads(subscription.getConsumeSubscriptionConfig().getFetchThreads()); + upstreamTopic.setMaxConsumeLag(subscription.getConsumeSubscriptionConfig().getMaxConsumeLag()); + + if (subscription.getAlarmType() == ConsumeSubscriptionAlarmType.EXTEND_GROUP_CONFIG.getIndex()) { + upstreamTopic.setEnableAlarm(groupConfig.isEnableAlarm()); + upstreamTopic.setDelayTimeThreshold(groupConfig.getDelayTimeThreshold()); + upstreamTopic.setCommittedLagThreshold(groupConfig.getCommittedLagThreshold()); + } else { + upstreamTopic.setEnableAlarm(IsEnable.isEnable(subscription.getAlarmIsEnable())); + upstreamTopic.setDelayTimeThreshold(subscription.getAlarmDelayTime()); + upstreamTopic.setCommittedLagThreshold(subscription.getAlarmMsgLag()); + } + + if (subscription.getSubActions().contains(Actions.ASYNC_HTTP)) { + upstreamTopic.setConcurrency(subscription.getPushMaxConcurrency()); + } else { + upstreamTopic.setConcurrency(subscription.getConsumeSubscriptionConfig().getConcurrency() < DEFAULT_MIN_CONCURRENCY ? DEFAULT_MIN_CONCURRENCY : subscription.getConsumeSubscriptionConfig().getConcurrency()); + } + + upstreamTopic.setAppendContext(subscription.getConsumeSubscriptionConfig().getAppendContext()); + upstreamTopic.setPressureTraffic(subscription.getPressureTraffic() == ConsumeSubscriptionPressureTraffic.ENABLE.getIndex()); + + upstreamTopic.setActions(subscription.getSubActions()); + if (IsEnable.isEnable(subscription.getEnableGroovy())) { + upstreamTopic.setGroovyScript(subscription.getGroovy()); + } + + upstreamTopic.setTotalMaxTps(subscription.getMaxTps()); + + if (MapUtils.isNotEmpty(upstreamTopic.getProxies())) { + int totalProxies = 0; + for (Set proxySet : upstreamTopic.getProxies().values()) { + totalProxies += proxySet.size(); + } + upstreamTopic.setMaxTps((int) (Math.ceil(upstreamTopic.getTotalMaxTps() / (double) totalProxies))); + } + upstreamTopic.setHttpMaxTps(subscription.getConsumeSubscriptionConfig().getHttpMaxTps()); + + upstreamTopic.setTimeout(subscription.getConsumeTimeout()); + upstreamTopic.setMaxRetry(subscription.getErrorRetryTimes()); + if (CollectionUtils.isNotEmpty(subscription.getSubUrls())) { + upstreamTopic.setUrls(subscription.getSubUrls()); + } + if (CollectionUtils.isNotEmpty(subscription.getSubRetryIntervals())) { + upstreamTopic.setRetryIntervals(subscription.getSubRetryIntervals()); + } + + if (IsEnable.isEnable(subscription.getEnableTransit()) && MapUtils.isNotEmpty(subscription.getSubTransit())) { + upstreamTopic.setTransit(Maps.newHashMap(subscription.getSubTransit())); + } + + if (MapUtils.isNotEmpty(subscription.getSubHttpQueryParams())) { + upstreamTopic.setQueryParams(Maps.newHashMap(subscription.getSubHttpQueryParams())); + } + if (IsEnable.isEnable(subscription.getEnableOrder())) { + upstreamTopic.setOrderKey(subscription.getOrderKey()); + } + + upstreamTopic.setHttpMethod(subscription.getHttpMethod() == null ? null : ConsumeSubscriptionHttpMethod.getByIndex(subscription.getHttpMethod()) == null ? null : ConsumeSubscriptionHttpMethod.getByIndex(subscription.getHttpMethod()).getName()); + upstreamTopic.setTokenKey(subscription.getHttpToken()); + + if (subscription.getConsumeType() == ConsumeSubscriptionConsumeType.BIG_DATA.getIndex()) { + try { + if (subscription.getBigDataType() == ConsumeSubscriptionBigDataType.HDFS.getIndex()) { + upstreamTopic.setHdfsConfiguration(FastJsonUtils.toObject(subscription.getBigDataConfig(), HdfsConfiguration.class)); + } else if (subscription.getBigDataType() == ConsumeSubscriptionBigDataType.HBASE.getIndex()) { + upstreamTopic.setHbaseconfiguration(FastJsonUtils.toObject(subscription.getBigDataConfig(), HBaseConfiguration.class)); + } else if (subscription.getBigDataType() == ConsumeSubscriptionBigDataType.REDIS.getIndex()) { + } else { + throw new ZkConfigException(String.format("[Sub] subId(%s) bigDataType error", subscription.getId())); + } + } catch (JSONException e) { + throw new ZkConfigException(String.format("[Sub] subId(%s) bigDataConfig JSON error", subscription.getId())); + } + } + + if (!upstreamTopic.getActions().contains(Actions.ASYNC) && !upstreamTopic.getActions().contains(Actions.NONBLOCKASYNC)) { + if (MapUtils.isEmpty(subscription.getSubExtraParams()) || !subscription.getSubExtraParams().containsKey(ConsumeSubscriptionOrderBo.SUB_FLAG_ACTION_IGNORE_ASYNC) || !"true".equalsIgnoreCase(subscription.getSubExtraParams().get(ConsumeSubscriptionOrderBo.SUB_FLAG_ACTION_IGNORE_ASYNC))) { + upstreamTopic.getActions().add(0, Actions.ASYNC); + } + //skip + } + + if (MapUtils.isNotEmpty(subscription.getSubExtraParams())) { + if (subscription.getSubExtraParams().containsKey("maxPullBatchSize")) { + upstreamTopic.setMaxPullBatchSize(Integer.parseInt(subscription.getSubExtraParams().get("maxPullBatchSize"))); + } + if (subscription.getSubExtraParams().containsKey("concurrency")) { + upstreamTopic.setConcurrency(Integer.parseInt(subscription.getSubExtraParams().get("concurrency"))); + } + } + + return upstreamTopic; + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public void updatePProxyConfig(Long nodeId) throws Exception { + Node node = nodeService.findById(nodeId); + if (node == null) { + LOGGER.warn("[ZK_V4_PProxy] node not found, nodeId={}", nodeId); + throw new ZkConfigException(String.format("[PProxy] node not found, nodeId=%s", nodeId)); + } + + if (node.getNodeType() != NodeType.PRODUCER_PROXY.getIndex()) { + LOGGER.warn("[ZK_V4_PProxy] node isn't pproxy node, nodeId={}", nodeId); + throw new ZkConfigException(String.format("[PProxy] node isn't pproxy node, nodeId=%s", nodeId)); + } + + Cluster cluster = clusterService.findById(node.getClusterId()); + if (cluster == null || cluster.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn(String.format("[ZK_V4_PProxy] not found cluster, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + throw new ZkConfigException(String.format("[PProxy] not found cluster, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + } + + List relationList = mqserverRelationService.findByClusterId(cluster.getId(), ClusterMqServerRelationType.P_PROXY); + if (CollectionUtils.isEmpty(relationList)) { + LOGGER.warn(String.format("[ZK_V4_PProxy] not found ClusterMqserverRelation, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + throw new ZkConfigException(String.format("[PProxy] not found ClusterMqserverRelation, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + } + + String host = HostUtils.getIpPortFromHost(node.getHost(), DEFAULT_PPROXY_PORT); + PProxyConfig zkPProxyConfig = zkService.getPProxy(host); + if (node.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn("[ZK_V4_PProxy] node is deleted, delete it from zk, nodeId={}, clusterId={}, host={}", nodeId, node.getClusterId(), node.getHost()); + if (zkPProxyConfig != null) { + zkService.deletePProxy(host); + } + return; + } + + PProxyConfig pProxyConfig = buildPProxyConfig(node, host, cluster, relationList); + zkService.createOrUpdatePProxy(pProxyConfig); + if (zkPProxyConfig == null) { + updateBrokerConfigByMqserverId(relationList); + } + + LOGGER.debug("[ZK_V4_PProxy] update pproxy success, nodeId={}, host={}, clusterId={}, pProxyConfig={}", nodeId, node.getClusterId(), node.getHost(), pProxyConfig); + LOGGER.info("[ZK_V4_PProxy] update pproxy success, nodeId={}, clusterId={}, host={}", nodeId, node.getClusterId(), node.getHost()); + + } + + private PProxyConfig buildPProxyConfig(Node node, String host, Cluster cluster, List relationList) throws ZkConfigException, ConfigurationValidator.ConfigException { + PProxyConfig pProxyConfig = new PProxyConfig(); + pProxyConfig.setInstance(host); + pProxyConfig.setProxyCluster(getPProxyCluster(cluster.getName())); + pProxyConfig.setBrokerClusters(relationList.stream().map(ClusterMqserverRelation::getMqServerName).collect(Collectors.toList())); + + Map mqServerTypeTable = getMqServerNameMap(); + for (ClusterMqserverRelation relation : relationList) { + if (StringUtils.isEmpty(relation.getProxyConf()) || "{}".equals(relation.getProxyConf())) { + continue; + } + + if (!mqServerTypeTable.containsKey(relation.getMqServerName())) { + throw new ZkConfigException(String.format("[PProxy] relaion mqserverId not exist, nodeId=%s, clusterId=%s, mqserverId=%s", node.getId(), node.getClusterId(), relation.getMqServerId())); + } + + CarreraConfiguration carreraConfiguration = FastJsonUtils.toObject(relation.getProxyConf(), new TypeReference() { + }); + if (carreraConfiguration == null || !carreraConfiguration.validate()) { + throw new ZkConfigException(String.format("[PProxy] CarreraConfiguration get failed, nodeId=%s, clusterId=%s, relationId=%s", node.getId(), node.getClusterId(), relation.getId())); + + } + + if (MapUtils.isNotEmpty(carreraConfiguration.getRocketmqConfigurationMap())) { + for (Map.Entry entry : carreraConfiguration.getRocketmqConfigurationMap().entrySet()) { + String brokerCluster = entry.getKey(); + RocketmqConfiguration conf = entry.getValue(); + + if (!mqServerTypeTable.containsKey(brokerCluster)) { + throw new ZkConfigException(String.format("[PProxy] CarreraConfiguration rocketmq config brokerCluster not found, nodeId=%s, clusterId=%s, relationId=%s, brokerCluster=%s", node.getId(), node.getClusterId(), relation.getId(), brokerCluster)); + } + + MqServer mqServer = mqServerTypeTable.get(brokerCluster); + conf.setNamesrvAddrs(Lists.newArrayList(mqServer.getAddr().split(";"))); + } + } + + pProxyConfig.setCarreraConfiguration(carreraConfiguration); + break; + } + + if (pProxyConfig.getCarreraConfiguration() == null) { + throw new ZkConfigException(String.format("[PProxy] CarreraConfiguration not found, nodeId=%s, clusterId=%s", node.getId(), node.getClusterId())); + } + + Set topics = Sets.newHashSet(); + pProxyConfig.setTopics(topics); + + List topicConfList = topicConfService.findByClusterId(cluster.getId()); + if (CollectionUtils.isNotEmpty(topicConfList)) { + List topicList = topicService.findByClusterId(cluster.getId()); + Map topicMap = Maps.newHashMap(); + topicList.forEach(t -> topicMap.put(t.getId(), t)); + + for (TopicConf topicConf : topicConfList) { + if (!topicMap.containsKey(topicConf.getTopicId())) { + throw new ZkConfigException(String.format("[PProxy] clusterId(%s) not found topic, topicConfId=%s, topicId=%s", cluster.getId(), topicConf.getId(), topicConf.getTopicId())); + } + + if (!mqServerTypeTable.containsKey(topicConf.getMqServerName())) { + throw new ZkConfigException(String.format("[PProxy] clusterId(%s) not found mqserverId, topicConfId=%s, mqServerId=%s", cluster.getId(), topicConf.getId(), topicConf.getMqServerId())); + } + + if (pProxyConfig.getBrokerClusters().contains(topicConf.getMqServerName())) { + topics.add(topicConf.getTopicName()); + } + } + } + return pProxyConfig; + } + + private String getPProxyCluster(String clusterName) { + return "P_" + clusterName; + } + + private String getCProxyCluster(String clusterName) { + return "C_" + clusterName; + } + + private void updateBrokerConfigByMqserverId(List relationList) throws Exception { + for (ClusterMqserverRelation relation : relationList) { + updateBrokerConfig(relation.getMqServerId()); + } + } + + @Override + @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) + public void updateCProxyConfig(Long nodeId) throws Exception { + Node node = nodeService.findById(nodeId); + if (node == null) { + LOGGER.warn("[ZK_V4_CProxy] node not found, nodeId={}", nodeId); + throw new ZkConfigException(String.format("[CProxy] node not found, nodeId=%s", nodeId)); + } + + if (node.getNodeType() != NodeType.CONSUMER_PROXY.getIndex()) { + LOGGER.warn("[ZK_V4_CProxy] node isn't cproxy node, nodeId={}", nodeId); + throw new ZkConfigException(String.format("[CProxy] node isn't cproxy node, nodeId=%s", nodeId)); + } + + Cluster cluster = clusterService.findById(node.getClusterId()); + if (cluster == null || cluster.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn(String.format("[ZK_V4_CProxy] not found cluster, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + throw new ZkConfigException(String.format("[CProxy] not found cluster, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + } + + List relationList = mqserverRelationService.findByClusterId(cluster.getId(), ClusterMqServerRelationType.C_PROXY); + if (CollectionUtils.isEmpty(relationList)) { + LOGGER.warn(String.format("[ZK_V4_CProxy] not found ClusterMqserverRelation, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + throw new ZkConfigException(String.format("[CProxy] not found ClusterMqserverRelation, nodeId=%s, clusterId=%s", nodeId, node.getClusterId())); + } + + String host = HostUtils.getIpPortFromHost(node.getHost(), DEFAULT_CPROXY_PORT); + CProxyConfig zkCProxyConfig = zkService.getCProxy(host); + if (node.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.info("[ZK_V4_CProxy] node is deleted, delete it from zk, nodeId={}, clusterId={}, host={}", nodeId, node.getClusterId(), node.getHost()); + if (zkCProxyConfig != null) { + updateBrokerConfigByMqserverId(relationList); + zkService.deleteCProxy(host); + } + return; + } + + CProxyConfig cProxyConfig = buildCProxyConfig(host, cluster, relationList); + zkService.createOrUpdateCProxy(cProxyConfig); + if (zkCProxyConfig == null) { + updateBrokerConfigByMqserverId(relationList); + } + LOGGER.debug("[ZK_V4_CProxy] update cproxy success, nodeId={}, clusterId={}, host={}, cProxyConfig={}", nodeId, node.getClusterId(), node.getHost(), cProxyConfig); + LOGGER.info("[ZK_V4_CProxy] update cproxy success, nodeId={}, clusterId={}, host={}", nodeId, node.getClusterId(), node.getHost()); + } + + private CProxyConfig buildCProxyConfig(String host, Cluster cluster, List relationList) throws ZkConfigException { + CProxyConfig cProxyConfig = new CProxyConfig(); + cProxyConfig.setInstance(host); + cProxyConfig.setProxyCluster(getCProxyCluster(cluster.getName())); + cProxyConfig.setBrokerClusters(relationList.stream().map(ClusterMqserverRelation::getMqServerName).collect(Collectors.toList())); + + Map> pproxies = Maps.newHashMap(); + + List pNodes = nodeService.findByClusterIdNodeType(cluster.getId(), NodeType.PRODUCER_PROXY); + if (CollectionUtils.isNotEmpty(pNodes)) { + for (Node pNode : pNodes) { + pproxies.computeIfAbsent(getPProxyCluster(cluster.getName()), s -> Sets.newHashSet()).add(pNode.getHost() + ":" + DEFAULT_PPROXY_PORT); + } + } + + Map mqServerTypeTable = getMqServerMap(); + Map kafkaConfigs = Maps.newHashMap(); + Map rocketmqConfigs = Maps.newHashMap(); + + cProxyConfig.setKafkaConfigs(kafkaConfigs); + cProxyConfig.setRocketmqConfigs(rocketmqConfigs); + for (ClusterMqserverRelation relation : relationList) { + if (!mqServerTypeTable.containsKey(relation.getMqServerId())) { + throw new ZkConfigException(String.format("[CProxy] relationId<%s> not found mqServerId<%s>", relation.getId(), relation.getMqServerId())); + } + + MqServer mqServer = mqServerTypeTable.get(relation.getMqServerId()); + + if (mqServerTypeTable.get(relation.getMqServerId()).getType() == MqServerType.ROCKETMQ.getIndex()) { + rocketmqConfigs.put(mqServer.getName(), getCproxyRocketmqConfiguration(mqServer, relation)); + } else { + kafkaConfigs.put(mqServer.getName(), getCproxyKafkaConfiguration(mqServer, relation)); + } + } + + cProxyConfig.setThriftServer(new ConsumeServerConfiguration()); + Set groups = Sets.newHashSet(); + cProxyConfig.setGroups(groups); + + List groupList = consumeGroupService.findByClusterId(cluster.getId()); + Map groupMap = Maps.newHashMap(); + groupList.forEach(group -> groupMap.put(group.getId(), group)); + + List subList = consumeSubscriptionService.findEnableByClusterId(cluster.getId()); + if (CollectionUtils.isNotEmpty(subList)) { + Map> topicConfMap = findTopicConfMap(subList); + for (ConsumeSubscription sub : subList) { + String topicConfMapKey = getTopicConfMapKey(sub.getTopicId(), sub.getClusterId()); + if (!topicConfMap.containsKey(topicConfMapKey) || CollectionUtils.isEmpty(topicConfMap.get(topicConfMapKey))) { + throw new ZkConfigException(String.format("[CProxy] subId(%s) not found topicConf, topicId=%s, clusterId=%s", sub.getId(), sub.getTopicId(), sub.getClusterId())); + } + + if (!groupMap.containsKey(sub.getGroupId())) { + throw new ZkConfigException(String.format("[CProxy] subId(%s) not found group, groupId=%s", sub.getId(), sub.getGroupId())); + } + for (TopicConf topicConf : topicConfMap.get(topicConfMapKey)) { + if (cProxyConfig.getBrokerClusters().contains(topicConf.getMqServerName())) { + groups.add(sub.getGroupName()); + } + } + } + } + return cProxyConfig; + } + + private KafkaConfiguration getCproxyKafkaConfiguration(MqServer mqServer, ClusterMqserverRelation relation) throws ZkConfigException { + KafkaConfiguration kafkaConfig = FastJsonUtils.toObject(relation.getProxyConf(), KafkaConfiguration.class); + if (kafkaConfig == null) { + LOGGER.warn("[CProxy] kafka cproxyConf convert failed, relationId={}, cproxyConf={}", relation.getId(), relation.getProxyConf()); + throw new ZkConfigException(String.format("[CProxy] relationId<%s> invalid kafka cproxyConf", relation.getId())); + } + + kafkaConfig.setClusterName(mqServer.getName()); + kafkaConfig.setZookeeperAddr(mqServer.getAddr()); + return kafkaConfig; + } + + private com.xiaojukeji.carrera.config.v4.cproxy.RocketmqConfiguration getCproxyRocketmqConfiguration(MqServer mqServer, ClusterMqserverRelation relation) throws ZkConfigException { + com.xiaojukeji.carrera.config.v4.cproxy.RocketmqConfiguration rocketmqConfig = FastJsonUtils.toObject(relation.getProxyConf(), com.xiaojukeji.carrera.config.v4.cproxy.RocketmqConfiguration.class); + if (rocketmqConfig == null) { + LOGGER.warn("[CProxy] rmq cproxyConf convert failed, relationId={}, cproxyConf={}", relation.getId(), relation.getProxyConf()); + throw new ZkConfigException(String.format("[CProxy] relationId<%s> invalid rmq cproxyConf", relation.getId())); + } + + rocketmqConfig.setClusterName(mqServer.getName()); + rocketmqConfig.setNamesrvAddrs(Lists.newArrayList(mqServer.getAddr().split(";"))); + return rocketmqConfig; + } + + + @Override + public void updateBrokerConfig(Long mqServerId) throws Exception { + MqServer mqServer = mqServerService.findById(mqServerId); + if (mqServer == null) { + LOGGER.warn("[ZK_V4_Broker] mqServer not found, mqServerId={}", mqServerId); + throw new ZkConfigException(String.format("[Broker] mqServer not found, mqServerId=%s", mqServerId)); + } + + if (mqServer.getIsDelete() == IsDelete.YES.getIndex()) { + LOGGER.warn("[ZK_V4_Broker] mqServer is deleted, delete it from zk, mqServerId={}, mqServer={}", mqServerId, mqServer.getName()); + zkService.deleteBroker(mqServer.getName()); + return; + } + + BrokerConfig brokerConfig = new BrokerConfig(); + brokerConfig.setBrokerCluster(mqServer.getName()); + brokerConfig.setBrokerClusterAddrs(mqServer.getAddr()); + Map> brokers = Maps.newHashMap(); + Map> pproxies = Maps.newHashMap(); + Map> cproxies = Maps.newHashMap(); + brokerConfig.setBrokers(brokers); + brokerConfig.setPproxies(pproxies); + brokerConfig.setCproxies(cproxies); + + List relationList = mqserverRelationService.findByMqServerId(mqServerId); + if (CollectionUtils.isEmpty(relationList)) { + zkService.createOrUpdateBroker(brokerConfig); + return; + } + + Map clusterMap = getClusterMap(); + for (ClusterMqserverRelation relation : relationList) { + Long clusterId = relation.getClusterId(); + if (!clusterMap.containsKey(clusterId)) { + LOGGER.warn("[ZK_V4_Broker] relation cluster not found, relationId={}, cluster={}", relation.getId(), relation.getClusterName()); + throw new ZkConfigException(String.format("[Broker] relation cluster not found, relationId=%s, cluster=%s", relation.getId(), relation.getClusterName())); + } + + List nodeList = nodeService.findByClusterId(clusterId); + if (CollectionUtils.isEmpty(nodeList)) { + continue; + } + + for (Node node1 : nodeList) { + if (node1.getNodeType() == NodeType.ROCKETMQ_BROKER_MASTER.getIndex()) { + String host = node1.getHost() + ":" + DEFAULT_BROKER_PORT; + if (!brokers.containsKey(host)) { + brokers.put(host, Sets.newHashSet()); + } + } + } + + for (Node node : nodeList) { + NodeType type = NodeType.getByIndex(node.getNodeType()); + if (type == null) { + throw new ZkConfigException(String.format("Unsuport Node Type, node=%s", node.toString())); + } + switch (type) { + case PRODUCER_PROXY: + pproxies.computeIfAbsent(getPProxyCluster(relation.getClusterName()), s -> Sets.newHashSet()).add(node.getHost() + ":" + DEFAULT_PPROXY_PORT); + break; + case CONSUMER_PROXY: + cproxies.computeIfAbsent(getCProxyCluster(relation.getClusterName()), s -> Sets.newHashSet()).add(node.getHost() + ":" + DEFAULT_CPROXY_PORT); + break; + case ROCKETMQ_BROKER_SLAVE: + Optional masterNode = nodeList.stream().filter(n -> node.getMasterId().equals(n.getId())).findFirst(); + if (masterNode.isPresent()) { + String key = masterNode.get().getHost() + ":" + DEFAULT_BROKER_PORT; + if (brokers.containsKey(key)) { + brokers.get(key).add(node.getHost() + ":" + DEFAULT_BROKER_PORT); + } else { + LOGGER.warn("[ZK_V4_Broker] brokers can't find master node<{}>, curNode<{}>", key, node.getId()); + throw new ZkConfigException("slave node:" + node.getId() + " can't find master node:" + key); + } + } else { + LOGGER.warn("[ZK_V4_Broker] slave node<{}> can't find master node<{}>", node.getId(), node.getMasterId()); + throw new ZkConfigException("unknown slave node:" + node.getId()); + } + break; + } + } + + zkService.createOrUpdateBroker(brokerConfig); + } + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupSearchItemVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupSearchItemVo.java new file mode 100644 index 0000000..ea79d90 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupSearchItemVo.java @@ -0,0 +1,34 @@ +package com.didi.carrera.console.service.vo; + +import java.util.List; + + +public class ConsumeGroupSearchItemVo { + + private List cluster; + private List topic; + + public List getCluster() { + return cluster; + } + + public void setCluster(List cluster) { + this.cluster = cluster; + } + + public List getTopic() { + return topic; + } + + public void setTopic(List topic) { + this.topic = topic; + } + + @Override + public String toString() { + return "ConsumeGroupSearchItemVo{" + + "cluster=" + cluster + + ", topic=" + topic + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupVo.java new file mode 100644 index 0000000..3fef984 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/ConsumeGroupVo.java @@ -0,0 +1,65 @@ +package com.didi.carrera.console.service.vo; + +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupBo; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.BeanUtils; + +import java.util.List; +import java.util.Map; + + +public class ConsumeGroupVo extends ConsumeGroupBo { + + private Integer subscriptionNum; + + private Integer subscriptionEnableNum; + + public Integer getSubscriptionNum() { + return subscriptionNum; + } + + public void setSubscriptionNum(Integer subscriptionNum) { + this.subscriptionNum = subscriptionNum; + } + + public Integer getSubscriptionEnableNum() { + return subscriptionEnableNum; + } + + public void setSubscriptionEnableNum(Integer subscriptionEnableNum) { + this.subscriptionEnableNum = subscriptionEnableNum; + } + + private static Map> getConsumeModeStringMapper(Map> mapper) { + if (MapUtils.isEmpty(mapper)) { + return null; + } + Map> stringMapper = Maps.newHashMap(); + for (Map.Entry> entry : mapper.entrySet()) { + stringMapper.put(String.valueOf(entry.getKey()), entry.getValue()); + } + return stringMapper; + } + + public static ConsumeGroupVo buildConsumeGroupVo(ConsumeGroup consumeGroup) { + ConsumeGroupVo vo = new ConsumeGroupVo(); + BeanUtils.copyProperties(consumeGroup, vo); + vo.setGroupId(consumeGroup.getId()); + vo.setAlarmGroup(consumeGroup.getGroupAlarmGroup()); + vo.setExtraParams(consumeGroup.getGroupExtraParams()); + vo.setConsumeModeMapper(getConsumeModeStringMapper(consumeGroup.getGroupConsumeModeMapper())); + vo.setSubscriptionNum(0); + vo.setSubscriptionEnableNum(0); + return vo; + } + + @Override + public String toString() { + return "ConsumeGroupVo{" + + "subscriptionNum=" + subscriptionNum + + ", subscriptionEnableNum=" + subscriptionEnableNum + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/GroupConsumeStateVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/GroupConsumeStateVo.java new file mode 100644 index 0000000..8b2a37c --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/GroupConsumeStateVo.java @@ -0,0 +1,121 @@ +package com.didi.carrera.console.service.vo; + + +public class GroupConsumeStateVo { + + private Long groupId; + + private Long topicId; + + private String topicName; + + private Long clusterId; + + private String clusterName; + + private String qid; + + private Long minOffset; + + private Long maxOffset; + + private Long consumeOffset; + + private Long lag; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public String getQid() { + return qid; + } + + public void setQid(String qid) { + this.qid = qid; + } + + public Long getMinOffset() { + return minOffset; + } + + public void setMinOffset(Long minOffset) { + this.minOffset = minOffset; + } + + public Long getMaxOffset() { + return maxOffset; + } + + public void setMaxOffset(Long maxOffset) { + this.maxOffset = maxOffset; + } + + public Long getConsumeOffset() { + return consumeOffset; + } + + public void setConsumeOffset(Long consumeOffset) { + this.consumeOffset = consumeOffset; + } + + public Long getLag() { + return lag; + } + + public void setLag(Long lag) { + this.lag = lag; + } + + @Override + public String toString() { + return "GroupConsumeStateVo{" + + "groupId=" + groupId + + ", topicId=" + topicId + + ", topicName='" + topicName + '\'' + + ", clusterId=" + clusterId + + ", clusterName='" + clusterName + '\'' + + ", qid='" + qid + '\'' + + ", minOffset=" + minOffset + + ", maxOffset=" + maxOffset + + ", consumeOffset=" + consumeOffset + + ", lag=" + lag + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SearchItemVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SearchItemVo.java new file mode 100644 index 0000000..02953be --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SearchItemVo.java @@ -0,0 +1,36 @@ +package com.didi.carrera.console.service.vo; + + +public class SearchItemVo { + private Long id; + private String desc; + + public SearchItemVo(Long id, String desc) { + this.id = id; + this.desc = desc; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + @Override + public String toString() { + return "SearchItemVo{" + + "id=" + id + + ", desc='" + desc + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SubscriptionOrderListVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SubscriptionOrderListVo.java new file mode 100644 index 0000000..aa766c0 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/SubscriptionOrderListVo.java @@ -0,0 +1,79 @@ +package com.didi.carrera.console.service.vo; + +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import com.google.common.collect.Maps; +import org.springframework.beans.BeanUtils; + + +public class SubscriptionOrderListVo extends ConsumeSubscriptionOrderBo { + + private Byte state; + + private Long idcId; + + private String idc; + + private String clusterDesc; + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + public String getIdc() { + return idc; + } + + public void setIdc(String idc) { + this.idc = idc; + } + + public Long getIdcId() { + return idcId; + } + + public void setIdcId(Long idcId) { + this.idcId = idcId; + } + + public String getClusterDesc() { + return clusterDesc; + } + + public void setClusterDesc(String clusterDesc) { + this.clusterDesc = clusterDesc; + } + + public static SubscriptionOrderListVo buildSubscriptionListVo(ConsumeSubscription sub, Long idcId, String idc, String clusterDesc) { + SubscriptionOrderListVo vo = new SubscriptionOrderListVo(); + BeanUtils.copyProperties(sub, vo); + vo.setSubId(sub.getId()); + vo.setExtraParams(sub.getSubExtraParams()); + vo.setHttpHeaders(sub.getSubHttpHeaders()); + vo.setHttpQueryParams(sub.getSubHttpQueryParams()); + vo.setRetryIntervals(sub.getSubRetryIntervals()); + vo.setTransit(sub.getSubTransit()); + vo.setUrls(sub.getSubUrls()); + vo.setIdc(idc); + vo.setIdcId(idcId); + vo.setClusters(Maps.newHashMap()); + vo.getClusters().put(sub.getClusterName(), sub.getClusterId()); + vo.setClusterDesc(clusterDesc); + + return vo; + } + + @Override + public String toString() { + return "SubscriptionOrderListVo{" + + "state=" + state + + ", idcId=" + idcId + + ", idc='" + idc + '\'' + + ", clusterDesc='" + clusterDesc + '\'' + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicConfVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicConfVo.java new file mode 100644 index 0000000..9b090de --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicConfVo.java @@ -0,0 +1,136 @@ +package com.didi.carrera.console.service.vo; + + +import com.didi.carrera.console.dao.model.custom.CustomTopicConf; +import com.didi.carrera.console.web.controller.bo.TopicConfBo; +import org.springframework.beans.BeanUtils; + + +public class TopicConfVo extends TopicConfBo { + + private Long confId; + + private Long mqServerId; + private String mqServerName; + + + private Integer msgRealMaxSize; + private Integer msgRealAvgSize; + + private Integer weekMaxTps; + private Integer weekAvgTps; + + private Integer consumerNum; + + private String monitorUrl; + + private String clusterDesc; + + public Long getConfId() { + return confId; + } + + public void setConfId(Long confId) { + this.confId = confId; + } + + public Integer getMsgRealMaxSize() { + return msgRealMaxSize; + } + + public void setMsgRealMaxSize(Integer msgRealMaxSize) { + this.msgRealMaxSize = msgRealMaxSize; + } + + public Integer getMsgRealAvgSize() { + return msgRealAvgSize; + } + + public void setMsgRealAvgSize(Integer msgRealAvgSize) { + this.msgRealAvgSize = msgRealAvgSize; + } + + public Integer getWeekMaxTps() { + return weekMaxTps; + } + + public void setWeekMaxTps(Integer weekMaxTps) { + this.weekMaxTps = weekMaxTps; + } + + public Integer getWeekAvgTps() { + return weekAvgTps; + } + + public void setWeekAvgTps(Integer weekAvgTps) { + this.weekAvgTps = weekAvgTps; + } + + public Integer getConsumerNum() { + return consumerNum; + } + + public void setConsumerNum(Integer consumerNum) { + this.consumerNum = consumerNum; + } + + public String getMonitorUrl() { + return monitorUrl; + } + + public void setMonitorUrl(String monitorUrl) { + this.monitorUrl = monitorUrl; + } + + public Long getMqServerId() { + return mqServerId; + } + + public void setMqServerId(Long mqServerId) { + this.mqServerId = mqServerId; + } + + public String getMqServerName() { + return mqServerName; + } + + public void setMqServerName(String mqServerName) { + this.mqServerName = mqServerName; + } + + public String getClusterDesc() { + return clusterDesc; + } + + public void setClusterDesc(String clusterDesc) { + this.clusterDesc = clusterDesc; + } + + public static TopicConfVo buildTopicConfVo(CustomTopicConf conf) { + TopicConfVo confVo = new TopicConfVo(); + BeanUtils.copyProperties(conf, confVo); + confVo.setClientIdcMap(conf.getTopicConfClientIdc()); + confVo.setMsgRealAvgSize(0); + confVo.setMsgRealMaxSize(0); + confVo.setWeekAvgTps(0); + confVo.setWeekMaxTps(0); + + return confVo; + } + + @Override + public String toString() { + return "TopicConfVo{" + + "confId=" + confId + + ", mqServerId=" + mqServerId + + ", mqServerName='" + mqServerName + '\'' + + ", msgRealMaxSize=" + msgRealMaxSize + + ", msgRealAvgSize=" + msgRealAvgSize + + ", weekMaxTps=" + weekMaxTps + + ", weekAvgTps=" + weekAvgTps + + ", consumerNum=" + consumerNum + + ", monitorUrl='" + monitorUrl + '\'' + + ", clusterDesc='" + clusterDesc + '\'' + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicListGroupVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicListGroupVo.java new file mode 100644 index 0000000..f9c2402 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicListGroupVo.java @@ -0,0 +1,68 @@ +package com.didi.carrera.console.service.vo; + +import java.util.Date; + + +public class TopicListGroupVo { + + private Long groupId; + + private String groupName; + + private String contacters; + + private Date createTime; + + private Byte state; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Byte getState() { + return state; + } + + public void setState(Byte state) { + this.state = state; + } + + @Override + public String toString() { + return "TopicListGroupVo{" + + "groupId=" + groupId + + ", groupName='" + groupName + '\'' + + ", contacters='" + contacters + '\'' + + ", createTime=" + createTime + + ", state=" + state + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicMessageVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicMessageVo.java new file mode 100644 index 0000000..f78c785 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicMessageVo.java @@ -0,0 +1,88 @@ +package com.didi.carrera.console.service.vo; + + +public class TopicMessageVo { + + private Long topicId; + + private String topicName; + + private Long clusterId; + + private String clusterName; + + private String qid; + + private Long offset; + + private String msg; + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public String getQid() { + return qid; + } + + public void setQid(String qid) { + this.qid = qid; + } + + public Long getOffset() { + return offset; + } + + public void setOffset(Long offset) { + this.offset = offset; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + @Override + public String toString() { + return "TopicMessageVo{" + + "topicId=" + topicId + + ", topicName='" + topicName + '\'' + + ", clusterId=" + clusterId + + ", clusterName='" + clusterName + '\'' + + ", qid='" + qid + '\'' + + ", offset=" + offset + + ", msg='" + msg + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicOrderVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicOrderVo.java new file mode 100644 index 0000000..f966f71 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicOrderVo.java @@ -0,0 +1,30 @@ +package com.didi.carrera.console.service.vo; + +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.web.controller.bo.TopicOrderBo; +import com.google.common.collect.Lists; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.BeanUtils; + + +public class TopicOrderVo extends TopicOrderBo { + + public void addConf(TopicConfVo vo) { + if (CollectionUtils.isEmpty(getConf())) { + setConf(Lists.newArrayList()); + } + + getConf().add(vo); + } + + public static TopicOrderVo buildTopicVo(Topic topic) { + TopicOrderVo vo = new TopicOrderVo(); + BeanUtils.copyProperties(topic, vo); + vo.setTopicId(topic.getId()); + vo.setSchema(topic.getTopicSchema()); + vo.setAlarmGroup(topic.getTopicAlarmGroup()); + vo.setExtraParams(topic.getTopicExtraParams()); + + return vo; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicSimpleVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicSimpleVo.java new file mode 100644 index 0000000..0e4d2e2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicSimpleVo.java @@ -0,0 +1,41 @@ +package com.didi.carrera.console.service.vo; + +import com.didi.carrera.console.dao.model.Topic; + + +public class TopicSimpleVo { + + private Long topicId; + private String topicName; + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + @Override + public String toString() { + return "TopicSimpleVo{" + + "topicId=" + topicId + + ", topicName='" + topicName + '\'' + + "} " + super.toString(); + } + + public static TopicSimpleVo buildVo(Topic topic) { + TopicSimpleVo vo = new TopicSimpleVo(); + vo.setTopicId(topic.getId()); + vo.setTopicName(topic.getTopicName()); + return vo; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicStateVo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicStateVo.java new file mode 100644 index 0000000..2acc6c2 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/service/vo/TopicStateVo.java @@ -0,0 +1,88 @@ +package com.didi.carrera.console.service.vo; + + +public class TopicStateVo { + + private Long topicId; + + private Long clusterId; + + private String topicName; + + private String qid; + + private Long minOffset; + + private Long maxOffset; + + private String lastUpdateTime; + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public String getQid() { + return qid; + } + + public void setQid(String qid) { + this.qid = qid; + } + + public Long getMinOffset() { + return minOffset; + } + + public void setMinOffset(Long minOffset) { + this.minOffset = minOffset; + } + + public Long getMaxOffset() { + return maxOffset; + } + + public void setMaxOffset(Long maxOffset) { + this.maxOffset = maxOffset; + } + + public String getLastUpdateTime() { + return lastUpdateTime; + } + + public void setLastUpdateTime(String lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; + } + + @Override + public String toString() { + return "TopicStateVo{" + + "topicId=" + topicId + + ", clusterId=" + clusterId + + ", topicName='" + topicName + '\'' + + ", qid='" + qid + '\'' + + ", minOffset=" + minOffset + + ", maxOffset=" + maxOffset + + ", lastUpdateTime='" + lastUpdateTime + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/AbstractBaseController.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/AbstractBaseController.java new file mode 100644 index 0000000..c63e098 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/AbstractBaseController.java @@ -0,0 +1,148 @@ +package com.didi.carrera.console.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.didi.carrera.console.web.util.DateTimePropertyEditor; +import com.didi.carrera.console.web.util.StringPropertyEditor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.ServletRequestDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; + + +@SuppressWarnings("rawtypes") +public abstract class AbstractBaseController { + + public Logger logger = LoggerFactory.getLogger(this.getClass()); + + public static final String DATA = "type=data"; + protected static final String MOB_REGEX = "^13[0-9]{9}$|^14[0-9]{9}$|^15[0-9]{9}$|^17[0-9]{9}$|^18[0-9]{9}$"; // 手机号校验正则 + + @InitBinder + protected void initBinder(ServletRequestDataBinder binder) { + binder.registerCustomEditor(String.class, new StringPropertyEditor()); + binder.registerCustomEditor(Date.class, new DateTimePropertyEditor()); + } + + public class MyHandlerExceptionResolver implements HandlerExceptionResolver { + @Override + public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, + Exception ex) { + return new ModelAndView("exception"); + } + } + + /** + * 默认是第一页 + * + * @param request + * @return + */ + public int getPageNo(HttpServletRequest request) { + String pageNoStr = request.getParameter("pageNum"); + return StringUtils.isNotBlank(pageNoStr) ? Integer.parseInt(pageNoStr) : 1; + } + + /** + * 默认每页20条 + * + * @param request + * @return + */ + public int getPageSize(HttpServletRequest request) { + String pageSizeStr = request.getParameter("pageSize"); + return StringUtils.isNotBlank(pageSizeStr) ? Integer.parseInt(pageSizeStr) : 20; + } + + protected String getParameter(HttpServletRequest request, String para) { + String value = request.getParameter(para); + if (StringUtils.isBlank(value)) { + return ""; + } + return value.trim(); + } + + protected int getParameterInt(HttpServletRequest request, String para) { + String value = request.getParameter(para); + if (StringUtils.isBlank(value)) { + return 0; + } + if (!StringUtils.isNumeric(value)) { + return 0; + } + try { + return Integer.parseInt(value); + } catch (Exception e) { + logger.error("getParameter error"); + return 0; + } + } + + protected float getParameterFloat(HttpServletRequest request, String para) { + String value = request.getParameter(para); + if (StringUtils.isBlank(value)) { + return 0; + } + try { + return Float.valueOf(value); + } catch (Exception e) { + logger.error("getParameter error"); + return 0; + } + } + + protected long getParameterLong(HttpServletRequest request, String para) { + String value = request.getParameter(para); + if (StringUtils.isBlank(value)) { + return 0; + } + if (!StringUtils.isNumeric(value)) { + return 0; + } + try { + return Long.parseLong(value); + } catch (Exception e) { + logger.error("getParameter error" + e); + return 0; + } + } + + protected JSONObject getBodyParameter(HttpServletRequest request) { + JSONObject json = null; + byte[] bytes = new byte[1024 * 1024]; + InputStream is; + try { + is = request.getInputStream(); + + int nRead = 1; + int nTotalRead = 0; + while (nRead > 0) { + nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead); + if (nRead > 0) + nTotalRead = nTotalRead + nRead; + } + String str = new String(bytes, 0, nTotalRead, "utf-8"); + if (str.indexOf("{") == 0) { + json = JSON.parseObject(str); + } + } catch (IOException e) { + logger.error("getParameter error" + e); + } + return json; + } + + public String getBindingResultErrorInfo(BindingResult bindingResult) { + return "bind error"; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/ConsoleBaseResponse.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/ConsoleBaseResponse.java new file mode 100755 index 0000000..10feed0 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/ConsoleBaseResponse.java @@ -0,0 +1,100 @@ +package com.didi.carrera.console.web; + + +import com.alibaba.fastjson.annotation.JSONField; + + +public class ConsoleBaseResponse { + /** + * 状态 + */ + public enum Status { + + SUCCESS(0), + + INVALID_PARAM(400), + + INTERNAL_ERROR(500); + + private int code; + + Status(int code){ + this.code = code; + } + + public int getCode() { + return code; + } + } + + protected int errno; + protected String errmsg; + + private T data = null; + + public static ConsoleBaseResponse success() { + return success(null); + } + + public static ConsoleBaseResponse success(T data) { + ConsoleBaseResponse response = new ConsoleBaseResponse<>(); + response.setErrno(Status.SUCCESS.code); + response.setErrmsg("SUCCESS"); + response.setData(data); + return response; + } + + public static ConsoleBaseResponse error(Status status) { + return error(status, ""); + } + + public static ConsoleBaseResponse error(Status status, String message) { + ConsoleBaseResponse response = new ConsoleBaseResponse<>(); + response.setErrno(status.code); + response.setErrmsg(message); + return response; + } + + public ConsoleBaseResponse() { + } + + @JSONField(serialize = false) + public boolean isSuccess() { + return this.errno == Status.SUCCESS.getCode(); + } + + public void setStatus(Status status) { + if(status != null){ + this.errno = status.code; + } + } + + public void setErrno(int errno) { + this.errno = errno; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public int getErrno() { + return errno; + } + + public String getErrmsg() { + return errmsg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "ConsoleBaseResponse [errno=" + errno + ", errmsg=" + errmsg + ", data=" + data + "]"; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/LoginInterceptor.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/LoginInterceptor.java new file mode 100644 index 0000000..80715f6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/LoginInterceptor.java @@ -0,0 +1,58 @@ +package com.didi.carrera.console.web.controller; + +import com.didi.carrera.console.service.impl.TopicConfServiceImpl; +import com.didi.carrera.console.web.util.CookieUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Author: zanglei@didiglobal.com + * Date: 2019-10-16 + * Time: 11:59 + */ +public class LoginInterceptor implements HandlerInterceptor { + + private static final Logger LOGGER = LoggerFactory.getLogger(LoginInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + LOGGER.info("uri: {}, url: {}", request.getRequestURI(), request.getRequestURL()); + if (!request.getRequestURI().startsWith("/carrera/api")) { + return true; + } + + if (request.getRequestURI().contains("login") || request.getRequestURI().contains("logout")) { + return true; + } + + Cookie[] cookies = request.getCookies(); + if (cookies == null) { + response.setStatus(401); + return false; + } else { + for (Cookie cookie : cookies) { + if (CookieUtil.cookies.contains(cookie.getValue())) { + return true; + } + } + } + response.setStatus(401); + return false; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/AcceptTopicConfBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/AcceptTopicConfBo.java new file mode 100644 index 0000000..da84e17 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/AcceptTopicConfBo.java @@ -0,0 +1,48 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +import com.didi.carrera.console.dao.model.TopicConf; +import org.springframework.beans.BeanUtils; + + +public class AcceptTopicConfBo extends TopicConfBo { + + @NotNull(message = "MqServer Id不能为空") + @Min(value = 1, message = "MqServerId必须大于0") + private Long mqServerId; + + private String mqServerName; + + public Long getMqServerId() { + return mqServerId; + } + + public void setMqServerId(Long mqServerId) { + this.mqServerId = mqServerId; + } + + public String getMqServerName() { + return mqServerName; + } + + public void setMqServerName(String mqServerName) { + this.mqServerName = mqServerName; + } + + @Override + public TopicConf buildTopicConf() { + TopicConf topicConf = super.buildTopicConf(); + BeanUtils.copyProperties(this, topicConf); + return topicConf; + } + + @Override + public String toString() { + return "AcceptTopicConfBo{" + + "mqServerId=" + mqServerId + + ", mqServerName='" + mqServerName + '\'' + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseBo.java new file mode 100644 index 0000000..8918db7 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseBo.java @@ -0,0 +1,27 @@ +package com.didi.carrera.console.web.controller.bo; + +import com.alibaba.fastjson.annotation.JSONField; +import org.hibernate.validator.constraints.NotBlank; + + +public class BaseBo { + + @NotBlank(message = "当前用户不能为空") + @JSONField(serialize = false) + private String user; + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + @Override + public String toString() { + return "BaseBo{" + + "user='" + user + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseOrderBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseOrderBo.java new file mode 100644 index 0000000..06cc887 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/BaseOrderBo.java @@ -0,0 +1,59 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +import com.alibaba.fastjson.annotation.JSONField; + + +public class BaseOrderBo extends BaseBo { + + public interface LocalOrderCheck { + } + + @JSONField(serialize = false) + private String orderRemark; + + @NotNull(message = "工单ID不能为空", groups = LocalOrderCheck.class) + @Min(value = 0, message = "工单ID不能小于0", groups = LocalOrderCheck.class) + @JSONField(serialize = false) + private Long orderId; + + @NotNull(message = "工单状态不能为空", groups = LocalOrderCheck.class) + @JSONField(serialize = false) + private Byte orderState; + + public String getOrderRemark() { + return orderRemark; + } + + public void setOrderRemark(String orderRemark) { + this.orderRemark = orderRemark; + } + + public Long getOrderId() { + return orderId; + } + + public void setOrderId(Long orderId) { + this.orderId = orderId; + } + + public Byte getOrderState() { + return orderState; + } + + public void setOrderState(Byte orderState) { + this.orderState = orderState; + } + + @Override + public String toString() { + return "BaseOrderBo{" + + "orderRemark='" + orderRemark + '\'' + + ", orderId=" + orderId + + ", orderState=" + orderState + + "} " + super.toString(); + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupBo.java new file mode 100644 index 0000000..df19a23 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupBo.java @@ -0,0 +1,269 @@ +package com.didi.carrera.console.web.controller.bo; + +import com.alibaba.fastjson.annotation.JSONField; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.model.ConsumeGroup; +import com.didi.carrera.console.dao.model.custom.ConsumeGroupConfig; +import com.didi.carrera.console.web.controller.validator.AnotherFieldEqualsSpecifiedValue; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.Range; +import org.springframework.beans.BeanUtils; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.List; +import java.util.Map; + + +@AnotherFieldEqualsSpecifiedValue.List({ + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeMode", fieldValue = "2", dependFieldName = "consumeModeMapper", message = "消费模式不能为空") +}) +public class ConsumeGroupBo extends BaseBo { + + @NotNull(message = "消费组Id不能为空") + private Long groupId; + + @Length(min = 3, max = 128, message = "消费组长度必须3-128个字符") + @Pattern(regexp = "^[cg_][a-zA-Z0-9_\\-]+$", message = "消费组必须以cg_开头,其余只能使用字母数字、下划线、减号") + private String groupName; + + @NotBlank(message = "分摊方不能为空") + private String service; + + @NotBlank(message = "部门不能为空") + private String department; + + @NotBlank(message = "负责RD不能为空") + private String contacters; + + private List alarmGroup; + + @NotNull(message = "报警级别不能为空") + @Range(min = 1, max = 3, message = "报警级别为1-3级") + private Byte alarmLevel; + + @NotNull(message = "启用报警不能为空") + @Range(min = 0, max = 1, message = "启用报警只能为0或1") + private Byte alarmIsEnable; + + @NotNull(message = "消息积压阈值不能为空") + @Min(value = 1, message = "消息积压阈值必须大于0") + private Integer alarmMsgLag; + + @NotNull(message = "消息延迟时间不能为空") + @Min(value = 1, message = "消息延迟时间必须大于0,且为整数") + private Integer alarmDelayTime; + + private Byte broadcastConsume = IsEnable.DISABLE.getIndex(); + + private Map extraParams; + + private Map operationParams; + + @NotNull(message = "消费模式不能为空") + @Range(min = 0, max = 2, message = "消费模式只能为同机房或跨机房或其他") + private Byte consumeMode; + + /** + * 自定义消费模式,map结构,key为client idc,value为cproxy idc列表 + * default = + * length = 2048 + */ + private Map> consumeModeMapper; + + public Map getOperationParams() { + return operationParams; + } + + public void setOperationParams(Map operationParams) { + this.operationParams = operationParams; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters; + } + + public List getAlarmGroup() { + return alarmGroup; + } + + public void setAlarmGroup(List alarmGroup) { + this.alarmGroup = alarmGroup; + } + + public Byte getAlarmLevel() { + return alarmLevel; + } + + public void setAlarmLevel(Byte alarmLevel) { + this.alarmLevel = alarmLevel; + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public Integer getAlarmMsgLag() { + return alarmMsgLag; + } + + public void setAlarmMsgLag(Integer alarmMsgLag) { + this.alarmMsgLag = alarmMsgLag; + } + + public Integer getAlarmDelayTime() { + return alarmDelayTime; + } + + public void setAlarmDelayTime(Integer alarmDelayTime) { + this.alarmDelayTime = alarmDelayTime; + } + + public Map getExtraParams() { + return extraParams; + } + + public void setExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + + public Byte getBroadcastConsume() { + return broadcastConsume; + } + + public void setBroadcastConsume(Byte broadcastConsume) { + this.broadcastConsume = broadcastConsume; + } + + public Byte getConsumeMode() { + return consumeMode; + } + + public void setConsumeMode(Byte consumeMode) { + this.consumeMode = consumeMode; + } + + public Map> getConsumeModeMapper() { + return consumeModeMapper; + } + + @JSONField(serialize = false) + public Map> getConsumeModeLongMapper() { + if (MapUtils.isEmpty(consumeModeMapper)) { + return null; + } + Map> mapper = Maps.newHashMap(); + for (Map.Entry> entry : consumeModeMapper.entrySet()) { + mapper.put(Long.parseLong(entry.getKey()), Lists.newArrayList(entry.getValue())); + } + return mapper; + } + + public void setConsumeModeMapper(Map> consumeModeMapper) { + this.consumeModeMapper = consumeModeMapper; + } + + @JSONField(serialize = false) + public boolean isModify() { + return groupId != null && groupId > 0; + } + + public ConsumeGroup buildConsumeGroup() { + ConsumeGroup group = new ConsumeGroup(); + BeanUtils.copyProperties(this, group); + group.setId(this.getGroupId()); + group.setGroupAlarmGroup(this.getAlarmGroup()); + group.setGroupExtraParams(this.getExtraParams()); + + String contacters = getContacters(); + if (!";".equals(contacters.substring(contacters.length() - 1))) { + setContacters(getContacters() + ";"); + group.setContacters(getContacters()); + } + return group; + } + + public static ConsumeGroupBo buildConsumeGroupBo(ConsumeGroup group) { + ConsumeGroupBo groupBo = new ConsumeGroupBo(); + BeanUtils.copyProperties(group, groupBo); + groupBo.setGroupId(group.getId()); + groupBo.setAlarmGroup(group.getGroupAlarmGroup()); + groupBo.setExtraParams(group.getGroupExtraParams()); + + if (MapUtils.isEmpty(groupBo.getOperationParams())) { + groupBo.setOperationParams(Maps.newHashMap()); + } + ConsumeGroupConfig config = group.getConsumeGroupConfig(); + groupBo.getOperationParams().put(ConsumeGroupConfig.key_asyncThreads, String.valueOf(config.getAsyncThreads())); + groupBo.getOperationParams().put(ConsumeGroupConfig.key_redisConfigStr, StringUtils.isEmpty(config.getRedisConfigStr()) ? "" : config.getRedisConfigStr()); + + return groupBo; + } + + @Override + public String toString() { + return "ConsumeGroupBo{" + + "groupId=" + groupId + + ", groupName='" + groupName + '\'' + + ", service='" + service + '\'' + + ", department='" + department + '\'' + + ", contacters='" + contacters + '\'' + + ", alarmGroup=" + alarmGroup + + ", alarmLevel=" + alarmLevel + + ", alarmIsEnable=" + alarmIsEnable + + ", alarmMsgLag=" + alarmMsgLag + + ", alarmDelayTime=" + alarmDelayTime + + ", broadcastConsume=" + broadcastConsume + + ", extraParams=" + extraParams + + ", operationParams=" + operationParams + + ", consumeMode=" + consumeMode + + ", consumeModeMapper=" + consumeModeMapper + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupResetOffsetBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupResetOffsetBo.java new file mode 100644 index 0000000..2c65595 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeGroupResetOffsetBo.java @@ -0,0 +1,110 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.Range; + + +public class ConsumeGroupResetOffsetBo { + @NotBlank(message = "当前登录用户不能为空") + private String user; + + @NotNull(message = "消费组Id不能为空") + private Long groupId; + + @NotNull(message = "topicId不能为空") + private Long topicId; + + @NotNull(message = "集群Id不能为空") + private Long clusterId; + + @NotNull(message = "重置类型不能为空") + @Range(min = 1, max = 3, message = "重置类型只能为1-3") + private Integer resetType; + + private Date resetTime; + + private String qid; + + private Long offset; + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public Integer getResetType() { + return resetType; + } + + public void setResetType(Integer resetType) { + this.resetType = resetType; + } + + public Date getResetTime() { + return resetTime; + } + + public void setResetTime(Date resetTime) { + this.resetTime = resetTime; + } + + public String getQid() { + return qid; + } + + public void setQid(String qid) { + this.qid = qid; + } + + public Long getOffset() { + return offset; + } + + public void setOffset(Long offset) { + this.offset = offset; + } + + @Override + public String toString() { + return "ConsumeGroupResetOffsetBo{" + + "user='" + user + '\'' + + ", groupId=" + groupId + + ", topicId=" + topicId + + ", clusterId=" + clusterId + + ", resetType=" + resetType + + ", resetTime=" + resetTime + + ", qid='" + qid + '\'' + + ", offset=" + offset + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionBaseBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionBaseBo.java new file mode 100644 index 0000000..66b6a0b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionBaseBo.java @@ -0,0 +1,645 @@ +package com.didi.carrera.console.web.controller.bo; + +import com.alibaba.fastjson.annotation.JSONField; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionApiType; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionBigDataType; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionConsumeType; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionMsgPushType; +import com.didi.carrera.console.dao.dict.ConsumeSubscriptionMsgType; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import com.didi.carrera.console.web.controller.validator.AnotherFieldEqualsSpecifiedValue; +import com.google.common.collect.Lists; +import com.xiaojukeji.carrera.config.Actions; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.hibernate.validator.constraints.Range; +import org.springframework.beans.BeanUtils; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.List; +import java.util.Map; + + +@AnotherFieldEqualsSpecifiedValue.List({ + @AnotherFieldEqualsSpecifiedValue(fieldName = "apiType", fieldValue = "1", dependFieldName = "msgType", message = "消息类型不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "apiType", fieldValue = "1", dependFieldName = "consumeType", message = "消费类型不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "apiType", fieldValue = "1", dependFieldName = "enableOrder", message = "是否启用顺序消费不能为空"), + + @AnotherFieldEqualsSpecifiedValue(fieldName = "msgType", fieldValue = "1", dependFieldName = "enableGroovy", message = "是否启用Groovy不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "msgType", fieldValue = "1", dependFieldName = "enableTransit", message = "是否启用Transit不能为空"), + + @AnotherFieldEqualsSpecifiedValue(fieldName = "enableGroovy", fieldValue = "0", dependFieldName = "groovy", message = "groovy不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "enableTransit", fieldValue = "0", dependFieldName = "transit", message = "transit不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "enableOrder", fieldValue = "0", dependFieldName = "orderKey", message = "orderKey不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeType", fieldValue = "2", dependFieldName = "urls", message = "urls不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeType", fieldValue = "2", dependFieldName = "httpMethod", message = "HttpMethod不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeType", fieldValue = "2", dependFieldName = "pushMaxConcurrency", message = "推送并发不能为空"), + + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeType", fieldValue = "3", dependFieldName = "bigDataType", message = "写入类型不能为空"), + @AnotherFieldEqualsSpecifiedValue(fieldName = "consumeType", fieldValue = "3", dependFieldName = "bigDataConfig", message = "写入配置不能为空") +}) +public class ConsumeSubscriptionBaseBo extends BaseOrderBo { + + @NotNull(message = "subId不能为空") + private Long subId; + + @NotNull(message = "消费组id不能为空") + private Long groupId; + private String groupName; + + @NotNull(message = "topicId不能为空") + private Long topicId; + private String topicName; + + @NotNull(message = "消费限流不能为空") + @Min(value = 1, message = "消费限流必须大于0") + private Double maxTps; + + @NotNull(message = "是否接收压测流量不能为空") + @Range(min = 0, max = 1, message = "是否接收压测流量只能是0不接收 1接收") + private Byte pressureTraffic; + + @NotNull(message = "报警类型不能为空") + @Range(min = 0, max = 1, message = "报警类型只能是继承消费组配置或单独配置") + private Byte alarmType; + + private Byte alarmIsEnable = 0; + private Integer alarmMsgLag = 10000; + private Integer alarmDelayTime = 300000; + + @NotNull(message = "是否启用lowlevel不能为空") + @Range(min = 1, max = 2, message = "是否启用lowlevel只能是1禁用 2启用") + private Byte apiType; + + private Integer consumeTimeout = 1000; + + private Integer errorRetryTimes = 3; + private List retryIntervals = Lists.newArrayList(50, 100, 150); + + @Range(min = 1, max = 3, message = "消息类型 1Json 2Text 3Bytes") + private Byte msgType = ConsumeSubscriptionMsgType.BINARY.getIndex(); + + @Range(min = 0, max = 1, message = "是否启用Groovy只能是 0启用 1禁用") + private Byte enableGroovy = IsEnable.DISABLE.getIndex(); + + @Range(min = 0, max = 1, message = "是否启用Transit只能是 0启用 1禁用") + private Byte enableTransit = IsEnable.DISABLE.getIndex(); + private String groovy; + private Map transit; + + @Range(min = 0, max = 1, message = "是否启用顺序消费只能是 0启用 1禁用") + private Byte enableOrder = IsEnable.DISABLE.getIndex(); + private String orderKey; + + @Range(min = 1, max = 3, message = "消费类型只能是 1SDK 2HTTP 3直写第三方组件") + private Byte consumeType = ConsumeSubscriptionConsumeType.SDK.getIndex(); + private List urls; + + private Byte httpMethod; + private Map httpHeaders; + private Map httpQueryParams; + + private Byte msgPushType; + private String httpToken; + private Integer pushMaxConcurrency; + + private Byte bigDataType; + private String bigDataConfig; + + private Map extraParams; + + private Map operationParams; + + private Boolean useNonBlockAsync = false; + + public Long getSubId() { + return subId; + } + + public void setSubId(Long subId) { + this.subId = subId; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public Double getMaxTps() { + return maxTps; + } + + public void setMaxTps(Double maxTps) { + this.maxTps = maxTps; + } + + public Byte getAlarmType() { + return alarmType; + } + + public void setAlarmType(Byte alarmType) { + this.alarmType = alarmType; + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public Integer getAlarmMsgLag() { + return alarmMsgLag; + } + + public void setAlarmMsgLag(Integer alarmMsgLag) { + this.alarmMsgLag = alarmMsgLag; + } + + public Integer getAlarmDelayTime() { + return alarmDelayTime; + } + + public void setAlarmDelayTime(Integer alarmDelayTime) { + this.alarmDelayTime = alarmDelayTime; + } + + public Byte getApiType() { + return apiType; + } + + public void setApiType(Byte apiType) { + this.apiType = apiType; + } + + public Integer getConsumeTimeout() { + return consumeTimeout; + } + + public void setConsumeTimeout(Integer consumeTimeout) { + this.consumeTimeout = consumeTimeout; + } + + public Integer getErrorRetryTimes() { + return errorRetryTimes; + } + + public void setErrorRetryTimes(Integer errorRetryTimes) { + this.errorRetryTimes = errorRetryTimes; + } + + public List getRetryIntervals() { + return retryIntervals; + } + + public void setRetryIntervals(List retryIntervals) { + this.retryIntervals = retryIntervals; + } + + public Byte getMsgType() { + return msgType; + } + + public void setMsgType(Byte msgType) { + this.msgType = msgType; + } + + public Byte getEnableGroovy() { + return enableGroovy; + } + + public void setEnableGroovy(Byte enableGroovy) { + this.enableGroovy = enableGroovy; + } + + public Byte getEnableTransit() { + return enableTransit; + } + + public void setEnableTransit(Byte enableTransit) { + this.enableTransit = enableTransit; + } + + public String getGroovy() { + return groovy; + } + + public void setGroovy(String groovy) { + this.groovy = groovy; + } + + public Map getTransit() { + return transit; + } + + public void setTransit(Map transit) { + this.transit = transit; + } + + public Byte getEnableOrder() { + return enableOrder; + } + + public void setEnableOrder(Byte enableOrder) { + this.enableOrder = enableOrder; + } + + public String getOrderKey() { + return orderKey; + } + + public void setOrderKey(String orderKey) { + this.orderKey = orderKey; + } + + public Byte getConsumeType() { + return consumeType; + } + + public void setConsumeType(Byte consumeType) { + this.consumeType = consumeType; + } + + public List getUrls() { + return urls; + } + + public void setUrls(List urls) { + this.urls = urls; + } + + public Byte getHttpMethod() { + return httpMethod; + } + + public void setHttpMethod(Byte httpMethod) { + this.httpMethod = httpMethod; + } + + public Map getHttpHeaders() { + return httpHeaders; + } + + public void setHttpHeaders(Map httpHeaders) { + this.httpHeaders = httpHeaders; + } + + public Map getHttpQueryParams() { + return httpQueryParams; + } + + public void setHttpQueryParams(Map httpQueryParams) { + this.httpQueryParams = httpQueryParams; + } + + public Byte getMsgPushType() { + return msgPushType; + } + + public void setMsgPushType(Byte msgPushType) { + this.msgPushType = msgPushType; + } + + public String getHttpToken() { + return httpToken; + } + + public void setHttpToken(String httpToken) { + this.httpToken = httpToken; + } + + public Integer getPushMaxConcurrency() { + return pushMaxConcurrency; + } + + public void setPushMaxConcurrency(Integer pushMaxConcurrency) { + this.pushMaxConcurrency = pushMaxConcurrency; + } + + public Byte getBigDataType() { + return bigDataType; + } + + public void setBigDataType(Byte bigDataType) { + this.bigDataType = bigDataType; + } + + public String getBigDataConfig() { + return bigDataConfig; + } + + public void setBigDataConfig(String bigDataConfig) { + this.bigDataConfig = bigDataConfig; + } + + public Map getExtraParams() { + return extraParams; + } + + public void setExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public Byte getPressureTraffic() { + return pressureTraffic; + } + + public void setPressureTraffic(Byte pressureTraffic) { + this.pressureTraffic = pressureTraffic; + } + + public Map getOperationParams() { + return operationParams; + } + + public void setOperationParams(Map operationParams) { + this.operationParams = operationParams; + } + + @JSONField(serialize = false) + public boolean isUseNonBlockAsync() { + return useNonBlockAsync; + } + + public void setUseNonBlockAsync(boolean useNonBlockAsync) { + this.useNonBlockAsync = useNonBlockAsync; + } + + @JSONField(serialize = false) + public boolean isModify() { + return subId != null && subId > 0; + } + + public ConsumeSubscription buildConsumeSubscription() { + ConsumeSubscription subscription = new ConsumeSubscription(); + BeanUtils.copyProperties(this, subscription); + subscription.setId(this.getSubId()); + subscription.setSubExtraParams(this.getExtraParams()); + subscription.setSubActions(this.buildActions()); + subscription.setSubHttpHeaders(this.getHttpHeaders()); + subscription.setSubHttpQueryParams(this.getHttpQueryParams()); + subscription.setSubRetryIntervals(this.getRetryIntervals()); + subscription.setSubTransit(this.getTransit()); + subscription.setSubUrls(this.getUrls()); + + return subscription; + } + + private void validate() { + if (msgType != null && (msgType == ConsumeSubscriptionMsgType.TEXT.getIndex() || msgType == ConsumeSubscriptionMsgType.BINARY.getIndex()) && IsEnable.isEnable(enableOrder) && StringUtils.isNotEmpty(orderKey) && !ORDER_BY_QID_KEY.equalsIgnoreCase(orderKey) && !ORDER_BY_MSGKEY_KEY.equalsIgnoreCase(orderKey)) { + throw new RuntimeException("JsonPath顺序消费只能消息格式为Json类型的使用"); + } + } + + /** + * 规则:MsgType=JSON, Transit、GroovyFilter、FormParams2、QueryParams时,Json action开头 + * MsgType != JSON, 以Async开头, + * + * @return + */ + public List buildActions() { + validate(); + + List actionList = Lists.newArrayList(); + + if (this.getApiType() == ConsumeSubscriptionApiType.LOW_LEVEL.getIndex()) { + actionList.add(Actions.LowLevel); + actionList.add(Actions.PULL_SERVER); + return actionList; + } + + if (containsHdfsAction()) { + actionList.add(Actions.ASYNC); + actionList.add(Actions.HDFS); + return actionList; + } + + if (containsHbaseAction()) { + actionList.add(Actions.ASYNC); + actionList.add(Actions.HBASE); + return actionList; + } + + //头部顺序 + if (containsJsonAction()) { + if (actionIsEnableOrderByJson()) { + actionList.add(Actions.JSON); + actionList.add(Actions.ASYNC); + } else { + actionList.add(Actions.ASYNC); + actionList.add(Actions.JSON); + } + } else { + actionList.add(Actions.ASYNC); + } + + //中部顺序 + if (containsActionOrderTransitGroovy()) { + if (containsTransitAction()) { + actionList.add(Actions.TRANSIT); + } + if (containsGroovyAction()) { + actionList.add(Actions.GROOVY); + } + } else { + if (containsGroovyAction()) { + actionList.add(Actions.GROOVY); + } + if (containsTransitAction()) { + actionList.add(Actions.TRANSIT); + } + } + + + //结尾顺序 + if (containsRedisAction()) { + actionList.add(Actions.REDIS); + } else if (containsPullServerAction()) { + actionList.add(Actions.PULL_SERVER); + } else if (containsHttpAction()) { + if (MapUtils.isNotEmpty(this.getHttpQueryParams())) { + actionList.add(Actions.QueryParams); + } + if (containsFormParamsAction()) { + actionList.add(Actions.FormParams); + } else if (containsFormParams2Action()) { + actionList.add(Actions.FormParams2); + } + + actionList.add(Actions.ASYNC_HTTP); + } + + if (containsForceSyncFlag() && containsGroovyAction() && actionList.indexOf(Actions.ASYNC) > -1) { + actionList.remove(Actions.ASYNC); + } + + int index; + if (isUseNonBlockAsync() && (index = actionList.indexOf(Actions.ASYNC)) > -1) { + actionList.set(index, Actions.NONBLOCKASYNC); + } + + return actionList; + } + + private boolean containsForceSyncFlag() { + return MapUtils.isNotEmpty(getExtraParams()) && getExtraParams().containsKey(SUB_FLAG_ACTION_IGNORE_ASYNC) && "true".equalsIgnoreCase(getExtraParams().get(SUB_FLAG_ACTION_IGNORE_ASYNC)); + } + + public static final String SUB_FLAG_ACTION_REDIS = "ACTION_REDIS"; + public static final String SUB_FLAG_ACTION_ORDER_TRANSIT_GROOVY = "ACTION_ORDER_TRANSIT_GROOVY"; + public static final String SUB_FLAG_ACTION_FORMPARAMS_HTTP_IGNORE_JSON = "FORMPARAMS_HTTP_IGNORE_JSON"; + public static final String SUB_FLAG_ACTION_FORMPARAMS2_HTTP_IGNORE_JSON = "FORMPARAMS2_HTTP_IGNORE_JSON"; + + public static final String ORDER_BY_QID_KEY = "QID"; + public static final String ORDER_BY_MSGKEY_KEY = "KEY"; + + public static final String SUB_FLAG_EXTREA_PARAMS_MQ_CLUSTER = "SUB_MQCLUSTER"; + public static final String SUB_FLAG_ACTION_IGNORE_ASYNC = "forceSync"; + + private boolean containsFormParams2Action() { + return this.getMsgPushType() != null && this.getMsgPushType() == ConsumeSubscriptionMsgPushType.FORM_PARAMS2.getIndex(); + } + + private boolean containsFormParamsAction() { + return this.getMsgPushType() != null && this.getMsgPushType() == ConsumeSubscriptionMsgPushType.FORM_PARAMS.getIndex(); + } + + private boolean containsPullServerAction() { + return this.getConsumeType() != null && this.getConsumeType() == ConsumeSubscriptionConsumeType.SDK.getIndex(); + } + + private boolean containsHttpAction() { + return this.getConsumeType() != null && this.getConsumeType() == ConsumeSubscriptionConsumeType.HTTP.getIndex(); + } + + private boolean containsHdfsAction() { + return this.getConsumeType() != null && this.getConsumeType() == ConsumeSubscriptionConsumeType.BIG_DATA.getIndex() && this.getBigDataType() != null && this.getBigDataType() == ConsumeSubscriptionBigDataType.HDFS.getIndex(); + } + + private boolean containsHbaseAction() { + return this.getConsumeType() != null && this.getConsumeType() == ConsumeSubscriptionConsumeType.BIG_DATA.getIndex() && this.getBigDataType() != null && this.getBigDataType() == ConsumeSubscriptionBigDataType.HBASE.getIndex(); + } + + private boolean containsActionOrderTransitGroovy() { + return MapUtils.isNotEmpty(this.getExtraParams()) && "true".equalsIgnoreCase(this.getExtraParams().get(SUB_FLAG_ACTION_ORDER_TRANSIT_GROOVY)); + } + + private boolean containsRedisAction() { + return MapUtils.isNotEmpty(this.getExtraParams()) && "true".equalsIgnoreCase(this.getExtraParams().get(SUB_FLAG_ACTION_REDIS)); + } + + private boolean containsFormHttpIgnoreJson() { + return MapUtils.isNotEmpty(this.getExtraParams()) && "true".equalsIgnoreCase(this.getExtraParams().get(SUB_FLAG_ACTION_FORMPARAMS_HTTP_IGNORE_JSON)); + } + + private boolean containsForm2HttpIgnoreJson() { + return MapUtils.isNotEmpty(this.getExtraParams()) && "true".equalsIgnoreCase(this.getExtraParams().get(SUB_FLAG_ACTION_FORMPARAMS2_HTTP_IGNORE_JSON)); + } + + private boolean formParamsHttpIgnoreJson() { + return containsFormParamsAction() && containsFormHttpIgnoreJson(); + } + + private boolean formParams2HttpIgnoreJson() { + return containsFormParams2Action() && containsForm2HttpIgnoreJson(); + } + + private boolean formParamsContainsJson() { + return containsHttpAction() && containsFormParamsAction() && !formParamsHttpIgnoreJson(); + } + + private boolean formParams2ContainsJson() { + return containsHttpAction() && containsFormParams2Action() && !formParams2HttpIgnoreJson(); + } + + private boolean containsJsonAction() { + return actionIsEnableOrderByJson() || containsGroovyAction() || containsTransitAction() || containsRedisAction() + || ( + (formParamsContainsJson() || formParams2ContainsJson() || (MapUtils.isNotEmpty(this.getHttpQueryParams()))) + && msgType == ConsumeSubscriptionMsgType.JSON.getIndex() + ); + } + + private boolean actionIsEnableOrderByJson() { + return IsEnable.isEnable(this.getEnableOrder()) && StringUtils.isNotEmpty(this.getOrderKey()) && !ORDER_BY_QID_KEY.equalsIgnoreCase(orderKey) && !ORDER_BY_MSGKEY_KEY.equalsIgnoreCase(this.getOrderKey()); + } + + private boolean containsTransitAction() { + return IsEnable.isEnable(this.getEnableTransit()) && MapUtils.isNotEmpty(this.getTransit()); + } + + private boolean containsGroovyAction() { + return IsEnable.isEnable(this.getEnableGroovy()) && StringUtils.isNotEmpty(this.getGroovy()); + } + + @Override + public String toString() { + return "ConsumeSubscriptionOrderBo{" + + "subId=" + subId + + ", groupId=" + groupId + + ", groupName='" + groupName + '\'' + + ", topicId=" + topicId + + ", topicName='" + topicName + '\'' + + ", maxTps=" + maxTps + + ", pressureTraffic=" + pressureTraffic + + ", alarmType=" + alarmType + + ", alarmIsEnable=" + alarmIsEnable + + ", alarmMsgLag=" + alarmMsgLag + + ", alarmDelayTime=" + alarmDelayTime + + ", apiType=" + apiType + + ", consumeTimeout=" + consumeTimeout + + ", errorRetryTimes=" + errorRetryTimes + + ", retryIntervals=" + retryIntervals + + ", msgType=" + msgType + + ", enableGroovy=" + enableGroovy + + ", enableTransit=" + enableTransit + + ", groovy='" + groovy + '\'' + + ", transit=" + transit + + ", enableOrder=" + enableOrder + + ", orderKey='" + orderKey + '\'' + + ", consumeType=" + consumeType + + ", urls=" + urls + + ", httpMethod=" + httpMethod + + ", httpHeaders=" + httpHeaders + + ", httpQueryParams=" + httpQueryParams + + ", msgPushType=" + msgPushType + + ", httpToken='" + httpToken + '\'' + + ", pushMaxConcurrency=" + pushMaxConcurrency + + ", bigDataType=" + bigDataType + + ", bigDataConfig='" + bigDataConfig + '\'' + + ", extraParams=" + extraParams + + ", operationParams=" + operationParams + + ", useNonBlockAsync=" + useNonBlockAsync + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionOrderBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionOrderBo.java new file mode 100644 index 0000000..97d6d08 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/ConsumeSubscriptionOrderBo.java @@ -0,0 +1,33 @@ +package com.didi.carrera.console.web.controller.bo; + +import com.didi.carrera.console.dao.model.ConsumeSubscription; +import org.hibernate.validator.constraints.NotEmpty; + +import java.util.Map; + + +public class ConsumeSubscriptionOrderBo extends ConsumeSubscriptionBaseBo { + + @NotEmpty(message = "集群不能为空") + private Map clusters; + + public Map getClusters() { + return clusters; + } + + public void setClusters(Map clusters) { + this.clusters = clusters; + } + + @Override + public ConsumeSubscription buildConsumeSubscription() { + return super.buildConsumeSubscription(); + } + + @Override + public String toString() { + return "ConsumeSubscriptionOrderBo{" + + "clusters=" + clusters + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/MqServerBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/MqServerBo.java new file mode 100644 index 0000000..0a0f6af --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/MqServerBo.java @@ -0,0 +1,53 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.NotNull; + +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.Range; + + +public class MqServerBo { + + @NotBlank(message = "集群名称不能为空") + private String name; + + @NotNull(message = "集群类型不能为空") + @Range(min = 0, max = 2, message = "集群类型只能为 0:rocketmq 1:kafka 2:virtual kafka") + private Byte type; + + @NotBlank(message = "集群地址不能为空") + private String addr; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Byte getType() { + return type; + } + + public void setType(Byte type) { + this.type = type; + } + + public String getAddr() { + return addr; + } + + public void setAddr(String addr) { + this.addr = addr; + } + + @Override + public String toString() { + return "MqServerBo{" + + "name='" + name + '\'' + + ", type=" + type + + ", addr='" + addr + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/NodeBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/NodeBo.java new file mode 100644 index 0000000..14f8d49 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/NodeBo.java @@ -0,0 +1,64 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.NotNull; + +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.Range; + + +public class NodeBo extends BaseBo { + + @NotNull(message = "集群ID不能为空") + private Long clusterid; + + @NotNull(message = "节点类型不能为空") + @Range(min = 0, max = 9, message = "节点类型只能为0-9") + private Byte nodetype; + + @NotBlank(message = "地址不能为空") + private String host; + + private Long modelid = 1L; + + public Long getClusterid() { + return clusterid; + } + + public void setClusterid(Long clusterid) { + this.clusterid = clusterid; + } + + public Byte getNodetype() { + return nodetype; + } + + public void setNodetype(Byte nodetype) { + this.nodetype = nodetype; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public Long getModelid() { + return modelid; + } + + public void setModelid(Long modelid) { + this.modelid = modelid; + } + + @Override + public String toString() { + return "NodeBo{" + + "clusterid=" + clusterid + + ", nodetype=" + nodetype + + ", host='" + host + '\'' + + ", modelid=" + modelid + + "} " + super.toString(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicConfBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicConfBo.java new file mode 100644 index 0000000..cd90970 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicConfBo.java @@ -0,0 +1,130 @@ +package com.didi.carrera.console.web.controller.bo; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.util.Map; + +import com.didi.carrera.console.dao.model.TopicConf; +import org.hibernate.validator.constraints.NotBlank; +import org.springframework.beans.BeanUtils; + + +public class TopicConfBo { + + @NotNull(message = "请选择集群配置信息") + private Long clusterId; + + @NotBlank(message = "请选择集群配置信息") + private String clusterName; + + private Long serverIdcId; + private String serverIdcName; + + private Map clientIdcMap; + + @NotNull(message = "预估最大消息体大小不能为空") + @Min(value = 1, message = "预估最大消息体大小必须大于0") + private Integer msgMaxSize; + + @NotNull(message = "预估平均消息体大小不能为空") + @Min(value = 1, message = "预估平均消息体大小必须大于0") + private Integer msgAvgSize; + + @NotNull(message = "限流不能为空") + @Min(value = 1, message = "限流必须大于0") + private Integer produceTps; + + private Map operationParams; + + public Long getClusterId() { + return clusterId; + } + + public void setClusterId(Long clusterId) { + this.clusterId = clusterId; + } + + public String getClusterName() { + return clusterName; + } + + public void setClusterName(String clusterName) { + this.clusterName = clusterName; + } + + public Integer getMsgMaxSize() { + return msgMaxSize; + } + + public void setMsgMaxSize(Integer msgMaxSize) { + this.msgMaxSize = msgMaxSize; + } + + public Integer getMsgAvgSize() { + return msgAvgSize; + } + + public void setMsgAvgSize(Integer msgAvgSize) { + this.msgAvgSize = msgAvgSize; + } + + public Integer getProduceTps() { + return produceTps; + } + + public void setProduceTps(Integer produceTps) { + this.produceTps = produceTps; + } + + public Map getOperationParams() { + return operationParams; + } + + public void setOperationParams(Map operationParams) { + this.operationParams = operationParams; + } + + public Long getServerIdcId() { + return serverIdcId; + } + + public void setServerIdcId(Long serverIdcId) { + this.serverIdcId = serverIdcId; + } + + public String getServerIdcName() { + return serverIdcName; + } + + public void setServerIdcName(String serverIdcName) { + this.serverIdcName = serverIdcName; + } + + public Map getClientIdcMap() { + return clientIdcMap; + } + + public void setClientIdcMap(Map clientIdcMap) { + this.clientIdcMap = clientIdcMap; + } + + public TopicConf buildTopicConf() { + TopicConf topicConf = new TopicConf(); + BeanUtils.copyProperties(this, topicConf); + topicConf.setTopicConfClientIdc(clientIdcMap); + + return topicConf; + } + + @Override + public String toString() { + return "TopicConfBo{" + + "clusterId=" + clusterId + + ", clusterName='" + clusterName + '\'' + + ", msgMaxSize=" + msgMaxSize + + ", msgAvgSize=" + msgAvgSize + + ", produceTps=" + produceTps + + ", operationParams=" + operationParams + + '}'; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicOrderBo.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicOrderBo.java new file mode 100644 index 0000000..4af66eb --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/bo/TopicOrderBo.java @@ -0,0 +1,334 @@ +package com.didi.carrera.console.web.controller.bo; + +import com.alibaba.fastjson.annotation.JSONField; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.dao.dict.IsEnable; +import com.didi.carrera.console.dao.model.Topic; +import com.didi.carrera.console.dao.model.TopicConf; +import com.didi.carrera.console.dao.model.custom.TopicConfConfig; +import com.didi.carrera.console.dao.model.custom.TopicConfig; +import com.didi.carrera.console.web.controller.validator.AnotherFieldEqualsSpecifiedValue; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections.MapUtils; +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.NotEmpty; +import org.hibernate.validator.constraints.Range; +import org.springframework.beans.BeanUtils; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +@AnotherFieldEqualsSpecifiedValue.List({ + @AnotherFieldEqualsSpecifiedValue(fieldName = "enableSchemaVerify", fieldValue = "0", dependFieldName = "schema", message = "schema不能为空") +}) +public class TopicOrderBo extends BaseOrderBo { + + @NotNull(message = "topicId不能为空") + private Long topicId; + + @NotBlank(message = "Topic名称不能为空") + @Length(min = 3, max = 128, message = "Topic长度必须3-128个字符") + @Pattern(regexp = "[0-9a-zA-Z_\\-]+", message = "Topic名称只能输入数字、大小写字母、下划线、减号") + private String topicName; + + @NotBlank(message = "分摊方不能为空") + private String service; + + @NotBlank(message = "部门不能为空") + private String department; + + @NotBlank(message = "负责RD不能为空") + private String contacters; + + private String schema; + + private List alarmGroup; + + @NotNull(message = "topic描述信息不能为空") + private String description; + + @Range(min = 0, max = 1, message = "启用报警只能为0或1") + private Byte alarmIsEnable = IsEnable.ENABLE.getIndex(); + + @NotNull(message = "延时Topic设置不能为空") + private Byte delayTopic; + + private Map extraParams; + + private Byte enableSchemaVerify = IsEnable.DISABLE.getIndex(); + + private Map operationParams; + + @Valid + @NotEmpty(message = "请选择集群配置信息") + private List conf; + + private Byte defaultPass = DefaultPassType.CONDITION_PASS.getIndex(); + + @NotNull(message = "生产模式不能为空") + @Range(min = 0, max = 1, message = "生产模式只能为同机房生产或其他") + private Byte produceMode; + + public Long getTopicId() { + return topicId; + } + + public void setTopicId(Long topicId) { + this.topicId = topicId; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getContacters() { + return contacters; + } + + public void setContacters(String contacters) { + this.contacters = contacters; + } + + public String getSchema() { + return schema; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public List getAlarmGroup() { + return alarmGroup; + } + + public void setAlarmGroup(List alarmGroup) { + this.alarmGroup = alarmGroup; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Map getExtraParams() { + return extraParams; + } + + public void setExtraParams(Map extraParams) { + this.extraParams = extraParams; + } + + public List getConf() { + return conf; + } + + public void setConf(List conf) { + this.conf = conf; + } + + public String getService() { + return service; + } + + public void setService(String service) { + this.service = service; + } + + public Byte getDelayTopic() { + return delayTopic; + } + + public void setDelayTopic(Byte delayTopic) { + this.delayTopic = delayTopic; + } + + public Byte getAlarmIsEnable() { + return alarmIsEnable; + } + + public void setAlarmIsEnable(Byte alarmIsEnable) { + this.alarmIsEnable = alarmIsEnable; + } + + public Byte getDefaultPass() { + return defaultPass; + } + + public void setDefaultPass(Byte defaultPass) { + this.defaultPass = defaultPass; + } + + public Byte getEnableSchemaVerify() { + return enableSchemaVerify; + } + + public void setEnableSchemaVerify(Byte enableSchemaVerify) { + this.enableSchemaVerify = enableSchemaVerify; + } + + @JSONField(serialize = false) + public boolean isModify() { + return topicId != null && topicId > 0; + } + + public Map getOperationParams() { + return operationParams; + } + + public void setOperationParams(Map operationParams) { + this.operationParams = operationParams; + } + + public Byte getProduceMode() { + return produceMode; + } + + public void setProduceMode(Byte produceMode) { + this.produceMode = produceMode; + } + + public Topic buildTopic() { + Topic topic = new Topic(); + BeanUtils.copyProperties(this, topic); + topic.setId(this.getTopicId()); + topic.setTopicAlarmGroup(this.getAlarmGroup()); + topic.setTopicExtraParams(this.getExtraParams()); + topic.setTopicSchema(this.getSchema()); + + String contacters = getContacters(); + if (!";".equals(contacters.substring(contacters.length() - 1))) { + setContacters(getContacters() + ";"); + topic.setContacters(getContacters()); + } + + return topic; + } + + public static TopicOrderBo buildTopicOrderBo(Topic topic, List confs) { + TopicOrderBo topicOrderBo = new TopicOrderBo<>(); + BeanUtils.copyProperties(topic, topicOrderBo); + topicOrderBo.setTopicId(topic.getId()); + topicOrderBo.setAlarmGroup(topic.getTopicAlarmGroup()); + topicOrderBo.setExtraParams(topic.getTopicExtraParams()); + topicOrderBo.setSchema(topic.getTopicSchema()); + topicOrderBo.setDefaultPass(DefaultPassType.CONDITION_PASS.getIndex()); + // operationParams + if (MapUtils.isEmpty(topicOrderBo.getOperationParams())) { + topicOrderBo.setOperationParams(Maps.newHashMap()); + } + TopicConfig config = topic.getTopicConfig(); + topicOrderBo.getOperationParams().put(TopicConfig.key_autoBatch, String.valueOf(config.isAutoBatch())); + topicOrderBo.getOperationParams().put(TopicConfig.key_useCache, String.valueOf(config.isUseCache())); + topicOrderBo.getOperationParams().put(TopicConfig.key_compressionType, String.valueOf(config.getCompressionType())); + + List conf = Lists.newArrayListWithCapacity(confs.size()); + confs.forEach(c -> { + AcceptTopicConfBo acceptTopicConfBo = new AcceptTopicConfBo(); + BeanUtils.copyProperties(c, acceptTopicConfBo); + acceptTopicConfBo.setClientIdcMap(c.getTopicConfClientIdc()); + // operationParams + if (MapUtils.isEmpty(acceptTopicConfBo.getOperationParams())) { + acceptTopicConfBo.setOperationParams(Maps.newHashMap()); + } + TopicConfConfig conConfig = c.getTopicConfConfig(); + if (conConfig == null || MapUtils.isEmpty(conConfig.getProxies())) { + acceptTopicConfBo.getOperationParams().put(TopicConfConfig.key_proxies, ""); + } else { + acceptTopicConfBo.getOperationParams().put(TopicConfConfig.key_proxies, FastJsonUtils.toJson(conConfig.getProxies())); + } + conf.add(acceptTopicConfBo); + }); + topicOrderBo.setConf(conf); + return topicOrderBo; + } + + public List buildTopicConf() { + List list = Lists.newArrayListWithCapacity(this.getConf().size()); + this.getConf().forEach(conf -> { + TopicConf topicConf = conf.buildTopicConf(); + topicConf.setTopicId(this.getTopicId()); + topicConf.setTopicName(this.getTopicName()); + list.add(topicConf); + }); + + return list; + } + + @Override + public String toString() { + return "TopicOrderBo{" + + "topicId=" + topicId + + ", topicName='" + topicName + '\'' + + ", service='" + service + '\'' + + ", department='" + department + '\'' + + ", contacters='" + contacters + '\'' + + ", schema='" + schema + '\'' + + ", alarmGroup=" + alarmGroup + + ", description='" + description + '\'' + + ", alarmIsEnable=" + alarmIsEnable + + ", delayTopic=" + delayTopic + + ", extraParams=" + extraParams + + ", enableSchemaVerify=" + enableSchemaVerify + + ", operationParams=" + operationParams + + ", conf=" + conf + + ", defaultPass=" + defaultPass + + ", produceMode=" + produceMode + + "} " + super.toString(); + } + + public enum DefaultPassType { + + PASS((byte) 0, "直接自动审批通过"), + CONDITION_PASS((byte) 1, "符合条件自动审批通过"), + REJECT((byte) 2, "必须人工审核"); + + private byte index; + + private String name; + + DefaultPassType(byte index, String name) { + this.index = index; + this.name = name; + } + + public byte getIndex() { + return this.index; + } + + public String getName() { + return this.name; + } + + public static DefaultPassType getByIndex(byte index) { + List all = Arrays.asList(values()); + for (DefaultPassType level : all) { + if (level.getIndex() == index) { + return level; + } + } + return null; + } + + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeGroupController.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeGroupController.java new file mode 100644 index 0000000..dab110a --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeGroupController.java @@ -0,0 +1,78 @@ +package com.didi.carrera.console.web.controller.console; + + +import com.didi.carrera.console.service.ConsumeGroupService; +import com.didi.carrera.console.web.AbstractBaseController; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupBo; +import com.didi.carrera.console.web.controller.bo.ConsumeGroupResetOffsetBo; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.validation.Valid; + + +@Controller +@RequestMapping("/api/console/group") +public class ConsumeGroupController extends AbstractBaseController { + + @Resource(name = "didiConsumeGroupServiceImpl") + private ConsumeGroupService consumeGroupService; + + @ResponseBody + @RequestMapping(value = {"/listAll"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listAll(@RequestParam String user, String text, @RequestParam Integer curPage, @RequestParam Integer pageSize) { + return consumeGroupService.findAll(user, text, curPage, pageSize); + } + + @ResponseBody + @RequestMapping(value = {"/listAllWithoutPage"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listAllWithoutPage(@RequestParam String user) { + return consumeGroupService.findAllWithoutPage(user); + } + + @ResponseBody + @RequestMapping(value = {"/create"}, method = {RequestMethod.POST}) + public ConsoleBaseResponse create(@Valid @RequestBody ConsumeGroupBo groupBo, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + String msg = getBindingResultErrorInfo(bindingResult); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, msg); + } + + return consumeGroupService.create(groupBo); + } + + @ResponseBody + @RequestMapping(value = {"/changeState"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse changeState(@RequestParam String user, @RequestParam Long groupId, @RequestParam Integer state) throws Exception { + return consumeGroupService.changeState(user, groupId, state); + } + + @ResponseBody + @RequestMapping(value = {"/consumeState"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse consumeState(@RequestParam String user, @RequestParam Long groupId, @RequestParam(required = false) Long topicId, @RequestParam(required = false) Long clusterId) { + return consumeGroupService.getConsumeState(user, groupId, topicId, clusterId); + } + + @ResponseBody + @RequestMapping(value = {"/consumeState/searchItemList"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse consumeStateSearchItemList(@RequestParam String user, @RequestParam Long groupId) { + return consumeGroupService.findSearchItem(user, groupId); + } + + @ResponseBody + @RequestMapping(value = {"/resetOffset"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse resetOffset(@Valid ConsumeGroupResetOffsetBo offsetBo, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + String msg = getBindingResultErrorInfo(bindingResult); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, msg); + } + return consumeGroupService.resetOffset(offsetBo); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeSubscriptionController.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeSubscriptionController.java new file mode 100644 index 0000000..2756c38 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/ConsumeSubscriptionController.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.web.controller.console; + + +import com.didi.carrera.console.service.ConsumeSubscriptionService; +import com.didi.carrera.console.web.AbstractBaseController; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; + + +@Controller +@RequestMapping("/api/console/sub") +public class ConsumeSubscriptionController extends AbstractBaseController { + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + @ResponseBody + @RequestMapping(value = {"/list"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse list(@RequestParam String user, String text, Long clusterId, Long groupId, Integer consumeType, Integer state, @RequestParam Integer curPage, @RequestParam Integer pageSize) { + return consumeSubscriptionService.findAll(user, text, clusterId, groupId, consumeType, state, curPage, pageSize); + } + + @ResponseBody + @RequestMapping(value = {"/findById"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse findByGroupTopicCluster(@RequestParam String user, @RequestParam Long groupId, @RequestParam Long topicId, @RequestParam Long clusterId) { + return consumeSubscriptionService.findByGroupClusterTopicId(groupId, clusterId, topicId); + } + + @ResponseBody + @RequestMapping(value = {"/listMsgPushType"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listMsgPushType(@RequestParam String user) { + return consumeSubscriptionService.findMsgPushType(user); + } + + @ResponseBody + @RequestMapping(value = {"/changeState"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse changeState(@RequestParam String user, @RequestParam Long subId, @RequestParam Integer state) throws Exception { + return consumeSubscriptionService.changeState(user, subId, state); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/TopicController.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/TopicController.java new file mode 100644 index 0000000..edd5de1 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/console/TopicController.java @@ -0,0 +1,58 @@ +package com.didi.carrera.console.web.controller.console; + + +import com.didi.carrera.console.service.TopicService; +import com.didi.carrera.console.web.AbstractBaseController; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; + + +@Controller +@RequestMapping("/api/console/topic") +public class TopicController extends AbstractBaseController { + + @Resource(name = "didiTopicServiceImpl") + private TopicService topicService; + + @ResponseBody + @RequestMapping(value = {"/listAll"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listAll(@RequestParam(defaultValue = "0") Long clusterId, String text, @RequestParam String user, @RequestParam Integer curPage, @RequestParam Integer pageSize) { + return topicService.findAll(clusterId, text, user, curPage, pageSize); + } + + @ResponseBody + @RequestMapping(value = {"/listAllWithoutPage"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listAllWithoutPage(@RequestParam String user) { + return topicService.findAllSimple(user); + } + + @ResponseBody + @RequestMapping(value = {"/findById"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse findById(@RequestParam Long topicId, @RequestParam String user) { + return topicService.findVoById(topicId); + } + + @ResponseBody + @RequestMapping(value = {"/getState"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse getState(@RequestParam String user, @RequestParam Long topicId, @RequestParam Long clusterId) { + return topicService.findState(user, topicId, clusterId); + } + + @ResponseBody + @RequestMapping(value = {"/getMessage"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse getMessage(@RequestParam String user, @RequestParam Long topicId, @RequestParam Long clusterId) { + return topicService.findMessage(user, topicId, clusterId); + } + + @ResponseBody + @RequestMapping(value = {"/listGroup"}, method = {RequestMethod.GET, RequestMethod.POST}) + public ConsoleBaseResponse listGroup(@RequestParam String user, @RequestParam Long topicId, @RequestParam Long clusterId) { + return topicService.findGroup(user, topicId, clusterId); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/odin/InternalController.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/odin/InternalController.java new file mode 100644 index 0000000..5fba26e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/odin/InternalController.java @@ -0,0 +1,238 @@ +package com.didi.carrera.console.web.controller.odin; + + +import com.didi.carrera.console.config.ConsoleConfig; +import com.didi.carrera.console.service.ClusterService; +import com.didi.carrera.console.service.ConsumeGroupService; +import com.didi.carrera.console.service.ConsumeSubscriptionService; +import com.didi.carrera.console.service.TopicService; +import com.didi.carrera.console.service.ZKV4ConfigService; +import com.didi.carrera.console.web.AbstractBaseController; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import com.didi.carrera.console.web.controller.bo.AcceptTopicConfBo; +import com.didi.carrera.console.web.controller.bo.ConsumeSubscriptionOrderBo; +import com.didi.carrera.console.web.controller.bo.TopicOrderBo; +import com.didi.carrera.console.web.util.CookieUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + + +@Controller("odinInternalController") +@RequestMapping("/api/odin/internal") +public class InternalController extends AbstractBaseController { + + @Resource(name = "didiTopicServiceImpl") + private TopicService topicService; + + @Resource(name = "didiConsumeGroupServiceImpl") + private ConsumeGroupService consumeGroupService; + + @Resource(name = "didiConsumeSubscriptionServiceImpl") + private ConsumeSubscriptionService consumeSubscriptionService; + + @Autowired + private ZKV4ConfigService zkv4ConfigService; + + @Autowired + private ConsoleConfig consoleConfig; + + public static boolean validate(final String ip) { + String PATTERN = "^((0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)\\.){3}(0|1\\d?\\d?|2[0-4]?\\d?|25[0-5]?|[3-9]\\d?)$"; + return ip.matches(PATTERN); + } + + @ResponseBody + @RequestMapping(value = {"/login"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse login(@RequestParam String username, @RequestParam String password, HttpServletResponse response) { + try { + if (consoleConfig.getCarreraAdminUser().contains(username) + && consoleConfig.getCarreraAdminPassword().contains(password)) { + + response.addCookie(CookieUtil.newCookie()); + return ConsoleBaseResponse.success("success"); + } else { + return ConsoleBaseResponse.success("fail"); + } + } catch (Exception e) { + return ConsoleBaseResponse.success("fail"); + } + } + + @ResponseBody + @RequestMapping(value = {"/logout"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse logout(@RequestParam String username, HttpServletRequest request) { + Cookie[] cookies = request.getCookies(); + if (cookies == null) { + return ConsoleBaseResponse.success(); + } + for (Cookie cookie : cookies) { + CookieUtil.cookies.remove(cookie.getValue()); + } + + return ConsoleBaseResponse.success(); + } + + @ResponseBody + @RequestMapping(value = {"/createTopic"}, method = {RequestMethod.POST}) + public ConsoleBaseResponse createTopic(@Valid @RequestBody TopicOrderBo topicinfo, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + String msg = getBindingResultErrorInfo(bindingResult); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, msg); + } + + return topicService.create(topicinfo); + } + + @ResponseBody + @RequestMapping(value = {"/createSub"}, method = {RequestMethod.POST}) + public ConsoleBaseResponse createSub(@Valid @RequestBody ConsumeSubscriptionOrderBo subBo, BindingResult bindingResult) throws Exception { + if (bindingResult.hasErrors()) { + String msg = getBindingResultErrorInfo(bindingResult); + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, msg); + } + + return consumeSubscriptionService.createConsumeSubscription(subBo); + } + + @ResponseBody + @RequestMapping(value = {"/deleteGroup"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse deleteGroup(@RequestParam String user, @RequestParam Long groupId) throws Exception { + return consumeGroupService.delete(user, groupId); + } + + @ResponseBody + @RequestMapping(value = {"/deleteSub"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse deleteSub(@RequestParam String user, @RequestParam Long subId) throws Exception { + return consumeSubscriptionService.delete(user, subId); + } + + @ResponseBody + @RequestMapping(value = {"/v4/initZkPath"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse initZkPath() throws Exception { + zkv4ConfigService.initZkPath(); + return ConsoleBaseResponse.success(); + } + + @ResponseBody + @RequestMapping(value = {"/v4/initAllZk"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse initAllZk() throws Exception { + zkv4ConfigService.initAllZk(); + return ConsoleBaseResponse.success(); + } + + @ResponseBody + @RequestMapping(value = {"/v4/addPProxy"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse addPProxy(@RequestParam(defaultValue = "ddmq") String cluster, @RequestParam String host) throws Exception { + if (!validate(host)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "invalid host"); + } + return topicService.addPProxy(cluster, host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/addCProxy"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse addCProxy(@RequestParam(defaultValue = "ddmq") String cluster, @RequestParam String host) throws Exception { + if (!validate(host)) { + return ConsoleBaseResponse.error(ConsoleBaseResponse.Status.INVALID_PARAM, "invalid host"); + } + return consumeSubscriptionService.addCProxy(cluster, host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushTopicConfig"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushTopicConfig(@RequestParam String topic) throws Exception { + return zkv4ConfigService.pushTopicConfig(topic); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushGroupConfig"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushGroupConfig(@RequestParam String group) throws Exception { + return zkv4ConfigService.pushGroupConfig(group); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushPProxyConfig"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushPproxyConfig(@RequestParam String host) throws Exception { + return zkv4ConfigService.pushPproxyConfig(host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushCProxyConfig"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushCproxyConfig(@RequestParam String host) throws Exception { + return zkv4ConfigService.pushCproxyConfig(host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushTopicConfigByCluster"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushTopicConfigByCluster(@RequestParam String cluster) throws Exception { + return zkv4ConfigService.pushTopicByCluster(cluster); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushGroupConfigByCluster"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushGroupConfigByCluster(@RequestParam String cluster) throws Exception { + return zkv4ConfigService.pushGroupByCluster(cluster); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushPProxyConfigByCluster"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushPProxyConfigByCluster(@RequestParam String cluster) throws Exception { + return zkv4ConfigService.pushPProxyByCluster(cluster); + } + + @ResponseBody + @RequestMapping(value = {"/v4/pushCProxyConfigByCluster"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse pushCProxyConfigByCluster(@RequestParam String cluster) throws Exception { + return zkv4ConfigService.pushCProxyByCluster(cluster); + } + + @ResponseBody + @RequestMapping(value = {"/v4/addPProxyByTopic"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse addPProxyByTopic(@RequestParam String topic, @RequestParam String cluster, @RequestParam String host) throws Exception { + return topicService.addPProxy(topic, cluster, host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/removePProxy"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse removePProxy(@RequestParam String host) throws Exception { + return topicService.removePProxy(host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/removePProxyByTopic"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse removePProxyByTopic(@RequestParam String topic, @RequestParam String host) throws Exception { + return topicService.removePProxy(topic, host); + } + + + @ResponseBody + @RequestMapping(value = {"/v4/addCProxyByGroup"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse addCProxyByGroup(@RequestParam String group, @RequestParam String cluster, @RequestParam String host) throws Exception { + return consumeSubscriptionService.addCProxy(group, cluster, host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/removeCProxyByGroup"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse removeCProxyByGroup(@RequestParam String group, @RequestParam String host) throws Exception { + return consumeSubscriptionService.removeCProxy(group, host); + } + + @ResponseBody + @RequestMapping(value = {"/v4/removeCProxy"}, method = {RequestMethod.GET}) + public ConsoleBaseResponse removeCProxy(@RequestParam String host) throws Exception { + return consumeSubscriptionService.removeCProxy(host); + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValue.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValue.java new file mode 100644 index 0000000..805ada3 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValue.java @@ -0,0 +1,41 @@ +package com.didi.carrera.console.web.controller.validator; + + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + + +@Target({TYPE, ANNOTATION_TYPE}) +@Retention(RUNTIME) +@Constraint(validatedBy = AnotherFieldEqualsSpecifiedValueValidator.class) +@Documented +public @interface AnotherFieldEqualsSpecifiedValue { + String message() default "{constraints.fieldmatch}"; + + Class[] groups() default {}; + + Class[] payload() default {}; + + String fieldName(); + String fieldValue(); + String dependFieldName(); + + /** + * Defines several @AnotherFieldEqualsSpecifiedValue annotations on the same element + * + * @see AnotherFieldEqualsSpecifiedValue + */ + @Target({TYPE, ANNOTATION_TYPE}) + @Retention(RUNTIME) + @Documented + @interface List { + AnotherFieldEqualsSpecifiedValue[] value(); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValueValidator.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValueValidator.java new file mode 100644 index 0000000..87fd39e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/controller/validator/AnotherFieldEqualsSpecifiedValueValidator.java @@ -0,0 +1,46 @@ +package com.didi.carrera.console.web.controller.validator; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.lang.reflect.InvocationTargetException; + +import org.apache.commons.beanutils.BeanUtils; + + +public class AnotherFieldEqualsSpecifiedValueValidator implements ConstraintValidator { + private String fieldName; + private String expectedFieldValue; + private String dependFieldName; + + @Override + public void initialize(final AnotherFieldEqualsSpecifiedValue constraintAnnotation) { + fieldName = constraintAnnotation.fieldName(); + expectedFieldValue = constraintAnnotation.fieldValue(); + dependFieldName = constraintAnnotation.dependFieldName(); + } + + @Override + public boolean isValid(final Object value, final ConstraintValidatorContext context) { + if (value == null) { + return true; + } + + try { + String fieldValue = BeanUtils.getProperty(value, fieldName); + String dependFieldValue = BeanUtils.getProperty(value, dependFieldName); + + if (expectedFieldValue.equals(fieldValue) && dependFieldValue == null) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()) + .addNode(dependFieldName) + .addConstraintViolation(); + return false; + } + + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) { + throw new RuntimeException(ex); + } + + return true; + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/ConsoleExceptionFilter.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/ConsoleExceptionFilter.java new file mode 100644 index 0000000..67f718f --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/ConsoleExceptionFilter.java @@ -0,0 +1,102 @@ +package com.didi.carrera.console.web.filter; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import com.alibaba.fastjson.JSONException; +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.service.exception.ConvertDataException; +import com.didi.carrera.console.service.exception.MqException; +import com.didi.carrera.console.web.ConsoleBaseResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindException; +import org.springframework.web.util.NestedServletException; + + +public class ConsoleExceptionFilter implements Filter { + + private Logger logger = LoggerFactory.getLogger(this.getClass()); + private Logger accessLogger = LoggerFactory.getLogger("carrera.console.framework.request"); + + /** + * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) + */ + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + /** + * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) + */ + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, + ServletException { + long start = System.currentTimeMillis(); + + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + + RequestContext.start(req, resp); + + if (accessLogger.isInfoEnabled()) { + accessLogger.info("HttpStart: [{}]{}||{}", RequestContext.getUri(), RequestContext.getRequestInfo(), + RequestContext.getRemoteSource()); + } + + try { + chain.doFilter(request, response); + } catch (Exception e) { + logger.error("Filter exception: ", e); + String msg = "数据提交出错,请稍后重试"; + ConsoleBaseResponse.Status status = ConsoleBaseResponse.Status.INVALID_PARAM; + if (NestedServletException.class.isInstance(e)) { + //参数绑定错误异常 + NestedServletException ex = (NestedServletException) e; + Throwable rootCause = ex.getRootCause(); + + if (BindException.class.isInstance(rootCause)) { + msg = "参数校验失败"; + } else if (IllegalArgumentException.class.isInstance(rootCause)) { + msg = rootCause.getMessage(); + } else if (JSONException.class.isInstance(rootCause)) { + msg = "Json 格式错误"; + } else if (MqException.class.isInstance(rootCause)) { + msg = rootCause.getMessage(); + } else if (ConvertDataException.class.isInstance(rootCause)) { + msg = rootCause.getMessage(); + } else { + status = ConsoleBaseResponse.Status.INTERNAL_ERROR; + msg = rootCause.getMessage(); + } + } + String json = FastJsonUtils.toJson(ConsoleBaseResponse.error(status, msg)); + RequestContext.sendJsonResponse(json); + // 返回错误提示信息 + resp.getWriter().write(json); + } finally { + long past = System.currentTimeMillis() - start; + if (accessLogger.isInfoEnabled()) { + accessLogger.info("HttpEnd: [{}]||{}||{}||cost={}ms", RequestContext.getUri(), + RequestContext.getResponseInfo(), RequestContext.getRemoteSource(), past); + } + + RequestContext.clear(); + } + } + + /** + * @see javax.servlet.Filter#destroy() + */ + @Override + public void destroy() { + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/JsonMessageConverter.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/JsonMessageConverter.java new file mode 100644 index 0000000..7d8ee09 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/JsonMessageConverter.java @@ -0,0 +1,155 @@ +package com.didi.carrera.console.web.filter; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONPObject; +import com.alibaba.fastjson.serializer.SerializeFilter; +import com.alibaba.fastjson.support.spring.FastJsonContainer; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4; +import com.alibaba.fastjson.support.spring.MappingFastJsonValue; +import com.alibaba.fastjson.support.spring.PropertyPreFilters; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + + +public class JsonMessageConverter extends FastJsonHttpMessageConverter4 { + + private Logger accessLogger = LoggerFactory.getLogger("carrera.console.framework.request"); + + @Override + protected Object readInternal(Class clazz, HttpInputMessage inputMessage) + throws IOException, HttpMessageNotReadableException { + + byte[] bodyBytes = getBody(inputMessage); + if (bodyBytes == null || bodyBytes.length == 0) { + return null; + } + + return JSON.parseObject(bodyBytes, 0, bodyBytes.length, getFastJsonConfig().getCharset(), getType(clazz, null), getFastJsonConfig().getFeatures()); + } + + private byte[] getBody(HttpInputMessage inputMessage) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + InputStream in = inputMessage.getBody(); + + byte[] buf = new byte[1024]; + for (; ; ) { + int len = in.read(buf); + if (len == -1) { + break; + } + + if (len > 0) { + baos.write(buf, 0, len); + } + } + if (baos.size() == 0) { + accessLogger.info("Request Body={}", RequestContext.getBody()); + String body = RequestContext.getBody(); + if (StringUtils.isNotBlank(body)) { + return body.getBytes("UTF-8"); + } + return null; + } else { + // 记录请求的body内容 + RequestContext.setBody(baos.toString()); + accessLogger.info("Request Body={}", RequestContext.getBody()); + + return baos.toByteArray(); + } + } + + @Override + public Object read(Type type, // + Class contextClass, // + HttpInputMessage inputMessage // + ) throws IOException, HttpMessageNotReadableException { + byte[] bodyBytes = getBody(inputMessage); + if (bodyBytes == null || bodyBytes.length == 0) { + return null; + } + + return JSON.parseObject(bodyBytes, 0, bodyBytes.length, getFastJsonConfig().getCharset(), getType(type, contextClass), getFastJsonConfig().getFeatures()); + } + + @Override + protected void writeInternal(Object object, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { + try (ByteArrayOutputStream outnew = new ByteArrayOutputStream()) { + HttpHeaders headers = outputMessage.getHeaders(); + + //获取全局配置的filter + SerializeFilter[] globalFilters = getFastJsonConfig().getSerializeFilters(); + List allFilters = new ArrayList<>(Arrays.asList(globalFilters)); + + boolean isJsonp = false; + Object value = strangeCodeForJackson(object); + + if (value instanceof FastJsonContainer) { + FastJsonContainer fastJsonContainer = (FastJsonContainer) value; + PropertyPreFilters filters = fastJsonContainer.getFilters(); + allFilters.addAll(filters.getFilters()); + value = fastJsonContainer.getValue(); + } + + if (value instanceof MappingFastJsonValue) { + isJsonp = true; + value = ((MappingFastJsonValue) value).getValue(); + } else if (value instanceof JSONPObject) { + isJsonp = true; + } + + + int len = writePrefix(outnew, object); + len += JSON.writeJSONString(outnew, // + getFastJsonConfig().getCharset(), // + value, // + getFastJsonConfig().getSerializeConfig(), // + allFilters.toArray(new SerializeFilter[allFilters.size()]), + getFastJsonConfig().getDateFormat(), // + JSON.DEFAULT_GENERATE_FEATURE, // + getFastJsonConfig().getSerializerFeatures()); + len += writeSuffix(outnew, object); + + if (isJsonp) { + headers.setContentType(APPLICATION_JAVASCRIPT); + } + if (getFastJsonConfig().isWriteContentLength()) { + headers.setContentLength(len); + } + + headers.set("carrera_logid", RequestContext.getLogId()); + RequestContext.sendJsonResponse(outnew.toString()); + + outnew.writeTo(outputMessage.getBody()); + + } catch (JSONException ex) { + throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex); + } + } + + private Object strangeCodeForJackson(Object obj) { + if (obj != null) { + String className = obj.getClass().getName(); + if ("com.fasterxml.jackson.databind.node.ObjectNode".equals(className)) { + return obj.toString(); + } + } + return obj; + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/RequestContext.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/RequestContext.java new file mode 100644 index 0000000..21314f1 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/filter/RequestContext.java @@ -0,0 +1,217 @@ +package com.didi.carrera.console.web.filter; + +import com.didi.carrera.console.common.util.FastJsonUtils; +import com.didi.carrera.console.common.util.LogUtils; +import com.didi.carrera.console.web.controller.bo.BaseBo; +import com.didi.carrera.console.web.util.RemoteSource; +import com.didi.carrera.console.web.util.RequestUtil; +import com.sun.tools.internal.ws.processor.model.Request; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.MDC; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + + +public class RequestContext { + private static final String BODY_KEY = "body"; + public static final String LOGID_KEY = "logId"; + + /** + * 客户端请求的信息 + */ + private static final InheritableThreadLocal context = new InheritableThreadLocal<>(); + + /** + * 服务器处理后的返回信息 + */ + private static final InheritableThreadLocal response = new InheritableThreadLocal<>(); + /** + * 用户请求信息 + */ + private static final InheritableThreadLocal request = new InheritableThreadLocal<>(); + + public static HttpServletRequest getRequest() { + return context.get() == null ? null : context.get().request; + } + + public static HttpServletResponse getResponse() { + return context.get() == null ? null : context.get().response; + } + + public static String getUri() { + return context.get() == null ? null : context.get().uri; + } + + public static String getFullUri() { + return context.get() == null ? null : context.get().fullUri; + } + + public static String getLogId() { + return context.get() == null ? null : context.get().logId; + } + + public static String getRequestedWith() { + return context.get() == null ? null : context.get().requestedWith; + } + + public static RemoteSource getRemoteSource() { + return context.get() == null ? null : context.get().remoteSource; + } + + public static Map getDataMap() { + return context.get() == null ? null : context.get().dataMap; + } + + public static Object getValue(String key) { + return context.get() == null ? null : context.get().dataMap.get(key); + } + + public static String getString(String key) { + Object value = getValue(key); + if (value != null) { + return String.valueOf(value); + } + return null; + } + + public static String getBody() { + return getString(BODY_KEY); + } + + protected static void setBody(String body) { + BaseBo bo = FastJsonUtils.toObject(body, BaseBo.class); + if(bo != null && StringUtils.isNotEmpty(bo.getUser())) { + context.get().dataMap.put("user", bo.getUser()); + } + context.get().dataMap.put(BODY_KEY, body); + } + + static void start(HttpServletRequest request, HttpServletResponse response) { + RequestContext.context.set(new Context(request, response)); + RequestContext.response.set(new Response()); + MDC.put(LOGID_KEY, getLogId()); + } + + static void clear() { + context.remove(); + response.remove(); + MDC.remove(LOGID_KEY); + } + + static String getRequestInfo() { + Map params = RequestContext.getDataMap(); + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry: params.entrySet()) { + sb.append("||").append(entry.getKey()).append("=").append(entry.getValue()); + } + return sb.toString(); + } + + static String getResponseInfo() { + StringBuilder sb = new StringBuilder("code=").append(response.get().code); + if (StringUtils.isNotBlank(response.get().contentType)) { + sb.append("||contentType=[").append(response.get().contentType).append("]"); + } + if (StringUtils.isNotBlank(response.get().content)) { + sb.append("||content=[").append(response.get().content).append("]"); + } + if (StringUtils.isNotBlank(response.get().path)) { + sb.append("||path=[").append(response.get().path).append("]"); + } + return sb.toString(); + } + + public static void sendResponse(int code) { + response.get().code = code; + } + + public static void sendResponse(int code, String message) { + response.get().code = code; + response.get().content = message; + } + + public static void sendResponse(String type, String content) { + response.get().contentType = type; + response.get().content = content; + } + + static void sendJsonResponse(String json) { + context.get().response.setContentType("application/json;charset=UTF-8"); + response.get().contentType = "application/json;charset=UTF-8"; + response.get().content = json; + + } + + static void sendHtmlResponse(String path) { + response.get().contentType = "text/html;charset=UTF-8"; + response.get().path = path; + } + + static void sendStaticResponse(String type, String path) { + response.get().contentType = type; + response.get().path = path; + } + + private static class Context { + public final HttpServletRequest request; + public final HttpServletResponse response; + public final Map dataMap = new ConcurrentHashMap<>(); + public final String uri; + public final String fullUri; + public final String logId; + public final String requestedWith; + public final RemoteSource remoteSource; + + public Context(HttpServletRequest request, HttpServletResponse response) { + this.request = request; + this.response = response; + String logId = LogUtils.genLogid(); + Enumeration names = request.getParameterNames(); + if (names != null) { + while (names.hasMoreElements()) { + String name = String.valueOf(names.nextElement()); + String value = request.getParameter(name); + if (StringUtils.isNotBlank(value)) { + if (LOGID_KEY.equalsIgnoreCase(name)) { + logId = value; + } + dataMap.put(name, value); + } + } + } + this.logId = logId; + String uri = request.getRequestURI(); + // 从uri上去掉context_path + uri = uri.replace(request.getContextPath(), ""); + this.uri = uri; + + String query = StringUtils.isBlank(request.getQueryString()) ? "" : "?" + request.getQueryString(); + this.fullUri = uri + query; + + String requested = request.getHeader("X-Requested-With"); + if (org.apache.commons.lang3.StringUtils.isNotBlank(requested)) { + requestedWith = requested; + } else { + requestedWith = ""; + } + + remoteSource = RequestUtil.getRemoteSource(request); + } + } + + /** + * 目前只做记录,方便日志打印 + */ + private static class Response { + public int code = HttpServletResponse.SC_OK; + public String contentType; + public String content; + public String path; + } + + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/CookieUtil.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/CookieUtil.java new file mode 100644 index 0000000..fdb6cbe --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/CookieUtil.java @@ -0,0 +1,31 @@ +package com.didi.carrera.console.web.util; + +import com.didi.carrera.console.common.util.LogUtils; +import org.springframework.web.util.CookieGenerator; + +import javax.servlet.http.Cookie; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Author: zanglei@didiglobal.com + * Date: 2019-10-16 + * Time: 12:06 + */ +public class CookieUtil { + + public static final String COOKIE_KEY="JSESSION_ID"; + + public static final Set cookies = new HashSet<>(); + + public static Cookie newCookie() { + String value = LogUtils.genLogid(); + Cookie cookie = new Cookie(COOKIE_KEY, value); + cookie.setPath("/"); + cookies.add(value); + return cookie; + } +} diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateTimePropertyEditor.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateTimePropertyEditor.java new file mode 100644 index 0000000..fad8889 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateTimePropertyEditor.java @@ -0,0 +1,41 @@ +package com.didi.carrera.console.web.util; + +import org.apache.commons.lang3.StringUtils; + +import java.beans.PropertyEditorSupport; +import java.text.ParseException; +import java.text.SimpleDateFormat; + + +public class DateTimePropertyEditor extends PropertyEditorSupport { + + /** + * Parse the Date from the given text, using the specified DateFormat. + */ + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (StringUtils.isBlank(text)) { + setValue(null); + return; + } + SimpleDateFormat dateFormat; + + if (text.contains(":")) { // 时分秒 + if (text.split(":").length == 2) { + dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + } else { + dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + } else { + dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + } + + try { + setValue(dateFormat.parse(text)); + } catch (ParseException ex) { + throw new IllegalArgumentException("Could not parse date: " + ex.getMessage(), ex); + } + + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateUtil.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateUtil.java new file mode 100755 index 0000000..e0b1e35 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/DateUtil.java @@ -0,0 +1,762 @@ +package com.didi.carrera.console.web.util; + + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class DateUtil { + + /** + * 获取SimpleDateFormat + * + * @param parttern 日期格式 + * @return SimpleDateFormat对象 + * @throws RuntimeException 异常:非法日期格式 + */ + private static SimpleDateFormat getDateFormat(String parttern) throws RuntimeException { + return new SimpleDateFormat(parttern); + } + + /** + * 获取日期中的某数值。如获取月份 + * + * @param date 日期 + * @param dateType 日期格式 + * @return 数值 + */ + private static int getInteger(Date date, int dateType) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar.get(dateType); + } + + /** + * 增加日期中某类型的某数值。如增加日期 + * + * @param date 日期字符串 + * @param dateType 类型 + * @param amount 数值 + * @return 计算后日期字符串 + */ + private static String addInteger(String date, int dateType, int amount) { + String dateString = null; + DateStyle dateStyle = getDateStyle(date); + if (dateStyle != null) { + Date myDate = StringToDate(date, dateStyle); + myDate = addInteger(myDate, dateType, amount); + dateString = DateToString(myDate, dateStyle); + } + return dateString; + } + + /** + * 增加日期中某类型的某数值。如增加日期 + * + * @param date 日期 + * @param dateType 类型 + * @param amount 数值 + * @return 计算后日期 + */ + private static Date addInteger(Date date, int dateType, int amount) { + Date myDate = null; + if (date != null) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(dateType, amount); + myDate = calendar.getTime(); + } + return myDate; + } + + /** + * 获取精确的日期 + * + * @param timestamps 时间long集合 + * @return 日期 + */ + private static Date getAccurateDate(List timestamps) { + Date date = null; + long timestamp = 0; + Map map = new HashMap<>(); + List absoluteValues = new ArrayList<>(); + + if (timestamps != null && timestamps.size() > 0) { + if (timestamps.size() > 1) { + for (int i = 0; i < timestamps.size(); i++) { + for (int j = i + 1; j < timestamps.size(); j++) { + long absoluteValue = Math.abs(timestamps.get(i) - timestamps.get(j)); + absoluteValues.add(absoluteValue); + long[] timestampTmp = {timestamps.get(i), timestamps.get(j)}; + map.put(absoluteValue, timestampTmp); + } + } + + // 有可能有相等的情况。如2012-11和2012-11-01。时间戳是相等的 + long minAbsoluteValue = -1; + if (!absoluteValues.isEmpty()) { + // 如果timestamps的size为2,这是差值只有一个,因此要给默认值 + minAbsoluteValue = absoluteValues.get(0); + } + for (int i = 0; i < absoluteValues.size(); i++) { + for (int j = i + 1; j < absoluteValues.size(); j++) { + if (absoluteValues.get(i) > absoluteValues.get(j)) { + minAbsoluteValue = absoluteValues.get(j); + } else { + minAbsoluteValue = absoluteValues.get(i); + } + } + } + + if (minAbsoluteValue != -1) { + long[] timestampsLastTmp = map.get(minAbsoluteValue); + if (absoluteValues.size() > 1) { + timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]); + } else if (absoluteValues.size() == 1) { + // 当timestamps的size为2,需要与当前时间作为参照 + long dateOne = timestampsLastTmp[0]; + long dateTwo = timestampsLastTmp[1]; + if ((Math.abs(dateOne - dateTwo)) < 100000000000L) { + timestamp = Math.max(timestampsLastTmp[0], timestampsLastTmp[1]); + } else { + long now = new Date().getTime(); + if (Math.abs(dateOne - now) <= Math.abs(dateTwo - now)) { + timestamp = dateOne; + } else { + timestamp = dateTwo; + } + } + } + } + } else { + timestamp = timestamps.get(0); + } + } + + if (timestamp != 0) { + date = new Date(timestamp); + } + return date; + } + + /** + * 判断字符串是否为日期字符串 + * + * @param date 日期字符串 + * @return true or false + */ + public static boolean isDate(String date) { + boolean isDate = false; + if (date != null) { + if (StringToDate(date) != null) { + isDate = true; + } + } + return isDate; + } + + /** + * 获取日期字符串的日期风格。失敗返回null。 + * + * @param date 日期字符串 + * @return 日期风格 + */ + public static DateStyle getDateStyle(String date) { + DateStyle dateStyle; + Map map = new HashMap<>(); + List timestamps = new ArrayList<>(); + for (DateStyle style : DateStyle.values()) { + Date dateTmp = StringToDate(date, style.getValue()); + if (dateTmp != null) { + timestamps.add(dateTmp.getTime()); + map.put(dateTmp.getTime(), style); + } + } + dateStyle = map.get(getAccurateDate(timestamps).getTime()); + return dateStyle; + } + + /** + * 将日期字符串转化为日期。失败返回null。 + * + * @param date 日期字符串 + * @return 日期 + */ + public static Date StringToDate(String date) { + DateStyle dateStyle = null; + return StringToDate(date, dateStyle); + } + + /** + * 将日期字符串转化为日期。失败返回null。 + * + * @param date 日期字符串 + * @param parttern 日期格式 + * @return 日期 + */ + public static Date StringToDate(String date, String parttern) { + Date myDate = null; + if (date != null) { + try { + myDate = getDateFormat(parttern).parse(date); + } catch (Exception e) { + } + } + return myDate; + } + + /** + * 将日期字符串转化为日期。失败返回null。 + * + * @param date 日期字符串 + * @param dateStyle 日期风格 + * @return 日期 + */ + public static Date StringToDate(String date, DateStyle dateStyle) { + Date myDate = null; + if (dateStyle == null) { + List timestamps = new ArrayList<>(); + for (DateStyle style : DateStyle.values()) { + Date dateTmp = StringToDate(date, style.getValue()); + if (dateTmp != null) { + timestamps.add(dateTmp.getTime()); + } + } + myDate = getAccurateDate(timestamps); + } else { + myDate = StringToDate(date, dateStyle.getValue()); + } + return myDate; + } + + /** + * 将日期转化为日期字符串。失败返回null。 + * + * @param date 日期 + * @param parttern 日期格式 + * @return 日期字符串 + */ + public static String DateToString(Date date, String parttern) { + String dateString = null; + if (date != null) { + try { + dateString = getDateFormat(parttern).format(date); + } catch (Exception e) { + } + } + return dateString; + } + + /** + * 将日期转化为日期字符串。失败返回null。 + * + * @param date 日期 + * @param dateStyle 日期风格 + * @return 日期字符串 + */ + public static String DateToString(Date date, DateStyle dateStyle) { + String dateString = null; + if (dateStyle != null) { + dateString = DateToString(date, dateStyle.getValue()); + } + return dateString; + } + + /** + * 将日期字符串转化为另一日期字符串。失败返回null。 + * + * @param date 旧日期字符串 + * @param parttern 新日期格式 + * @return 新日期字符串 + */ + public static String StringToString(String date, String parttern) { + return StringToString(date, null, parttern); + } + + /** + * 将日期字符串转化为另一日期字符串。失败返回null。 + * + * @param date 旧日期字符串 + * @param dateStyle 新日期风格 + * @return 新日期字符串 + */ + public static String StringToString(String date, DateStyle dateStyle) { + return StringToString(date, null, dateStyle); + } + + /** + * 将日期字符串转化为另一日期字符串。失败返回null。 + * + * @param date 旧日期字符串 + * @param olddParttern 旧日期格式 + * @param newParttern 新日期格式 + * @return 新日期字符串 + */ + public static String StringToString(String date, String olddParttern, String newParttern) { + String dateString = null; + if (olddParttern == null) { + DateStyle style = getDateStyle(date); + if (style != null) { + Date myDate = StringToDate(date, style.getValue()); + dateString = DateToString(myDate, newParttern); + } + } else { + Date myDate = StringToDate(date, olddParttern); + dateString = DateToString(myDate, newParttern); + } + return dateString; + } + + /** + * 将日期字符串转化为另一日期字符串。失败返回null。 + * + * @param date 旧日期字符串 + * @param olddDteStyle 旧日期风格 + * @param newDateStyle 新日期风格 + * @return 新日期字符串 + */ + public static String StringToString(String date, DateStyle olddDteStyle, DateStyle newDateStyle) { + String dateString = null; + if (olddDteStyle == null) { + DateStyle style = getDateStyle(date); + dateString = StringToString(date, style.getValue(), newDateStyle.getValue()); + } else { + dateString = StringToString(date, olddDteStyle.getValue(), newDateStyle.getValue()); + } + return dateString; + } + + /** + * 增加日期的年份。失败返回null。 + * + * @param date 日期 + * @param yearAmount 增加数量。可为负数 + * @return 增加年份后的日期字符串 + */ + public static String addYear(String date, int yearAmount) { + return addInteger(date, Calendar.YEAR, yearAmount); + } + + /** + * 增加日期的年份。失败返回null。 + * + * @param date 日期 + * @param yearAmount 增加数量。可为负数 + * @return 增加年份后的日期 + */ + public static Date addYear(Date date, int yearAmount) { + return addInteger(date, Calendar.YEAR, yearAmount); + } + + /** + * 增加日期的月份。失败返回null。 + * + * @param date 日期 + * @param yearAmount 增加数量。可为负数 + * @return 增加月份后的日期字符串 + */ + public static String addMonth(String date, int yearAmount) { + return addInteger(date, Calendar.MONTH, yearAmount); + } + + /** + * 增加日期的月份。失败返回null。 + * + * @param date 日期 + * @param yearAmount 增加数量。可为负数 + * @return 增加月份后的日期 + */ + public static Date addMonth(Date date, int yearAmount) { + return addInteger(date, Calendar.MONTH, yearAmount); + } + + /** + * 增加日期的天数。失败返回null。 + * + * @param date 日期字符串 + * @param dayAmount 增加数量。可为负数 + * @return 增加天数后的日期字符串 + */ + public static String addDay(String date, int dayAmount) { + return addInteger(date, Calendar.DATE, dayAmount); + } + + /** + * 增加日期的天数。失败返回null。 + * + * @param date 日期 + * @param dayAmount 增加数量。可为负数 + * @return 增加天数后的日期 + */ + public static Date addDay(Date date, int dayAmount) { + return addInteger(date, Calendar.DATE, dayAmount); + } + + /** + * 增加日期的小时。失败返回null。 + * + * @param date + * @param hourAmount + * @return 增加小时后的日期字符串 + */ + public static String addHour(String date, int hourAmount) { + return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount); + } + + /** + * 增加日期的小时。失败返回null + * + * @param date + * @param hourAmount + * @return 增加小时后的日期 + */ + public static Date addHour(Date date, int hourAmount) { + return addInteger(date, Calendar.HOUR_OF_DAY, hourAmount); + } + + /** + * 获取日期的年份。失败返回0。 + * + * @param date 日期字符串 + * @return 年份 + */ + public static int getYear(String date) { + return getYear(StringToDate(date)); + } + + /** + * 获取日期的年份。失败返回0。 + * + * @param date 日期 + * @return 年份 + */ + public static int getYear(Date date) { + return getInteger(date, Calendar.YEAR); + } + + /** + * 获取日期的月份。失败返回0。 + * + * @param date 日期字符串 + * @return 月份 + */ + public static int getMonth(String date) { + return getMonth(StringToDate(date)); + } + + /** + * 获取日期的月份。失败返回0。 + * + * @param date 日期 + * @return 月份 + */ + public static int getMonth(Date date) { + return getInteger(date, Calendar.MONTH); + } + + /** + * 获取日期的天数。失败返回0。 + * + * @param date 日期字符串 + * @return 天 + */ + public static int getDay(String date) { + return getDay(StringToDate(date)); + } + + /** + * 获取日期的天数。失败返回0。 + * + * @param date 日期 + * @return 天 + */ + public static int getDay(Date date) { + return getInteger(date, Calendar.DATE); + } + + /** + * 获取日期的小时。失败返回0。 + * + * @param date 日期字符串 + * @return 小时 + */ + public static int getHour(String date) { + return getHour(StringToDate(date)); + } + + /** + * 获取日期的小时。失败返回0。 + * + * @param date 日期 + * @return 小时 + */ + public static int getHour(Date date) { + return getInteger(date, Calendar.HOUR_OF_DAY); + } + + /** + * 获取日期的分钟。失败返回0。 + * + * @param date 日期字符串 + * @return 分钟 + */ + public static int getMinute(String date) { + return getMinute(StringToDate(date)); + } + + /** + * 获取日期的分钟。失败返回0。 + * + * @param date 日期 + * @return 分钟 + */ + public static int getMinute(Date date) { + return getInteger(date, Calendar.MINUTE); + } + + /** + * 获取日期的秒钟。失败返回0。 + * + * @param date 日期字符串 + * @return 秒钟 + */ + public static int getSecond(String date) { + return getSecond(StringToDate(date)); + } + + /** + * 获取日期的秒钟。失败返回0。 + * + * @param date 日期 + * @return 秒钟 + */ + public static int getSecond(Date date) { + return getInteger(date, Calendar.SECOND); + } + + /** + * 获取日期 。默认yyyy-MM-dd格式。失败返回null。 + * + * @param date 日期字符串 + * @return 日期 + */ + public static String getDate(String date) { + return StringToString(date, DateStyle.YYYY_MM_DD); + } + + /** + * 获取日期。默认yyyy-MM-dd格式。失败返回null。 + * + * @param date 日期 + * @return 日期 + */ + public static String getDate(Date date) { + return DateToString(date, DateStyle.YYYY_MM_DD); + } + + /** + * 获取日期的时间。默认HH:mm:ss格式。失败返回null。 + * + * @param date 日期字符串 + * @return 时间 + */ + public static String getTime(String date) { + return StringToString(date, DateStyle.HH_MM_SS); + } + + /** + * 获取日期的时间。默认HH:mm:ss格式。失败返回null。 + * + * @param date 日期 + * @return 时间 + */ + public static String getTime(Date date) { + return DateToString(date, DateStyle.HH_MM_SS); + } + + /** + * 获取日期的星期。失败返回null。 + * + * @param date 日期字符串 + * @return 星期 + */ + public static Week getWeek(String date) { + Week week = null; + DateStyle dateStyle = getDateStyle(date); + if (dateStyle != null) { + Date myDate = StringToDate(date, dateStyle); + week = getWeek(myDate); + } + return week; + } + + /** + * 获取日期的星期。失败返回null。 + * + * @param date 日期 + * @return 星期 + */ + public static Week getWeek(Date date) { + Week week = null; + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int weekNumber = calendar.get(Calendar.DAY_OF_WEEK) - 1; + switch (weekNumber) { + case 0: + week = Week.SUNDAY; + break; + case 1: + week = Week.MONDAY; + break; + case 2: + week = Week.TUESDAY; + break; + case 3: + week = Week.WEDNESDAY; + break; + case 4: + week = Week.THURSDAY; + break; + case 5: + week = Week.FRIDAY; + break; + case 6: + week = Week.SATURDAY; + break; + } + return week; + } + + /** + * 获取两个日期相差的天数 + * + * @param date 日期字符串 + * @param otherDate 另一个日期字符串 + * @return 相差天数 + */ + public static int getIntervalDays(String date, String otherDate) { + return getIntervalDays(StringToDate(date), StringToDate(otherDate)); + } + + /** + * @param date 日期 + * @param otherDate 另一个日期 + * @return 相差天数 + */ + public static int getIntervalDays(Date date, Date otherDate) { + date = DateUtil.StringToDate(DateUtil.getDate(date)); + long time = Math.abs(date.getTime() - otherDate.getTime()); + return (int) time / (24 * 60 * 60 * 1000); + } + + /** + * 根据1970年以来的毫秒数获取日期字符串 + * + * @param date 1970年以来的ms数 + * @param ds + * @return 返回指定DateStyle格式的字符串 + */ + public static String longToString(Long date, DateStyle ds) { + if (date == null || date == 0L) { + return null; + } + if (ds == null) { + ds = DateStyle.YYYY_MM_DD_HH_MM_SS; + } + return getDateFormat(ds.getValue()).format(date); + } + + /** + * 根据1970年以来的毫秒数获取日期字符串,默认yyyy-MM-dd HH:mm:ss + * + * @param date 1970年以来的ms数 + * @return + */ + public static String longToString(Long date) { + return longToString(date, DateStyle.YYYY_MM_DD_HH_MM_SS); + } + + public enum DateStyle { + MM_DD("MM-dd"), + YYYY_MM("yyyy-MM"), + YYYY_MM_DD("yyyy-MM-dd"), + YYYYMMDD("yyyyMMdd"), + MM_DD_HH_MM("MM-dd HH:mm"), + MM_DD_HH_MM_SS("MM-dd HH:mm:ss"), + YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"), + YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"), + + MM_DD_EN("MM/dd"), + YYYY_MM_EN("yyyy/MM"), + YYYY_MM_DD_EN("yyyy/MM/dd"), + MM_DD_HH_MM_EN("MM/dd HH:mm"), + MM_DD_HH_MM_SS_EN("MM/dd HH:mm:ss"), + YYYY_MM_DD_HH_MM_EN("yyyy/MM/dd HH:mm"), + YYYY_MM_DD_HH_MM_SS_EN("yyyy/MM/dd HH:mm:ss"), + + MM_DD_CN("MM月dd日"), + YYYY_MM_CN("yyyy年MM月"), + YYYY_MM_DD_CN("yyyy年MM月dd日"), + MM_DD_HH_MM_CN("MM月dd日 HH:mm"), + MM_DD_HH_MM_SS_CN("MM月dd日 HH:mm:ss"), + YYYY_MM_DD_HH_MM_CN("yyyy年MM月dd日 HH:mm"), + YYYY_MM_DD_HH_MM_SS_CN("yyyy年MM月dd日 HH:mm:ss"), + + HH_MM("HH:mm"), + HH_MM_SS("HH:mm:ss"); + + private String value; + + DateStyle(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + public enum Week { + MONDAY("星期一", "Monday", "Mon.", 1), + TUESDAY("星期二", "Tuesday", "Tues.", 2), + WEDNESDAY("星期三", "Wednesday", "Wed.", 3), + THURSDAY("星期四", "Thursday", "Thur.", 4), + FRIDAY("星期五", "Friday", "Fri.", 5), + SATURDAY("星期六", "Saturday", "Sat.", 6), + SUNDAY("星期日", "Sunday", "Sun.", 7); + + String name_cn; + String name_en; + String name_enShort; + int number; + + Week(String name_cn, String name_en, String name_enShort, int number) { + this.name_cn = name_cn; + this.name_en = name_en; + this.name_enShort = name_enShort; + this.number = number; + } + + public String getChineseName() { + return name_cn; + } + + public String getName() { + return name_en; + } + + public String getShortName() { + return name_enShort; + } + + public int getNumber() { + return number; + } + + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RemoteSource.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RemoteSource.java new file mode 100644 index 0000000..4ddc943 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RemoteSource.java @@ -0,0 +1,16 @@ +package com.didi.carrera.console.web.util; + + +public class RemoteSource { + protected RemoteSource(String ip, String source) { + this.ip = ip; + this.source = source; + } + + public String toString() { + return "ip=" + ip + "||ipSrc=" + source; + } + + public final String ip; + public final String source; +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RequestUtil.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RequestUtil.java new file mode 100644 index 0000000..27cfb02 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/RequestUtil.java @@ -0,0 +1,32 @@ +package com.didi.carrera.console.web.util; + +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; + + +public class RequestUtil { + + /** + * 获取客户端真实ip + */ + public static RemoteSource getRemoteSource(HttpServletRequest request) { + + String ip = request.getHeader("X-Real-IP"); + if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { + return new RemoteSource(ip, "X-Real-IP"); + } + + ip = request.getHeader("X-Forwarded-For"); + if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { + //多次反向代理后会有多个ip值,第一个ip才是真实ip + int index = ip.indexOf(","); + if (index != -1) { + ip = ip.substring(0, index); + } + return new RemoteSource(ip, "X-Forwarded-For"); + } + + return new RemoteSource(request.getRemoteAddr(), "Remote-Addr"); + } +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/StringPropertyEditor.java b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/StringPropertyEditor.java new file mode 100644 index 0000000..1d05782 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/java/com/didi/carrera/console/web/util/StringPropertyEditor.java @@ -0,0 +1,23 @@ +/** + * Kuaidadi.com Inc. + * Copyright (c) 2012-2015 All Rights Reserved. + */ +package com.didi.carrera.console.web.util; + +import org.apache.commons.lang3.StringUtils; + +import java.beans.PropertyEditorSupport; + + +public class StringPropertyEditor extends PropertyEditorSupport { + + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (StringUtils.isBlank(text)) { + setValue(null); + } else { + setValue(text.trim()); + } + } + +} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/application.yml b/carrera-console/carrera-boot/src/main/resources/application.yml new file mode 100644 index 0000000..03b7225 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/application.yml @@ -0,0 +1,33 @@ +spring: + main: + allow-bean-definition-overriding: true + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/carrera_open_source?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false + username: root + password: 123456 +mybatis: + mapperLocations: classpath:sqlmap/ddmq/*.xml + config-location: classpath:mybatis-config.xml + typeAliasesPackage: com.didi.carrera.console.dao.model + +server: + port: 8281 + servlet: + context-path: /carrera + + +#logs +logs: + level: INFO + file: + path: ./logs + + +console: + env: test + carrera: + zookeeper: localhost:9181 + admin: + user: admin,felix + password: admin \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/mybatis-config.xml b/carrera-console/carrera-boot/src/main/resources/mybatis-config.xml new file mode 100755 index 0000000..57f3f7d --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/mybatis-config.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/nonelogback.xml b/carrera-console/carrera-boot/src/main/resources/nonelogback.xml new file mode 100644 index 0000000..741662c --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/nonelogback.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + UTF-8 + ${STD_LOG_FORMAT} + + + + + ${LOG_PATH:-.}/${LOG_FILE_NAME}.log + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-%d{yyyyMMdd}.log + ${LOG_MAX_HISTORY} + true + + + UTF-8 + ${FILE_LOG_FORMAT} + + + + + + WARN + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-error.log + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-error-%d{yyyyMMdd}.log + ${LOG_MAX_HISTORY} + true + + + UTF-8 + ${FILE_LOG_FORMAT} + + + + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-sql.log + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-sql-%d{yyyyMMdd}.log + ${LOG_MAX_HISTORY} + true + + + UTF-8 + ${FILE_LOG_FORMAT} + + + + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-access.log + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-access-%d{yyyyMMdd}.log + ${LOG_MAX_HISTORY} + true + + + UTF-8 + ${FILE_LOG_FORMAT} + + + + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-zkv4.log + + ${LOG_PATH:-.}/${LOG_FILE_NAME}-zkv4-%d{yyyyMMdd}.log + 30 + true + + + UTF-8 + ${FILE_LOG_FORMAT} + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMapper.xml new file mode 100644 index 0000000..6e42567 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMapper.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, description, idc_id, idc, remark, is_delete, create_time, modify_time + + + + + delete from cluster + where id = #{id,jdbcType=BIGINT} + + + delete from cluster + + + + + + insert into cluster (name, description, idc_id, + idc, remark, is_delete, + create_time, modify_time) + values (#{name,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{idcId,jdbcType=BIGINT}, + #{idc,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{isDelete,jdbcType=TINYINT}, + #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP}) + + + insert into cluster + + + name, + + + description, + + + idc_id, + + + idc, + + + remark, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{name,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{idcId,jdbcType=BIGINT}, + + + #{idc,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update cluster + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + description = #{record.description,jdbcType=VARCHAR}, + + + idc_id = #{record.idcId,jdbcType=BIGINT}, + + + idc = #{record.idc,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update cluster + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + description = #{record.description,jdbcType=VARCHAR}, + idc_id = #{record.idcId,jdbcType=BIGINT}, + idc = #{record.idc,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update cluster + + + name = #{name,jdbcType=VARCHAR}, + + + description = #{description,jdbcType=VARCHAR}, + + + idc_id = #{idcId,jdbcType=BIGINT}, + + + idc = #{idc,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update cluster + set name = #{name,jdbcType=VARCHAR}, + description = #{description,jdbcType=VARCHAR}, + idc_id = #{idcId,jdbcType=BIGINT}, + idc = #{idc,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMqserverRelationMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMqserverRelationMapper.xml new file mode 100644 index 0000000..b5d7865 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ClusterMqserverRelationMapper.xml @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, cluster_id, cluster_name, mq_server_id, mq_server_name, proxy_conf, type, is_delete, + create_time, modify_time + + + + + delete from cluster_mqserver_relation + where id = #{id,jdbcType=BIGINT} + + + delete from cluster_mqserver_relation + + + + + + insert into cluster_mqserver_relation (cluster_id, cluster_name, mq_server_id, + mq_server_name, proxy_conf, type, + is_delete, create_time, modify_time + ) + values (#{clusterId,jdbcType=BIGINT}, #{clusterName,jdbcType=VARCHAR}, #{mqServerId,jdbcType=BIGINT}, + #{mqServerName,jdbcType=VARCHAR}, #{proxyConf,jdbcType=VARCHAR}, #{type,jdbcType=TINYINT}, + #{isDelete,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP} + ) + + + insert into cluster_mqserver_relation + + + cluster_id, + + + cluster_name, + + + mq_server_id, + + + mq_server_name, + + + proxy_conf, + + + type, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{clusterId,jdbcType=BIGINT}, + + + #{clusterName,jdbcType=VARCHAR}, + + + #{mqServerId,jdbcType=BIGINT}, + + + #{mqServerName,jdbcType=VARCHAR}, + + + #{proxyConf,jdbcType=VARCHAR}, + + + #{type,jdbcType=TINYINT}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update cluster_mqserver_relation + + + id = #{record.id,jdbcType=BIGINT}, + + + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + + + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + + + mq_server_id = #{record.mqServerId,jdbcType=BIGINT}, + + + mq_server_name = #{record.mqServerName,jdbcType=VARCHAR}, + + + proxy_conf = #{record.proxyConf,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=TINYINT}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update cluster_mqserver_relation + set id = #{record.id,jdbcType=BIGINT}, + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + mq_server_id = #{record.mqServerId,jdbcType=BIGINT}, + mq_server_name = #{record.mqServerName,jdbcType=VARCHAR}, + proxy_conf = #{record.proxyConf,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=TINYINT}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update cluster_mqserver_relation + + + cluster_id = #{clusterId,jdbcType=BIGINT}, + + + cluster_name = #{clusterName,jdbcType=VARCHAR}, + + + mq_server_id = #{mqServerId,jdbcType=BIGINT}, + + + mq_server_name = #{mqServerName,jdbcType=VARCHAR}, + + + proxy_conf = #{proxyConf,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=TINYINT}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update cluster_mqserver_relation + set cluster_id = #{clusterId,jdbcType=BIGINT}, + cluster_name = #{clusterName,jdbcType=VARCHAR}, + mq_server_id = #{mqServerId,jdbcType=BIGINT}, + mq_server_name = #{mqServerName,jdbcType=VARCHAR}, + proxy_conf = #{proxyConf,jdbcType=VARCHAR}, + type = #{type,jdbcType=TINYINT}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupCustomMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupCustomMapper.xml new file mode 100644 index 0000000..89412b6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupCustomMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupMapper.xml new file mode 100644 index 0000000..125a0db --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeGroupMapper.xml @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, group_name, service, department, contacters, alarm_is_enable, alarm_group, alarm_level, + alarm_msg_lag, alarm_delay_time, broadcast_consume, consume_mode, consume_mode_mapper, + extra_params, config, remark, is_delete, create_time, modify_time + + + + + delete from consume_group + where id = #{id,jdbcType=BIGINT} + + + delete from consume_group + + + + + + insert into consume_group (group_name, service, department, + contacters, alarm_is_enable, alarm_group, + alarm_level, alarm_msg_lag, alarm_delay_time, + broadcast_consume, consume_mode, consume_mode_mapper, + extra_params, config, remark, + is_delete, create_time, modify_time + ) + values (#{groupName,jdbcType=VARCHAR}, #{service,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, + #{contacters,jdbcType=VARCHAR}, #{alarmIsEnable,jdbcType=TINYINT}, #{alarmGroup,jdbcType=VARCHAR}, + #{alarmLevel,jdbcType=TINYINT}, #{alarmMsgLag,jdbcType=INTEGER}, #{alarmDelayTime,jdbcType=INTEGER}, + #{broadcastConsume,jdbcType=TINYINT}, #{consumeMode,jdbcType=TINYINT}, #{consumeModeMapper,jdbcType=VARCHAR}, + #{extraParams,jdbcType=VARCHAR}, #{config,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, + #{isDelete,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP} + ) + + + insert into consume_group + + + group_name, + + + service, + + + department, + + + contacters, + + + alarm_is_enable, + + + alarm_group, + + + alarm_level, + + + alarm_msg_lag, + + + alarm_delay_time, + + + broadcast_consume, + + + consume_mode, + + + consume_mode_mapper, + + + extra_params, + + + config, + + + remark, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{groupName,jdbcType=VARCHAR}, + + + #{service,jdbcType=VARCHAR}, + + + #{department,jdbcType=VARCHAR}, + + + #{contacters,jdbcType=VARCHAR}, + + + #{alarmIsEnable,jdbcType=TINYINT}, + + + #{alarmGroup,jdbcType=VARCHAR}, + + + #{alarmLevel,jdbcType=TINYINT}, + + + #{alarmMsgLag,jdbcType=INTEGER}, + + + #{alarmDelayTime,jdbcType=INTEGER}, + + + #{broadcastConsume,jdbcType=TINYINT}, + + + #{consumeMode,jdbcType=TINYINT}, + + + #{consumeModeMapper,jdbcType=VARCHAR}, + + + #{extraParams,jdbcType=VARCHAR}, + + + #{config,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update consume_group + + + id = #{record.id,jdbcType=BIGINT}, + + + group_name = #{record.groupName,jdbcType=VARCHAR}, + + + service = #{record.service,jdbcType=VARCHAR}, + + + department = #{record.department,jdbcType=VARCHAR}, + + + contacters = #{record.contacters,jdbcType=VARCHAR}, + + + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + + + alarm_group = #{record.alarmGroup,jdbcType=VARCHAR}, + + + alarm_level = #{record.alarmLevel,jdbcType=TINYINT}, + + + alarm_msg_lag = #{record.alarmMsgLag,jdbcType=INTEGER}, + + + alarm_delay_time = #{record.alarmDelayTime,jdbcType=INTEGER}, + + + broadcast_consume = #{record.broadcastConsume,jdbcType=TINYINT}, + + + consume_mode = #{record.consumeMode,jdbcType=TINYINT}, + + + consume_mode_mapper = #{record.consumeModeMapper,jdbcType=VARCHAR}, + + + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + + + config = #{record.config,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update consume_group + set id = #{record.id,jdbcType=BIGINT}, + group_name = #{record.groupName,jdbcType=VARCHAR}, + service = #{record.service,jdbcType=VARCHAR}, + department = #{record.department,jdbcType=VARCHAR}, + contacters = #{record.contacters,jdbcType=VARCHAR}, + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + alarm_group = #{record.alarmGroup,jdbcType=VARCHAR}, + alarm_level = #{record.alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{record.alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{record.alarmDelayTime,jdbcType=INTEGER}, + broadcast_consume = #{record.broadcastConsume,jdbcType=TINYINT}, + consume_mode = #{record.consumeMode,jdbcType=TINYINT}, + consume_mode_mapper = #{record.consumeModeMapper,jdbcType=VARCHAR}, + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + config = #{record.config,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update consume_group + + + group_name = #{groupName,jdbcType=VARCHAR}, + + + service = #{service,jdbcType=VARCHAR}, + + + department = #{department,jdbcType=VARCHAR}, + + + contacters = #{contacters,jdbcType=VARCHAR}, + + + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + + + alarm_group = #{alarmGroup,jdbcType=VARCHAR}, + + + alarm_level = #{alarmLevel,jdbcType=TINYINT}, + + + alarm_msg_lag = #{alarmMsgLag,jdbcType=INTEGER}, + + + alarm_delay_time = #{alarmDelayTime,jdbcType=INTEGER}, + + + broadcast_consume = #{broadcastConsume,jdbcType=TINYINT}, + + + consume_mode = #{consumeMode,jdbcType=TINYINT}, + + + consume_mode_mapper = #{consumeModeMapper,jdbcType=VARCHAR}, + + + extra_params = #{extraParams,jdbcType=VARCHAR}, + + + config = #{config,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update consume_group + set group_name = #{groupName,jdbcType=VARCHAR}, + service = #{service,jdbcType=VARCHAR}, + department = #{department,jdbcType=VARCHAR}, + contacters = #{contacters,jdbcType=VARCHAR}, + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + alarm_group = #{alarmGroup,jdbcType=VARCHAR}, + alarm_level = #{alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{alarmDelayTime,jdbcType=INTEGER}, + broadcast_consume = #{broadcastConsume,jdbcType=TINYINT}, + consume_mode = #{consumeMode,jdbcType=TINYINT}, + consume_mode_mapper = #{consumeModeMapper,jdbcType=VARCHAR}, + extra_params = #{extraParams,jdbcType=VARCHAR}, + config = #{config,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionCustomMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionCustomMapper.xml new file mode 100644 index 0000000..f54cb9a --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionCustomMapper.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionMapper.xml new file mode 100644 index 0000000..b2e66a7 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/ConsumeSubscriptionMapper.xml @@ -0,0 +1,926 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, group_id, group_name, topic_id, topic_name, cluster_id, cluster_name, pressure_traffic, + max_tps, alarm_type, alarm_is_enable, alarm_level, alarm_msg_lag, alarm_delay_time, + api_type, consume_timeout, error_retry_times, retry_intervals, msg_type, enable_groovy, + enable_transit, enable_order, order_key, consume_type, big_data_type, big_data_config, + urls, http_method, http_headers, http_query_params, msg_push_type, http_token, push_max_concurrency, + actions, config, state, extra_params, remark, is_delete, create_time, modify_time + + + groovy, transit + + + + + + delete from consume_subscription + where id = #{id,jdbcType=BIGINT} + + + delete from consume_subscription + + + + + + insert into consume_subscription (group_id, group_name, topic_id, + topic_name, cluster_id, cluster_name, + pressure_traffic, max_tps, alarm_type, + alarm_is_enable, alarm_level, alarm_msg_lag, + alarm_delay_time, api_type, consume_timeout, + error_retry_times, retry_intervals, msg_type, + enable_groovy, enable_transit, enable_order, + order_key, consume_type, big_data_type, + big_data_config, urls, http_method, + http_headers, http_query_params, msg_push_type, + http_token, push_max_concurrency, actions, + config, state, extra_params, + remark, is_delete, create_time, + modify_time, groovy, transit + ) + values (#{groupId,jdbcType=BIGINT}, #{groupName,jdbcType=VARCHAR}, #{topicId,jdbcType=BIGINT}, + #{topicName,jdbcType=VARCHAR}, #{clusterId,jdbcType=BIGINT}, #{clusterName,jdbcType=VARCHAR}, + #{pressureTraffic,jdbcType=TINYINT}, #{maxTps,jdbcType=DOUBLE}, #{alarmType,jdbcType=TINYINT}, + #{alarmIsEnable,jdbcType=TINYINT}, #{alarmLevel,jdbcType=TINYINT}, #{alarmMsgLag,jdbcType=INTEGER}, + #{alarmDelayTime,jdbcType=INTEGER}, #{apiType,jdbcType=TINYINT}, #{consumeTimeout,jdbcType=INTEGER}, + #{errorRetryTimes,jdbcType=INTEGER}, #{retryIntervals,jdbcType=VARCHAR}, #{msgType,jdbcType=TINYINT}, + #{enableGroovy,jdbcType=TINYINT}, #{enableTransit,jdbcType=TINYINT}, #{enableOrder,jdbcType=TINYINT}, + #{orderKey,jdbcType=VARCHAR}, #{consumeType,jdbcType=TINYINT}, #{bigDataType,jdbcType=TINYINT}, + #{bigDataConfig,jdbcType=VARCHAR}, #{urls,jdbcType=VARCHAR}, #{httpMethod,jdbcType=TINYINT}, + #{httpHeaders,jdbcType=VARCHAR}, #{httpQueryParams,jdbcType=VARCHAR}, #{msgPushType,jdbcType=TINYINT}, + #{httpToken,jdbcType=VARCHAR}, #{pushMaxConcurrency,jdbcType=INTEGER}, #{actions,jdbcType=VARCHAR}, + #{config,jdbcType=VARCHAR}, #{state,jdbcType=TINYINT}, #{extraParams,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{isDelete,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, + #{modifyTime,jdbcType=TIMESTAMP}, #{groovy,jdbcType=LONGVARCHAR}, #{transit,jdbcType=LONGVARCHAR} + ) + + + insert into consume_subscription + + + group_id, + + + group_name, + + + topic_id, + + + topic_name, + + + cluster_id, + + + cluster_name, + + + pressure_traffic, + + + max_tps, + + + alarm_type, + + + alarm_is_enable, + + + alarm_level, + + + alarm_msg_lag, + + + alarm_delay_time, + + + api_type, + + + consume_timeout, + + + error_retry_times, + + + retry_intervals, + + + msg_type, + + + enable_groovy, + + + enable_transit, + + + enable_order, + + + order_key, + + + consume_type, + + + big_data_type, + + + big_data_config, + + + urls, + + + http_method, + + + http_headers, + + + http_query_params, + + + msg_push_type, + + + http_token, + + + push_max_concurrency, + + + actions, + + + config, + + + state, + + + extra_params, + + + remark, + + + is_delete, + + + create_time, + + + modify_time, + + + groovy, + + + transit, + + + + + #{groupId,jdbcType=BIGINT}, + + + #{groupName,jdbcType=VARCHAR}, + + + #{topicId,jdbcType=BIGINT}, + + + #{topicName,jdbcType=VARCHAR}, + + + #{clusterId,jdbcType=BIGINT}, + + + #{clusterName,jdbcType=VARCHAR}, + + + #{pressureTraffic,jdbcType=TINYINT}, + + + #{maxTps,jdbcType=DOUBLE}, + + + #{alarmType,jdbcType=TINYINT}, + + + #{alarmIsEnable,jdbcType=TINYINT}, + + + #{alarmLevel,jdbcType=TINYINT}, + + + #{alarmMsgLag,jdbcType=INTEGER}, + + + #{alarmDelayTime,jdbcType=INTEGER}, + + + #{apiType,jdbcType=TINYINT}, + + + #{consumeTimeout,jdbcType=INTEGER}, + + + #{errorRetryTimes,jdbcType=INTEGER}, + + + #{retryIntervals,jdbcType=VARCHAR}, + + + #{msgType,jdbcType=TINYINT}, + + + #{enableGroovy,jdbcType=TINYINT}, + + + #{enableTransit,jdbcType=TINYINT}, + + + #{enableOrder,jdbcType=TINYINT}, + + + #{orderKey,jdbcType=VARCHAR}, + + + #{consumeType,jdbcType=TINYINT}, + + + #{bigDataType,jdbcType=TINYINT}, + + + #{bigDataConfig,jdbcType=VARCHAR}, + + + #{urls,jdbcType=VARCHAR}, + + + #{httpMethod,jdbcType=TINYINT}, + + + #{httpHeaders,jdbcType=VARCHAR}, + + + #{httpQueryParams,jdbcType=VARCHAR}, + + + #{msgPushType,jdbcType=TINYINT}, + + + #{httpToken,jdbcType=VARCHAR}, + + + #{pushMaxConcurrency,jdbcType=INTEGER}, + + + #{actions,jdbcType=VARCHAR}, + + + #{config,jdbcType=VARCHAR}, + + + #{state,jdbcType=TINYINT}, + + + #{extraParams,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + #{groovy,jdbcType=LONGVARCHAR}, + + + #{transit,jdbcType=LONGVARCHAR}, + + + + + + update consume_subscription + + + id = #{record.id,jdbcType=BIGINT}, + + + group_id = #{record.groupId,jdbcType=BIGINT}, + + + group_name = #{record.groupName,jdbcType=VARCHAR}, + + + topic_id = #{record.topicId,jdbcType=BIGINT}, + + + topic_name = #{record.topicName,jdbcType=VARCHAR}, + + + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + + + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + + + pressure_traffic = #{record.pressureTraffic,jdbcType=TINYINT}, + + + max_tps = #{record.maxTps,jdbcType=DOUBLE}, + + + alarm_type = #{record.alarmType,jdbcType=TINYINT}, + + + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + + + alarm_level = #{record.alarmLevel,jdbcType=TINYINT}, + + + alarm_msg_lag = #{record.alarmMsgLag,jdbcType=INTEGER}, + + + alarm_delay_time = #{record.alarmDelayTime,jdbcType=INTEGER}, + + + api_type = #{record.apiType,jdbcType=TINYINT}, + + + consume_timeout = #{record.consumeTimeout,jdbcType=INTEGER}, + + + error_retry_times = #{record.errorRetryTimes,jdbcType=INTEGER}, + + + retry_intervals = #{record.retryIntervals,jdbcType=VARCHAR}, + + + msg_type = #{record.msgType,jdbcType=TINYINT}, + + + enable_groovy = #{record.enableGroovy,jdbcType=TINYINT}, + + + enable_transit = #{record.enableTransit,jdbcType=TINYINT}, + + + enable_order = #{record.enableOrder,jdbcType=TINYINT}, + + + order_key = #{record.orderKey,jdbcType=VARCHAR}, + + + consume_type = #{record.consumeType,jdbcType=TINYINT}, + + + big_data_type = #{record.bigDataType,jdbcType=TINYINT}, + + + big_data_config = #{record.bigDataConfig,jdbcType=VARCHAR}, + + + urls = #{record.urls,jdbcType=VARCHAR}, + + + http_method = #{record.httpMethod,jdbcType=TINYINT}, + + + http_headers = #{record.httpHeaders,jdbcType=VARCHAR}, + + + http_query_params = #{record.httpQueryParams,jdbcType=VARCHAR}, + + + msg_push_type = #{record.msgPushType,jdbcType=TINYINT}, + + + http_token = #{record.httpToken,jdbcType=VARCHAR}, + + + push_max_concurrency = #{record.pushMaxConcurrency,jdbcType=INTEGER}, + + + actions = #{record.actions,jdbcType=VARCHAR}, + + + config = #{record.config,jdbcType=VARCHAR}, + + + state = #{record.state,jdbcType=TINYINT}, + + + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + groovy = #{record.groovy,jdbcType=LONGVARCHAR}, + + + transit = #{record.transit,jdbcType=LONGVARCHAR}, + + + + + + + + update consume_subscription + set id = #{record.id,jdbcType=BIGINT}, + group_id = #{record.groupId,jdbcType=BIGINT}, + group_name = #{record.groupName,jdbcType=VARCHAR}, + topic_id = #{record.topicId,jdbcType=BIGINT}, + topic_name = #{record.topicName,jdbcType=VARCHAR}, + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + pressure_traffic = #{record.pressureTraffic,jdbcType=TINYINT}, + max_tps = #{record.maxTps,jdbcType=DOUBLE}, + alarm_type = #{record.alarmType,jdbcType=TINYINT}, + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + alarm_level = #{record.alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{record.alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{record.alarmDelayTime,jdbcType=INTEGER}, + api_type = #{record.apiType,jdbcType=TINYINT}, + consume_timeout = #{record.consumeTimeout,jdbcType=INTEGER}, + error_retry_times = #{record.errorRetryTimes,jdbcType=INTEGER}, + retry_intervals = #{record.retryIntervals,jdbcType=VARCHAR}, + msg_type = #{record.msgType,jdbcType=TINYINT}, + enable_groovy = #{record.enableGroovy,jdbcType=TINYINT}, + enable_transit = #{record.enableTransit,jdbcType=TINYINT}, + enable_order = #{record.enableOrder,jdbcType=TINYINT}, + order_key = #{record.orderKey,jdbcType=VARCHAR}, + consume_type = #{record.consumeType,jdbcType=TINYINT}, + big_data_type = #{record.bigDataType,jdbcType=TINYINT}, + big_data_config = #{record.bigDataConfig,jdbcType=VARCHAR}, + urls = #{record.urls,jdbcType=VARCHAR}, + http_method = #{record.httpMethod,jdbcType=TINYINT}, + http_headers = #{record.httpHeaders,jdbcType=VARCHAR}, + http_query_params = #{record.httpQueryParams,jdbcType=VARCHAR}, + msg_push_type = #{record.msgPushType,jdbcType=TINYINT}, + http_token = #{record.httpToken,jdbcType=VARCHAR}, + push_max_concurrency = #{record.pushMaxConcurrency,jdbcType=INTEGER}, + actions = #{record.actions,jdbcType=VARCHAR}, + config = #{record.config,jdbcType=VARCHAR}, + state = #{record.state,jdbcType=TINYINT}, + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + groovy = #{record.groovy,jdbcType=LONGVARCHAR}, + transit = #{record.transit,jdbcType=LONGVARCHAR} + + + + + + update consume_subscription + set id = #{record.id,jdbcType=BIGINT}, + group_id = #{record.groupId,jdbcType=BIGINT}, + group_name = #{record.groupName,jdbcType=VARCHAR}, + topic_id = #{record.topicId,jdbcType=BIGINT}, + topic_name = #{record.topicName,jdbcType=VARCHAR}, + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + pressure_traffic = #{record.pressureTraffic,jdbcType=TINYINT}, + max_tps = #{record.maxTps,jdbcType=DOUBLE}, + alarm_type = #{record.alarmType,jdbcType=TINYINT}, + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + alarm_level = #{record.alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{record.alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{record.alarmDelayTime,jdbcType=INTEGER}, + api_type = #{record.apiType,jdbcType=TINYINT}, + consume_timeout = #{record.consumeTimeout,jdbcType=INTEGER}, + error_retry_times = #{record.errorRetryTimes,jdbcType=INTEGER}, + retry_intervals = #{record.retryIntervals,jdbcType=VARCHAR}, + msg_type = #{record.msgType,jdbcType=TINYINT}, + enable_groovy = #{record.enableGroovy,jdbcType=TINYINT}, + enable_transit = #{record.enableTransit,jdbcType=TINYINT}, + enable_order = #{record.enableOrder,jdbcType=TINYINT}, + order_key = #{record.orderKey,jdbcType=VARCHAR}, + consume_type = #{record.consumeType,jdbcType=TINYINT}, + big_data_type = #{record.bigDataType,jdbcType=TINYINT}, + big_data_config = #{record.bigDataConfig,jdbcType=VARCHAR}, + urls = #{record.urls,jdbcType=VARCHAR}, + http_method = #{record.httpMethod,jdbcType=TINYINT}, + http_headers = #{record.httpHeaders,jdbcType=VARCHAR}, + http_query_params = #{record.httpQueryParams,jdbcType=VARCHAR}, + msg_push_type = #{record.msgPushType,jdbcType=TINYINT}, + http_token = #{record.httpToken,jdbcType=VARCHAR}, + push_max_concurrency = #{record.pushMaxConcurrency,jdbcType=INTEGER}, + actions = #{record.actions,jdbcType=VARCHAR}, + config = #{record.config,jdbcType=VARCHAR}, + state = #{record.state,jdbcType=TINYINT}, + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update consume_subscription + + + group_id = #{groupId,jdbcType=BIGINT}, + + + group_name = #{groupName,jdbcType=VARCHAR}, + + + topic_id = #{topicId,jdbcType=BIGINT}, + + + topic_name = #{topicName,jdbcType=VARCHAR}, + + + cluster_id = #{clusterId,jdbcType=BIGINT}, + + + cluster_name = #{clusterName,jdbcType=VARCHAR}, + + + pressure_traffic = #{pressureTraffic,jdbcType=TINYINT}, + + + max_tps = #{maxTps,jdbcType=DOUBLE}, + + + alarm_type = #{alarmType,jdbcType=TINYINT}, + + + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + + + alarm_level = #{alarmLevel,jdbcType=TINYINT}, + + + alarm_msg_lag = #{alarmMsgLag,jdbcType=INTEGER}, + + + alarm_delay_time = #{alarmDelayTime,jdbcType=INTEGER}, + + + api_type = #{apiType,jdbcType=TINYINT}, + + + consume_timeout = #{consumeTimeout,jdbcType=INTEGER}, + + + error_retry_times = #{errorRetryTimes,jdbcType=INTEGER}, + + + retry_intervals = #{retryIntervals,jdbcType=VARCHAR}, + + + msg_type = #{msgType,jdbcType=TINYINT}, + + + enable_groovy = #{enableGroovy,jdbcType=TINYINT}, + + + enable_transit = #{enableTransit,jdbcType=TINYINT}, + + + enable_order = #{enableOrder,jdbcType=TINYINT}, + + + order_key = #{orderKey,jdbcType=VARCHAR}, + + + consume_type = #{consumeType,jdbcType=TINYINT}, + + + big_data_type = #{bigDataType,jdbcType=TINYINT}, + + + big_data_config = #{bigDataConfig,jdbcType=VARCHAR}, + + + urls = #{urls,jdbcType=VARCHAR}, + + + http_method = #{httpMethod,jdbcType=TINYINT}, + + + http_headers = #{httpHeaders,jdbcType=VARCHAR}, + + + http_query_params = #{httpQueryParams,jdbcType=VARCHAR}, + + + msg_push_type = #{msgPushType,jdbcType=TINYINT}, + + + http_token = #{httpToken,jdbcType=VARCHAR}, + + + push_max_concurrency = #{pushMaxConcurrency,jdbcType=INTEGER}, + + + actions = #{actions,jdbcType=VARCHAR}, + + + config = #{config,jdbcType=VARCHAR}, + + + state = #{state,jdbcType=TINYINT}, + + + extra_params = #{extraParams,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + groovy = #{groovy,jdbcType=LONGVARCHAR}, + + + transit = #{transit,jdbcType=LONGVARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update consume_subscription + set group_id = #{groupId,jdbcType=BIGINT}, + group_name = #{groupName,jdbcType=VARCHAR}, + topic_id = #{topicId,jdbcType=BIGINT}, + topic_name = #{topicName,jdbcType=VARCHAR}, + cluster_id = #{clusterId,jdbcType=BIGINT}, + cluster_name = #{clusterName,jdbcType=VARCHAR}, + pressure_traffic = #{pressureTraffic,jdbcType=TINYINT}, + max_tps = #{maxTps,jdbcType=DOUBLE}, + alarm_type = #{alarmType,jdbcType=TINYINT}, + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + alarm_level = #{alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{alarmDelayTime,jdbcType=INTEGER}, + api_type = #{apiType,jdbcType=TINYINT}, + consume_timeout = #{consumeTimeout,jdbcType=INTEGER}, + error_retry_times = #{errorRetryTimes,jdbcType=INTEGER}, + retry_intervals = #{retryIntervals,jdbcType=VARCHAR}, + msg_type = #{msgType,jdbcType=TINYINT}, + enable_groovy = #{enableGroovy,jdbcType=TINYINT}, + enable_transit = #{enableTransit,jdbcType=TINYINT}, + enable_order = #{enableOrder,jdbcType=TINYINT}, + order_key = #{orderKey,jdbcType=VARCHAR}, + consume_type = #{consumeType,jdbcType=TINYINT}, + big_data_type = #{bigDataType,jdbcType=TINYINT}, + big_data_config = #{bigDataConfig,jdbcType=VARCHAR}, + urls = #{urls,jdbcType=VARCHAR}, + http_method = #{httpMethod,jdbcType=TINYINT}, + http_headers = #{httpHeaders,jdbcType=VARCHAR}, + http_query_params = #{httpQueryParams,jdbcType=VARCHAR}, + msg_push_type = #{msgPushType,jdbcType=TINYINT}, + http_token = #{httpToken,jdbcType=VARCHAR}, + push_max_concurrency = #{pushMaxConcurrency,jdbcType=INTEGER}, + actions = #{actions,jdbcType=VARCHAR}, + config = #{config,jdbcType=VARCHAR}, + state = #{state,jdbcType=TINYINT}, + extra_params = #{extraParams,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + groovy = #{groovy,jdbcType=LONGVARCHAR}, + transit = #{transit,jdbcType=LONGVARCHAR} + where id = #{id,jdbcType=BIGINT} + + + update consume_subscription + set group_id = #{groupId,jdbcType=BIGINT}, + group_name = #{groupName,jdbcType=VARCHAR}, + topic_id = #{topicId,jdbcType=BIGINT}, + topic_name = #{topicName,jdbcType=VARCHAR}, + cluster_id = #{clusterId,jdbcType=BIGINT}, + cluster_name = #{clusterName,jdbcType=VARCHAR}, + pressure_traffic = #{pressureTraffic,jdbcType=TINYINT}, + max_tps = #{maxTps,jdbcType=DOUBLE}, + alarm_type = #{alarmType,jdbcType=TINYINT}, + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + alarm_level = #{alarmLevel,jdbcType=TINYINT}, + alarm_msg_lag = #{alarmMsgLag,jdbcType=INTEGER}, + alarm_delay_time = #{alarmDelayTime,jdbcType=INTEGER}, + api_type = #{apiType,jdbcType=TINYINT}, + consume_timeout = #{consumeTimeout,jdbcType=INTEGER}, + error_retry_times = #{errorRetryTimes,jdbcType=INTEGER}, + retry_intervals = #{retryIntervals,jdbcType=VARCHAR}, + msg_type = #{msgType,jdbcType=TINYINT}, + enable_groovy = #{enableGroovy,jdbcType=TINYINT}, + enable_transit = #{enableTransit,jdbcType=TINYINT}, + enable_order = #{enableOrder,jdbcType=TINYINT}, + order_key = #{orderKey,jdbcType=VARCHAR}, + consume_type = #{consumeType,jdbcType=TINYINT}, + big_data_type = #{bigDataType,jdbcType=TINYINT}, + big_data_config = #{bigDataConfig,jdbcType=VARCHAR}, + urls = #{urls,jdbcType=VARCHAR}, + http_method = #{httpMethod,jdbcType=TINYINT}, + http_headers = #{httpHeaders,jdbcType=VARCHAR}, + http_query_params = #{httpQueryParams,jdbcType=VARCHAR}, + msg_push_type = #{msgPushType,jdbcType=TINYINT}, + http_token = #{httpToken,jdbcType=VARCHAR}, + push_max_concurrency = #{pushMaxConcurrency,jdbcType=INTEGER}, + actions = #{actions,jdbcType=VARCHAR}, + config = #{config,jdbcType=VARCHAR}, + state = #{state,jdbcType=TINYINT}, + extra_params = #{extraParams,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/IdcMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/IdcMapper.xml new file mode 100644 index 0000000..f5d3b7c --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/IdcMapper.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, remark, is_delete, create_time, modify_time + + + + + delete from idc + where id = #{id,jdbcType=BIGINT} + + + delete from idc + + + + + + insert into idc (name, remark, is_delete, + create_time, modify_time) + values (#{name,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR}, #{isDelete,jdbcType=TINYINT}, + #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP}) + + + insert into idc + + + name, + + + remark, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{name,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update idc + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update idc + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update idc + + + name = #{name,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update idc + set name = #{name,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/MqServerMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/MqServerMapper.xml new file mode 100644 index 0000000..ab40a90 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/MqServerMapper.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, addr, type, is_delete, create_time, modify_time + + + + + delete from mq_server + where id = #{id,jdbcType=BIGINT} + + + delete from mq_server + + + + + + insert into mq_server (name, addr, type, + is_delete, create_time, modify_time + ) + values (#{name,jdbcType=VARCHAR}, #{addr,jdbcType=VARCHAR}, #{type,jdbcType=TINYINT}, + #{isDelete,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP} + ) + + + insert into mq_server + + + name, + + + addr, + + + type, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{name,jdbcType=VARCHAR}, + + + #{addr,jdbcType=VARCHAR}, + + + #{type,jdbcType=TINYINT}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update mq_server + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + addr = #{record.addr,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=TINYINT}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update mq_server + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + addr = #{record.addr,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=TINYINT}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update mq_server + + + name = #{name,jdbcType=VARCHAR}, + + + addr = #{addr,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=TINYINT}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update mq_server + set name = #{name,jdbcType=VARCHAR}, + addr = #{addr,jdbcType=VARCHAR}, + type = #{type,jdbcType=TINYINT}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/NodeMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/NodeMapper.xml new file mode 100644 index 0000000..23c3bc0 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/NodeMapper.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, cluster_id, model_id, master_id, host, node_type, is_delete, create_time, modify_time + + + + + delete from node + where id = #{id,jdbcType=BIGINT} + + + delete from node + + + + + + insert into node (cluster_id, model_id, master_id, + host, node_type, is_delete, + create_time, modify_time) + values (#{clusterId,jdbcType=BIGINT}, #{modelId,jdbcType=BIGINT}, #{masterId,jdbcType=BIGINT}, + #{host,jdbcType=VARCHAR}, #{nodeType,jdbcType=TINYINT}, #{isDelete,jdbcType=TINYINT}, + #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP}) + + + insert into node + + + cluster_id, + + + model_id, + + + master_id, + + + host, + + + node_type, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{clusterId,jdbcType=BIGINT}, + + + #{modelId,jdbcType=BIGINT}, + + + #{masterId,jdbcType=BIGINT}, + + + #{host,jdbcType=VARCHAR}, + + + #{nodeType,jdbcType=TINYINT}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update node + + + id = #{record.id,jdbcType=BIGINT}, + + + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + + + model_id = #{record.modelId,jdbcType=BIGINT}, + + + master_id = #{record.masterId,jdbcType=BIGINT}, + + + host = #{record.host,jdbcType=VARCHAR}, + + + node_type = #{record.nodeType,jdbcType=TINYINT}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update node + set id = #{record.id,jdbcType=BIGINT}, + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + model_id = #{record.modelId,jdbcType=BIGINT}, + master_id = #{record.masterId,jdbcType=BIGINT}, + host = #{record.host,jdbcType=VARCHAR}, + node_type = #{record.nodeType,jdbcType=TINYINT}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update node + + + cluster_id = #{clusterId,jdbcType=BIGINT}, + + + model_id = #{modelId,jdbcType=BIGINT}, + + + master_id = #{masterId,jdbcType=BIGINT}, + + + host = #{host,jdbcType=VARCHAR}, + + + node_type = #{nodeType,jdbcType=TINYINT}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update node + set cluster_id = #{clusterId,jdbcType=BIGINT}, + model_id = #{modelId,jdbcType=BIGINT}, + master_id = #{masterId,jdbcType=BIGINT}, + host = #{host,jdbcType=VARCHAR}, + node_type = #{nodeType,jdbcType=TINYINT}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfCustomMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfCustomMapper.xml new file mode 100644 index 0000000..291fb38 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfCustomMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfMapper.xml new file mode 100644 index 0000000..c56f5eb --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicConfMapper.xml @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, topic_id, topic_name, cluster_id, cluster_name, mq_server_id, mq_server_name, + server_idc_id, server_idc_name, client_idc, produce_tps, msg_avg_size, msg_max_size, + state, config, is_delete, create_time, modify_time + + + + + delete from topic_conf + where id = #{id,jdbcType=BIGINT} + + + delete from topic_conf + + + + + + insert into topic_conf (topic_id, topic_name, cluster_id, + cluster_name, mq_server_id, mq_server_name, + server_idc_id, server_idc_name, client_idc, + produce_tps, msg_avg_size, msg_max_size, + state, config, is_delete, + create_time, modify_time) + values (#{topicId,jdbcType=BIGINT}, #{topicName,jdbcType=VARCHAR}, #{clusterId,jdbcType=BIGINT}, + #{clusterName,jdbcType=VARCHAR}, #{mqServerId,jdbcType=BIGINT}, #{mqServerName,jdbcType=VARCHAR}, + #{serverIdcId,jdbcType=BIGINT}, #{serverIdcName,jdbcType=VARCHAR}, #{clientIdc,jdbcType=VARCHAR}, + #{produceTps,jdbcType=INTEGER}, #{msgAvgSize,jdbcType=INTEGER}, #{msgMaxSize,jdbcType=INTEGER}, + #{state,jdbcType=TINYINT}, #{config,jdbcType=VARCHAR}, #{isDelete,jdbcType=TINYINT}, + #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP}) + + + insert into topic_conf + + + topic_id, + + + topic_name, + + + cluster_id, + + + cluster_name, + + + mq_server_id, + + + mq_server_name, + + + server_idc_id, + + + server_idc_name, + + + client_idc, + + + produce_tps, + + + msg_avg_size, + + + msg_max_size, + + + state, + + + config, + + + is_delete, + + + create_time, + + + modify_time, + + + + + #{topicId,jdbcType=BIGINT}, + + + #{topicName,jdbcType=VARCHAR}, + + + #{clusterId,jdbcType=BIGINT}, + + + #{clusterName,jdbcType=VARCHAR}, + + + #{mqServerId,jdbcType=BIGINT}, + + + #{mqServerName,jdbcType=VARCHAR}, + + + #{serverIdcId,jdbcType=BIGINT}, + + + #{serverIdcName,jdbcType=VARCHAR}, + + + #{clientIdc,jdbcType=VARCHAR}, + + + #{produceTps,jdbcType=INTEGER}, + + + #{msgAvgSize,jdbcType=INTEGER}, + + + #{msgMaxSize,jdbcType=INTEGER}, + + + #{state,jdbcType=TINYINT}, + + + #{config,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + + + + update topic_conf + + + id = #{record.id,jdbcType=BIGINT}, + + + topic_id = #{record.topicId,jdbcType=BIGINT}, + + + topic_name = #{record.topicName,jdbcType=VARCHAR}, + + + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + + + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + + + mq_server_id = #{record.mqServerId,jdbcType=BIGINT}, + + + mq_server_name = #{record.mqServerName,jdbcType=VARCHAR}, + + + server_idc_id = #{record.serverIdcId,jdbcType=BIGINT}, + + + server_idc_name = #{record.serverIdcName,jdbcType=VARCHAR}, + + + client_idc = #{record.clientIdc,jdbcType=VARCHAR}, + + + produce_tps = #{record.produceTps,jdbcType=INTEGER}, + + + msg_avg_size = #{record.msgAvgSize,jdbcType=INTEGER}, + + + msg_max_size = #{record.msgMaxSize,jdbcType=INTEGER}, + + + state = #{record.state,jdbcType=TINYINT}, + + + config = #{record.config,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + + + + + + update topic_conf + set id = #{record.id,jdbcType=BIGINT}, + topic_id = #{record.topicId,jdbcType=BIGINT}, + topic_name = #{record.topicName,jdbcType=VARCHAR}, + cluster_id = #{record.clusterId,jdbcType=BIGINT}, + cluster_name = #{record.clusterName,jdbcType=VARCHAR}, + mq_server_id = #{record.mqServerId,jdbcType=BIGINT}, + mq_server_name = #{record.mqServerName,jdbcType=VARCHAR}, + server_idc_id = #{record.serverIdcId,jdbcType=BIGINT}, + server_idc_name = #{record.serverIdcName,jdbcType=VARCHAR}, + client_idc = #{record.clientIdc,jdbcType=VARCHAR}, + produce_tps = #{record.produceTps,jdbcType=INTEGER}, + msg_avg_size = #{record.msgAvgSize,jdbcType=INTEGER}, + msg_max_size = #{record.msgMaxSize,jdbcType=INTEGER}, + state = #{record.state,jdbcType=TINYINT}, + config = #{record.config,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update topic_conf + + + topic_id = #{topicId,jdbcType=BIGINT}, + + + topic_name = #{topicName,jdbcType=VARCHAR}, + + + cluster_id = #{clusterId,jdbcType=BIGINT}, + + + cluster_name = #{clusterName,jdbcType=VARCHAR}, + + + mq_server_id = #{mqServerId,jdbcType=BIGINT}, + + + mq_server_name = #{mqServerName,jdbcType=VARCHAR}, + + + server_idc_id = #{serverIdcId,jdbcType=BIGINT}, + + + server_idc_name = #{serverIdcName,jdbcType=VARCHAR}, + + + client_idc = #{clientIdc,jdbcType=VARCHAR}, + + + produce_tps = #{produceTps,jdbcType=INTEGER}, + + + msg_avg_size = #{msgAvgSize,jdbcType=INTEGER}, + + + msg_max_size = #{msgMaxSize,jdbcType=INTEGER}, + + + state = #{state,jdbcType=TINYINT}, + + + config = #{config,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + update topic_conf + set topic_id = #{topicId,jdbcType=BIGINT}, + topic_name = #{topicName,jdbcType=VARCHAR}, + cluster_id = #{clusterId,jdbcType=BIGINT}, + cluster_name = #{clusterName,jdbcType=VARCHAR}, + mq_server_id = #{mqServerId,jdbcType=BIGINT}, + mq_server_name = #{mqServerName,jdbcType=VARCHAR}, + server_idc_id = #{serverIdcId,jdbcType=BIGINT}, + server_idc_name = #{serverIdcName,jdbcType=VARCHAR}, + client_idc = #{clientIdc,jdbcType=VARCHAR}, + produce_tps = #{produceTps,jdbcType=INTEGER}, + msg_avg_size = #{msgAvgSize,jdbcType=INTEGER}, + msg_max_size = #{msgMaxSize,jdbcType=INTEGER}, + state = #{state,jdbcType=TINYINT}, + config = #{config,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicCustomMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicCustomMapper.xml new file mode 100644 index 0000000..128bada --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicCustomMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicMapper.xml b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicMapper.xml new file mode 100644 index 0000000..52f432e --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/sqlmap/ddmq/TopicMapper.xml @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, topic_name, service, department, contacters, alarm_group, alarm_is_enable, delay_topic, + need_audit_subinfo, enable_schema_verify, produce_mode, produce_mode_mapper, state, + config, description, extra_params, is_delete, create_time, modify_time + + + topic_schema + + + + + + delete from topic + where id = #{id,jdbcType=BIGINT} + + + delete from topic + + + + + + insert into topic (topic_name, service, department, + contacters, alarm_group, alarm_is_enable, + delay_topic, need_audit_subinfo, enable_schema_verify, + produce_mode, produce_mode_mapper, state, + config, description, extra_params, + is_delete, create_time, modify_time, + topic_schema) + values (#{topicName,jdbcType=VARCHAR}, #{service,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, + #{contacters,jdbcType=VARCHAR}, #{alarmGroup,jdbcType=VARCHAR}, #{alarmIsEnable,jdbcType=TINYINT}, + #{delayTopic,jdbcType=TINYINT}, #{needAuditSubinfo,jdbcType=TINYINT}, #{enableSchemaVerify,jdbcType=TINYINT}, + #{produceMode,jdbcType=TINYINT}, #{produceModeMapper,jdbcType=VARCHAR}, #{state,jdbcType=TINYINT}, + #{config,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{extraParams,jdbcType=VARCHAR}, + #{isDelete,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, #{modifyTime,jdbcType=TIMESTAMP}, + #{topicSchema,jdbcType=LONGVARCHAR}) + + + insert into topic + + + topic_name, + + + service, + + + department, + + + contacters, + + + alarm_group, + + + alarm_is_enable, + + + delay_topic, + + + need_audit_subinfo, + + + enable_schema_verify, + + + produce_mode, + + + produce_mode_mapper, + + + state, + + + config, + + + description, + + + extra_params, + + + is_delete, + + + create_time, + + + modify_time, + + + topic_schema, + + + + + #{topicName,jdbcType=VARCHAR}, + + + #{service,jdbcType=VARCHAR}, + + + #{department,jdbcType=VARCHAR}, + + + #{contacters,jdbcType=VARCHAR}, + + + #{alarmGroup,jdbcType=VARCHAR}, + + + #{alarmIsEnable,jdbcType=TINYINT}, + + + #{delayTopic,jdbcType=TINYINT}, + + + #{needAuditSubinfo,jdbcType=TINYINT}, + + + #{enableSchemaVerify,jdbcType=TINYINT}, + + + #{produceMode,jdbcType=TINYINT}, + + + #{produceModeMapper,jdbcType=VARCHAR}, + + + #{state,jdbcType=TINYINT}, + + + #{config,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{extraParams,jdbcType=VARCHAR}, + + + #{isDelete,jdbcType=TINYINT}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{modifyTime,jdbcType=TIMESTAMP}, + + + #{topicSchema,jdbcType=LONGVARCHAR}, + + + + + + update topic + + + id = #{record.id,jdbcType=BIGINT}, + + + topic_name = #{record.topicName,jdbcType=VARCHAR}, + + + service = #{record.service,jdbcType=VARCHAR}, + + + department = #{record.department,jdbcType=VARCHAR}, + + + contacters = #{record.contacters,jdbcType=VARCHAR}, + + + alarm_group = #{record.alarmGroup,jdbcType=VARCHAR}, + + + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + + + delay_topic = #{record.delayTopic,jdbcType=TINYINT}, + + + need_audit_subinfo = #{record.needAuditSubinfo,jdbcType=TINYINT}, + + + enable_schema_verify = #{record.enableSchemaVerify,jdbcType=TINYINT}, + + + produce_mode = #{record.produceMode,jdbcType=TINYINT}, + + + produce_mode_mapper = #{record.produceModeMapper,jdbcType=VARCHAR}, + + + state = #{record.state,jdbcType=TINYINT}, + + + config = #{record.config,jdbcType=VARCHAR}, + + + description = #{record.description,jdbcType=VARCHAR}, + + + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + + + is_delete = #{record.isDelete,jdbcType=TINYINT}, + + + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + + + topic_schema = #{record.topicSchema,jdbcType=LONGVARCHAR}, + + + + + + + + update topic + set id = #{record.id,jdbcType=BIGINT}, + topic_name = #{record.topicName,jdbcType=VARCHAR}, + service = #{record.service,jdbcType=VARCHAR}, + department = #{record.department,jdbcType=VARCHAR}, + contacters = #{record.contacters,jdbcType=VARCHAR}, + alarm_group = #{record.alarmGroup,jdbcType=VARCHAR}, + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + delay_topic = #{record.delayTopic,jdbcType=TINYINT}, + need_audit_subinfo = #{record.needAuditSubinfo,jdbcType=TINYINT}, + enable_schema_verify = #{record.enableSchemaVerify,jdbcType=TINYINT}, + produce_mode = #{record.produceMode,jdbcType=TINYINT}, + produce_mode_mapper = #{record.produceModeMapper,jdbcType=VARCHAR}, + state = #{record.state,jdbcType=TINYINT}, + config = #{record.config,jdbcType=VARCHAR}, + description = #{record.description,jdbcType=VARCHAR}, + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP}, + topic_schema = #{record.topicSchema,jdbcType=LONGVARCHAR} + + + + + + update topic + set id = #{record.id,jdbcType=BIGINT}, + topic_name = #{record.topicName,jdbcType=VARCHAR}, + service = #{record.service,jdbcType=VARCHAR}, + department = #{record.department,jdbcType=VARCHAR}, + contacters = #{record.contacters,jdbcType=VARCHAR}, + alarm_group = #{record.alarmGroup,jdbcType=VARCHAR}, + alarm_is_enable = #{record.alarmIsEnable,jdbcType=TINYINT}, + delay_topic = #{record.delayTopic,jdbcType=TINYINT}, + need_audit_subinfo = #{record.needAuditSubinfo,jdbcType=TINYINT}, + enable_schema_verify = #{record.enableSchemaVerify,jdbcType=TINYINT}, + produce_mode = #{record.produceMode,jdbcType=TINYINT}, + produce_mode_mapper = #{record.produceModeMapper,jdbcType=VARCHAR}, + state = #{record.state,jdbcType=TINYINT}, + config = #{record.config,jdbcType=VARCHAR}, + description = #{record.description,jdbcType=VARCHAR}, + extra_params = #{record.extraParams,jdbcType=VARCHAR}, + is_delete = #{record.isDelete,jdbcType=TINYINT}, + create_time = #{record.createTime,jdbcType=TIMESTAMP}, + modify_time = #{record.modifyTime,jdbcType=TIMESTAMP} + + + + + + update topic + + + topic_name = #{topicName,jdbcType=VARCHAR}, + + + service = #{service,jdbcType=VARCHAR}, + + + department = #{department,jdbcType=VARCHAR}, + + + contacters = #{contacters,jdbcType=VARCHAR}, + + + alarm_group = #{alarmGroup,jdbcType=VARCHAR}, + + + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + + + delay_topic = #{delayTopic,jdbcType=TINYINT}, + + + need_audit_subinfo = #{needAuditSubinfo,jdbcType=TINYINT}, + + + enable_schema_verify = #{enableSchemaVerify,jdbcType=TINYINT}, + + + produce_mode = #{produceMode,jdbcType=TINYINT}, + + + produce_mode_mapper = #{produceModeMapper,jdbcType=VARCHAR}, + + + state = #{state,jdbcType=TINYINT}, + + + config = #{config,jdbcType=VARCHAR}, + + + description = #{description,jdbcType=VARCHAR}, + + + extra_params = #{extraParams,jdbcType=VARCHAR}, + + + is_delete = #{isDelete,jdbcType=TINYINT}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + + + topic_schema = #{topicSchema,jdbcType=LONGVARCHAR}, + + + where id = #{id,jdbcType=BIGINT} + + + update topic + set topic_name = #{topicName,jdbcType=VARCHAR}, + service = #{service,jdbcType=VARCHAR}, + department = #{department,jdbcType=VARCHAR}, + contacters = #{contacters,jdbcType=VARCHAR}, + alarm_group = #{alarmGroup,jdbcType=VARCHAR}, + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + delay_topic = #{delayTopic,jdbcType=TINYINT}, + need_audit_subinfo = #{needAuditSubinfo,jdbcType=TINYINT}, + enable_schema_verify = #{enableSchemaVerify,jdbcType=TINYINT}, + produce_mode = #{produceMode,jdbcType=TINYINT}, + produce_mode_mapper = #{produceModeMapper,jdbcType=VARCHAR}, + state = #{state,jdbcType=TINYINT}, + config = #{config,jdbcType=VARCHAR}, + description = #{description,jdbcType=VARCHAR}, + extra_params = #{extraParams,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP}, + topic_schema = #{topicSchema,jdbcType=LONGVARCHAR} + where id = #{id,jdbcType=BIGINT} + + + update topic + set topic_name = #{topicName,jdbcType=VARCHAR}, + service = #{service,jdbcType=VARCHAR}, + department = #{department,jdbcType=VARCHAR}, + contacters = #{contacters,jdbcType=VARCHAR}, + alarm_group = #{alarmGroup,jdbcType=VARCHAR}, + alarm_is_enable = #{alarmIsEnable,jdbcType=TINYINT}, + delay_topic = #{delayTopic,jdbcType=TINYINT}, + need_audit_subinfo = #{needAuditSubinfo,jdbcType=TINYINT}, + enable_schema_verify = #{enableSchemaVerify,jdbcType=TINYINT}, + produce_mode = #{produceMode,jdbcType=TINYINT}, + produce_mode_mapper = #{produceModeMapper,jdbcType=VARCHAR}, + state = #{state,jdbcType=TINYINT}, + config = #{config,jdbcType=VARCHAR}, + description = #{description,jdbcType=VARCHAR}, + extra_params = #{extraParams,jdbcType=VARCHAR}, + is_delete = #{isDelete,jdbcType=TINYINT}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + modify_time = #{modifyTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/.gitkeep b/carrera-console/carrera-boot/src/main/resources/static/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/carrera-console/carrera-boot/src/main/resources/static/1.index.css b/carrera-console/carrera-boot/src/main/resources/static/1.index.css new file mode 100644 index 0000000..511960b --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/1.index.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-3024-day.CodeMirror{background:#f7f7f7;color:#3a3432}.cm-s-3024-day div.CodeMirror-selected{background:#d6d5d4}.cm-s-3024-day .CodeMirror-line::selection,.cm-s-3024-day .CodeMirror-line>span::selection,.cm-s-3024-day .CodeMirror-line>span>span::selection{background:#d6d5d4}.cm-s-3024-day .CodeMirror-line::-moz-selection,.cm-s-3024-day .CodeMirror-line>span::-moz-selection,.cm-s-3024-day .CodeMirror-line>span>span::selection{background:#d9d9d9}.cm-s-3024-day .CodeMirror-gutters{background:#f7f7f7;border-right:0}.cm-s-3024-day .CodeMirror-guttermarker{color:#db2d20}.cm-s-3024-day .CodeMirror-guttermarker-subtle,.cm-s-3024-day .CodeMirror-linenumber{color:#807d7c}.cm-s-3024-day .CodeMirror-cursor{border-left:1px solid #5c5855}.cm-s-3024-day span.cm-comment{color:#cdab53}.cm-s-3024-day span.cm-atom,.cm-s-3024-day span.cm-number{color:#a16a94}.cm-s-3024-day span.cm-attribute,.cm-s-3024-day span.cm-property{color:#01a252}.cm-s-3024-day span.cm-keyword{color:#db2d20}.cm-s-3024-day span.cm-string{color:#fded02}.cm-s-3024-day span.cm-variable{color:#01a252}.cm-s-3024-day span.cm-variable-2{color:#01a0e4}.cm-s-3024-day span.cm-def{color:#e8bbd0}.cm-s-3024-day span.cm-bracket{color:#3a3432}.cm-s-3024-day span.cm-tag{color:#db2d20}.cm-s-3024-day span.cm-link{color:#a16a94}.cm-s-3024-day span.cm-error{background:#db2d20;color:#5c5855}.cm-s-3024-day .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-3024-day .CodeMirror-matchingbracket{text-decoration:underline;color:#a16a94!important}.cm-s-3024-night.CodeMirror{background:#090300;color:#d6d5d4}.cm-s-3024-night div.CodeMirror-selected{background:#3a3432}.cm-s-3024-night .CodeMirror-line::selection,.cm-s-3024-night .CodeMirror-line>span::selection,.cm-s-3024-night .CodeMirror-line>span>span::selection{background:rgba(58,52,50,.99)}.cm-s-3024-night .CodeMirror-line::-moz-selection,.cm-s-3024-night .CodeMirror-line>span::-moz-selection,.cm-s-3024-night .CodeMirror-line>span>span::-moz-selection{background:rgba(58,52,50,.99)}.cm-s-3024-night .CodeMirror-gutters{background:#090300;border-right:0}.cm-s-3024-night .CodeMirror-guttermarker{color:#db2d20}.cm-s-3024-night .CodeMirror-guttermarker-subtle,.cm-s-3024-night .CodeMirror-linenumber{color:#5c5855}.cm-s-3024-night .CodeMirror-cursor{border-left:1px solid #807d7c}.cm-s-3024-night span.cm-comment{color:#cdab53}.cm-s-3024-night span.cm-atom,.cm-s-3024-night span.cm-number{color:#a16a94}.cm-s-3024-night span.cm-attribute,.cm-s-3024-night span.cm-property{color:#01a252}.cm-s-3024-night span.cm-keyword{color:#db2d20}.cm-s-3024-night span.cm-string{color:#fded02}.cm-s-3024-night span.cm-variable{color:#01a252}.cm-s-3024-night span.cm-variable-2{color:#01a0e4}.cm-s-3024-night span.cm-def{color:#e8bbd0}.cm-s-3024-night span.cm-bracket{color:#d6d5d4}.cm-s-3024-night span.cm-tag{color:#db2d20}.cm-s-3024-night span.cm-link{color:#a16a94}.cm-s-3024-night span.cm-error{background:#db2d20;color:#807d7c}.cm-s-3024-night .CodeMirror-activeline-background{background:#2f2f2f}.cm-s-3024-night .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-abcdef.CodeMirror{background:#0f0f0f;color:#defdef}.cm-s-abcdef div.CodeMirror-selected{background:#515151}.cm-s-abcdef .CodeMirror-line::selection,.cm-s-abcdef .CodeMirror-line>span::selection,.cm-s-abcdef .CodeMirror-line>span>span::selection{background:rgba(56,56,56,.99)}.cm-s-abcdef .CodeMirror-line::-moz-selection,.cm-s-abcdef .CodeMirror-line>span::-moz-selection,.cm-s-abcdef .CodeMirror-line>span>span::-moz-selection{background:rgba(56,56,56,.99)}.cm-s-abcdef .CodeMirror-gutters{background:#555;border-right:2px solid #314151}.cm-s-abcdef .CodeMirror-guttermarker{color:#222}.cm-s-abcdef .CodeMirror-guttermarker-subtle{color:azure}.cm-s-abcdef .CodeMirror-linenumber{color:#fff}.cm-s-abcdef .CodeMirror-cursor{border-left:1px solid #0f0}.cm-s-abcdef span.cm-keyword{color:#b8860b;font-weight:700}.cm-s-abcdef span.cm-atom{color:#77f}.cm-s-abcdef span.cm-number{color:violet}.cm-s-abcdef span.cm-def{color:#fffabc}.cm-s-abcdef span.cm-variable{color:#abcdef}.cm-s-abcdef span.cm-variable-2{color:#cacbcc}.cm-s-abcdef span.cm-type,.cm-s-abcdef span.cm-variable-3{color:#def}.cm-s-abcdef span.cm-property{color:#fedcba}.cm-s-abcdef span.cm-operator{color:#ff0}.cm-s-abcdef span.cm-comment{color:#7a7b7c;font-style:italic}.cm-s-abcdef span.cm-string{color:#2b4}.cm-s-abcdef span.cm-meta{color:#c9f}.cm-s-abcdef span.cm-qualifier{color:#fff700}.cm-s-abcdef span.cm-builtin{color:#30aabc}.cm-s-abcdef span.cm-bracket{color:#8a8a8a}.cm-s-abcdef span.cm-tag{color:#fd4}.cm-s-abcdef span.cm-attribute{color:#df0}.cm-s-abcdef span.cm-error{color:red}.cm-s-abcdef span.cm-header{color:#7fffd4;font-weight:700}.cm-s-abcdef span.cm-link{color:#8a2be2}.cm-s-abcdef .CodeMirror-activeline-background{background:#314151}.cm-s-ambiance.CodeMirror{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.cm-s-ambiance .cm-header{color:#00f}.cm-s-ambiance .cm-quote{color:#24c2c7}.cm-s-ambiance .cm-keyword{color:#cda869}.cm-s-ambiance .cm-atom{color:#cf7ea9}.cm-s-ambiance .cm-number{color:#78cf8a}.cm-s-ambiance .cm-def{color:#aac6e3}.cm-s-ambiance .cm-variable{color:#ffb795}.cm-s-ambiance .cm-variable-2{color:#eed1b3}.cm-s-ambiance .cm-type,.cm-s-ambiance .cm-variable-3{color:#faded3}.cm-s-ambiance .cm-property{color:#eed1b3}.cm-s-ambiance .cm-operator{color:#fa8d6a}.cm-s-ambiance .cm-comment{color:#555;font-style:italic}.cm-s-ambiance .cm-string{color:#8f9d6a}.cm-s-ambiance .cm-string-2{color:#9d937c}.cm-s-ambiance .cm-meta{color:#d2a8a1}.cm-s-ambiance .cm-qualifier{color:#ff0}.cm-s-ambiance .cm-builtin{color:#99c}.cm-s-ambiance .cm-bracket{color:#24c2c7}.cm-s-ambiance .cm-tag{color:#fee4ff}.cm-s-ambiance .cm-attribute{color:#9b859d}.cm-s-ambiance .cm-hr{color:pink}.cm-s-ambiance .cm-link{color:#f4c20b}.cm-s-ambiance .cm-special{color:#ff9d00}.cm-s-ambiance .cm-error{color:#af2018}.cm-s-ambiance .CodeMirror-matchingbracket{color:#0f0}.cm-s-ambiance .CodeMirror-nonmatchingbracket{color:#f22}.cm-s-ambiance div.CodeMirror-selected{background:hsla(0,0%,100%,.15)}.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-ambiance .CodeMirror-line::selection,.cm-s-ambiance .CodeMirror-line>span::selection,.cm-s-ambiance .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-ambiance .CodeMirror-line::-moz-selection,.cm-s-ambiance .CodeMirror-line>span::-moz-selection,.cm-s-ambiance .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-ambiance.CodeMirror{line-height:1.4em;color:#e6e1dc;background-color:#202020;-webkit-box-shadow:inset 0 0 10px #000;-moz-box-shadow:inset 0 0 10px #000;box-shadow:inset 0 0 10px #000}.cm-s-ambiance .CodeMirror-gutters{background:#3d3d3d;border-right:1px solid #4d4d4d;box-shadow:0 10px 20px #000}.cm-s-ambiance .CodeMirror-linenumber{text-shadow:0 1px 1px #4d4d4d;color:#111;padding:0 5px}.cm-s-ambiance .CodeMirror-guttermarker{color:#aaa}.cm-s-ambiance .CodeMirror-guttermarker-subtle{color:#111}.cm-s-ambiance .CodeMirror-cursor{border-left:1px solid #7991e8}.cm-s-ambiance .CodeMirror-activeline-background{background:none repeat scroll 0 0 hsla(0,0%,100%,.031)}.cm-s-ambiance.CodeMirror,.cm-s-ambiance .CodeMirror-gutters{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC")}.cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.cm-s-base16-dark div.CodeMirror-selected{background:#303030}.cm-s-base16-dark .CodeMirror-line::selection,.cm-s-base16-dark .CodeMirror-line>span::selection,.cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.cm-s-base16-dark .CodeMirror-line::-moz-selection,.cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}.cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.cm-s-base16-dark .CodeMirror-guttermarker-subtle,.cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.cm-s-base16-dark span.cm-comment{color:#8f5536}.cm-s-base16-dark span.cm-atom,.cm-s-base16-dark span.cm-number{color:#aa759f}.cm-s-base16-dark span.cm-attribute,.cm-s-base16-dark span.cm-property{color:#90a959}.cm-s-base16-dark span.cm-keyword{color:#ac4142}.cm-s-base16-dark span.cm-string{color:#f4bf75}.cm-s-base16-dark span.cm-variable{color:#90a959}.cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.cm-s-base16-dark span.cm-def{color:#d28445}.cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.cm-s-base16-dark span.cm-tag{color:#ac4142}.cm-s-base16-dark span.cm-link{color:#aa759f}.cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.cm-s-base16-light .CodeMirror-line::selection,.cm-s-base16-light .CodeMirror-line>span::selection,.cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.cm-s-base16-light .CodeMirror-line::-moz-selection,.cm-s-base16-light .CodeMirror-line>span::-moz-selection,.cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}.cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.cm-s-base16-light .CodeMirror-guttermarker-subtle,.cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.cm-s-base16-light span.cm-comment{color:#8f5536}.cm-s-base16-light span.cm-atom,.cm-s-base16-light span.cm-number{color:#aa759f}.cm-s-base16-light span.cm-attribute,.cm-s-base16-light span.cm-property{color:#90a959}.cm-s-base16-light span.cm-keyword{color:#ac4142}.cm-s-base16-light span.cm-string{color:#f4bf75}.cm-s-base16-light span.cm-variable{color:#90a959}.cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.cm-s-base16-light span.cm-def{color:#d28445}.cm-s-base16-light span.cm-bracket{color:#202020}.cm-s-base16-light span.cm-tag{color:#ac4142}.cm-s-base16-light span.cm-link{color:#aa759f}.cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.cm-s-base16-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-bespin.CodeMirror{background:#28211c;color:#9d9b97}.cm-s-bespin div.CodeMirror-selected{background:#36312e!important}.cm-s-bespin .CodeMirror-gutters{background:#28211c;border-right:0}.cm-s-bespin .CodeMirror-linenumber{color:#666}.cm-s-bespin .CodeMirror-cursor{border-left:1px solid #797977!important}.cm-s-bespin span.cm-comment{color:#937121}.cm-s-bespin span.cm-atom,.cm-s-bespin span.cm-number{color:#9b859d}.cm-s-bespin span.cm-attribute,.cm-s-bespin span.cm-property{color:#54be0d}.cm-s-bespin span.cm-keyword{color:#cf6a4c}.cm-s-bespin span.cm-string{color:#f9ee98}.cm-s-bespin span.cm-variable{color:#54be0d}.cm-s-bespin span.cm-variable-2{color:#5ea6ea}.cm-s-bespin span.cm-def{color:#cf7d34}.cm-s-bespin span.cm-error{background:#cf6a4c;color:#797977}.cm-s-bespin span.cm-bracket{color:#9d9b97}.cm-s-bespin span.cm-tag{color:#cf6a4c}.cm-s-bespin span.cm-link{color:#9b859d}.cm-s-bespin .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-bespin .CodeMirror-activeline-background{background:#404040}.cm-s-blackboard.CodeMirror{background:#0c1021;color:#f8f8f8}.cm-s-blackboard div.CodeMirror-selected{background:#253b76}.cm-s-blackboard .CodeMirror-line::selection,.cm-s-blackboard .CodeMirror-line>span::selection,.cm-s-blackboard .CodeMirror-line>span>span::selection{background:rgba(37,59,118,.99)}.cm-s-blackboard .CodeMirror-line::-moz-selection,.cm-s-blackboard .CodeMirror-line>span::-moz-selection,.cm-s-blackboard .CodeMirror-line>span>span::-moz-selection{background:rgba(37,59,118,.99)}.cm-s-blackboard .CodeMirror-gutters{background:#0c1021;border-right:0}.cm-s-blackboard .CodeMirror-guttermarker{color:#fbde2d}.cm-s-blackboard .CodeMirror-guttermarker-subtle,.cm-s-blackboard .CodeMirror-linenumber{color:#888}.cm-s-blackboard .CodeMirror-cursor{border-left:1px solid #a7a7a7}.cm-s-blackboard .cm-keyword{color:#fbde2d}.cm-s-blackboard .cm-atom,.cm-s-blackboard .cm-number{color:#d8fa3c}.cm-s-blackboard .cm-def{color:#8da6ce}.cm-s-blackboard .cm-variable{color:#ff6400}.cm-s-blackboard .cm-operator{color:#fbde2d}.cm-s-blackboard .cm-comment{color:#aeaeae}.cm-s-blackboard .cm-string,.cm-s-blackboard .cm-string-2{color:#61ce3c}.cm-s-blackboard .cm-meta{color:#d8fa3c}.cm-s-blackboard .cm-attribute,.cm-s-blackboard .cm-builtin,.cm-s-blackboard .cm-tag{color:#8da6ce}.cm-s-blackboard .cm-header{color:#ff6400}.cm-s-blackboard .cm-hr{color:#aeaeae}.cm-s-blackboard .cm-link{color:#8da6ce}.cm-s-blackboard .cm-error{background:#9d1e15;color:#f8f8f8}.cm-s-blackboard .CodeMirror-activeline-background{background:#3c3636}.cm-s-blackboard .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-cobalt.CodeMirror{background:#002240;color:#fff}.cm-s-cobalt div.CodeMirror-selected{background:#b36539}.cm-s-cobalt .CodeMirror-line::selection,.cm-s-cobalt .CodeMirror-line>span::selection,.cm-s-cobalt .CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)}.cm-s-cobalt .CodeMirror-line::-moz-selection,.cm-s-cobalt .CodeMirror-line>span::-moz-selection,.cm-s-cobalt .CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)}.cm-s-cobalt .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}.cm-s-cobalt .CodeMirror-guttermarker{color:#ffee80}.cm-s-cobalt .CodeMirror-guttermarker-subtle,.cm-s-cobalt .CodeMirror-linenumber{color:#d0d0d0}.cm-s-cobalt .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-cobalt span.cm-comment{color:#08f}.cm-s-cobalt span.cm-atom{color:#845dc4}.cm-s-cobalt span.cm-attribute,.cm-s-cobalt span.cm-number{color:#ff80e1}.cm-s-cobalt span.cm-keyword{color:#ffee80}.cm-s-cobalt span.cm-string{color:#3ad900}.cm-s-cobalt span.cm-meta{color:#ff9d00}.cm-s-cobalt span.cm-tag,.cm-s-cobalt span.cm-variable-2{color:#9effff}.cm-s-cobalt .cm-type,.cm-s-cobalt span.cm-def,.cm-s-cobalt span.cm-variable-3{color:#fff}.cm-s-cobalt span.cm-bracket{color:#d8d8d8}.cm-s-cobalt span.cm-builtin,.cm-s-cobalt span.cm-special{color:#ff9e59}.cm-s-cobalt span.cm-link{color:#845dc4}.cm-s-cobalt span.cm-error{color:#9d1e15}.cm-s-cobalt .CodeMirror-activeline-background{background:#002d57}.cm-s-cobalt .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-colorforth.CodeMirror{background:#000;color:#f8f8f8}.cm-s-colorforth .CodeMirror-gutters{background:#0a001f;border-right:1px solid #aaa}.cm-s-colorforth .CodeMirror-guttermarker{color:#ffbd40}.cm-s-colorforth .CodeMirror-guttermarker-subtle{color:#78846f}.cm-s-colorforth .CodeMirror-linenumber{color:#bababa}.cm-s-colorforth .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-colorforth span.cm-comment{color:#ededed}.cm-s-colorforth span.cm-def{color:#ff1c1c;font-weight:700}.cm-s-colorforth span.cm-keyword{color:#ffd900}.cm-s-colorforth span.cm-builtin{color:#00d95a}.cm-s-colorforth span.cm-variable{color:#73ff00}.cm-s-colorforth span.cm-string{color:#007bff}.cm-s-colorforth span.cm-number{color:#00c4ff}.cm-s-colorforth span.cm-atom{color:#606060}.cm-s-colorforth span.cm-variable-2{color:#eee}.cm-s-colorforth span.cm-type,.cm-s-colorforth span.cm-variable-3{color:#ddd}.cm-s-colorforth span.cm-meta{color:#ff0}.cm-s-colorforth span.cm-qualifier{color:#fff700}.cm-s-colorforth span.cm-bracket{color:#cc7}.cm-s-colorforth span.cm-tag{color:#ffbd40}.cm-s-colorforth span.cm-attribute{color:#fff700}.cm-s-colorforth span.cm-error{color:red}.cm-s-colorforth div.CodeMirror-selected{background:#333d53}.cm-s-colorforth span.cm-compilation{background:hsla(0,0%,100%,.12)}.cm-s-colorforth .CodeMirror-activeline-background{background:#253540}.cm-s-darcula{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.cm-s-darcula.CodeMirror{background:#2b2b2b;color:#a9b7c6}.cm-s-darcula span.cm-meta{color:#bbb529}.cm-s-darcula span.cm-number{color:#6897bb}.cm-s-darcula span.cm-keyword{color:#cc7832;line-height:1em;font-weight:700}.cm-s-darcula span.cm-def{color:#a9b7c6;font-style:italic}.cm-s-darcula span.cm-variable,.cm-s-darcula span.cm-variable-2{color:#a9b7c6}.cm-s-darcula span.cm-variable-3{color:#9876aa}.cm-s-darcula span.cm-type{color:#abc;font-weight:700}.cm-s-darcula span.cm-property{color:#ffc66d}.cm-s-darcula span.cm-operator{color:#a9b7c6}.cm-s-darcula span.cm-string,.cm-s-darcula span.cm-string-2{color:#6a8759}.cm-s-darcula span.cm-comment{color:#61a151;font-style:italic}.cm-s-darcula span.cm-atom,.cm-s-darcula span.cm-link{color:#cc7832}.cm-s-darcula span.cm-error{color:#bc3f3c}.cm-s-darcula span.cm-tag{color:#629755;font-weight:700;font-style:italic;text-decoration:underline}.cm-s-darcula span.cm-attribute{color:#6897bb}.cm-s-darcula span.cm-qualifier{color:#6a8759}.cm-s-darcula span.cm-bracket{color:#a9b7c6}.cm-s-darcula span.cm-builtin,.cm-s-darcula span.cm-special{color:#ff9e59}.cm-s-darcula .CodeMirror-cursor{border-left:1px solid #a9b7c6}.cm-s-darcula .CodeMirror-activeline-background{background:#323232}.cm-s-darcula .CodeMirror-gutters{background:#313335;border-right:1px solid #313335}.cm-s-darcula .CodeMirror-guttermarker{color:#ffee80}.cm-s-darcula .CodeMirror-guttermarker-subtle{color:#d0d0d0}.cm-s-darcula .CodeMirrir-linenumber{color:#606366}.cm-s-darcula .CodeMirror-matchingbracket{background-color:#3b514d;color:#ffef28!important;font-weight:700}.cm-s-darcula div.CodeMirror-selected{background:#214283}.CodeMirror-hints.darcula{font-family:Menlo,Monaco,Consolas,Courier New,monospace;color:#9c9e9e;background-color:#3b3e3f!important}.CodeMirror-hints.darcula .CodeMirror-hint-active{background-color:#494d4e!important;color:#9c9e9e!important}.cm-s-dracula.CodeMirror,.cm-s-dracula .CodeMirror-gutters{background-color:#282a36!important;color:#f8f8f2!important;border:none}.cm-s-dracula .CodeMirror-gutters{color:#282a36}.cm-s-dracula .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-dracula .CodeMirror-linenumber{color:#6d8a88}.cm-s-dracula .CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::selection,.cm-s-dracula .CodeMirror-line>span::selection,.cm-s-dracula .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-line::-moz-selection,.cm-s-dracula .CodeMirror-line>span::-moz-selection,.cm-s-dracula .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-dracula span.cm-comment{color:#6272a4}.cm-s-dracula span.cm-string,.cm-s-dracula span.cm-string-2{color:#f1fa8c}.cm-s-dracula span.cm-number{color:#bd93f9}.cm-s-dracula span.cm-variable{color:#50fa7b}.cm-s-dracula span.cm-variable-2{color:#fff}.cm-s-dracula span.cm-def{color:#50fa7b}.cm-s-dracula span.cm-keyword,.cm-s-dracula span.cm-operator{color:#ff79c6}.cm-s-dracula span.cm-atom{color:#bd93f9}.cm-s-dracula span.cm-meta{color:#f8f8f2}.cm-s-dracula span.cm-tag{color:#ff79c6}.cm-s-dracula span.cm-attribute,.cm-s-dracula span.cm-qualifier{color:#50fa7b}.cm-s-dracula span.cm-property{color:#66d9ef}.cm-s-dracula span.cm-builtin{color:#50fa7b}.cm-s-dracula span.cm-type,.cm-s-dracula span.cm-variable-3{color:#ffb86c}.cm-s-dracula .CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)}.cm-s-dracula .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-duotone-dark.CodeMirror{background:#2a2734;color:#6c6783}.cm-s-duotone-dark div.CodeMirror-selected{background:#545167!important}.cm-s-duotone-dark .CodeMirror-gutters{background:#2a2734;border-right:0}.cm-s-duotone-dark .CodeMirror-linenumber{color:#545167}.cm-s-duotone-dark .CodeMirror-cursor{border-left:1px solid #ffad5c;border-right:.5em solid #ffad5c;opacity:.5}.cm-s-duotone-dark .CodeMirror-activeline-background{background:#363342;opacity:.5}.cm-s-duotone-dark .cm-fat-cursor .CodeMirror-cursor{background:#ffad5c;opacity:.5}.cm-s-duotone-dark span.cm-atom,.cm-s-duotone-dark span.cm-attribute,.cm-s-duotone-dark span.cm-hr,.cm-s-duotone-dark span.cm-keyword,.cm-s-duotone-dark span.cm-link,.cm-s-duotone-dark span.cm-number,.cm-s-duotone-dark span.cm-quote,.cm-s-duotone-dark span.cm-variable{color:#fc9}.cm-s-duotone-dark span.cm-property{color:#9a86fd}.cm-s-duotone-dark span.cm-negative,.cm-s-duotone-dark span.cm-punctuation,.cm-s-duotone-dark span.cm-unit{color:#e09142}.cm-s-duotone-dark span.cm-string{color:#ffb870}.cm-s-duotone-dark span.cm-operator{color:#ffad5c}.cm-s-duotone-dark span.cm-positive{color:#6a51e6}.cm-s-duotone-dark span.cm-string-2,.cm-s-duotone-dark span.cm-type,.cm-s-duotone-dark span.cm-url,.cm-s-duotone-dark span.cm-variable-2,.cm-s-duotone-dark span.cm-variable-3{color:#7a63ee}.cm-s-duotone-dark span.cm-builtin,.cm-s-duotone-dark span.cm-def,.cm-s-duotone-dark span.cm-em,.cm-s-duotone-dark span.cm-header,.cm-s-duotone-dark span.cm-qualifier,.cm-s-duotone-dark span.cm-tag{color:#eeebff}.cm-s-duotone-dark span.cm-bracket,.cm-s-duotone-dark span.cm-comment{color:#6c6783}.cm-s-duotone-dark span.cm-error,.cm-s-duotone-dark span.cm-invalidchar{color:red}.cm-s-duotone-dark span.cm-header{font-weight:400}.cm-s-duotone-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#eeebff!important}.cm-s-duotone-light.CodeMirror{background:#faf8f5;color:#b29762}.cm-s-duotone-light div.CodeMirror-selected{background:#e3dcce!important}.cm-s-duotone-light .CodeMirror-gutters{background:#faf8f5;border-right:0}.cm-s-duotone-light .CodeMirror-linenumber{color:#cdc4b1}.cm-s-duotone-light .CodeMirror-cursor{border-left:1px solid #93abdc;border-right:.5em solid #93abdc;opacity:.5}.cm-s-duotone-light .CodeMirror-activeline-background{background:#e3dcce;opacity:.5}.cm-s-duotone-light .cm-fat-cursor .CodeMirror-cursor{background:#93abdc;opacity:.5}.cm-s-duotone-light-light span.cm-hr,.cm-s-duotone-light-light span.cm-link,.cm-s-duotone-light span.cm-atom,.cm-s-duotone-light span.cm-attribute,.cm-s-duotone-light span.cm-keyword,.cm-s-duotone-light span.cm-number,.cm-s-duotone-light span.cm-quote,.cm-s-duotone-light span.cm-variable{color:#063289}.cm-s-duotone-light span.cm-property{color:#b29762}.cm-s-duotone-light span.cm-negative,.cm-s-duotone-light span.cm-punctuation,.cm-s-duotone-light span.cm-unit{color:#063289}.cm-s-duotone-light span.cm-operator,.cm-s-duotone-light span.cm-string{color:#1659df}.cm-s-duotone-light span.cm-positive,.cm-s-duotone-light span.cm-string-2,.cm-s-duotone-light span.cm-type,.cm-s-duotone-light span.cm-url,.cm-s-duotone-light span.cm-variable-2,.cm-s-duotone-light span.cm-variable-3{color:#896724}.cm-s-duotone-light span.cm-builtin,.cm-s-duotone-light span.cm-def,.cm-s-duotone-light span.cm-em,.cm-s-duotone-light span.cm-header,.cm-s-duotone-light span.cm-qualifier,.cm-s-duotone-light span.cm-tag{color:#2d2006}.cm-s-duotone-light span.cm-bracket,.cm-s-duotone-light span.cm-comment{color:#b6ad9a}.cm-s-duotone-light span.cm-error,.cm-s-duotone-light span.cm-invalidchar{color:red}.cm-s-duotone-light span.cm-header{font-weight:400}.cm-s-duotone-light .CodeMirror-matchingbracket{text-decoration:underline;color:#faf8f5!important}.cm-s-eclipse span.cm-meta{color:#ff1717}.cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:700;color:#7f0055}.cm-s-eclipse span.cm-atom{color:#219}.cm-s-eclipse span.cm-number{color:#164}.cm-s-eclipse span.cm-def{color:#00f}.cm-s-eclipse span.cm-variable{color:#000}.cm-s-eclipse span.cm-type,.cm-s-eclipse span.cm-variable-2,.cm-s-eclipse span.cm-variable-3{color:#0000c0}.cm-s-eclipse span.cm-operator,.cm-s-eclipse span.cm-property{color:#000}.cm-s-eclipse span.cm-comment{color:#3f7f5f}.cm-s-eclipse span.cm-string{color:#2a00ff}.cm-s-eclipse span.cm-string-2{color:#f50}.cm-s-eclipse span.cm-qualifier{color:#555}.cm-s-eclipse span.cm-builtin{color:#30a}.cm-s-eclipse span.cm-bracket{color:#cc7}.cm-s-eclipse span.cm-tag{color:#170}.cm-s-eclipse span.cm-attribute{color:#00c}.cm-s-eclipse span.cm-link{color:#219}.cm-s-eclipse span.cm-error{color:red}.cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}.cm-s-elegant span.cm-atom,.cm-s-elegant span.cm-number,.cm-s-elegant span.cm-string{color:#762}.cm-s-elegant span.cm-comment{color:#262;font-style:italic;line-height:1em}.cm-s-elegant span.cm-meta{color:#555;font-style:italic;line-height:1em}.cm-s-elegant span.cm-variable{color:#000}.cm-s-elegant span.cm-variable-2{color:#b11}.cm-s-elegant span.cm-qualifier{color:#555}.cm-s-elegant span.cm-keyword{color:#730}.cm-s-elegant span.cm-builtin{color:#30a}.cm-s-elegant span.cm-link{color:#762}.cm-s-elegant span.cm-error{background-color:#fdd}.cm-s-elegant .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-elegant .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}.cm-s-erlang-dark.CodeMirror{background:#002240;color:#fff}.cm-s-erlang-dark div.CodeMirror-selected{background:#b36539}.cm-s-erlang-dark .CodeMirror-line::selection,.cm-s-erlang-dark .CodeMirror-line>span::selection,.cm-s-erlang-dark .CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)}.cm-s-erlang-dark .CodeMirror-line::-moz-selection,.cm-s-erlang-dark .CodeMirror-line>span::-moz-selection,.cm-s-erlang-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)}.cm-s-erlang-dark .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}.cm-s-erlang-dark .CodeMirror-guttermarker{color:#fff}.cm-s-erlang-dark .CodeMirror-guttermarker-subtle,.cm-s-erlang-dark .CodeMirror-linenumber{color:#d0d0d0}.cm-s-erlang-dark .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-erlang-dark span.cm-quote{color:#ccc}.cm-s-erlang-dark span.cm-atom{color:#f133f1}.cm-s-erlang-dark span.cm-attribute{color:#ff80e1}.cm-s-erlang-dark span.cm-bracket{color:#ff9d00}.cm-s-erlang-dark span.cm-builtin{color:#eaa}.cm-s-erlang-dark span.cm-comment{color:#77f}.cm-s-erlang-dark span.cm-def{color:#e7a}.cm-s-erlang-dark span.cm-keyword{color:#ffee80}.cm-s-erlang-dark span.cm-meta{color:#50fefe}.cm-s-erlang-dark span.cm-number{color:#ffd0d0}.cm-s-erlang-dark span.cm-operator{color:#d55}.cm-s-erlang-dark span.cm-property,.cm-s-erlang-dark span.cm-qualifier{color:#ccc}.cm-s-erlang-dark span.cm-special{color:#fbb}.cm-s-erlang-dark span.cm-string{color:#3ad900}.cm-s-erlang-dark span.cm-string-2{color:#ccc}.cm-s-erlang-dark span.cm-tag{color:#9effff}.cm-s-erlang-dark span.cm-variable{color:#50fe50}.cm-s-erlang-dark span.cm-variable-2{color:#e0e}.cm-s-erlang-dark span.cm-type,.cm-s-erlang-dark span.cm-variable-3{color:#ccc}.cm-s-erlang-dark span.cm-error{color:#9d1e15}.cm-s-erlang-dark .CodeMirror-activeline-background{background:#013461}.cm-s-erlang-dark .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-gruvbox-dark.CodeMirror,.cm-s-gruvbox-dark .CodeMirror-gutters{background-color:#282828;color:#bdae93}.cm-s-gruvbox-dark .CodeMirror-gutters{background:#282828;border-right:0}.cm-s-gruvbox-dark .CodeMirror-linenumber{color:#7c6f64}.cm-s-gruvbox-dark .CodeMirror-cursor{border-left:1px solid #ebdbb2}.cm-s-gruvbox-dark div.CodeMirror-selected{background:#928374}.cm-s-gruvbox-dark span.cm-meta{color:#83a598}.cm-s-gruvbox-dark span.cm-comment{color:#928374}.cm-s-gruvbox-dark span.cm-number,span.cm-atom{color:#d3869b}.cm-s-gruvbox-dark span.cm-keyword{color:#f84934}.cm-s-gruvbox-dark span.cm-variable,.cm-s-gruvbox-dark span.cm-variable-2{color:#ebdbb2}.cm-s-gruvbox-dark span.cm-type,.cm-s-gruvbox-dark span.cm-variable-3{color:#fabd2f}.cm-s-gruvbox-dark span.cm-callee,.cm-s-gruvbox-dark span.cm-def,.cm-s-gruvbox-dark span.cm-operator,.cm-s-gruvbox-dark span.cm-property{color:#ebdbb2}.cm-s-gruvbox-dark span.cm-string{color:#b8bb26}.cm-s-gruvbox-dark span.cm-attribute,.cm-s-gruvbox-dark span.cm-qualifier,.cm-s-gruvbox-dark span.cm-string-2{color:#8ec07c}.cm-s-gruvbox-dark .CodeMirror-activeline-background{background:#3c3836}.cm-s-gruvbox-dark .CodeMirror-matchingbracket{background:#928374;color:#282828!important}.cm-s-gruvbox-dark span.cm-builtin,.cm-s-gruvbox-dark span.cm-tag{color:#fe8019}.cm-s-hopscotch.CodeMirror{background:#322931;color:#d5d3d5}.cm-s-hopscotch div.CodeMirror-selected{background:#433b42!important}.cm-s-hopscotch .CodeMirror-gutters{background:#322931;border-right:0}.cm-s-hopscotch .CodeMirror-linenumber{color:#797379}.cm-s-hopscotch .CodeMirror-cursor{border-left:1px solid #989498!important}.cm-s-hopscotch span.cm-comment{color:#b33508}.cm-s-hopscotch span.cm-atom,.cm-s-hopscotch span.cm-number{color:#c85e7c}.cm-s-hopscotch span.cm-attribute,.cm-s-hopscotch span.cm-property{color:#8fc13e}.cm-s-hopscotch span.cm-keyword{color:#dd464c}.cm-s-hopscotch span.cm-string{color:#fdcc59}.cm-s-hopscotch span.cm-variable{color:#8fc13e}.cm-s-hopscotch span.cm-variable-2{color:#1290bf}.cm-s-hopscotch span.cm-def{color:#fd8b19}.cm-s-hopscotch span.cm-error{background:#dd464c;color:#989498}.cm-s-hopscotch span.cm-bracket{color:#d5d3d5}.cm-s-hopscotch span.cm-tag{color:#dd464c}.cm-s-hopscotch span.cm-link{color:#c85e7c}.cm-s-hopscotch .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-hopscotch .CodeMirror-activeline-background{background:#302020}.cm-s-icecoder{color:#666;background:#1d1d1b}.cm-s-icecoder span.cm-keyword{color:#eee;font-weight:700}.cm-s-icecoder span.cm-atom{color:#e1c76e}.cm-s-icecoder span.cm-number{color:#6cb5d9}.cm-s-icecoder span.cm-def{color:#b9ca4a}.cm-s-icecoder span.cm-variable{color:#6cb5d9}.cm-s-icecoder span.cm-variable-2{color:#cc1e5c}.cm-s-icecoder span.cm-type,.cm-s-icecoder span.cm-variable-3{color:#f9602c}.cm-s-icecoder span.cm-property{color:#eee}.cm-s-icecoder span.cm-operator{color:#9179bb}.cm-s-icecoder span.cm-comment{color:#97a3aa}.cm-s-icecoder span.cm-string{color:#b9ca4a}.cm-s-icecoder span.cm-string-2{color:#6cb5d9}.cm-s-icecoder span.cm-meta,.cm-s-icecoder span.cm-qualifier{color:#555}.cm-s-icecoder span.cm-builtin{color:#214e7b}.cm-s-icecoder span.cm-bracket{color:#cc7}.cm-s-icecoder span.cm-tag{color:#e8e8e8}.cm-s-icecoder span.cm-attribute{color:#099}.cm-s-icecoder span.cm-header{color:#6a0d6a}.cm-s-icecoder span.cm-quote{color:#186718}.cm-s-icecoder span.cm-hr{color:#888}.cm-s-icecoder span.cm-link{color:#e1c76e}.cm-s-icecoder span.cm-error{color:#d00}.cm-s-icecoder .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-icecoder div.CodeMirror-selected{color:#fff;background:#037}.cm-s-icecoder .CodeMirror-gutters{background:#1d1d1b;min-width:41px;border-right:0}.cm-s-icecoder .CodeMirror-linenumber{color:#555;cursor:default}.cm-s-icecoder .CodeMirror-matchingbracket{color:#fff!important;background:#555!important}.cm-s-icecoder .CodeMirror-activeline-background{background:#000}.cm-s-idea span.cm-meta{color:olive}.cm-s-idea span.cm-number{color:#00f}.cm-s-idea span.cm-keyword{line-height:1em;font-weight:700;color:navy}.cm-s-idea span.cm-atom{font-weight:700;color:navy}.cm-s-idea span.cm-def,.cm-s-idea span.cm-operator,.cm-s-idea span.cm-property,.cm-s-idea span.cm-type,.cm-s-idea span.cm-variable,.cm-s-idea span.cm-variable-2,.cm-s-idea span.cm-variable-3{color:#000}.cm-s-idea span.cm-comment{color:grey}.cm-s-idea span.cm-string,.cm-s-idea span.cm-string-2{color:green}.cm-s-idea span.cm-qualifier{color:#555}.cm-s-idea span.cm-error{color:red}.cm-s-idea span.cm-attribute{color:#00f}.cm-s-idea span.cm-tag{color:navy}.cm-s-idea span.cm-link{color:#00f}.cm-s-idea .CodeMirror-activeline-background{background:#fffae3}.cm-s-idea span.cm-builtin{color:#30a}.cm-s-idea span.cm-bracket{color:#cc7}.cm-s-idea{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif}.cm-s-idea .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}.CodeMirror-hints.idea{font-family:Menlo,Monaco,Consolas,Courier New,monospace;color:#616569;background-color:#ebf3fd!important}.CodeMirror-hints.idea .CodeMirror-hint-active{background-color:#a2b8c9!important;color:#5c6065!important}.cm-s-isotope.CodeMirror{background:#000;color:#e0e0e0}.cm-s-isotope div.CodeMirror-selected{background:#404040!important}.cm-s-isotope .CodeMirror-gutters{background:#000;border-right:0}.cm-s-isotope .CodeMirror-linenumber{color:grey}.cm-s-isotope .CodeMirror-cursor{border-left:1px solid silver!important}.cm-s-isotope span.cm-comment{color:#30f}.cm-s-isotope span.cm-atom,.cm-s-isotope span.cm-number{color:#c0f}.cm-s-isotope span.cm-attribute,.cm-s-isotope span.cm-property{color:#3f0}.cm-s-isotope span.cm-keyword{color:red}.cm-s-isotope span.cm-string{color:#f09}.cm-s-isotope span.cm-variable{color:#3f0}.cm-s-isotope span.cm-variable-2{color:#06f}.cm-s-isotope span.cm-def{color:#f90}.cm-s-isotope span.cm-error{background:red;color:silver}.cm-s-isotope span.cm-bracket{color:#e0e0e0}.cm-s-isotope span.cm-tag{color:red}.cm-s-isotope span.cm-link{color:#c0f}.cm-s-isotope .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-isotope .CodeMirror-activeline-background{background:#202020}.cm-s-lesser-dark{line-height:1.3em}.cm-s-lesser-dark.CodeMirror{background:#262626;color:#ebefe7;text-shadow:0 -1px 1px #262626}.cm-s-lesser-dark div.CodeMirror-selected{background:#45443b}.cm-s-lesser-dark .CodeMirror-line::selection,.cm-s-lesser-dark .CodeMirror-line>span::selection,.cm-s-lesser-dark .CodeMirror-line>span>span::selection{background:rgba(69,68,59,.99)}.cm-s-lesser-dark .CodeMirror-line::-moz-selection,.cm-s-lesser-dark .CodeMirror-line>span::-moz-selection,.cm-s-lesser-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(69,68,59,.99)}.cm-s-lesser-dark .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-lesser-dark pre{padding:0 8px}.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket{color:#7efc7e}.cm-s-lesser-dark .CodeMirror-gutters{background:#262626;border-right:1px solid #aaa}.cm-s-lesser-dark .CodeMirror-guttermarker{color:#599eff}.cm-s-lesser-dark .CodeMirror-guttermarker-subtle,.cm-s-lesser-dark .CodeMirror-linenumber{color:#777}.cm-s-lesser-dark span.cm-header{color:#a0a}.cm-s-lesser-dark span.cm-quote{color:#090}.cm-s-lesser-dark span.cm-keyword{color:#599eff}.cm-s-lesser-dark span.cm-atom{color:#c2b470}.cm-s-lesser-dark span.cm-number{color:#b35e4d}.cm-s-lesser-dark span.cm-def{color:#fff}.cm-s-lesser-dark span.cm-variable{color:#d9bf8c}.cm-s-lesser-dark span.cm-variable-2{color:#669199}.cm-s-lesser-dark span.cm-type,.cm-s-lesser-dark span.cm-variable-3{color:#fff}.cm-s-lesser-dark span.cm-operator,.cm-s-lesser-dark span.cm-property{color:#92a75c}.cm-s-lesser-dark span.cm-comment{color:#666}.cm-s-lesser-dark span.cm-string{color:#bcd279}.cm-s-lesser-dark span.cm-string-2{color:#f50}.cm-s-lesser-dark span.cm-meta{color:#738c73}.cm-s-lesser-dark span.cm-qualifier{color:#555}.cm-s-lesser-dark span.cm-builtin{color:#ff9e59}.cm-s-lesser-dark span.cm-bracket{color:#ebefe7}.cm-s-lesser-dark span.cm-tag{color:#669199}.cm-s-lesser-dark span.cm-attribute{color:#81a4d5}.cm-s-lesser-dark span.cm-hr{color:#999}.cm-s-lesser-dark span.cm-link{color:#00c}.cm-s-lesser-dark span.cm-error{color:#9d1e15}.cm-s-lesser-dark .CodeMirror-activeline-background{background:#3c3a3a}.cm-s-lesser-dark .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-liquibyte.CodeMirror{background-color:#000;color:#fff;line-height:1.2em;font-size:1em}.cm-s-liquibyte .CodeMirror-focused .cm-matchhighlight{text-decoration:underline;text-decoration-color:#0f0;text-decoration-style:wavy}.cm-s-liquibyte .cm-trailingspace{text-decoration:line-through;text-decoration-color:red;text-decoration-style:dotted}.cm-s-liquibyte .cm-tab{text-decoration:line-through;text-decoration-color:#404040;text-decoration-style:dotted}.cm-s-liquibyte .CodeMirror-gutters{background-color:#262626;border-right:1px solid #505050;padding-right:.8em}.cm-s-liquibyte .CodeMirror-gutter-elt div{font-size:1.2em}.cm-s-liquibyte .CodeMirror-linenumber{color:#606060;padding-left:0}.cm-s-liquibyte .CodeMirror-cursor{border-left:1px solid #eee}.cm-s-liquibyte span.cm-comment{color:green}.cm-s-liquibyte span.cm-def{color:#ffaf40;font-weight:700}.cm-s-liquibyte span.cm-keyword{color:#c080ff;font-weight:700}.cm-s-liquibyte span.cm-builtin{color:#ffaf40;font-weight:700}.cm-s-liquibyte span.cm-variable{color:#5967ff;font-weight:700}.cm-s-liquibyte span.cm-string{color:#ff8000}.cm-s-liquibyte span.cm-number{color:#0f0;font-weight:700}.cm-s-liquibyte span.cm-atom{color:#bf3030;font-weight:700}.cm-s-liquibyte span.cm-variable-2{color:#007f7f;font-weight:700}.cm-s-liquibyte span.cm-type,.cm-s-liquibyte span.cm-variable-3{color:#c080ff;font-weight:700}.cm-s-liquibyte span.cm-property{color:#999;font-weight:700}.cm-s-liquibyte span.cm-operator{color:#fff}.cm-s-liquibyte span.cm-meta{color:#0f0}.cm-s-liquibyte span.cm-qualifier{color:#fff700;font-weight:700}.cm-s-liquibyte span.cm-bracket{color:#cc7}.cm-s-liquibyte span.cm-tag{color:#ff0;font-weight:700}.cm-s-liquibyte span.cm-attribute{color:#c080ff;font-weight:700}.cm-s-liquibyte span.cm-error{color:red}.cm-s-liquibyte div.CodeMirror-selected{background-color:rgba(255,0,0,.25)}.cm-s-liquibyte span.cm-compilation{background-color:hsla(0,0%,100%,.12)}.cm-s-liquibyte .CodeMirror-activeline-background{background-color:rgba(0,255,0,.15)}.cm-s-liquibyte .CodeMirror span.CodeMirror-matchingbracket{color:#0f0;font-weight:700}.cm-s-liquibyte .CodeMirror span.CodeMirror-nonmatchingbracket{color:red;font-weight:700}.CodeMirror-matchingtag{background-color:rgba(150,255,0,.3)}.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover,.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div:hover{background-color:rgba(80,80,80,.7)}.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div,.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div{background-color:rgba(80,80,80,.3);border:1px solid #404040;border-radius:5px}.cm-s-liquibyte div.CodeMirror-simplescroll-vertical div{border-top:1px solid #404040;border-bottom:1px solid #404040}.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div{border-left:1px solid #404040;border-right:1px solid #404040}.cm-s-liquibyte div.CodeMirror-simplescroll-vertical{background-color:#262626}.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal{background-color:#262626;border-top:1px solid #404040}.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div,div.CodeMirror-overlayscroll-vertical div{background-color:#404040;border-radius:5px}.cm-s-liquibyte div.CodeMirror-overlayscroll-horizontal div,.cm-s-liquibyte div.CodeMirror-overlayscroll-vertical div{border:1px solid #404040}.cm-s-lucario.CodeMirror,.cm-s-lucario .CodeMirror-gutters{background-color:#2b3e50!important;color:#f8f8f2!important;border:none}.cm-s-lucario .CodeMirror-gutters{color:#2b3e50}.cm-s-lucario .CodeMirror-cursor{border-left:thin solid #e6c845}.cm-s-lucario .CodeMirror-linenumber{color:#f8f8f2}.cm-s-lucario .CodeMirror-selected{background:#243443}.cm-s-lucario .CodeMirror-line::selection,.cm-s-lucario .CodeMirror-line>span::selection,.cm-s-lucario .CodeMirror-line>span>span::selection{background:#243443}.cm-s-lucario .CodeMirror-line::-moz-selection,.cm-s-lucario .CodeMirror-line>span::-moz-selection,.cm-s-lucario .CodeMirror-line>span>span::-moz-selection{background:#243443}.cm-s-lucario span.cm-comment{color:#5c98cd}.cm-s-lucario span.cm-string,.cm-s-lucario span.cm-string-2{color:#e6db74}.cm-s-lucario span.cm-number{color:#ca94ff}.cm-s-lucario span.cm-variable,.cm-s-lucario span.cm-variable-2{color:#f8f8f2}.cm-s-lucario span.cm-def{color:#72c05d}.cm-s-lucario span.cm-operator{color:#66d9ef}.cm-s-lucario span.cm-keyword{color:#ff6541}.cm-s-lucario span.cm-atom{color:#bd93f9}.cm-s-lucario span.cm-meta{color:#f8f8f2}.cm-s-lucario span.cm-tag{color:#ff6541}.cm-s-lucario span.cm-attribute{color:#66d9ef}.cm-s-lucario span.cm-qualifier{color:#72c05d}.cm-s-lucario span.cm-property{color:#f8f8f2}.cm-s-lucario span.cm-builtin{color:#72c05d}.cm-s-lucario span.cm-type,.cm-s-lucario span.cm-variable-3{color:#ffb86c}.cm-s-lucario .CodeMirror-activeline-background{background:#243443}.cm-s-lucario .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-material.CodeMirror{background-color:#263238;color:#e9eded}.cm-s-material .CodeMirror-gutters{background:#263238;color:#537f7e;border:none}.cm-s-material .CodeMirror-guttermarker,.cm-s-material .CodeMirror-guttermarker-subtle,.cm-s-material .CodeMirror-linenumber{color:#537f7e}.cm-s-material .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-material div.CodeMirror-selected{background:hsla(0,0%,100%,.15)}.cm-s-material.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-material .CodeMirror-line::selection,.cm-s-material .CodeMirror-line>span::selection,.cm-s-material .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-material .CodeMirror-line::-moz-selection,.cm-s-material .CodeMirror-line>span::-moz-selection,.cm-s-material .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-material .CodeMirror-activeline-background{background:transparent}.cm-s-material .cm-keyword{color:#c792ea}.cm-s-material .cm-operator{color:#e9eded}.cm-s-material .cm-variable-2{color:#80cbc4}.cm-s-material .cm-type,.cm-s-material .cm-variable-3{color:#82b1ff}.cm-s-material .cm-builtin{color:#decb6b}.cm-s-material .cm-atom,.cm-s-material .cm-number{color:#f77669}.cm-s-material .cm-def{color:#e9eded}.cm-s-material .cm-string{color:#c3e88d}.cm-s-material .cm-string-2{color:#80cbc4}.cm-s-material .cm-comment{color:#546e7a}.cm-s-material .cm-variable{color:#82b1ff}.cm-s-material .cm-meta,.cm-s-material .cm-tag{color:#80cbc4}.cm-s-material .cm-attribute{color:#ffcb6b}.cm-s-material .cm-property{color:#80cbae}.cm-s-material .cm-qualifier,.cm-s-material .cm-type,.cm-s-material .cm-variable-3{color:#decb6b}.cm-s-material .cm-tag{color:#ff5370}.cm-s-material .cm-error{color:#fff;background-color:#ec5f67}.cm-s-material .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-mbo.CodeMirror{background:#2c2c2c;color:#ffffec}.cm-s-mbo div.CodeMirror-selected{background:#716c62}.cm-s-mbo .CodeMirror-line::selection,.cm-s-mbo .CodeMirror-line>span::selection,.cm-s-mbo .CodeMirror-line>span>span::selection{background:rgba(113,108,98,.99)}.cm-s-mbo .CodeMirror-line::-moz-selection,.cm-s-mbo .CodeMirror-line>span::-moz-selection,.cm-s-mbo .CodeMirror-line>span>span::-moz-selection{background:rgba(113,108,98,.99)}.cm-s-mbo .CodeMirror-gutters{background:#4e4e4e;border-right:0}.cm-s-mbo .CodeMirror-guttermarker{color:#fff}.cm-s-mbo .CodeMirror-guttermarker-subtle{color:grey}.cm-s-mbo .CodeMirror-linenumber{color:#dadada}.cm-s-mbo .CodeMirror-cursor{border-left:1px solid #ffffec}.cm-s-mbo span.cm-comment{color:#95958a}.cm-s-mbo span.cm-atom,.cm-s-mbo span.cm-number{color:#00a8c6}.cm-s-mbo span.cm-attribute,.cm-s-mbo span.cm-property{color:#9ddfe9}.cm-s-mbo span.cm-keyword{color:#ffb928}.cm-s-mbo span.cm-string{color:#ffcf6c}.cm-s-mbo span.cm-string.cm-property,.cm-s-mbo span.cm-variable{color:#ffffec}.cm-s-mbo span.cm-variable-2{color:#00a8c6}.cm-s-mbo span.cm-def{color:#ffffec}.cm-s-mbo span.cm-bracket{color:#fffffc;font-weight:700}.cm-s-mbo span.cm-tag{color:#9ddfe9}.cm-s-mbo span.cm-link{color:#f54b07}.cm-s-mbo span.cm-error{border-bottom:#636363;color:#ffffec}.cm-s-mbo span.cm-qualifier{color:#ffffec}.cm-s-mbo .CodeMirror-activeline-background{background:#494b41}.cm-s-mbo .CodeMirror-matchingbracket{color:#ffb928!important}.cm-s-mbo .CodeMirror-matchingtag{background:hsla(0,0%,100%,.37)}.cm-s-mdn-like.CodeMirror{color:#999;background-color:#fff}.cm-s-mdn-like div.CodeMirror-selected{background:#cfc}.cm-s-mdn-like .CodeMirror-line::selection,.cm-s-mdn-like .CodeMirror-line>span::selection,.cm-s-mdn-like .CodeMirror-line>span>span::selection{background:#cfc}.cm-s-mdn-like .CodeMirror-line::-moz-selection,.cm-s-mdn-like .CodeMirror-line>span::-moz-selection,.cm-s-mdn-like .CodeMirror-line>span>span::-moz-selection{background:#cfc}.cm-s-mdn-like .CodeMirror-gutters{background:#f8f8f8;border-left:6px solid rgba(0,83,159,.65);color:#333}.cm-s-mdn-like .CodeMirror-linenumber{color:#aaa;padding-left:8px}.cm-s-mdn-like .CodeMirror-cursor{border-left:2px solid #222}.cm-s-mdn-like .cm-keyword{color:#6262ff}.cm-s-mdn-like .cm-atom{color:#f90}.cm-s-mdn-like .cm-number{color:#ca7841}.cm-s-mdn-like .cm-def{color:#8da6ce}.cm-s-mdn-like span.cm-tag,.cm-s-mdn-like span.cm-variable-2{color:#690}.cm-s-mdn-like .cm-variable,.cm-s-mdn-like span.cm-def,.cm-s-mdn-like span.cm-type,.cm-s-mdn-like span.cm-variable-3{color:#07a}.cm-s-mdn-like .cm-property{color:#905}.cm-s-mdn-like .cm-qualifier{color:#690}.cm-s-mdn-like .cm-operator{color:#cda869}.cm-s-mdn-like .cm-comment{color:#777;font-weight:400}.cm-s-mdn-like .cm-string{color:#07a;font-style:italic}.cm-s-mdn-like .cm-string-2{color:#bd6b18}.cm-s-mdn-like .cm-meta{color:#000}.cm-s-mdn-like .cm-builtin{color:#9b7536}.cm-s-mdn-like .cm-tag{color:#997643}.cm-s-mdn-like .cm-attribute{color:#d6bb6d}.cm-s-mdn-like .cm-header{color:#ff6400}.cm-s-mdn-like .cm-hr{color:#aeaeae}.cm-s-mdn-like .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.cm-s-mdn-like .cm-error{border-bottom:1px solid red}div.cm-s-mdn-like .CodeMirror-activeline-background{background:#efefff}div.cm-s-mdn-like span.CodeMirror-matchingbracket{outline:1px solid grey;color:inherit}.cm-s-mdn-like.CodeMirror{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=)}.cm-s-midnight span.CodeMirror-matchhighlight{background:#494949}.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight{background:#314d67!important}.cm-s-midnight .CodeMirror-activeline-background{background:#253540}.cm-s-midnight.CodeMirror{background:#0f192a;color:#d1edff}.cm-s-midnight div.CodeMirror-selected{background:#314d67}.cm-s-midnight .CodeMirror-line::selection,.cm-s-midnight .CodeMirror-line>span::selection,.cm-s-midnight .CodeMirror-line>span>span::selection{background:rgba(49,77,103,.99)}.cm-s-midnight .CodeMirror-line::-moz-selection,.cm-s-midnight .CodeMirror-line>span::-moz-selection,.cm-s-midnight .CodeMirror-line>span>span::-moz-selection{background:rgba(49,77,103,.99)}.cm-s-midnight .CodeMirror-gutters{background:#0f192a;border-right:1px solid}.cm-s-midnight .CodeMirror-guttermarker{color:#fff}.cm-s-midnight .CodeMirror-guttermarker-subtle,.cm-s-midnight .CodeMirror-linenumber{color:#d0d0d0}.cm-s-midnight .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-midnight span.cm-comment{color:#428bdd}.cm-s-midnight span.cm-atom{color:#ae81ff}.cm-s-midnight span.cm-number{color:#d1edff}.cm-s-midnight span.cm-attribute,.cm-s-midnight span.cm-property{color:#a6e22e}.cm-s-midnight span.cm-keyword{color:#e83737}.cm-s-midnight span.cm-string{color:#1dc116}.cm-s-midnight span.cm-variable,.cm-s-midnight span.cm-variable-2{color:#ffaa3e}.cm-s-midnight span.cm-def{color:#4dd}.cm-s-midnight span.cm-bracket{color:#d1edff}.cm-s-midnight span.cm-tag{color:#449}.cm-s-midnight span.cm-link{color:#ae81ff}.cm-s-midnight span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-midnight .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-comment.cm-attribute{color:#97b757}.cm-s-monokai span.cm-comment.cm-def{color:#bc9262}.cm-s-monokai span.cm-comment.cm-tag{color:#bc6283}.cm-s-monokai span.cm-comment.cm-type{color:#5998a6}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-neat span.cm-comment{color:#a86}.cm-s-neat span.cm-keyword{line-height:1em;font-weight:700;color:#00f}.cm-s-neat span.cm-string{color:#a22}.cm-s-neat span.cm-builtin{line-height:1em;font-weight:700;color:#077}.cm-s-neat span.cm-special{line-height:1em;font-weight:700;color:#0aa}.cm-s-neat span.cm-variable{color:#000}.cm-s-neat span.cm-atom,.cm-s-neat span.cm-number{color:#3a3}.cm-s-neat span.cm-meta{color:#555}.cm-s-neat span.cm-link{color:#3a3}.cm-s-neat .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-neat .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}.cm-s-neo.CodeMirror{background-color:#fff;color:#2e383c;line-height:1.4375}.cm-s-neo .cm-comment{color:#75787b}.cm-s-neo .cm-keyword,.cm-s-neo .cm-property{color:#1d75b3}.cm-s-neo .cm-atom,.cm-s-neo .cm-number{color:#75438a}.cm-s-neo .cm-node,.cm-s-neo .cm-tag{color:#9c3328}.cm-s-neo .cm-string{color:#b35e14}.cm-s-neo .cm-qualifier,.cm-s-neo .cm-variable{color:#047d65}.cm-s-neo pre{padding:0}.cm-s-neo .CodeMirror-gutters{border:none;border-right:10px solid transparent;background-color:transparent}.cm-s-neo .CodeMirror-linenumber{padding:0;color:#e0e2e5}.cm-s-neo .CodeMirror-guttermarker{color:#1d75b3}.cm-s-neo .CodeMirror-guttermarker-subtle{color:#e0e2e5}.cm-s-neo .CodeMirror-cursor{width:auto;border:0;background:rgba(155,157,162,.37);z-index:1}.cm-s-night.CodeMirror{background:#0a001f;color:#f8f8f8}.cm-s-night div.CodeMirror-selected{background:#447}.cm-s-night .CodeMirror-line::selection,.cm-s-night .CodeMirror-line>span::selection,.cm-s-night .CodeMirror-line>span>span::selection{background:rgba(68,68,119,.99)}.cm-s-night .CodeMirror-line::-moz-selection,.cm-s-night .CodeMirror-line>span::-moz-selection,.cm-s-night .CodeMirror-line>span>span::-moz-selection{background:rgba(68,68,119,.99)}.cm-s-night .CodeMirror-gutters{background:#0a001f;border-right:1px solid #aaa}.cm-s-night .CodeMirror-guttermarker{color:#fff}.cm-s-night .CodeMirror-guttermarker-subtle{color:#bbb}.cm-s-night .CodeMirror-linenumber{color:#f8f8f8}.cm-s-night .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-night span.cm-comment{color:#8900d1}.cm-s-night span.cm-atom{color:#845dc4}.cm-s-night span.cm-attribute,.cm-s-night span.cm-number{color:#ffd500}.cm-s-night span.cm-keyword{color:#599eff}.cm-s-night span.cm-string{color:#37f14a}.cm-s-night span.cm-meta{color:#7678e2}.cm-s-night span.cm-tag,.cm-s-night span.cm-variable-2{color:#99b2ff}.cm-s-night span.cm-def,.cm-s-night span.cm-type,.cm-s-night span.cm-variable-3{color:#fff}.cm-s-night span.cm-bracket{color:#8da6ce}.cm-s-night span.cm-builtin,.cm-s-night span.cm-special{color:#ff9e59}.cm-s-night span.cm-link{color:#845dc4}.cm-s-night span.cm-error{color:#9d1e15}.cm-s-night .CodeMirror-activeline-background{background:#1c005a}.cm-s-night .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-oceanic-next.CodeMirror{background:#304148;color:#f8f8f2}.cm-s-oceanic-next div.CodeMirror-selected{background:rgba(101,115,126,.33)}.cm-s-oceanic-next .CodeMirror-line::selection,.cm-s-oceanic-next .CodeMirror-line>span::selection,.cm-s-oceanic-next .CodeMirror-line>span>span::selection{background:rgba(101,115,126,.33)}.cm-s-oceanic-next .CodeMirror-line::-moz-selection,.cm-s-oceanic-next .CodeMirror-line>span::-moz-selection,.cm-s-oceanic-next .CodeMirror-line>span>span::-moz-selection{background:rgba(101,115,126,.33)}.cm-s-oceanic-next .CodeMirror-gutters{background:#304148;border-right:10px}.cm-s-oceanic-next .CodeMirror-guttermarker{color:#fff}.cm-s-oceanic-next .CodeMirror-guttermarker-subtle,.cm-s-oceanic-next .CodeMirror-linenumber{color:#d0d0d0}.cm-s-oceanic-next .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-oceanic-next span.cm-comment{color:#65737e}.cm-s-oceanic-next span.cm-atom{color:#c594c5}.cm-s-oceanic-next span.cm-number{color:#f99157}.cm-s-oceanic-next span.cm-property{color:#99c794}.cm-s-oceanic-next span.cm-attribute,.cm-s-oceanic-next span.cm-keyword{color:#c594c5}.cm-s-oceanic-next span.cm-builtin{color:#66d9ef}.cm-s-oceanic-next span.cm-string{color:#99c794}.cm-s-oceanic-next span.cm-variable,.cm-s-oceanic-next span.cm-variable-2,.cm-s-oceanic-next span.cm-variable-3{color:#f8f8f2}.cm-s-oceanic-next span.cm-def{color:#69c}.cm-s-oceanic-next span.cm-bracket{color:#5fb3b3}.cm-s-oceanic-next span.cm-header,.cm-s-oceanic-next span.cm-link,.cm-s-oceanic-next span.cm-tag{color:#c594c5}.cm-s-oceanic-next span.cm-error{background:#c594c5;color:#f8f8f0}.cm-s-oceanic-next .CodeMirror-activeline-background{background:rgba(101,115,126,.33)}.cm-s-oceanic-next .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-panda-syntax{background:#292a2b;color:#e6e6e6;line-height:1.5;font-family:Operator Mono,Source Sans Pro,Menlo,Monaco,Consolas,Courier New,monospace}.cm-s-panda-syntax .CodeMirror-cursor{border-color:#ff2c6d}.cm-s-panda-syntax .CodeMirror-activeline-background{background:rgba(99,123,156,.1)}.cm-s-panda-syntax .CodeMirror-selected{background:#fff}.cm-s-panda-syntax .cm-comment{font-style:italic;color:#676b79}.cm-s-panda-syntax .cm-operator{color:#f3f3f3}.cm-s-panda-syntax .cm-string{color:#19f9d8}.cm-s-panda-syntax .cm-string-2{color:#ffb86c}.cm-s-panda-syntax .cm-tag{color:#ff2c6d}.cm-s-panda-syntax .cm-meta{color:#b084eb}.cm-s-panda-syntax .cm-number{color:#ffb86c}.cm-s-panda-syntax .cm-atom{color:#ff2c6d}.cm-s-panda-syntax .cm-keyword{color:#ff75b5}.cm-s-panda-syntax .cm-variable{color:#ffb86c}.cm-s-panda-syntax .cm-type,.cm-s-panda-syntax .cm-variable-2,.cm-s-panda-syntax .cm-variable-3{color:#ff9ac1}.cm-s-panda-syntax .cm-def{color:#e6e6e6}.cm-s-panda-syntax .cm-property{color:#f3f3f3}.cm-s-panda-syntax .cm-attribute,.cm-s-panda-syntax .cm-unit{color:#ffb86c}.cm-s-panda-syntax .CodeMirror-matchingbracket{border-bottom:1px dotted #19f9d8;padding-bottom:2px;color:#e6e6e6}.cm-s-panda-syntax .CodeMirror-gutters{background:#292a2b;border-right-color:hsla(0,0%,100%,.1)}.cm-s-panda-syntax .CodeMirror-linenumber{color:#e6e6e6;opacity:.6}.cm-s-paraiso-dark.CodeMirror{background:#2f1e2e;color:#b9b6b0}.cm-s-paraiso-dark div.CodeMirror-selected{background:#41323f}.cm-s-paraiso-dark .CodeMirror-line::selection,.cm-s-paraiso-dark .CodeMirror-line>span::selection,.cm-s-paraiso-dark .CodeMirror-line>span>span::selection{background:rgba(65,50,63,.99)}.cm-s-paraiso-dark .CodeMirror-line::-moz-selection,.cm-s-paraiso-dark .CodeMirror-line>span::-moz-selection,.cm-s-paraiso-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(65,50,63,.99)}.cm-s-paraiso-dark .CodeMirror-gutters{background:#2f1e2e;border-right:0}.cm-s-paraiso-dark .CodeMirror-guttermarker{color:#ef6155}.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle,.cm-s-paraiso-dark .CodeMirror-linenumber{color:#776e71}.cm-s-paraiso-dark .CodeMirror-cursor{border-left:1px solid #8d8687}.cm-s-paraiso-dark span.cm-comment{color:#e96ba8}.cm-s-paraiso-dark span.cm-atom,.cm-s-paraiso-dark span.cm-number{color:#815ba4}.cm-s-paraiso-dark span.cm-attribute,.cm-s-paraiso-dark span.cm-property{color:#48b685}.cm-s-paraiso-dark span.cm-keyword{color:#ef6155}.cm-s-paraiso-dark span.cm-string{color:#fec418}.cm-s-paraiso-dark span.cm-variable{color:#48b685}.cm-s-paraiso-dark span.cm-variable-2{color:#06b6ef}.cm-s-paraiso-dark span.cm-def{color:#f99b15}.cm-s-paraiso-dark span.cm-bracket{color:#b9b6b0}.cm-s-paraiso-dark span.cm-tag{color:#ef6155}.cm-s-paraiso-dark span.cm-link{color:#815ba4}.cm-s-paraiso-dark span.cm-error{background:#ef6155;color:#8d8687}.cm-s-paraiso-dark .CodeMirror-activeline-background{background:#4d344a}.cm-s-paraiso-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-paraiso-light.CodeMirror{background:#e7e9db;color:#41323f}.cm-s-paraiso-light div.CodeMirror-selected{background:#b9b6b0}.cm-s-paraiso-light .CodeMirror-line::selection,.cm-s-paraiso-light .CodeMirror-line>span::selection,.cm-s-paraiso-light .CodeMirror-line>span>span::selection{background:#b9b6b0}.cm-s-paraiso-light .CodeMirror-line::-moz-selection,.cm-s-paraiso-light .CodeMirror-line>span::-moz-selection,.cm-s-paraiso-light .CodeMirror-line>span>span::-moz-selection{background:#b9b6b0}.cm-s-paraiso-light .CodeMirror-gutters{background:#e7e9db;border-right:0}.cm-s-paraiso-light .CodeMirror-guttermarker{color:#000}.cm-s-paraiso-light .CodeMirror-guttermarker-subtle,.cm-s-paraiso-light .CodeMirror-linenumber{color:#8d8687}.cm-s-paraiso-light .CodeMirror-cursor{border-left:1px solid #776e71}.cm-s-paraiso-light span.cm-comment{color:#e96ba8}.cm-s-paraiso-light span.cm-atom,.cm-s-paraiso-light span.cm-number{color:#815ba4}.cm-s-paraiso-light span.cm-attribute,.cm-s-paraiso-light span.cm-property{color:#48b685}.cm-s-paraiso-light span.cm-keyword{color:#ef6155}.cm-s-paraiso-light span.cm-string{color:#fec418}.cm-s-paraiso-light span.cm-variable{color:#48b685}.cm-s-paraiso-light span.cm-variable-2{color:#06b6ef}.cm-s-paraiso-light span.cm-def{color:#f99b15}.cm-s-paraiso-light span.cm-bracket{color:#41323f}.cm-s-paraiso-light span.cm-tag{color:#ef6155}.cm-s-paraiso-light span.cm-link{color:#815ba4}.cm-s-paraiso-light span.cm-error{background:#ef6155;color:#776e71}.cm-s-paraiso-light .CodeMirror-activeline-background{background:#cfd1c4}.cm-s-paraiso-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-pastel-on-dark.CodeMirror{background:#2c2827;color:#8f938f;line-height:1.5}.cm-s-pastel-on-dark div.CodeMirror-selected{background:rgba(221,240,255,.2)}.cm-s-pastel-on-dark .CodeMirror-line::selection,.cm-s-pastel-on-dark .CodeMirror-line>span::selection,.cm-s-pastel-on-dark .CodeMirror-line>span>span::selection{background:rgba(221,240,255,.2)}.cm-s-pastel-on-dark .CodeMirror-line::-moz-selection,.cm-s-pastel-on-dark .CodeMirror-line>span::-moz-selection,.cm-s-pastel-on-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(221,240,255,.2)}.cm-s-pastel-on-dark .CodeMirror-gutters{background:#34302f;border-right:0;padding:0 3px}.cm-s-pastel-on-dark .CodeMirror-guttermarker{color:#fff}.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle,.cm-s-pastel-on-dark .CodeMirror-linenumber{color:#8f938f}.cm-s-pastel-on-dark .CodeMirror-cursor{border-left:1px solid #a7a7a7}.cm-s-pastel-on-dark span.cm-comment{color:#a6c6ff}.cm-s-pastel-on-dark span.cm-atom{color:#de8e30}.cm-s-pastel-on-dark span.cm-number{color:#ccc}.cm-s-pastel-on-dark span.cm-property{color:#8f938f}.cm-s-pastel-on-dark span.cm-attribute{color:#a6e22e}.cm-s-pastel-on-dark span.cm-keyword{color:#aeb2f8}.cm-s-pastel-on-dark span.cm-string{color:#66a968}.cm-s-pastel-on-dark span.cm-variable{color:#aeb2f8}.cm-s-pastel-on-dark span.cm-variable-2{color:#bebf55}.cm-s-pastel-on-dark span.cm-type,.cm-s-pastel-on-dark span.cm-variable-3{color:#de8e30}.cm-s-pastel-on-dark span.cm-def{color:#757ad8}.cm-s-pastel-on-dark span.cm-bracket{color:#f8f8f2}.cm-s-pastel-on-dark span.cm-tag{color:#c1c144}.cm-s-pastel-on-dark span.cm-link{color:#ae81ff}.cm-s-pastel-on-dark span.cm-builtin,.cm-s-pastel-on-dark span.cm-qualifier{color:#c1c144}.cm-s-pastel-on-dark span.cm-error{background:#757ad8;color:#f8f8f0}.cm-s-pastel-on-dark .CodeMirror-activeline-background{background:hsla(0,0%,100%,.031)}.cm-s-pastel-on-dark .CodeMirror-matchingbracket{border:1px solid hsla(0,0%,100%,.25);color:#8f938f!important;margin:-1px -1px 0}.cm-s-railscasts.CodeMirror{background:#2b2b2b;color:#f4f1ed}.cm-s-railscasts div.CodeMirror-selected{background:#272935!important}.cm-s-railscasts .CodeMirror-gutters{background:#2b2b2b;border-right:0}.cm-s-railscasts .CodeMirror-linenumber{color:#5a647e}.cm-s-railscasts .CodeMirror-cursor{border-left:1px solid #d4cfc9!important}.cm-s-railscasts span.cm-comment{color:#bc9458}.cm-s-railscasts span.cm-atom,.cm-s-railscasts span.cm-number{color:#b6b3eb}.cm-s-railscasts span.cm-attribute,.cm-s-railscasts span.cm-property{color:#a5c261}.cm-s-railscasts span.cm-keyword{color:#da4939}.cm-s-railscasts span.cm-string{color:#ffc66d}.cm-s-railscasts span.cm-variable{color:#a5c261}.cm-s-railscasts span.cm-variable-2{color:#6d9cbe}.cm-s-railscasts span.cm-def{color:#cc7833}.cm-s-railscasts span.cm-error{background:#da4939;color:#d4cfc9}.cm-s-railscasts span.cm-bracket{color:#f4f1ed}.cm-s-railscasts span.cm-tag{color:#da4939}.cm-s-railscasts span.cm-link{color:#b6b3eb}.cm-s-railscasts .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-railscasts .CodeMirror-activeline-background{background:#303040}.cm-s-rubyblue.CodeMirror{background:#112435;color:#fff}.cm-s-rubyblue div.CodeMirror-selected{background:#38566f}.cm-s-rubyblue .CodeMirror-line::selection,.cm-s-rubyblue .CodeMirror-line>span::selection,.cm-s-rubyblue .CodeMirror-line>span>span::selection{background:rgba(56,86,111,.99)}.cm-s-rubyblue .CodeMirror-line::-moz-selection,.cm-s-rubyblue .CodeMirror-line>span::-moz-selection,.cm-s-rubyblue .CodeMirror-line>span>span::-moz-selection{background:rgba(56,86,111,.99)}.cm-s-rubyblue .CodeMirror-gutters{background:#1f4661;border-right:7px solid #3e7087}.cm-s-rubyblue .CodeMirror-guttermarker{color:#fff}.cm-s-rubyblue .CodeMirror-guttermarker-subtle{color:#3e7087}.cm-s-rubyblue .CodeMirror-linenumber{color:#fff}.cm-s-rubyblue .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-rubyblue span.cm-comment{color:#999;font-style:italic;line-height:1em}.cm-s-rubyblue span.cm-atom{color:#f4c20b}.cm-s-rubyblue span.cm-attribute,.cm-s-rubyblue span.cm-number{color:#82c6e0}.cm-s-rubyblue span.cm-keyword{color:#f0f}.cm-s-rubyblue span.cm-string{color:#f08047}.cm-s-rubyblue span.cm-meta{color:#f0f}.cm-s-rubyblue span.cm-tag,.cm-s-rubyblue span.cm-variable-2{color:#7bd827}.cm-s-rubyblue span.cm-def,.cm-s-rubyblue span.cm-type,.cm-s-rubyblue span.cm-variable-3{color:#fff}.cm-s-rubyblue span.cm-bracket{color:#f0f}.cm-s-rubyblue span.cm-link{color:#f4c20b}.cm-s-rubyblue span.CodeMirror-matchingbracket{color:#f0f!important}.cm-s-rubyblue span.cm-builtin,.cm-s-rubyblue span.cm-special{color:#ff9d00}.cm-s-rubyblue span.cm-error{color:#af2018}.cm-s-rubyblue .CodeMirror-activeline-background{background:#173047}.cm-s-seti.CodeMirror{background-color:#151718!important;color:#cfd2d1!important;border:none}.cm-s-seti .CodeMirror-gutters{color:#404b53;background-color:#0e1112;border:none}.cm-s-seti .CodeMirror-cursor{border-left:thin solid #f8f8f0}.cm-s-seti .CodeMirror-linenumber{color:#6d8a88}.cm-s-seti.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)}.cm-s-seti .CodeMirror-line::selection,.cm-s-seti .CodeMirror-line>span::selection,.cm-s-seti .CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)}.cm-s-seti .CodeMirror-line::-moz-selection,.cm-s-seti .CodeMirror-line>span::-moz-selection,.cm-s-seti .CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)}.cm-s-seti span.cm-comment{color:#41535b}.cm-s-seti span.cm-string,.cm-s-seti span.cm-string-2{color:#55b5db}.cm-s-seti span.cm-number{color:#cd3f45}.cm-s-seti span.cm-variable{color:#55b5db}.cm-s-seti span.cm-variable-2{color:#a074c4}.cm-s-seti span.cm-def{color:#55b5db}.cm-s-seti span.cm-keyword{color:#ff79c6}.cm-s-seti span.cm-operator{color:#9fca56}.cm-s-seti span.cm-keyword{color:#e6cd69}.cm-s-seti span.cm-atom{color:#cd3f45}.cm-s-seti span.cm-meta,.cm-s-seti span.cm-tag{color:#55b5db}.cm-s-seti span.cm-attribute,.cm-s-seti span.cm-qualifier{color:#9fca56}.cm-s-seti span.cm-property{color:#a074c4}.cm-s-seti span.cm-builtin,.cm-s-seti span.cm-type,.cm-s-seti span.cm-variable-3{color:#9fca56}.cm-s-seti .CodeMirror-activeline-background{background:#101213}.cm-s-seti .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-shadowfox.CodeMirror{background:#2a2a2e;color:#b1b1b3}.cm-s-shadowfox div.CodeMirror-selected{background:#353b48}.cm-s-shadowfox .CodeMirror-line::selection,.cm-s-shadowfox .CodeMirror-line>span::selection,.cm-s-shadowfox .CodeMirror-line>span>span::selection{background:#353b48}.cm-s-shadowfox .CodeMirror-line::-moz-selection,.cm-s-shadowfox .CodeMirror-line>span::-moz-selection,.cm-s-shadowfox .CodeMirror-line>span>span::-moz-selection{background:#353b48}.cm-s-shadowfox .CodeMirror-gutters{background:#0c0c0d;border-right:1px solid #0c0c0d}.cm-s-shadowfox .CodeMirror-guttermarker{color:#555}.cm-s-shadowfox .CodeMirror-linenumber{color:#939393}.cm-s-shadowfox .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-shadowfox span.cm-comment{color:#939393}.cm-s-shadowfox span.cm-atom,.cm-s-shadowfox span.cm-attribute,.cm-s-shadowfox span.cm-builtin,.cm-s-shadowfox span.cm-error,.cm-s-shadowfox span.cm-keyword,.cm-s-shadowfox span.cm-quote{color:#ff7de9}.cm-s-shadowfox span.cm-number,.cm-s-shadowfox span.cm-string,.cm-s-shadowfox span.cm-string-2{color:#6b89ff}.cm-s-shadowfox span.cm-hr,.cm-s-shadowfox span.cm-meta{color:#939393}.cm-s-shadowfox span.cm-header,.cm-s-shadowfox span.cm-qualifier,.cm-s-shadowfox span.cm-variable-2{color:#75bfff}.cm-s-shadowfox span.cm-property{color:#86de74}.cm-s-shadowfox span.cm-bracket,.cm-s-shadowfox span.cm-def,.cm-s-shadowfox span.cm-link:visited,.cm-s-shadowfox span.cm-tag{color:#75bfff}.cm-s-shadowfox span.cm-variable{color:#b98eff}.cm-s-shadowfox span.cm-variable-3{color:#d7d7db}.cm-s-shadowfox span.cm-link{color:#737373}.cm-s-shadowfox span.cm-operator{color:#b1b1b3}.cm-s-shadowfox span.cm-special{color:#d7d7db}.cm-s-shadowfox .CodeMirror-activeline-background{background:rgba(185,215,253,.15)}.cm-s-shadowfox .CodeMirror-matchingbracket{outline:1px solid hsla(0,0%,100%,.25);color:#fff!important}.solarized.base03{color:#002b36}.solarized.base02{color:#073642}.solarized.base01{color:#586e75}.solarized.base00{color:#657b83}.solarized.base0{color:#839496}.solarized.base1{color:#93a1a1}.solarized.base2{color:#eee8d5}.solarized.base3{color:#fdf6e3}.solarized.solar-yellow{color:#b58900}.solarized.solar-orange{color:#cb4b16}.solarized.solar-red{color:#dc322f}.solarized.solar-magenta{color:#d33682}.solarized.solar-violet{color:#6c71c4}.solarized.solar-blue{color:#268bd2}.solarized.solar-cyan{color:#2aa198}.solarized.solar-green{color:#859900}.cm-s-solarized{line-height:1.45em;color-profile:sRGB;rendering-intent:auto}.cm-s-solarized.cm-s-dark{color:#839496;background-color:#002b36;text-shadow:#002b36 0 1px}.cm-s-solarized.cm-s-light{background-color:#fdf6e3;color:#657b83;text-shadow:#eee8d5 0 1px}.cm-s-solarized .CodeMirror-widget{text-shadow:none}.cm-s-solarized .cm-header{color:#586e75}.cm-s-solarized .cm-quote{color:#93a1a1}.cm-s-solarized .cm-keyword{color:#cb4b16}.cm-s-solarized .cm-atom,.cm-s-solarized .cm-number{color:#d33682}.cm-s-solarized .cm-def{color:#2aa198}.cm-s-solarized .cm-variable{color:#839496}.cm-s-solarized .cm-variable-2{color:#b58900}.cm-s-solarized .cm-type,.cm-s-solarized .cm-variable-3{color:#6c71c4}.cm-s-solarized .cm-property{color:#2aa198}.cm-s-solarized .cm-operator{color:#6c71c4}.cm-s-solarized .cm-comment{color:#586e75;font-style:italic}.cm-s-solarized .cm-string{color:#859900}.cm-s-solarized .cm-string-2{color:#b58900}.cm-s-solarized .cm-meta{color:#859900}.cm-s-solarized .cm-qualifier{color:#b58900}.cm-s-solarized .cm-builtin{color:#d33682}.cm-s-solarized .cm-bracket{color:#cb4b16}.cm-s-solarized .CodeMirror-matchingbracket{color:#859900}.cm-s-solarized .CodeMirror-nonmatchingbracket{color:#dc322f}.cm-s-solarized .cm-tag{color:#93a1a1}.cm-s-solarized .cm-attribute{color:#2aa198}.cm-s-solarized .cm-hr{color:transparent;border-top:1px solid #586e75;display:block}.cm-s-solarized .cm-link{color:#93a1a1;cursor:pointer}.cm-s-solarized .cm-special{color:#6c71c4}.cm-s-solarized .cm-em{color:#999;text-decoration:underline;text-decoration-style:dotted}.cm-s-solarized .cm-error,.cm-s-solarized .cm-invalidchar{color:#586e75;border-bottom:1px dotted #dc322f}.cm-s-solarized.cm-s-dark div.CodeMirror-selected{background:#073642}.cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)}.cm-s-dark .CodeMirror-line>span::-moz-selection,.cm-s-dark .CodeMirror-line>span>span::-moz-selection,.cm-s-solarized.cm-s-dark .CodeMirror-line::-moz-selection{background:rgba(7,54,66,.99)}.cm-s-solarized.cm-s-light div.CodeMirror-selected{background:#eee8d5}.cm-s-light .CodeMirror-line>span::selection,.cm-s-light .CodeMirror-line>span>span::selection,.cm-s-solarized.cm-s-light .CodeMirror-line::selection{background:#eee8d5}.cm-s-ligh .CodeMirror-line>span::-moz-selection,.cm-s-ligh .CodeMirror-line>span>span::-moz-selection,.cm-s-solarized.cm-s-light .CodeMirror-line::-moz-selection{background:#eee8d5}.cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000;-webkit-box-shadow:inset 7px 0 12px -6px #000;box-shadow:inset 7px 0 12px -6px #000}.cm-s-solarized .CodeMirror-gutters{border-right:0}.cm-s-solarized.cm-s-dark .CodeMirror-gutters{background-color:#073642}.cm-s-solarized.cm-s-dark .CodeMirror-linenumber{color:#586e75;text-shadow:#021014 0 -1px}.cm-s-solarized.cm-s-light .CodeMirror-gutters{background-color:#eee8d5}.cm-s-solarized.cm-s-light .CodeMirror-linenumber{color:#839496}.cm-s-solarized .CodeMirror-linenumber{padding:0 5px}.cm-s-solarized .CodeMirror-guttermarker-subtle{color:#586e75}.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker{color:#ddd}.cm-s-solarized.cm-s-light .CodeMirror-guttermarker{color:#cb4b16}.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75}.cm-s-solarized .CodeMirror-cursor{border-left:1px solid #819090}.cm-s-solarized.cm-s-light.cm-fat-cursor .CodeMirror-cursor{background:#7e7}.cm-s-solarized.cm-s-light .cm-animate-fat-cursor{background-color:#7e7}.cm-s-solarized.cm-s-dark.cm-fat-cursor .CodeMirror-cursor{background:#586e75}.cm-s-solarized.cm-s-dark .cm-animate-fat-cursor{background-color:#586e75}.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background{background:hsla(0,0%,100%,.06)}.cm-s-solarized.cm-s-light .CodeMirror-activeline-background{background:rgba(0,0,0,.06)}.cm-s-ssms span.cm-keyword{color:#00f}.cm-s-ssms span.cm-comment{color:#006400}.cm-s-ssms span.cm-string{color:red}.cm-s-ssms span.cm-def,.cm-s-ssms span.cm-variable,.cm-s-ssms span.cm-variable-2{color:#000}.cm-s-ssms span.cm-atom{color:#a9a9a9}.cm-s-ssms .CodeMirror-linenumber{color:teal}.cm-s-ssms .CodeMirror-activeline-background{background:#fff}.cm-s-ssms span.cm-string-2{color:#f0f}.cm-s-ssms span.cm-bracket,.cm-s-ssms span.cm-operator,.cm-s-ssms span.cm-punctuation{color:#a9a9a9}.cm-s-ssms .CodeMirror-gutters{border-right:3px solid #ffee62;background-color:#fff}.cm-s-ssms div.CodeMirror-selected{background:#add6ff}.cm-s-the-matrix.CodeMirror{background:#000;color:#0f0}.cm-s-the-matrix div.CodeMirror-selected{background:#2d2d2d}.cm-s-the-matrix .CodeMirror-line::selection,.cm-s-the-matrix .CodeMirror-line>span::selection,.cm-s-the-matrix .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.cm-s-the-matrix .CodeMirror-line::-moz-selection,.cm-s-the-matrix .CodeMirror-line>span::-moz-selection,.cm-s-the-matrix .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.cm-s-the-matrix .CodeMirror-gutters{background:#060;border-right:2px solid #0f0}.cm-s-the-matrix .CodeMirror-guttermarker{color:#0f0}.cm-s-the-matrix .CodeMirror-guttermarker-subtle,.cm-s-the-matrix .CodeMirror-linenumber{color:#fff}.cm-s-the-matrix .CodeMirror-cursor{border-left:1px solid #0f0}.cm-s-the-matrix span.cm-keyword{color:#008803;font-weight:700}.cm-s-the-matrix span.cm-atom{color:#3ff}.cm-s-the-matrix span.cm-number{color:#ffb94f}.cm-s-the-matrix span.cm-def{color:#99c}.cm-s-the-matrix span.cm-variable{color:#f6c}.cm-s-the-matrix span.cm-variable-2{color:#c6f}.cm-s-the-matrix span.cm-type,.cm-s-the-matrix span.cm-variable-3{color:#96f}.cm-s-the-matrix span.cm-property{color:#62ffa0}.cm-s-the-matrix span.cm-operator{color:#999}.cm-s-the-matrix span.cm-comment{color:#ccc}.cm-s-the-matrix span.cm-string{color:#39c}.cm-s-the-matrix span.cm-meta{color:#c9f}.cm-s-the-matrix span.cm-qualifier{color:#fff700}.cm-s-the-matrix span.cm-builtin{color:#30a}.cm-s-the-matrix span.cm-bracket{color:#cc7}.cm-s-the-matrix span.cm-tag{color:#ffbd40}.cm-s-the-matrix span.cm-attribute{color:#fff700}.cm-s-the-matrix span.cm-error{color:red}.cm-s-the-matrix .CodeMirror-activeline-background{background:#040}.cm-s-tomorrow-night-bright.CodeMirror{background:#000;color:#eaeaea}.cm-s-tomorrow-night-bright div.CodeMirror-selected{background:#424242}.cm-s-tomorrow-night-bright .CodeMirror-gutters{background:#000;border-right:0}.cm-s-tomorrow-night-bright .CodeMirror-guttermarker{color:#e78c45}.cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle{color:#777}.cm-s-tomorrow-night-bright .CodeMirror-linenumber{color:#424242}.cm-s-tomorrow-night-bright .CodeMirror-cursor{border-left:1px solid #6a6a6a}.cm-s-tomorrow-night-bright span.cm-comment{color:#d27b53}.cm-s-tomorrow-night-bright span.cm-atom,.cm-s-tomorrow-night-bright span.cm-number{color:#a16a94}.cm-s-tomorrow-night-bright span.cm-attribute,.cm-s-tomorrow-night-bright span.cm-property{color:#9c9}.cm-s-tomorrow-night-bright span.cm-keyword{color:#d54e53}.cm-s-tomorrow-night-bright span.cm-string{color:#e7c547}.cm-s-tomorrow-night-bright span.cm-variable{color:#b9ca4a}.cm-s-tomorrow-night-bright span.cm-variable-2{color:#7aa6da}.cm-s-tomorrow-night-bright span.cm-def{color:#e78c45}.cm-s-tomorrow-night-bright span.cm-bracket{color:#eaeaea}.cm-s-tomorrow-night-bright span.cm-tag{color:#d54e53}.cm-s-tomorrow-night-bright span.cm-link{color:#a16a94}.cm-s-tomorrow-night-bright span.cm-error{background:#d54e53;color:#6a6a6a}.cm-s-tomorrow-night-bright .CodeMirror-activeline-background{background:#2a2a2a}.cm-s-tomorrow-night-bright .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-tomorrow-night-eighties.CodeMirror{background:#000;color:#ccc}.cm-s-tomorrow-night-eighties div.CodeMirror-selected{background:#2d2d2d}.cm-s-tomorrow-night-eighties .CodeMirror-line::selection,.cm-s-tomorrow-night-eighties .CodeMirror-line>span::selection,.cm-s-tomorrow-night-eighties .CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)}.cm-s-tomorrow-night-eighties .CodeMirror-line::-moz-selection,.cm-s-tomorrow-night-eighties .CodeMirror-line>span::-moz-selection,.cm-s-tomorrow-night-eighties .CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)}.cm-s-tomorrow-night-eighties .CodeMirror-gutters{background:#000;border-right:0}.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker{color:#f2777a}.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle{color:#777}.cm-s-tomorrow-night-eighties .CodeMirror-linenumber{color:#515151}.cm-s-tomorrow-night-eighties .CodeMirror-cursor{border-left:1px solid #6a6a6a}.cm-s-tomorrow-night-eighties span.cm-comment{color:#d27b53}.cm-s-tomorrow-night-eighties span.cm-atom,.cm-s-tomorrow-night-eighties span.cm-number{color:#a16a94}.cm-s-tomorrow-night-eighties span.cm-attribute,.cm-s-tomorrow-night-eighties span.cm-property{color:#9c9}.cm-s-tomorrow-night-eighties span.cm-keyword{color:#f2777a}.cm-s-tomorrow-night-eighties span.cm-string{color:#fc6}.cm-s-tomorrow-night-eighties span.cm-variable{color:#9c9}.cm-s-tomorrow-night-eighties span.cm-variable-2{color:#69c}.cm-s-tomorrow-night-eighties span.cm-def{color:#f99157}.cm-s-tomorrow-night-eighties span.cm-bracket{color:#ccc}.cm-s-tomorrow-night-eighties span.cm-tag{color:#f2777a}.cm-s-tomorrow-night-eighties span.cm-link{color:#a16a94}.cm-s-tomorrow-night-eighties span.cm-error{background:#f2777a;color:#6a6a6a}.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background{background:#343600}.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-ttcn .cm-quote{color:#090}.cm-s-ttcn .cm-header,.cm-strong{font-weight:700}.cm-s-ttcn .cm-header{color:#00f;font-weight:700}.cm-s-ttcn .cm-atom{color:#219}.cm-s-ttcn .cm-attribute{color:#00c}.cm-s-ttcn .cm-bracket{color:#997}.cm-s-ttcn .cm-comment{color:#333}.cm-s-ttcn .cm-def{color:#00f}.cm-s-ttcn .cm-em{font-style:italic}.cm-s-ttcn .cm-error{color:red}.cm-s-ttcn .cm-hr{color:#999}.cm-s-ttcn .cm-keyword{font-weight:700}.cm-s-ttcn .cm-link{color:#00c;text-decoration:underline}.cm-s-ttcn .cm-meta{color:#555}.cm-s-ttcn .cm-negative{color:#d44}.cm-s-ttcn .cm-positive{color:#292}.cm-s-ttcn .cm-qualifier{color:#555}.cm-s-ttcn .cm-strikethrough{text-decoration:line-through}.cm-s-ttcn .cm-string{color:#006400}.cm-s-ttcn .cm-string-2{color:#f50}.cm-s-ttcn .cm-strong{font-weight:700}.cm-s-ttcn .cm-tag{color:#170}.cm-s-ttcn .cm-variable{color:#8b2252}.cm-s-ttcn .cm-variable-2{color:#05a}.cm-s-ttcn .cm-type,.cm-s-ttcn .cm-variable-3{color:#085}.cm-s-ttcn .cm-invalidchar{color:red}.cm-s-ttcn .cm-accessTypes,.cm-s-ttcn .cm-compareTypes{color:#27408b}.cm-s-ttcn .cm-cmipVerbs{color:#8b2252}.cm-s-ttcn .cm-modifier{color:#d2691e}.cm-s-ttcn .cm-status{color:#8b4545}.cm-s-ttcn .cm-storage{color:#a020f0}.cm-s-ttcn .cm-tags{color:#006400}.cm-s-ttcn .cm-externalCommands{color:#8b4545;font-weight:700}.cm-s-ttcn .cm-fileNCtrlMaskOptions,.cm-s-ttcn .cm-sectionTitle{color:#2e8b57;font-weight:700}.cm-s-ttcn .cm-booleanConsts,.cm-s-ttcn .cm-otherConsts,.cm-s-ttcn .cm-verdictConsts{color:#006400}.cm-s-ttcn .cm-configOps,.cm-s-ttcn .cm-functionOps,.cm-s-ttcn .cm-portOps,.cm-s-ttcn .cm-sutOps,.cm-s-ttcn .cm-timerOps,.cm-s-ttcn .cm-verdictOps{color:#00f}.cm-s-ttcn .cm-preprocessor,.cm-s-ttcn .cm-templateMatch,.cm-s-ttcn .cm-ttcn3Macros{color:#27408b}.cm-s-ttcn .cm-types{color:brown;font-weight:700}.cm-s-ttcn .cm-visibilityModifiers{font-weight:700}.cm-s-twilight.CodeMirror{background:#141414;color:#f7f7f7}.cm-s-twilight div.CodeMirror-selected{background:#323232}.cm-s-twilight .CodeMirror-line::selection,.cm-s-twilight .CodeMirror-line>span::selection,.cm-s-twilight .CodeMirror-line>span>span::selection{background:rgba(50,50,50,.99)}.cm-s-twilight .CodeMirror-line::-moz-selection,.cm-s-twilight .CodeMirror-line>span::-moz-selection,.cm-s-twilight .CodeMirror-line>span>span::-moz-selection{background:rgba(50,50,50,.99)}.cm-s-twilight .CodeMirror-gutters{background:#222;border-right:1px solid #aaa}.cm-s-twilight .CodeMirror-guttermarker{color:#fff}.cm-s-twilight .CodeMirror-guttermarker-subtle,.cm-s-twilight .CodeMirror-linenumber{color:#aaa}.cm-s-twilight .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-twilight .cm-keyword{color:#f9ee98}.cm-s-twilight .cm-atom{color:#fc0}.cm-s-twilight .cm-number{color:#ca7841}.cm-s-twilight .cm-def{color:#8da6ce}.cm-s-twilight span.cm-def,.cm-s-twilight span.cm-tag,.cm-s-twilight span.cm-type,.cm-s-twilight span.cm-variable-2,.cm-s-twilight span.cm-variable-3{color:#607392}.cm-s-twilight .cm-operator{color:#cda869}.cm-s-twilight .cm-comment{color:#777;font-style:italic;font-weight:400}.cm-s-twilight .cm-string{color:#8f9d6a;font-style:italic}.cm-s-twilight .cm-string-2{color:#bd6b18}.cm-s-twilight .cm-meta{background-color:#141414;color:#f7f7f7}.cm-s-twilight .cm-builtin{color:#cda869}.cm-s-twilight .cm-tag{color:#997643}.cm-s-twilight .cm-attribute{color:#d6bb6d}.cm-s-twilight .cm-header{color:#ff6400}.cm-s-twilight .cm-hr{color:#aeaeae}.cm-s-twilight .cm-link{color:#ad9361;font-style:italic;text-decoration:none}.cm-s-twilight .cm-error{border-bottom:1px solid red}.cm-s-twilight .CodeMirror-activeline-background{background:#27282e}.cm-s-twilight .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-vibrant-ink.CodeMirror{background:#000;color:#fff}.cm-s-vibrant-ink div.CodeMirror-selected{background:#35493c}.cm-s-vibrant-ink .CodeMirror-line::selection,.cm-s-vibrant-ink .CodeMirror-line>span::selection,.cm-s-vibrant-ink .CodeMirror-line>span>span::selection{background:rgba(53,73,60,.99)}.cm-s-vibrant-ink .CodeMirror-line::-moz-selection,.cm-s-vibrant-ink .CodeMirror-line>span::-moz-selection,.cm-s-vibrant-ink .CodeMirror-line>span>span::-moz-selection{background:rgba(53,73,60,.99)}.cm-s-vibrant-ink .CodeMirror-gutters{background:#002240;border-right:1px solid #aaa}.cm-s-vibrant-ink .CodeMirror-guttermarker{color:#fff}.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle,.cm-s-vibrant-ink .CodeMirror-linenumber{color:#d0d0d0}.cm-s-vibrant-ink .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-vibrant-ink .cm-keyword{color:#cc7832}.cm-s-vibrant-ink .cm-atom{color:#fc0}.cm-s-vibrant-ink .cm-number{color:#ffee98}.cm-s-vibrant-ink .cm-def{color:#8da6ce}.cm-s-vibrant-ink span.cm-variable-2,.cm-s-vibrant-ink span.cm-variable-3,.cm-s-vibrant span.cm-def,.cm-s-vibrant span.cm-tag,.cm-s-vibrant span.cm-type{color:#ffc66d}.cm-s-vibrant-ink .cm-operator{color:#888}.cm-s-vibrant-ink .cm-comment{color:grey;font-weight:700}.cm-s-vibrant-ink .cm-string{color:#a5c25c}.cm-s-vibrant-ink .cm-string-2{color:red}.cm-s-vibrant-ink .cm-meta{color:#d8fa3c}.cm-s-vibrant-ink .cm-attribute,.cm-s-vibrant-ink .cm-builtin,.cm-s-vibrant-ink .cm-tag{color:#8da6ce}.cm-s-vibrant-ink .cm-header{color:#ff6400}.cm-s-vibrant-ink .cm-hr{color:#aeaeae}.cm-s-vibrant-ink .cm-link{color:#00f}.cm-s-vibrant-ink .cm-error{border-bottom:1px solid red}.cm-s-vibrant-ink .CodeMirror-activeline-background{background:#27282e}.cm-s-vibrant-ink .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-xq-dark.CodeMirror{background:#0a001f;color:#f8f8f8}.cm-s-xq-dark div.CodeMirror-selected{background:#27007a}.cm-s-xq-dark .CodeMirror-line::selection,.cm-s-xq-dark .CodeMirror-line>span::selection,.cm-s-xq-dark .CodeMirror-line>span>span::selection{background:rgba(39,0,122,.99)}.cm-s-xq-dark .CodeMirror-line::-moz-selection,.cm-s-xq-dark .CodeMirror-line>span::-moz-selection,.cm-s-xq-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(39,0,122,.99)}.cm-s-xq-dark .CodeMirror-gutters{background:#0a001f;border-right:1px solid #aaa}.cm-s-xq-dark .CodeMirror-guttermarker{color:#ffbd40}.cm-s-xq-dark .CodeMirror-guttermarker-subtle,.cm-s-xq-dark .CodeMirror-linenumber{color:#f8f8f8}.cm-s-xq-dark .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-xq-dark span.cm-keyword{color:#ffbd40}.cm-s-xq-dark span.cm-atom{color:#6c8cd5}.cm-s-xq-dark span.cm-number{color:#164}.cm-s-xq-dark span.cm-def{color:#fff;text-decoration:underline}.cm-s-xq-dark span.cm-variable{color:#fff}.cm-s-xq-dark span.cm-variable-2{color:#eee}.cm-s-xq-dark span.cm-type,.cm-s-xq-dark span.cm-variable-3{color:#ddd}.cm-s-xq-dark span.cm-comment{color:grey}.cm-s-xq-dark span.cm-string{color:#9fee00}.cm-s-xq-dark span.cm-meta{color:#ff0}.cm-s-xq-dark span.cm-qualifier{color:#fff700}.cm-s-xq-dark span.cm-builtin{color:#30a}.cm-s-xq-dark span.cm-bracket{color:#cc7}.cm-s-xq-dark span.cm-tag{color:#ffbd40}.cm-s-xq-dark span.cm-attribute{color:#fff700}.cm-s-xq-dark span.cm-error{color:red}.cm-s-xq-dark .CodeMirror-activeline-background{background:#27282e}.cm-s-xq-dark .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.cm-s-xq-light span.cm-keyword{line-height:1em;font-weight:700;color:#5a5cad}.cm-s-xq-light span.cm-atom{color:#6c8cd5}.cm-s-xq-light span.cm-number{color:#164}.cm-s-xq-light span.cm-def{text-decoration:underline}.cm-s-xq-light span.cm-type,.cm-s-xq-light span.cm-variable,.cm-s-xq-light span.cm-variable-2,.cm-s-xq-light span.cm-variable-3{color:#000}.cm-s-xq-light span.cm-comment{color:#0080ff;font-style:italic}.cm-s-xq-light span.cm-string{color:red}.cm-s-xq-light span.cm-meta{color:#ff0}.cm-s-xq-light span.cm-qualifier{color:grey}.cm-s-xq-light span.cm-builtin{color:#7ea656}.cm-s-xq-light span.cm-bracket{color:#cc7}.cm-s-xq-light span.cm-tag{color:#3f7f7f}.cm-s-xq-light span.cm-attribute{color:#7f007f}.cm-s-xq-light span.cm-error{color:red}.cm-s-xq-light .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-xq-light .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important;background:#ff0}.cm-s-yeti.CodeMirror{background-color:#eceae8!important;color:#d1c9c0!important;border:none}.cm-s-yeti .CodeMirror-gutters{color:#adaba6;background-color:#e5e1db;border:none}.cm-s-yeti .CodeMirror-cursor{border-left:thin solid #d1c9c0}.cm-s-yeti .CodeMirror-linenumber{color:#adaba6}.cm-s-yeti.CodeMirror-focused div.CodeMirror-selected{background:#dcd8d2}.cm-s-yeti .CodeMirror-line::selection,.cm-s-yeti .CodeMirror-line>span::selection,.cm-s-yeti .CodeMirror-line>span>span::selection{background:#dcd8d2}.cm-s-yeti .CodeMirror-line::-moz-selection,.cm-s-yeti .CodeMirror-line>span::-moz-selection,.cm-s-yeti .CodeMirror-line>span>span::-moz-selection{background:#dcd8d2}.cm-s-yeti span.cm-comment{color:#d4c8be}.cm-s-yeti span.cm-string,.cm-s-yeti span.cm-string-2{color:#96c0d8}.cm-s-yeti span.cm-number{color:#a074c4}.cm-s-yeti span.cm-variable{color:#55b5db}.cm-s-yeti span.cm-variable-2{color:#a074c4}.cm-s-yeti span.cm-def{color:#55b5db}.cm-s-yeti span.cm-keyword,.cm-s-yeti span.cm-operator{color:#9fb96e}.cm-s-yeti span.cm-atom{color:#a074c4}.cm-s-yeti span.cm-meta,.cm-s-yeti span.cm-tag{color:#96c0d8}.cm-s-yeti span.cm-attribute{color:#9fb96e}.cm-s-yeti span.cm-qualifier{color:#96c0d8}.cm-s-yeti span.cm-builtin,.cm-s-yeti span.cm-property{color:#a074c4}.cm-s-yeti span.cm-type,.cm-s-yeti span.cm-variable-3{color:#96c0d8}.cm-s-yeti .CodeMirror-activeline-background{background:#e7e4e0}.cm-s-yeti .CodeMirror-matchingbracket{text-decoration:underline}.cm-s-zenburn .CodeMirror-gutters{background:#3f3f3f!important}.cm-s-zenburn .CodeMirror-foldgutter-open,.CodeMirror-foldgutter-folded{color:#999}.cm-s-zenburn .CodeMirror-cursor{border-left:1px solid #fff}.cm-s-zenburn{background-color:#3f3f3f;color:#dcdccc}.cm-s-zenburn span.cm-builtin{color:#dcdccc;font-weight:700}.cm-s-zenburn span.cm-comment{color:#7f9f7f}.cm-s-zenburn span.cm-keyword{color:#f0dfaf;font-weight:700}.cm-s-zenburn span.cm-atom{color:#bfebbf}.cm-s-zenburn span.cm-def{color:#dcdccc}.cm-s-zenburn span.cm-variable{color:#dfaf8f}.cm-s-zenburn span.cm-variable-2{color:#dcdccc}.cm-s-zenburn span.cm-string,.cm-s-zenburn span.cm-string-2{color:#cc9393}.cm-s-zenburn span.cm-number{color:#dcdccc}.cm-s-zenburn span.cm-tag{color:#93e0e3}.cm-s-zenburn span.cm-attribute,.cm-s-zenburn span.cm-property{color:#dfaf8f}.cm-s-zenburn span.cm-qualifier{color:#7cb8bb}.cm-s-zenburn span.cm-meta{color:#f0dfaf}.cm-s-zenburn span.cm-header,.cm-s-zenburn span.cm-operator{color:#f0efd0}.cm-s-zenburn span.CodeMirror-matchingbracket{box-sizing:border-box;background:transparent;border-bottom:1px solid}.cm-s-zenburn span.CodeMirror-nonmatchingbracket{border-bottom:1px solid;background:none}.cm-s-zenburn .CodeMirror-activeline,.cm-s-zenburn .CodeMirror-activeline-background{background:#000}.cm-s-zenburn div.CodeMirror-selected{background:#545454}.cm-s-zenburn .CodeMirror-focused div.CodeMirror-selected{background:#4f4f4f}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08)}.flatpickr-calendar.inline,.flatpickr-calendar.open{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{position:absolute;display:block;pointer-events:none;border:solid transparent;content:"";height:0;width:0;left:22px}.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:28px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{text-decoration:none;cursor:pointer;position:absolute;top:0;line-height:16px;height:28px;padding:10px;z-index:3;color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9)}.flatpickr-months .flatpickr-next-month.disabled,.flatpickr-months .flatpickr-prev-month.disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:6.16px 0 0;line-height:1;height:28px;display:inline-block;text-align:center;-webkit-transform:translateZ(0);transform:translateZ(0)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 .5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,.5);background:transparent;pointer-events:none}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays,.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-weekdays .flatpickr-weekdaycontainer,span.flatpickr-weekday{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,.54);line-height:1;margin:0;text-align:center;display:block;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.disabled,.flatpickr-day.disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{color:rgba(57,57,57,.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.disabled,.flatpickr-day.disabled:hover{cursor:not-allowed;color:rgba(57,57,57,.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{display:inline-block;float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden}.flatpickr-innerContainer,.flatpickr-rContainer{-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-rContainer{display:inline-block;padding:0}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{height:inherit;display:inline-block;float:left;line-height:inherit;color:#393939;font-weight:700;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#f3f3f3}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/ddmq-logo.svg b/carrera-console/carrera-boot/src/main/resources/static/ddmq-logo.svg new file mode 100644 index 0000000..6dcc061 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/ddmq-logo.svg @@ -0,0 +1 @@ +ddmq-logo \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/favicon.ico b/carrera-console/carrera-boot/src/main/resources/static/favicon.ico new file mode 100644 index 0000000..d64fc0b Binary files /dev/null and b/carrera-console/carrera-boot/src/main/resources/static/favicon.ico differ diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo.css b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo.css new file mode 100644 index 0000000..3d9cbe7 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo.css @@ -0,0 +1,370 @@ +*{margin: 0;padding: 0;list-style: none;} +/* +KISSY CSS Reset +理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。 +2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。 +3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。 +特色:1. 适应中文;2. 基于最新主流浏览器。 +维护:玉伯, 正淳 + */ + +/** 清除内外边距 **/ +body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ +dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ +pre, /* text formatting elements 文本格式元素 */ +form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ +th, td /* table elements 表格元素 */ { + margin: 0; + padding: 0; +} + +/** 设置默认字体 **/ +body, +button, input, select, textarea /* for ie */ { + font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif; +} +h1, h2, h3, h4, h5, h6 { font-size: 100%; } +address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ +code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */ +small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ + +/** 重置列表元素 **/ +ul, ol { list-style: none; } + +/** 重置文本格式元素 **/ +a { text-decoration: none; } +a:hover { text-decoration: underline; } + + +/** 重置表单元素 **/ +legend { color: #000; } /* for ie6 */ +fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */ +button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */ +/* 注:optgroup 无法扶正 */ + +/** 重置表格元素 **/ +table { border-collapse: collapse; border-spacing: 0; } + +/* 清除浮动 */ +.ks-clear:after, .clear:after { + content: '\20'; + display: block; + height: 0; + clear: both; +} +.ks-clear, .clear { + *zoom: 1; +} + +.main { + padding: 30px 100px; +width: 960px; +margin: 0 auto; +} +.main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;} + +.helps{margin-top:40px;} +.helps pre{ + padding:20px; + margin:10px 0; + border:solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists{ + width: 100% !important; + +} + +.icon_lists li{ + float:left; + width: 100px; + height:180px; + text-align: center; + list-style: none !important; +} +.icon_lists .icon{ + font-size: 42px; + line-height: 100px; + margin: 10px 0; + color:#333; + -webkit-transition: font-size 0.25s ease-out 0s; + -moz-transition: font-size 0.25s ease-out 0s; + transition: font-size 0.25s ease-out 0s; + +} +.icon_lists .icon:hover{ + font-size: 100px; +} + + + +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p, +.markdown pre { + margin: 1em 0; +} + +.markdown > p, +.markdown > blockquote, +.markdown > .highlight, +.markdown > ol, +.markdown > ul { + width: 80%; +} + +.markdown ul > li { + list-style: circle; +} + +.markdown > ul li, +.markdown blockquote ul > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown > ul li p, +.markdown > ol li p { + margin: 0.6em 0; +} + +.markdown ol > li { + list-style: decimal; +} + +.markdown > ol li, +.markdown blockquote ol > li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown pre { + border-radius: 6px; + background: #f7f7f7; + padding: 20px; +} + +.markdown pre code { + border: none; + background: #f7f7f7; + margin: 0; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown > table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown > table th { + white-space: nowrap; + color: #333; + font-weight: 600; + +} + +.markdown > table th, +.markdown > table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown > table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; + font-style: italic; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown > br, +.markdown > p > br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +pre{ + background: #fff; +} + + + + + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_fontclass.html b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_fontclass.html new file mode 100644 index 0000000..df4df64 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_fontclass.html @@ -0,0 +1,388 @@ + + + + + + IconFont + + + + +
+

IconFont 图标

+
    + +
  • + +
    失败
    +
    .bcui-icon-information-fail
    +
  • + +
  • + +
    提示
    +
    .bcui-icon-icon
    +
  • + +
  • + +
    topic
    +
    .bcui-icon-topic1
    +
  • + +
  • + +
    refresh
    +
    .bcui-icon-refresh-single
    +
  • + +
  • + +
    点点
    +
    .bcui-icon-setting-more
    +
  • + +
  • + +
    收藏
    +
    .bcui-icon-shoucang
    +
  • + +
  • + +
    日志
    +
    .bcui-icon-topic
    +
  • + +
  • + +
    +
    .bcui-icon-jia
    +
  • + +
  • + +
    减号
    +
    .bcui-icon-jian
    +
  • + +
  • + +
    calendar
    +
    .bcui-icon-calendar
    +
  • + +
  • + +
    check
    +
    .bcui-icon-check
    +
  • + +
  • + +
    alert
    +
    .bcui-icon-alert
    +
  • + +
  • + +
    blocks
    +
    .bcui-icon-blocks
    +
  • + +
  • + +
    activated
    +
    .bcui-icon-activated
    +
  • + +
  • + +
    chevron-right
    +
    .bcui-icon-chevron-right
    +
  • + +
  • + +
    chevron-left
    +
    .bcui-icon-chevron-left
    +
  • + +
  • + +
    calculator
    +
    .bcui-icon-calculator
    +
  • + +
  • + +
    cloud
    +
    .bcui-icon-cloud
    +
  • + +
  • + +
    chevron-top
    +
    .bcui-icon-chevron-top
    +
  • + +
  • + +
    collapse
    +
    .bcui-icon-collapse
    +
  • + +
  • + +
    chevron-bottom
    +
    .bcui-icon-chevron-bottom
    +
  • + +
  • + +
    computer-filled
    +
    .bcui-icon-computer-filled
    +
  • + +
  • + +
    computer
    +
    .bcui-icon-computer
    +
  • + +
  • + +
    confirm
    +
    .bcui-icon-confirm
    +
  • + +
  • + +
    disk
    +
    .bcui-icon-disk
    +
  • + +
  • + +
    copy
    +
    .bcui-icon-copy
    +
  • + +
  • + +
    hardware-filled
    +
    .bcui-icon-hardware-filled
    +
  • + +
  • + +
    expand
    +
    .bcui-icon-expand
    +
  • + +
  • + +
    error
    +
    .bcui-icon-error
    +
  • + +
  • + +
    full
    +
    .bcui-icon-full
    +
  • + +
  • + +
    hardware
    +
    .bcui-icon-hardware
    +
  • + +
  • + +
    info
    +
    .bcui-icon-info
    +
  • + +
  • + +
    loading
    +
    .bcui-icon-loading
    +
  • + +
  • + +
    minus
    +
    .bcui-icon-minus
    +
  • + +
  • + +
    mirror
    +
    .bcui-icon-mirror
    +
  • + +
  • + +
    nodes
    +
    .bcui-icon-nodes
    +
  • + +
  • + +
    network-filled
    +
    .bcui-icon-network-filled
    +
  • + +
  • + +
    overview-filled
    +
    .bcui-icon-overview-filled
    +
  • + +
  • + +
    overview
    +
    .bcui-icon-overview
    +
  • + +
  • + +
    network
    +
    .bcui-icon-network
    +
  • + +
  • + +
    pencil
    +
    .bcui-icon-pencil
    +
  • + +
  • + +
    refresh
    +
    .bcui-icon-refresh
    +
  • + +
  • + +
    power-off
    +
    .bcui-icon-power-off
    +
  • + +
  • + +
    plus
    +
    .bcui-icon-plus
    +
  • + +
  • + +
    search
    +
    .bcui-icon-search
    +
  • + +
  • + +
    security-filled
    +
    .bcui-icon-security-filled
    +
  • + +
  • + +
    stop
    +
    .bcui-icon-stop
    +
  • + +
  • + +
    security
    +
    .bcui-icon-security
    +
  • + +
  • + +
    start
    +
    .bcui-icon-start
    +
  • + +
  • + +
    setting-filled
    +
    .bcui-icon-setting-filled
    +
  • + +
  • + +
    setting
    +
    .bcui-icon-setting
    +
  • + +
  • + +
    storage-filled
    +
    .bcui-icon-storage-filled
    +
  • + +
  • + +
    terminal
    +
    .bcui-icon-terminal
    +
  • + +
  • + +
    storage
    +
    .bcui-icon-storage
    +
  • + +
  • + +
    times
    +
    .bcui-icon-times
    +
  • + +
  • + +
    triangle-bottom
    +
    .bcui-icon-triangle-bottom
    +
  • + +
  • + +
    trash
    +
    .bcui-icon-trash
    +
  • + +
  • + +
    triangle-top
    +
    .bcui-icon-triangle-top
    +
  • + +
+ +

font-class引用

+
+ +

font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。

+

与unicode使用方式相比,具有如下特点:

+
    +
  • 兼容性良好,支持ie8+,及所有现代浏览器。
  • +
  • 相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。
  • +
  • 因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。
  • +
  • 不过因为本质上还是使用的字体,所以多色图标还是不支持的。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的fontclass代码:

+ + +
<link rel="stylesheet" type="text/css" href="./iconfont.css">
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<i class="iconfont bcui-icon-xxx"></i>
+
+

"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。

+
+
+ + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_symbol.html b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_symbol.html new file mode 100644 index 0000000..5a90204 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_symbol.html @@ -0,0 +1,527 @@ + + + + + + IconFont + + + + + + +
+

IconFont 图标

+
    + +
  • + +
    失败
    +
    #bcui-icon-information-fail
    +
  • + +
  • + +
    提示
    +
    #bcui-icon-icon
    +
  • + +
  • + +
    topic
    +
    #bcui-icon-topic1
    +
  • + +
  • + +
    refresh
    +
    #bcui-icon-refresh-single
    +
  • + +
  • + +
    点点
    +
    #bcui-icon-setting-more
    +
  • + +
  • + +
    收藏
    +
    #bcui-icon-shoucang
    +
  • + +
  • + +
    日志
    +
    #bcui-icon-topic
    +
  • + +
  • + +
    +
    #bcui-icon-jia
    +
  • + +
  • + +
    减号
    +
    #bcui-icon-jian
    +
  • + +
  • + +
    calendar
    +
    #bcui-icon-calendar
    +
  • + +
  • + +
    check
    +
    #bcui-icon-check
    +
  • + +
  • + +
    alert
    +
    #bcui-icon-alert
    +
  • + +
  • + +
    blocks
    +
    #bcui-icon-blocks
    +
  • + +
  • + +
    activated
    +
    #bcui-icon-activated
    +
  • + +
  • + +
    chevron-right
    +
    #bcui-icon-chevron-right
    +
  • + +
  • + +
    chevron-left
    +
    #bcui-icon-chevron-left
    +
  • + +
  • + +
    calculator
    +
    #bcui-icon-calculator
    +
  • + +
  • + +
    cloud
    +
    #bcui-icon-cloud
    +
  • + +
  • + +
    chevron-top
    +
    #bcui-icon-chevron-top
    +
  • + +
  • + +
    collapse
    +
    #bcui-icon-collapse
    +
  • + +
  • + +
    chevron-bottom
    +
    #bcui-icon-chevron-bottom
    +
  • + +
  • + +
    computer-filled
    +
    #bcui-icon-computer-filled
    +
  • + +
  • + +
    computer
    +
    #bcui-icon-computer
    +
  • + +
  • + +
    confirm
    +
    #bcui-icon-confirm
    +
  • + +
  • + +
    disk
    +
    #bcui-icon-disk
    +
  • + +
  • + +
    copy
    +
    #bcui-icon-copy
    +
  • + +
  • + +
    hardware-filled
    +
    #bcui-icon-hardware-filled
    +
  • + +
  • + +
    expand
    +
    #bcui-icon-expand
    +
  • + +
  • + +
    error
    +
    #bcui-icon-error
    +
  • + +
  • + +
    full
    +
    #bcui-icon-full
    +
  • + +
  • + +
    hardware
    +
    #bcui-icon-hardware
    +
  • + +
  • + +
    info
    +
    #bcui-icon-info
    +
  • + +
  • + +
    loading
    +
    #bcui-icon-loading
    +
  • + +
  • + +
    minus
    +
    #bcui-icon-minus
    +
  • + +
  • + +
    mirror
    +
    #bcui-icon-mirror
    +
  • + +
  • + +
    nodes
    +
    #bcui-icon-nodes
    +
  • + +
  • + +
    network-filled
    +
    #bcui-icon-network-filled
    +
  • + +
  • + +
    overview-filled
    +
    #bcui-icon-overview-filled
    +
  • + +
  • + +
    overview
    +
    #bcui-icon-overview
    +
  • + +
  • + +
    network
    +
    #bcui-icon-network
    +
  • + +
  • + +
    pencil
    +
    #bcui-icon-pencil
    +
  • + +
  • + +
    refresh
    +
    #bcui-icon-refresh
    +
  • + +
  • + +
    power-off
    +
    #bcui-icon-power-off
    +
  • + +
  • + +
    plus
    +
    #bcui-icon-plus
    +
  • + +
  • + +
    search
    +
    #bcui-icon-search
    +
  • + +
  • + +
    security-filled
    +
    #bcui-icon-security-filled
    +
  • + +
  • + +
    stop
    +
    #bcui-icon-stop
    +
  • + +
  • + +
    security
    +
    #bcui-icon-security
    +
  • + +
  • + +
    start
    +
    #bcui-icon-start
    +
  • + +
  • + +
    setting-filled
    +
    #bcui-icon-setting-filled
    +
  • + +
  • + +
    setting
    +
    #bcui-icon-setting
    +
  • + +
  • + +
    storage-filled
    +
    #bcui-icon-storage-filled
    +
  • + +
  • + +
    terminal
    +
    #bcui-icon-terminal
    +
  • + +
  • + +
    storage
    +
    #bcui-icon-storage
    +
  • + +
  • + +
    times
    +
    #bcui-icon-times
    +
  • + +
  • + +
    triangle-bottom
    +
    #bcui-icon-triangle-bottom
    +
  • + +
  • + +
    trash
    +
    #bcui-icon-trash
    +
  • + +
  • + +
    triangle-top
    +
    #bcui-icon-triangle-top
    +
  • + +
+ + +

symbol引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过font-size,color来调整样式。
  • +
  • 兼容性较差,支持 ie9+,及现代浏览器。
  • +
  • 浏览器渲染svg的性能一般,还不如png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的symbol代码:

+
<script src="./iconfont.js"></script>
+

第二步:加入通用css代码(引入一次就行):

+
<style type="text/css">
+.icon {
+   width: 1em; height: 1em;
+   vertical-align: -0.15em;
+   fill: currentColor;
+   overflow: hidden;
+}
+</style>
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#bcui-icon-xxx"></use>
+</svg>
+        
+
+ + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_unicode.html b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_unicode.html new file mode 100644 index 0000000..7ed59ba --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/demo_unicode.html @@ -0,0 +1,426 @@ + + + + + + IconFont + + + + + +
+

IconFont 图标

+
    + +
  • + +
    失败
    +
    &#xe615;
    +
  • + +
  • + +
    提示
    +
    &#xe723;
    +
  • + +
  • + +
    topic
    +
    &#xe80a;
    +
  • + +
  • + +
    refresh
    +
    &#xe639;
    +
  • + +
  • + +
    点点
    +
    &#xe665;
    +
  • + +
  • + +
    收藏
    +
    &#xe60e;
    +
  • + +
  • + +
    日志
    +
    &#xe71d;
    +
  • + +
  • + +
    +
    &#xe62c;
    +
  • + +
  • + +
    减号
    +
    &#xe62d;
    +
  • + +
  • + +
    calendar
    +
    &#xe6ec;
    +
  • + +
  • + +
    check
    +
    &#xe6ed;
    +
  • + +
  • + +
    alert
    +
    &#xe6ee;
    +
  • + +
  • + +
    blocks
    +
    &#xe6ef;
    +
  • + +
  • + +
    activated
    +
    &#xe6f0;
    +
  • + +
  • + +
    chevron-right
    +
    &#xe6f1;
    +
  • + +
  • + +
    chevron-left
    +
    &#xe6f2;
    +
  • + +
  • + +
    calculator
    +
    &#xe6f3;
    +
  • + +
  • + +
    cloud
    +
    &#xe6f4;
    +
  • + +
  • + +
    chevron-top
    +
    &#xe6f5;
    +
  • + +
  • + +
    collapse
    +
    &#xe6f6;
    +
  • + +
  • + +
    chevron-bottom
    +
    &#xe6f7;
    +
  • + +
  • + +
    computer-filled
    +
    &#xe6f8;
    +
  • + +
  • + +
    computer
    +
    &#xe6f9;
    +
  • + +
  • + +
    confirm
    +
    &#xe6fa;
    +
  • + +
  • + +
    disk
    +
    &#xe6fb;
    +
  • + +
  • + +
    copy
    +
    &#xe6fc;
    +
  • + +
  • + +
    hardware-filled
    +
    &#xe6fd;
    +
  • + +
  • + +
    expand
    +
    &#xe6fe;
    +
  • + +
  • + +
    error
    +
    &#xe6ff;
    +
  • + +
  • + +
    full
    +
    &#xe700;
    +
  • + +
  • + +
    hardware
    +
    &#xe701;
    +
  • + +
  • + +
    info
    +
    &#xe702;
    +
  • + +
  • + +
    loading
    +
    &#xe703;
    +
  • + +
  • + +
    minus
    +
    &#xe704;
    +
  • + +
  • + +
    mirror
    +
    &#xe705;
    +
  • + +
  • + +
    nodes
    +
    &#xe706;
    +
  • + +
  • + +
    network-filled
    +
    &#xe707;
    +
  • + +
  • + +
    overview-filled
    +
    &#xe708;
    +
  • + +
  • + +
    overview
    +
    &#xe709;
    +
  • + +
  • + +
    network
    +
    &#xe70a;
    +
  • + +
  • + +
    pencil
    +
    &#xe70b;
    +
  • + +
  • + +
    refresh
    +
    &#xe70c;
    +
  • + +
  • + +
    power-off
    +
    &#xe70d;
    +
  • + +
  • + +
    plus
    +
    &#xe70e;
    +
  • + +
  • + +
    search
    +
    &#xe70f;
    +
  • + +
  • + +
    security-filled
    +
    &#xe710;
    +
  • + +
  • + +
    stop
    +
    &#xe711;
    +
  • + +
  • + +
    security
    +
    &#xe712;
    +
  • + +
  • + +
    start
    +
    &#xe713;
    +
  • + +
  • + +
    setting-filled
    +
    &#xe714;
    +
  • + +
  • + +
    setting
    +
    &#xe715;
    +
  • + +
  • + +
    storage-filled
    +
    &#xe716;
    +
  • + +
  • + +
    terminal
    +
    &#xe717;
    +
  • + +
  • + +
    storage
    +
    &#xe718;
    +
  • + +
  • + +
    times
    +
    &#xe719;
    +
  • + +
  • + +
    triangle-bottom
    +
    &#xe71a;
    +
  • + +
  • + +
    trash
    +
    &#xe71b;
    +
  • + +
  • + +
    triangle-top
    +
    &#xe71c;
    +
  • + +
+

unicode引用

+
+ +

unicode是字体在网页端最原始的应用方式,特点是:

+
    +
  • 兼容性最好,支持ie6+,及所有现代浏览器。
  • +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。
  • +
+
+

注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式

+
+

unicode使用步骤如下:

+

第一步:拷贝项目下面生成的font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.eot');
+  src: url('iconfont.eot?#iefix') format('embedded-opentype'),
+  url('iconfont.woff') format('woff'),
+  url('iconfont.ttf') format('truetype'),
+  url('iconfont.svg#iconfont') format('svg');
+}
+
+

第二步:定义使用iconfont的样式

+
.iconfont{
+  font-family:"iconfont" !important;
+  font-size:16px;font-style:normal;
+  -webkit-font-smoothing: antialiased;
+  -webkit-text-stroke-width: 0.2px;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
<i class="iconfont">&#x33;</i>
+ +
+

"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。

+
+
+ + + + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.css b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.css new file mode 100644 index 0000000..038b4ee --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.css @@ -0,0 +1,133 @@ + +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1541038457371'); /* IE9*/ + src: url('iconfont.eot?t=1541038457371#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAB7cAAsAAAAAMTQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8hUoCY21hcAAAAYAAAAG7AAAExur3PtBnbHlmAAADPAAAF6AAACQQ3AAiJmhlYWQAABrcAAAAMQAAADYTsEjvaGhlYQAAGxAAAAAgAAAAJAhvBFlobXR4AAAbMAAAABsAAADs7TP/+mxvY2EAABtMAAAAeAAAAHj+nweubWF4cAAAG8QAAAAfAAAAIAFRAN5uYW1lAAAb5AAAAUUAAAJtPlT+fXBvc3QAAB0sAAABsAAAArHI/N1veJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWWcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBye8b3gYm7438AQw9zI0AgUZgTJAQDg5AwEeJzl01lWE1EUheG/0gEhhDb0ETV2aGLfhfkwBcfog+M4hwcUbEDsCPtm64sOwar1Za06q5Jblbs30ATqMpQGVJdUlONC02o6r9Oezhu80/UKS5rUohu9GMU4DrOfg6P2ZALT2bDM4vjP7K+j0vfLuTY93+iElqazzOn3m1ppng4LdFnUOsu6c1X39Vhng0222GaHXfpcY4/r3OAmA25xmzvc5R773OeBnnjEQx7xmCc85RnPecFLXvGaMQfMUCvvW7X+ebb/7+iUj9rb31cHZQdNe0L0rKQghqZ9IkamHSPGVpITh1YSFcdWkhPvTTtLfLCycpyYdps4Ncr6H00JID6ZskB8NqWC+GLKB3FmSgpxbsoM8dUo73FhyhHxzZQo4rspW8QPU8qIn6a8Eb9MySMuTRkkJqY0kphySVamhJI1U1bJuim1ZMOUX7JpSjLZMmWanDGlm5w15ZycMyWebJuyT86bWkB2TH0gF0zNILtW2p6LpraQS6bekMumBpErpi6Rq6ZWkWumfpE9U9PIdVPnyA1T+8hNUw/JLVMjyW1TN8kdU0vJXSuZzL5R/o+BqcMctY36FRQZvqMAeJydOgmYFNWZ9b9Xx/Td1XX1HH13V0/Pxcz0BcPQMxwqjTLDoRiODSgElA0IuB7sZsN4RVGjEV0TkRiFgAlo4hJdNYdBo5HEI4mJ4hVNshq/JGuEHCarVLn/q+qBwWiOna569d77/6p677//v4ajHPfeE/Q+WuL8XDtX4DgIghQHowbVHsgruiqmJ4Ekps3SEOTNUqU/AdVKv66GwCDcg28LwtsPuu3dnkiz59JLPVGFtUqUtc0RbGlJePvrLs7X3xas7/0lhnsnxwm4lofpA3Q6rqWZi3EpLv2+9ch4Yg/HOEuLWkYryhkZ/vyQJQjWQw8dFYSjD+16XhCe37XreZ5/ftfkMfyjw/w47CGLP/oIz6ANHPLJsYL9ZTiTE/Hd36YP0yHOx+nOu3Pj1MhQAd+p5Fg/p/RhX6imtJRclAEv5cYJldVbBQASXX2tQKzXYT8dmWbPBTJSg6/ttX5LIt3WWphmf2f8JD/mP7PG+hXwWz9GkmC9OngaBfjK0CKAn/RYb5Eha+/Qt4cPDHH4B7i2rfQOeiHXj4MeXIcRBykI+R6o1qiBPb3YP8SGQUiAGaRxYuhFXGfFpD2iHARxSk8w8Yfbbr3bCIxuvrZ+hUQCXkl8eDvCiLhh4W1bz4xlz7p6Ycq85bV4uEiGRPDL0vQ7zthxt4G3zfnEopRvrSiHhO2PiMQnS58OIvae27eeGRLpt7Yvv5etkcnRS+RSmuNkLsOVcZ29fS7bevuQaUi6XvnvmIG7YbC7exD+eku+MXHCfuzDRxzBdd1LD9FTcVUzcVU1pF8+h6RKiyEQgkRPABWRWpUhMPQaydO8aChqJm+mQyj+lUlQrhg5BJYSoBtCxdDo95oEMRKw/3yZqBmacIX9TiAiCZ4H0lQPBDze3//eb6g+ko4HaJq87VE9v6cZEvg6AEiq91L+Uq8KEg4e8UZ1mZSP+AIB35EiCUejnoP2m61hD/AXXCBAWA+AHAur9hFyPs+fTyCkhr9HKBR59S1Kj0TEIlDi6MsBehsd5iJcluviJnOzcId5M5NCUspI2RSSVi6ZVBUzqbRZlkuVoqDhfLGcSZvTwNAkxFT1Yqq/UjKlVFpUdXYP3nHVbVqb7euoAFQ6yMWFKvgGwn7rKn847IfvwkDXmjUh5eq77S+FVLQEHwkpSmhCn2zbrsLkgjWrMBnwSqYFW63tfln2k2/6ZfjXrgE4SQmtvhIeBCWmqjHlaTyB9RtytIu+QhdynVyRm8pxOZTzlGjm5Rrup6Ibuibr/VW5giw8tk/cAe7UTIMDwmuqUsKbVPplYXbCujhWJqQnRq5omyULtJuC4CklrJZJuLhswusnb7eXCOmyawii3fafybTmZus7zcSUCAlkyRuZMBASbfJZwWiUvBI1ElmY3GO1pPp8PFTyzWSL9QgCalH7q3wXz3fhHsgJe/jHdvD/WLk15R9cMpzsrpStc4zn6BiXQO3gIFNmaiGhPXOvmYli1AM0Jafo2BhkK1l4j3MuY5U6QL1COfdqIfsoN9yazbYOuy2bbCARvFpAkq4920l/Q/YxCc6B4YEqnE461lkr7f2bxkjnx62VMLLJlYVf0pdpBm2Khh6B84Cu4ppSPaRURU3u1yWlqFCtWCanwlVNkYRy9HdKQvHAld6EmThP/oh87kcoZ50WziZlADmZDZN7w4ryov0WyPZNS5cyu+XHd7xM99MUvk3hDC6PPJvKDXGj3ELuTG4pt5zjFFSXfLFfN7QgdELazJdr4M4hbSbMAS5kIt40KFXefy+bA3QXSkYuUiR0Hq/bb71VfxzVEmL643oMIN7JJlivMREjy3fsP6ixnnZQi8c7d+zQJwzt/TDjrnp9n/2t2fU6GdxRj2sH9VgMUeKWsKMObbo71Nvg6R0OFG/SGtDjI1hRr9vrYJW9tF5fCnMauujKh8z1cYNIiXSQaBMkIi/065oqiewXQ/Exq2gpK+WSmUlLopYxK0o/YxjGDdXKtli5QycLauTl2gKCV/vGVZtzwXpbUF6HJmi53DatelKi7eNw2fJkV/eQahgqHdM7yjEr6+I7912+btmp/fJQtC2el+UphY4zlEx7udZpztpwqfXlwnABdG1I1cZ95g7aSlcyGfOA5AGDttqxJXCVffES2AL/vcS+CHsNvKSLpzBZlH7BgBfDVRPRuCbE+yJdT5dxoUZs0I00KXNT8FWoK0gUZkUZUTK5FFJIVoMkk2IhC2o9MrqKJ2DAksfTaFyBC6sAapg0rjZq5KQayIl23WYdqH0esnV7DvjPOus74weNaCErG9K0EHk5pNWh1mNl9fZEGDvk5Z7ai/V6/aWX7IfOOuuss/HkeFz3H+lB8jYX5VqQh3U3pkm5gZR7xFk8gUe+L5+R8q4n1jLoIIkbezFul0x0hT2A4ov71F2HQh8nq+ZYP5yzisDMarCSCW5ZfMrG2Klrmlrjl1xGk03hhZVZSyDX2i6Khon3DnSRXjT+uhIidet8dwPuZmC4vpyQ5fWBM+VkV9PCtQRmT2s6ux4drm+G1t6pQM4YyiWiBi+VsuiLoFow8iGvUj7Z+iM+IaHpDr9RYF8jN7NIzuPaFHjUXjIId8KeQTtOFttLpsGd9uJp8AuGynznF/kbUbZDaP0mocafivzHrcVAFdEVupraGGcaYwU5+9fgIKtiPofSnqvoOb7Odvfu/SFdgyPIYk1DBjt8O963e8axcAo6w5L9iihCWgrTMS2cRanQQ9mwZr+khXIMDRv7ZRSUcYhqv3wcQubaazxNwpNCiH+Kb2rogEOTKxhNclBFspxAk52sXcKaGPMFiLudPIt2NsMogQYrk9KK47wuVaai3WKGDgWaiYAhr6YlQL9/eFZQVYP2PhYEzLLfCjFXHiK/ZdfUaSHlJNfHo8ffAsuDihK072CvYnL5Y7TtVYf+nSxiVBy9aQgnU5u0qMludIKhi5nByG1c+iTsO11RuoU80zsEMNRr9fQOAwz3OoHGM6y1fiobhgwbWGvdYUSjBp3ttBWY3md3900HvMKP+6YviATt7mAkEoQfByNHD4ORiUYzSKt5UMA/h4zE9Vn0oyg5MouyJAPy1OTyFa6qc4bIwaNjsw/CpfXDT9i/EwQIPvEEBETR/j20jdXZvHWaOxkUBPt3TyCSK4OH6P204NAg4/getLEfZE2OU4Wi9xDKRTQnRe3+hv3Y5l6t9WSbYzYmWeudawvN2p/+k/WTP5FXtbB1jSN8F4SZ0ZhkXdPDMHrIBZNq1i/r9RvQbtQberGFvkAvaWRgThaU09j7004Ig2KA5qCxqAzIKVnA7Gf8R6dCV9q6Oona3p0axT65MNXN+tbV5EI7D1Ptx8bP+Gi6C3pS5LFUN+ux+6amuqliTSWPfX50dHRklNFddGKAMdqC3iiEFszkeh1PhO+qZljAOhVY8EqZRCJNcGlGkU2gs0UgINGmYZamijkH2Siy6HYMgwLu6WEWr7JmC6nlK2CJGBr1HpskMeuRfJW8U7V9x+bgl2/8hxpX8YDLq+Z115tV2O6OrdUYvG04L1+9mgEBm3Ebcw9/+V/aGMNRruM2ZOL4b8JRMQRdlQSMKLP8YIi9LvTuo8hb+A284w5tkbH6hJFdPAG3CCEJEiiKP5dCgMaGGRNs0L68+lf67KnYkJPQznyfD/HfF5qaGrrhxgk+jKA4qOYlVA/JqBpV6uiG5OgJWbh7wZ49C3Y77Z9fhBS+/tUXX7RfRXVJwdg4BFuyZwLkRcR05eANegv1oRz4nWgwzbSlmkebhq6UsbmIEYgTamVyVUyytEyZGS0NwSyJLxefLZLPlqwFr7+rx+rkM6+9gyHPHGthkXyuZH0K46B3Yd8ciGvvvKaUyGeL1qfmYPj1DtzFID8oWueWyFdef1eL1+3TnRsZfyUn/7qDTkf+5jAamIbedSH3T44On2C5cqn+OAZOx0KCUg0T9CCke5gu9evKhH51Qh9dcYVpGpq7tOn2Mt/3BgJe8nHWWjeRj+tmPByOm7p1E+a72NkPcjwTl0m2nIUP7D4WNYwoOcBaa/h4n7yJzzvdefZd3sBC55Gns4djDk3uYp2vReIRPFozGesJmXVl7P4OL7IzOQPaCwCFdrDfLLBO4YT4kclFK0rGBGlQ+lEVnVhD1WlRzhDufRLxoppS8UgUCh3bttGx90mE/Vk1nU+jjykMFezZsP64v/sj2i5UP3wsi2ow3cJLDWNQLm+K8K4SGrmmOphqFYia1CBiv/dQOEqXhlQiDlcHR4ZPRrelyw8BhoK6+zyeg+fYTmS0ODx3lINn947bpR/Se2iRC6CdNLkS5t7zkPNBYJxPgI6Ml/JVTPfQTE6ChkdD3rIamp6LMzQxBCKiGVVcGbP5Q+CG1VKcIHGcJOwnzalU8+5U6tu7y3MJmVve3TVIyOCj0FErFGod8NKHgBWkjQqIQW7zJf122ZfyDvlj5MaYX6wpfVVrXbU3UovMNOEJc+ZOpPBQoTDvbyMqaVVNK0mHtz7c/376vxgPUy7s+IoOzHWHubncEm4ltwbpb0h5ipJcGq/X5ZnpdYwyWgblAyE5d7bozroCknFiUAVTvmOAcXRWAISNpd3FAXPYxGPqKMDo1LZcbrJpkkRpd6nfHDLxGBwhZGSwzTQn53L2fdPPmzHjvOlrtlK6dU3PSA8eszH2XHHKRNxYLjcll2vCdKoJH2O/l5tRn5EFBEwdnQ3s8ZNzsOzDIE8MbxrbNEy2rlmz9ZTueYtHu2HF7NnLrcOQRdwcrnBw5BRga5lswq2/RVp6HB/3efRxEhdE29aGsUAH188NID05EI2MWS5VU0UMdjIVJklFt2hWDIJTnqwBipORaQBwqLAuK5Ca1aIuwajofV5rIjN/7pXChzz2TxddmT/oSfyPmvAczF9pPxNNS8+nboLBVTelnpfSd81r6/L+wdfZFm33veFvj+70ikdFLzy1ZnVtBuZxa/pX29dHN8ybsb69ff2MeRuI3bt1wcpr29quXblg61D2xpUrbzx6OHHR/PkXJaBl9Zo1q8djpycxx45iFqXgjnCVGELLFUlm5Q8nEyEzbnm6ifrtG2Eh/Dt/aOfOQzx/iEY9T233A6z3j9qXOzM77zjUiB1vpr+ma1H34kirvolVYmZgnfBk/NFMxgSmf5J8rHSMSHDh5m1AH7nhmvsj9rVyFE6HC7Hl33zwvsMCPXQP9uH78s6LToeojDPY2mNylNwUeeDqGx6hsG0zznTgec8hKhy+78E3eew/d9FO2X6uAxARcJI9IjpuK+6iz9BzHDvYyY1yG7ltGB5MKGbn3fq2swuoxEES+Tya/IpT5zX0LIjMF9Qahd8Q224QWPnXNRrMvom0B2rENXpORm7mHW3qx5kqPipvOtWTNJuuVniDGakgYFrHJvCQRJ2I9x7h+SP34oZx/dse5vmHt93AWghGuj3yUfvp4c7mgeAkLdDe7GuBKPhDSbkpePY1hYQQkycX+awZ9KXaBG84n6N9paAMPv/SNRL1yIYqzV8pe4NqSClsONnr96m6tzqiUNokxqyLBL9iKELZMOtQ2d/W2uXl21K+jpaW0z43a+ocnz/agatx13Tf4VHkGXLAaeHMUKgn/Oo3Juc/tUghnWpt1CsfgF97PPGkZ6C5PbmsEp8zyHf0qEFBT4a03k5+yknNcdMbaLFXe3QtQJs8a2+ppqaqQSncmhdxEX4xgRpDRW0J/KdXV70+7/LrC7P2PBhPTAmmdCFQjbXO/0Q+hTtZ7sr1T+n36Fzkq8YsHjCLbg4hp9hHEqSvGgKy7gd2X1A7oLbx3UIIjYsv5tvh9Y6QA2xe6Obb1ANakJBRr3cHgkYatYsxegD9pj5RsovHJLocADjwyS9Q/rs33/xdfgX79GEJ/HN7gHuPI9ubv3U5ziLM/Spy9x9arjhwYFwPx+jP8LnN6LE40CZ+WikzrXR8s2tPZEdUUGVg3dpLCP/Crl0v8GTzx677KhXsI08+aR8R6H9BVW0FaG1nDR0+t+fhT9z5iiC8cufmb/atrfxp14/sX6O71n905zvnQ6tqr1BbW1W4XW0dr8+MxwYcyEXmXuWMnCrDvr2wzz5jr30GPDve2bfXWfte+hxdhNlXDDMS9C4YEx/TIFUUJmgQ9Tx11lPFi4b3vc7zr++763U+b2+74FZKb73gX1j7PEKzJv/6XS58xoVLxyH/csGtDTo9TjfTKairzLZQR52QtZl03mS/slktmzXiaB/ymTCVS6BZC7G0MEc3E35o1r9FjP6wHAzcvGJE8wJAk94qD42dHAxnwpK3eNYkr78/lfrZs/NLV4CHnG+/sPyM5dO9Xl0Sppw976MFc+XKU+SWqA/4/j6Px8OLuW4fIaJQuOypuZUt73GNfH0DOezkFqwG9b6I88SsETjJ45GI07Iyk5sy2+6VfIZNjiOsOA7oZYhuHHcz3Yv2toubz535QRTJs9zEoUiVmanjJEFdYD+lomZcMzOJWS5JrMTQsenOr79PwVy6atC9RDhp7lVq82RZCQe/tPZMA+nmicaVk6+f29Qk5yNN3oF/LvsCVfTiN+iRi4cnEwJUNWLB2ubporRo10KJZ4SOnPzRm+lXBuwXbhxYTK6zH1j70XPrXn+0SRxa95Fzu7rWrx9RYq1+EKoVkfeCl5cK/X6KS+q2Fni9w4tPOxVmU6BEoIEp3QI/OCyA4BlZvy6dmz97+RRSGrRfu25w0bg+HaTX0z7sqazqJBvMKCMDaqAbuHlVlGjSOtyidJq6bnYqpBZR1Qh8Ak6xNq3wg57TyeN6TgOfvcOX7cj4G8/8Gn0Ubcp0jKW4qsHCQsxp3Ny1Wq5UDZ0VWdFuV/JIaRZahtCEY7TIUl6kqoSuADmD1BfZp0GY4ApnLhObfavaeyOBBwIy9Lav8kWlZaLoW9XUtMonisukKIOCjOAIgzbjlORCJXh05BxCzhkZZe2vvuCTxIGkcn6AFdYD5yvJKYh4Oz5uoL84gI+53SdJDjwS+QuoATPxOe7TRs5p+PPP0l/Rc9Ez3s89yv3I+U5XdcrrxjFDajTK7VJGMtjY+TDtjJn1ykts7HyldsbsfoyrS46CIgnTmuo6RUSSROZGRckpyWsqyxnxx4hm6MzHMh8aA5zHBJJJL/OU1YrjNqusAILzmbQj9IwTeZN9imVOFFWAOnFq9S8DWDgPJqU/iUv0t7VMb14cjcaEAi4UejIFIRaNLm6e3tLmb6D4Yh+GEvMtgHCgrcXf4p0ES6APDUPQw2uBWXBSQOM9QZH39OJ8rxcx2gLhLQ1kZ/LDkPs8LvJwdVkVj0UbKd24KFlJ4tE/E2AmNU5cRHPM//dvxR9rbqB0jL8UV74Y+j3jKwwF4s1/xwqb44HQCdvp9R5Dtm6D8vK1y8uAC1+0cX5icm1yAmb2989syNaf6HbyBsaKrVyW60bZSomS0ihiKqZ0LCJkrkRgtSOWWxTHO7Robe8vXOEfykIpO+S/otDfNYWQKV3WdvcKrwQVJaYonwoprNIJHmiBO9OTJqXtxS2zYKDTxeocgKvcQqjbOuty/R/lvFwLxrGcwmppbuEE3m++tVR5BR223to4a+PGWffZ6+hYK2b12daj7hVaYYwmjx6gw7aLATuPA1sZsjV9xYrxuutT9H6axFwjhd5tAH0pTVFWTBUyx6iS0WPOV4J0D0GhrjK74joXHJkZyU1iVZHOXWj7F8oyWRSxZFjLZ6JEjWb4tcBjlmPtbSvmtWuiyWSULGJtRjaMtGH8AV6w8/w5ZKkRjxvWbjmiTR0hWnt/mxYxk1HNSCYNLZo8x0jreto4MU7wODVs52tOHq6zN22C6+C6TfYmp2HDsROHDIXFGu9ZuHFKWB2Oyzn/ApBJpYPMRuv9pAMOhLzBpHZ0TE0FvSE4oPR8BrYETdMwTDNoXxJ26nhuPKY4dQxW60FuuV9Gyhi7jDMqVZQzwE7GPqcayfww+17AStd7kBVkuC275NhHUWXFCuBWrLC7KYecOjqGjPRBkoVJ9s+wJZyddDkIP7Mbn1hxbgzG7DEyjNNJBD/ciL/aW0/cpwcNv1M1ZIkDGsEP2ifZYF8yvlHYEkZS/R+KEBNFeJxjYGRgYADiK4qnH8bz23xl4GZhAIEbDE2VMPr/3//1LJOZG4FcDgYmkCgAWdAMlwAAAHicY2BkYGBu+N/AEMOy4P/f/39ZJjMARVCANQC7GAfPeJxjYWBgYKEmXkBAfhKV7SOI//+F0QAsdwYXAAAAAAAARgCEANIBJAFwAd4CSAKqAv4DOgNOA4AEDgRsBIAElATwBWQFfAXuBgQGPAaUBr4HCAdQB64IIghUCJ4JLglmCY4JnAocCsILMgtaC7IMngzKDPYNPA1UDYoN3A4SDp4OyA9CEHAQvBD4EVARchGSEeYSCHicY2BkYGCwZrjEwMMAAkxAzAWEDAz/wXwGACQZAjAAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbVHZctswDNQmuuw4UnrfTe/bbdO7TX+GoSCLNUVqQMpu/r50I/apmOEMF9hZYIFkL7mIefL/OMUe9pEiQ44CJWaY4wALHKJCjSNcwmVcwVVcw3XcwE3cwm3cwV3cw30c4wEe4hEe4wme4hme4wVe4hVe4w2WeIt3eI8TfMBHfMJnfMFXfMN3/MApfiZHyrSWe+GVNctWKJ0qaU3u7aDkScXUMrlu6ZRZaVo48j78lr1lKl1nRynMKvvL3f+lRBqeKaXQZBrBmexIrrOA2Odn2sq1mwnp1UZ4ag5DccOhJatV5xcRaWr9PAjIUQtvg4S2Y3MQq6FRKa3WYnBUxeSZ9d72tbT9MHriZau0pqaMuAhuWsV92ii3TqUdzutOcLMVTBM1p9+DME1GzJbTdtS6jIx0t5xCW9EE11mvzOjyXu14mbENucqQ31peT0q13RBvFG3jEBEXEy8fyEili2mts8Fuw8S2bdNBB2lHgmVXO5IjK38+qaRu5zsmM+cF+ype4oJSTLAKVBar6KwM/sPQQhdTPvOqJ1d7DncK95x2l3kWrlv8y4Z2SfIHVw/NeA==') format('woff'), + url('iconfont.ttf?t=1541038457371') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('iconfont.svg?t=1541038457371#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bcui-icon-information-fail:before { content: "\e615"; } + +.bcui-icon-icon:before { content: "\e723"; } + +.bcui-icon-topic1:before { content: "\e80a"; } + +.bcui-icon-refresh-single:before { content: "\e639"; } + +.bcui-icon-setting-more:before { content: "\e665"; } + +.bcui-icon-shoucang:before { content: "\e60e"; } + +.bcui-icon-topic:before { content: "\e71d"; } + +.bcui-icon-jia:before { content: "\e62c"; } + +.bcui-icon-jian:before { content: "\e62d"; } + +.bcui-icon-calendar:before { content: "\e6ec"; } + +.bcui-icon-check:before { content: "\e6ed"; } + +.bcui-icon-alert:before { content: "\e6ee"; } + +.bcui-icon-blocks:before { content: "\e6ef"; } + +.bcui-icon-activated:before { content: "\e6f0"; } + +.bcui-icon-chevron-right:before { content: "\e6f1"; } + +.bcui-icon-chevron-left:before { content: "\e6f2"; } + +.bcui-icon-calculator:before { content: "\e6f3"; } + +.bcui-icon-cloud:before { content: "\e6f4"; } + +.bcui-icon-chevron-top:before { content: "\e6f5"; } + +.bcui-icon-collapse:before { content: "\e6f6"; } + +.bcui-icon-chevron-bottom:before { content: "\e6f7"; } + +.bcui-icon-computer-filled:before { content: "\e6f8"; } + +.bcui-icon-computer:before { content: "\e6f9"; } + +.bcui-icon-confirm:before { content: "\e6fa"; } + +.bcui-icon-disk:before { content: "\e6fb"; } + +.bcui-icon-copy:before { content: "\e6fc"; } + +.bcui-icon-hardware-filled:before { content: "\e6fd"; } + +.bcui-icon-expand:before { content: "\e6fe"; } + +.bcui-icon-error:before { content: "\e6ff"; } + +.bcui-icon-full:before { content: "\e700"; } + +.bcui-icon-hardware:before { content: "\e701"; } + +.bcui-icon-info:before { content: "\e702"; } + +.bcui-icon-loading:before { content: "\e703"; } + +.bcui-icon-minus:before { content: "\e704"; } + +.bcui-icon-mirror:before { content: "\e705"; } + +.bcui-icon-nodes:before { content: "\e706"; } + +.bcui-icon-network-filled:before { content: "\e707"; } + +.bcui-icon-overview-filled:before { content: "\e708"; } + +.bcui-icon-overview:before { content: "\e709"; } + +.bcui-icon-network:before { content: "\e70a"; } + +.bcui-icon-pencil:before { content: "\e70b"; } + +.bcui-icon-refresh:before { content: "\e70c"; } + +.bcui-icon-power-off:before { content: "\e70d"; } + +.bcui-icon-plus:before { content: "\e70e"; } + +.bcui-icon-search:before { content: "\e70f"; } + +.bcui-icon-security-filled:before { content: "\e710"; } + +.bcui-icon-stop:before { content: "\e711"; } + +.bcui-icon-security:before { content: "\e712"; } + +.bcui-icon-start:before { content: "\e713"; } + +.bcui-icon-setting-filled:before { content: "\e714"; } + +.bcui-icon-setting:before { content: "\e715"; } + +.bcui-icon-storage-filled:before { content: "\e716"; } + +.bcui-icon-terminal:before { content: "\e717"; } + +.bcui-icon-storage:before { content: "\e718"; } + +.bcui-icon-times:before { content: "\e719"; } + +.bcui-icon-triangle-bottom:before { content: "\e71a"; } + +.bcui-icon-trash:before { content: "\e71b"; } + +.bcui-icon-triangle-top:before { content: "\e71c"; } + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.eot b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.eot new file mode 100644 index 0000000..58a6069 Binary files /dev/null and b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.eot differ diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.js b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.js new file mode 100644 index 0000000..2ce7f03 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.js @@ -0,0 +1 @@ +(function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.svg b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.svg new file mode 100644 index 0000000..e7e75a7 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.svg @@ -0,0 +1,200 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.ttf b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.ttf new file mode 100644 index 0000000..73c851a Binary files /dev/null and b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.ttf differ diff --git a/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.woff b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.woff new file mode 100644 index 0000000..b4d60c3 Binary files /dev/null and b/carrera-console/carrera-boot/src/main/resources/static/iconfont/iconfont.woff differ diff --git a/carrera-console/carrera-boot/src/main/resources/static/index.css b/carrera-console/carrera-boot/src/main/resources/static/index.css new file mode 100644 index 0000000..c7e12e6 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/index.css @@ -0,0 +1,8 @@ +.form-icon-operate{font-size:22px;vertical-align:middle;color:#2d77ee;cursor:pointer;margin-left:8px}.form-icon-operate:hover{color:#2d77ee}.conf-margin{margin-bottom:5px}.cm-s-base16-light.CodeMirror{width:100%}.samplingPage .detail-info-prop{margin-top:0}.samplingPage .detail-block-header{padding:20px 0;font-weight:600;margin:20px 0}.samplingPage .detail-block-header .detail-title{display:inline-block;font-size:24px}.samplingPage .detail-block-header .detail-button{float:right}.samplingPage .detail-block-header .detail-button .bcui-button{border-radius:4px;font-size:14px}.drawer-detail .title{margin-bottom:20px;font-size:14px;font-weight:800;color:#333}.drawer-detail .detail-info-block{background:#fafafa;padding:0 15px}.drawer-detail .detail-info-title{font-size:16px;font-weight:500;margin:20px 0 15px;border-left:3px solid #2d77ee;padding-left:12px;line-height:1.2}.drawer-detail .detail-info-title:first-child{margin-top:0}.drawer-detail .detail-item{display:flex;padding:8px 0}.drawer-detail .detail-item-key{width:30%;font-size:14px;color:#333}.drawer-detail .detail-item-value{font-size:14px;color:#666}.subscribe-create{height:100%}.subscribe-create .icon-for-advanced-config{cursor:pointer}.config-form-item{display:flex;justify-content:space-between}.title-default+.config-form-item{margin-top:12px}.title-default{font-size:16px;font-weight:600;color:#424242}.subscribe-create .bcui-radio-group{width:265px}.subscribe-create .bc-codemirror{position:relative}.subscribe-create .bcui-tooltip{position:absolute;top:7px;z-index:100;left:-15px}.subscribe-create .config-warnning{font-size:16px;color:red}.config-result{width:360px;height:100%;padding:20px;background:#fbfbfc;border:1px solid #f2f3f5;border-radius:4px}.config-result .title{margin-bottom:20px}.config-result .config-details{margin-bottom:40px}.config-result .detail-item{display:flex;margin:8px 0}.config-result .detail-item-key{width:55%;font-size:14px;color:#333}.config-result .detail-item-value{font-size:14px;color:#666}.config-result .quota-item{margin-bottom:16px}.config-result .quota-item-info{display:flex;justify-content:space-between;font-size:14px;color:#666}.bcui-table-toolbar__item-label{font-size:14px;margin-right:5px}.reset-time{width:180px!important}.flatpickr-wrapper{float:right}.custom-date-picker{position:relative;float:right}.custom-date-picker .bcui-inputfield__input--disabled{background-color:#fff;color:#657180}.custom-date-picker .clear,.custom-date-picker .trigger-icon{position:absolute;right:10px;top:9px;font-size:16px;cursor:pointer}.custom-date-picker .clear{color:#c7c7c7;right:6px;top:8px;font-size:18px}.custom-date-picker .trigger-icon{color:#657180}.table-icon-edit{font-size:20px}.table-icon{line-height:1}.sidebar{display:flex;flex:0 0 auto;flex-direction:column;width:200px;background:#1b2d4b;font-size:1.4rem;color:#dbdee3;transition:width .3s}.sidebar-logo{position:relative;top:4px}.sidebar-inner{flex:1 auto;overflow:auto;position:relative}.sidebar-title{cursor:pointer}.sidenav-common .sidenav-item{font-size:14px;height:42px;line-height:42px}.sidenav-common .sidenav-item a{height:42px;line-height:42px;display:block;padding:0 16px;color:#666;text-decoration:none}.sidenav-common .sidenav-item a:link{color:#666}.sidenav-common .sidenav-item a:hover{color:#108ee9}.sidenav-common .sidenav-item a.active{color:#108ee9;background:rgba(16,142,233,.1)}.sidenav-category__title{font-size:14px;height:42px;line-height:42px;padding:0 16px}.sidenav-group__title{color:rgba(0,0,0,.43);font-size:12px;padding:10px 20px}.sidenav-item{height:42px;line-height:42px}.sidenav-item__link{display:block;padding:0 34px;color:#666;text-decoration:none}.sidenav-item__link:link{color:#666}.sidenav-item__link:hover{color:#108ee9}.sidenav-item__link.active{color:#108ee9;background:rgba(16,142,233,.1)}.sidenav-item__title{font-size:14px}.sidenav-item__subtitle{font-size:12px;opacity:.7}.bcui-menu-item,.bcui-menu-submenu__title{cursor:pointer;position:relative;display:flex;flex-direction:row;align-items:center}.bcui-menu-item [class*=" icon-"],.bcui-menu-item [class^=icon-],.bcui-menu-submenu__title [class*=" icon-"],.bcui-menu-submenu__title [class^=icon-]{margin-right:12px}.bcui-menu-item:hover,.bcui-menu-submenu__title:hover{color:#fff;background:#265bb0}.bcui-menu-item .icon-triangle-bottom,.bcui-menu-submenu__title .icon-triangle-bottom{display:none;margin-right:0;font-size:10px;transform:scale(.9);color:#626f85;position:absolute;right:16px;width:10px}.bcui-menu-item .bcui-icon,.bcui-menu-submenu__title .bcui-icon{display:none}.bcui-menu-submenu--opened .icon-triangle-bottom{display:block}.bcui-menu-submenu--opened:hover .icon-triangle-bottom{color:#fff}.prefix-icon{margin-right:5px}.bcui-confirm .bcui-modal-body{padding:16px}.bcui-confirm .bcui-modal-confirm-body{padding-top:8px}.logout-button{position:absolute;bottom:0;left:0;right:0}.app[data-v-5e2104ef]{height:100%}.layout[data-v-5e2104ef]{display:flex;flex:auto;flex-direction:column;height:100%;overflow:hidden}.layout-has-sidebar[data-v-5e2104ef]{flex-direction:row}.layout-content[data-v-5e2104ef]{height:100%;overflow:auto;padding:0 40px 50px}.introduce{padding:30px 40px 50px}.introduce-header{padding:10px 0;width:920px}.introduce-header-text{margin-top:10px;padding:30px 15px;background-color:#f2f9ff;font-size:14px}.introduce-body{margin-top:20px}.introduce-body-title{font-family:Arial-Black;font-size:18px;color:#5a5a5a;margin-bottom:20px}.introduce-body-text{display:inline-block;padding:30px 15px;background-color:#f2f9ff;width:96%;margin-bottom:20px;height:90px;font-size:14px}.introduce-body-text:hover{color:#24529c;background-color:#fff;box-shadow:0 0 10px rgba(36,67,156,.39)}.introduce .bcui-row{width:940px}.login{width:100%;height:100%;background:#f2f9ff;position:relative}.login .header h1 span~span{padding-left:15px}.login .container{min-width:800px;padding:60px 150px 72px;background:#fff;position:absolute;top:50%;left:50%;transform:translate3d(-50%,-50%,0);box-shadow:0 4px 12px 0 rgba(0,0,0,.2)}.login .container .bcui-form{margin-top:40px}.login .container .bcui-form .bcui-form-item__label.bcui-form-item__label--right{line-height:34px;padding-right:5px}.login .container .check-mark{font-weight:700;color:rgba(0,0,0,.4)}.login .container .bcui-inputfield{padding-right:5px;width:calc(100% - 20px)}.login .container .login-submit{margin-top:30px}.login .copyright{color:#7f8fa4;position:absolute;left:50%;bottom:45px;transform:translateX(-50%)}.autocomplete__list{position:relative}.bc-autocomplete-dropdown-menu{width:100%;max-height:200px;overflow:auto;margin:5px 0;padding:5px 0;background-color:#fff;box-sizing:border-box;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);position:absolute;z-index:900}.bc-autocomplete-dropdown-menu li{margin:0;padding:7px 16px;clear:both;color:#657180;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;transition:background .2s ease-in-out}.bc-autocomplete-dropdown-menu li:hover{background:#f3f3f3}.autocomplete li.focus-list{background:#28b0b0}.bc-drawer-layer{background:rgba(0,0,0,.5);left:0;z-index:1000}.bc-drawer-layer,.bc-drawer__inner{position:fixed;top:0;right:0;bottom:0}.bc-drawer__inner{width:800px;background:#fff;z-index:1001}.bc-drawer-content{overflow:auto;height:100%;position:relative}.bc-drawer-close{position:absolute;top:12px;right:20px;font-size:16px;color:#1c2438;cursor:pointer;transition:color 0s ease-in-out .3s}.bc-drawer-close:hover{color:#000}.bc-drawer-header{padding:20px 20px 0;font-size:14px;color:#1c2438}.bc-drawer-header__inner{line-height:1;padding-bottom:12px;border-bottom:1px solid #e6e4e4}.bc-drawer-body{padding:16px 20px}.drawer-layer-enter-active,.drawer-layter-leave-active{transition:all .3s ease-out}.drawer-layer-enter,.drawer-layer-leave-to{opacity:0}.drawer-slide-enter-active,.drawer-slide-leave-active{transition:all .3s ease-out}.drawer-slide-enter,.drawer-slide-leave-to{transform:translateX(100%);opacity:0}.filter-inputer-searcher{width:344px}.bcui-pagination:after,.bcui-pagination:before{display:table;content:""}.bcui-pagination:after{clear:both}.bcui-pagination{white-space:nowrap;padding:2px 5px;color:#485d6a;font-size:0}.bcui-pagination button,.bcui-pagination span{display:inline-block;font-size:14px;min-width:28px;height:28px;line-height:28px;vertical-align:top;box-sizing:border-box}.bcui-pagination .bcui-select .bcui-input{width:110px}.bcui-pagination .bcui-select .bcui-input input{padding-right:25px;border-radius:2px;height:28px}.bcui-pagination button{border:none;padding:0 6px;background:transparent}.bcui-pagination button:focus{outline:none}.bcui-pagination button:hover{color:#28b0b0}.bcui-pagination--dark button:hover{color:#21a2e2}.bcui-pagination button.disabled{color:#e4e4e4;background-color:#fff;cursor:not-allowed}.bcui-pagination .btn-next,.bcui-pagination .btn-prev{background:50% no-repeat;background-size:16px;background-color:#fff;border:1px solid #d1dee5;cursor:pointer;margin:0;color:#97aebe}.bcui-pagination .btn-next .bcui-icon,.bcui-pagination .btn-prev .bcui-icon{display:block;font-size:14px}.bcui-pagination .btn-prev{border-radius:2px 0 0 2px;border-right:0}.bcui-pagination .btn-next{border-radius:0 2px 2px 0;border-left:0}.bcui-pagination--small .bcui-pager li,.bcui-pagination--small .bcui-pager li:last-child,.bcui-pagination--small .btn-next,.bcui-pagination--small .btn-prev{border-color:transparent;font-size:14px;line-height:22px;height:22px;min-width:22px}.bcui-pagination--small .arrow.disabled{visibility:hidden}.bcui-pagination--small .bcui-pager li{border-radius:2px}.bcui-pagination__sizes{margin:0 10px 0 0}.bcui-pagination__sizes .bcui-input .bcui-input__inner{font-size:13px;border-color:#d1dee5}.bcui-pagination__sizes .bcui-input .bcui-input__inner:hover{border-color:#28b0b0}.bcui-pagination--dark .bcui-pagination__sizes .bcui-input .bcui-input__inner:hover{border-color:#21a2e2}.bcui-pagination__jump{margin-left:10px}.bcui-pagination__total{margin:0 10px}.bcui-pagination__rightwrapper{float:right}.bcui-pagination__editor{border:1px solid #d1dee5;border-radius:2px;line-height:18px;padding:4px 2px;width:30px;text-align:center;margin:0 6px;box-sizing:border-box;transition:border .3s}.bcui-pagination__editor::-webkit-inner-spin-button,.bcui-pagination__editor::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.bcui-pagination__editor:focus{outline:none;border-color:#28b0b0}.bcui-pagination--dark .bcui-pagination__editor:focus{outline:none;border-color:#21a2e2}.bcui-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0}.bcui-pager,.bcui-pager li{display:inline-block;vertical-align:top;margin:0}.bcui-pager li{padding:0 4px;border:1px solid #d1dee5;border-right:0;background:#fff;font-size:14px;min-width:28px;height:28px;line-height:28px;cursor:pointer;box-sizing:border-box;text-align:center}.bcui-pager li:last-child{border-right:1px solid #d1dee5}.bcui-pager li.btn-quicknext,.bcui-pager li.btn-quickprev{line-height:28px;color:#97aebe}.bcui-pager li.btn-quicknext:hover,.bcui-pager li.btn-quickprev:hover{cursor:pointer}.bcui-pager li.active+li{border-left:0;padding-left:5px}.bcui-pager li:hover{color:#28b0b0}.bcui-pagination--dark li:hover{color:#21a2e2}.bcui-pager li.active{border-color:#28b0b0;background-color:#28b0b0;color:#fff;cursor:default}.bcui-pagination--dark .bcui-pager li.active{border-color:#21a2e2;background-color:#21a2e2;color:#fff;cursor:default}.bcui-pagination[data-v-3630889e]{white-space:nowrap;padding:2px 5px;margin:12px 0;color:#485d6a;font-size:0}[data-v-3630889e]:focus{outline:none}.bcui-page-size-button[data-v-3630889e]{display:inline-block;margin-right:20px;position:relative}.bcui-page-size-button .text-link[data-v-3630889e]{cursor:pointer}.bcui-page-size-button .bcui-pager[data-v-3630889e]{position:absolute;top:0;right:0;border-bottom:1px solid #d1dee5}.bcui-page-size-button .bcui-pager li[data-v-3630889e]{border-bottom:0}.bcui-checkbox__inner:after{left:4px}.bcui-checkbox__input.is-disabled .bcui-checkbox__inner{background-color:#eef1f6;border-color:#d1dbe5;cursor:not-allowed}.bc-table-custom-label{padding:10px 0}.bcui-table.bcui-table--light{border:none}.bcui-table.bcui-table--light table{width:100%;border-top:1px solid #d1d9e5}.bcui-table.bcui-table--light td,.bcui-table.bcui-table--light th,.bcui-table.bcui-table--light thead{border-bottom:1px solid #e8edf0}.bcui-table.bcui-table--light th{height:42px;font-size:12px;color:#888;background:#fff;font-weight:400;text-align:left}.bcui-table.bcui-table--light th .cell{color:#888;background:#fff}.bcui-table.bcui-table--light .cell{line-height:18px;word-wrap:normal;text-overflow:ellipsis;display:inline-block;line-height:30px;vertical-align:middle;width:100%;padding:6px 14px}.bcui-table.bcui-table--light .empty-text{padding:20px;text-align:center;color:#5e7682;border-bottom:1px solid #e8edf0}.bcui-table:after,.bcui-table:before{display:none}.bcui-table--light{border:none}.bcui-table--light table{width:100%;border-top:1px solid #d1d9e5}.bcui-table--light td,.bcui-table--light th,.bcui-table--light thead{border-bottom:1px solid #e8edf0}.bcui-table--light th{height:42px;font-size:12px;font-weight:400;text-align:left}.bcui-table--light th,.bcui-table--light th .cell{color:#888;background:#fff}.bcui-table--light .cell{line-height:18px;padding-left:14px;padding-right:14px;word-wrap:normal;display:inline-block;line-height:30px;vertical-align:middle;width:100%}.bcui-table--light .empty-text{padding:20px;text-align:center;color:#5e7682}.bcui-table--light .empty-text i{vertical-align:-4px}table.bcui-table{font-size:13px;border-collapse:collapse;width:100%;border-top:1px solid #d7dde4;border-left:1px solid #d7dde4}table.bcui-table a{color:#20a0ff;text-decoration:none}table.bcui-table a:link{color:#20a0ff}table.bcui-table a:hover{text-decoration:underline}table.bcui-table thead th{white-space:nowrap;overflow:hidden;background-color:#f5f7f9;text-overflow:ellipsis}table.bcui-table tbody td,table.bcui-table thead th{height:40px;min-width:0;box-sizing:border-box;text-align:left;vertical-align:middle;border-bottom:1px solid #e3e8ee}table.bcui-table tbody td{background-color:#fff;transition:background-color .2s ease-in-out}table.bcui-table td,table.bcui-table th{height:40px;min-width:0;box-sizing:border-box;text-align:left;text-overflow:ellipsis;vertical-align:middle;border-bottom:1px solid #e3e8ee;border-right:1px solid #e3e8ee}table.bcui-table .bcui-table-cell{padding:0 14px;word-break:break-all}table.bcui-table .bcui-table-cell.is-editing{height:60px}.bcui-table-toolbar{padding:16px 0 10px;*zoom:1}.bcui-table-toolbar:after,.bcui-table-toolbar:before{display:table;line-height:0;content:""}.bcui-table-toolbar:after{clear:both}.bcui-table-toolbar__item{display:inline-block;vertical-align:top;margin-right:10px}.bcui-table-toolbar__item:last-child{margin-right:0}.bcui-table-toolbar__form-label{display:inline-block;margin-right:10px}.bcui-table-toolbar__form-field{display:inline-block}.bcui-table-toolbar__form-field .bcui-select{width:120px}.bcui-table-selection-column{width:1px}.bcui-table__body,.bcui-table__header{width:100%}.bc-table .bcui-th-cell,.bcui-table__body .bcui-th-cell{cursor:pointer;display:block;padding-left:14px;white-space:nowrap}.bc-table .bcui-th-cell .bcfont,.bcui-table__body .bcui-th-cell .bcfont{vertical-align:middle}.bc-table .overflow-v,.bcui-table__body .overflow-v{overflow:visible!important;position:relative}.bc-table .overflow-v:hover .bcui-classify,.bcui-table__body .overflow-v:hover .bcui-classify{display:block}.bc-table .bcui-classify,.bcui-table__body .bcui-classify{position:absolute;display:none;min-width:160px;z-index:1;background-color:#fff;border:1px solid #d1d9e5;border-radius:3px;padding:6px}.bc-table .bcui-classify .bcfont,.bcui-table__body .bcui-classify .bcfont{margin-right:10px}.bc-table .bcui-classify-label,.bcui-table__body .bcui-classify-label{padding-left:10px;padding-right:20px;margin:6px 0}.bc-table .bcui-classify-label .text-link,.bcui-table__body .bcui-classify-label .text-link{vertical-align:text-bottom}.bc-table .bcui-th-checkbox,.bcui-table__body .bcui-th-checkbox{vertical-align:super}.bc-table .bcui-tr-checkbox,.bcui-table__body .bcui-tr-checkbox{width:40px;text-align:center}.bc-table .bcui-td-expand .bcfont,.bcui-table__body .bcui-td-expand .bcfont{vertical-align:top;transition:all .3s}.bc-table .rotate90 .bcfont,.bcui-table__body .rotate90 .bcfont{transform:rotate(90deg)}.bc-table .bcui-table--noborder,.bcui-table__body .bcui-table--noborder{border:0}.bc-table .pagi-footer,.bcui-table__body .pagi-footer{text-align:right}.bc-table .bcui-check-col,.bc-table .bcui-expand-col,.bcui-table__body .bcui-check-col,.bcui-table__body .bcui-expand-col{width:40px}.bc-table .bcui-td-check,.bc-table .bcui-td-expand,.bcui-table__body .bcui-td-check,.bcui-table__body .bcui-td-expand{cursor:pointer;line-height:1;text-align:center}.bc-table .bcui-tr-expand,.bcui-table__body .bcui-tr-expand{background-color:#fbfbfb}.bc-table .bcui-tr-expand .expand-box,.bcui-table__body .bcui-tr-expand .expand-box{padding:0 10px}.bc-table .empty-text,.bcui-table__body .empty-text{width:100%;height:120px;font-size:24px;color:#eef3f6;text-align:center;line-height:120px} + + + + + + +/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}*{box-sizing:border-box}body,html{margin:0;padding:0}html{font-size:62.5%;height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Neue Haas Grotesk Text Pro,Arial Nova,Segoe UI,Helvetica Neue,\.PingFang SC,PingFang SC,Microsoft YaHei,Microsoft JhengHei,Source Han Sans SC,Noto Sans CJK SC,Source Han Sans CN,Noto Sans SC,Source Han Sans TC,Noto Sans CJK TC,Hiragino Sans GB,sans-serif;background-color:#fff;color:#333;line-height:1.5;font-size:12px}table{border-collapse:collapse}.pull-left{float:left}.text-primary{color:#2d77ee}.text-primary--hoverable{color:rgba(45,119,238,.8);cursor:pointer}.text-primary--hoverable:hover{color:#2d77ee}.text-info{color:#2db7f5}.text-success{color:#09d274}.text-warning{color:#ffb437}.text-error{color:#fe4f27}.text-link{cursor:pointer;margin-right:20px;color:#2d77ee}.text-link:last-child{margin-right:0}a,a:link{color:rgba(45,119,238,.8)}a:hover{color:#2d77ee}.fade-appear,.fade-enter-active,.fade-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.fade-appear,.fade-enter-active{animation-name:ivuFadeIn;animation-play-state:running}.fade-leave-active{animation-name:ivuFadeOut;animation-play-state:running}.fade-appear,.fade-enter-active{opacity:0}.fade-appear,.fade-enter-active,.fade-leave-active{animation-timing-function:linear}@keyframes ivuFadeIn{0%{opacity:0}to{opacity:1}}@keyframes ivuFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter-active,.move-up-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.move-up-appear,.move-up-enter-active{animation-name:ivuMoveUpIn;animation-play-state:running}.move-up-leave-active{animation-name:ivuMoveUpOut;animation-play-state:running}.move-up-appear,.move-up-enter-active{opacity:0;animation-timing-function:ease-in-out}.move-up-leave-active{animation-timing-function:ease-in-out}.move-down-appear,.move-down-enter-active,.move-down-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.move-down-appear,.move-down-enter-active{animation-name:ivuMoveDownIn;animation-play-state:running}.move-down-leave-active{animation-name:ivuMoveDownOut;animation-play-state:running}.move-down-appear,.move-down-enter-active{opacity:0;animation-timing-function:ease-in-out}.move-down-leave-active{animation-timing-function:ease-in-out}.move-left-appear,.move-left-enter-active,.move-left-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.move-left-appear,.move-left-enter-active{animation-name:ivuMoveLeftIn;animation-play-state:running}.move-left-leave-active{animation-name:ivuMoveLeftOut;animation-play-state:running}.move-left-appear,.move-left-enter-active{opacity:0;animation-timing-function:ease-in-out}.move-left-leave-active{animation-timing-function:ease-in-out}.move-right-appear,.move-right-enter-active,.move-right-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.move-right-appear,.move-right-enter-active{animation-name:ivuMoveRightIn;animation-play-state:running}.move-right-leave-active{animation-name:ivuMoveRightOut;animation-play-state:running}.move-right-appear,.move-right-enter-active{opacity:0;animation-timing-function:ease-in-out}.move-right-leave-active{animation-timing-function:ease-in-out}@keyframes ivuMoveDownIn{0%{transform-origin:0 0;transform:translateY(100%);opacity:0}to{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes ivuMoveDownOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}to{transform-origin:0 0;transform:translateY(100%);opacity:0}}@keyframes ivuMoveLeftIn{0%{transform-origin:0 0;transform:translateX(-100%);opacity:0}to{transform-origin:0 0;transform:translateX(0);opacity:1}}@keyframes ivuMoveLeftOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes ivuMoveRightIn{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes ivuMoveRightOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes ivuMoveUpIn{0%{transform-origin:0 0;transform:translateY(-100%);opacity:0}to{transform-origin:0 0;transform:translateY(0);opacity:1}}@keyframes ivuMoveUpOut{0%{transform-origin:0 0;transform:translateY(0);opacity:1}to{transform-origin:0 0;transform:translateY(-100%);opacity:0}}.move-notice-appear,.move-notice-enter-active,.move-notice-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.move-notice-appear,.move-notice-enter-active{animation-name:ivuMoveNoticeIn;animation-play-state:running}.move-notice-leave-active{animation-name:ivuMoveNoticeOut;animation-play-state:running}.move-notice-appear,.move-notice-enter-active{opacity:0;animation-timing-function:ease-in-out}.move-notice-leave-active{animation-timing-function:ease-in-out}@keyframes ivuMoveNoticeIn{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes ivuMoveNoticeOut{0%{transform-origin:0 0;transform:translateX(0);opacity:1}70%{transform-origin:0 0;transform:translateX(100%);height:auto;padding:16px;margin-bottom:10px;opacity:0}to{transform-origin:0 0;transform:translateX(100%);height:0;padding:0;margin-bottom:0;opacity:0}}.ease-appear,.ease-enter-active,.ease-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.ease-appear,.ease-enter-active{animation-name:ivuEaseIn;animation-play-state:running}.ease-leave-active{animation-name:ivuEaseOut;animation-play-state:running}.ease-appear,.ease-enter-active{opacity:0}.ease-appear,.ease-enter-active,.ease-leave-active{animation-timing-function:linear;animation-duration:.2s}@keyframes ivuEaseIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes ivuEaseOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}.transition-drop-appear,.transition-drop-enter-active,.transition-drop-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.transition-drop-appear,.transition-drop-enter-active{animation-name:ivuTransitionDropIn;animation-play-state:running}.transition-drop-leave-active{animation-name:ivuTransitionDropOut;animation-play-state:running}.transition-drop-appear,.transition-drop-enter-active{opacity:0;animation-timing-function:ease-in-out}.transition-drop-leave-active{animation-timing-function:ease-in-out}.slide-up-appear,.slide-up-enter-active,.slide-up-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.slide-up-appear,.slide-up-enter-active{animation-name:ivuSlideUpIn;animation-play-state:running}.slide-up-leave-active{animation-name:ivuSlideUpOut;animation-play-state:running}.slide-up-appear,.slide-up-enter-active{opacity:0;animation-timing-function:ease-in-out}.slide-up-leave-active{animation-timing-function:ease-in-out}.slide-down-appear,.slide-down-enter-active,.slide-down-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.slide-down-appear,.slide-down-enter-active{animation-name:ivuSlideDownIn;animation-play-state:running}.slide-down-leave-active{animation-name:ivuSlideDownOut;animation-play-state:running}.slide-down-appear,.slide-down-enter-active{opacity:0;animation-timing-function:ease-in-out}.slide-down-leave-active{animation-timing-function:ease-in-out}.slide-left-appear,.slide-left-enter-active,.slide-left-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.slide-left-appear,.slide-left-enter-active{animation-name:ivuSlideLeftIn;animation-play-state:running}.slide-left-leave-active{animation-name:ivuSlideLeftOut;animation-play-state:running}.slide-left-appear,.slide-left-enter-active{opacity:0;animation-timing-function:ease-in-out}.slide-left-leave-active{animation-timing-function:ease-in-out}.slide-right-appear,.slide-right-enter-active,.slide-right-leave-active{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.slide-right-appear,.slide-right-enter-active{animation-name:ivuSlideRightIn;animation-play-state:running}.slide-right-leave-active{animation-name:ivuSlideRightOut;animation-play-state:running}.slide-right-appear,.slide-right-enter-active{opacity:0;animation-timing-function:ease-in-out}.slide-right-leave-active{animation-timing-function:ease-in-out}@keyframes ivuTransitionDropIn{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:scaleY(1)}}@keyframes ivuTransitionDropOut{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(.8)}}@keyframes ivuSlideUpIn{0%{opacity:0;transform-origin:0 0;transform:scaleY(.8)}to{opacity:1;transform-origin:0 0;transform:scaleY(1)}}@keyframes ivuSlideUpOut{0%{opacity:1;transform-origin:0 0;transform:scaleY(1)}to{opacity:0;transform-origin:0 0;transform:scaleY(.8)}}@keyframes ivuSlideDownIn{0%{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}to{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}}@keyframes ivuSlideDownOut{0%{opacity:1;transform-origin:100% 100%;transform:scaleY(1)}to{opacity:0;transform-origin:100% 100%;transform:scaleY(.8)}}@keyframes ivuSlideLeftIn{0%{opacity:0;transform-origin:0 0;transform:scaleX(.8)}to{opacity:1;transform-origin:0 0;transform:scaleX(1)}}@keyframes ivuSlideLeftOut{0%{opacity:1;transform-origin:0 0;transform:scaleX(1)}to{opacity:0;transform-origin:0 0;transform:scaleX(.8)}}@keyframes ivuSlideRightIn{0%{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}to{opacity:1;transform-origin:100% 0;transform:scaleX(1)}}@keyframes ivuSlideRightOut{0%{opacity:1;transform-origin:100% 0;transform:scaleX(1)}to{opacity:0;transform-origin:100% 0;transform:scaleX(.8)}}.bcui-breadcrumb{font-size:13px;line-height:1}.bcui-breadcrumb__separator{margin:0 6px;color:#d7dde4}.bcui-breadcrumb .bcui-breadcrumb__item:last-child{font-weight:600}.bcui-breadcrumb .bcui-breadcrumb__item:last-child .bcui-breadcrumb__separator{display:none}.bcui-breadcrumb__item{display:inline-block;color:rgba(0,0,0,.65)}.bcui-breadcrumb__item-link{color:rgba(0,0,0,.65);text-decoration:none;transition:color .2s ease-in-out}.bcui-breadcrumb__item-link:link{color:rgba(0,0,0,.65)}.bcui-breadcrumb__item-link:hover{color:#2d77ee}.bcui-button{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;white-space:nowrap;user-select:none;padding:0 16px;font-size:14px;border-radius:4px;height:36px;transform:translateZ(0);transition:color .2s linear,background-color .2s linear,border .2s linear;color:#495060;background-color:#fff;border:1px solid #dddee1}.bcui-button,.bcui-button>.bcui-icon{line-height:1}.bcui-button,.bcui-button:active,.bcui-button:focus{outline:0}.bcui-button:not([disabled]):hover{text-decoration:none}.bcui-button:not([disabled]):active{outline:0;transition:none}.bcui-button.disabled,.bcui-button[disabled]{cursor:not-allowed}.bcui-button.disabled>*,.bcui-button[disabled]>*{pointer-events:none}.bcui-button.bcui-button--icon-only{padding:0 10px}.bcui-button--large{padding:0 16px;font-size:14px;border-radius:4px;height:40px}.bcui-button--larger{padding:6px 16px;font-size:14px;border-radius:4px;height:48px}.bcui-button--small{padding:0 9px;font-size:12px;border-radius:4px;height:24px}.bcui-button--extra{padding:0;font-size:9px;border-radius:4px;height:20px}.bcui-button>a:only-child{color:currentColor}.bcui-button>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button:hover{background-color:#fff;border-color:#e4e5e7}.bcui-button.active,.bcui-button:active{background-color:#f2f2f2;border-color:#f2f2f2}.bcui-button.disabled,.bcui-button.disabled.active,.bcui-button.disabled:active,.bcui-button.disabled:focus,.bcui-button.disabled:hover,.bcui-button[disabled],.bcui-button[disabled].active,.bcui-button[disabled]:active,.bcui-button[disabled]:focus,.bcui-button[disabled]:hover,fieldset[disabled] .bcui-button,fieldset[disabled] .bcui-button.active,fieldset[disabled] .bcui-button:active,fieldset[disabled] .bcui-button:focus,fieldset[disabled] .bcui-button:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button.disabled.active>a:only-child,.bcui-button.disabled:active>a:only-child,.bcui-button.disabled:focus>a:only-child,.bcui-button.disabled:hover>a:only-child,.bcui-button.disabled>a:only-child,.bcui-button[disabled].active>a:only-child,.bcui-button[disabled]:active>a:only-child,.bcui-button[disabled]:focus>a:only-child,.bcui-button[disabled]:hover>a:only-child,.bcui-button[disabled]>a:only-child,fieldset[disabled] .bcui-button.active>a:only-child,fieldset[disabled] .bcui-button:active>a:only-child,fieldset[disabled] .bcui-button:focus>a:only-child,fieldset[disabled] .bcui-button:hover>a:only-child,fieldset[disabled] .bcui-button>a:only-child{color:currentColor}.bcui-button.disabled.active>a:only-child:after,.bcui-button.disabled:active>a:only-child:after,.bcui-button.disabled:focus>a:only-child:after,.bcui-button.disabled:hover>a:only-child:after,.bcui-button.disabled>a:only-child:after,.bcui-button[disabled].active>a:only-child:after,.bcui-button[disabled]:active>a:only-child:after,.bcui-button[disabled]:focus>a:only-child:after,.bcui-button[disabled]:hover>a:only-child:after,.bcui-button[disabled]>a:only-child:after,fieldset[disabled] .bcui-button.active>a:only-child:after,fieldset[disabled] .bcui-button:active>a:only-child:after,fieldset[disabled] .bcui-button:focus>a:only-child:after,fieldset[disabled] .bcui-button:hover>a:only-child:after,fieldset[disabled] .bcui-button>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button:hover{color:#6d7380;background-color:#fcfcfc;border-color:#2d77ee}.bcui-button:hover>a:only-child{color:currentColor}.bcui-button:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button.active,.bcui-button:active{color:#454c5b;background-color:#f5f3f3;border-color:#d2d3d6}.bcui-button.active>a:only-child,.bcui-button:active>a:only-child{color:currentColor}.bcui-button.active>a:only-child:after,.bcui-button:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--long{width:100%}.bcui-button>.bcui-icon+span,.bcui-button>span+.bcui-icon{margin-left:4px}.bcui-button--primary{color:#fff;background-color:#2d77ee;border-color:#2d77ee}.bcui-button--primary:hover{border-color:#e4e5e7}.bcui-button--primary>a:only-child{color:currentColor}.bcui-button--primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--primary:hover{color:#fff;background-color:#5792f1;border-color:#5792f1}.bcui-button--primary:hover>a:only-child{color:currentColor}.bcui-button--primary:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--primary.active,.bcui-button--primary:active{color:#f2f2f2;background-color:#2b71e2;border-color:#2b71e2}.bcui-button--primary.active>a:only-child,.bcui-button--primary:active>a:only-child{color:currentColor}.bcui-button--primary.active>a:only-child:after,.bcui-button--primary:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--primary.disabled,.bcui-button--primary.disabled.active,.bcui-button--primary.disabled:active,.bcui-button--primary.disabled:focus,.bcui-button--primary.disabled:hover,.bcui-button--primary[disabled],.bcui-button--primary[disabled].active,.bcui-button--primary[disabled]:active,.bcui-button--primary[disabled]:focus,.bcui-button--primary[disabled]:hover,fieldset[disabled] .bcui-button--primary,fieldset[disabled] .bcui-button--primary.active,fieldset[disabled] .bcui-button--primary:active,fieldset[disabled] .bcui-button--primary:focus,fieldset[disabled] .bcui-button--primary:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--primary.disabled.active>a:only-child,.bcui-button--primary.disabled:active>a:only-child,.bcui-button--primary.disabled:focus>a:only-child,.bcui-button--primary.disabled:hover>a:only-child,.bcui-button--primary.disabled>a:only-child,.bcui-button--primary[disabled].active>a:only-child,.bcui-button--primary[disabled]:active>a:only-child,.bcui-button--primary[disabled]:focus>a:only-child,.bcui-button--primary[disabled]:hover>a:only-child,.bcui-button--primary[disabled]>a:only-child,fieldset[disabled] .bcui-button--primary.active>a:only-child,fieldset[disabled] .bcui-button--primary:active>a:only-child,fieldset[disabled] .bcui-button--primary:focus>a:only-child,fieldset[disabled] .bcui-button--primary:hover>a:only-child,fieldset[disabled] .bcui-button--primary>a:only-child{color:currentColor}.bcui-button--primary.disabled.active>a:only-child:after,.bcui-button--primary.disabled:active>a:only-child:after,.bcui-button--primary.disabled:focus>a:only-child:after,.bcui-button--primary.disabled:hover>a:only-child:after,.bcui-button--primary.disabled>a:only-child:after,.bcui-button--primary[disabled].active>a:only-child:after,.bcui-button--primary[disabled]:active>a:only-child:after,.bcui-button--primary[disabled]:focus>a:only-child:after,.bcui-button--primary[disabled]:hover>a:only-child:after,.bcui-button--primary[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--primary.active>a:only-child:after,fieldset[disabled] .bcui-button--primary:active>a:only-child:after,fieldset[disabled] .bcui-button--primary:focus>a:only-child:after,fieldset[disabled] .bcui-button--primary:hover>a:only-child:after,fieldset[disabled] .bcui-button--primary>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--primary.active,.bcui-button--primary:active,.bcui-button--primary:hover{color:#fff}.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary:not(:first-child):not(:last-child){border-right-color:#2b71e2;border-left-color:#2b71e2}.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary:first-child:not(:last-child){border-right-color:#2b71e2}.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary:first-child:not(:last-child)[disabled]{border-right-color:#dddee1}.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary+.bcui-button,.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary:last-child:not(:first-child){border-left-color:#2b71e2}.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary+.bcui-button[disabled],.bcui-button-group:not(.bcui-button-group-vertical) .bcui-button--primary:last-child:not(:first-child)[disabled]{border-left-color:#dddee1}.bcui-button-group-vertical .bcui-button--primary:not(:first-child):not(:last-child){border-top-color:#2b71e2;border-bottom-color:#2b71e2}.bcui-button-group-vertical .bcui-button--primary:first-child:not(:last-child){border-bottom-color:#2b71e2}.bcui-button-group-vertical .bcui-button--primary:first-child:not(:last-child)[disabled]{border-top-color:#dddee1}.bcui-button-group-vertical .bcui-button--primary+.bcui-button,.bcui-button-group-vertical .bcui-button--primary:last-child:not(:first-child){border-top-color:#2b71e2}.bcui-button-group-vertical .bcui-button--primary+.bcui-button[disabled],.bcui-button-group-vertical .bcui-button--primary:last-child:not(:first-child)[disabled]{border-bottom-color:#dddee1}.bcui-button--gray{color:#666;background-color:#f2f3f5;border-color:#dddee1}.bcui-button--gray>a:only-child{color:currentColor}.bcui-button--gray>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--gray:hover{color:#858585;background-color:#f5f5f7;border-color:#e4e5e7}.bcui-button--gray:hover>a:only-child{color:currentColor}.bcui-button--gray:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--gray.active,.bcui-button--gray:active{color:#616161;background-color:#e6e7e9;border-color:#e6e7e9}.bcui-button--gray.active>a:only-child,.bcui-button--gray:active>a:only-child{color:currentColor}.bcui-button--gray.active>a:only-child:after,.bcui-button--gray:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--gray.disabled,.bcui-button--gray.disabled.active,.bcui-button--gray.disabled:active,.bcui-button--gray.disabled:focus,.bcui-button--gray.disabled:hover,.bcui-button--gray[disabled],.bcui-button--gray[disabled].active,.bcui-button--gray[disabled]:active,.bcui-button--gray[disabled]:focus,.bcui-button--gray[disabled]:hover,fieldset[disabled] .bcui-button--gray,fieldset[disabled] .bcui-button--gray.active,fieldset[disabled] .bcui-button--gray:active,fieldset[disabled] .bcui-button--gray:focus,fieldset[disabled] .bcui-button--gray:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--gray.disabled.active>a:only-child,.bcui-button--gray.disabled:active>a:only-child,.bcui-button--gray.disabled:focus>a:only-child,.bcui-button--gray.disabled:hover>a:only-child,.bcui-button--gray.disabled>a:only-child,.bcui-button--gray[disabled].active>a:only-child,.bcui-button--gray[disabled]:active>a:only-child,.bcui-button--gray[disabled]:focus>a:only-child,.bcui-button--gray[disabled]:hover>a:only-child,.bcui-button--gray[disabled]>a:only-child,fieldset[disabled] .bcui-button--gray.active>a:only-child,fieldset[disabled] .bcui-button--gray:active>a:only-child,fieldset[disabled] .bcui-button--gray:focus>a:only-child,fieldset[disabled] .bcui-button--gray:hover>a:only-child,fieldset[disabled] .bcui-button--gray>a:only-child{color:currentColor}.bcui-button--gray.disabled.active>a:only-child:after,.bcui-button--gray.disabled:active>a:only-child:after,.bcui-button--gray.disabled:focus>a:only-child:after,.bcui-button--gray.disabled:hover>a:only-child:after,.bcui-button--gray.disabled>a:only-child:after,.bcui-button--gray[disabled].active>a:only-child:after,.bcui-button--gray[disabled]:active>a:only-child:after,.bcui-button--gray[disabled]:focus>a:only-child:after,.bcui-button--gray[disabled]:hover>a:only-child:after,.bcui-button--gray[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--gray.active>a:only-child:after,fieldset[disabled] .bcui-button--gray:active>a:only-child:after,fieldset[disabled] .bcui-button--gray:focus>a:only-child:after,fieldset[disabled] .bcui-button--gray:hover>a:only-child:after,fieldset[disabled] .bcui-button--gray>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--gray.active,.bcui-button--gray:active,.bcui-button--gray:hover{color:#666;background:#e4e5ea}.bcui-button--ghost{color:#b3b3b3;background-color:transparent;border-color:#f5f5f5}.bcui-button--ghost>a:only-child{color:currentColor}.bcui-button--ghost>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--ghost:hover{color:#c2c2c2;background-color:hsla(0,0%,100%,.2);border-color:#f7f7f7}.bcui-button--ghost.active,.bcui-button--ghost:active{color:#aaa;background-color:rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.bcui-button--ghost.disabled,.bcui-button--ghost.disabled.active,.bcui-button--ghost.disabled:active,.bcui-button--ghost.disabled:focus,.bcui-button--ghost.disabled:hover,.bcui-button--ghost[disabled],.bcui-button--ghost[disabled].active,.bcui-button--ghost[disabled]:active,.bcui-button--ghost[disabled]:focus,.bcui-button--ghost[disabled]:hover,fieldset[disabled] .bcui-button--ghost,fieldset[disabled] .bcui-button--ghost.active,fieldset[disabled] .bcui-button--ghost:active,fieldset[disabled] .bcui-button--ghost:focus,fieldset[disabled] .bcui-button--ghost:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--ghost.disabled.active>a:only-child,.bcui-button--ghost.disabled:active>a:only-child,.bcui-button--ghost.disabled:focus>a:only-child,.bcui-button--ghost.disabled:hover>a:only-child,.bcui-button--ghost.disabled>a:only-child,.bcui-button--ghost[disabled].active>a:only-child,.bcui-button--ghost[disabled]:active>a:only-child,.bcui-button--ghost[disabled]:focus>a:only-child,.bcui-button--ghost[disabled]:hover>a:only-child,.bcui-button--ghost[disabled]>a:only-child,fieldset[disabled] .bcui-button--ghost.active>a:only-child,fieldset[disabled] .bcui-button--ghost:active>a:only-child,fieldset[disabled] .bcui-button--ghost:focus>a:only-child,fieldset[disabled] .bcui-button--ghost:hover>a:only-child,fieldset[disabled] .bcui-button--ghost>a:only-child{color:currentColor}.bcui-button--ghost.disabled.active>a:only-child:after,.bcui-button--ghost.disabled:active>a:only-child:after,.bcui-button--ghost.disabled:focus>a:only-child:after,.bcui-button--ghost.disabled:hover>a:only-child:after,.bcui-button--ghost.disabled>a:only-child:after,.bcui-button--ghost[disabled].active>a:only-child:after,.bcui-button--ghost[disabled]:active>a:only-child:after,.bcui-button--ghost[disabled]:focus>a:only-child:after,.bcui-button--ghost[disabled]:hover>a:only-child:after,.bcui-button--ghost[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--ghost.active>a:only-child:after,fieldset[disabled] .bcui-button--ghost:active>a:only-child:after,fieldset[disabled] .bcui-button--ghost:focus>a:only-child:after,fieldset[disabled] .bcui-button--ghost:hover>a:only-child:after,fieldset[disabled] .bcui-button--ghost>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--ghost:hover{color:#5792f1;background-color:transparent;border-color:#e4e5e7}.bcui-button--ghost:hover>a:only-child{color:currentColor}.bcui-button--ghost:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--ghost.active,.bcui-button--ghost:active{color:#2b71e2;background-color:transparent;border-color:#d2d3d6}.bcui-button--ghost.active>a:only-child,.bcui-button--ghost:active>a:only-child{color:currentColor}.bcui-button--ghost.active>a:only-child:after,.bcui-button--ghost:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--dashed{color:#b3b3b3;background-color:transparent;border-color:#f5f5f5;border-style:dashed}.bcui-button--dashed>a:only-child{color:currentColor}.bcui-button--dashed>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--dashed:hover{color:#c2c2c2;background-color:hsla(0,0%,100%,.2);border-color:#f7f7f7}.bcui-button--dashed.active,.bcui-button--dashed:active{color:#aaa;background-color:rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.bcui-button--dashed.disabled,.bcui-button--dashed.disabled.active,.bcui-button--dashed.disabled:active,.bcui-button--dashed.disabled:focus,.bcui-button--dashed.disabled:hover,.bcui-button--dashed[disabled],.bcui-button--dashed[disabled].active,.bcui-button--dashed[disabled]:active,.bcui-button--dashed[disabled]:focus,.bcui-button--dashed[disabled]:hover,fieldset[disabled] .bcui-button--dashed,fieldset[disabled] .bcui-button--dashed.active,fieldset[disabled] .bcui-button--dashed:active,fieldset[disabled] .bcui-button--dashed:focus,fieldset[disabled] .bcui-button--dashed:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--dashed.disabled.active>a:only-child,.bcui-button--dashed.disabled:active>a:only-child,.bcui-button--dashed.disabled:focus>a:only-child,.bcui-button--dashed.disabled:hover>a:only-child,.bcui-button--dashed.disabled>a:only-child,.bcui-button--dashed[disabled].active>a:only-child,.bcui-button--dashed[disabled]:active>a:only-child,.bcui-button--dashed[disabled]:focus>a:only-child,.bcui-button--dashed[disabled]:hover>a:only-child,.bcui-button--dashed[disabled]>a:only-child,fieldset[disabled] .bcui-button--dashed.active>a:only-child,fieldset[disabled] .bcui-button--dashed:active>a:only-child,fieldset[disabled] .bcui-button--dashed:focus>a:only-child,fieldset[disabled] .bcui-button--dashed:hover>a:only-child,fieldset[disabled] .bcui-button--dashed>a:only-child{color:currentColor}.bcui-button--dashed.disabled.active>a:only-child:after,.bcui-button--dashed.disabled:active>a:only-child:after,.bcui-button--dashed.disabled:focus>a:only-child:after,.bcui-button--dashed.disabled:hover>a:only-child:after,.bcui-button--dashed.disabled>a:only-child:after,.bcui-button--dashed[disabled].active>a:only-child:after,.bcui-button--dashed[disabled]:active>a:only-child:after,.bcui-button--dashed[disabled]:focus>a:only-child:after,.bcui-button--dashed[disabled]:hover>a:only-child:after,.bcui-button--dashed[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--dashed.active>a:only-child:after,fieldset[disabled] .bcui-button--dashed:active>a:only-child:after,fieldset[disabled] .bcui-button--dashed:focus>a:only-child:after,fieldset[disabled] .bcui-button--dashed:hover>a:only-child:after,fieldset[disabled] .bcui-button--dashed>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--dashed:hover{color:#5792f1;background-color:transparent;border-color:#5792f1}.bcui-button--dashed:hover>a:only-child{color:currentColor}.bcui-button--dashed:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--dashed.active,.bcui-button--dashed:active{color:#2b71e2;background-color:transparent;border-color:#2b71e2}.bcui-button--dashed.active>a:only-child,.bcui-button--dashed:active>a:only-child{color:currentColor}.bcui-button--dashed.active>a:only-child:after,.bcui-button--dashed:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--text{color:#b3b3b3;background-color:transparent;border-color:transparent;padding-left:0;padding-right:0;color:#2d77ee}.bcui-button--text>a:only-child{color:currentColor}.bcui-button--text>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--text:hover{color:#c2c2c2;background-color:hsla(0,0%,100%,.2);border-color:hsla(0,0%,100%,.2)}.bcui-button--text.active,.bcui-button--text:active{color:#aaa;background-color:rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.bcui-button--text.disabled,.bcui-button--text.disabled.active,.bcui-button--text.disabled:active,.bcui-button--text.disabled:focus,.bcui-button--text.disabled:hover,.bcui-button--text[disabled],.bcui-button--text[disabled].active,.bcui-button--text[disabled]:active,.bcui-button--text[disabled]:focus,.bcui-button--text[disabled]:hover,fieldset[disabled] .bcui-button--text,fieldset[disabled] .bcui-button--text.active,fieldset[disabled] .bcui-button--text:active,fieldset[disabled] .bcui-button--text:focus,fieldset[disabled] .bcui-button--text:hover{background-color:#f7f7f7;border-color:#d7dde4;color:#c3cbd6;background-color:transparent;border-color:transparent}.bcui-button--text.disabled.active>a:only-child,.bcui-button--text.disabled:active>a:only-child,.bcui-button--text.disabled:focus>a:only-child,.bcui-button--text.disabled:hover>a:only-child,.bcui-button--text.disabled>a:only-child,.bcui-button--text[disabled].active>a:only-child,.bcui-button--text[disabled]:active>a:only-child,.bcui-button--text[disabled]:focus>a:only-child,.bcui-button--text[disabled]:hover>a:only-child,.bcui-button--text[disabled]>a:only-child,fieldset[disabled] .bcui-button--text.active>a:only-child,fieldset[disabled] .bcui-button--text:active>a:only-child,fieldset[disabled] .bcui-button--text:focus>a:only-child,fieldset[disabled] .bcui-button--text:hover>a:only-child,fieldset[disabled] .bcui-button--text>a:only-child{color:currentColor}.bcui-button--text.disabled.active>a:only-child:after,.bcui-button--text.disabled:active>a:only-child:after,.bcui-button--text.disabled:focus>a:only-child:after,.bcui-button--text.disabled:hover>a:only-child:after,.bcui-button--text.disabled>a:only-child:after,.bcui-button--text[disabled].active>a:only-child:after,.bcui-button--text[disabled]:active>a:only-child:after,.bcui-button--text[disabled]:focus>a:only-child:after,.bcui-button--text[disabled]:hover>a:only-child:after,.bcui-button--text[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--text.active>a:only-child:after,fieldset[disabled] .bcui-button--text:active>a:only-child:after,fieldset[disabled] .bcui-button--text:focus>a:only-child:after,fieldset[disabled] .bcui-button--text:hover>a:only-child:after,fieldset[disabled] .bcui-button--text>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--text:hover{color:#5792f1;background-color:transparent;border-color:transparent}.bcui-button--text:hover>a:only-child{color:currentColor}.bcui-button--text:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--text.active,.bcui-button--text:active{color:#2b71e2;background-color:transparent;border-color:transparent}.bcui-button--text.active>a:only-child,.bcui-button--text:active>a:only-child{color:currentColor}.bcui-button--text.active>a:only-child:after,.bcui-button--text:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--success{color:#fff;background-color:#09d274;border-color:#09d274}.bcui-button--success>a:only-child{color:currentColor}.bcui-button--success>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--success:hover{color:#fff;background-color:#3adb90;border-color:#3adb90}.bcui-button--success:hover>a:only-child{color:currentColor}.bcui-button--success:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--success.active,.bcui-button--success:active{color:#f2f2f2;background-color:#09c86e;border-color:#09c86e}.bcui-button--success.active>a:only-child,.bcui-button--success:active>a:only-child{color:currentColor}.bcui-button--success.active>a:only-child:after,.bcui-button--success:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--success.disabled,.bcui-button--success.disabled.active,.bcui-button--success.disabled:active,.bcui-button--success.disabled:focus,.bcui-button--success.disabled:hover,.bcui-button--success[disabled],.bcui-button--success[disabled].active,.bcui-button--success[disabled]:active,.bcui-button--success[disabled]:focus,.bcui-button--success[disabled]:hover,fieldset[disabled] .bcui-button--success,fieldset[disabled] .bcui-button--success.active,fieldset[disabled] .bcui-button--success:active,fieldset[disabled] .bcui-button--success:focus,fieldset[disabled] .bcui-button--success:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--success.disabled.active>a:only-child,.bcui-button--success.disabled:active>a:only-child,.bcui-button--success.disabled:focus>a:only-child,.bcui-button--success.disabled:hover>a:only-child,.bcui-button--success.disabled>a:only-child,.bcui-button--success[disabled].active>a:only-child,.bcui-button--success[disabled]:active>a:only-child,.bcui-button--success[disabled]:focus>a:only-child,.bcui-button--success[disabled]:hover>a:only-child,.bcui-button--success[disabled]>a:only-child,fieldset[disabled] .bcui-button--success.active>a:only-child,fieldset[disabled] .bcui-button--success:active>a:only-child,fieldset[disabled] .bcui-button--success:focus>a:only-child,fieldset[disabled] .bcui-button--success:hover>a:only-child,fieldset[disabled] .bcui-button--success>a:only-child{color:currentColor}.bcui-button--success.disabled.active>a:only-child:after,.bcui-button--success.disabled:active>a:only-child:after,.bcui-button--success.disabled:focus>a:only-child:after,.bcui-button--success.disabled:hover>a:only-child:after,.bcui-button--success.disabled>a:only-child:after,.bcui-button--success[disabled].active>a:only-child:after,.bcui-button--success[disabled]:active>a:only-child:after,.bcui-button--success[disabled]:focus>a:only-child:after,.bcui-button--success[disabled]:hover>a:only-child:after,.bcui-button--success[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--success.active>a:only-child:after,fieldset[disabled] .bcui-button--success:active>a:only-child:after,fieldset[disabled] .bcui-button--success:focus>a:only-child:after,fieldset[disabled] .bcui-button--success:hover>a:only-child:after,fieldset[disabled] .bcui-button--success>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--success.active,.bcui-button--success:active,.bcui-button--success:hover{color:#fff}.bcui-button--warning{color:#fff;background-color:#ffb437;border-color:#ffb437}.bcui-button--warning>a:only-child{color:currentColor}.bcui-button--warning>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--warning:hover{color:#fff;background-color:#ffc35f;border-color:#ffc35f}.bcui-button--warning:hover>a:only-child{color:currentColor}.bcui-button--warning:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--warning.active,.bcui-button--warning:active{color:#f2f2f2;background-color:#f2ab34;border-color:#f2ab34}.bcui-button--warning.active>a:only-child,.bcui-button--warning:active>a:only-child{color:currentColor}.bcui-button--warning.active>a:only-child:after,.bcui-button--warning:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--warning.disabled,.bcui-button--warning.disabled.active,.bcui-button--warning.disabled:active,.bcui-button--warning.disabled:focus,.bcui-button--warning.disabled:hover,.bcui-button--warning[disabled],.bcui-button--warning[disabled].active,.bcui-button--warning[disabled]:active,.bcui-button--warning[disabled]:focus,.bcui-button--warning[disabled]:hover,fieldset[disabled] .bcui-button--warning,fieldset[disabled] .bcui-button--warning.active,fieldset[disabled] .bcui-button--warning:active,fieldset[disabled] .bcui-button--warning:focus,fieldset[disabled] .bcui-button--warning:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--warning.disabled.active>a:only-child,.bcui-button--warning.disabled:active>a:only-child,.bcui-button--warning.disabled:focus>a:only-child,.bcui-button--warning.disabled:hover>a:only-child,.bcui-button--warning.disabled>a:only-child,.bcui-button--warning[disabled].active>a:only-child,.bcui-button--warning[disabled]:active>a:only-child,.bcui-button--warning[disabled]:focus>a:only-child,.bcui-button--warning[disabled]:hover>a:only-child,.bcui-button--warning[disabled]>a:only-child,fieldset[disabled] .bcui-button--warning.active>a:only-child,fieldset[disabled] .bcui-button--warning:active>a:only-child,fieldset[disabled] .bcui-button--warning:focus>a:only-child,fieldset[disabled] .bcui-button--warning:hover>a:only-child,fieldset[disabled] .bcui-button--warning>a:only-child{color:currentColor}.bcui-button--warning.disabled.active>a:only-child:after,.bcui-button--warning.disabled:active>a:only-child:after,.bcui-button--warning.disabled:focus>a:only-child:after,.bcui-button--warning.disabled:hover>a:only-child:after,.bcui-button--warning.disabled>a:only-child:after,.bcui-button--warning[disabled].active>a:only-child:after,.bcui-button--warning[disabled]:active>a:only-child:after,.bcui-button--warning[disabled]:focus>a:only-child:after,.bcui-button--warning[disabled]:hover>a:only-child:after,.bcui-button--warning[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--warning.active>a:only-child:after,fieldset[disabled] .bcui-button--warning:active>a:only-child:after,fieldset[disabled] .bcui-button--warning:focus>a:only-child:after,fieldset[disabled] .bcui-button--warning:hover>a:only-child:after,fieldset[disabled] .bcui-button--warning>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--warning.active,.bcui-button--warning:active,.bcui-button--warning:hover{color:#fff}.bcui-button--error{color:#fff;background-color:#fe4f27;border-color:#fe4f27}.bcui-button--error>a:only-child{color:currentColor}.bcui-button--error>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--error:hover{color:#fff;background-color:#fe7252;border-color:#fe7252}.bcui-button--error:hover>a:only-child{color:currentColor}.bcui-button--error:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--error.active,.bcui-button--error:active{color:#f2f2f2;background-color:#f14b25;border-color:#f14b25}.bcui-button--error.active>a:only-child,.bcui-button--error:active>a:only-child{color:currentColor}.bcui-button--error.active>a:only-child:after,.bcui-button--error:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--error.disabled,.bcui-button--error.disabled.active,.bcui-button--error.disabled:active,.bcui-button--error.disabled:focus,.bcui-button--error.disabled:hover,.bcui-button--error[disabled],.bcui-button--error[disabled].active,.bcui-button--error[disabled]:active,.bcui-button--error[disabled]:focus,.bcui-button--error[disabled]:hover,fieldset[disabled] .bcui-button--error,fieldset[disabled] .bcui-button--error.active,fieldset[disabled] .bcui-button--error:active,fieldset[disabled] .bcui-button--error:focus,fieldset[disabled] .bcui-button--error:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--error.disabled.active>a:only-child,.bcui-button--error.disabled:active>a:only-child,.bcui-button--error.disabled:focus>a:only-child,.bcui-button--error.disabled:hover>a:only-child,.bcui-button--error.disabled>a:only-child,.bcui-button--error[disabled].active>a:only-child,.bcui-button--error[disabled]:active>a:only-child,.bcui-button--error[disabled]:focus>a:only-child,.bcui-button--error[disabled]:hover>a:only-child,.bcui-button--error[disabled]>a:only-child,fieldset[disabled] .bcui-button--error.active>a:only-child,fieldset[disabled] .bcui-button--error:active>a:only-child,fieldset[disabled] .bcui-button--error:focus>a:only-child,fieldset[disabled] .bcui-button--error:hover>a:only-child,fieldset[disabled] .bcui-button--error>a:only-child{color:currentColor}.bcui-button--error.disabled.active>a:only-child:after,.bcui-button--error.disabled:active>a:only-child:after,.bcui-button--error.disabled:focus>a:only-child:after,.bcui-button--error.disabled:hover>a:only-child:after,.bcui-button--error.disabled>a:only-child:after,.bcui-button--error[disabled].active>a:only-child:after,.bcui-button--error[disabled]:active>a:only-child:after,.bcui-button--error[disabled]:focus>a:only-child:after,.bcui-button--error[disabled]:hover>a:only-child:after,.bcui-button--error[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--error.active>a:only-child:after,fieldset[disabled] .bcui-button--error:active>a:only-child:after,fieldset[disabled] .bcui-button--error:focus>a:only-child:after,fieldset[disabled] .bcui-button--error:hover>a:only-child:after,fieldset[disabled] .bcui-button--error>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--error.active,.bcui-button--error:active,.bcui-button--error:hover{color:#fff}.bcui-button--info{color:#fff;background-color:#2db7f5;border-color:#2db7f5}.bcui-button--info>a:only-child{color:currentColor}.bcui-button--info>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--info:hover{color:#fff;background-color:#57c5f7;border-color:#57c5f7}.bcui-button--info:hover>a:only-child{color:currentColor}.bcui-button--info:hover>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--info.active,.bcui-button--info:active{color:#f2f2f2;background-color:#2baee9;border-color:#2baee9}.bcui-button--info.active>a:only-child,.bcui-button--info:active>a:only-child{color:currentColor}.bcui-button--info.active>a:only-child:after,.bcui-button--info:active>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--info.disabled,.bcui-button--info.disabled.active,.bcui-button--info.disabled:active,.bcui-button--info.disabled:focus,.bcui-button--info.disabled:hover,.bcui-button--info[disabled],.bcui-button--info[disabled].active,.bcui-button--info[disabled]:active,.bcui-button--info[disabled]:focus,.bcui-button--info[disabled]:hover,fieldset[disabled] .bcui-button--info,fieldset[disabled] .bcui-button--info.active,fieldset[disabled] .bcui-button--info:active,fieldset[disabled] .bcui-button--info:focus,fieldset[disabled] .bcui-button--info:hover{color:#c3cbd6;background-color:#f7f7f7;border-color:#d7dde4}.bcui-button--info.disabled.active>a:only-child,.bcui-button--info.disabled:active>a:only-child,.bcui-button--info.disabled:focus>a:only-child,.bcui-button--info.disabled:hover>a:only-child,.bcui-button--info.disabled>a:only-child,.bcui-button--info[disabled].active>a:only-child,.bcui-button--info[disabled]:active>a:only-child,.bcui-button--info[disabled]:focus>a:only-child,.bcui-button--info[disabled]:hover>a:only-child,.bcui-button--info[disabled]>a:only-child,fieldset[disabled] .bcui-button--info.active>a:only-child,fieldset[disabled] .bcui-button--info:active>a:only-child,fieldset[disabled] .bcui-button--info:focus>a:only-child,fieldset[disabled] .bcui-button--info:hover>a:only-child,fieldset[disabled] .bcui-button--info>a:only-child{color:currentColor}.bcui-button--info.disabled.active>a:only-child:after,.bcui-button--info.disabled:active>a:only-child:after,.bcui-button--info.disabled:focus>a:only-child:after,.bcui-button--info.disabled:hover>a:only-child:after,.bcui-button--info.disabled>a:only-child:after,.bcui-button--info[disabled].active>a:only-child:after,.bcui-button--info[disabled]:active>a:only-child:after,.bcui-button--info[disabled]:focus>a:only-child:after,.bcui-button--info[disabled]:hover>a:only-child:after,.bcui-button--info[disabled]>a:only-child:after,fieldset[disabled] .bcui-button--info.active>a:only-child:after,fieldset[disabled] .bcui-button--info:active>a:only-child:after,fieldset[disabled] .bcui-button--info:focus>a:only-child:after,fieldset[disabled] .bcui-button--info:hover>a:only-child:after,fieldset[disabled] .bcui-button--info>a:only-child:after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:transparent}.bcui-button--info.active,.bcui-button--info:active,.bcui-button--info:hover{color:#fff}.bcui-button--circle,.bcui-button--circle-outline{border-radius:36px}.bcui-button--circle-outline.bcui-button--large,.bcui-button--circle.bcui-button--large{border-radius:40px}.bcui-button--circle-outline.bcui-button-size,.bcui-button--circle.bcui-button-size{border-radius:24px}.bcui-button--circle-outline.bcui-button-icon-only,.bcui-button--circle.bcui-button-icon-only{width:36px;padding:0;font-size:16px;border-radius:50%;height:36px}.bcui-button--circle-outline.bcui-button-icon-only.bcui-button--larger,.bcui-button--circle.bcui-button-icon-only.bcui-button--larger{width:48px;padding:0;font-size:16px;border-radius:50;height:48px}.bcui-button--circle-outline.bcui-button-icon-only.bcui-button--large,.bcui-button--circle.bcui-button-icon-only.bcui-button--large{width:40px;padding:0;font-size:16px;border-radius:50;height:40px}.bcui-button--circle-outline.bcui-button-icon-only.bcui-button-small,.bcui-button--circle.bcui-button-icon-only.bcui-button-small{width:24px;padding:0;font-size:14px;border-radius:50%;height:24px}.bcui-button--circle-outline.bcui-button-icon-only.bcui-button-extra,.bcui-button--circle.bcui-button-icon-only.bcui-button-extra{width:20px;padding:0;font-size:14px;border-radius:50%;height:20px}.bcui-button:before{position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;background:#fff;opacity:.35;content:"";border-radius:inherit;z-index:1;transition:opacity .2s;pointer-events:none;display:none}.bcui-button.bcui-button--loading{pointer-events:none;position:relative}.bcui-button.bcui-button--loading:before{display:block}.bcui-button-group{position:relative;display:inline-block;vertical-align:middle}.bcui-button-group>.bcui-button{position:relative;float:left}.bcui-button-group>.bcui-button.active,.bcui-button-group>.bcui-button:active,.bcui-button-group>.bcui-button:hover{z-index:2}.bcui-button-group .bcui-button-icon-only .bcui-icon{font-size:14px;position:relative;top:1px}.bcui-button-group--large .bcui-button-icon-only .bcui-icon{font-size:16px;top:2px}.bcui-button-group--small .bcui-button-icon-only .bcui-icon{font-size:12px;top:0}.bcui-button-group-circle .bcui-button{border-radius:36px}.bcui-button-group--large.bcui-button-group--circle .bcui-button{border-radius:40px}.bcui-button-group--large>.bcui-button{padding:0 16px;font-size:14px;border-radius:4px;height:40px}.bcui-button-group--larger>.bcui-button{padding:6px 16px;font-size:14px;border-radius:4px;height:48px}.bcui-button-group--small.bcui-button-group--circle .bcui-button{border-radius:24px}.bcui-button-group--small>.bcui-button{padding:0 9px;font-size:12px;border-radius:3px;height:24px}.bcui-button-group--small>.bcui-button>.bcui-icon{font-size:14px}.bcui-button+.bcui-button-group,.bcui-button-group+.bcui-button,.bcui-button-group+.bcui-button-group,.bcui-button-group .bcui-button+.bcui-button{margin-left:-1px}.bcui-button-group .bcui-button:not(:first-child):not(:last-child){border-radius:0}.bcui-button-group:not(.bcui-button-group-vertical)>.bcui-button:first-child{margin-left:0}.bcui-button-group:not(.bcui-button-group-vertical)>.bcui-button:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.bcui-button-group:not(.bcui-button-group-vertical)>.bcui-button:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.bcui-button-group>.bcui-button-group{float:left}.bcui-button-group>.bcui-button-group:not(:first-child):not(:last-child)>.bcui-button{border-radius:0}.bcui-button-group:not(.bcui-button-group-vertical)>.bcui-button-group:first-child:not(:last-child)>.bcui-button:last-child{border-bottom-right-radius:0;border-top-right-radius:0;padding-right:8px}.bcui-button-group:not(.bcui-button-group-vertical)>.bcui-button-group:last-child:not(:first-child)>.bcui-button:first-child{border-bottom-left-radius:0;border-top-left-radius:0;padding-left:8px}.bcui-button-group-vertical{display:inline-block;vertical-align:middle}.bcui-button-group-vertical>.bcui-button{display:block;width:100%;max-width:100%;float:none}.bcui-button+.bcui-button-group-vertical,.bcui-button-group-vertical+.bcui-button,.bcui-button-group-vertical+.bcui-button-group-vertical,.bcui-button-group-vertical .bcui-button+.bcui-button{margin-top:-1px;margin-left:0}.bcui-button-group-vertical>.bcui-button:first-child{margin-top:0}.bcui-button-group-vertical>.bcui-button:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.bcui-button-group-vertical>.bcui-button:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.bcui-button-group-vertical>.bcui-button-group-vertical:first-child:not(:last-child)>.bcui-button:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0;padding-bottom:8px}.bcui-button-group-vertical>.bcui-button-group-vertical:last-child:not(:first-child)>.bcui-button:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0;padding-top:8px}.bcui-load-loop{animation:ani-load-loop 1s linear infinite}@keyframes ani-load-loop{0%{transform:rotate(0)}50%{transform:rotate(180deg)}to{transform:rotate(1turn)}}.bcui-card{width:100%;background:#fff;border-radius:4px;font-size:12px;transition:all .3s;position:relative}.bcui-card--hoverable:hover{cursor:pointer;box-shadow:0 1px 6px rgba(0,0,0,.2);border-color:transparent}.bcui-card--bordered{border:1px solid #e9e9e9}.bcui-card__head{height:48px;line-height:48px;background:#fff;border-bottom:1px solid #e9e9e9;padding:0 16px}.bcui-card__head-title{font-size:14px;display:inline-block;text-overflow:ellipsis;width:100%;overflow:hidden;white-space:nowrap;color:rgba(0,0,0,.85);font-weight:500}.bcui-card__extra{position:absolute;right:24px;top:14px}.bcui-card__body{padding:16px}.bcui-checkbox{font-size:12px;margin-right:16px}.bcui-checkbox,.bcui-checkbox__input{display:inline-block;white-space:nowrap;cursor:pointer}.bcui-checkbox__input{outline:none;line-height:1;position:relative;vertical-align:middle}.bcui-checkbox__input.bcui-checkbox__input--checked .bcui-checkbox__inner{background:#2d77ee;border-color:#2d77ee}.bcui-checkbox__input.bcui-checkbox__input--checked .bcui-checkbox__inner:after{content:"";display:table;width:4px;height:8px;position:absolute;top:1px;left:4px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1);transition:all .2s ease-in-out}.bcui-checkbox__input.bcui-checkbox__input--checked.bcui-checkbox__input.bcui-checkbox__input--disabled .bcui-checkbox__inner:after{animation-name:none;border-color:#ccc}.bcui-checkbox__input.bcui-checkbox__input--disabled{cursor:not-allowed}.bcui-checkbox__input.bcui-checkbox__input--disabled .bcui-checkbox__inner{border-color:#dddee1;background-color:#f3f3f3}.bcui-checkbox__input.bcui-checkbox__input--disabled .bcui-checkbox__inner:after{animation-name:none;border-color:#f3f3f3}.bcui-checkbox__input.bcui-checkbox__input--disabled .bcui-checkbox__label{color:#ccc;cursor:not-allowed}.bcui-checkbox__inner{display:inline-block;width:16px;height:16px;border:1px solid #c3c3c3;border-radius:2px;background-color:#fff;position:relative;cursor:pointer;white-space:nowrap;outline:none}.bcui-checkbox__original-input{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;opacity:0;cursor:pointer}.bcui-checkbox__original-input[disabled]{cursor:not-allowed}.bcui-checkbox__label{font-size:12px;line-height:1;display:inline-block;vertical-align:middle}.bcui-base-dropdown{width:inherit;max-height:200px;overflow:auto;margin:5px 0;padding:5px 0;background-color:#fff;box-sizing:border-box;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);position:absolute;z-index:900}.bcui-dropdown{display:inline-block;position:relative}.bcui-dropdown-menu{margin:0;padding:0;list-style-type:none}.bcui-dropdown-item{line-height:normal;padding:7px 16px;margin:0;clear:both;color:#495060;font-size:12px!important;white-space:nowrap;list-style:none;cursor:pointer;transition:background .2s ease-in-out}.bcui-dropdown-item:hover{background:#f3f3f3}.bcui-dropdown-item--disabled{color:#bbbec4;cursor:not-allowed}.bcui-dropdown-item--divided{margin-top:5px;border-top:1px solid #e9eaec}[class*=" bcui-icon"],[class^=bcui-icon]{speak:none;font-family:iconfont;font-style:normal;font-weight:400;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;font-variant:normal normal}.extend-input{width:100%;line-height:1.5;padding:4px 12px;font-size:14px;border:1px solid #d7dde4;border-radius:4px;color:#333;background-color:#fff;background-image:none;position:relative;cursor:text;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out}.extend-input:hover{border-color:#5792f1}.extend-input:focus{border-color:#2d77ee;outline:0}.extend-input--disabled{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.extend-input--disabled:hover{border-color:#dfe4e9}.bcui-inputfield{position:relative;display:inline-block;vertical-align:middle;width:100%;line-height:1}.bcui-inputfield--extra{display:inline-table}.bcui-inputfield__append,.bcui-inputfield__prepend{display:table-cell;padding:4px 6px;color:#657180;text-align:center;background-color:#eee;border:1px solid #d7dde4;border-radius:4px}.bcui-inputfield__append .bcui-select,.bcui-inputfield__prepend .bcui-select{margin:-4px -6px}.bcui-inputfield__append .bcui-select__inner,.bcui-inputfield__prepend .bcui-select__inner{height:30px;border-color:#eee;background:#eee}.bcui-inputfield__append .bcui-select__inner:hover,.bcui-inputfield__prepend .bcui-select__inner:hover{border-color:#eee}.bcui-inputfield__select{display:table-cell;height:34px;vertical-align:middle;width:1px}.bcui-inputfield__select .bcui-select__inner{border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.bcui-inputfield__prepend{border-bottom-right-radius:0;border-top-right-radius:0;border-right:0}.bcui-inputfield__append{border-bottom-left-radius:0;border-top-left-radius:0;border-left:0}.bcui-inputfield__icon{position:absolute;right:0;top:0;font-size:14px;z-index:1;width:32px;height:36px;text-align:center;line-height:37px!important}.bcui-inputfield--extra .bcui-inputfield__input:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.bcui-inputfield--extra .bcui-inputfield__input:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.bcui-inputfield__input{width:100%;line-height:1.5;padding:4px 12px;font-size:14px;border:1px solid #d7dde4;border-radius:4px;color:#333;background-color:#fff;background-image:none;position:relative;cursor:text;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out;height:36px}.bcui-inputfield__input:hover{border-color:#5792f1}.bcui-inputfield__input:focus{border-color:#2d77ee;outline:0}.bcui-inputfield__input--disabled{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.bcui-inputfield__input--disabled:hover{border-color:#dfe4e9}.bcui-inputfield__input--small{padding:7px 1px;height:24px;border-radius:3px}.bcui-inputfield__input--large{font-size:14px;padding:7px 16px;height:40px}.bcui-inputfield__input--larger{font-size:14px;padding:7px 18px;height:48px}.bcui-inputfield__input--iconed{padding-right:32px}.bcui-inputfield__textarea{display:block;width:100%;line-height:1.5;padding:4px 12px;font-size:14px;border:1px solid #d7dde4;border-radius:4px;color:#333;background-color:#fff;background-image:none;position:relative;cursor:text;transition:border .2s ease-in-out,background .2s ease-in-out,box-shadow .2s ease-in-out}.bcui-inputfield__textarea:hover{border-color:#5792f1}.bcui-inputfield__textarea:focus{border-color:#2d77ee;outline:0}.bcui-inputfield__textarea--disabled{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.bcui-inputfield__textarea--disabled:hover{border-color:#dfe4e9}.bcui-inputfield__input::placeholder,.bcui-inputfield__textarea::placeholder{color:#bbbec4}.bcui-loading-box{display:initial;opacity:1;position:absolute;left:0;right:0;top:0;bottom:0;transition:opacity .3s}.bcui-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.bcui-loading-spinner .bcui-loading-text{color:rgba(45,119,238,.8);margin:3px 0;font-size:14px}.bcui-loading-spinner .circular{width:42px;height:42px;size:40px;animation:loading-rotate 2s linear infinite}.bcui-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:rgba(45,119,238,.8);stroke-linecap:round}.bcui-loading-fade-enter,.bcui-loading-fade-leave-active{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.bcui-select{display:inline-block;width:100%;vertical-align:middle;color:#657180;font-size:14px;line-height:normal}.bcui-select,.bcui-select__inner{box-sizing:border-box;position:relative}.bcui-select__inner{display:block;outline:0;user-select:none;cursor:pointer;background-color:#fff;border-radius:4px;border:1px solid #d7dde4;transition:all .2s ease-in-out}.bcui-select__inner:hover{border-color:#2d77ee}.bcui-select__inner:hover .bcui-select__arrow:first-of-type{display:inline-block}.bcui-select__inner .bcui-select__arrow:first-of-type{display:none;cursor:pointer}.bcui-select--show-clear .bcui-select__inner:hover .bcui-select__arrow:nth-of-type(2){display:none}.bcui-select__arrow{position:absolute;top:50%;right:8px;line-height:1;margin-top:-4px;font-size:8px;color:#9ea7b4;transition:all .2s ease-in-out}.bcui-select--visible .bcui-select__inner{border-color:#2d77ee;outline:0}.bcui-select--disabled .bcui-select__inner{background-color:#f3f3f3;opacity:1;cursor:not-allowed;color:#ccc}.bcui-select--disabled .bcui-select__input{cursor:not-allowed;color:#ccc}.bcui-select--disabled .bcui-select__inner:hover{border-color:#dfe4e9}.bcui-select--disabled .bcui-select__inner .bcui-select__arrow:first-of-type{display:none}.bcui-select--disabled .bcui-select__inner:hover{border-color:#d7dde4;box-shadow:none}.bcui-select--disabled .bcui-select__inner:hover .bcui-select__arrow:nth-of-type(2){display:inline-block}.bcui-select--single .bcui-select__inner{height:36px;position:relative}.bcui-select--single .bcui-select__placeholder{color:#c3cbd6}.bcui-select--single .bcui-select__placeholder,.bcui-select--single .bcui-select__selected-value{display:block;height:36px;line-height:36px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:8px;padding-right:24px}.bcui-select--large.bcui-select--single .bcui-select__inner{height:36px}.bcui-select--large.bcui-select--single .bcui-select__inner .bcui-select__placeholder,.bcui-select--large.bcui-select--single .bcui-select__inner .bcui-select__selected-value{height:36px;line-height:36px;font-size:14px;padding:8px 26px 8px 14px}.bcui-select--small.bcui-select--single .bcui-select__inner{height:24px;border-radius:3px}.bcui-select--small.bcui-select--single .bcui-select__inner .bcui-select__placeholder,.bcui-select--small.bcui-select--single .bcui-select__inner .bcui-select__selected-value{height:22px;line-height:22px}.bcui-select--multiple .bcui-select__inner{padding:0 24px 0 4px;min-height:36px}.bcui-select--multiple .bcui-select__placeholder{display:block;height:36px;line-height:36px;color:#c3cbd6;font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:4px;padding-right:22px}.bcui-select__input{display:inline-block;height:36px;line-height:36px;padding:0 24px 0 8px;font-size:14px;outline:0;border:none;box-sizing:border-box;color:#657180;background-color:transparent;position:relative;cursor:pointer}.bcui-select__input::-moz-placeholder{color:#c3cbd6;opacity:1}.bcui-select__input:-ms-input-placeholder{color:#c3cbd6}.bcui-select__input::-webkit-input-placeholder{color:#c3cbd6}.bcui-select--single .bcui-select__input{width:100%;height:36px}.bcui-select--large .bcui-select__input{font-size:14px;height:36px}.bcui-select--small .bcui-select__input{height:24px}.bcui-select--multiple .bcui-select__input{height:29px;line-height:36px;padding:0 0 0 4px;margin-left:0!important}.bcui-select__empty,.bcui-select__loading{padding:8px;text-align:center;color:#c3cbd6}.bcui-select--multiple .bcui-tag{margin:3px 0 2px 4px}.bcui-select-item{margin:0;padding:7px 16px;clear:both;color:#657180;font-size:14px!important;white-space:nowrap;list-style:none;cursor:pointer;transition:background .2s ease-in-out}.bcui-select-item--focus,.bcui-select-item:hover{background:#f3f3f3}.bcui-select-item--disabled,.bcui-select-item--disabled:hover{color:#c3cbd6;cursor:not-allowed}.bcui-select-item--disabled:hover{background-color:#fff}.bcui-select-item--selected,.bcui-select-item--selected:hover{color:#fff;background:#2d77ee}.bcui-select-item--selected.bcui-select-item--focus{background:rgba(45,119,238,.9)}.bcui-select-item-divided{margin-top:5px;border-top:1px solid #e3e8ee}.bcui-select-item-divided:before{content:"";height:5px;display:block;margin:0 -16px;background-color:#fff;position:relative;top:-7px}.bcui-select--large .bcui-select-item{padding:7px 16px 8px;font-size:14px!important}.bcui-select--multiple .bcui-select-item--selected{color:#2d77ee;background:#f3f3f3}.bcui-select--multiple .bcui-select-item--focus,.bcui-select--multiple .bcui-select-item--selected:hover{background:#f3f3f3}.bcui-select--multiple .bcui-select-item--selected.bcui-select--multiple .bcui-select-item--focus{color:rgba(45,119,238,.9);background:#fff}.bcui-select--multiple .bcui-select-item--selected:after{display:inline-block;font-family:bcfont;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;float:right;font-size:14px;content:"\E690";color:#2d77ee}.bcui-select-group{list-style:none;margin:0;padding:0}.bcui-select-group-title{padding-left:8px;font-size:14px;color:#999;height:30px;line-height:30px}.bcui-select__dropdown{width:inherit;max-height:200px;overflow:auto;margin:5px 0;padding:5px 0;background-color:#fff;box-sizing:border-box;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);position:absolute;z-index:900}.bcui-select__dropdown-list{padding:0;margin:0}.bcui-select--visible .bcui-select__arrow:nth-of-type(2){transform:rotate(180deg);margin-top:-5px}.bcui-select--multiple .bcui-select__placeholder,.bcui-select--single .bcui-select__placeholder{font-size:14px;height:34px;line-height:34px}.bcui-select--single .bcui-select__placeholder,.bcui-select--single .bcui-select__selected-value{font-size:14px;padding:8px 26px 8px 12px;line-height:normal}.bcui-select--multiple .bcui-select__input{height:34px}.bcui-select--multiple .bcui-select-item--selected:after{font-family:iconfont;content:"\E6ED"}.bcui-steps{font-size:0}.bcui-steps-item:last-child .bcui-steps-tail{display:none}.bcui-steps-item{display:inline-block;position:relative}.bcui-steps-title{font-size:14px;line-height:26px;color:rgba(0,0,0,.65);font-weight:700;background-color:#fff;display:inline-block;padding-right:10px}.bcui-steps-description{font-size:12px;color:rgba(0,0,0,.43)}.bcui-steps-body,.bcui-steps-head{position:relative;display:inline-block;vertical-align:top;font-size:14px}.bcui-steps-head{background:#fff}.bcui-steps-head__inner{display:block;border:1px solid rgba(0,0,0,.25);width:26px;height:26px;color:rgba(0,0,0,.25);line-height:23px;text-align:center;border-radius:26px;font-size:14px;margin-right:8px;transition:background-color .3s ease,border-color .3s ease}.bcui-steps-tail{position:absolute;left:0;width:100%;top:13px;padding:0 10px}.bcui-steps-tail__line{display:inline-block;vertical-align:top;background:#e9e9e9;height:1px;border-radius:4px;width:100%;position:relative}.bcui-steps-tail__line:after{position:absolute;content:"";top:0;width:0;background:#e9e9e9;height:100%;opacity:0}.bcui-steps-status--process .bcui-steps-head__inner{border-color:#2d77ee;background-color:#2d77ee}.bcui-steps-status--process .bcui-steps-icon{color:#fff}.bcui-steps-status--finish .bcui-steps-head__inner{border-color:#2d77ee;background-color:#fff}.bcui-steps-status--finish .bcui-steps-tail__line:after{width:100%;background:#2d77ee;-webkit-transition:all .6s;transition:all .6s;opacity:1;box-shadow:0 0 0 0 #2d77ee;animation:tailEffect .4s}.bcui-steps-status--finish .bcui-steps-icon{color:#2d77ee}.bcui-steps-status--finish .bcui-steps-title{color:rgba(0,0,0,.43)}.bcui-steps-status--next-error .bcui-steps-tail__line,.bcui-steps-status--next-error .bcui-steps-tail__line:after{background-color:#f04134}.bcui-steps-status--error .bcui-steps-head__inner{border-color:#f04134;background-color:#fff;color:#f04134}.bcui-steps-status--error .bcui-steps-description,.bcui-steps-status--error .bcui-steps-title{color:#f04134}.bcui-switch{display:inline-block;width:48px;height:24px;line-height:22px;border-radius:24px;vertical-align:middle;border:1px solid #ccc;background-color:#ccc;position:relative;cursor:pointer;user-select:none;transition:all .2s ease-in-out}.bcui-switch__inner{color:#fff;font-size:12px;position:absolute;left:25px}.bcui-switch__inner i{width:12px;height:12px;text-align:center}.bcui-switch:after{content:"";width:20px;height:20px;border-radius:20px;background-color:#fff;position:absolute;left:1px;top:1px;cursor:pointer;transition:left .2s ease-in-out,width .2s ease-in-out}.bcui-switch:active:after{width:26px}.bcui-switch:focus{box-shadow:0 0 0 2px rgba(45,119,238,.2);outline:0}.bcui-switch:focus:hover{box-shadow:none}.bcui-switch--small{width:24px;height:12px;line-height:10px}.bcui-switch--small:after{width:10px;height:10px;top:0;left:0}.bcui-switch--small:active:after{width:14px}.bcui-switch--small.bcui-switch--checked:after{left:12px}.bcui-switch--small:active.bcui-switch--checked:after{left:8px}.bcui-switch--large{width:60px}.bcui-switch--large:active:after{width:26px;width:32px}.bcui-switch--large.bcui-switch--checked:after{left:37px}.bcui-switch--large:active.bcui-switch--checked:after{left:25px}.bcui-switch--checked{border-color:#2d77ee;background-color:#2d77ee}.bcui-switch--checked .bcui-switch__inner{left:8px}.bcui-switch--checked:after{left:25px}.bcui-switch--checked:active:after{left:19px}.bcui-switch--disabled{cursor:not-allowed;background:#f3f3f3;border-color:#f3f3f3}.bcui-switch--disabled:after{background:#ccc;cursor:not-allowed}.bcui-switch--disabled .bcui-switch__inner{color:#ccc}.bcui-form--inline .bcui-form-item{display:inline-block;vertical-align:top}.bcui-form-item{margin-bottom:18px}.bcui-form-item:after{content:"";display:block;visibility:visible;width:0;height:0;font-size:0;clear:both}.bcui-form-item--required .bcui-form-item__label:before{content:"*";display:inline-block;margin-right:4px;line-height:1;font-family:SimSun;font-size:12px;color:#f30}.bcui-form-item--error .bcui-inputfield__input,.bcui-form-item--error .bcui-inputfield__textarea,.bcui-form-item--error .bcui-select__inner{border:1px solid #f30}.bcui-form-item--error .bcui-inputfield__input:focus,.bcui-form-item--error .bcui-inputfield__textarea:focus,.bcui-form-item--error .bcui-select__inner:focus{border-color:#f30;outline:0}.bcui-form-item--error .bcui-select__arrow{color:#f30}.bcui-form-item__error-tip{position:absolute;top:100%;left:0;line-height:1;padding-top:4px;font-size:12px;color:#f30}.bcui-form-item__label{vertical-align:middle;float:left;font-size:12px;color:#657180;padding:10px 12px 10px 0;height:34px;line-height:1.3}.bcui-form-item__label--right{text-align:right}.bcui-form-item__label--top{float:none}.bcui-form-item__tooltip i{color:#333;font-size:14px;vertical-align:-1px;height:14px;margin-top:-2px}.bcui-form-label--top .bcui-form-item__label{float:none}.bcui-form-item__content{min-height:34px;line-height:34px;position:relative}.bcui-form-item__content:after{content:"";display:block;visibility:visible;width:0;height:0;font-size:0;clear:both}.bcui-form-item-error .bcui-select__inner{border:1px solid #f30}.bcui-form-item-error .bcui-select__arrow{color:#f30}.bcui-form-item-error .bcui-select--visible .bcui-select__inner{border-color:#f30;outline:0}.bcui-form{width:500px}.bcui-row{position:relative;margin-left:0;margin-right:0;height:auto;zoom:1;display:block;-webkit-box-sizing:border-box;box-sizing:border-box}.bcui-row:after,.bcui-row:before{content:" ";display:table}.bcui-row:after{clear:both;visibility:hidden;font-size:0;height:0}.bcui-row-flex{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.bcui-row-flex,.bcui-row-flex:after,.bcui-row-flex:before{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.bcui-row-flex-start{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.bcui-row-flex-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.bcui-row-flex-end{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.bcui-row-flex-space-between{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.bcui-row-flex-space-around{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.bcui-row-flex-top{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.bcui-row-flex-middle{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.bcui-row-flex-bottom{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.bcui-col{position:relative;display:block}.bcui-col-1,.bcui-col-2,.bcui-col-3,.bcui-col-4,.bcui-col-5,.bcui-col-6,.bcui-col-7,.bcui-col-8,.bcui-col-9,.bcui-col-10,.bcui-col-11,.bcui-col-12,.bcui-col-13,.bcui-col-14,.bcui-col-15,.bcui-col-16,.bcui-col-17,.bcui-col-18,.bcui-col-19,.bcui-col-20,.bcui-col-21,.bcui-col-22,.bcui-col-23,.bcui-col-24,.bcui-col-lg-1,.bcui-col-lg-2,.bcui-col-lg-3,.bcui-col-lg-4,.bcui-col-lg-5,.bcui-col-lg-6,.bcui-col-lg-7,.bcui-col-lg-8,.bcui-col-lg-9,.bcui-col-lg-10,.bcui-col-lg-11,.bcui-col-lg-12,.bcui-col-lg-13,.bcui-col-lg-14,.bcui-col-lg-15,.bcui-col-lg-16,.bcui-col-lg-17,.bcui-col-lg-18,.bcui-col-lg-19,.bcui-col-lg-20,.bcui-col-lg-21,.bcui-col-lg-22,.bcui-col-lg-23,.bcui-col-lg-24,.bcui-col-md-1,.bcui-col-md-2,.bcui-col-md-3,.bcui-col-md-4,.bcui-col-md-5,.bcui-col-md-6,.bcui-col-md-7,.bcui-col-md-8,.bcui-col-md-9,.bcui-col-md-10,.bcui-col-md-11,.bcui-col-md-12,.bcui-col-md-13,.bcui-col-md-14,.bcui-col-md-15,.bcui-col-md-16,.bcui-col-md-17,.bcui-col-md-18,.bcui-col-md-19,.bcui-col-md-20,.bcui-col-md-21,.bcui-col-md-22,.bcui-col-md-23,.bcui-col-md-24,.bcui-col-sm-1,.bcui-col-sm-2,.bcui-col-sm-3,.bcui-col-sm-4,.bcui-col-sm-5,.bcui-col-sm-6,.bcui-col-sm-7,.bcui-col-sm-8,.bcui-col-sm-9,.bcui-col-sm-10,.bcui-col-sm-11,.bcui-col-sm-12,.bcui-col-sm-13,.bcui-col-sm-14,.bcui-col-sm-15,.bcui-col-sm-16,.bcui-col-sm-17,.bcui-col-sm-18,.bcui-col-sm-19,.bcui-col-sm-20,.bcui-col-sm-21,.bcui-col-sm-22,.bcui-col-sm-23,.bcui-col-sm-24,.bcui-col-xs-1,.bcui-col-xs-2,.bcui-col-xs-3,.bcui-col-xs-4,.bcui-col-xs-5,.bcui-col-xs-6,.bcui-col-xs-7,.bcui-col-xs-8,.bcui-col-xs-9,.bcui-col-xs-10,.bcui-col-xs-11,.bcui-col-xs-12,.bcui-col-xs-13,.bcui-col-xs-14,.bcui-col-xs-15,.bcui-col-xs-16,.bcui-col-xs-17,.bcui-col-xs-18,.bcui-col-xs-19,.bcui-col-xs-20,.bcui-col-xs-21,.bcui-col-xs-22,.bcui-col-xs-23,.bcui-col-xs-24{position:relative;min-height:1px;padding-left:0;padding-right:0}.bcui-col-1,.bcui-col-2,.bcui-col-3,.bcui-col-4,.bcui-col-5,.bcui-col-6,.bcui-col-7,.bcui-col-8,.bcui-col-9,.bcui-col-10,.bcui-col-11,.bcui-col-12,.bcui-col-13,.bcui-col-14,.bcui-col-15,.bcui-col-16,.bcui-col-17,.bcui-col-18,.bcui-col-19,.bcui-col-20,.bcui-col-21,.bcui-col-22,.bcui-col-23,.bcui-col-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-push-24{left:100%}.bcui-col-pull-24{right:100%}.bcui-col-offset-24{margin-left:100%}.bcui-col-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-push-23{left:95.83333333%}.bcui-col-pull-23{right:95.83333333%}.bcui-col-offset-23{margin-left:95.83333333%}.bcui-col-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-push-22{left:91.66666667%}.bcui-col-pull-22{right:91.66666667%}.bcui-col-offset-22{margin-left:91.66666667%}.bcui-col-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-push-21{left:87.5%}.bcui-col-pull-21{right:87.5%}.bcui-col-offset-21{margin-left:87.5%}.bcui-col-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-push-20{left:83.33333333%}.bcui-col-pull-20{right:83.33333333%}.bcui-col-offset-20{margin-left:83.33333333%}.bcui-col-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-push-19{left:79.16666667%}.bcui-col-pull-19{right:79.16666667%}.bcui-col-offset-19{margin-left:79.16666667%}.bcui-col-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-push-18{left:75%}.bcui-col-pull-18{right:75%}.bcui-col-offset-18{margin-left:75%}.bcui-col-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-push-17{left:70.83333333%}.bcui-col-pull-17{right:70.83333333%}.bcui-col-offset-17{margin-left:70.83333333%}.bcui-col-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-push-16{left:66.66666667%}.bcui-col-pull-16{right:66.66666667%}.bcui-col-offset-16{margin-left:66.66666667%}.bcui-col-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-push-15{left:62.5%}.bcui-col-pull-15{right:62.5%}.bcui-col-offset-15{margin-left:62.5%}.bcui-col-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-push-14{left:58.33333333%}.bcui-col-pull-14{right:58.33333333%}.bcui-col-offset-14{margin-left:58.33333333%}.bcui-col-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-push-13{left:54.16666667%}.bcui-col-pull-13{right:54.16666667%}.bcui-col-offset-13{margin-left:54.16666667%}.bcui-col-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-push-12{left:50%}.bcui-col-pull-12{right:50%}.bcui-col-offset-12{margin-left:50%}.bcui-col-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-push-11{left:45.83333333%}.bcui-col-pull-11{right:45.83333333%}.bcui-col-offset-11{margin-left:45.83333333%}.bcui-col-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-push-10{left:41.66666667%}.bcui-col-pull-10{right:41.66666667%}.bcui-col-offset-10{margin-left:41.66666667%}.bcui-col-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-push-9{left:37.5%}.bcui-col-pull-9{right:37.5%}.bcui-col-offset-9{margin-left:37.5%}.bcui-col-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-push-8{left:33.33333333%}.bcui-col-pull-8{right:33.33333333%}.bcui-col-offset-8{margin-left:33.33333333%}.bcui-col-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-push-7{left:29.16666667%}.bcui-col-pull-7{right:29.16666667%}.bcui-col-offset-7{margin-left:29.16666667%}.bcui-col-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-push-6{left:25%}.bcui-col-pull-6{right:25%}.bcui-col-offset-6{margin-left:25%}.bcui-col-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-push-5{left:20.83333333%}.bcui-col-pull-5{right:20.83333333%}.bcui-col-offset-5{margin-left:20.83333333%}.bcui-col-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-push-4{left:16.66666667%}.bcui-col-pull-4{right:16.66666667%}.bcui-col-offset-4{margin-left:16.66666667%}.bcui-col-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-push-3{left:12.5%}.bcui-col-pull-3{right:12.5%}.bcui-col-offset-3{margin-left:12.5%}.bcui-col-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-push-2{left:8.33333333%}.bcui-col-pull-2{right:8.33333333%}.bcui-col-offset-2{margin-left:8.33333333%}.bcui-col-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-push-1{left:4.16666667%}.bcui-col-pull-1{right:4.16666667%}.bcui-col-offset-1{margin-left:4.16666667%}.bcui-col-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-0{display:none}.bcui-col-offset-0{margin-left:0}.bcui-col-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.bcui-col-xs-1,.bcui-col-xs-2,.bcui-col-xs-3,.bcui-col-xs-4,.bcui-col-xs-5,.bcui-col-xs-6,.bcui-col-xs-7,.bcui-col-xs-8,.bcui-col-xs-9,.bcui-col-xs-10,.bcui-col-xs-11,.bcui-col-xs-12,.bcui-col-xs-13,.bcui-col-xs-14,.bcui-col-xs-15,.bcui-col-xs-16,.bcui-col-xs-17,.bcui-col-xs-18,.bcui-col-xs-19,.bcui-col-xs-20,.bcui-col-xs-21,.bcui-col-xs-22,.bcui-col-xs-23,.bcui-col-xs-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-xs-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-xs-push-24{left:100%}.bcui-col-xs-pull-24{right:100%}.bcui-col-xs-offset-24{margin-left:100%}.bcui-col-xs-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-xs-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-xs-push-23{left:95.83333333%}.bcui-col-xs-pull-23{right:95.83333333%}.bcui-col-xs-offset-23{margin-left:95.83333333%}.bcui-col-xs-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-xs-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-xs-push-22{left:91.66666667%}.bcui-col-xs-pull-22{right:91.66666667%}.bcui-col-xs-offset-22{margin-left:91.66666667%}.bcui-col-xs-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-xs-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-xs-push-21{left:87.5%}.bcui-col-xs-pull-21{right:87.5%}.bcui-col-xs-offset-21{margin-left:87.5%}.bcui-col-xs-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-xs-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-xs-push-20{left:83.33333333%}.bcui-col-xs-pull-20{right:83.33333333%}.bcui-col-xs-offset-20{margin-left:83.33333333%}.bcui-col-xs-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-xs-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-xs-push-19{left:79.16666667%}.bcui-col-xs-pull-19{right:79.16666667%}.bcui-col-xs-offset-19{margin-left:79.16666667%}.bcui-col-xs-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-xs-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-xs-push-18{left:75%}.bcui-col-xs-pull-18{right:75%}.bcui-col-xs-offset-18{margin-left:75%}.bcui-col-xs-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-xs-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-xs-push-17{left:70.83333333%}.bcui-col-xs-pull-17{right:70.83333333%}.bcui-col-xs-offset-17{margin-left:70.83333333%}.bcui-col-xs-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-xs-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-xs-push-16{left:66.66666667%}.bcui-col-xs-pull-16{right:66.66666667%}.bcui-col-xs-offset-16{margin-left:66.66666667%}.bcui-col-xs-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-xs-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-xs-push-15{left:62.5%}.bcui-col-xs-pull-15{right:62.5%}.bcui-col-xs-offset-15{margin-left:62.5%}.bcui-col-xs-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-xs-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-xs-push-14{left:58.33333333%}.bcui-col-xs-pull-14{right:58.33333333%}.bcui-col-xs-offset-14{margin-left:58.33333333%}.bcui-col-xs-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-xs-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-xs-push-13{left:54.16666667%}.bcui-col-xs-pull-13{right:54.16666667%}.bcui-col-xs-offset-13{margin-left:54.16666667%}.bcui-col-xs-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-xs-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-xs-push-12{left:50%}.bcui-col-xs-pull-12{right:50%}.bcui-col-xs-offset-12{margin-left:50%}.bcui-col-xs-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-xs-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-xs-push-11{left:45.83333333%}.bcui-col-xs-pull-11{right:45.83333333%}.bcui-col-xs-offset-11{margin-left:45.83333333%}.bcui-col-xs-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-xs-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-xs-push-10{left:41.66666667%}.bcui-col-xs-pull-10{right:41.66666667%}.bcui-col-xs-offset-10{margin-left:41.66666667%}.bcui-col-xs-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-xs-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-xs-push-9{left:37.5%}.bcui-col-xs-pull-9{right:37.5%}.bcui-col-xs-offset-9{margin-left:37.5%}.bcui-col-xs-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-xs-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-xs-push-8{left:33.33333333%}.bcui-col-xs-pull-8{right:33.33333333%}.bcui-col-xs-offset-8{margin-left:33.33333333%}.bcui-col-xs-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-xs-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-xs-push-7{left:29.16666667%}.bcui-col-xs-pull-7{right:29.16666667%}.bcui-col-xs-offset-7{margin-left:29.16666667%}.bcui-col-xs-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-xs-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-xs-push-6{left:25%}.bcui-col-xs-pull-6{right:25%}.bcui-col-xs-offset-6{margin-left:25%}.bcui-col-xs-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-xs-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-xs-push-5{left:20.83333333%}.bcui-col-xs-pull-5{right:20.83333333%}.bcui-col-xs-offset-5{margin-left:20.83333333%}.bcui-col-xs-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-xs-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-xs-push-4{left:16.66666667%}.bcui-col-xs-pull-4{right:16.66666667%}.bcui-col-xs-offset-4{margin-left:16.66666667%}.bcui-col-xs-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-xs-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-xs-push-3{left:12.5%}.bcui-col-xs-pull-3{right:12.5%}.bcui-col-xs-offset-3{margin-left:12.5%}.bcui-col-xs-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-xs-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-xs-push-2{left:8.33333333%}.bcui-col-xs-pull-2{right:8.33333333%}.bcui-col-xs-offset-2{margin-left:8.33333333%}.bcui-col-xs-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-xs-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-xs-push-1{left:4.16666667%}.bcui-col-xs-pull-1{right:4.16666667%}.bcui-col-xs-offset-1{margin-left:4.16666667%}.bcui-col-xs-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-xs-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-xs-push-0{left:auto}.bcui-col-xs-pull-0{right:auto}.bcui-col-xs-offset-0{margin-left:0}.bcui-col-xs-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}@media (min-width:576px){.bcui-col-sm-1,.bcui-col-sm-2,.bcui-col-sm-3,.bcui-col-sm-4,.bcui-col-sm-5,.bcui-col-sm-6,.bcui-col-sm-7,.bcui-col-sm-8,.bcui-col-sm-9,.bcui-col-sm-10,.bcui-col-sm-11,.bcui-col-sm-12,.bcui-col-sm-13,.bcui-col-sm-14,.bcui-col-sm-15,.bcui-col-sm-16,.bcui-col-sm-17,.bcui-col-sm-18,.bcui-col-sm-19,.bcui-col-sm-20,.bcui-col-sm-21,.bcui-col-sm-22,.bcui-col-sm-23,.bcui-col-sm-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-sm-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-sm-push-24{left:100%}.bcui-col-sm-pull-24{right:100%}.bcui-col-sm-offset-24{margin-left:100%}.bcui-col-sm-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-sm-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-sm-push-23{left:95.83333333%}.bcui-col-sm-pull-23{right:95.83333333%}.bcui-col-sm-offset-23{margin-left:95.83333333%}.bcui-col-sm-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-sm-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-sm-push-22{left:91.66666667%}.bcui-col-sm-pull-22{right:91.66666667%}.bcui-col-sm-offset-22{margin-left:91.66666667%}.bcui-col-sm-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-sm-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-sm-push-21{left:87.5%}.bcui-col-sm-pull-21{right:87.5%}.bcui-col-sm-offset-21{margin-left:87.5%}.bcui-col-sm-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-sm-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-sm-push-20{left:83.33333333%}.bcui-col-sm-pull-20{right:83.33333333%}.bcui-col-sm-offset-20{margin-left:83.33333333%}.bcui-col-sm-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-sm-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-sm-push-19{left:79.16666667%}.bcui-col-sm-pull-19{right:79.16666667%}.bcui-col-sm-offset-19{margin-left:79.16666667%}.bcui-col-sm-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-sm-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-sm-push-18{left:75%}.bcui-col-sm-pull-18{right:75%}.bcui-col-sm-offset-18{margin-left:75%}.bcui-col-sm-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-sm-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-sm-push-17{left:70.83333333%}.bcui-col-sm-pull-17{right:70.83333333%}.bcui-col-sm-offset-17{margin-left:70.83333333%}.bcui-col-sm-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-sm-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-sm-push-16{left:66.66666667%}.bcui-col-sm-pull-16{right:66.66666667%}.bcui-col-sm-offset-16{margin-left:66.66666667%}.bcui-col-sm-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-sm-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-sm-push-15{left:62.5%}.bcui-col-sm-pull-15{right:62.5%}.bcui-col-sm-offset-15{margin-left:62.5%}.bcui-col-sm-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-sm-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-sm-push-14{left:58.33333333%}.bcui-col-sm-pull-14{right:58.33333333%}.bcui-col-sm-offset-14{margin-left:58.33333333%}.bcui-col-sm-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-sm-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-sm-push-13{left:54.16666667%}.bcui-col-sm-pull-13{right:54.16666667%}.bcui-col-sm-offset-13{margin-left:54.16666667%}.bcui-col-sm-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-sm-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-sm-push-12{left:50%}.bcui-col-sm-pull-12{right:50%}.bcui-col-sm-offset-12{margin-left:50%}.bcui-col-sm-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-sm-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-sm-push-11{left:45.83333333%}.bcui-col-sm-pull-11{right:45.83333333%}.bcui-col-sm-offset-11{margin-left:45.83333333%}.bcui-col-sm-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-sm-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-sm-push-10{left:41.66666667%}.bcui-col-sm-pull-10{right:41.66666667%}.bcui-col-sm-offset-10{margin-left:41.66666667%}.bcui-col-sm-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-sm-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-sm-push-9{left:37.5%}.bcui-col-sm-pull-9{right:37.5%}.bcui-col-sm-offset-9{margin-left:37.5%}.bcui-col-sm-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-sm-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-sm-push-8{left:33.33333333%}.bcui-col-sm-pull-8{right:33.33333333%}.bcui-col-sm-offset-8{margin-left:33.33333333%}.bcui-col-sm-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-sm-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-sm-push-7{left:29.16666667%}.bcui-col-sm-pull-7{right:29.16666667%}.bcui-col-sm-offset-7{margin-left:29.16666667%}.bcui-col-sm-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-sm-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-sm-push-6{left:25%}.bcui-col-sm-pull-6{right:25%}.bcui-col-sm-offset-6{margin-left:25%}.bcui-col-sm-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-sm-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-sm-push-5{left:20.83333333%}.bcui-col-sm-pull-5{right:20.83333333%}.bcui-col-sm-offset-5{margin-left:20.83333333%}.bcui-col-sm-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-sm-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-sm-push-4{left:16.66666667%}.bcui-col-sm-pull-4{right:16.66666667%}.bcui-col-sm-offset-4{margin-left:16.66666667%}.bcui-col-sm-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-sm-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-sm-push-3{left:12.5%}.bcui-col-sm-pull-3{right:12.5%}.bcui-col-sm-offset-3{margin-left:12.5%}.bcui-col-sm-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-sm-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-sm-push-2{left:8.33333333%}.bcui-col-sm-pull-2{right:8.33333333%}.bcui-col-sm-offset-2{margin-left:8.33333333%}.bcui-col-sm-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-sm-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-sm-push-1{left:4.16666667%}.bcui-col-sm-pull-1{right:4.16666667%}.bcui-col-sm-offset-1{margin-left:4.16666667%}.bcui-col-sm-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-sm-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-sm-push-0{left:auto}.bcui-col-sm-pull-0{right:auto}.bcui-col-sm-offset-0{margin-left:0}.bcui-col-sm-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}}@media (min-width:768px){.bcui-col-md-1,.bcui-col-md-2,.bcui-col-md-3,.bcui-col-md-4,.bcui-col-md-5,.bcui-col-md-6,.bcui-col-md-7,.bcui-col-md-8,.bcui-col-md-9,.bcui-col-md-10,.bcui-col-md-11,.bcui-col-md-12,.bcui-col-md-13,.bcui-col-md-14,.bcui-col-md-15,.bcui-col-md-16,.bcui-col-md-17,.bcui-col-md-18,.bcui-col-md-19,.bcui-col-md-20,.bcui-col-md-21,.bcui-col-md-22,.bcui-col-md-23,.bcui-col-md-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-md-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-md-push-24{left:100%}.bcui-col-md-pull-24{right:100%}.bcui-col-md-offset-24{margin-left:100%}.bcui-col-md-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-md-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-md-push-23{left:95.83333333%}.bcui-col-md-pull-23{right:95.83333333%}.bcui-col-md-offset-23{margin-left:95.83333333%}.bcui-col-md-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-md-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-md-push-22{left:91.66666667%}.bcui-col-md-pull-22{right:91.66666667%}.bcui-col-md-offset-22{margin-left:91.66666667%}.bcui-col-md-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-md-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-md-push-21{left:87.5%}.bcui-col-md-pull-21{right:87.5%}.bcui-col-md-offset-21{margin-left:87.5%}.bcui-col-md-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-md-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-md-push-20{left:83.33333333%}.bcui-col-md-pull-20{right:83.33333333%}.bcui-col-md-offset-20{margin-left:83.33333333%}.bcui-col-md-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-md-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-md-push-19{left:79.16666667%}.bcui-col-md-pull-19{right:79.16666667%}.bcui-col-md-offset-19{margin-left:79.16666667%}.bcui-col-md-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-md-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-md-push-18{left:75%}.bcui-col-md-pull-18{right:75%}.bcui-col-md-offset-18{margin-left:75%}.bcui-col-md-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-md-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-md-push-17{left:70.83333333%}.bcui-col-md-pull-17{right:70.83333333%}.bcui-col-md-offset-17{margin-left:70.83333333%}.bcui-col-md-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-md-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-md-push-16{left:66.66666667%}.bcui-col-md-pull-16{right:66.66666667%}.bcui-col-md-offset-16{margin-left:66.66666667%}.bcui-col-md-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-md-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-md-push-15{left:62.5%}.bcui-col-md-pull-15{right:62.5%}.bcui-col-md-offset-15{margin-left:62.5%}.bcui-col-md-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-md-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-md-push-14{left:58.33333333%}.bcui-col-md-pull-14{right:58.33333333%}.bcui-col-md-offset-14{margin-left:58.33333333%}.bcui-col-md-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-md-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-md-push-13{left:54.16666667%}.bcui-col-md-pull-13{right:54.16666667%}.bcui-col-md-offset-13{margin-left:54.16666667%}.bcui-col-md-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-md-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-md-push-12{left:50%}.bcui-col-md-pull-12{right:50%}.bcui-col-md-offset-12{margin-left:50%}.bcui-col-md-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-md-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-md-push-11{left:45.83333333%}.bcui-col-md-pull-11{right:45.83333333%}.bcui-col-md-offset-11{margin-left:45.83333333%}.bcui-col-md-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-md-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-md-push-10{left:41.66666667%}.bcui-col-md-pull-10{right:41.66666667%}.bcui-col-md-offset-10{margin-left:41.66666667%}.bcui-col-md-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-md-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-md-push-9{left:37.5%}.bcui-col-md-pull-9{right:37.5%}.bcui-col-md-offset-9{margin-left:37.5%}.bcui-col-md-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-md-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-md-push-8{left:33.33333333%}.bcui-col-md-pull-8{right:33.33333333%}.bcui-col-md-offset-8{margin-left:33.33333333%}.bcui-col-md-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-md-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-md-push-7{left:29.16666667%}.bcui-col-md-pull-7{right:29.16666667%}.bcui-col-md-offset-7{margin-left:29.16666667%}.bcui-col-md-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-md-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-md-push-6{left:25%}.bcui-col-md-pull-6{right:25%}.bcui-col-md-offset-6{margin-left:25%}.bcui-col-md-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-md-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-md-push-5{left:20.83333333%}.bcui-col-md-pull-5{right:20.83333333%}.bcui-col-md-offset-5{margin-left:20.83333333%}.bcui-col-md-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-md-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-md-push-4{left:16.66666667%}.bcui-col-md-pull-4{right:16.66666667%}.bcui-col-md-offset-4{margin-left:16.66666667%}.bcui-col-md-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-md-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-md-push-3{left:12.5%}.bcui-col-md-pull-3{right:12.5%}.bcui-col-md-offset-3{margin-left:12.5%}.bcui-col-md-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-md-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-md-push-2{left:8.33333333%}.bcui-col-md-pull-2{right:8.33333333%}.bcui-col-md-offset-2{margin-left:8.33333333%}.bcui-col-md-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-md-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-md-push-1{left:4.16666667%}.bcui-col-md-pull-1{right:4.16666667%}.bcui-col-md-offset-1{margin-left:4.16666667%}.bcui-col-md-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-md-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-md-push-0{left:auto}.bcui-col-md-pull-0{right:auto}.bcui-col-md-offset-0{margin-left:0}.bcui-col-md-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}}@media (min-width:992px){.bcui-col-lg-1,.bcui-col-lg-2,.bcui-col-lg-3,.bcui-col-lg-4,.bcui-col-lg-5,.bcui-col-lg-6,.bcui-col-lg-7,.bcui-col-lg-8,.bcui-col-lg-9,.bcui-col-lg-10,.bcui-col-lg-11,.bcui-col-lg-12,.bcui-col-lg-13,.bcui-col-lg-14,.bcui-col-lg-15,.bcui-col-lg-16,.bcui-col-lg-17,.bcui-col-lg-18,.bcui-col-lg-19,.bcui-col-lg-20,.bcui-col-lg-21,.bcui-col-lg-22,.bcui-col-lg-23,.bcui-col-lg-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-lg-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-lg-push-24{left:100%}.bcui-col-lg-pull-24{right:100%}.bcui-col-lg-offset-24{margin-left:100%}.bcui-col-lg-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-lg-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-lg-push-23{left:95.83333333%}.bcui-col-lg-pull-23{right:95.83333333%}.bcui-col-lg-offset-23{margin-left:95.83333333%}.bcui-col-lg-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-lg-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-lg-push-22{left:91.66666667%}.bcui-col-lg-pull-22{right:91.66666667%}.bcui-col-lg-offset-22{margin-left:91.66666667%}.bcui-col-lg-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-lg-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-lg-push-21{left:87.5%}.bcui-col-lg-pull-21{right:87.5%}.bcui-col-lg-offset-21{margin-left:87.5%}.bcui-col-lg-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-lg-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-lg-push-20{left:83.33333333%}.bcui-col-lg-pull-20{right:83.33333333%}.bcui-col-lg-offset-20{margin-left:83.33333333%}.bcui-col-lg-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-lg-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-lg-push-19{left:79.16666667%}.bcui-col-lg-pull-19{right:79.16666667%}.bcui-col-lg-offset-19{margin-left:79.16666667%}.bcui-col-lg-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-lg-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-lg-push-18{left:75%}.bcui-col-lg-pull-18{right:75%}.bcui-col-lg-offset-18{margin-left:75%}.bcui-col-lg-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-lg-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-lg-push-17{left:70.83333333%}.bcui-col-lg-pull-17{right:70.83333333%}.bcui-col-lg-offset-17{margin-left:70.83333333%}.bcui-col-lg-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-lg-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-lg-push-16{left:66.66666667%}.bcui-col-lg-pull-16{right:66.66666667%}.bcui-col-lg-offset-16{margin-left:66.66666667%}.bcui-col-lg-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-lg-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-lg-push-15{left:62.5%}.bcui-col-lg-pull-15{right:62.5%}.bcui-col-lg-offset-15{margin-left:62.5%}.bcui-col-lg-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-lg-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-lg-push-14{left:58.33333333%}.bcui-col-lg-pull-14{right:58.33333333%}.bcui-col-lg-offset-14{margin-left:58.33333333%}.bcui-col-lg-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-lg-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-lg-push-13{left:54.16666667%}.bcui-col-lg-pull-13{right:54.16666667%}.bcui-col-lg-offset-13{margin-left:54.16666667%}.bcui-col-lg-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-lg-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-lg-push-12{left:50%}.bcui-col-lg-pull-12{right:50%}.bcui-col-lg-offset-12{margin-left:50%}.bcui-col-lg-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-lg-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-lg-push-11{left:45.83333333%}.bcui-col-lg-pull-11{right:45.83333333%}.bcui-col-lg-offset-11{margin-left:45.83333333%}.bcui-col-lg-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-lg-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-lg-push-10{left:41.66666667%}.bcui-col-lg-pull-10{right:41.66666667%}.bcui-col-lg-offset-10{margin-left:41.66666667%}.bcui-col-lg-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-lg-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-lg-push-9{left:37.5%}.bcui-col-lg-pull-9{right:37.5%}.bcui-col-lg-offset-9{margin-left:37.5%}.bcui-col-lg-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-lg-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-lg-push-8{left:33.33333333%}.bcui-col-lg-pull-8{right:33.33333333%}.bcui-col-lg-offset-8{margin-left:33.33333333%}.bcui-col-lg-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-lg-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-lg-push-7{left:29.16666667%}.bcui-col-lg-pull-7{right:29.16666667%}.bcui-col-lg-offset-7{margin-left:29.16666667%}.bcui-col-lg-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-lg-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-lg-push-6{left:25%}.bcui-col-lg-pull-6{right:25%}.bcui-col-lg-offset-6{margin-left:25%}.bcui-col-lg-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-lg-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-lg-push-5{left:20.83333333%}.bcui-col-lg-pull-5{right:20.83333333%}.bcui-col-lg-offset-5{margin-left:20.83333333%}.bcui-col-lg-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-lg-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-lg-push-4{left:16.66666667%}.bcui-col-lg-pull-4{right:16.66666667%}.bcui-col-lg-offset-4{margin-left:16.66666667%}.bcui-col-lg-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-lg-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-lg-push-3{left:12.5%}.bcui-col-lg-pull-3{right:12.5%}.bcui-col-lg-offset-3{margin-left:12.5%}.bcui-col-lg-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-lg-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-lg-push-2{left:8.33333333%}.bcui-col-lg-pull-2{right:8.33333333%}.bcui-col-lg-offset-2{margin-left:8.33333333%}.bcui-col-lg-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-lg-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-lg-push-1{left:4.16666667%}.bcui-col-lg-pull-1{right:4.16666667%}.bcui-col-lg-offset-1{margin-left:4.16666667%}.bcui-col-lg-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-lg-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-lg-push-0{left:auto}.bcui-col-lg-pull-0{right:auto}.bcui-col-lg-offset-0{margin-left:0}.bcui-col-lg-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}}@media (min-width:1200px){.bcui-col-xl-1,.bcui-col-xl-2,.bcui-col-xl-3,.bcui-col-xl-4,.bcui-col-xl-5,.bcui-col-xl-6,.bcui-col-xl-7,.bcui-col-xl-8,.bcui-col-xl-9,.bcui-col-xl-10,.bcui-col-xl-11,.bcui-col-xl-12,.bcui-col-xl-13,.bcui-col-xl-14,.bcui-col-xl-15,.bcui-col-xl-16,.bcui-col-xl-17,.bcui-col-xl-18,.bcui-col-xl-19,.bcui-col-xl-20,.bcui-col-xl-21,.bcui-col-xl-22,.bcui-col-xl-23,.bcui-col-xl-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-xl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-xl-push-24{left:100%}.bcui-col-xl-pull-24{right:100%}.bcui-col-xl-offset-24{margin-left:100%}.bcui-col-xl-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-xl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-xl-push-23{left:95.83333333%}.bcui-col-xl-pull-23{right:95.83333333%}.bcui-col-xl-offset-23{margin-left:95.83333333%}.bcui-col-xl-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-xl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-xl-push-22{left:91.66666667%}.bcui-col-xl-pull-22{right:91.66666667%}.bcui-col-xl-offset-22{margin-left:91.66666667%}.bcui-col-xl-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-xl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-xl-push-21{left:87.5%}.bcui-col-xl-pull-21{right:87.5%}.bcui-col-xl-offset-21{margin-left:87.5%}.bcui-col-xl-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-xl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-xl-push-20{left:83.33333333%}.bcui-col-xl-pull-20{right:83.33333333%}.bcui-col-xl-offset-20{margin-left:83.33333333%}.bcui-col-xl-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-xl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-xl-push-19{left:79.16666667%}.bcui-col-xl-pull-19{right:79.16666667%}.bcui-col-xl-offset-19{margin-left:79.16666667%}.bcui-col-xl-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-xl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-xl-push-18{left:75%}.bcui-col-xl-pull-18{right:75%}.bcui-col-xl-offset-18{margin-left:75%}.bcui-col-xl-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-xl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-xl-push-17{left:70.83333333%}.bcui-col-xl-pull-17{right:70.83333333%}.bcui-col-xl-offset-17{margin-left:70.83333333%}.bcui-col-xl-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-xl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-xl-push-16{left:66.66666667%}.bcui-col-xl-pull-16{right:66.66666667%}.bcui-col-xl-offset-16{margin-left:66.66666667%}.bcui-col-xl-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-xl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-xl-push-15{left:62.5%}.bcui-col-xl-pull-15{right:62.5%}.bcui-col-xl-offset-15{margin-left:62.5%}.bcui-col-xl-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-xl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-xl-push-14{left:58.33333333%}.bcui-col-xl-pull-14{right:58.33333333%}.bcui-col-xl-offset-14{margin-left:58.33333333%}.bcui-col-xl-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-xl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-xl-push-13{left:54.16666667%}.bcui-col-xl-pull-13{right:54.16666667%}.bcui-col-xl-offset-13{margin-left:54.16666667%}.bcui-col-xl-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-xl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-xl-push-12{left:50%}.bcui-col-xl-pull-12{right:50%}.bcui-col-xl-offset-12{margin-left:50%}.bcui-col-xl-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-xl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-xl-push-11{left:45.83333333%}.bcui-col-xl-pull-11{right:45.83333333%}.bcui-col-xl-offset-11{margin-left:45.83333333%}.bcui-col-xl-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-xl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-xl-push-10{left:41.66666667%}.bcui-col-xl-pull-10{right:41.66666667%}.bcui-col-xl-offset-10{margin-left:41.66666667%}.bcui-col-xl-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-xl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-xl-push-9{left:37.5%}.bcui-col-xl-pull-9{right:37.5%}.bcui-col-xl-offset-9{margin-left:37.5%}.bcui-col-xl-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-xl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-xl-push-8{left:33.33333333%}.bcui-col-xl-pull-8{right:33.33333333%}.bcui-col-xl-offset-8{margin-left:33.33333333%}.bcui-col-xl-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-xl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-xl-push-7{left:29.16666667%}.bcui-col-xl-pull-7{right:29.16666667%}.bcui-col-xl-offset-7{margin-left:29.16666667%}.bcui-col-xl-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-xl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-xl-push-6{left:25%}.bcui-col-xl-pull-6{right:25%}.bcui-col-xl-offset-6{margin-left:25%}.bcui-col-xl-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-xl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-xl-push-5{left:20.83333333%}.bcui-col-xl-pull-5{right:20.83333333%}.bcui-col-xl-offset-5{margin-left:20.83333333%}.bcui-col-xl-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-xl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-xl-push-4{left:16.66666667%}.bcui-col-xl-pull-4{right:16.66666667%}.bcui-col-xl-offset-4{margin-left:16.66666667%}.bcui-col-xl-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-xl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-xl-push-3{left:12.5%}.bcui-col-xl-pull-3{right:12.5%}.bcui-col-xl-offset-3{margin-left:12.5%}.bcui-col-xl-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-xl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-xl-push-2{left:8.33333333%}.bcui-col-xl-pull-2{right:8.33333333%}.bcui-col-xl-offset-2{margin-left:8.33333333%}.bcui-col-xl-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-xl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-xl-push-1{left:4.16666667%}.bcui-col-xl-pull-1{right:4.16666667%}.bcui-col-xl-offset-1{margin-left:4.16666667%}.bcui-col-xl-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-xl-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-xl-push-0{left:auto}.bcui-col-xl-pull-0{right:auto}.bcui-col-xl-offset-0{margin-left:0}.bcui-col-xl-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}}@media (min-width:1600px){.bcui-col-xxl-1,.bcui-col-xxl-2,.bcui-col-xxl-3,.bcui-col-xxl-4,.bcui-col-xxl-5,.bcui-col-xxl-6,.bcui-col-xxl-7,.bcui-col-xxl-8,.bcui-col-xxl-9,.bcui-col-xxl-10,.bcui-col-xxl-11,.bcui-col-xxl-12,.bcui-col-xxl-13,.bcui-col-xxl-14,.bcui-col-xxl-15,.bcui-col-xxl-16,.bcui-col-xxl-17,.bcui-col-xxl-18,.bcui-col-xxl-19,.bcui-col-xxl-20,.bcui-col-xxl-21,.bcui-col-xxl-22,.bcui-col-xxl-23,.bcui-col-xxl-24{float:left;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.bcui-col-xxl-24{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%}.bcui-col-xxl-push-24{left:100%}.bcui-col-xxl-pull-24{right:100%}.bcui-col-xxl-offset-24{margin-left:100%}.bcui-col-xxl-order-24{-webkit-box-ordinal-group:25;-webkit-order:24;-ms-flex-order:24;order:24}.bcui-col-xxl-23{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:95.83333333%}.bcui-col-xxl-push-23{left:95.83333333%}.bcui-col-xxl-pull-23{right:95.83333333%}.bcui-col-xxl-offset-23{margin-left:95.83333333%}.bcui-col-xxl-order-23{-webkit-box-ordinal-group:24;-webkit-order:23;-ms-flex-order:23;order:23}.bcui-col-xxl-22{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:91.66666667%}.bcui-col-xxl-push-22{left:91.66666667%}.bcui-col-xxl-pull-22{right:91.66666667%}.bcui-col-xxl-offset-22{margin-left:91.66666667%}.bcui-col-xxl-order-22{-webkit-box-ordinal-group:23;-webkit-order:22;-ms-flex-order:22;order:22}.bcui-col-xxl-21{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:87.5%}.bcui-col-xxl-push-21{left:87.5%}.bcui-col-xxl-pull-21{right:87.5%}.bcui-col-xxl-offset-21{margin-left:87.5%}.bcui-col-xxl-order-21{-webkit-box-ordinal-group:22;-webkit-order:21;-ms-flex-order:21;order:21}.bcui-col-xxl-20{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:83.33333333%}.bcui-col-xxl-push-20{left:83.33333333%}.bcui-col-xxl-pull-20{right:83.33333333%}.bcui-col-xxl-offset-20{margin-left:83.33333333%}.bcui-col-xxl-order-20{-webkit-box-ordinal-group:21;-webkit-order:20;-ms-flex-order:20;order:20}.bcui-col-xxl-19{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:79.16666667%}.bcui-col-xxl-push-19{left:79.16666667%}.bcui-col-xxl-pull-19{right:79.16666667%}.bcui-col-xxl-offset-19{margin-left:79.16666667%}.bcui-col-xxl-order-19{-webkit-box-ordinal-group:20;-webkit-order:19;-ms-flex-order:19;order:19}.bcui-col-xxl-18{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:75%}.bcui-col-xxl-push-18{left:75%}.bcui-col-xxl-pull-18{right:75%}.bcui-col-xxl-offset-18{margin-left:75%}.bcui-col-xxl-order-18{-webkit-box-ordinal-group:19;-webkit-order:18;-ms-flex-order:18;order:18}.bcui-col-xxl-17{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:70.83333333%}.bcui-col-xxl-push-17{left:70.83333333%}.bcui-col-xxl-pull-17{right:70.83333333%}.bcui-col-xxl-offset-17{margin-left:70.83333333%}.bcui-col-xxl-order-17{-webkit-box-ordinal-group:18;-webkit-order:17;-ms-flex-order:17;order:17}.bcui-col-xxl-16{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:66.66666667%}.bcui-col-xxl-push-16{left:66.66666667%}.bcui-col-xxl-pull-16{right:66.66666667%}.bcui-col-xxl-offset-16{margin-left:66.66666667%}.bcui-col-xxl-order-16{-webkit-box-ordinal-group:17;-webkit-order:16;-ms-flex-order:16;order:16}.bcui-col-xxl-15{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:62.5%}.bcui-col-xxl-push-15{left:62.5%}.bcui-col-xxl-pull-15{right:62.5%}.bcui-col-xxl-offset-15{margin-left:62.5%}.bcui-col-xxl-order-15{-webkit-box-ordinal-group:16;-webkit-order:15;-ms-flex-order:15;order:15}.bcui-col-xxl-14{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:58.33333333%}.bcui-col-xxl-push-14{left:58.33333333%}.bcui-col-xxl-pull-14{right:58.33333333%}.bcui-col-xxl-offset-14{margin-left:58.33333333%}.bcui-col-xxl-order-14{-webkit-box-ordinal-group:15;-webkit-order:14;-ms-flex-order:14;order:14}.bcui-col-xxl-13{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:54.16666667%}.bcui-col-xxl-push-13{left:54.16666667%}.bcui-col-xxl-pull-13{right:54.16666667%}.bcui-col-xxl-offset-13{margin-left:54.16666667%}.bcui-col-xxl-order-13{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.bcui-col-xxl-12{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.bcui-col-xxl-push-12{left:50%}.bcui-col-xxl-pull-12{right:50%}.bcui-col-xxl-offset-12{margin-left:50%}.bcui-col-xxl-order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.bcui-col-xxl-11{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:45.83333333%}.bcui-col-xxl-push-11{left:45.83333333%}.bcui-col-xxl-pull-11{right:45.83333333%}.bcui-col-xxl-offset-11{margin-left:45.83333333%}.bcui-col-xxl-order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.bcui-col-xxl-10{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:41.66666667%}.bcui-col-xxl-push-10{left:41.66666667%}.bcui-col-xxl-pull-10{right:41.66666667%}.bcui-col-xxl-offset-10{margin-left:41.66666667%}.bcui-col-xxl-order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.bcui-col-xxl-9{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:37.5%}.bcui-col-xxl-push-9{left:37.5%}.bcui-col-xxl-pull-9{right:37.5%}.bcui-col-xxl-offset-9{margin-left:37.5%}.bcui-col-xxl-order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.bcui-col-xxl-8{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:33.33333333%}.bcui-col-xxl-push-8{left:33.33333333%}.bcui-col-xxl-pull-8{right:33.33333333%}.bcui-col-xxl-offset-8{margin-left:33.33333333%}.bcui-col-xxl-order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.bcui-col-xxl-7{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:29.16666667%}.bcui-col-xxl-push-7{left:29.16666667%}.bcui-col-xxl-pull-7{right:29.16666667%}.bcui-col-xxl-offset-7{margin-left:29.16666667%}.bcui-col-xxl-order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.bcui-col-xxl-6{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:25%}.bcui-col-xxl-push-6{left:25%}.bcui-col-xxl-pull-6{right:25%}.bcui-col-xxl-offset-6{margin-left:25%}.bcui-col-xxl-order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.bcui-col-xxl-5{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:20.83333333%}.bcui-col-xxl-push-5{left:20.83333333%}.bcui-col-xxl-pull-5{right:20.83333333%}.bcui-col-xxl-offset-5{margin-left:20.83333333%}.bcui-col-xxl-order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.bcui-col-xxl-4{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:16.66666667%}.bcui-col-xxl-push-4{left:16.66666667%}.bcui-col-xxl-pull-4{right:16.66666667%}.bcui-col-xxl-offset-4{margin-left:16.66666667%}.bcui-col-xxl-order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.bcui-col-xxl-3{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:12.5%}.bcui-col-xxl-push-3{left:12.5%}.bcui-col-xxl-pull-3{right:12.5%}.bcui-col-xxl-offset-3{margin-left:12.5%}.bcui-col-xxl-order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.bcui-col-xxl-2{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:8.33333333%}.bcui-col-xxl-push-2{left:8.33333333%}.bcui-col-xxl-pull-2{right:8.33333333%}.bcui-col-xxl-offset-2{margin-left:8.33333333%}.bcui-col-xxl-order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.bcui-col-xxl-1{display:block;-webkit-box-sizing:border-box;box-sizing:border-box;width:4.16666667%}.bcui-col-xxl-push-1{left:4.16666667%}.bcui-col-xxl-pull-1{right:4.16666667%}.bcui-col-xxl-offset-1{margin-left:4.16666667%}.bcui-col-xxl-order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.bcui-col-xxl-0{display:none}.bcui-col-push-0{left:auto}.bcui-col-pull-0{right:auto}.bcui-col-xxl-push-0{left:auto}.bcui-col-xxl-pull-0{right:auto}.bcui-col-xxl-offset-0{margin-left:0}.bcui-col-xxl-order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}}.bcui-alert{width:100%;padding:20px;border:1px solid #fff;border-radius:4px}.bcui-alert--info{border-color:#2db7f5;background-color:#c0e9fc}.bcui-alert--info .bcui-alert__icon{color:#2db7f5}.bcui-alert--success{border-color:#09d274;background-color:#b5f2d5}.bcui-alert--success .bcui-alert__icon{color:#09d274}.bcui-alert--warning{border-color:#ffb437;background-color:#ffe9c3}.bcui-alert--warning .bcui-alert__icon{color:#ffb437}.bcui-alert--error{border-color:#fe4f27;background-color:#ffcabe}.bcui-alert--error .bcui-alert__icon{color:#fe4f27}.bcui-alert--with-icon{padding:8px 48px 8px 38px;position:relative}.bcui-alert--with-description{position:relative;border-radius:6px;margin-bottom:10px;color:#495060;line-height:1.5}.bcui-alert--with-description.bcui-alert--with-icon{padding:16px 16px 16px 69px}.bcui-alert--with-description .bcui-alert__message{font-size:14px;color:#1c2438;display:block}.bcui-alert--with-description .bcui-alert__description{display:block}.bcui-alert--with-description .bcui-alert__icon{top:50%;left:24px;margin-top:-21px;font-size:28px}.bcui-alert__icon{font-size:14px;top:8px;left:16px;position:absolute}.bcui-alert__description{font-size:12px;color:#495060;line-height:21px;display:none;text-align:justify}.bcui-modal{width:auto;margin:0 auto;position:relative;outline:0;top:100px}.bcui-modal-hidden{display:none!important}.bcui-modal-wrap{position:fixed;overflow:auto;top:0;right:0;bottom:0;left:0;z-index:1000;-webkit-overflow-scrolling:touch;outline:0}.bcui-modal-wrap *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.bcui-modal-mask{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(55,55,55,.6);height:100%;z-index:1000}.bcui-modal-mask-hidden{display:none}.bcui-modal-content{position:relative;background-color:#fff;border:0;border-radius:3px;background-clip:padding-box}.bcui-modal-header{border-bottom:1px solid #e3e8ee;padding:14px 16px;line-height:1}.bcui-modal-header-inner,.bcui-modal-header p{display:inline-block;width:100%;height:20px;line-height:20px;font-size:14px;color:#464c5b;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bcui-modal-close{font-size:12px;position:absolute;right:16px;top:16px;overflow:hidden;cursor:pointer}.bcui-modal-close .bcui-icon-ios-close-empty{font-size:31px;color:#999;transition:color .2s ease;position:relative;top:1px}.bcui-modal-close .bcui-icon-ios-close-empty:hover{color:#444}.bcui-modal-body{padding:16px;font-size:12px;line-height:1.5}.bcui-modal-footer{border-top:1px solid #e3e8ee;padding:12px 18px;text-align:right}.bcui-modal-footer button+button{margin-left:8px;margin-bottom:0}@media (max-width:768px){.bcui-modal{width:auto!important;margin:10px}.vertical-center-modal .bcui-modal{-ms-flex:1;flex:1}}.bcui-modal-confirm{padding:0 4px}.bcui-modal-confirm-head-title{display:inline-block;font-size:14px;color:#464c5b;font-weight:700}.bcui-modal-confirm-body{margin-top:6px;padding-left:48px;padding-top:18px;font-size:12px;color:#657180;position:relative}.bcui-modal-confirm-body-icon{font-size:36px;position:absolute;top:0;left:0}.bcui-modal-confirm-body-icon-info{color:#39f}.bcui-modal-confirm-body-icon-success{color:#0c6}.bcui-modal-confirm-body-icon-warning{color:#f90}.bcui-modal-confirm-body-icon-error{color:#f30}.bcui-modal-confirm-body-icon-confirm{color:#f90}.bcui-modal-confirm-footer{margin-top:40px;text-align:right}.bcui-modal-confirm-footer button+button{margin-left:8px;margin-bottom:0}.bcui-tab-header{border-bottom:1px solid #d4d4d4;padding:0;position:relative}.bcui-tab-navbar{overflow:hidden;margin-bottom:-1px;position:relative}.bcui-tab-navbar.scrolled{padding:0 20px}.bcui-tab-navbar__inner{white-space:nowrap;position:relative;font-size:0;float:left;transition:transform .3s;-webkit-text-just-none:true}.bcui-tab-navbar__item{display:inline-block;height:38px;padding:0 0 10px;margin-right:32px;font-size:14px;line-height:38px;cursor:pointer;transition:all .3s ease-in-out 0s}.bcui-tab-navbar__item--active{color:#2d77ee}.bcui-tab-navbar__item--disabled{cursor:not-allowed;color:#ccc}.bcui-tab-header{border-bottom:2px solid #f5f5f5}.bcui-tab-navbar{margin-bottom:-2px}.bcui-tab-navbar--card .bcui-tab-navbar__item{border:1px solid #d7dde4;margin-right:6px;border-radius:4px 4px 0 0;background:#f9f9f9;padding:0 16px}.bcui-tab-navbar--card .bcui-tab-navbar__item--active{border-bottom:1px solid #fff;background:#fff;color:#2d77ee}.bcui-tab-navbar--card .bcui-tab-navbar__item--disabled{cursor:not-allowed;color:#ccc}.bcui-tab-activebar{display:none;height:3px;background:#2d77ee;position:absolute;left:0;bottom:0}.bcui-tab-activebar--animated{transition:transform .3s ease-in-out 0s}.bcui-tab--small .bcui-tab-navbar__item{margin:0}.bcui-tab-navbar-scroll{overflow:hidden}.bcui-tab-navbar-next,.bcui-tab-navbar-prev{position:absolute;cursor:pointer;line-height:38px;font-size:12px;color:#8391a5}.bcui-tab-navbar-prev{left:0}.bcui-tab-navbar-next{right:0}.bcui-tag{display:inline-block;height:22px;line-height:22px;margin:2px 4px 2px 0;padding:0 8px;border:1px solid #e3e8ee;border-radius:3px;font-size:12px;vertical-align:middle;opacity:1;overflow:hidden;cursor:pointer}.bcui-tag:hover{opacity:.85}.bcui-tag--primary{background:#2d77ee;border-color:#2d77ee;color:#fff}.bcui-tag i{font-size:10px}.bcui-tag-dot{height:32px;line-height:32px;border:1px solid #e3e8ee;color:#657180;background:#fff;padding:0 12px}.bcui-tag-dot__inner{display:inline-block;width:12px;height:12px;margin-right:8px;border-radius:50%;background:#e3e8ee;position:relative;top:1px}.bcui-tag-border{height:24px;line-height:24px;border:1px solid #e3e8ee;color:#657180;background:#fff;position:relative}.bcui-treenode{margin:0;padding:0;cursor:pointer;font-size:1.3rem}.bcui-treenode li{list-style-type:none}.bcui-treenode .bold{font-weight:600}.bcui-treenode-arrow{display:inline-block;transition:all .2s ease-in-out}.bcui-treenode-arrow--open{transform:rotate(90deg)}.bcui-treenode-name:hover{text-decoration:underline}.bcui-treenode>.bcui-treenode{margin:0;padding-left:16px}.bcui-tooltip,.bcui-tooltip-rel{display:inline-block}.bcui-tooltip-rel{position:relative}.bcui-tooltip-popper{display:block;visibility:visible;font-size:12px;line-height:1.5;position:absolute;z-index:1060}.bcui-tooltip-popper[x-placement^=top]{padding:5px 0 8px}.bcui-tooltip-popper[x-placement^=right]{padding:0 5px 0 8px}.bcui-tooltip-popper[x-placement^=bottom]{padding:8px 0 5px}.bcui-tooltip-popper[x-placement^=left]{padding:0 8px 0 5px}.bcui-tooltip-popper[x-placement^=top] .bcui-tooltip-arrow{bottom:3px;border-width:5px 5px 0;border-top-color:rgba(24,33,48,.85)}.bcui-tooltip-popper[x-placement=top] .bcui-tooltip-arrow{left:50%;margin-left:-5px}.bcui-tooltip-popper[x-placement=top-start] .bcui-tooltip-arrow{left:16px}.bcui-tooltip-popper[x-placement=top-end] .bcui-tooltip-arrow{right:16px}.bcui-tooltip-popper[x-placement^=right] .bcui-tooltip-arrow{left:3px;border-width:5px 5px 5px 0;border-right-color:rgba(24,33,48,.85)}.bcui-tooltip-popper[x-placement=right] .bcui-tooltip-arrow{top:50%;margin-top:-5px}.bcui-tooltip-popper[x-placement=right-start] .bcui-tooltip-arrow{top:8px}.bcui-tooltip-popper[x-placement=right-end] .bcui-tooltip-arrow{bottom:8px}.bcui-tooltip-popper[x-placement^=left] .bcui-tooltip-arrow{right:3px;border-width:5px 0 5px 5px;border-left-color:rgba(24,33,48,.85)}.bcui-tooltip-popper[x-placement=left] .bcui-tooltip-arrow{top:50%;margin-top:-5px}.bcui-tooltip-popper[x-placement=left-start] .bcui-tooltip-arrow{top:8px}.bcui-tooltip-popper[x-placement=left-end] .bcui-tooltip-arrow{bottom:8px}.bcui-tooltip-popper[x-placement^=bottom] .bcui-tooltip-arrow{top:3px;border-width:0 5px 5px;border-bottom-color:rgba(24,33,48,.85)}.bcui-tooltip-popper[x-placement=bottom] .bcui-tooltip-arrow{left:50%;margin-left:-5px}.bcui-tooltip-popper[x-placement=bottom-start] .bcui-tooltip-arrow{left:16px}.bcui-tooltip-popper[x-placement=bottom-end] .bcui-tooltip-arrow{right:16px}.bcui-tooltip-inner{width:max-content;max-width:250px;min-height:34px;padding:8px 12px;color:#fff;text-align:left;text-decoration:none;background-color:rgba(24,33,48,.85);border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);white-space:pre-wrap}.bcui-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.menu-item{display:block;outline:0;height:48px;line-height:48px;padding:0 32px;cursor:pointer;list-style-type:none;transition:background .2s ease-in-out}.menu-item:hover{color:#fff;background:#265bb0}.menu-item--horizontal{float:left;font-size:18px;color:#fff}.menu-item--horizontal,.menu-item--vertical{position:relative;cursor:pointer;z-index:3;transition:background .2s ease-in-out}.menu-item--vertical{font-size:14px;padding:14px 24px}.menu-active{background:#182130}.bcui-menu{display:block;margin:0;padding:0;outline:0;list-style:none;color:#dbdee3;font-size:14px;position:relative}.bcui-menu--horizontal{height:60px;line-height:60px}.bcui-menu-item{display:block;outline:0;height:48px;line-height:48px;padding:0 32px;cursor:pointer;list-style-type:none;transition:background .2s ease-in-out}.bcui-menu-item:hover{color:#fff;background:#265bb0}.bcui-menu-submenu .bcui-menu-item{padding-left:56px}.bcui-menu-submenu__title{height:48px;line-height:48px;padding:0 32px;cursor:pointer}.bcui-menu-submenu--opened{background:#182130}.bcui-menu-submenu__expand-icon{font-size:14px}.bcui-menu-item--active{color:#fff;background:rgba(45,119,238,.5)}.bcui-page{margin:14px 0;padding:0}.bcui-page:after{content:"";display:block;height:0;clear:both;overflow:hidden;visibility:hidden}.bcui-page-item{float:left;min-width:34px;height:34px;line-height:34px;text-align:center;list-style:none;background-color:#fff;user-select:none;cursor:pointer;font-family:Arial;border:1px solid #d7dde4;border-right:0}.bcui-page-item:last-child{border-right:1px solid #d7dde4}.bcui-page-item a{margin:0 6px;text-decoration:none;color:#657180}.bcui-page-item:hover a{color:#2d77ee}.bcui-page-item-active{background-color:#2d77ee;border-color:#2d77ee}.bcui-page-item-active+.bcui-page-item,.bcui-page-item-active+.bcui-page-next{border-left:0}.bcui-page-item-active:hover a,.bcui-page-item-active a{color:#fff}.bcui-page-item-jump-next:after,.bcui-page-item-jump-prev:after{content:"\2022\2022\2022";display:block;letter-spacing:1px;color:#ccc;text-align:center}.bcui-page-item-jump-next:hover:after,.bcui-page-item-jump-next i,.bcui-page-item-jump-prev:hover:after,.bcui-page-item-jump-prev i{display:none}.bcui-page-item-jump-next:hover i,.bcui-page-item-jump-prev:hover i{display:inline}.bcui-page-item-jump-next,.bcui-page-item-jump-prev,.bcui-page-next,.bcui-page-prev{float:left;min-width:34px;height:34px;line-height:34px;list-style:none;text-align:center;margin-right:-1px;cursor:pointer;color:#666;font-family:Arial;border:1px solid #d7dde4}.bcui-page-next,.bcui-page-prev{background-color:#fff}.bcui-page-next a,.bcui-page-prev a{color:#666;font-size:14px}.bcui-page-next a i:after,.bcui-page-prev a i:after{font-size:10px}.bcui-page-next:hover a,.bcui-page-prev:hover a{color:#2d77ee}.bcui-page-disabled{cursor:not-allowed}.bcui-page-disabled a{color:#ccc}.bcui-page-disabled:hover a{color:#ccc;cursor:not-allowed}.bcui-page-options{float:left;margin-left:15px}.bcui-page-options-sizer{float:left}.bcui-page-total{float:left;height:34px;line-height:34px;margin-right:10px}.bcui-page-simple .bcui-page-next,.bcui-page-simple .bcui-page-prev{margin:0;border:0;height:24px;line-height:24px;font-size:18px}.bcui-page-simple .bcui-page-simple-pager{float:left;margin-right:8px}.bcui-page-simple .bcui-page-simple-pager input{width:30px;height:24px;margin:0 8px;padding:5px 8px;text-align:center;box-sizing:border-box;background-color:#fff;outline:none;border:1px solid #d7dde4;border-radius:4px}.bcui-page-simple .bcui-page-simple-pager input:hover{border-color:#2d77ee}.bcui-page-simple .bcui-page-simple-pager span{padding:0 8px 0 2px}.bcui-page.mini .bcui-page-total{height:24px;line-height:24px}.bcui-page.mini .bcui-page-item{border:0;margin:0;min-width:24px;height:24px;line-height:24px;border-radius:3px}.bcui-page.mini .bcui-page-next,.bcui-page.mini .bcui-page-prev{margin:0;min-width:24px;height:24px;line-height:24px;border:0}.bcui-page.mini .bcui-page-next a i:after,.bcui-page.mini .bcui-page-prev a i:after{height:24px;line-height:24px}.bcui-page.mini .bcui-page-item-jump-next,.bcui-page.mini .bcui-page-item-jump-prev{height:24px;line-height:24px;border:none;margin-right:0}.bcui-page.mini .bcui-page-options{margin-left:8px}.bcui-page.mini .bcui-page-options-elevator{height:24px;line-height:24px}.bcui-page.mini .bcui-page-options-elevator input{padding:1px 7px;height:24px;border-radius:3px;width:44px}.bcui-page-options-elevator{float:left}.bcui-page-options-elevator input{border:1px solid #d1dbe5;border-radius:2px;line-height:18px;padding:4px 2px;width:30px;text-align:center;margin:0 6px;box-sizing:border-box}.bcui-page-options-elevator input:focus{outline:none;border-color:#2d77ee}.bcui-page-item-options{float:left;list-style:none}.bcui-page-options-sizer .bcui-select,.bcui-page-options-sizer .bcui-select__inner,.bcui-page-options-sizer .bcui-select__selected-value{height:34px}.bcui-page-options-sizer .bcui-select__inner{border-radius:0}.bcui-page-options-sizer .bcui-select__selected-value{padding:6px 32px 6px 12px}.bcui-popover{display:inline-block}.bcui-popover__inner{min-width:150px;max-height:none;padding:0;margin:0;overflow:initial;border-radius:0;box-shadow:none;background-color:transparent;box-sizing:border-box;position:absolute;z-index:900}.bcui-popover__inner-content{background-color:#fff;box-sizing:border-box;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.bcui-popover__title{padding:8px 12px 6px;border-bottom:1px solid #eaeaea;font-size:14px}.bcui-popover__content{padding:8px 12px 10px}.bcui-popover__arrow{width:8px;height:8px;border-color:transparent;border-style:solid;background:#fff;transform:rotate(45deg);position:absolute}.bcui-popover__inner[x-placement^=top]{padding-bottom:10px}.bcui-popover__inner[x-placement^=top] .bcui-popover__arrow{bottom:6px;box-shadow:3px 3px 7px rgba(0,0,0,.09)}.bcui-popover__inner[x-placement=top] .bcui-popover__arrow{left:50%;margin-left:-5px}.bcui-popover__inner[x-placement=top-start] .bcui-popover__arrow{left:16px}.bcui-popover__inner[x-placement=top-end] .bcui-popover__arrow{right:16px}.bcui-popover__inner[x-placement^=right]{padding-left:10px}.bcui-popover__inner[x-placement^=right] .bcui-popover__arrow{left:6px;box-shadow:-3px 3px 7px rgba(0,0,0,.09)}.bcui-popover__inner[x-placement=right] .bcui-popover__arrow{top:50%;margin-top:-5px}.bcui-popover__inner[x-placement=right-start] .bcui-popover__arrow{top:10px}.bcui-popover__inner[x-placement=right-end] .bcui-popover__arrow{bottom:10px}.bcui-popover__inner[x-placement^=bottom]{padding-top:10px}.bcui-popover__inner[x-placement^=bottom] .bcui-popover__arrow{top:6px;box-shadow:-1px -1px 4px rgba(0,0,0,.09)}.bcui-popover__inner[x-placement=bottom] .bcui-popover__arrow{left:50%;margin-left:-5px}.bcui-popover__inner[x-placement=bottom-start] .bcui-popover__arrow{left:10px}.bcui-popover__inner[x-placement=bottom-end] .bcui-popover__arrow{right:10px}.bcui-popover__inner[x-placement^=left]{padding-right:10px}.bcui-popover__inner[x-placement^=left] .bcui-popover__arrow{right:6px;box-shadow:3px -3px 7px rgba(0,0,0,.07)}.bcui-popover__inner[x-placement=left] .bcui-popover__arrow{top:50%;margin-top:-5px}.bcui-popover__inner[x-placement=left-start] .bcui-popover__arrow{top:10px}.bcui-popover__inner[x-placement=left-end] .bcui-popover__arrow{bottom:10px}.bcui-progress-bar{width:100%;height:4px;border-radius:4px}.bcui-progress-bar__inner{height:100%;border-radius:4px;background:#f0f0f0}.bcui-progress-bar__bar{height:100%;border-radius:4px;background:#2d77ee}.bcui-progress-circle{position:relative}.bcui-progress-circle__inner{width:100%;height:100%;text-align:center;margin:0;position:absolute;top:50%;left:0;transform:translateY(-50%);display:flex;flex-direction:column;align-items:center;justify-content:center}.bcui-radio-group{display:inline-block;font-size:0;line-height:1;vertical-align:middle}.bcui-radio-group--vertical .bcui-radio{display:block;height:30px;line-height:30px}.bcui-radio{font-size:12px;display:inline-block;white-space:nowrap;cursor:pointer}.bcui-radio+.bcui-radio{margin-left:16px}.bcui-radio--disabled{cursor:not-allowed}.bcui-radio__input{line-height:1;vertical-align:middle}.bcui-radio__inner,.bcui-radio__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;position:relative}.bcui-radio__inner{width:16px;height:16px;border:1px solid #c3c3c3;border-radius:100%;background-color:#fff}.bcui-radio__inner:hover .bcui-radio__inner{border-color:#bcbcbc}.bcui-radio__inner:after{position:absolute;width:6px;height:6px;left:50%;top:50%;border-radius:6px;display:table;border-top:0;border-left:0;content:" ";background-color:#fff;opacity:0;transition:all .2s ease-in-out;transform:scale(0)}.bcui-radio__original-input{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;opacity:0;cursor:pointer}.bcui-radio__label{font-size:14px;line-height:1;display:inline-block;vertical-align:middle}.bcui-radio--checked .bcui-radio__inner,.bcui-radio.is-checked .bcui-radio__inner{border-color:#2d77ee;background-color:#2d77ee}.bcui-radio--checked .bcui-radio__inner:after,.bcui-radio.is-checked .bcui-radio__inner:after{opacity:1;transform:translate(-50%,-50%) scale(1);transition:all .2s ease-in-out}.bcui-radio--checked:hover .bcui-radio__inner,.bcui-radio.is-checked:hover .bcui-radio__inner{border-color:#2d77ee}.bcui-radio--disabled,.bcui-radio--disabled .bcui-radio__input,.bcui-radio--disabled .bcui-radio__original-input,.bcui-radio.is-disabled,.bcui-radio.is-disabled .bcui-radio__input,.bcui-radio.is-disabled .bcui-radio__original-input{cursor:not-allowed}.bcui-radio--disabled:hover .bcui-radio__inner,.bcui-radio.is-disabled:hover .bcui-radio__inner{border-color:#d7dde4}.bcui-radio--disabled .bcui-radio__inner,.bcui-radio.is-disabled .bcui-radio__inner{border-color:#d7dde4;background-color:#f3f3f3;cursor:not-allowed}.bcui-radio--disabled .bcui-radio__inner:after,.bcui-radio.is-disabled .bcui-radio__inner:after{background-color:#ccc}.bcui-radio--disabled .bcui-radio--disabled+span,.bcui-radio.is-disabled .bcui-radio--disabled+span{color:#ccc}.bcui-radio-group-button{font-size:0;-webkit-text-size-adjust:none}.bcui-radio-group-button .bcui-radio{display:inline-block;height:36px;line-height:34px;margin:0;padding:0 16px;color:#495060;transition:all .2s ease-in-out;cursor:pointer;border:1px solid #d7dde4;border-left:0;background:#fff;position:relative;font-size:0}.bcui-radio-group-button .bcui-radio>span{margin-left:0}.bcui-radio-group-button .bcui-radio:before{content:"";position:absolute;width:1px;height:100%;left:-1px;background:#d7dde4;visibility:hidden;transition:all .2s ease-in-out}.bcui-radio-group-button .bcui-radio:first-child{border-radius:4px 0 0 4px;border-left:1px solid #d7dde4}.bcui-radio-group-button .bcui-radio:first-child:before{display:none}.bcui-radio-group-button .bcui-radio:last-child{border-radius:0 4px 4px 0}.bcui-radio-group-button .bcui-radio:first-child:last-child{border-radius:4px}.bcui-radio-group-button .bcui-radio:hover{position:relative;color:#2d77ee}.bcui-radio-group-button .bcui-radio .bcui-radio__inner,.bcui-radio-group-button .bcui-radio input{opacity:0;width:0;height:0}.bcui-radio-group-button .bcui-radio--checked,.bcui-radio-group-button .bcui-radio.is-checked{background:#fff;border-color:#2d77ee;color:#2d77ee;box-shadow:-1px 0 0 0 #2d77ee}.bcui-radio-group-button .bcui-radio--checked:first-child,.bcui-radio-group-button .bcui-radio.is-checked:first-child{border-color:#2d77ee;box-shadow:none!important}.bcui-radio-group-button .bcui-radio--checked:hover,.bcui-radio-group-button .bcui-radio.is-checked:hover{border-color:#5792f1;box-shadow:-1px 0 0 0 #5792f1;color:#5792f1}.bcui-radio-group-button .bcui-radio--checked:active,.bcui-radio-group-button .bcui-radio.is-checked:active{border-color:#2b71e2;box-shadow:-1px 0 0 0 #2b71e2;color:#2b71e2}.bcui-radio-group-button .bcui-radio--disabled,.bcui-radio-group-button .bcui-radio.is-disabled{border-color:#d7dde4;background-color:#f7f7f7;cursor:not-allowed;color:#ccc}.bcui-radio-group-button .bcui-radio--disabled:first-child,.bcui-radio-group-button .bcui-radio--disabled:hover,.bcui-radio-group-button .bcui-radio.is-disabled:first-child,.bcui-radio-group-button .bcui-radio.is-disabled:hover{border-color:#d7dde4;background-color:#f7f7f7;color:#ccc}.bcui-radio-group-button .bcui-radio--disabled:first-child,.bcui-radio-group-button .bcui-radio.is-disabled:first-child{border-left-color:#d7dde4}.bcui-radio-group-button .bcui-radio--disabled.bcui-radio--checked{color:#fff;background-color:#e6e6e6;border-color:#d7dde4;box-shadow:none!important}.bcui-radio-group-button .bcui-radio__inner{border:none}.bcui-radio-group-button .bcui-radio__inner:after{display:none}.bcui-radio-group-button.bcui-radio-group--large .bcui-radio{height:40px;line-height:38px;font-size:14px}.bcui-radio-group-button.bcui-radio-group--small .bcui-radio{height:24px;line-height:22px;padding:0 12px;font-size:12px}.bcui-radio-group-button.bcui-radio-group--small .bcui-radio:first-child{border-radius:3px 0 0 3px}.bcui-radio-group-button.bcui-radio-group--small .bcui-radio:last-child{border-radius:0 3px 3px 0}.bcui-message-container{font-size:12px;position:fixed;z-index:1010;width:100%;top:16px;left:0}.bcui-message{padding:8px;text-align:center;transition:height .3s ease-in-out,padding .3s ease-in-out}.bcui-message__content{display:inline-block;pointer-events:all;padding:8px 16px;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);background:#fff;position:relative}.bcui-message-close{position:absolute;right:4px;top:10px;color:#999;outline:0}.bcui-message-close i.bcui-icon{font-size:10px}.bcui-message-close i.bcui-icon:hover{cursor:pointer}.bcui-message__success .bcui-icon{color:#0c6}.bcui-message__error .bcui-icon{color:#f30}.bcui-message__warning .bcui-icon{color:#f90}.bcui-message__info .bcui-icon,.bcui-message__loading .bcui-icon{color:#39f}.bcui-message .bcui-icon{margin-right:8px;font-size:14px;top:1px;position:relative}.bcui-message--closable .bcui-message__content{padding-right:40px}.bcui-notice-container{width:335px;margin-right:24px;position:fixed;z-index:1010}.bcui-notice{margin-bottom:10px;padding:16px;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2);background:#fff;line-height:1;position:relative;overflow:hidden}.bcui-notice-close{position:absolute;right:16px;top:15px;color:#999;outline:0;cursor:pointer}.bcui-notice-close i{font-size:14px;color:#999;transition:color .2s ease;position:relative;top:-3px}.bcui-notice-close i:hover{color:#444}.bcui-notice--with-desc .bcui-notice-close{top:11px}.bcui-notice-title{font-size:14px;color:#464c5b;padding-right:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bcui-notice--with-desc .bcui-notice__title{margin-bottom:8px}.bcui-notice--with-desc.bcui-notice--with-icon .bcui-notice__title{margin-left:51px}.bcui-notice__desc{font-size:12px;color:#999;word-break:break-all;line-height:1.5}.bcui-notice--with-desc.bcui-notice--with-icon .bcui-notice__desc{margin-left:51px}.bcui-notice--with-icon .bcui-notice__title{margin-left:26px}.bcui-notice__icon{position:absolute;left:20px;margin-top:-1px;font-size:16px}.bcui-notice__icon-success{color:#0c6}.bcui-notice__icon-info{color:#39f}.bcui-notice__icon-warning{color:#f90}.bcui-notice__icon-error{color:#f30}.bcui-notice--with-desc .bcui-notice__icon{font-size:36px}.bcui-notice__custom-content:after{content:"";display:block;width:4px;position:absolute;top:0;bottom:0;left:0}.bcui-notice--with-info:after,.bcui-notice--with-normal:after{background:#39f}.bcui-notice--with-success:after{background:#0c6}.bcui-notice--with-warning:after{background:#f90}.bcui-notice--with-error:after{background:#f30}body{height:100%}.bc-form-search .bcui-form-item__content{display:inline-block}.pull-right{float:right}.breadcrumb-container{padding:15px 0}.block{padding:28px 0}.block-header{padding:0 0 16px}.block-header__title{font-size:2.4rem;line-height:32px;font-weight:600}.block-header__title.overview{font-size:2rem;color:#333;line-height:28px;margin-top:-4px}.clearfix:after{content:"";display:block;visibility:visible;width:0;height:0;font-size:0;clear:both}a:hover{text-decoration:underline}a{text-decoration:none}.bcui-table thead{font-size:12px}.bcui-table tbody{font-size:14px;color:#666}.bcui-table.bcui-table--dark thead th{background:#f2f3f5}.bcui-table.bcui-table--circular table{border-top:none!important}.bcui-table.bcui-table--circular thead{border-radius:4px 0 0 4px}.bcui-table.bcui-table--circular thead>tr>th{border-top:1px solid #dbdee3;border-bottom:1px solid #dbdee3}.bcui-table.bcui-table--circular thead>tr>th:last-child{border-top-right-radius:4px;border-right:1px solid #dbdee3}.bcui-table.bcui-table--circular thead>tr>th:first-child{border-top-left-radius:4px;border-left:1px solid #dbdee3}.bcui-table.bcui-table--circular tbody{border:1px solid #dbdee3}.bcui-table.bcui-table--circular tbody>tr>td:last-child{border-right:1px solid #dbdee3}.bcui-table.bcui-table--circular tbody>tr>td:first-child{border-left:1px solid #dbdee3}.bcui-table.bcui-table--circular tbody>tr:last-child>td:first-child{border-bottom-left-radius:4px}.bcui-table.bcui-table--circular tbody>tr:last-child>td:last-child{border-bottom-right-radius:4px}.bcui-table-column-sorter{font-size:10px;margin-left:2px;cursor:pointer;color:#999}.bcui-table-column-sorter.sort-asc,.bcui-table-column-sorter.sort-desc{color:#333}.alert-message{line-height:20px;text-align:left;color:#a5a3a3;margin-bottom:20px}.actions-menu-trigger{display:inline-block;vertical-align:top;position:relative}.actions-menu-trigger .actions-menu{width:110px;border:1px solid #e8e8e8;background:#fff;box-shadow:0 0 6px -3px rgba(0,0,0,.4);position:absolute;right:-4px;top:26px;z-index:1}.actions-menu-trigger .actions-menu-item{display:block;padding:0 16px;height:30px;line-height:30px;border-bottom:1px solid #f3f3f3;cursor:pointer;opacity:.8}.actions-menu-trigger .actions-menu-item:hover{background:#f5f5f5;opacity:1}.state--enable{color:#0cb86e}.state--disable{color:#fe4f27}.bcui-table-toolbar .bcui-button{margin-right:8px}.bcui-table-toolbar .bcui-button-group .bcui-button{margin-right:0}.bcui-table-toolbar .bcui-button-group .bcui-button:last-child{margin-right:8px}.bc-codemirror{font-size:12px;line-height:20px}.bcui-base-dropdown{width:100%}.bcui-page-item,.bcui-page-options-elevator,.bcui-page-total{font-size:14px}.disable-text-link{color:#c3cbd6;cursor:not-allowed;pointer-events:none}.detail-block-header{height:62px}.detail-block-nav{padding:12px 0 16px;font-size:14px;color:#999}.detail-block-nav__back{float:left;display:flex;align-items:center;cursor:pointer}.detail-block-nav__back .icon{margin-right:6px;margin-left:-3px}.detail-block-nav__back span{vertical-align:middle;display:inline-block;height:20px;line-height:22px}.detail-block-nav__back:hover{color:#333}.detail-block-body .bcui-tab-content{padding:0}.detail-info{float:left}.detail-title{font-size:0;display:flex;align-items:baseline}.detail-title__value{float:left;font-size:24px;font-weight:700;color:#333;margin-right:6px;line-height:33px;height:33px}.detail-title .bcui-popover-rel .trigger-ref{display:inline-block;margin-top:-11px}.detail-title .detail-popper-editor{display:none}.detail-title:hover .detail-popper-editor{display:block!important}.detail-meta{font-size:0;margin-top:9px;display:flex}.detail-meta .status,.detail-meta .type{display:inline-block;vertical-align:top;margin-right:16px;height:20px;line-height:20px;font-size:14px}.detail-meta .type{font-weight:bolder;color:#666}.detail-meta .desc{display:flex;line-height:20px;height:20px;font-size:14px;color:#999}.detail-meta .desc .detail-popper-editor{display:none;margin-top:3px;margin-left:4px}.detail-meta .desc:hover .detail-popper-editor{display:block!important}.detail-functions{float:right}.detail-info-prop{margin-top:24px}.detail-info-prop .title{margin:0 0 16px;font-size:14px;font-weight:800;color:#333}.detail-info-prop .title__text{height:20px;line-height:20px;vertical-align:middle}.detail-info-prop .title__icon{vertical-align:middle;color:#d4d4d4}.detail-info-prop .title__icon:hover{color:#333}.detail-info-prop .prop-item{margin-bottom:12px;display:flex}.detail-info-prop .prop-item .prop-key,.detail-info-prop .prop-item .prop-value{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;color:#333}.detail-info-prop .prop-item .prop-value .icon-copy{display:none;cursor:pointer;margin-left:6px;margin-top:-3px}.detail-info-prop .prop-item .prop-value:hover .icon-copy{display:inline-block;color:#2d77ee}.detail-info-prop .prop-item .prop-key{width:120px;flex:0 0 auto}.modal-text{font-size:14px;color:#333}.modal-text.subtitle{margin-bottom:8px;font-weight:500;line-height:20px}.modal-text.description{margin-bottom:16px;font-size:12px;color:#666}.modal-rect{display:flex;flex-wrap:wrap;width:100%;padding:12px 16px;margin-bottom:20px;background:#fbfbfc;border:1px solid #f2f3f5;border-radius:4px}.modal-rect__item{flex:0 0 auto;padding:0 8px;margin:8px 0;height:20px;line-height:20px;color:#444;font-size:14px;font-weight:300}.modal-rect__item .icon-cloud{vertical-align:middle;margin-right:8px}.modal-rect__item .bcui-tooltip{max-width:100%}.modal-rect__item .bcui-tooltip-rel{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default}.bcui-modal-header{padding:32px 32px 24px;border:none}.bcui-modal-header-inner{color:#333;font-size:24px;font-weight:600}.bcui-modal-header-inner,.bcui-modal-header p{line-height:32px;height:32px}.bcui-modal-body{padding:0 32px}.bcui-modal-footer{padding:12px 32px 32px;border:none}.bcui-modal-close{color:#d6d9df;font-size:14px;font-weight:600;right:40px;top:40px;transition:all .3s}.bcui-modal-close:hover{color:#333}.bcui-form-item{margin-bottom:20px}.bcui-form-item__label{display:inline-block;padding:0 0 4px;font-size:14px;color:#333;position:relative}.bcui-form-item--required .bcui-form-item__label:before{content:"";display:none}.bcui-form-item--required .bcui-form-item__label:after{content:"*";display:inline-block;margin-right:4px;line-height:1;font-size:14px;font-weight:300;color:#2d77ee;position:absolute;top:0;right:-12px}.bcui-form-item-tooltip{position:absolute;top:0;right:-26px;color:#999}.bcui-form-item-tooltip:hover{color:#333}.bc-drawer-header{padding:32px 32px 24px;border:none}.bc-drawer-header__inner{color:#333;font-size:24px;font-weight:600;border:none}.bc-drawer-header__inner,.bc-drawer-header p{line-height:32px;height:32px}.bc-drawer-body{padding:0 60px}.bc-drawer-footer{padding:12px 32px 32px;border:none}.bc-drawer-close{color:#d6d9df;font-size:14px;font-weight:600;right:40px;top:40px;transition:all .3s}.bc-drawer-close:hover{color:#333} \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/index.html b/carrera-console/carrera-boot/src/main/resources/static/index.html new file mode 100644 index 0000000..7397db4 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/index.html @@ -0,0 +1,24 @@ + + + + + + DDMQ Console + + + + + + + +
+ + diff --git a/carrera-console/carrera-boot/src/main/resources/static/index.js b/carrera-console/carrera-boot/src/main/resources/static/index.js new file mode 100644 index 0000000..1579a83 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/index.js @@ -0,0 +1 @@ +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var s in i)("object"==typeof exports?exports:e)[s]=i[s]}}(window,function(){return function(e){function t(t){for(var s,o,r=t[0],c=t[1],l=t[2],d=0,p=[];d1e7?i(new Error("Rate limit can not exceed 1000*10000")):t&&t<1?i(new Error("Rate limit must be greater than 0")):void i()}}],description:[{required:!0,message:"topic desc can not be empty."},{message:"Length must be less than 128 bits",max:128},{validator:function(e,t,i){if(/^\s*$/.test(t))return i(new Error("Cannot enter a null character"));i()}}]}},118:function(e,t){t.createSub={topicId:{required:!0,message:"Please select topic"},groupId:{required:!0,message:"Please select consumer group"},maxTps:[{required:!0,message:"Please input Consume maxTps"},{pattern:/^\d+(\.\d+)?$/,message:"Please input integer or float type"},{validator:function(e,t,i){return t>1e7?i(new Error("MaxTps can not exceed 1000w")):0==t?i(new Error("MaxTps must be greater than 0")):void i()}}],consumeTimeout:[{pattern:/^\d*$/,message:"Please input integer"},{validator:function(e,t,i){return t>72e5?i(new Error("Can not exceed 5 day")):t&&t<1?i(new Error("Must be greater than 1ms")):void i()}}],errorRetryTimes:[{pattern:/-1|^\d+$/,message:"Must be integer and greater than -1"},{validator:function(e,t,i){if(t>1e4)return i(new Error("Can not exceed 10000"));i()}}],retryIntervals:[{max:1024,message:"Can not exceed 1024 bytes"},{pattern:/^((-1|[0-9])+[;]?)*$/,message:"Must be integer and split by ;"}],apiType:{required:!0,message:"Please select Api Level"},msgType:{required:!0,message:"Please select Message type"},enableOrder:{required:!0,message:"Please select Enable sequential consume"},consumeType:{required:!0,message:"Please select Consume type"},orderKey:{required:!0,message:"Please select Basis ordering rules"},enableGroovy:{required:!0,message:"Please select Enable groovyScript"},groovy:{required:!0,message:"Please input GroovyScript"},enableTransit:{required:!0,message:"Please select Enable transit"},httpMethod:{required:!0,message:"Please select HttpMethod"},msgPushType:{required:!0,message:"Please select Message push type"},pushMaxConcurrency:[{required:!0,message:"Please input Push max concurrency"},{pattern:/^\d*$/,message:"Must be integer"},{validator:function(e,t,i){return t>1e5?i(new Error("Can not exceed 100000")):t<1?i(new Error("Must be greater than 1")):void i()}}],queryParams:{required:!0,message:"Please input QueryParams"},bigDataType:{required:!0,message:"Please select Write type"},bigDataConfig:{required:!0,message:"Please input Write config"}}},119:function(e,t){t.createGroup={groupName:[{required:!0,message:"Please input consumer group"},{pattern:/^[A-Za-z0-9_-]*$/,message:"Contain only letters, numbers, underscore(_) and dashes(-)"}]}},144:function(e,t,i){"use strict";var s=i(35);i.n(s).a},148:function(e,t,i){"use strict";var s=i(36);i.n(s).a},149:function(e,t,i){"use strict";var s=i(37);i.n(s).a},150:function(e,t,i){"use strict";var s=i(38);i.n(s).a},151:function(e,t,i){"use strict";var s=i(39);i.n(s).a},152:function(e,t,i){"use strict";var s=i(40);i.n(s).a},153:function(e,t,i){"use strict";var s=i(41);i.n(s).a},154:function(e,t,i){"use strict";var s=i(42);i.n(s).a},155:function(e,t,i){"use strict";var s=i(43);i.n(s).a},156:function(e,t,i){"use strict";var s=i(44);i.n(s).a},157:function(e,t,i){"use strict";var s=i(45);i.n(s).a},158:function(e,t,i){"use strict";var s=i(46);i.n(s).a},159:function(e,t,i){"use strict";var s=i(47);i.n(s).a},160:function(e,t,i){"use strict";var s=i(48);i.n(s).a},161:function(e,t,i){"use strict";var s=i(49);i.n(s).a},162:function(e,t,i){"use strict";var s=i(50);i.n(s).a},163:function(e,t,i){"use strict";var s=i(51);i.n(s).a},164:function(e,t,i){"use strict";var s=i(52);i.n(s).a},165:function(e,t,i){"use strict";var s=i(53);i.n(s).a},167:function(e,t,i){"use strict";var s=i(54);i.n(s).a},168:function(e,t,i){"use strict";var s=i(55);i.n(s).a},201:function(e,t,i){"use strict";var s=i(56);i.n(s).a},202:function(e,t,i){"use strict";var s=i(57);i.n(s).a},203:function(e,t,i){"use strict";var s=i(58);i.n(s).a},204:function(e,t,i){"use strict";var s=i(59);i.n(s).a},205:function(e,t,i){"use strict";var s=i(60);i.n(s).a},206:function(e,t,i){},207:function(e,t,i){"use strict";var s=i(61);i.n(s).a},208:function(e,t,i){"use strict";var s=i(62);i.n(s).a},209:function(e,t,i){"use strict";var s=i(63);i.n(s).a},210:function(e,t,i){"use strict";var s=i(64);i.n(s).a},211:function(e,t,i){"use strict";var s=i(65);i.n(s).a},212:function(e,t,i){},213:function(e,t,i){"use strict";var s=i(66);i.n(s).a},214:function(e,t,i){"use strict";var s=i(67);i.n(s).a},215:function(e,t,i){"use strict";var s=i(68);i.n(s).a},217:function(e,t,i){var s={"./apl/apl.js":218,"./asciiarmor/asciiarmor.js":219,"./asn.1/asn.1.js":220,"./asterisk/asterisk.js":221,"./brainfuck/brainfuck.js":222,"./clike/clike.js":84,"./clojure/clojure.js":223,"./cmake/cmake.js":224,"./cobol/cobol.js":225,"./coffeescript/coffeescript.js":105,"./commonlisp/commonlisp.js":226,"./crystal/crystal.js":227,"./css/css.js":22,"./cypher/cypher.js":228,"./d/d.js":229,"./dart/dart.js":230,"./diff/diff.js":231,"./django/django.js":232,"./dockerfile/dockerfile.js":233,"./dtd/dtd.js":234,"./dylan/dylan.js":235,"./ebnf/ebnf.js":236,"./ecl/ecl.js":237,"./eiffel/eiffel.js":238,"./elm/elm.js":239,"./erlang/erlang.js":240,"./factor/factor.js":241,"./fcl/fcl.js":242,"./forth/forth.js":243,"./fortran/fortran.js":244,"./gas/gas.js":245,"./gfm/gfm.js":246,"./gherkin/gherkin.js":247,"./go/go.js":248,"./groovy/groovy.js":249,"./haml/haml.js":250,"./handlebars/handlebars.js":107,"./haskell-literate/haskell-literate.js":251,"./haskell/haskell.js":108,"./haxe/haxe.js":252,"./htmlembedded/htmlembedded.js":253,"./htmlmixed/htmlmixed.js":7,"./http/http.js":254,"./idl/idl.js":255,"./javascript/javascript.js":16,"./jinja2/jinja2.js":256,"./jsx/jsx.js":257,"./julia/julia.js":258,"./livescript/livescript.js":259,"./lua/lua.js":260,"./markdown/markdown.js":106,"./mathematica/mathematica.js":261,"./mbox/mbox.js":262,"./meta.js":83,"./mirc/mirc.js":263,"./mllike/mllike.js":264,"./modelica/modelica.js":265,"./mscgen/mscgen.js":266,"./mumps/mumps.js":267,"./nginx/nginx.js":268,"./nsis/nsis.js":269,"./ntriples/ntriples.js":270,"./octave/octave.js":271,"./oz/oz.js":272,"./pascal/pascal.js":273,"./pegjs/pegjs.js":274,"./perl/perl.js":275,"./php/php.js":276,"./pig/pig.js":277,"./powershell/powershell.js":278,"./properties/properties.js":279,"./protobuf/protobuf.js":280,"./pug/pug.js":109,"./puppet/puppet.js":281,"./python/python.js":110,"./q/q.js":282,"./r/r.js":283,"./rpm/rpm.js":284,"./rst/rst.js":285,"./ruby/ruby.js":85,"./rust/rust.js":286,"./sas/sas.js":287,"./sass/sass.js":112,"./scheme/scheme.js":288,"./shell/shell.js":289,"./sieve/sieve.js":290,"./slim/slim.js":291,"./smalltalk/smalltalk.js":292,"./smarty/smarty.js":293,"./solr/solr.js":294,"./soy/soy.js":295,"./sparql/sparql.js":296,"./spreadsheet/spreadsheet.js":297,"./sql/sql.js":298,"./stex/stex.js":111,"./stylus/stylus.js":113,"./swift/swift.js":299,"./tcl/tcl.js":300,"./textile/textile.js":301,"./tiddlywiki/tiddlywiki.js":302,"./tiki/tiki.js":303,"./toml/toml.js":304,"./tornado/tornado.js":305,"./troff/troff.js":306,"./ttcn-cfg/ttcn-cfg.js":307,"./ttcn/ttcn.js":308,"./turtle/turtle.js":309,"./twig/twig.js":310,"./vb/vb.js":311,"./vbscript/vbscript.js":312,"./velocity/velocity.js":313,"./verilog/verilog.js":314,"./vhdl/vhdl.js":315,"./vue/vue.js":316,"./webidl/webidl.js":317,"./xml/xml.js":23,"./xquery/xquery.js":318,"./yacas/yacas.js":319,"./yaml-frontmatter/yaml-frontmatter.js":320,"./yaml/yaml.js":114,"./z80/z80.js":321};function a(e){var t=n(e);return i(t)}function n(e){var t=s[e];if(!(t+1)){var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}return t}a.keys=function(){return Object.keys(s)},a.resolve=n,e.exports=a,a.id=217},3:function(e,t){t.SUBSCRIBE_ENABLE=0,t.SUBSCRIBE_DISABLE=1,t.TOPIC_DELAY_ENABLE=0,t.TOPIC_DELAY_DISABLE=1,t.GROUP_ALARM_ENABLE=0,t.GROUP_ALARM_DISABLE=1,t.SUBSCRIBE_CONSUMETYPE_SDK=1,t.SUBSCRIBE_CONSUMETYPE_HTTP=2,t.SUBSCRIBE_CONSUMETYPE_OTHER=3,t.SUBSCRIBE_MSGTYPE_JSON=1,t.SUBSCRIBE_MSGTYPE_TEXT=2,t.SUBSCRIBE_MSGTYPE_BYTES=3,t.SUBSCRIBE_GROOVY_ENABLE=0,t.SUBSCRIBE_GROOVY_DISABLE=1,t.SUBSCRIBE_TRANSIT_ENABLE=0,t.SUBSCRIBE_TRANSIT_DISABLE=1,t.SUBSCRIBE_ORDER_ENABLE=0,t.SUBSCRIBE_ORDER_DISABLE=1,t.SUBSCRIBE_ORDERKEY_QID="QID",t.SUBSCRIBE_ORDERKEY_KEY="KEY",t.SUBSCRIBE_ORDERKEY_JSONPATH="JsonPath",t.SUBSCRIBE_WRITETYPE_HDFS=0,t.SUBSCRIBE_WRITETYPE_HBASE=1,t.SUBSCRIBE_WRITETYPE_REDIS=2,t.SUBSCRIBE_HTTPMETHOD_POST=0,t.SUBSCRIBE_HTTPMETHOD_GET=1,t.SUBSCRIBE_PRESSURE_ENABLE=1,t.SUBSCRIBE_PRESSURE_DISABLE=0,t.SUBSCRIBE_API_HIGHT_LEVEL=1,t.SUBSCRIBE_API_LOW_LEVEL=2},322:function(e,t,i){var s={"./3024-day.css":323,"./3024-night.css":324,"./abcdef.css":325,"./ambiance-mobile.css":326,"./ambiance.css":327,"./base16-dark.css":328,"./base16-light.css":329,"./bespin.css":330,"./blackboard.css":331,"./cobalt.css":332,"./colorforth.css":333,"./darcula.css":334,"./dracula.css":335,"./duotone-dark.css":336,"./duotone-light.css":337,"./eclipse.css":338,"./elegant.css":339,"./erlang-dark.css":340,"./gruvbox-dark.css":341,"./hopscotch.css":342,"./icecoder.css":343,"./idea.css":344,"./isotope.css":345,"./lesser-dark.css":346,"./liquibyte.css":347,"./lucario.css":348,"./material.css":349,"./mbo.css":350,"./mdn-like.css":351,"./midnight.css":352,"./monokai.css":353,"./neat.css":354,"./neo.css":355,"./night.css":356,"./oceanic-next.css":357,"./panda-syntax.css":358,"./paraiso-dark.css":359,"./paraiso-light.css":360,"./pastel-on-dark.css":361,"./railscasts.css":362,"./rubyblue.css":363,"./seti.css":364,"./shadowfox.css":365,"./solarized.css":366,"./ssms.css":367,"./the-matrix.css":368,"./tomorrow-night-bright.css":369,"./tomorrow-night-eighties.css":370,"./ttcn.css":371,"./twilight.css":372,"./vibrant-ink.css":373,"./xq-dark.css":374,"./xq-light.css":375,"./yeti.css":376,"./zenburn.css":377};function a(e){var t=n(e);return i(t)}function n(e){var t=s[e];if(!(t+1)){var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}return t}a.keys=function(){return Object.keys(s)},a.resolve=n,e.exports=a,a.id=322},33:function(e,t,i){"use strict";var s=i(34),a=i.n(s);t.default=a.a},34:function(e,t){},35:function(e,t,i){},36:function(e,t,i){},37:function(e,t,i){},379:function(e,t,i){},38:function(e,t,i){},380:function(e,t,i){},381:function(e,t,i){"use strict";i.r(t);var s={};i.r(s),i.d(s,"setToken",function(){return _}),i.d(s,"getToken",function(){return y}),i.d(s,"removeToken",function(){return S});var a=i(4),n=i.n(a),o=i(69),r=i.n(o),c=new n.a,l=i(115),u=i(116),d=i.n(u),p=i(18),h=i.n(p),f=i(87);function m(){for(var e={},t=0;t2&&void 0!==arguments[2]?arguments[2]:[],s=e.$children;return s.length&&s.forEach(function(e){var s=e.$options.name,a=e.$children;if(s===t&&i.push(e),a.length){var n=V(e,t,i);n&&i.concat(n)}}),i}var U;j.newInstance=function(e){var t=e||{},i="";Object.keys(t).forEach(function(e){i+=" :"+z(e)+"="+e});var s=document.createElement("div");s.innerHTML=""),document.body.appendChild(s);var a=new n.a({el:s,data:t,components:{Notification:j}}).$children[0];return{notice:function(e){a.add(e)},remove:function(e){a.close(e)},component:a,destroy:function(){document.body.removeChild(s)}}};var F,W,H=j,K="bcui-message",Q="bcui-icon",Y="bcui_message_key_",J=1500,X=1,Z={info:"info",success:"confirm",warning:"alert",error:"error",loading:"loading"};function ee(){return W=W||H.newInstance({classPrefix:K,styles:{top:"".concat(F,"px")}})}function te(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s="string"==typeof i?i:i.content,a=0===i.duration?0:J,n=i.onClose||function(){},o=i.render||function(){},r=i.closable||!1,c=Z[e],l="loading"===e?" bcui-load-loop":"",u=ee();return u.notice({name:"".concat(Y).concat(X),duration:a,styles:{},transitionName:"move-up",content:'\n
\n \n ').concat(s,"\n
\n "),render:o,closable:r,onClose:n}),t=X++,function(){u.remove("".concat(Y).concat(t))}}var ie={info:function(e){return te("info",e)},success:function(e){return te("success",e)},warning:function(e){return te("warning",e)},warn:function(e){return te("warning",e)},error:function(e){return te("error",e)},loading:function(e){return te("loading",e)},config:function(e){e.top&&(F=e.top),e.duration&&(J=e.duration)},destroy:function(){var e=ee();W=null,e.destroy()}},se=!1,ae=r.a.create({headers:{"X-Requested-With":"XMLHttpRequest"},withCredentials:!0});function ne(e,t,i){var s=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{enable:!0};this.$notice.config({duration:4e3}),e=e.toLowerCase(),["post","put","delete"].includes(e)&&(i.contentType="json");var n="",o={enable:!0,successTitle:"Operation success",successMessage:"",failTitle:"Operation failed",failMessage:""};["post","put","delete"].includes(e)&&(o.successTitle="Operation success",o.failTitle="Operation failed",n="$notice"),"get"===e&&(o.successTitle="Request success",o.failTitle="Request failed",n="$notice"),a=Object.assign({},o,a);return ae[e](t,i).then(function(t){if(a.enable&&function(t){var i=a.failMessage||t.errmsg||"Unknow error";if(t.errno)throw s[n].error({title:a.failTitle,duration:0,desc:"Error code: ".concat(t.errno," \n ErrorMessage: ").concat(i)}),new Error(t.errmsg);var o=0===t.errno;"get"!==e||o||s[n].error({title:a.failTitle,desc:"ErrorMessage: ".concat(i),duration:0}),["post","put","delete"].includes(e)&&(o?s[n].success({title:a.successTitle,desc:a.successMessage}):s[n].error({title:a.successTitle,desc:a.successMessage,duration:0}))}(t.data),0===t.data.errno)return t.data}).catch(function(){})}ae.interceptors.response.use(function(e){return se=!1,e},function(e){return 401===e.response.status&&(se||ie.info("Not logging"),Ut.push({name:"login"}),se=!0),Promise.reject(e)});var oe={methods:{request:ne,fetchAllTopicList:function(e){return this.request("get","/carrera/api/console/topic/listAll",e)},fetchTopicStatistics:function(e){return this.request("get","/carrera/api/console/topic/getState",e)},fetchGroupsByTopic:function(e){return this.request("get","/carrera/api/console/topic/listGroup",e)},fectchMessages:function(e){return this.request("get","/carrera/api/console/topic/getMessage",e)},sendMessage:function(e){return this.request("post","/carrera/api/console/topic/sendMsg",e)},fetchTopicDetail:function(e){return this.request("get","/carrera/api/console/topic/findById",e)},createTopic:function(e){return this.request("post","/carrera/api/odin/internal/createTopic",e)},send:function(e,t){var i=this;this.$modal.confirm({title:"你确定要发送消息吗?",content:"Topic名为:".concat(e.topicName),buttonType:"warning",onOk:function(){var s=this,a={topicId:e.topicId,msg:e.msg};i.sendMessage(a).then(function(e){"ok"===e.message?s.$message.success("操作成功,已发送信息,key为"+e.data.key):t()})}})}}},re=i(3),ce=i.n(re),le={topic:{consumeTypes:[{label:"SDK Pull",value:ce.a.SUBSCRIBE_CONSUMETYPE_SDK},{label:"HTTP Push",value:ce.a.SUBSCRIBE_CONSUMETYPE_HTTP},{label:"Write to Third party components",value:ce.a.SUBSCRIBE_CONSUMETYPE_OTHER}],delayStates:[{label:"Enable",value:ce.a.TOPIC_DELAY_ENABLE},{label:"Disable",value:ce.a.TOPIC_DELAY_DISABLE}],states:[{label:"Enable",value:ce.a.SUBSCRIBE_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_DISABLE,className:"state--disable"}],alarmStates:[{label:"Enable",value:ce.a.GROUP_ALARM_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_GROOVY_DISABLE,className:"state--disable"}],msgTypes:[{label:"Json",value:ce.a.SUBSCRIBE_CONSUMETYPE_SDK},{label:"Text",value:ce.a.SUBSCRIBE_CONSUMETYPE_HTTP},{label:"Bytes",value:ce.a.SUBSCRIBE_CONSUMETYPE_OTHER}],groovyStates:[{label:"Enable",value:ce.a.SUBSCRIBE_GROOVY_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_GROOVY_DISABLE,className:"state--disable"}],transitStates:[{label:"Enable",value:ce.a.SUBSCRIBE_TRANSIT_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_TRANSIT_DISABLE,className:"state--disable"}],pressureTrafficStates:[{label:"Enable",value:ce.a.SUBSCRIBE_PRESSURE_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_PRESSURE_DISABLE,className:"state--disable"}],orderStates:[{label:"Enable",value:ce.a.SUBSCRIBE_ORDER_ENABLE,className:"state--enable"},{label:"Disable",value:ce.a.SUBSCRIBE_ORDER_DISABLE,className:"state--disable"}],orderKeyTypes:[{label:"QID",value:ce.a.SUBSCRIBE_ORDERKEY_QID},{label:"KEY",value:ce.a.SUBSCRIBE_ORDERKEY_KEY},{label:"JsonPath",value:ce.a.SUBSCRIBE_ORDERKEY_JSONPATH}],writeTypes:[{label:"HDFS",value:ce.a.SUBSCRIBE_WRITETYPE_HDFS},{label:"HBASE",value:ce.a.SUBSCRIBE_WRITETYPE_HBASE},{label:"REDIS",value:ce.a.SUBSCRIBE_WRITETYPE_REDIS}],httpMethodTypes:[{label:"POST",value:ce.a.SUBSCRIBE_HTTPMETHOD_POST},{label:"GET",value:ce.a.SUBSCRIBE_HTTPMETHOD_GET}],apiTypes:[{label:"Low level",value:ce.a.SUBSCRIBE_API_LOW_LEVEL},{label:"High level",value:ce.a.SUBSCRIBE_API_HIGHT_LEVEL}]}},ue={data:function(){return{dict:le}},methods:{validateForm:function(e){var t=!1;return this.$refs[e].validate(function(e){t=e}),t},dictTranslate:function(e,t,i){var s=le[e][t],a="";return s.map(function(e){i===e.value&&(a=e.label||e.value)}),a||i},coloringText:function(e,t,i,s){var a="";return le[e][t].map(function(e){i===e.value&&(a=e[s]||e.className)}),a},formatMap:function(e){var t=this;if(1===e.length&&""===e[0].key)return{};var i={};return e.map(function(e){t.$set(i,e.key,e.value)}),i},formatObject:function(e){if(e&&Object.keys(e).length){var t=[];return Object.keys(e).filter(function(e){return e}).forEach(function(i){t.push({key:i,value:e[i]})}),t}return[{key:"",value:""}]},getNameById:function(e,t){var i="";return t.forEach(function(t){e&&t.value===e&&(i=t.label)}),i},formatUrlObject:function(e,t){if(e.length)return t=[],Object.keys(e).forEach(function(i){t.push({key:e[i]})}),t}}},de=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{staticClass:"create-topic-modal",attrs:{title:e.title,offsetTop:40,width:610},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"topic-create"},[i("bc-form",{ref:"form",staticClass:"clearfix",attrs:{width:540,model:e.form,rules:e.topicFormRule,labelAlign:"top"}},[i("bc-form-item",{attrs:{label:"Topic",prop:"topicName"}},[i("bc-input",{attrs:{disabled:e.isEditing,placeholder:"Please input Topic name"},model:{value:e.form.topicName,callback:function(t){e.$set(e.form,"topicName",t)},expression:"form.topicName"}})],1),e._v(" "),i("div",{staticClass:"alert-message"},[i("div",[e._v("1. The topic name can contain only letters, numbers, underscore(_)and dashes(-)")]),e._v(" "),i("div",[e._v("2. Once created can't modify the Topic name")])]),e._v(" "),i("bc-form-item",{attrs:{label:"Delay Topic ",prop:"delayTopic"}},[i("bc-select",{attrs:{placehold:"Please select"},model:{value:e.form.delayTopic,callback:function(t){e.$set(e.form,"delayTopic",e._n(t))},expression:"form.delayTopic"}},e._l(e.dict.topic.delayStates,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),i("bc-form-item",{attrs:{label:"Topic Description",prop:"description"}},[i("bc-input",{attrs:{type:"textarea",rows:4,placeholder:"topic description information."},model:{value:e.form.description,callback:function(t){e.$set(e.form,"description",t)},expression:"form.description"}})],1),e._v(" "),i("bc-form-item",{attrs:{label:"Rate Limit",prop:"produceTps"}},[i("bc-input",{attrs:{type:"text"},model:{value:e.form.produceTps,callback:function(t){e.$set(e.form,"produceTps",t)},expression:"form.produceTps"}},[i("span",{attrs:{slot:"append"},slot:"append"},[e._v("msg/s")])])],1),e._v(" "),i("bc-form-item",{attrs:{label:"Additional Parameters"}},[e._l(e.others,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-input",{staticStyle:{width:"240px","margin-right":"10px"},attrs:{placeholder:"key"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("bc-input",{staticStyle:{width:"240px"},attrs:{placeholder:"value"},model:{value:t.value,callback:function(i){e.$set(t,"value",i)},expression:"item.value"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeOther(t)}}},[e.others.length>1?i("bc-icon",{attrs:{type:"trash"}}):e._e()],1)],1)}),e._v(" "),i("div",[i("span",{staticClass:"text-link",on:{click:function(t){e.addOther()}}},[e._v("Add additional parameters")])])],2)],1)],1),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.handleCreateTopic}},[e._v("Submit")])],1)],2):e._e()};de._withStripped=!0;var pe=i(117),he={name:"create-topic-modal",mixins:[oe,ue],components:{},props:{value:{type:Boolean,default:!1},topic:{type:Object,default:function(){return{}}}},data:function(){return{title:"Create Topic",isSubmitting:!1,isEditing:!1,others:[{key:"",value:""}],form:{topicId:"",topicName:"",remark:"",produceMode:0,conf:[],delayTopic:ce.a.TOPIC_DELAY_DISABLE,enableSchemaVerify:!1,produceTps:1024},topicFormRule:pe.createTopic,topicDesc:{},showConfOperationParams:!1}},computed:{show:{get:function(){var e=this;return this.value&&Object.keys(this.topic).length&&(this.isEditing=!0,this.title="Edit topic",this.$nextTick(function(){e.form=JSON.parse(JSON.stringify(e.topic)),e.form.produceTps=e.topic.conf[0].produceTps,e.form.delayTopic=e.topic.delayTopic}),this.others=this.formatObject(this.topic.extraParams)),this.value},set:function(){}}},methods:{cancel:function(){this.isSubmitting=!1,this.isEditing=!1,this.title="Create Topic",this.others=[{key:"",value:""}],this.$refs.form.resetFields(),this.$emit("input",!1)},addOther:function(){this.others.push({key:"",value:""})},removeOther:function(e){var t=this.others.indexOf(e);-1!==t&&this.others.splice(t,1)},handleCreateTopic:function(){var e=this,t=this.form;if(!this.validateForm("form"))return this.isSaveLoading=!1,void this.$notice.error({title:"Please checkout form",duration:0});this.isSubmitting=!0;var i={user:"administration",topicId:this.isEditing?t.topicId:0,topicName:t.topicName,service:"Engineering",department:"Software",contacters:"administration;",schema:null,alarmGroup:null,description:t.description,extraParams:{},delayTopic:t.delayTopic,needAuditSubinfo:1,produceMode:0,conf:[],enableSchemaVerify:1,operationParams:null};i.extraParams=this.formatMap(this.others),i.conf=[{clusterId:1,clusterName:"ddmq",clientIdcMap:null,clusterDesc:null,serverIdcId:1,serverIdcName:"default",operationParams:null,msgMaxSize:1024,msgAvgSize:1024,produceTps:t.produceTps,mqServerId:1,mqServerName:"R_default"}],this.createTopic(i).then(function(t){0===t.errno&&(e.$root.bus.$emit("updateTopicList"),e.cancel())}).finally(function(){e.isSaveLoading=!1,e.isSubmitting=!1})},init:function(){},getEditInitData:function(e){this.form=e}},watch:{},mounted:function(){this.init()}},fe=(i(148),Object(P.a)(he,de,[],!1,null,null,null));fe.options.__file="src/pages/topic/modals/create.vue";var me=fe.exports,ve=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"content samplingPage"},[i("div",{staticClass:"detail-block"},[i("div",{staticClass:"detail-block-header"},[i("div",{staticClass:"detail-title"},[e._v("Sampling")]),e._v(" "),i("div",{staticClass:"detail-button"},[i("bc-button",{attrs:{type:"primary",loading:e.loading},on:{click:function(t){e.handleResampling()}}},[e._v("Resampling")]),e._v(" "),i("bc-button",{attrs:{type:"primary"},on:{click:function(t){e.handleCopyMessage()}}},[e._v("Copy MessageBody")])],1)]),e._v(" "),i("div",{staticClass:"detail-block-body"},[i("bc-row",{attrs:{gutter:48}},[i("bc-col",{attrs:{span:"24"}},[i("div",{staticClass:"detail-info-prop"},[i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Topic")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.topicName))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Qid")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.qid||"-"))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Offset")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.offset))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("MessageBody")]),e._v(" "),i("codemirror",{attrs:{options:e.editorOptions,disabled:""},model:{value:e.basicInfo.msg,callback:function(t){e.$set(e.basicInfo,"msg",t)},expression:"basicInfo.msg"}})],1)])])],1)],1)])])};ve._withStripped=!0;var be=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{staticClass:"send-message-modal",attrs:{title:e.title,offsetTop:40,width:610},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"send-message"},[i("bc-form",{ref:"form",staticClass:"clearfix",attrs:{width:540,model:e.form,rules:e.formRule,labelAlign:"top"}},[i("bc-form-item",{attrs:{label:"Message:",prop:"message"}},[i("bc-input",{attrs:{placeholder:"Please input message",type:"textarea",rows:5},model:{value:e.form.message,callback:function(t){e.$set(e.form,"message",t)},expression:"form.message"}})],1)],1)],1),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.handleSendMessage}},[e._v("Submit")])],1)],2):e._e()};be._withStripped=!0;var ge={name:"create-group-modal",mixins:[oe,ue],components:{},props:{value:{type:Boolean,default:!1},topic:{type:Object,default:function(){return{}}}},data:function(){return{title:"Send message",isSubmitting:!1,form:{message:""},formRule:{message:{required:!0,message:"Please input message"}}}},computed:{show:{get:function(){return this.value},set:function(){}}},methods:{cancel:function(){this.isSubmitting=!1,this.$refs.form.resetFields(),this.$emit("input",!1)},handleSendMessage:function(){var e=this,t=this.form;if(this.validateForm("form")){this.isSubmitting=!0;var i={user:"administration",topicId:this.topic.topicId,topicName:this.topic.topicName,msg:t.message};this.sendMessage(i).then(function(t){e.cancel()}).finally(function(){e.isSubmitting=!1})}else this.$notice.error({title:"Please checkout form",duration:0})}},watch:{}},_e=(i(149),Object(P.a)(ge,be,[],!1,null,null,null));_e.options.__file="src/pages/topic/modals/send-message.vue";var ye={name:"topic-sampling",mixins:[oe,ue],components:{SendMessageModal:_e.exports},props:{topicId:{type:Number,default:0}},data:function(){return{basicInfo:{},editorOptions:{tabSize:4,mode:"text/javascript",theme:"base16-light",lineNumbers:!0,line:!0,readOnly:!0,lineWrapping:!0},loading:!1,sendmessageModalStatus:!1,isSubscribe:!1}},methods:{handleSendMessage:function(){this.sendmessageModalStatus=!0},handleResampling:function(){this.loading=!0,this.getSampling("reSampling")},handleCopyMessage:function(){this.$clipboard(this.basicInfo.msg),this.$notice.success({title:"复制成功"})},getSampling:function(e){var t=this,i={topicId:this.topicId,clusterId:1,user:"administration"};this.fectchMessages({params:i}).then(function(i){t.basicInfo=i.data,e&&0===i.errno&&t.$notice.success({title:"Resampling success"})}).finally(function(){t.loading=!1})},init:function(){this.getSampling(),Object.keys(this.$route.query)&&(this.isSubscribe=!0)},goBack:function(){this.isSubscribe?this.$router.push({name:"subscribes"}):this.$router.push({name:"topics"})}},mounted:function(){this.init()}},Se=(i(150),Object(P.a)(ye,ve,[],!1,null,null,null));Se.options.__file="src/pages/topic/modals/message.vue";var Ce=Se.exports,ke={name:"topics",mixins:[oe,ue],components:{CreateTopicModal:me,messageDetail:Ce},data:function(){return{topicList:[],loading:!0,pagination:{totalNum:0,curPage:1,pageSize:10},topicData:{},filter:{text:""},createTopicModalStatus:!1,messageStatus:!1,topicId:""}},methods:{handleGetMessage:function(e){this.messageStatus=!0,this.title="Sampling( Topic:"+e.topicName+")",this.topicId=e.topicId},cancel:function(){this.messageStatus=!1},handleEditTopic:function(e){this.createTopicModalStatus=!0,this.topicData=e},getMessages:function(e,t){this.$router.push("/message/".concat(e,"/").concat(t))},handelSearch:function(){var e=this,t=this.filter;""!==t.text?(clearTimeout(this.timer),this.timer=setTimeout(function(){var i={text:t.text};localStorage.setItem("topics_search_keyword",JSON.stringify(i)),e.getUserTopicList()},500)):(this.getUserTopicList(),localStorage.setItem("topics_search_keyword",""))},getUserTopicList:function(e){var t=this,i=this.pagination,s=this.filter;e=Object.assign({},{curPage:i.curPage,pageSize:i.pageSize,text:s.text,clusterId:1,user:"administration"},e),this.loading=!0,this.fetchAllTopicList({params:e}).then(function(e){t.topicList=e.data.list,t.pagination.totalNum=e.data.totalSize}).finally(function(){t.loading=!1})},refreshWhenPageChange:function(e){this.pagination.curPage=e,this.getUserTopicList()},refreshWhenPageSizeChange:function(e){this.pagination.pageSize=e,this.getUserTopicList()},initUserTopicList:function(){var e=this,t=localStorage.getItem("topics_search_keyword");t?(t=JSON.parse(t),Object.keys(this.filter).forEach(function(i){var s=t[i];s&&(e.filter[i]=s)}),this.getUserTopicList()):this.getUserTopicList()},init:function(){this.initUserTopicList(),this.$root.bus.$on("updateTopicList",this.getUserTopicList)},goTopicEdit:function(e){this.$router.push("/topics/create/".concat(e))},handleCreateTopic:function(){this.topicData={},this.createTopicModalStatus=!0}},watch:{},mounted:function(){this.init()}},we=(i(151),Object(P.a)(ke,C,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"block-header"},[t("div",{staticClass:"block-header__title"},[this._v("Topic List")])])}],!1,null,null,null));we.options.__file="src/pages/topic/index.vue";var xe=we.exports,Te=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"content"},[i("div",{staticClass:"detail-block"},[i("div",{staticClass:"detail-block-nav clearfix"},[i("div",{staticClass:"detail-block-nav__back",on:{click:e.goBack}},[i("bc-icon",{attrs:{type:"chevron-left"}}),i("span",[e._v("Back to list")])],1)]),e._v(" "),i("div",{staticClass:"detail-block-header"},[i("div",{staticClass:"detail-info"},[i("div",{staticClass:"detail-title"},[i("div",{staticClass:"detail-title__value"},[e._v(e._s(e.basicInfo.topicName))])])]),e._v(" "),i("div",{staticClass:"detail-functions"},[i("bc-button",{attrs:{type:"primary"},on:{click:function(t){e.handleGetMessage(e.basicInfo)}}},[e._v("Sampling")])],1)]),e._v(" "),i("div",{staticClass:"detail-block-body"},[i("bc-tab",{on:{"on-tab-click":e.clickTabs},model:{value:e.currentTab,callback:function(t){e.currentTab=t},expression:"currentTab"}},[i("bc-tab-pane",{attrs:{name:"info",label:"Detail"}},[Object.keys(e.basicInfo).length?i("bc-row",{attrs:{gutter:48}},[i("bc-col",{attrs:{span:"6"}},[i("div",{staticClass:"detail-info-prop"},[i("div",{staticClass:"title"},[e._v("Basic Information")]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Topic")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.topicName))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("DelayTopic")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.delayTopic?"false":"true"))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Cluster")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.conf[0].clusterName))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Rate Limit TPS")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.conf[0].produceTps))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("msgMaxSize")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.conf[0].msgMaxSize))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("msgAvgSize")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.conf[0].msgAvgSize))])]),e._v(" "),i("div",{staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v("Description")]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(e.basicInfo.description))])])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"detail-info-prop"},[i("div",{staticClass:"title"},[e._v("Additional Parameters")]),e._v(" "),e._l(e.basicInfo.extraParams,function(t,s){return i("div",{key:s,staticClass:"prop-item"},[i("div",{staticClass:"prop-key"},[e._v(e._s(s))]),e._v(" "),i("div",{staticClass:"prop-value"},[e._v(e._s(t))])])})],2)])],1):e._e()],1),e._v(" "),i("bc-tab-pane",{attrs:{name:"group",label:"Consumer Group"}}),e._v(" "),i("bc-tab-pane",{attrs:{name:"statistic",label:"Statistics"}})],1),e._v(" "),i("router-view")],1)]),e._v(" "),e.messageStatus?i("bc-drawer",{on:{"on-cancel":e.cancel},model:{value:e.messageStatus,callback:function(t){e.messageStatus=t},expression:"messageStatus"}},[i("messageDetail",{attrs:{topicId:e.topicId}})],1):e._e()],1)};Te._withStripped=!0;var $e={name:"topic-detail",mixins:[oe,ue],components:{messageDetail:Ce},data:function(){return{basicInfo:{},currentTab:"info",messageStatus:!1,topicId:""}},methods:{handleGetMessage:function(e){this.messageStatus=!0,this.title="Sampling( Topic:"+e.topicName+")",this.topicId=e.topicId},cancel:function(){this.messageStatus=!1},clickTabs:function(e){var t=this.$route.params.id;"info"!==e?this.$router.push({path:"/topics/".concat(t,"/").concat(e)}):this.$router.push({path:"/topics/".concat(t)})},getTopicDetail:function(e){var t=this,i={topicId:e,user:"administration"};this.fetchTopicDetail({params:i}).then(function(e){t.basicInfo=e.data})},init:function(){var e=this.$route.params.id;this.getTopicDetail(e)},goBack:function(){this.$router.push({name:"topics"})}},mounted:function(){this.init()}},Pe=Object(P.a)($e,Te,[],!1,null,null,null);Pe.options.__file="src/pages/topic/detail.vue";var Ee=Pe.exports,Ie=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"block"},[i("div",{staticClass:"block-body"},[i("bc-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],ref:"table",class:["bcui-table--circular","bcui-table--dark"],attrs:{tableData:e.groupList,border:!1,pagination:!1,"empty-text":"No data"}},[i("bc-table-column",{attrs:{field:"groupName",index:"groupName",label:"Consumer Group",width:"400px"}}),e._v(" "),i("bc-table-column",{attrs:{field:"createTime",index:"createTime",label:"Create Time"}}),e._v(" "),i("bc-table-column",{attrs:{field:"state",index:"state",label:"Status"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("span",{class:e.coloringText("topic","states",parseInt(t.record.state,10))},[e._v(e._s(e.dictTranslate("topic","states",parseInt(t.record.state,10))))])]}}])})],1)],1)])};Ie._withStripped=!0;var Ne={name:"topic-group",mixins:[oe,ue],data:function(){return{groupList:[],loading:!1}},methods:{getGroupList:function(){var e=this,t={topicId:this.$route.params.id,clusterId:1,user:"administration"};this.loading=!0,this.fetchGroupsByTopic({params:t}).then(function(t){e.groupList=t.data||[]}).finally(function(){e.loading=!1})}},mounted:function(){this.getGroupList()}},Oe=Object(P.a)(Ne,Ie,[],!1,null,null,null);Oe.options.__file="src/pages/topic/modals/group.vue";var Be=Oe.exports,De=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"block"},[t("div",{staticClass:"block-body"},[t("bc-table",{directives:[{name:"loading",rawName:"v-loading",value:this.loading,expression:"loading"}],ref:"table",class:["bcui-table--circular","bcui-table--dark"],attrs:{tableData:this.topicStatisticList,border:!1,pagination:!1,"empty-text":"No data"}},[t("bc-table-column",{attrs:{field:"qid",index:"qid",label:"Qid"}}),this._v(" "),t("bc-table-column",{attrs:{field:"minOffset",index:"minOffset",label:"MinOffset",width:"100px"}}),this._v(" "),t("bc-table-column",{attrs:{field:"maxOffset",index:"maxOffset",label:"MaxOffset",width:"100px"}}),this._v(" "),t("bc-table-column",{attrs:{field:"lastUpdateTime",index:"lastUpdateTime",label:"LastUpdateTime"}})],1)],1)])};De._withStripped=!0;var je={name:"topic-statistic",mixins:[oe,ue],data:function(){return{topicStatisticList:[],loading:!1}},methods:{getTopicStatisticList:function(){var e=this,t={topicId:this.$route.params.id,clusterId:1,user:"administration"};this.loading=!0,this.fetchTopicStatistics({params:t}).then(function(t){e.topicStatisticList=t.data||[]}).finally(function(){e.loading=!1})}},mounted:function(){this.getTopicStatisticList()}},Me=Object(P.a)(je,De,[],!1,null,null,null);Me.options.__file="src/pages/topic/modals/statistics.vue";var Le=[{path:"/",name:"topics",component:xe},{path:"/topics",name:"topics",component:xe},{path:"/topics/:id",name:"topicDetail",component:Ee,children:[{path:"group",name:"topic-group-detail",component:Be},{path:"statistic",name:"topic-statistic-detail",component:Me.exports}]}],Ae=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"container"},[i("div",{staticClass:"block"},[e._m(0),e._v(" "),i("div",{staticClass:"block-body"},[i("div",{staticClass:"bcui-table-toolbar"},[i("div",{staticClass:"bcui-table-toolbar__item pull-left"},[i("bc-button",{attrs:{icon:"refresh",type:"gray"},on:{click:e.getSubscribeList}}),e._v(" "),i("bc-button",{attrs:{icon:"plus",type:"primary"},on:{click:e.handleCreateSubscribe}},[e._v("Subscription\n ")]),e._v(" "),i("bc-button-group",[i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageSubscribe("enable")}}},[e._v("Enable\n ")]),e._v(" "),i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageSubscribe("disable")}}},[e._v("Disable\n ")])],1),e._v(" "),i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageSubscribe("delete")}}},[e._v("Delete\n ")])],1),e._v(" "),i("div",{staticClass:"bcui-table-toolbar__item pull-right"},[i("span",{staticClass:"bcui-table-toolbar__item-label"},[e._v("Consumer group:")]),e._v(" "),i("bc-select",{attrs:{width:200,placeholder:"Select consumer group"},on:{"on-change":e.handelSearch},model:{value:e.filter.groupId,callback:function(t){e.$set(e.filter,"groupId",t)},expression:"filter.groupId"}},[i("bc-option",{attrs:{value:""}},[e._v("全部")]),e._v(" "),e._l(e.groups,function(t){return i("bc-option",{key:t.id,attrs:{value:t.value}},[e._v(e._s(t.label))])})],2),e._v(" "),i("bc-input",{attrs:{icon:"search",width:200,placeholder:"search"},on:{"on-change":function(t){e.handelSearch()}},model:{value:e.filter.text,callback:function(t){e.$set(e.filter,"text",t)},expression:"filter.text"}})],1)]),e._v(" "),i("bc-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],ref:"table",class:["bcui-table--circular","bcui-table--dark"],attrs:{tableData:e.subscribeList,border:!1,pagination:!1,check:!0,checkAll:!0,"empty-text":"No data"},on:{"on-check":e.handleCheckTableRow,"on-check-all":e.handleCheckTableAll}},[i("bc-table-column",{attrs:{field:"topicName",index:"topicName",label:"Topic"}}),e._v(" "),i("bc-table-column",{attrs:{field:"groupName",index:"groupName",label:"Consumer Group"}}),e._v(" "),i("bc-table-column",{attrs:{field:"consumeType",index:"consumeType",label:"Consume Type"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",[e._v(e._s(e.dictTranslate("topic","consumeTypes",parseInt(t.record.consumeType,10)))+"\n ")])]}}])}),e._v(" "),i("bc-table-column",{attrs:{field:"state",index:"state",label:"Status"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("span",{class:e.coloringText("topic","states",parseInt(t.record.state,10))},[e._v(e._s(e.dictTranslate("topic","states",parseInt(t.record.state,10))))])]}}])}),e._v(" "),i("bc-table-column",{attrs:{field:"operate",index:"operate",label:"Operation",width:"350px"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("a",{staticClass:"text-link",on:{click:function(i){e.handleDetail(t.record)}}},[e._v("Detail")]),e._v(" "),i("a",{staticClass:"text-link",on:{click:function(i){e.handleEditSubscribe(t.record)}}},[e._v("Edit")]),e._v(" "),i("a",{staticClass:"text-link",on:{click:function(i){e.handleGetMessage(t.record)}}},[e._v("Sampling")]),e._v(" "),i("router-link",{class:["text-link"],attrs:{to:{name:"consume",params:{id:t.record.groupId,name:t.record.groupName},query:{topicId:t.record.topicId,topicName:t.record.topicName}}}},[e._v("Consume Progress\n ")])]}}])})],1)],1),e._v(" "),i("div",{staticClass:"bcui-table-toolbar clearfix"},[i("div",{staticClass:"bcui-table-toolbar__item pull-right"},[0!==e.subscribeList.length?i("bc-pagination",{attrs:{"show-sizer":"","show-total":"","page-size":this.pagination.pageSize,total:this.pagination.totalNum},on:{"on-change":e.refreshWhenPageChange,"on-page-size-change":e.refreshWhenPageSizeChange}}):e._e()],1)])]),e._v(" "),i("bc-drawer",{attrs:{title:"Subscription Detail"},on:{"on-cancel":e.cancel},model:{value:e.detailStatus,callback:function(t){e.detailStatus=t},expression:"detailStatus"}},[i("detail",{attrs:{basicInfo:e.subscribeData}})],1),e._v(" "),i("create-modal",{attrs:{subscribe:e.subscribeEditData},model:{value:e.createSubscribeModalStatus,callback:function(t){e.createSubscribeModalStatus=t},expression:"createSubscribeModalStatus"}}),e._v(" "),i("ManageSubModal",{attrs:{type:e.manageType,resources:e.checkedTableItems},model:{value:e.manageSubModalStatus,callback:function(t){e.manageSubModalStatus=t},expression:"manageSubModalStatus"}}),e._v(" "),e.messageStatus?i("bc-drawer",{on:{"on-cancel":e.cancel},model:{value:e.messageStatus,callback:function(t){e.messageStatus=t},expression:"messageStatus"}},[i("messageDetail",{attrs:{topicId:e.topicId}})],1):e._e()],1)};Ae._withStripped=!0;var Re={methods:{request:ne,fetchSubscribeList:function(e){return this.request("get","/carrera/api/console/sub/list",e)},deleteSubscribe:function(e){return this.request("get","/carrera/api/odin/internal/deleteSub",e)},searchSubscribes:function(e){return this.request("get","searchSub",e)},changeSubscribeState:function(e){return this.request("get","/carrera/api/console/sub/changeState",e)},createSub:function(e){return this.request("post","/carrera/api/odin/internal/createSub",e)},fetchSubDesc:function(e){return this.request("get","/carrera/api/console/common/sub/fieldDesc",e)},fetchGroupsWithOutPage:function(e){return this.request("get","/carrera/api/console/group/listAllWithoutPage",e)},fetchTopicsWithOutPage:function(e){return this.request("get","/carrera/api/console/topic/listAllWithoutPage",e)},fetchMsgPushType:function(e){return this.request("get","/carrera/api/console/sub/listMsgPushType",e)},fetchDetailById:function(e){return this.request("get","/carrera/api/console/sub/findById",e)}}},ze={data:function(){return{checkedTableItems:[]}},methods:{handleCheckTableAll:function(e,t){this[arguments.length>2&&void 0!==arguments[2]?arguments[2]:"checkedTableItems"]=e?[].concat(t):[]},handleCheckTableRow:function(e,t,i){var s=this[arguments.length>3&&void 0!==arguments[3]?arguments[3]:"checkedTableItems"];if(s.includes(t)&&!e){var a=s.indexOf(t);s=s.splice(a,1)}!s.includes(t)&&e&&s.push(t)},handleCheckSingleTableRow:function(e,t,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"checkedTableItems",a=this.$refs.table.getShowData;e?(a.forEach(function(e,t){e.$$check=t===i}),this[s]=[t]):this[s]=[]},clearCheckTableRows:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"checkedTableItems";this[e].forEach(function(e){e.$$check=!1}),this[e]=[]}}},qe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"drawer-detail"},[i("bc-row",{attrs:{gutter:48}},[i("bc-col",{attrs:{span:"24"}},[i("div",{staticClass:"detail-info-detail-item"},[i("div",{staticClass:"detail-info-title"},[e._v("Basic information")]),e._v(" "),i("div",{staticClass:"detail-info-block"},[i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Consumer Group")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.groupName))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Topic")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.topicName))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Consume maxTps")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.maxTps))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Receive Pressure Traffic")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","pressureTrafficStates",e.basicInfo.pressureTraffic)))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("API Level")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","apiTypes",e.basicInfo.apiType)))])])]),e._v(" "),i("div",{staticClass:"detail-info-title"},[e._v("Advanced config")]),e._v(" "),e.basicInfo.apiType===e.CONSATNT.SUBSCRIBE_API_HIGHT_LEVEL?[i("div",{staticClass:"detail-info-block"},[i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Consume Timeout")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.consumeTimeout))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Error Retry Times")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.errorRetryTimes))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Retry Intervals")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.retryIntervals))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Message Type")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","msgTypes",e.basicInfo.msgType)))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Enable GroovyScript")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","groovyStates",e.basicInfo.enableGroovy)))])]),e._v(" "),e.basicInfo.enableGroovy===e.CONSATNT.SUBSCRIBE_GROOVY_ENABLE?i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("GroovyScript")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.groovy))])]):e._e(),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Enable Transit")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","transitStates",e.basicInfo.enableTransit)))])]),e._v(" "),e.basicInfo.enableTransit===e.CONSATNT.SUBSCRIBE_TRANSIT_ENABLE?i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Transits")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.transit))])]):e._e(),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Consume Type")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","consumeTypes",e.basicInfo.consumeType)))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Basic Ordering Rule")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","orderKeyTypes",e.basicInfo.orderKey)))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("HttpMethod")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(this.dictTranslate("topic","httpMethodTypes",e.basicInfo.httpMethod)))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Message Push Type")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.msgPushTypeDesc))])]),e._v(" "),i("div",{staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v("Urls")]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(e.basicInfo.urls&&e.basicInfo.urls.join(";")))])])])]:[i("div",{staticClass:"detail-item-key"},[e._v("Have no advanced config")])]],2)])],1)],1)};qe._withStripped=!0;var Ge={name:"subscribe-detail",mixins:[ue],props:{basicInfo:{type:Object,default:function(){return{}}}},data:function(){return{CONSATNT:ce.a}}},Ve=(i(152),Object(P.a)(Ge,qe,[],!1,null,null,null));Ve.options.__file="src/pages/subscribe/modals/detail.vue";var Ue=Ve.exports,Fe=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{staticClass:"create-group-modal",attrs:{title:e.title,offsetTop:40,width:1e3},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"subscribe-create config-form-item"},[i("div",{staticClass:"config-form"},[e.show?i("bc-form",{ref:"form",staticClass:"clearfix",attrs:{width:540,model:e.form,rules:e.formRule,labelAlign:"top"}},[i("div",{staticClass:"title-default"},[e._v("Basic Config")]),e._v(" "),i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Consumer Group:",prop:"groupId"}},[e.isEditing?i("bc-input",{attrs:{disabled:"",width:265},model:{value:e.form.groupName,callback:function(t){e.$set(e.form,"groupName",t)},expression:"form.groupName"}}):e._e(),e._v(" "),e.isEditing?e._e():i("bc-select",{attrs:{remote:"",filterable:"",width:265,"remote-method":e.filterGroups,label:e.form.groupName,loading:e.groupQueryLoading,placeholder:"Please input keywords to select"},model:{value:e.form.groupId,callback:function(t){e.$set(e.form,"groupId",t)},expression:"form.groupId"}},[e.groupQueryLoading?e._e():e._l(e.filterableGroups,function(t){return i("bc-option",{key:t.value,attrs:{value:t.value}},[e._v(e._s(t.label))])})],2)],1),e._v(" "),i("bc-form-item",{attrs:{label:"Topic:",prop:"topicId"}},[e.isEditing?i("bc-input",{attrs:{disabled:"",width:265},model:{value:e.form.topicName,callback:function(t){e.$set(e.form,"topicName",t)},expression:"form.topicName"}}):e._e(),e._v(" "),e.isEditing?e._e():i("bc-select",{attrs:{remote:"",filterable:"",width:265,"remote-method":e.filterTopics,label:e.form.topicName,loading:e.loading,placeholder:"Please input keywords to select"},model:{value:e.form.topicId,callback:function(t){e.$set(e.form,"topicId",t)},expression:"form.topicId"}},[e.loading?e._e():e._l(e.filterableTopics,function(t){return i("bc-option",{key:t.value,attrs:{value:t.value}},[e._v(e._s(t.label))])})],2)],1)],1),e._v(" "),i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Consume maxTps",prop:"maxTps"}},[i("bc-input",{attrs:{type:"number",width:265},model:{value:e.form.maxTps,callback:function(t){e.$set(e.form,"maxTps",t)},expression:"form.maxTps"}})],1),e._v(" "),i("bc-form-item",{attrs:{label:"Receive Pressure Traffic",prop:"pressureTraffic"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.pressureTraffic,callback:function(t){e.$set(e.form,"pressureTraffic",e._n(t))},expression:"form.pressureTraffic"}},e._l(e.dict.topic.pressureTrafficStates,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1)],1),e._v(" "),i("div",{staticClass:"title-default",staticStyle:{"margin-bottom":"15px"}},[e._v("Advanced Config\n "),i("span",{staticClass:"icon-for-advanced-config",on:{click:e.toggleAdvancedConfig}},[i("bc-icon",{attrs:{type:e.iconForAdvancedConfig}})],1)]),e._v(" "),i("div",{directives:[{name:"show",rawName:"v-show",value:e.isShowAdvancedConfig,expression:"isShowAdvancedConfig"}]},[i("bc-form-item",{attrs:{label:"API Level",prop:"apiType"}},[i("bc-select",{attrs:{placehold:"Please select"},model:{value:e.form.apiType,callback:function(t){e.$set(e.form,"apiType",e._n(t))},expression:"form.apiType"}},e._l(e.dict.topic.apiTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),1===parseInt(e.form.apiType,10)?[i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Consume Timeout",prop:"consumeTimeout"}},[i("bc-input",{attrs:{width:265,type:"number",placeholder:"default 1000ms"},model:{value:e.form.consumeTimeout,callback:function(t){e.$set(e.form,"consumeTimeout",t)},expression:"form.consumeTimeout"}},[i("span",{attrs:{slot:"append"},slot:"append"},[e._v("ms")])])],1),e._v(" "),i("bc-form-item",{attrs:{label:"Error Retry Times",prop:"errorRetryTimes"}},[i("bc-input",{attrs:{width:265,type:"number",placeholder:"default 3"},model:{value:e.form.errorRetryTimes,callback:function(t){e.$set(e.form,"errorRetryTimes",t)},expression:"form.errorRetryTimes"}})],1)],1),e._v(" "),i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Retry Intervals",prop:"retryIntervals"}},[i("bc-input",{attrs:{width:265,placeholder:"integer,separate by ;"},model:{value:e.form.retryIntervals,callback:function(t){e.$set(e.form,"retryIntervals",t)},expression:"form.retryIntervals"}},[i("span",{attrs:{slot:"append"},slot:"append"},[e._v("ms")])])],1),e._v(" "),i("bc-form-item",{attrs:{label:"Message Type",prop:"msgType"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.msgType,callback:function(t){e.$set(e.form,"msgType",e._n(t))},expression:"form.msgType"}},e._l(e.dict.topic.msgTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1)],1),e._v(" "),1===parseInt(e.form.msgType,10)?[i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Enable groovyScript",prop:"enableGroovy"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.enableGroovy,callback:function(t){e.$set(e.form,"enableGroovy",e._n(t))},expression:"form.enableGroovy"}},e._l(e.dict.topic.groovyStates,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),i("bc-form-item",{attrs:{label:"Enable Transit",prop:"enableTransit"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.enableTransit,callback:function(t){e.$set(e.form,"enableTransit",e._n(t))},expression:"form.enableTransit"}},e._l(e.dict.topic.transitStates,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1)],1),e._v(" "),0===e.form.enableGroovy?[i("bc-form-item",{attrs:{label:"GroovyScript"}},[i("bc-input",{attrs:{type:"textarea",rows:4,placeholder:""},model:{value:e.form.groovy,callback:function(t){e.$set(e.form,"groovy",t)},expression:"form.groovy"}})],1)]:e._e(),e._v(" "),0===e.form.enableTransit?[i("bc-form-item",{attrs:{label:"Transit"}},e._l(e.transits,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-input",{staticStyle:{width:"227px","margin-right":"10px"},attrs:{placeholder:"key"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("bc-input",{attrs:{placeholder:"value",width:227},model:{value:t.value,callback:function(i){e.$set(t,"value",i)},expression:"item.value"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(t){e.addConf(e.transits)}}},[i("bc-icon",{attrs:{type:"jia"}})],1),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeConf(t,e.transits)}}},[e.transits.length>1?i("bc-icon",{attrs:{type:"jian"}}):e._e()],1)],1)}))]:e._e()]:e._e(),e._v(" "),i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Enable Sequential Consume",prop:"enableOrder"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.enableOrder,callback:function(t){e.$set(e.form,"enableOrder",e._n(t))},expression:"form.enableOrder"}},e._l(e.dict.topic.orderStates,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),i("bc-form-item",{attrs:{label:"Consume type",prop:"consumeType"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.consumeType,callback:function(t){e.$set(e.form,"consumeType",e._n(t))},expression:"form.consumeType"}},e._l(e.dict.topic.consumeTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1)],1),e._v(" "),0===e.form.enableOrder?[i("bc-form-item",{attrs:{label:"Basis ordering rules",prop:"orderKey"}},[i("bc-select",{attrs:{placehold:"Please select"},model:{value:e.form.orderKey,callback:function(t){e.$set(e.form,"orderKey",t)},expression:"form.orderKey"}},e._l(e.dict.topic.orderKeyTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),"JsonPath"==e.form.orderKey?[i("bc-form-item",{attrs:{label:"JsonPath",prop:"jsonPath"}},[i("bc-input",{attrs:{placeholder:"Please input JsonPath"},model:{value:e.form.jsonPath,callback:function(t){e.$set(e.form,"jsonPath",t)},expression:"form.jsonPath"}})],1)]:e._e()]:e._e(),e._v(" "),2===parseInt(e.form.consumeType,10)?[i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"HttpMethod",prop:"httpMethod"}},[i("bc-select",{attrs:{placehold:"Please select",width:265},model:{value:e.form.httpMethod,callback:function(t){e.$set(e.form,"httpMethod",e._n(t))},expression:"form.httpMethod"}},e._l(e.dict.topic.httpMethodTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),i("bc-form-item",{attrs:{label:"Message push type",prop:"msgPushType"}},[i("bc-select",{attrs:{placeholder:"Please select",width:265},model:{value:e.form.msgPushType,callback:function(t){e.$set(e.form,"msgPushType",t)},expression:"form.msgPushType"}},e._l(e.msgPushTypes,function(e,t){return i("bc-option",{key:t,attrs:{value:e.value,label:e.label}})}))],1)],1),e._v(" "),i("div",{staticClass:"config-form-item"},[i("bc-form-item",{attrs:{label:"Http token",prop:"httpToken"}},[i("bc-input",{attrs:{width:265},model:{value:e.form.httpToken,callback:function(t){e.$set(e.form,"httpToken",t)},expression:"form.httpToken"}})],1),e._v(" "),i("bc-form-item",{attrs:{label:"Push max concurrency",prop:"pushMaxConcurrency"}},[i("bc-input",{attrs:{width:265},model:{value:e.form.pushMaxConcurrency,callback:function(t){e.$set(e.form,"pushMaxConcurrency",t)},expression:"form.pushMaxConcurrency"}})],1)],1),e._v(" "),i("bc-form-item",{attrs:{label:"Urls:",prop:"urls"}},e._l(e.urls,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-form-item",[i("bc-input",{attrs:{width:"87%",placeholder:"Please input url"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(t){e.addUrl(e.urls)}}},[i("bc-icon",{attrs:{type:"jia"}})],1),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeUrl(t,e.urls)}}},[e.urls.length>1?i("bc-icon",{attrs:{type:"jian"}}):e._e()],1)],1)],1)})),e._v(" "),i("bc-form-item",{attrs:{label:"QueryParams"}},e._l(e.queryParams,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-input",{staticStyle:{width:"227px","margin-right":"10px"},attrs:{placeholder:"key"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("bc-input",{attrs:{placeholder:"value",width:227},model:{value:t.value,callback:function(i){e.$set(t,"value",i)},expression:"item.value"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(t){e.addConf(e.queryParams)}}},[i("bc-icon",{attrs:{type:"jia"}})],1),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeConf(t,e.queryParams)}}},[e.queryParams.length>1?i("bc-icon",{attrs:{type:"jian"}}):e._e()],1)],1)}))]:e._e(),e._v(" "),3===parseInt(e.form.consumeType,10)?[i("bc-form-item",{attrs:{label:"Write type",prop:"bigDataType"}},[i("bc-select",{attrs:{placehold:"Please select"},model:{value:e.form.bigDataType,callback:function(t){e.$set(e.form,"bigDataType",e._n(t))},expression:"form.bigDataType"}},e._l(e.dict.topic.writeTypes,function(e){return i("bc-option",{key:e.label,attrs:{value:e.value,label:e.label}})}))],1),e._v(" "),i("bc-form-item",{attrs:{label:"Write config",prop:"bigDataConfig"}},[i("div",{staticClass:"bc-codemirror"},[i("codemirror",{attrs:{options:e.editorOptions},model:{value:e.form.bigDataConfig,callback:function(t){e.$set(e.form,"bigDataConfig",t)},expression:"form.bigDataConfig"}}),e._v(" "),e.bigDataConfigError?i("bc-tooltip",{attrs:{content:e.bigDataConfigError,placement:"top"}},[i("span",{staticClass:"bcui-icon-icon config-warnning"})]):e._e()],1)])]:e._e()]:e._e()],2),e._v(" "),i("bc-form-item",{attrs:{label:"Additional Parameters"}},[e._l(e.others,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-input",{staticStyle:{width:"240px","margin-right":"10px"},attrs:{placeholder:"key"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("bc-input",{staticStyle:{width:"240px"},attrs:{placeholder:"value"},model:{value:t.value,callback:function(i){e.$set(t,"value",i)},expression:"item.value"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeOther(t)}}},[e.others.length>1?i("bc-icon",{attrs:{type:"trash"}}):e._e()],1)],1)}),e._v(" "),i("div",[i("span",{staticClass:"text-link",on:{click:function(t){e.addOther()}}},[e._v("Add additional parameters")])])],2)],1):e._e()],1),e._v(" "),i("div",{staticClass:"config-result"},[i("div",{staticClass:"config-details"},[i("div",{staticClass:"title-default"},[e._v("Config Detail")]),e._v(" "),e._l(e.configResultArr,function(t,s){return i("div",{key:t.key+s,staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v(e._s(t.key))]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(t.value))])])}),e._v(" "),e._l(e.advanceConfig,function(t,s){return 1===e.form.apiType?i("div",{key:t.key+s,staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v(e._s(t.key))]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(t.value))])]):e._e()}),e._v(" "),e._l(e.writeConfig,function(t,s){return 3===e.form.consumeType?i("div",{key:t.key+s,staticClass:"detail-item"},[i("div",{staticClass:"detail-item-key"},[e._v(e._s(t.key))]),e._v(" "),i("div",{staticClass:"detail-item-value"},[e._v(e._s(t.value))])]):e._e()})],2)])]),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.handleCreateTopic}},[e._v("Submit")])],1)],2):e._e()};Fe._withStripped=!0;var We=i(118),He={name:"subscrib-create",mixins:[Re,ue],props:{value:{type:Boolean,default:!1},subscribe:{type:Object,default:function(){return{}}}},data:function(){return{editorOptions:{tabSize:4,mode:"text/javascript",theme:"base16-light",lineNumbers:!0,line:!0,lineWrapping:!0},title:"Create Subscription",formRule:We.createSub,form:{id:"",groupId:"",groupName:"",topicId:"",topicName:"",clusterId:"",clusterIds:[],maxTps:128,alarmType:0,alarmIsEnable:"",alarmMsgLag:"",alarmDelayTime:"",apiType:1,consumeTimeout:1e3,errorRetryTimes:3,retryIntervals:"50;100;150",msgType:1,enableGroovy:1,enableTransit:1,groovy:"",transit:"",enableOrder:1,orderKey:"",consumeType:1,urls:[],httpMethod:0,httpQueryParams:"",msgPushType:1,httpToken:"",pushMaxConcurrency:128,orderRemark:"",jsonPath:"",pressureTraffic:0,bigDataType:0,bigDataConfig:""},isSubmitting:!1,filterableGroups:[],filterableTopics:[],others:[{key:"",value:""}],transits:[{key:"",value:""}],queryParams:[{key:"",value:""}],loading:!1,subDesc:{},groupQueryLoading:!1,isShowAdvancedConfig:!1,urls:[{key:""}],iconForAdvancedConfig:"",isEditing:!1,bigDataConfigError:""}},computed:{show:{get:function(){var e=this;return this.value&&Object.keys(this.subscribe).length?(this.isEditing=!0,this.title="Edit Subscription",this.$nextTick(function(){e.formatData(e.subscribe)}),this.others=this.formatObject(this.subscribe.extraParams)):(this.isEditing=!1,this.title="Create Subscription"),this.value},set:function(){}},configResultArr:{get:function(){return[{key:"Consumer group",value:this.form.groupId?this.getGroupNameById(this.form.groupId,this.groupList):""},{key:"Topic",value:this.form.topicId?this.getTopicNameById(this.form.topicId,this.topicList):""},{key:"Consume maxTps",value:this.form.maxTps},{key:"Receive Pressure Traffic",value:1===this.form.pressureTraffic?"Enable":"Disable"},{key:"Api Level",value:1===this.form.apiType?"High level":"Low level"}]},set:function(){}},advanceConfig:{get:function(){return[{key:"Consume Timeout",value:this.form.consumeTimeout},{key:"Error Retry Times",value:this.form.errorRetryTimes},{key:"Retry Intervals",value:this.form.retryIntervals},{key:"Message Type",value:this.dictTranslate("topic","msgTypes",this.form.msgType)},{key:"Enable GroovyScript",value:this.dictTranslate("topic","groovyStates",this.form.enableGroovy)},{key:"Enable Transit",value:this.dictTranslate("topic","transitStates",this.form.enableTransit)},{key:"Enable Sequential Consume",value:this.dictTranslate("topic","orderStates",this.form.enableOrder)},{key:"Consume Type",value:this.dictTranslate("topic","consumeTypes",this.form.consumeType)},{key:"Basis Ordering rule",value:this.dictTranslate("topic","orderKeyTypes",this.form.orderKey)},{key:"HttpMethod",value:this.dictTranslate("topic","httpMethodTypes",this.form.httpMethod)},{key:"Http Token",value:this.form.httpToken},{key:"Push Concurrency",value:this.form.pushMaxConcurrency}]},set:function(){}},writeConfig:{get:function(){return[{key:"Write type",value:this.dictTranslate("topic","writeTypes",this.form.bigDataType)}]}}},methods:{addOther:function(){this.others.push({key:"",value:""})},removeOther:function(e){var t=this.others.indexOf(e);-1!==t&&this.others.splice(t,1)},toggleAdvancedConfig:function(){this.isShowAdvancedConfig?(this.isShowAdvancedConfig=!1,this.iconForAdvancedConfig="chevron-bottom"):(this.isShowAdvancedConfig=!0,this.iconForAdvancedConfig="chevron-top")},initData:function(){"daily"!==window.ENV&&"development"!==window.ENV||(this.form.maxTps=128,this.form.pushMaxConcurrency=16)},addConf:function(e){e.push({key:"",value:""})},removeConf:function(e,t){var i=t.indexOf(e);-1!==i&&t.splice(i,1)},addUrl:function(e){e.push({key:""})},removeUrl:function(e,t){var i=t.indexOf(e);-1!==i&&t.splice(i,1)},cancelCreateSub:function(){this.$router.push("/subscribes")},formatUrl:function(){return this.urls.map(function(e){return e.key})},handleCreateTopic:function(){var e=this,t=this.form;if(this.validateForm("form"))if(3===parseInt(t.consumeType,10)&&t.bigDataConfig&&this.bigDataConfigError)this.$notice.error({title:"写入配置选项,请填写正确的json格式",duration:0});else{this.isSave?this.isSaveButtonLoading=!0:this.isButtonLoading=!0;var i={user:"administration",subId:this.isEditing?t.subId:0,groupId:t.groupId,groupName:t.groupName||this.getGroupNameById(t.groupId),topicId:t.topicId,topicName:t.topicName||this.getTopicNameById(t.topicId),clusters:{ddmq:1},maxTps:Number(t.maxTps),alarmType:0,alarmIsEnable:1,alarmMsgLag:1e4,alarmDelayTime:3e5,apiType:t.apiType,extraParams:this.formatMap(this.others),queryParams:{},transit:{},httpQueryParams:{},urls:[],orderRemark:t.orderRemark,pressureTraffic:t.pressureTraffic};1===i.apiType&&(t.consumeTimeout&&(i.consumeTimeout=Number(t.consumeTimeout)),t.errorRetryTimes&&(i.errorRetryTimes=Number(t.errorRetryTimes)),t.retryIntervals&&(i.retryIntervals=t.retryIntervals.split(";").filter(function(e){return e})),i.msgType=t.msgType,1===i.msgType&&(i.enableGroovy=t.enableGroovy,0===t.enableGroovy&&t.groovy&&(i.groovy=t.groovy),i.enableTransit=t.enableTransit,0===t.enableTransit&&(i.transit=this.formatMap(this.transits)||null)),i.enableOrder=t.enableOrder,0===i.enableOrder&&("JsonPath"==t.orderKey?i.orderKey=t.jsonPath:i.orderKey=t.orderKey),i.consumeType=parseInt(t.consumeType,10),2===i.consumeType?(i.urls=this.formatUrl(),i.httpMethod=parseInt(t.httpMethod,10),i.httpQueryParams=this.formatMap(this.queryParams),i.msgPushType=parseInt(t.msgPushType,10),i.httpToken=t.httpToken,i.pushMaxConcurrency=parseInt(t.pushMaxConcurrency,10)):3===i.consumeType&&(i.bigDataType=t.bigDataType,i.bigDataConfig=t.bigDataConfig.trim(""))),this.createSub(i).then(function(t){e.isSaveButtonLoading=!1,e.isButtonLoading=!1,0===t.errno&&(e.cancel(),e.$root.bus.$emit("updateSubscribeList"))}).catch(function(){e.isSaveButtonLoading=!1,e.isButtonLoading=!1})}else this.$notice.error({title:"Please checkout form",duration:0})},filterTopics:function(e){var t=this,i=this.topicList;""!==e?(this.loading=!0,setTimeout(function(){t.loading=!1;var s=i.map(function(e){return{value:e.topicId,label:e.topicName}});t.filterableTopics=s.filter(function(t){return t.label.toLowerCase().indexOf(e.toLowerCase())>-1}).slice(0,99)},100)):this.filterableTopics=i.slice(0,99)},filterGroups:function(e){var t=this,i=this.groups;""!==e?(this.groupQueryLoading=!0,setTimeout(function(){t.groupQueryLoading=!1,t.filterableGroups=i.filter(function(t){return t.label.toLowerCase().indexOf(e.toLowerCase())>-1}).slice(0,99)},100)):this.filterableGroups=[]},getGroups:function(){var e=this;this.fetchGroupsWithOutPage({params:{user:"administration"}}).then(function(t){var i=t.data;e.groups=i.map(function(e){return{label:e.groupName,value:e.groupId}})})},getTopics:function(){var e=this;this.fetchTopicsWithOutPage({params:{user:"administration"}}).then(function(t){e.topicList=t.data})},getSubDesc:function(){var e=this;this.fetchSubDesc({params:{user:"administration"}}).then(function(t){e.subDesc=t.data})},getMsgPushTypes:function(){var e=this;this.fetchMsgPushType({params:{user:"administration"}}).then(function(t){var i=t.data;e.msgPushTypes=i.map(function(e){return{label:e.desc,value:e.id}})})},cancel:function(){this.isSubmitting=!1,this.others=[{key:"",value:""}],this.transits=[{key:"",value:""}],this.queryParams=[{key:"",value:""}],this.urls=[{key:""}],this.$refs.form.resetFields(),this.$emit("input",!1)},init:function(){this.getMsgPushTypes(),this.getGroups(),this.getTopics(),this.initData(),this.toggleAdvancedConfig()},getGroupNameById:function(e){var t="";return this.groups.forEach(function(i){i.value===e&&(t=i.label)}),t},getTopicNameById:function(e){var t="";return this.topicList.forEach(function(i){i.topicId===e&&(t=i.topicName)}),t},formatData:function(e){this.form=JSON.parse(JSON.stringify(e)),e.retryIntervals&&e.retryIntervals.length&&e.retryIntervals instanceof Array&&(this.form.retryIntervals=e.retryIntervals.join(";")),e.urls&&e.urls.length&&(this.urls=this.formatUrlObject(e.urls,this.urls)),e.httpQueryParams&&Object.keys(e.httpQueryParams).length&&(this.queryParams=this.formatObject(e.httpQueryParams,this.queryParams)),e.transit&&Object.keys(e.transit).length&&(this.transits=this.formatObject(e.transit,this.transits)),e.extraParams&&Object.keys(e.extraParams).length&&(this.others=this.formatObject(e.extraParams,this.others)),"QID"!=e.orderKey&&"KEY"!=e.orderKey&&(this.form.jsonPath=e.orderKey,this.form.orderKey="JsonPath")}},watch:{"form.bigDataConfig":function(e){if(e)try{JSON.parse(e),this.bigDataConfigError=""}catch(e){this.bigDataConfigError=e.message}else this.bigDataConfigError=""}},created:function(){this.init()},beforeMount:function(){},mounted:function(){}},Ke=(i(153),Object(P.a)(He,Fe,[],!1,null,null,null));Ke.options.__file="src/pages/subscribe/modals/create.vue";var Qe=Ke.exports,Ye=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{attrs:{width:552,title:e.title},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"modal-container"},[i("div",{staticClass:"modal-text subtitle"},[e._v(e._s(e.subTitle))]),e._v(" "),e.description?i("div",{staticClass:"modal-text description"},[e._v(e._s(e.description))]):e._e()]),e._v(" "),i("div",{staticClass:"modal-rect"},e._l(e.resources,function(t){return i("div",{key:t.id,staticClass:"modal-rect__item"},[e._v("\n "+e._s("Topic:"+t.topicName+", Consumer Group:"+t.groupName)+"\n ")])})),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.submit}},[e._v("Submit")])],1)],2):e._e()};Ye._withStripped=!0;var Je={name:"modal-enable-subscribe",mixins:[Re,ue],components:{},props:{value:{type:Boolean,default:!1},resources:{type:Array,required:!0},type:{type:String,required:!0,default:"enable"}},data:function(){return{isSubmitting:!1}},watch:{},computed:{title:function(){return this.typeDict[this.type].title},subTitle:function(){return this.typeDict[this.type].subTitle},description:function(){return this.typeDict[this.type].description},show:{get:function(){return this.value},set:function(){}},typeDict:function(){return{enable:{title:"Enable subscription",subTitle:"Are you sure to enable the following ".concat(this.resources.length," subscriptions?")},disable:{title:"Disable subscription",subTitle:"Are you sure to disable the following ".concat(this.resources.length," subscriptions?")},delete:{title:"Delete subscription",subTitle:"Are you sure to delete the following ".concat(this.resources.length," subscriptions?")}}}},methods:{cancel:function(){this.isSubmitting=!1,this.$emit("input",!1)},getEnablePromises:function(e){var t=this;return e.map(function(e){var i={subId:e.subId,user:"administration",state:0};return t.changeSubscribeState({params:i})})},getDisablePromises:function(e){var t=this;return e.map(function(e){var i={subId:e.subId,user:"administration",state:1};return t.changeSubscribeState({params:i})})},getDeletePromises:function(e){var t=this;return e.map(function(e){var i={subId:e.subId,user:"administration"};return t.deleteSubscribe({params:i})})},submit:function(){var e=this,t=this.resources;this.isSubmitting=!0;var i=[];switch(this.type){case"enable":i=this.getEnablePromises(t);break;case"disable":i=this.getDisablePromises(t);break;case"delete":i=this.getDeletePromises(t)}Promise.all(i).then(function(t){e.cancel(),e.$root.bus.$emit("updateSubscribeList"),t.every(function(e){return 0===e.errno})&&e.$notice.success({title:"Success"})}).finally(function(){e.isSubmitting=!1})}},mounted:function(){},beforeDestroy:function(){}},Xe=(i(154),Object(P.a)(Je,Ye,[],!1,null,null,null));Xe.options.__file="src/pages/subscribe/modals/manage.vue";var Ze={name:"groups",mixins:[Re,ue,ze],components:{detail:Ue,CreateModal:Qe,ManageSubModal:Xe.exports,messageDetail:Ce},data:function(){return{subscribeList:[],loading:!0,topicId:"",groups:[],pagination:{totalNum:0,curPage:1,pageSize:10},filter:{isSearchShow:!0,text:"",groupId:"",consumeType:"",state:"",groupName:"",clusterName:""},groupQueryLoading:!1,clusterQueryLoading:!1,filterableGroups:[],title:"",subscribeData:{},subscribeEditData:{},subscribeEnableData:{},detailStatus:!1,createSubscribeModalStatus:!1,manageSubModalStatus:!1,manageType:"",msgPushTypes:[],messageStatus:!1}},computed:{hasNoChecked:function(){return this.checkedTableItems.length<=0}},methods:{handleGetMessage:function(e){this.messageStatus=!0,this.title="Sampling( Topic:"+e.topicName+")",this.topicId=e.topicId},handleManageSubscribe:function(e){this.manageType=e,this.manageSubModalStatus=!0},handleDetail:function(e){this.detailStatus=!0,this.title="Subscription Detail",e.msgPushTypeDesc=this.getNameById(e.msgPushType,this.msgPushTypes),this.subscribeData=e},handleEditSubscribe:function(e){this.subscribeEditData=e,this.createSubscribeModalStatus=!0},handleCreateSubscribe:function(){this.subscribeEditData={},this.createSubscribeModalStatus=!0},cancel:function(){this.detailStatus=!1},handelSearch:function(){var e=this,t=this.filter;""!==t.text?(clearTimeout(this.timer),this.timer=setTimeout(function(){var i={text:t.text,clusterId:t.clusterId,clusterName:"ddmq",groupId:t.groupId,groupName:e.getNameById(t.groupId,e.groups),consumeType:t.consumeType,state:t.state,isSearchShow:t.isSearchShow};localStorage.setItem("subscribes_search_keyword",JSON.stringify(i)),e.getSubscribeList()},500)):(this.getSubscribeList(),localStorage.setItem("subscribes_search_keyword",""))},filterGroups:function(e){var t=this,i=this.groups;""!==e?(this.groupQueryLoading=!0,setTimeout(function(){t.groupQueryLoading=!1,t.filterableGroups=i.filter(function(t){return t.label.toLowerCase().indexOf(e.toLowerCase())>-1}).slice(0,99)},100)):this.filterableGroups=[]},showSearch:function(){this.filter.isSearchShow=!this.filter.isSearchShow},getConsumeState:function(e){var t=e.groupId,i=e.groupName;this.$router.push("/group/consume/".concat(t,"/").concat(i))},getMessages:function(e,t){this.$router.push("/message/".concat(e,"/").concat(t))},getSubscribeList:function(e){var t=this,i=this.pagination,s=this.filter;e=Object.assign({},{curPage:i.curPage,pageSize:i.pageSize,text:s.text,clusterId:1,groupId:s.groupId,consumeType:s.consumeType,state:s.state,user:"administration"},e),this.loading=!0,this.fetchSubscribeList({params:e}).then(function(e){t.subscribeList=e.data.list,t.subscribeList.forEach(function(e){var i=Object.keys(e.clusters);t.$set(e,"clusterId",e.clusters[i[0]]),t.$set(e,"clusterName",i[0])}),t.pagination.totalNum=e.data.totalSize,t.loading=!1}).catch(function(){t.loading=!1})},refreshWhenPageChange:function(e){this.pagination.curPage=e,this.getSubscribeList()},refreshWhenPageSizeChange:function(e){this.pagination.pageSize=e,this.getSubscribeList()},getGroups:function(){var e=this;this.fetchGroupsWithOutPage({params:{user:"administration"}}).then(function(t){e.groupList=t.data,e.groups=e.groupList.map(function(e){return{label:e.groupName,value:e.groupId}}),e.filter.groupId&&(e.filter.groupName=e.getNameById(e.filter.groupId,e.groups))})},initSearchParams:function(){var e=this,t=localStorage.getItem("subscribes_search_keyword");t?(t=JSON.parse(t),Object.keys(this.filter).forEach(function(i){var s=t[i];void 0!==s&&(e.filter[i]=s)}),this.getSubscribeList()):this.getSubscribeList()},getMsgPushTypes:function(){var e=this;this.fetchMsgPushType({params:{user:"administration"}}).then(function(t){var i=t.data;e.msgPushTypes=i.map(function(e){return{label:e.desc,value:e.id}})})},updateSubscribeList:function(){this.getSubscribeList(),this.clearCheckTableRows()},init:function(){this.initSearchParams(),this.getMsgPushTypes(),this.getGroups(),this.$root.bus.$on("updateSubscribeList",this.updateSubscribeList)},goTopicEdit:function(e){this.$router.push("/topics/create/".concat(e))},goToCreateSub:function(){this.$router.push("/subscribe/create")}},watch:{},mounted:function(){if(Object.keys(this.$route.query).length){var e=this.$route.query.groupId;localStorage.setItem("subscribes_search_keyword",""),this.filter.groupId=e}this.init()}},et=(i(155),Object(P.a)(Ze,Ae,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"block-header"},[t("div",{staticClass:"block-header__title"},[this._v("Subscription List")])])}],!1,null,null,null));et.options.__file="src/pages/subscribe/index.vue";var tt=[{path:"/subscribes",name:"subscribes",component:et.exports}],it=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"container group-index"},[i("div",{staticClass:"block"},[e._m(0),e._v(" "),i("div",{staticClass:"block-body"},[i("div",{staticClass:"bcui-table-toolbar"},[i("div",{staticClass:"bcui-table-toolbar__item pull-left"},[i("bc-button",{attrs:{icon:"refresh",type:"gray"},on:{click:e.getGroupList}}),e._v(" "),i("bc-button",{attrs:{icon:"plus",type:"primary"},on:{click:e.handleCreateGroup}},[e._v("Consumer Group\n ")]),e._v(" "),i("bc-button-group",[i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageGroup("enable")}}},[e._v("Enable\n ")]),e._v(" "),i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageGroup("disable")}}},[e._v("Disable\n ")])],1),e._v(" "),i("bc-button",{attrs:{type:"gray",disabled:e.hasNoChecked},on:{click:function(t){e.handleManageGroup("delete")}}},[e._v("Delete\n ")])],1),e._v(" "),i("div",{staticClass:"bcui-table-toolbar__item pull-right"},[i("bc-input",{attrs:{icon:"search",width:200,placeholder:"search"},on:{"on-change":function(t){e.handelSearch()}},model:{value:e.filter.text,callback:function(t){e.$set(e.filter,"text",t)},expression:"filter.text"}})],1)]),e._v(" "),i("bc-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],ref:"table",class:["bcui-table--circular","bcui-table--dark"],attrs:{tableData:e.groupList,border:!1,pagination:!1,check:!0,checkAll:!0,"empty-text":"No data"},on:{"on-check":e.handleCheckTableRow,"on-check-all":e.handleCheckTableAll}},[i("bc-table-column",{attrs:{field:"groupName",index:"groupName",label:"Consumer Group"}}),e._v(" "),i("bc-table-column",{attrs:{field:"subscriptionNum",index:"subscriptionNum",label:"Subscription Number"}}),e._v(" "),i("bc-table-column",{attrs:{field:"subscriptionEnableNum",index:"subscriptionEnableNum",label:"Enabled Subscription Number"}}),e._v(" "),i("bc-table-column",{attrs:{field:"operate",index:"operate",label:"Operation",width:"430px"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("router-link",{staticClass:"text-link",attrs:{to:{name:"subscribes",query:{groupId:t.record.groupId}}}},[e._v("Subscriptions")]),e._v(" "),i("a",{class:["text-link",t.record.subscriptionNum?"":"disable-text-link"],attrs:{href:""},on:{click:function(i){i.preventDefault(),e.handleConsume(t.record)}}},[e._v("Consume Progress")]),e._v(" "),i("a",{class:["text-link"],on:{click:function(i){e.handleEditGroup(t.record)}}},[e._v("Edit Consumer Group")])]}}])})],1)],1),e._v(" "),i("div",{staticClass:"bcui-table-toolbar clearfix"},[i("div",{staticClass:"bcui-table-toolbar__item pull-right"},[0!==e.groupList.length?i("bc-pagination",{attrs:{"show-sizer":"","show-total":"","page-size":this.pagination.pageSize,total:this.pagination.totalNum},on:{"on-change":e.refreshWhenPageChange,"on-page-size-change":e.refreshWhenPageSizeChange}}):e._e()],1)])]),e._v(" "),i("CreateGroupModal",{attrs:{group:e.groupEditData},model:{value:e.createGroupModalStatus,callback:function(t){e.createGroupModalStatus=t},expression:"createGroupModalStatus"}}),e._v(" "),i("ManageGroupModal",{attrs:{type:e.manageType,resources:e.checkedTableItems},model:{value:e.manageSubModalStatus,callback:function(t){e.manageSubModalStatus=t},expression:"manageSubModalStatus"}})],1)};it._withStripped=!0;var st={methods:{request:ne,fectchGroupList:function(e){return this.request("get","/carrera/api/console/group/listAll",e)},createGroup:function(e){return this.request("post","/carrera/api/console/group/create",e)},deleteGroup:function(e){return this.request("get","/carrera/api/odin/internal/deleteGroup",e)},changeAllSubscribeState:function(e){return this.request("get","/carrera/api/console/group/changeState",e)},changeAlarmState:function(e){return this.request("get","/carrera/api/console/group/changeAlarmState",e)},getTopicConsumeState:function(e){return this.request("get","/carrera/api/console/group/consumeState",e)},getTopicsByGroupId:function(e){return this.request("get","/carrera/api/console/group/consumeState/searchItemList",e)},resetOffset:function(e){return this.request("get","/carrera/api/console/group/resetOffset",e)},getGroupDesc:function(e){return this.request("get","/carrera/api/console/common/group/fieldDesc",e)}}},at=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{staticClass:"create-group-modal",attrs:{title:e.title,offsetTop:40,width:610},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"group-create"},[i("bc-form",{ref:"form",staticClass:"clearfix",attrs:{width:540,model:e.form,rules:e.formRule,labelAlign:"top"}},[i("bc-form-item",{attrs:{label:"Consumer Group:",prop:"groupName"}},[i("bc-input",{attrs:{disabled:e.isEditing,placeholder:"Please input Consumer Group"},model:{value:e.form.groupName,callback:function(t){e.$set(e.form,"groupName",t)},expression:"form.groupName"}},[i("span",{attrs:{slot:"prepend"},slot:"prepend"},[e._v("cg_")])])],1),e._v(" "),i("div",{staticClass:"alert-message"},[i("div",[e._v("1. The Consumer Group name can contain only letters, numbers, underscore(_)and dashes(-)")]),e._v(" "),i("div",[e._v("2. Once created can't modify the Consumer Group name")])]),e._v(" "),i("bc-form-item",{attrs:{label:"Additional Parameters"}},[e._l(e.others,function(t,s){return i("div",{key:s,staticClass:"conf-margin"},[i("bc-input",{staticStyle:{width:"240px","margin-right":"10px"},attrs:{placeholder:"key"},model:{value:t.key,callback:function(i){e.$set(t,"key",i)},expression:"item.key"}}),e._v(" "),i("bc-input",{staticStyle:{width:"240px"},attrs:{placeholder:"value"},model:{value:t.value,callback:function(i){e.$set(t,"value",i)},expression:"item.value"}}),e._v(" "),i("span",{staticClass:"form-icon-operate",on:{click:function(i){e.removeOther(t)}}},[e.others.length>1?i("bc-icon",{attrs:{type:"trash"}}):e._e()],1)],1)}),e._v(" "),i("div",[i("span",{staticClass:"text-link",on:{click:function(t){e.addOther()}}},[e._v("Add additional parameters")])])],2)],1)],1),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.handleCreateGroup}},[e._v("Submit")])],1)],2):e._e()};at._withStripped=!0;var nt=i(119),ot={name:"create-group-modal",mixins:[st,ue],components:{},props:{value:{type:Boolean,default:!1},group:{type:Object,default:function(){return{}}}},data:function(){return{title:"Create Consumer Group",isSubmitting:!1,isEditing:!1,others:[{key:"",value:""}],form:{groupId:"",groupName:""},formRule:nt.createGroup,topicDesc:{},showConfOperationParams:!1}},computed:{show:{get:function(){var e=this;return this.value&&Object.keys(this.group).length&&(this.isEditing=!0,this.title="Edit Consumer Group",this.$nextTick(function(){e.form=JSON.parse(JSON.stringify(e.group)),e.form.groupName=e.form.groupName.replace("cg_","")}),this.others=this.formatObject(this.group.extraParams)),this.value},set:function(){}}},methods:{cancel:function(){this.isSubmitting=!1,this.isEditing=!1,this.title="Create Consumer Group",this.others=[{key:"",value:""}],this.$refs.form.resetFields(),this.$emit("input",!1)},addOther:function(){this.others.push({key:"",value:""})},removeOther:function(e){var t=this.others.indexOf(e);-1!==t&&this.others.splice(t,1)},handleCreateGroup:function(){var e=this,t=this.form;if(!this.validateForm("form"))return this.isSaveLoading=!1,void this.$notice.error({title:"Please checkout form",duration:0});this.isSubmitting=!0;var i={user:"administration",groupId:this.isEditing?t.groupId:0,groupName:"cg_"+t.groupName,service:"Engineering",department:"Software",contacters:"administration;",alarmGroup:null,alarmLevel:1,alarmIsEnable:1,alarmMsgLag:1e4,alarmDelayTime:3e5,extraParams:{},broadcastConsume:1,consumeMode:1,consumeModeMapper:null,operationParams:null};i.extraParams=this.formatMap(this.others),this.createGroup(i).then(function(t){0===t.errno&&(e.$root.bus.$emit("updateGroupList"),e.cancel())}).finally(function(){e.isSaveLoading=!1,e.isSubmitting=!1})}},mounted:function(){}},rt=(i(156),Object(P.a)(ot,at,[],!1,null,null,null));rt.options.__file="src/pages/group/modals/create.vue";var ct=rt.exports,lt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{attrs:{width:552,title:e.title},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"modal-container"},[i("div",{staticClass:"modal-text subtitle"},[e._v(e._s(e.subTitle))]),e._v(" "),e.description?i("div",{staticClass:"modal-text description"},[e._v(e._s(e.description))]):e._e()]),e._v(" "),i("div",{staticClass:"modal-rect"},e._l(e.resources,function(t){return i("div",{key:t.id,staticClass:"modal-rect__item"},[e._v("\n "+e._s("Consumer Group:"+t.groupName)+"\n ")])})),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.submit}},[e._v("Submit")])],1)],2):e._e()};lt._withStripped=!0;var ut={name:"modal-enable-group",mixins:[st,ue],components:{},props:{value:{type:Boolean,default:!1},resources:{type:Array,required:!0},type:{type:String,required:!0,default:"enable"}},data:function(){return{isSubmitting:!1}},watch:{},computed:{title:function(){return this.typeDict[this.type].title},subTitle:function(){return this.typeDict[this.type].subTitle},description:function(){return this.typeDict[this.type].description},show:{get:function(){return this.value},set:function(){}},typeDict:function(){return{enable:{title:"Enable All subscription",subTitle:"Are you sure to enable all subscription under the following ".concat(this.resources.length," consumer groups?")},disable:{title:"Disable All subscription",subTitle:"Are you sure to disable all subscription under the following ".concat(this.resources.length," consumer groups?")},disableAlarm:{title:"Disable alarm",subTitle:"Are you sure to disable alarm the following ".concat(this.resources.length," consumer groups?")},enableAlarm:{title:"Enable alarm",subTitle:"Are you sure to enable alarm the following ".concat(this.resources.length," consumer groups?")},delete:{title:"Delete group",subTitle:"Are you sure to delete the following ".concat(this.resources.length," consumer groups?")}}}},methods:{cancel:function(){this.isSubmitting=!1,this.$emit("input",!1)},getEnablePromises:function(e){var t=this;return e.map(function(e){var i={groupId:e.groupId,user:"administration",state:0};return t.changeAllSubscribeState({params:i})})},getDisablePromises:function(e){var t=this;return e.map(function(e){var i={groupId:e.groupId,user:"administration",state:1};return t.changeAllSubscribeState({params:i})})},getDeletePromises:function(e){var t=this;return e.map(function(e){var i={groupId:e.groupId,user:"administration"};return t.deleteGroup({params:i})})},getDisableAlarmPromises:function(e){var t=this;return e.map(function(e){var i={groupId:e.groupId,user:"administration",state:1};return t.changeAlarmState({params:i})})},getEnableAlarmPromises:function(e){var t=this;return e.map(function(e){var i={groupId:e.groupId,user:"administration",state:0};return t.changeAlarmState({params:i})})},submit:function(){var e=this,t=this.resources;this.isSubmitting=!0;var i=[];switch(this.type){case"enable":i=this.getEnablePromises(t);break;case"disable":i=this.getDisablePromises(t);break;case"delete":i=this.getDeletePromises(t);break;case"disableAlarm":i=this.getDisableAlarmPromises(t);break;case"enableAlarm":i=this.getEnableAlarmPromises(t)}Promise.all(i).then(function(t){e.cancel(),e.$root.bus.$emit("updateGroupList"),t.every(function(e){return 0===e.errno})&&e.$notice.success({title:"Success"})}).finally(function(){e.isSubmitting=!1})}},mounted:function(){},beforeDestroy:function(){}},dt=(i(157),Object(P.a)(ut,lt,[],!1,null,null,null));dt.options.__file="src/pages/group/modals/manage.vue";var pt={name:"groups",mixins:[st,ue,ze],components:{CreateGroupModal:ct,ManageGroupModal:dt.exports},data:function(){return{groupList:[],groupIds:[],loading:!0,pagination:{totalNum:0,curPage:1,pageSize:10},filter:{text:""},createGroupModalStatus:!1,detailStatus:!1,groupId:0,groupName:"",title:"",groupData:{},groupEditData:{},manageType:"",manageSubModalStatus:!1}},computed:{hasNoChecked:function(){return this.checkedTableItems.length<=0}},methods:{handleManageGroup:function(e){this.manageType=e,this.manageSubModalStatus=!0},handelDetail:function(e){this.detailStatus=!0,this.title=e.groupName,this.groupData=e},handleEditGroup:function(e){this.createGroupModalStatus=!0,this.groupEditData=e},handleCreateGroup:function(){this.createGroupModalStatus=!0,this.groupEditData={}},cancel:function(){this.detailStatus=!1},handelSearch:function(){var e=this,t=this.filter;""!==t.text?(clearTimeout(this.timer),this.timer=setTimeout(function(){var i={text:t.text};localStorage.setItem("group_search_keyword",JSON.stringify(i)),e.getGroupList()},500)):(this.getGroupList(),localStorage.setItem("group_search_keyword",""))},addSubscribe:function(e){var t={groupId:e.groupId,groupName:e.groupName};this.$router.push({name:"group-sub-create",query:{groupdata:JSON.stringify(t)}})},handleConsume:function(e){var t=e.groupId,i=e.groupName;this.$router.push("/group/".concat(t,"/").concat(i))},getGroupList:function(e){var t=this,i=this.pagination;e=Object.assign({},{curPage:i.curPage,pageSize:i.pageSize,text:this.filter.text,user:"administration"},e),this.loading=!0,this.fectchGroupList({params:e}).then(function(e){t.groupList=e.data.list,t.pagination.totalNum=e.data.totalSize,t.loading=!1}).catch(function(){t.loading=!1})},refreshWhenPageChange:function(e){this.pagination.curPage=e,this.getGroupList()},refreshWhenPageSizeChange:function(e){this.pagination.pageSize=e,this.getGroupList()},initSearchParam:function(){var e=localStorage.getItem("group_search_keyword");e?(this.keyword=e,this.getGroupList()):this.getGroupList()},updateGroupList:function(){this.getGroupList(),this.clearCheckTableRows()},init:function(){this.initSearchParam(),this.$root.bus.$on("updateGroupList",this.updateGroupList)}},watch:{},mounted:function(){this.init()}},ht=(i(158),Object(P.a)(pt,it,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"block-header"},[t("div",{staticClass:"block-header__title"},[this._v("Consumer Group List")])])}],!1,null,null,null));ht.options.__file="src/pages/group/index.vue";var ft=ht.exports,mt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"content"},[i("div",{staticClass:"detail-block"},[i("div",{staticClass:"detail-block-nav clearfix"},[i("div",{staticClass:"detail-block-nav__back",on:{click:e.goBack}},[i("bc-icon",{attrs:{type:"chevron-left"}}),i("span",[e._v("Back to list")])],1)]),e._v(" "),i("div",{staticClass:"detail-block-header"},[i("div",{staticClass:"detail-info"},[i("div",{staticClass:"detail-title"},[i("div",{staticClass:"detail-title__value"},[e._v("consume progress ("+e._s("Consume group:"+e.groupName)+")")])])])])]),e._v(" "),i("div",{staticClass:"detail-block-body"},[i("div",{staticClass:"bcui-table-toolbar"},[i("div",{staticClass:"bcui-table-toolbar__item pull-left"},[i("bc-button",{attrs:{icon:"refresh",type:"gray"},on:{click:e.handelSearch}}),e._v(" "),i("bc-button",{attrs:{type:"primary"},on:{click:function(t){e.resetToNew()}}},[e._v("\n Reset to Latest\n ")]),e._v(" "),i("bc-button",{attrs:{type:"primary"},on:{click:function(t){e.resetToDate()}}},[e._v("\n Reset By Time\n ")]),e._v(" "),i("div",{staticClass:"custom-date-picker reset-time"},[i("input",{staticClass:"bcui-inputfield__input",attrs:{width:300,type:"text","data-input":"",readonly:"",placeholder:"Reset time"}}),e._v(" "),i("span",{staticClass:"input-button",attrs:{title:"toggle","data-clear":""},on:{click:function(t){e.clearTime("resetTime")}}},[e.filter.resetTime?i("i",{staticClass:"clear bcui-icon-information-fail"}):e._e()]),e._v(" "),i("span",{staticClass:"input-button",attrs:{title:"clear","data-toggle":""}},[e.filter.resetTime?e._e():i("i",{staticClass:"trigger-icon bcui-icon-calendar"})])])],1),e._v(" "),i("div",{staticClass:"bcui-table-toolbar__item pull-right"},[i("span",{staticClass:"bcui-table-toolbar__item-label"},[e._v("Topic")]),e._v(" "),i("bc-select",{attrs:{width:200,placeholder:"Please input topic"},model:{value:e.filter.topicId,callback:function(t){e.$set(e.filter,"topicId",t)},expression:"filter.topicId"}},e._l(e.topics,function(t){return i("bc-option",{key:t.id,attrs:{value:t.value}},[e._v(e._s(t.label))])})),e._v(" "),i("bc-input",{attrs:{icon:"search",width:150,placeholder:"search"},on:{"on-change":function(t){e.handelSearch()}},model:{value:e.filter.text,callback:function(t){e.$set(e.filter,"text",t)},expression:"filter.text"}})],1)]),e._v(" "),i("bc-table",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],class:["bcui-table--circular","bcui-table--dark"],attrs:{tableData:e.renderData,border:!1,rowEdit:!0,"empty-text":"No data",pagination:!1}},[i("bc-table-column",{attrs:{field:"topicName",index:"topicName",label:"Topic"}}),e._v(" "),i("bc-table-column",{attrs:{field:"qid",index:"qid",label:"Qid"}}),e._v(" "),i("bc-table-column",{attrs:{field:"minOffset",index:"minOffset",label:"MinOffset"}}),e._v(" "),i("bc-table-column",{attrs:{field:"maxOffset",index:"maxOffset",label:"MaxOffset"}}),e._v(" "),i("bc-table-column",{attrs:{field:"consumeOffset",index:"consumeOffset",label:"ConsumerOffset"}}),e._v(" "),i("bc-table-column",{attrs:{field:"lag",index:"lag",label:"Lag"}}),e._v(" "),i("bc-table-column",{attrs:{field:"reset",index:"reset",label:"Reset offset",width:"200px"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"table-icon"},[t.record.show?e._e():i("a",{staticClass:"bcui-icon-pencil text-link table-icon-edit",on:{click:function(i){e.showInput(t.record)}}}),e._v(" "),t.record.show?i("bc-input",{staticClass:"table-input",attrs:{type:"number"},model:{value:t.record.offset,callback:function(i){e.$set(t.record,"offset",i)},expression:"scope.record.offset"}}):e._e()],1)]}}])}),e._v(" "),i("bc-table-column",{attrs:{field:"submit",index:"submit",label:"",width:"150px"},scopedSlots:e._u([{key:"default",fn:function(t){return[i("div",{staticClass:"table-icon"},[t.record.show?i("a",{class:["text-link"],on:{click:function(i){e.submit(t.record)}}},[e._v("Submit")]):e._e(),e._v(" "),t.record.show?i("a",{class:["text-link"],on:{click:function(i){e.cancel(t.record)}}},[e._v("Cancel")]):e._e()])]}}])})],1)],1),e._v(" "),i("consume-modal",{attrs:{type:e.manageType,params:e.manangeParams,resource:e.resource},model:{value:e.manageConsumeStatus,callback:function(t){e.manageConsumeStatus=t},expression:"manageConsumeStatus"}})],1)};mt._withStripped=!0;var vt=i(120),bt=i.n(vt),gt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("bc-modal",{attrs:{width:552,title:e.title},on:{"on-cancel":e.cancel},model:{value:e.show,callback:function(t){e.show=t},expression:"show"}},[i("div",{staticClass:"modal-container"},[i("div",{staticClass:"modal-text subtitle"},[e._v(e._s(e.subTitle))]),e._v(" "),e.description?i("div",{staticClass:"modal-text description"},[e._v(e._s(e.description))]):e._e()]),e._v(" "),i("template",{slot:"footer"},[i("bc-button",{on:{click:e.cancel}},[e._v("Cancel")]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.isSubmitting},on:{click:e.submit}},[e._v("Submit")])],1)],2):e._e()};gt._withStripped=!0;var _t={name:"modal-manage-consume",mixins:[st,ue],components:{},props:{value:{type:Boolean,default:!1},resource:{type:Object,required:!0},params:{type:Object,required:!0},type:{type:String,required:!0,default:"enable"}},data:function(){return{isSubmitting:!1}},watch:{},computed:{title:function(){return this.typeDict[this.type].title},subTitle:function(){return this.typeDict[this.type].subTitle},description:function(){return this.typeDict[this.type].description},show:{get:function(){return this.value},set:function(){}},typeDict:function(){return{resetValue:{title:"Reset offset",subTitle:"Are you sure to reset offset to specified value ?",description:"Topic: ".concat(this.resource.topicName,", reset offset value to ").concat(this.resource.offset)},resetToNew:{title:"Reset offset",subTitle:"Are you sure to reset offset to newest ?",description:"Topic: ".concat(this.resource.topicName)},resetToTime:{title:"Reset offset",subTitle:"Are you sure to reset offset to specified time ?",description:"Topic: ".concat(this.resource.topicName,", reset offset to ").concat(this.params.resetTime,"?")}}}},methods:{cancel:function(){this.isSubmitting=!1,this.$emit("input",!1)},submit:function(){var e=this,t=this.params;t.user="administration",this.isSubmitting=!0,this.resetOffset({params:t}).then(function(t){0===t.errno&&(e.$notice.success({title:"success"}),e.$root.bus.$emit("updateConsumeList"),e.cancel())}).finally(function(){e.isSubmitting=!1})}},mounted:function(){},beforeDestroy:function(){}},yt=(i(159),Object(P.a)(_t,gt,[],!1,null,null,null));yt.options.__file="src/pages/group/modals/consume-manage.vue";var St={name:"group-consume",mixins:[st,ue],components:{consumeModal:yt.exports},data:function(){return{manageConsumeStatus:!1,manageType:"",resource:{},manangeParams:{},isTopicConsume:!1,renderData:[],loading:!0,topics:[],clusters:[],groupName:"",groupId:"",filter:{clusterId:"",topicId:"",resetTime:""},clusterName:"",topicName:""}},methods:{goBack:function(){this.isTopicConsume?this.$router.push({name:"subscribes"}):this.$router.push({name:"groups"})},showInput:function(e){e.show=!0},cancel:function(e){e.show=!1},getConsumeList:function(e){var t=this,i=this.filter;e=Object.assign({},{clusterId:1,topicId:i.topicId,groupId:this.groupId,user:"administration"},e),this.topicName=this.getNameById(i.topicId,this.topics),this.loading=!0,this.getTopicConsumeState({params:e}).then(function(e){t.renderData=e.data,t.renderData.forEach(function(e){t.filter.clusterId=t.filter.clusterId||e.clusterId,t.filter.topicId=t.filter.topicId||e.topicId,e.show=!1}),t.loading=!1}).catch(function(){t.loading=!1})},handelSearch:function(){this.getConsumeList()},init:function(){this.getConsumeList(),this.$root.bus.$on("updateConsumeList",this.getConsumeList)},submit:function(e){if(this.filter.topicId)if(e.offset)if(isNaN(e.offset)||e.offset<0)this.$notice.error({title:"Reset value must be Number"});else{var t=this.filter;this.manangeParams={resetType:3,qid:e.qid,offset:e.offset,clusterId:1,topicId:t.topicId,groupId:this.groupId},this.resource=e,this.manageConsumeStatus=!0,this.manageType="resetValue"}else this.$notice.error({title:"Please input reset value"});else this.$notice.error({title:"Please select topic"})},resetToNew:function(e){if(this.filter.topicId){var t=this.filter;this.manangeParams={resetType:1,clusterId:1,topicId:t.topicId,groupId:this.groupId},this.topicName=this.getNameById(t.topicId,this.topics),this.$set(this.resource,"topicName",this.topicName),this.manageConsumeStatus=!0,this.manageType="resetToNew"}else this.$notice.error({title:"Please select topic"})},resetToDate:function(e){if(this.filter.topicId)if(this.filter.resetTime){var t=this.filter;this.manangeParams={resetType:2,resetTime:t.resetTime,clusterId:1,topicId:t.topicId,groupId:this.groupId},this.topicName=this.getNameById(t.topicId,this.topics),this.$set(this.resource,"topicName",this.topicName),this.manageConsumeStatus=!0,this.manageType="resetToTime"}else this.$notice.error({title:"Please select reset date"});else this.$notice.error({title:"Please select topic"})},clearTime:function(e){this.filter[e]=""},fetchTopicsAndClusters:function(e){var t=this,i={groupId:e,user:"administration"};this.getTopicsByGroupId({params:i}).then(function(e){var i=e.data;t.clusters=i.cluster.map(function(e){return{label:e.desc,value:e.id}}),t.topics=i.topic.map(function(e){return{label:e.desc,value:e.id}});var s=!0,a=!1,n=void 0;try{for(var o,r=t.topics[Symbol.iterator]();!(s=(o=r.next()).done);s=!0){var c=o.value;c.value===t.filter.topicId&&(t.topicName=c.label)}}catch(e){a=!0,n=e}finally{try{s||null==r.return||r.return()}finally{if(a)throw n}}})}},mounted:function(){var e=this,t=this.$route.params,i=t.id,s=t.name;if(this.groupName=s,this.groupId=i,Object.keys(this.$route.query).length){var a=this.$route.query.topicId;this.isTopicConsume=!0,this.filter.topicId=a,this.filter.clusterId=1}this.fetchTopicsAndClusters(this.groupId),bt()(".reset-time",{static:!0,time_24hr:!0,wrap:!0,enableTime:!0,enableSeconds:!0,dateFormat:"Y-m-d H:i:S",onClose:function(t,i,s){e.filter.resetTime=i}}),this.init()}},Ct=(i(160),Object(P.a)(St,mt,[],!1,null,null,null));Ct.options.__file="src/pages/group/consume.vue";var kt=[{path:"/groups",name:"groups",component:ft},{path:"/group/:id/:name",name:"consume",component:Ct.exports}],wt=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"layout layout-has-sidebar",attrs:{id:"app"}},[t("sidebar"),this._v(" "),t("div",{staticClass:"layout"},[t("div",{staticClass:"layout-content"},[t("router-view")],1)])],1)};wt._withStripped=!0;var xt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classes},[i("div",{staticClass:"sidebar-inner"},[i("div",{staticClass:"sidebar-menu"},[i("bc-menu",{attrs:{accordion:!0,router:!0,mode:"vertical",shrink:e.shrinkStatus}},[i("bc-menu-item",{attrs:{name:"/",routeName:["index"]}},[i("embed",{staticClass:"sidebar-logo",attrs:{src:"ddmq-logo.svg",width:"20",height:"20"}}),e._v(" "),i("span",[e._v("DDMQ Console")])]),e._v(" "),i("bc-menu-item",{attrs:{name:"/topics",routeName:["topics","topicDetail","topic-group-detail","topic-statistic-detail"]}},[i("i",{staticClass:"icon bcui-icon-topic1 prefix-icon"}),e._v(" "),i("span",[e._v("Topic")])]),e._v(" "),i("bc-menu-item",{attrs:{name:"/groups",routeName:["groups","consume"]}},[i("i",{staticClass:"bcui-icon-topic prefix-icon"}),e._v(" "),i("span",[e._v("Consumer Group")])]),e._v(" "),i("bc-menu-item",{attrs:{name:"/subscribes",routeName:["subscribes"]}},[i("i",{staticClass:"icon bcui-icon-shoucang prefix-icon"}),e._v(" "),i("span",[e._v("Subscription")])])],1)],1),e._v(" "),i("div",{staticClass:"bcui-menu-item logout-button",on:{click:e.confirmLogout}},[i("i",{staticClass:"icon bcui-icon-power-off prefix-icon"}),e._v(" "),i("span",[e._v("Logout")])])])])};xt._withStripped=!0;var Tt={methods:{request:ne,requestPostLogin:function(e){return this.request("get","/carrera/api/odin/internal/login",e)},requestPostLogout:function(e){return this.request("get","/carrera/api/odin/internal/logout",e)}}},$t=s.getToken,Pt=s.removeToken,Et={name:"sidebar",mixins:[Tt],components:{},props:{},data:function(){return{shrinkStatus:!1}},computed:{classes:function(){return["sidebar",{"sidebar--shrink":this.shrinkStatus}]}},methods:{gotoIndex:function(){this.$router.push({name:"topics"})},confirmLogout:function(){this.$modal.confirm({title:"Logout",content:"

Are you sure to logout?

",showCancel:!0,okText:"Confirm",cancelText:"Cancel",onOk:this.gotoLogin,onCancel:function(){}})},gotoLogin:function(){var e=this;this.requestPostLogout({params:{username:$t()}}).then(function(){Pt(),e.$router.push({name:"login"})})}},created:function(){},mounted:function(){}},It=(i(161),Object(P.a)(Et,xt,[],!1,null,null,null));It.options.__file="src/components/sidebar/index.vue";var Nt=It.exports,Ot={name:"app",data:function(){return{}},components:{Sidebar:Nt},methods:{}},Bt=(i(162),Object(P.a)(Ot,wt,[],!1,null,"5e2104ef",null));Bt.options.__file="src/components/main/main.vue";var Dt=Bt.exports,jt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"introduce"},[e._m(0),e._v(" "),i("div",{staticClass:"introduce-body"},[i("div",{staticClass:"introduce-body-title"},[e._v("\n Features\n ")]),e._v(" "),i("bc-row",[i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v(" Messaging model: support both P2P and Pub/Sub messaging model")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v(" Massive message storage, support RocketMQ and Kafka as storage engine")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("Low latency & High throughput")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("Delay message, use RocksDB as storage engine")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("Transactional message: provide transaction similar to X/Open XA")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("Multiple language client SDK: provide client SDK in PHP, Java, Go, C/C++, Python")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("Message transition and filter with user-defined Groovy script")])])]),e._v(" "),i("bc-col",{attrs:{span:"12"}},[i("div",{staticClass:"introduce-body-text"},[i("li",[e._v("An easy-to-use Web Console")])])])],1)],1)])};jt._withStripped=!0;i(163);var Mt=Object(P.a)({},jt,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"introduce-header"},[t("img",{attrs:{src:"logo-with-text.png",width:"128",height:"38"}}),this._v(" "),t("div",{staticClass:"introduce-header-text"},[this._v("\n DDMQ is a distributed messaging product built by DiDi Infrastructure Team based on "),t("a",{attrs:{href:"https://rocketmq.apache.org/",target:"_blank"}},[this._v("Apache RocketMQ")]),this._v(". As a distributed messaging middleware, DDMQ provides low latency, high throughput and high availability messaging service to many important systems inside "),t("a",{attrs:{href:"https://www.didiglobal.com/",target:"_blank"}},[this._v("DiDi")]),this._v(". DDMQ provides realtime messaging, delay-time messaging and transactional messaging to satisfy different scenarios. Through an easy-to-use Web Console and simple SDK Client, developers can experience producing and consuming messages in the most simple and stable way.\n ")])])}],!1,null,null,null);Mt.options.__file="src/pages/introduce.vue";var Lt=Mt.exports,At=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"login"},[i("div",{staticClass:"container"},[e._m(0),e._v(" "),i("bc-form",{ref:"loginForm",attrs:{rules:e.rules,model:e.form}},[i("bc-form-item",{attrs:{"label-width":0,prop:"username"}},[i("bc-input",{attrs:{placeholder:"Username"},model:{value:e.form.username,callback:function(t){e.$set(e.form,"username",t)},expression:"form.username"}}),e._v(" "),i("check-mark",{attrs:{valid:e.valid.username}})],1),e._v(" "),i("bc-form-item",{attrs:{"label-width":0,prop:"password"}},[i("bc-input",{attrs:{type:"password",placeholder:"Password"},nativeOn:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleSubmit(t):null}},model:{value:e.form.password,callback:function(t){e.$set(e.form,"password",t)},expression:"form.password"}}),e._v(" "),i("check-mark",{attrs:{valid:e.valid.password}})],1),e._v(" "),i("bc-form-item",{staticClass:"login-submit",attrs:{"label-width":0}},[i("bc-button",{directives:[{name:"loading",rawName:"v-loading",value:e.loading,expression:"loading"}],attrs:{type:"primary",long:"",size:"large",disabled:e.disableSubmit},on:{click:e.handleSubmit}},[e._v("Login")])],1)],1)],1),e._v(" "),i("div",{staticClass:"copyright"},[e._v("\n Powered by DiDi\n ")])])};At._withStripped=!0;var Rt=s.setToken,zt={name:"login",mixins:[Tt],components:{checkMark:{name:"checkMark",functional:!0,props:{valid:Boolean},render:function(e,t){return e("bc-icon",{class:["check-mark"],props:{type:t.props.valid?"check":"times"}},[""])}}},props:{},data:function(){return{prefix:"login",form:{username:"",password:""},valid:{username:!0,password:!0},loading:!1}},computed:{allValid:function(){return Object.values(this.valid).every(Boolean)},rules:function(){var e=this;return{username:[{validator:function(t,i,s){return""===i?(e.valid.username=!1,s(new Error("Empty username"))):(e.valid.username=!0,s())},trigger:"blur"}],password:[{validator:function(t,i,s){return""===i?(e.valid.password=!1,s(new Error("Empty password"))):(e.valid.password=!0,s())},trigger:"blur"}]}},disableSubmit:function(){return""===this.form.username||""===this.form.password}},methods:{handleSubmit:function(){var e=this;this.$refs.loginForm.validate(function(t){if(t){var i=e.form,s=i.username,a=i.password;e.loading=!0,e.requestPostLogin({params:{username:s,password:a}}).then(function(t){"success"===t.data?(Rt(s),e.$router.push({name:"intro"})):(e.$message.error("Username or Password incorrect"),e.$refs.loginForm.resetFields())}).finally(function(){e.loading=!1})}})}}},qt=(i(164),Object(P.a)(zt,At,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"header"},[t("h1",[t("span",[this._v("DDMQ")]),t("span",[this._v("Login")])])])}],!1,null,null,null));qt.options.__file="src/pages/login/index.vue";var Gt=qt.exports,Vt=s.getToken;n.a.use(f.a);var Ut=new f.a({routes:[{path:"/login",name:"login",component:Gt},{path:"/",name:"index",component:Dt,children:[{path:"/",redirect:{name:"intro"}},{path:"/intro",name:"intro",component:Lt}].concat(h()(Le),h()(tt),h()(kt)).map(function(e){return d()({},e,{beforeRouteEnter:function(e,t,i){return Vt()||""?i():i({name:"login"})}})})}]}),Ft=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],staticClass:"autocomplete",class:{open:e.openSuggestion}},[i("bc-input",{staticClass:"bc-autocomplete-input",attrs:{type:"text"},on:{keydown:e.inputKeydown,"on-focus":e.focus,input:e.change},model:{value:e.selection,callback:function(t){e.selection=t},expression:"selection"}}),e._v(" "),i("div",{directives:[{name:"show",rawName:"v-show",value:e.open,expression:"open"}],staticClass:"autocomplete transition autocomplete__list"},[i("bc-base-drop",{staticClass:"bc-autocomplete-dropdown-menu"},[i("ul",e._l(e.matches,function(t,s){return i("li",{key:t,class:{active:e.isActive(s)},on:{click:function(t){e.suggestionClick(s)}}},[i("span",[e._v(e._s(t))])])}))])],1)],1)};Ft._withStripped=!0;var Wt={methods:{dispatch:function(e,t,i){for(var s=this.$parent||this.$root,a=s.$options.name;s&&(!a||a!==e);)(s=s.$parent)&&(a=s.$options.name);s&&s.$emit.apply(s,[t].concat(i))},broadcast:function(e,t,i){(function e(t,i,s){this.$children.forEach(function(a){a.$options.name===t?a.$emit.apply(a,[i].concat(s)):e.apply(a,[t,i].concat([s]))})}).call(this,e,t,i)}}},Ht={name:"bc-autocomplete",mixins:[Wt],props:{value:{type:String|Number},initValue:{type:String},suggestions:{type:Array,required:!0},filterKeyName:{type:String}},data:function(){return{open:!1,current:0,selection:""}},computed:{matches:function(){var e=this,t=this.suggestions.filter(function(t){return("string"==typeof t?t:t[e.filterKeyName]).indexOf(e.selection)>=0});return t.length||(this.open=!1,this.$emit("value",this.selection),this.$emit("on-search",this.suggestions,this.selection)),t},openSuggestion:function(){return""!==this.selection&&""===this.matches&&!0===this.open}},methods:{inputKeydown:function(e){var t=e.keyCode;if(this.matches)switch(t){case 40:this.current++;break;case 38:this.current--;break;case 13:this.selection=this.matches(this.current),this.$emit("value",this.selection),this.open=!1;break;case 27:this.open=!1}},isActive:function(e){return{"focus-list":e==this.current}},change:function(){0==this.open&&(this.open=!0,this.current=0)},focus:function(){this.$emit("focus",this.selection),this.open=!0},blur:function(){var e=this;this.$emit("blur",this.selection),G(this,["DatePicker","TimePicker","Cascader","Search"])||this.dispatch("bc-form-item","on-form-blur",this.selection),setTimeout(function(){return e.open=!1},200)},handleClose:function(){this.open=!1},suggestionClick:function(e){var t=this.matches[e];this.selection=t,this.open=!1,this.$emit("value",t),this.$emit("on-select",t),G(this,["DatePicker","TimePicker","Cascader","Search"])||this.dispatch("bc-form-item","on-form-blur",this.currentValue)}},mounted:function(){this.selection=this.initValue||""}},Kt=(i(165),Object(P.a)(Ht,Ft,[],!1,null,null,null));Kt.options.__file="src/ui-core/components/autocomplete/index.vue";var Qt=Kt.exports,Yt=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"fade"}},[e.closed?e._e():i("div",{class:e.wrapClasses},[e.showIcon?i("span",{class:e.iconClasses},[e._t("icon",[i("Icon",{attrs:{type:e.iconType||e.defaultIconType}})])],2):e._e(),e._v(" "),i("span",{class:e.messageClasses},[e._t("default")],2),e._v(" "),i("span",{class:e.descClasses},[e._t("description")],2),e._v(" "),e.closable?i("a",{class:e.closeClasses,on:{click:e.close}},[e._t("close",[i("Icon",{attrs:{type:"ios-close-empty"}})])],2):e._e()])])};Yt._withStripped=!0;var Jt=function(){var e=this.$createElement;return(this._self._c||e)("i",{class:this.iconClasses})};Jt._withStripped=!0;var Xt={name:"bc-icon",props:{type:{type:String}},computed:{iconClasses:function(){return["".concat("bcui-icon"),"".concat("bcui-icon","-").concat(this.type)]}}},Zt=Object(P.a)(Xt,Jt,[],!1,null,null,null);Zt.options.__file="src/ui-core/components/icon/icon.vue";var ei=Zt.exports,ti=ei,ii={name:"bc-alert",components:{Icon:ti},props:{type:{validator:function(e){return R(e,["success","info","warning","error"])},default:"info"},closable:{type:Boolean,default:!1},showIcon:{type:Boolean,default:!1},banner:{type:Boolean,default:!1},iconType:{type:String}},data:function(){return{closed:!1,desc:!1,description:!1}},computed:{wrapClasses:function(){var e;return["".concat("bcui-alert"),"".concat("bcui-alert","--").concat(this.type),(e={},x()(e,"".concat("bcui-alert","--with-icon"),this.showIcon),x()(e,"".concat("bcui-alert","--with-description"),!!this.description),x()(e,"".concat("bcui-alert","--with-banner"),this.banner),e)]},messageClasses:function(){return"".concat("bcui-alert","__message")},descClasses:function(){return"".concat("bcui-alert","__description")},closeClasses:function(){return"".concat("bcui-alert","__close")},iconClasses:function(){return"".concat("bcui-alert","__icon")},defaultIconType:function(){var e="";switch(this.type){case"success":e="information-success";break;case"info":e="information-circle";break;case"warning":e="information-warning";break;case"error":e="information-fail"}return e}},methods:{close:function(e){this.closed=!0,this.$emit("on-close",e)}},mounted:function(){this.description=void 0!==this.$slots.description}},si=Object(P.a)(ii,Yt,[],!1,null,null,null);si.options.__file="src/ui-core/components/alert/alert.vue";var ai=si.exports,ni=function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"bcui-base-dropdown",style:this.styles},[this._t("default")],2)};ni._withStripped=!0;var oi=n.a.prototype.$isServer,ri=oi?function(){}:i(166),ci={props:{placement:{type:String,default:"bottom"},boundariesPadding:{type:Number,default:5},reference:Object,popper:Object,offset:{default:0},value:{type:Boolean,default:!1},transition:String,options:{type:Object,default:function(){return{modifiers:{computeStyle:{gpuAcceleration:!1}}}}}},data:function(){return{visible:this.value}},watch:{value:{immediate:!0,handler:function(e){this.visible=e,this.$emit("input",e)}},visible:function(e){e?(this.updatePopper(),this.$emit("on-popper-show")):this.$emit("on-popper-hide"),this.$emit("input",e)}},methods:{createPopper:function(){var e=this;if(!oi&&/^(top|bottom|left|right)(-start|-end)?$/g.test(this.placement)){var t=this.options,i=this.popper||this.$refs.popper,s=this.reference||this.$refs.reference;i&&s&&(this.popperJS&&this.popperJS.hasOwnProperty("destroy")&&this.popperJS.destroy(),t.placement=this.placement,t.modifiers&&(t.modifiers={}),t.modifiers.offset&&(t.modifiers.offset={}),t.modifiers.offset=this.offset,t.onCreate=function(){e.$nextTick(e.updatePopper),e.$emit("created",e)},this.popperJS=new ri(s,i,t))}},updatePopper:function(){oi||(this.popperJS?this.popperJS.update():this.createPopper())},doDestroy:function(){oi||this.visible||(this.popperJS.destroy(),this.popperJS=null)}},beforeDestroy:function(){oi||this.popperJS&&this.popperJS.destroy()}},li={name:"bc-base-drop",props:{placement:{type:String,default:"bottom-start"}},components:{},data:function(){return{popper:null,width:""}},computed:{styles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),e}},methods:{update:function(){var e=this;this.popper?this.$nextTick(function(){e.popper.update()}):this.$nextTick(function(){e.popper=new ci(e.$parent.$refs.reference,e.$el,{gpuAcceleration:!1,placement:e.placement,boundariesPadding:0,forceAbsolute:!0,boundariesElement:"body"},{onCreate:function(t){e.resetTransformOrigin(t)}})}),"bc-select"===this.$parent.$options.name&&(this.width=parseInt(q(this.$parent.$el,"width")))},destroy:function(){var e=this;this.popper&&(this.resetTransformOrigin(this.popper),setTimeout(function(){e.popper.destroy(),e.popper=null},300))},resetTransformOrigin:function(e){var t={top:"bottom",bottom:"top"}[e.popper.getAttribute("x-placement").split("-")[0]];e.popper.style.transformOrigin="center ".concat(t)}},created:function(){this.$on("on-update-popper",this.update),this.$on("on-destroy-popper",this.destroy)},mounted:function(){},beforeDestroy:function(){this.popper&&this.popper.destroy()}},ui=Object(P.a)(li,ni,[],!1,null,null,null);ui.options.__file="src/ui-core/components/base-drop/base-drop.vue";var di=ui.exports,pi=di,hi=function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"bcui-breadcrumb"},[this._t("default")],2)};hi._withStripped=!0;var fi={name:"bc-breadcrumb",data:function(){return{}},created:function(){},components:{}},mi=Object(P.a)(fi,hi,[],!1,null,null,null);mi.options.__file="src/ui-core/components/breadcrumb/breadcrumb.vue";var vi=mi.exports,bi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"bcui-breadcrumb__item"},[e.href?i("a",{staticClass:"bcui-breadcrumb__item-link",attrs:{href:e.href}},[e._t("default",[e._v("🍞默认值")])],2):e.route?i("router-link",{staticClass:"bcui-breadcrumb__item-link",attrs:{to:e.route}},[e._t("default",[e._v("🍞默认值")])],2):i("span",{staticClass:"bcui-breadcrumb__item-text"},[e._t("default",[e._v("🍞默认值")])],2),e._v(" "),i("span",{staticClass:"bcui-breadcrumb__separator"},[e._v("/")])],1)};bi._withStripped=!0;var gi={name:"bc-breadcrumb-item",props:{href:{type:String},route:{type:Object}},data:function(){return{}},created:function(){},components:{},methods:{}},_i=Object(P.a)(gi,bi,[],!1,null,null,null);_i.options.__file="src/ui-core/components/breadcrumb/breadcrumb-item.vue";var yi=_i.exports,Si=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],class:[e.classPrefix],on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[i("div",{ref:"reference",class:[e.classPrefix+"-rel"],on:{click:e.handleClick}},[e._t("default")],2),e._v(" "),i("transition",{attrs:{name:e.transition}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.show,expression:"show"}],ref:"drop",staticClass:"bcui-base-dropdown",nativeOn:{mouseenter:function(t){return e.handleMouseEnter(t)},mouseleave:function(t){return e.handleMouseLeave(t)}}},[e._t("list")],2)])],1)};Si._withStripped=!0;var Ci=function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"bcui-base-dropdown",style:this.styles},[this._t("default")],2)};Ci._withStripped=!0;var ki={name:"bc-base-drop",props:{placement:{type:String,default:"top-start"}},components:{},data:function(){return{popper:null,width:""}},computed:{styles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),e}},methods:{update:function(){var e=this;this.popper?this.$nextTick(function(){e.popper.update()}):this.$nextTick(function(){e.popper=new ci(e.$parent.$refs.reference,e.$el,{gpuAcceleration:!1,placement:e.placement,modifiers:{preventOverflow:{boundariesElement:"scrollParent",escapeWithReference:!0},flip:{boundariesElement:"scrollParent",flipVariations:!0}}},{onCreate:function(t){e.resetTransformOrigin(t)}})})},destroy:function(){var e=this;this.popper&&(this.resetTransformOrigin(this.popper),setTimeout(function(){e.popper.destroy(),e.popper=null},300))},resetTransformOrigin:function(e){var t={top:"bottom",bottom:"top"}[e.popper.getAttribute("x-placement").split("-")[0]];e.popper.style.transformOrigin="center ".concat(t)}},created:function(){this.$on("on-update-popper",this.update),this.$on("on-destroy-popper",this.destroy)},mounted:function(){},beforeDestroy:function(){this.popper&&this.popper.destroy()}},wi=Object(P.a)(ki,Ci,[],!1,null,null,null);wi.options.__file="src/ui-core/components/dropdown/drop.vue";var xi=wi.exports,Ti={bind:function(e,t,i){function s(i){if(e.contains(i.target))return!1;t.expression&&t.value(i)}e.__vueClickOutside__=s,document.addEventListener("click",s)},update:function(){},unbind:function(e,t){document.removeEventListener("click",e.__vueClickOutside__),delete e.__vueClickOutside__}},$i={name:"bc-dropdown",directives:{clickoutside:Ti},props:{placement:{validator:function(e){return R(e,["top","bottom"])},default:"bottom"},visible:{type:Boolean,default:!1},trigger:{validator:function(e){return R(e,["click","hover","custom"])},default:"hover"}},components:{Drop:xi},data:function(){return{classPrefix:"bcui-dropdown",show:this.visible,timer:null}},watch:{visible:function(e){this.show=e},show:function(e){this.$emit("on-visible-change",e)}},computed:{transition:function(){return["bottom-start","bottom","bottom-end"].indexOf(this.placement)>-1?"slide-up":"fade"}},methods:{handleClick:function(){var e=this.trigger;if("custom"===e||"click"!==e)return!1;this.show=!this.show},handleMouseEnter:function(){var e=this,t=this.trigger;if("custom"===t||"hover"!==t)return!1;this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){e.show=!0},150)},handleMouseLeave:function(){var e=this,t=this.trigger;if("custom"===t||"hover"!==t)return!1;this.timer&&(clearTimeout(this.timer),this.timer=setTimeout(function(){e.show=!1},150))},handleClose:function(){return"custom"!==this.trigger&&("click"===this.trigger&&void(this.show=!1))},hasParent:function(){var e=G(this,"bc-dropdown");return e||!1}},created:function(){this.$on("on-update-popper",this.update),this.$on("on-destroy-popper",this.destroy)},mounted:function(){var e=this;this.$on("on-click",function(t){var i=e.hasParent();i&&i.$emit("on-click",t)}),this.$on("on-hover-click",function(){var t=e.hasParent();t?(e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!1}),t.$emit("on-hover-click")):e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!1})}),this.$on("on-child-click",function(){e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!0});var t=e.hasParent();t&&t.$emit("on-child-click")})}},Pi=Object(P.a)($i,Si,[],!1,null,null,null);Pi.options.__file="src/ui-core/components/dropdown/dropdown.vue";var Ei=Pi.exports,Ii=function(){var e=this.$createElement;return(this._self._c||e)("ul",{staticClass:"bcui-dropdown-menu"},[this._t("default")],2)};Ii._withStripped=!0;var Ni={name:"bc-dropdown-menu"},Oi=Object(P.a)(Ni,Ii,[],!1,null,null,null);Oi.options.__file="src/ui-core/components/dropdown/dropdown-menu.vue";var Bi=Oi.exports,Di=function(){var e=this.$createElement;return(this._self._c||e)("li",{class:this.itemClasses,on:{click:this.handleClick}},[this._t("default")],2)};Di._withStripped=!0;var ji={name:"bc-dropdown-item",components:{},props:{name:{type:[String,Number]},disabled:{type:Boolean,default:!1},selected:{type:Boolean,default:!1},divided:{type:Boolean,default:!1}},data:function(){return{}},watch:{},computed:{itemClasses:function(){var e;return["".concat("bcui-dropdown-item"),(e={},x()(e,"".concat("bcui-dropdown-item","--disabled"),this.disabled),x()(e,"".concat("bcui-dropdown-item","--selected"),this.selected),x()(e,"".concat("bcui-dropdown-item","--divided"),this.divided),e)]}},methods:{handleClick:function(){var e=G(this,"bc-dropdown"),t=this.$parent&&"bc-dropdown"===this.$parent.$options.name;this.disabled?this.$nextTick(function(){e.currentVisible=!0}):t?this.$parent.$emit("on-child-click"):e&&"bc-dropdown"===e.$options.name&&e.$emit("on-hover-click"),e.$emit("on-click",this.name),this.$emit("on-click",this.name)}},mounted:function(){}},Mi=(i(167),Object(P.a)(ji,Di,[],!1,null,null,null));Mi.options.__file="src/ui-core/components/dropdown/dropdown-item.vue";var Li=Mi.exports,Ai=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.buttonClass,attrs:{type:e.htmlType,disabled:e.disabled},on:{click:e.handleClick}},[e.loading?i("bc-icon",{staticClass:"bcui-load-loop",attrs:{type:"loading"}}):e._e(),e._v(" "),e.icon&&!e.loading?i("bc-icon",{attrs:{type:e.icon}}):e._e(),e._v(" "),e.showSlot?i("span",{ref:"slot"},[e._t("default")],2):e._e()],1)};Ai._withStripped=!0;var Ri={name:"bc-button",components:{bcIcon:ei},props:{type:{type:String},shape:{type:String},size:{type:String},ghost:{type:Boolean,default:!1},loading:Boolean,disabled:Boolean,htmlType:{type:String,default:"button"},icon:String,long:{type:Boolean,default:!1}},data:function(){return{showSlot:!0}},created:function(){},computed:{buttonClass:function(){var e;return["".concat("bcui-button"),(e={},x()(e,"".concat("bcui-button","--").concat(this.type),!!this.type),x()(e,"".concat("bcui-button","--long"),this.long),x()(e,"".concat("bcui-button","--").concat(this.shape),!!this.shape),x()(e,"".concat("bcui-button","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-button","--ghost"),!!this.ghost),x()(e,"".concat("bcui-button","--loading"),null!=this.loading&&this.loading),x()(e,"".concat("bcui-button","--icon-only"),!this.showSlot&&(!!this.icon||this.loading)),e)]}},methods:{handleClick:function(e){this.$emit("click",e)}},mounted:function(){this.showSlot=void 0!==this.$slots.default}},zi=Object(P.a)(Ri,Ai,[],!1,null,null,null);zi.options.__file="src/ui-core/components/button/button.vue";var qi=zi.exports,Gi=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.classes},[this._t("default")],2)};Gi._withStripped=!0;var Vi={name:"bc-button-group",props:{size:{validator:function(e){return R(e,["small","large"])}},shape:{validator:function(e){return R(e,["circle","circle-outline"])}},vertical:{type:Boolean,default:!1}},components:{},data:function(){return{classPrefix:"bcui-button-group"}},computed:{classes:function(){var e;return["".concat("bcui-button-group"),(e={},x()(e,"".concat("bcui-button-group","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-button-group","--").concat(this.shape),!!this.shape),x()(e,"".concat("bcui-button-group","--vertical"),this.vertical),e)]}},created:function(){},methods:{},mounted:function(){}},Ui=Object(P.a)(Vi,Gi,[],!1,null,null,null);Ui.options.__file="src/ui-core/components/button/button-group.vue";var Fi=Ui.exports;qi.install=function(e){e.component(qi.name,qi)};var Wi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.cardClasses,style:e.cardStyles},[e.title||this.$slots.title?i("div",{class:e.classPrefix+"__head"},[i("div",{class:e.classPrefix+"__head-title"},[this.$slots.title?[e._t("title")]:e.title?[e._v(e._s(e.title))]:e._e()],2)]):e._e(),e._v(" "),this.$slots.extra?i("div",{class:e.classPrefix+"__extra"},[e._t("extra")],2):e._e(),e._v(" "),i("div",{class:e.classPrefix+"__body"},[e._t("default")],2)])};Wi._withStripped=!0;var Hi={name:"bc-card",props:{title:{type:String},extra:{type:String},bordered:{type:Boolean,default:!0},hoverable:{type:Boolean,default:!1},width:{type:Number|String}},components:{},data:function(){return{classPrefix:"bcui-card"}},computed:{cardClasses:function(){var e;return["".concat("bcui-card"),(e={},x()(e,"".concat("bcui-card","--bordered"),!!this.bordered),x()(e,"".concat("bcui-card","--hoverable"),!!this.hoverable),e)]},cardStyles:function(){if(this.width){var e=this.width;return"number"==typeof e&&(e+="px"),{width:e}}}},methods:{},mounted:function(){}},Ki=Object(P.a)(Hi,Wi,[],!1,null,null,null);Ki.options.__file="src/ui-core/components/card/card.vue";var Qi=Ki.exports;Qi.install=function(e){e.component(Qi.name,Qi)};var Yi=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{class:e.wrapClasses},[i("span",{class:e.checkboxClasses},[i("span",{class:e.innerClasses}),e._v(" "),e.group?i("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],class:e.inputClasses,attrs:{type:"checkbox",disabled:e.disabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var i=e.model,s=t.target,a=!!s.checked;if(Array.isArray(i)){var n=e.label,o=e._i(i,n);s.checked?o<0&&(e.model=i.concat([n])):o>-1&&(e.model=i.slice(0,o).concat(i.slice(o+1)))}else e.model=a},e.change]}}):e._e(),e._v(" "),e.group?e._e():i("input",{class:e.inputClasses,attrs:{type:"checkbox",disabled:e.disabled,name:e.name},domProps:{checked:e.currentValue},on:{change:e.change}})]),e._v(" "),i("span",{staticClass:"bcui-checkbox__label"},[e._t("default",[e.showSlot?i("span",[e._v(e._s(e.label))]):e._e()])],2)])};Yi._withStripped=!0;var Ji={name:"bc-checkbox",mixins:[Wt],props:{disabled:{type:Boolean,default:!1},value:{type:[String,Number,Boolean],default:!1},trueValue:{type:[String,Number,Boolean],default:!0},falseValue:{type:[String,Number,Boolean],default:!1},label:{type:[String,Number,Boolean]},indeterminate:{type:Boolean,default:!1},size:{validator:function(e){return R(e,["small","large","default"])}},name:{type:String}},data:function(){return{model:[],currentValue:this.value,group:!1,showSlot:!0,parent:G(this,"bc-checkbox-group")}},computed:{wrapClasses:function(){var e;return["".concat("bcui-checkbox"),(e={},x()(e,"".concat("bcui-checkbox","-group-item"),this.group),x()(e,"".concat("bcui-checkbox","--checked"),this.currentValue),x()(e,"".concat("bcui-checkbox","--disabled"),this.disabled),x()(e,"".concat("bcui-checkbox","--").concat(this.size),!!this.size),e)]},checkboxClasses:function(){var e;return["".concat("bcui-checkbox","__input"),(e={},x()(e,"".concat("bcui-checkbox","__input--checked"),this.currentValue),x()(e,"".concat("bcui-checkbox","__input--disabled"),this.disabled),x()(e,"".concat("bcui-checkbox","__input--indeterminate"),this.indeterminate),e)]},innerClasses:function(){return"".concat("bcui-checkbox","__inner")},inputClasses:function(){return"".concat("bcui-checkbox","__original-input")}},watch:{value:function(e){if(e!==this.trueValue&&e!==this.falseValue)throw"Value should be trueValue or falseValue.";this.updateModel()}},methods:{change:function(e){if(this.disabled)return!1;var t=e.target.checked;this.currentValue=t;var i=t?this.trueValue:this.falseValue;this.$emit("input",i),this.group?this.parent.change(this.model):(this.$emit("on-change",i),this.dispatch("bc-form-item","on-form-change",i))},updateModel:function(){this.currentValue=this.value===this.trueValue}},mounted:function(){this.parent=G(this,"bc-checkbox-group"),this.parent&&(this.group=!0),this.group?this.parent.updateModel(!0):(this.updateModel(),this.showSlot=void 0!==this.$slots.default)}},Xi=Object(P.a)(Ji,Yi,[],!1,null,null,null);Xi.options.__file="src/ui-core/components/checkbox/checkbox.vue";var Zi=Xi.exports,es=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.classes},[this._t("default")],2)};es._withStripped=!0;var ts={name:"bc-checkbox-group",mixins:[Wt],props:{value:{type:Array,default:function(){return[]}},size:{validator:function(e){return R(e,["small","large","default"])}}},data:function(){return{currentValue:this.value,childrens:[]}},computed:{classes:function(){return["".concat("bcui-checkbox-group"),x()({},"".concat("bcui-checkbox-group","--").concat(this.size),!!this.size)]}},mounted:function(){this.updateModel(!0)},methods:{updateModel:function(e){var t=this.value;this.childrens=V(this,"bc-checkbox"),this.childrens&&this.childrens.forEach(function(i){i.model=t,e&&(i.currentValue=t.indexOf(i.label)>=0,i.group=!0)})},change:function(e){this.currentValue=e,this.$emit("input",e),this.$emit("on-change",e),this.dispatch("bc-form-item","on-form-change",e)}},watch:{value:function(){this.updateModel(!0)}}},is=Object(P.a)(ts,es,[],!1,null,null,null);is.options.__file="src/ui-core/components/checkbox/checkbox-group.vue";var ss=is.exports,as=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.mainClassPrefix},[i("transition",{attrs:{name:"drawer-layer"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:e.layerClassPrefix,on:{click:e.handleLayerClick}})]),e._v(" "),i("transition",{attrs:{name:"drawer-slide"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:e.innerClassPrefix,style:e.innerStyles,on:{click:e.handleInnerClick}},[i("div",{staticClass:"bc-drawer-content"},[e.closable?i("a",{class:[e.classPrefix+"-close"],on:{click:e.close}},[e._t("close",[i("bc-icon",{attrs:{type:"close"}})])],2):e._e(),e._v(" "),e.showHead?i("div",{class:[e.classPrefix+"-header"]},[e._t("header",[i("div",{class:[e.classPrefix+"-header__inner"]},[e._v(e._s(e.title))])])],2):e._e(),e._v(" "),i("div",{class:[e.classPrefix+"-body"]},[e._t("default")],2)])])])],1)};as._withStripped=!0;var ns={name:"bc-drawer",components:{},props:{value:{type:Boolean,default:!1},title:{type:String,default:""},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},width:{type:Number,default:0},offsetTop:{type:Number,default:0}},data:function(){return{classPrefix:"bc-drawer",showHead:!0,visible:this.value}},watch:{value:function(e){this.visible=e},visible:function(e){}},computed:{mainClassPrefix:function(){return["bc-drawer",x()({},"".concat(this.customClass),!!this.customClass)]},layerClassPrefix:function(){return"".concat("bc-drawer","-layer")},innerClassPrefix:function(){return"".concat("bc-drawer","__inner")},innerStyles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),this.offsetTop&&(e.top="".concat(this.offsetTop,"px")),e}},methods:{close:function(){this.visible=!1,this.$emit("input",!1),this.$emit("on-hide")},escClose:function(e){this.visible&&this.closable&&27===e.keyCode&&this.close()},handleLayerClick:function(){this.maskClosable&&this.close()},handleInnerClick:function(){}},mounted:function(){var e=!0;void 0!==this.$slots.header||this.title||(e=!1),this.showHead=e,document.addEventListener("keydown",this.escClose)},beforeDestroy:function(){document.removeEventListener("keydown",this.escClose)}},os=(i(168),Object(P.a)(ns,as,[],!1,null,null,null));os.options.__file="src/ui-core/components/drawer/drawer.vue";var rs=os.exports,cs=function(){var e=this.$createElement;return(this._self._c||e)("ul",{class:this.menuClasses,style:this.styles},[this._t("default")],2)};cs._withStripped=!0;var ls={name:"bc-menu",mixins:[Wt],props:{mode:{validator:function(e){return R(e,["horizontal","vertical"])}},accordion:{type:Boolean,default:!1},width:{type:String},activeName:{type:String},openedNames:{type:Array,default:function(){return[]}},router:Boolean},components:{},data:function(){return{items:{},submenus:{},currentName:this.activeName,openedMenus:this.openedNames?this.openedNames.slice(0):[]}},watch:{activeName:function(e){var t=this.items[e];t?(this.currentName=t.name,this.init()):this.currentName=""},openedNames:function(e){this.openedMenus=e},$route:function(e){e&&this.updateActiveName()}},computed:{menuClasses:function(){var e=this.mode;return["".concat("bcui-menu"),x()({},"".concat("bcui-menu","--").concat(e),e)]},styles:function(){var e={};return"vertical"===this.mode&&(e.width=this.width),e}},methods:{updateCurrentName:function(){this.currentName||(this.currentName=-1),this.broadcast("bc-submenu","on-update-active-name",{name:this.currentName,ative:!1}),this.broadcast("bc-menu-item","on-update-active-name",this.currentName)},updateOpenKeys:function(e,t){var i=this.openedMenus,s=i.indexOf(e);s>-1?i.splice(s,1):this.openedMenus.push(e)},updateOpened:function(){var e=this,t=V(this,"bc-submenu");t.length&&t.forEach(function(t){e.openedNames.indexOf(t.name)>-1&&(t.opened=!0)})},addItem:function(e){this.$set(this.items,e.name,e)},removeItem:function(e){delete this.items[e.name]},addSubmenu:function(e){this.$set(this.submenus,e.name,e)},removeSubmenu:function(e){delete this.submenus[e.name]},init:function(){var e=this,t=this.currentName,i=this.items[t];if(i&&"horizontal"!==this.mode){var s=i.path;s&&s.forEach(function(t){var i=e.submenus[t];i&&e.openMenu(t,i.path)})}},openMenu:function(e,t){var i=this.openedMenus;-1===i.indexOf(e)&&(this.accordion&&(this.openedMenus=i.filter(function(e){return-1!==t.indexOf(e)})),this.openedMenus.push(e))},closeMenu:function(e,t){this.openedMenus.splice(this.openedMenus.indexOf(e),1)},handleSubmenuClick:function(e){var t=e.name,i=e.path;-1!==this.openedMenus.indexOf(t)?(this.closeMenu(t,i),this.$emit("close",t,i)):(this.openMenu(t,i),this.$emit("open",t,i))},handleItemClick:function(e){e.name,e.path;this.currentName=e.name,"horizontal"===this.mode&&(this.openedMenus=[]),this.router&&this.routeToItem(e)},updateActiveName:function(){var e=this;this.$router&&V(this,"bc-menu-item").forEach(function(t){if(t.routeName.includes(e.$route.name)){var i=G(t,"bc-submenu");e.currentName=t.name,i&&e.openMenu(i.name,i.path)}})},routeToItem:function(e){var t=e.route||e.name;try{this.$router.push(t)}catch(e){console.error(e)}}},created:function(){this.updateActiveName()},mounted:function(){this.init(),this.updateActiveName(),this.$on("on-item-click",this.handleItemClick),this.$on("on-submenu-click",this.handleSubmenuClick)},beforeDestroy:function(){}},us=Object(P.a)(ls,cs,[],!1,null,null,null);us.options.__file="src/ui-core/components/menu/menu.vue";var ds=us.exports,ps=function(){var e=this,t=e.$createElement;return(e._self._c||t)("li",{class:e.menuItemClasses,on:{click:function(t){return t.stopPropagation(),e.handleMenuItemClick(t)}}},[e._t("default")],2)};ps._withStripped=!0;var hs={name:"bc-menu-item",mixins:[Wt],props:{name:{type:[String,Number]},disabled:{type:Boolean,default:!1},route:{type:Object},routeName:{type:Array,default:function(){return[]}}},components:{},data:function(){return{rootMenu:G(this,"bc-menu"),parentMenu:G(this,["bc-menu","bc-submenu"])}},computed:{menuItemClasses:function(){var e="".concat("bcui-menu","-item");return[e,x()({},"".concat(e,"--active"),this.active)]},menuItemLinkClasses:function(){return["".concat("bcui-menu","-item__link")]},active:function(){return this.name===this.rootMenu.currentName},path:function(){for(var e=[this.name],t=this.$parent;"bc-menu"!==t.$options.name;)t.name&&e.unshift(t.name),t=t.$parent;return e}},methods:{handleMenuItemClick:function(){this.dispatch("bc-menu","on-item-click",this),this.$emit("click",this)}},created:function(){this.parentMenu.addItem(this),this.rootMenu.addItem(this)},mounted:function(){},beforeDestroy:function(){this.parentMenu.removeItem(this),this.rootMenu.removeItem(this)}},fs=Object(P.a)(hs,ps,[],!1,null,null,null);fs.options.__file="src/ui-core/components/menu/menu-item.vue";var ms=fs.exports,vs=function(){var e=this.$createElement;return(this._self._c||e)("div",{})};vs._withStripped=!0;var bs={name:"bc-menu-group",props:{},components:{},data:function(){return{}},computed:{},methods:{},created:function(){},mounted:function(){},beforeDestory:function(){}},gs=Object(P.a)(bs,vs,[],!1,null,null,null);gs.options.__file="src/ui-core/components/menu/menu-group.vue";var _s=gs.exports,ys=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{class:e.submenuClasses,on:{mouseenter:e.handleMouseenter,mouseleave:e.handleMouseleave}},[i("div",{ref:"reference",staticClass:"bcui-menu-submenu__title",on:{click:e.handleClick}},[e._t("title"),e._v(" "),i("bc-icon",{class:["bcui-menu-submenu__expand-icon"],attrs:{type:"triangle-bottom"}})],2),e._v(" "),i("transition",{attrs:{name:"slide"}},[i("ul",{directives:[{name:"show",rawName:"v-show",value:e.opened,expression:"opened"}],class:[e.classPrefix]},[e._t("default")],2)])],1)};ys._withStripped=!0;var Ss={name:"bc-submenu",mixins:[Wt],props:{name:{type:String,required:!0},trigger:{type:String,default:"click"}},components:{baseDropdown:Ei},data:function(){return{classPrefix:"bcui-menu",items:{},submenus:{},rootMenu:G(this,"bc-menu"),parentMenu:G(this,["bc-menu","bc-submenu"]),dropWidth:parseFloat(q(this.$el,"width"))}},computed:{submenuClasses:function(){var e,t="".concat("bcui-menu","-submenu");return[t,(e={},x()(e,"".concat(t,"--active"),this.active),x()(e,"".concat(t,"--opened"),this.opened),x()(e,"".concat(t,"--disabled"),this.disabled),e)]},submenuDropClasses:function(){return["".concat("bcui-menu","-submenu-dropdown")]},dropStyle:function(){var e={};return this.dropWidth&&(e.minWidth="".concat(this.dropWidth,"px")),e},path:function(){for(var e=[this.name],t=this.$parent;"bc-menu"!==t.$options.name;)t.name&&e.unshift(t.name),t=t.$parent;return e},mode:function(){return this.rootMenu.mode},opened:function(){return this.rootMenu.openedMenus.indexOf(this.name)>-1},active:{cache:!1,get:function(){var e=!1,t=this.submenus,i=this.items;return Object.keys(i).forEach(function(t){i[t].active&&(e=!0)}),Object.keys(t).forEach(function(i){t[i].active&&(e=!0)}),e}}},methods:{addItem:function(e){this.$set(this.items,e.name,e)},removeItem:function(e){delete this.items[e.name]},addSubmenu:function(e){this.$set(this.submenus,e.name,e)},removeSubmenu:function(e){delete this.submenus[e.name]},handleClick:function(){this.disabled||"click"!==this.trigger||this.dispatch("bc-menu","on-submenu-click",this)},handleMouseenter:function(){var e=this;this.disabled||"click"===this.trigger||(clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.rootMenu.openMenu(e.name,e.path)},300))},handleMouseleave:function(){var e=this;this.disabled||"click"===this.trigger||(clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.rootMenu.closeMenu(e.name,e.path)},300))}},created:function(){this.parentMenu.addSubmenu(this),this.rootMenu.addSubmenu(this)},mounted:function(){},beforeDestroy:function(){this.parentMenu.removeSubmenu(this),this.rootMenu.removeSubmenu(this)}},Cs=Object(P.a)(Ss,ys,[],!1,null,null,null);Cs.options.__file="src/ui-core/components/menu/submenu.vue";var ks=Cs.exports,ws=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("transition",{attrs:{name:"fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:e.maskClasses,on:{click:e.mask}})]),e._v(" "),i("div",{class:e.wrapClasses,on:{click:e.handleWrapClick}},[i("transition",{attrs:{name:"ease"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:e.visible,expression:"visible"}],class:e.classes,style:e.mainStyles},[i("div",{class:[e.classPrefix+"-content"]},[e.closable?i("a",{class:[e.classPrefix+"-close"],on:{click:e.close}},[e._t("close",[i("bc-icon",{attrs:{type:"times"}})])],2):e._e(),e._v(" "),e.showHead?i("div",{class:[e.classPrefix+"-header"]},[e._t("header",[i("div",{class:[e.classPrefix+"-header-inner"]},[e._v(e._s(e.title))])])],2):e._e(),e._v(" "),i("div",{class:[e.classPrefix+"-body"]},[e._t("default")],2),e._v(" "),e.footerHide?e._e():i("div",{class:[e.classPrefix+"-footer"]},[e._t("footer",[i("bc-button",{nativeOn:{click:function(t){return e.cancel(t)}}},[e._v(e._s(e.cancelText))]),e._v(" "),i("bc-button",{attrs:{type:"primary",loading:e.buttonLoading},nativeOn:{click:function(t){return e.ok(t)}}},[e._v(e._s(e.okText))])])],2)])])])],1)],1)};ws._withStripped=!0;var xs={name:"bc-modal",components:{bcIcon:ti,bcButton:qi},props:{value:{type:Boolean,default:!1},closable:{type:Boolean,default:!0},maskClosable:{type:Boolean,default:!0},title:{type:String},width:{type:[Number,String],default:520},okText:{type:String,default:function(){return"Submit"}},cancelText:{type:String,default:function(){return"Cancel"}},loading:{type:Boolean,default:!1},styles:{type:Object},className:{type:String},footerHide:{type:Boolean,default:!1},scrollable:{type:Boolean,default:!1}},data:function(){return{classPrefix:"bcui-modal",wrapShow:!1,showHead:!0,buttonLoading:!1,visible:this.value}},computed:{wrapClasses:function(){var e;return["".concat("bcui-modal","-wrap"),(e={},x()(e,"".concat("bcui-modal","-hidden"),!this.wrapShow),x()(e,"".concat(this.className),!!this.className),e)]},maskClasses:function(){return"".concat("bcui-modal","-mask")},classes:function(){return"".concat("bcui-modal")},mainStyles:function(){var e={},t={width:"".concat(this.width,"px")},i=this.styles?this.styles:{};return Object.assign(e,t,i),e}},methods:{close:function(){this.visible=!1,this.$emit("input",!1),this.$emit("on-cancel")},mask:function(){this.maskClosable&&this.close()},handleWrapClick:function(e){var t=e.target.getAttribute("class");t&&t.indexOf("".concat("bcui-modal","-wrap"))>-1&&this.mask()},cancel:function(){this.close()},ok:function(){this.loading?this.buttonLoading=!0:(this.visible=!1,this.$emit("input",!1)),this.$emit("on-ok")},EscClose:function(e){this.visible&&this.closable&&27===e.keyCode&&this.close()},checkScrollBar:function(){var e=window.innerWidth;if(!e){var t=document.documentElement.getBoundingClientRect();e=t.right-Math.abs(t.left)}this.bodyIsOverflowing=document.body.clientWidth\n
\n
\n
\n
\n
\n
\n
\n
\n
\n {{ cancelText }}\n {{ okText }}\n
\n
\n \n '),document.body.appendChild(s);var a=new n.a({el:s,components:{"bc-modal":$s,"bc-button":qi,"bc-icon":ei},data:Object.assign(t,{visible:!1,width:416,title:"",body:"",iconType:"",iconName:"",okText:"Submit",cancelText:"Cancel",showCancel:!1,loading:!1,buttonLoading:!1,scrollable:!1,buttonType:t.buttonType||"primary"}),computed:{iconTypeCls:function(){return["".concat("bcui-modal-confirm","-body-icon"),"".concat("bcui-modal-confirm","-body-icon-").concat(this.iconType)]},iconNameCls:function(){return["bcui-icon","bcui-icon-".concat(this.iconName)]}},methods:{cancel:function(){this.$children[0].visible=!1,this.buttonLoading=!1,this.onCancel(),this.remove()},ok:function(){this.loading?this.buttonLoading=!0:(this.$children[0].visible=!1,this.remove()),this.onOk()},remove:function(){var e=this;setTimeout(function(){e.destroy()},300)},destroy:function(){this.$destroy(),document.body.removeChild(this.$el),this.onRemove()},onOk:function(){},onCancel:function(){},onRemove:function(){}}});return{show:function(e){switch(a.$parent.showCancel=e.showCancel,a.$parent.iconType=e.icon,e.icon){case"info":a.$parent.iconName="info";break;case"success":a.$parent.iconName="confirm";break;case"warning":a.$parent.iconName="alert";break;case"error":a.$parent.iconName="error";break;case"confirm":a.$parent.iconName="info"}"width"in e&&(a.$parent.width=e.width),"title"in e&&(a.$parent.title=e.title),"content"in e&&(a.$parent.body=e.content),"okText"in e&&(a.$parent.okText=e.okText),"cancelText"in e&&(a.$parent.cancelText=e.cancelText),"onCancel"in e&&(a.$parent.onCancel=e.onCancel),"onOk"in e&&(a.$parent.onOk=e.onOk),"loading"in e&&(a.$parent.loading=e.loading),"scrollable"in e&&(a.$parent.scrollable=e.scrollable),a.$parent.buttonType=e.buttonType||"primary",a.$parent.onRemove=e.onRemove,a.visible=!0},remove:function(){a.visible=!1,a.$parent.buttonLoading=!1,a.$parent.remove()},component:a=a.$children[0]}};var Ps,Es=$s;function Is(){return Ps=Ps||Es.newInstance({closable:!1,maskClosable:!1,footerHide:!0})}function Ns(e){var t=Is();e.onRemove=function(){Ps=null},t.show(e)}Es.info=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.icon="info",e.showCancel=!1,Ns(e)},Es.success=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.icon="success",e.showCancel=!1,Ns(e)},Es.warning=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.icon="warning",e.showCancel=!1,Ns(e)},Es.error=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.icon="error",e.showCancel=!1,Ns(e)},Es.confirm=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.icon="confirm",e.showCancel=!0,Ns(e)},Es.remove=function(){if(!Ps)return!1;Is().remove()};var Os=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.inputfieldClasses,style:e.inputStyles},["textarea"!==e.type?[e.prepend?i("div",{directives:[{name:"show",rawName:"v-show",value:e.slotReady,expression:"slotReady"}],ref:"prepend",class:[e.classPrefix+"__prepend"]},[e._t("prepend")],2):e._e(),e._v(" "),e.slotSelect?i("div",{class:[e.classPrefix+"__select"]},[e._t("select")],2):e._e(),e._v(" "),e.icon&&!e.loading&&"start"===e.iconPosition?i("icon",{staticClass:"bcui-inputfield__icon",attrs:{type:e.icon},nativeOn:{click:function(t){return e.handleIconClick(t)}}}):e._e(),e._v(" "),e.loading?i("icon",{staticClass:"bcui-inputfield__icon",attrs:{type:"loading"}}):e._e(),e._v(" "),e.icon&&!e.loading&&"end"===e.iconPosition?i("icon",{staticClass:"bcui-inputfield__icon",attrs:{type:e.icon},nativeOn:{click:function(t){return e.handleIconClick(t)}}}):e._e(),e._v(" "),i("input",{directives:[{name:"auto-focus",rawName:"v-auto-focus",value:e.autoFocus,expression:"autoFocus"}],class:e.inputClasses,attrs:{type:e.type,placeholder:e.placeholder,disabled:e.disabled,maxlength:e.maxlength,readonly:e.readonly,name:e.name,number:e.number},domProps:{value:e.currentValue},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleEnter(t):null},focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput,change:e.handleChange}}),e._v(" "),e.append?i("div",{directives:[{name:"show",rawName:"v-show",value:e.slotReady,expression:"slotReady"}],ref:"append",class:[e.classPrefix+"__append"]},[e._t("append")],2):e._e()]:i("textarea",{directives:[{name:"auto-focus",rawName:"v-auto-focus",value:e.autoFocus,expression:"autoFocus"}],ref:"textarea",class:e.textareaClasses,style:e.textareaStyles,attrs:{placeholder:e.placeholder,disabled:e.disabled,rows:e.rows,maxlength:e.maxlength,readonly:e.readonly,name:e.name},domProps:{value:e.value},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.handleEnter(t):null},focus:e.handleFocus,blur:e.handleBlur,input:e.handleInput}})],2)};Os._withStripped=!0;var Bs={name:"bc-input",mixins:[Wt],components:{Icon:ei},props:{type:{type:String,default:"text"},value:{type:[String,Number],default:""},size:{validator:function(e){return-1!=["small","large"].indexOf(e)}},placeholder:{type:String,default:""},maxlength:{type:Number},disabled:{type:Boolean,default:!1},icon:String,iconPosition:{type:String,default:"end"},loading:Boolean,autosize:{type:[Boolean,Object],default:!1},autoFocus:{type:Boolean,default:!1},rows:{type:Number,default:8},readonly:{type:Boolean,default:!1},name:{type:String},number:{type:Boolean,default:!1},width:{type:[Number,String],default:""}},data:function(){return{currentValue:this.value,classPrefix:"bcui-inputfield",prepend:!0,append:!0,slotSelect:!1,slotReady:!1,textareaStyles:{}}},computed:{inputfieldClasses:function(){var e;return["".concat("bcui-inputfield"),(e={},x()(e,"".concat("bcui-inputfield","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-inputfield","--extra"),this.prepend||this.append||this.slotSelect),e)]},inputClasses:function(){var e;return["".concat("bcui-inputfield__input"),(e={},x()(e,"".concat("bcui-inputfield__input","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-inputfield__input","--iconed"),!!this.icon),x()(e,"".concat("bcui-inputfield__input","--extra"),this.prepend||this.append||this.slotSelect),x()(e,"".concat("bcui-inputfield__input","--disabled"),this.disabled),e)]},textareaClasses:function(){return["".concat("bcui-inputfield__textarea"),x()({},"".concat("bcui-inputfield__textarea","-disabled"),this.disabled)]},inputStyles:function(){var e={},t={width:this.width.toString().indexOf("%")>0?this.width:this.width+"px"},i=this.styles?this.styles:{};return Object.assign(e,t,i),e}},methods:{handleEnter:function(e){this.$emit("on-enter",e)},handleIconClick:function(e){this.$emit("on-icon-click",e)},handleFocus:function(e){this.$emit("on-focus",e)},handleBlur:function(e){this.$emit("on-blur",e),G(this,["DatePicker","TimePicker","Cascader","Search"])||this.dispatch("bc-form-item","on-form-blur",this.currentValue)},handleInput:function(e){var t=e.target.value;this.number&&(t=Number.isNaN(Number(t))?t:Number(t)),this.$emit("input",t),this.setCurrentValue(t),this.$emit("on-change",e)},handleChange:function(e){this.$emit("on-input-change",e)},setCurrentValue:function(e){e!==this.currentValue&&(this.$nextTick(function(){}),this.currentValue=e,G(this,["DatePicker","TimePicker","Cascader","Search"])||this.dispatch("bc-form-item","on-form-change",e))}},watch:{value:function(e){this.setCurrentValue(e)}},mounted:function(){"textarea"!==this.type?(this.prepend=void 0!==this.$slots.prepend,this.append=void 0!==this.$slots.append,this.slotSelect=void 0!==this.$slots.select):(this.prepend=!1,this.append=!1),this.slotReady=!0}},Ds=Object(P.a)(Bs,Os,[],!1,null,null,null);Ds.options.__file="src/ui-core/components/input/input.vue";var js=Ds.exports,Ms=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.formClasses,style:this.formStyles},[this._t("default")],2)};Ms._withStripped=!0;var Ls={name:"bc-form",props:{model:{type:Object},rules:{type:Object},width:{type:[Number,String]},offset:{type:[Number,String],default:0},labelWidth:{type:Number},labelAlign:{type:String,validator:function(e){return R(e,["top","left","right"])},default:"right"},inline:{type:Boolean,default:!1},showMessage:{type:Boolean,default:!0}},components:{},data:function(){return{classPrefix:"bcui-form",fields:[]}},computed:{formClasses:function(){return["".concat("bcui-form"),"".concat("bcui-form","-label--").concat(this.labelAlign),x()({},"".concat("bcui-form","--inline"),this.inline)]},formStyles:function(){var e={},t={};if(this.width){var i=this.width.toString().indexOf("%")>0?this.width:this.width+"px";t.width=i}if(this.offset>0){var s=this.offset.toString().indexOf("%")>0?this.offset:this.offset+"px";t["margin-left"]=s}var a=this.styles?this.styles:{};return Object.assign(e,t,a),e}},watch:{rules:function(){this.validate()}},created:function(){var e=this;this.$on("on-form-item-add",function(t){return t&&e.fields.push(t),!1}),this.$on("on-form-item-remove",function(t){return t.prop&&e.fields.splice(e.fields.indexOf(t),1),!1})},methods:{resetFields:function(){this.fields.forEach(function(e){e.resetField()})},validate:function(e){var t=this,i=!0,s=0;this.fields.forEach(function(a){a.validate("",function(a){a&&(i=!1),"function"==typeof e&&++s===t.fields.length&&e(i,a)})})},validateField:function(e,t){var i=this.fields.filter(function(t){return t.prop===e})[0];if(!i)throw new Error("[Warn]: must call validateField with valid prop string!");i.validate("",t)}},mounted:function(){}},As=Object(P.a)(Ls,Ms,[],!1,null,null,null);As.options.__file="src/ui-core/components/form/form.vue";var Rs=As.exports,zs=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.formItemClasses},[e.label?i("label",{class:e.labelClasses,style:e.labelStyles},[e._t("label",[e._v(e._s(e.label)+" ")]),e.tooltip?[i("Tooltip",{class:[e.classPrefix+"__tooltip"],attrs:{content:e.tooltip,placement:e.tooltipPos}},[i("Icon",{attrs:{type:"-bangzhu"}})],1)]:e._e()],2):e._e(),e._v(" "),i("div",{class:[e.classPrefix+"__content"],style:e.contentStyles},[e._t("default"),e._v(" "),i("transition",{attrs:{name:"fade"}},["error"===e.validateState&&e.showMessage&&e.form.showMessage?i("div",{class:[e.classPrefix+"__error-tip"]},[e._v(e._s(e.validateMessage))]):e._e()])],2)])};zs._withStripped=!0;var qs=i(123),Gs=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:[e.classPrefix],on:{mouseenter:e.handleShowPopper,mouseleave:e.handleClosePopper}},[i("div",{ref:"reference",class:[e.classPrefix+"-rel"]},[e._t("default")],2),e._v(" "),i("transition",{attrs:{name:"fade"}},[i("div",{directives:[{name:"show",rawName:"v-show",value:!e.disabled&&(e.visible||e.always),expression:"!disabled && (visible || always)"},{name:"transfer-dom",rawName:"v-transfer-dom"}],ref:"popper",class:[e.classPrefix+"-popper"],attrs:{"data-transfer":e.transfer},on:{mouseenter:e.handleShowPopper,mouseleave:e.handleClosePopper}},[i("div",{class:[e.classPrefix+"-content"]},[i("div",{class:[e.classPrefix+"-arrow"]}),e._v(" "),i("div",{class:[e.classPrefix+"-inner"]},[e._t("content",[e._v(e._s(e.content))])],2)])])])],1)};function Vs(e){return void 0===e&&(e=document.body),!0===e?document.body:e instanceof window.Node?e:document.querySelector(e)}Gs._withStripped=!0;var Us={name:"bc-tooltip",directives:{TransferDom:{inserted:function(e,t,i){var s=t.value;if("true"!==e.dataset.transfer)return!1;e.className=e.className?e.className+" v-transfer-dom":"v-transfer-dom";var a=e.parentNode;if(a){var n=document.createComment(""),o=!1;!1!==s&&(a.replaceChild(n,e),Vs(s).appendChild(e),o=!0),e.__transferDomData||(e.__transferDomData={parentNode:a,home:n,target:Vs(s),hasMovedOut:o})}},componentUpdated:function(e,t){var i=t.value;if("true"!==e.dataset.transfer)return!1;var s=e.__transferDomData;if(s){var a=s.parentNode,n=s.home,o=s.hasMovedOut;!o&&i?(a.replaceChild(n,e),Vs(i).appendChild(e),e.__transferDomData=Object.assign({},e.__transferDomData,{hasMovedOut:!0,target:Vs(i)})):o&&!1===i?(a.replaceChild(e,n),e.__transferDomData=Object.assign({},e.__transferDomData,{hasMovedOut:!1,target:Vs(i)})):i&&Vs(i).appendChild(e)}},unbind:function(e){if("true"!==e.dataset.transfer)return!1;e.className=e.className.replace("v-transfer-dom",""),e.__transferDomData&&(!0===e.__transferDomData.hasMovedOut&&e.__transferDomData.parentNode&&e.__transferDomData.parentNode.appendChild(e),e.__transferDomData=null)}}},mixins:[ci],props:{placement:{validator:function(e){return R(e,["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"])},default:"top"},content:{type:[String,Number],default:""},delay:{type:Number,default:100},disabled:{type:Boolean,default:!1},controlled:{type:Boolean,default:!1},always:{type:Boolean,default:!1},transfer:{type:Boolean,default:!1}},data:function(){return{classPrefix:"bcui-tooltip"}},watch:{content:function(){this.updatePopper()}},methods:{handleShowPopper:function(){var e=this;this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){e.visible=!0},this.delay)},handleClosePopper:function(){var e=this;this.timeout&&(clearTimeout(this.timeout),this.controlled||(this.timeout=setTimeout(function(){e.visible=!1},100)))}},mounted:function(){this.always&&this.updatePopper()}},Fs=Object(P.a)(Us,Gs,[],!1,null,null,null);Fs.options.__file="src/ui-core/components/tooltip/tooltip.vue";var Ws=Fs.exports;function Hs(e,t){for(var i=e,s=(t=(t=t.replace(/\[(\w+)\]/g,".$1")).replace(/^\./,"")).split("."),a=0,n=s.length-1;a1&&void 0!==arguments[1]?arguments[1]:function(){},s=this.getFilteredRule(e);if(!s||0===s.length)return i(),!0;this.validateState="validating";var a={};a[this.prop]=s;var n=new qs.a(a),o={};o[this.prop]=this.fieldValue,n.validate(o,{firstFields:!0},function(e){t.validateState=e?"error":"success",t.validateMessage=e?e[0].message:"",i(t.validateMessage)})},resetField:function(){this.validateState="",this.validateMessage="";var e=this.form.model,t=this.fieldValue,i=this.prop;-1!==i.indexOf(":")&&(i=i.replace(/:/,"."));var s=Hs(e,i);Array.isArray(t)&&t.length>0?(this.validateDisabled=!0,s.o[s.k]=[]):t!==this.initialValue&&(this.validateDisabled=!0,s.o[s.k]=this.initialValue)},onFieldBlur:function(){this.validate("blur")},onFieldChange:function(){this.validateDisabled?this.validateDisabled=!1:this.validate("change")}},mounted:function(){var e=this;if(this.prop){this.dispatch("bc-form","on-form-item-add",this),Object.defineProperty(this,"initialValue",{value:this.fieldValue});var t=this.getRules();t.length&&(t.every(function(t){if(t.required)return e.isRequired=!0,!1}),this.$on("on-form-blur",this.onFieldBlur),this.$on("on-form-change",this.onFieldChange))}},beforeDestroy:function(){this.dispatch("bc-form","on-form-item-remove",this)}},Qs=Object(P.a)(Ks,zs,[],!1,null,null,null);Qs.options.__file="src/ui-core/components/form/form-item.vue";var Ys=Qs.exports,Js=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.rowClasses,style:this.rowStyles},[this._t("default")],2)};Js._withStripped=!0;var Xs={name:"BcRow",components:{},props:{align:{},gutter:{type:Number,default:0},justify:{},type:{}},data:function(){return{}},watch:{gutter:function(e){this.updateGutter(e)}},computed:{rowClasses:function(){var e;return["".concat("bcui-row"),(e={},x()(e,"".concat("bcui-row","-").concat(this.type),!!this.type),x()(e,"".concat("bcui-row","-").concat(this.type,"-").concat(this.align),!!this.align),x()(e,"".concat("bcui-row","-").concat(this.type,"-").concat(this.justify),!!this.justify),x()(e,"".concat(this.className),!!this.className),e)]},rowStyles:function(){var e={};return 0!==this.gutter&&(e={marginLeft:this.gutter/-2+"px",marginRight:this.gutter/-2+"px"}),e}},methods:{updateGutter:function(e){var t=V(this,"BcCol");t.length&&t.forEach(function(t){0!==e&&(t.gutter=e)})}},mounted:function(){}},Zs=(i(201),Object(P.a)(Xs,Js,[],!1,null,null,null));Zs.options.__file="src/ui-core/components/grid/row.vue";var ea=Zs.exports,ta=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.colClasses,style:this.colStyles},[this._t("default")],2)};ta._withStripped=!0;var ia=i(17),sa=i.n(ia),aa={name:"BcCol",components:{},props:{offset:{},order:{},pull:{},push:{},span:{type:Number|String},xs:{type:Number|Object},sm:{type:Number|Object},md:{type:Number|Object},lg:{type:Number|Object},xl:{type:Number|Object},xxl:{type:Number|Object}},data:function(){return{gutter:0}},watch:{},computed:{colClasses:function(){var e,t=this,i=["xs","sm","md","lg","xl","xxl"].map(function(e){var i=t[e],s={};return isNaN(i)?"object"===sa()(i)&&Object.keys(i).map(function(t){t&&(s["".concat("bcui-col","-").concat(e,"-").concat(t,"-").concat(i[t])]=!!i[t])}):s["".concat("bcui-col","-").concat(e,"-").concat(i)]=!0,s});return["".concat("bcui-col"),(e={},x()(e,"".concat("bcui-col","-").concat(this.span),!!this.span),x()(e,"".concat("bcui-col","-push-").concat(this.push),!!this.push),x()(e,"".concat("bcui-col","-pull-").concat(this.pull),!!this.pull),x()(e,"".concat("bcui-col","-offset-").concat(this.offset),!!this.offset),e)].concat(h()(i))},colStyles:function(){var e={};return 0!==this.gutter&&(e={paddingLeft:this.gutter/2+"px",paddingRight:this.gutter/2+"px"}),e}},methods:{updateGutter:function(){var e=G(this,"BcRow");e&&e.updateGutter(e.gutter)}},mounted:function(){this.updateGutter()},beforeDestroy:function(){this.updateGutter()}},na=(i(202),Object(P.a)(aa,ta,[],!1,null,null,null));na.options.__file="src/ui-core/components/grid/col.vue";var oa=na.exports,ra=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],class:e.classes,style:e.wrapperStyles},[i("div",{ref:"reference",class:[e.prefixCls+"__inner"],on:{click:e.toggleMenu}},[e._l(e.selectedMultiple,function(t,s){return i("div",{key:s,staticClass:"bcui-tag"},[i("span",{staticClass:"bcui-tag-text"},[e._v(e._s(t.label))]),e._v(" "),i("Icon",{attrs:{type:"times"},nativeOn:{click:function(t){t.stopPropagation(),e.removeTag(s)}}})],1)}),e._v(" "),i("span",{directives:[{name:"show",rawName:"v-show",value:e.showPlaceholder&&!e.filterable,expression:"showPlaceholder && !filterable"}],class:[e.prefixCls+"__placeholder"]},[e._v(e._s(e.localePlaceholder))]),e._v(" "),i("span",{directives:[{name:"show",rawName:"v-show",value:!e.showPlaceholder&&!e.multiple&&!e.filterable,expression:"!showPlaceholder && !multiple && !filterable"}],class:[e.prefixCls+"__selected-value"]},[e._v(e._s(e.selectedSingle))]),e._v(" "),e.filterable?i("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],ref:"input",class:[e.prefixCls+"__input"],style:e.inputStyle,attrs:{type:"text",placeholder:e.showPlaceholder?e.localePlaceholder:"",disabled:e.disabled},domProps:{value:e.query},on:{blur:e.handleBlur,keydown:[e.resetInputState,function(t){return"button"in t||!e._k(t.keyCode,"delete",[8,46],t.key,["Backspace","Delete"])?e.handleInputDelete(t):null}],input:function(t){t.target.composing||(e.query=t.target.value)}}}):e._e(),e._v(" "),i("Icon",{directives:[{name:"show",rawName:"v-show",value:e.showCloseIcon,expression:"showCloseIcon"}],class:[e.prefixCls+"__arrow"],attrs:{type:"times"},nativeOn:{click:function(t){return t.stopPropagation(),e.clearSingleSelect(t)}}}),e._v(" "),e.remote?e._e():i("Icon",{class:[e.prefixCls+"__arrow"],attrs:{type:"triangle-bottom"}})],2),e._v(" "),i("transition",{attrs:{name:e.transitionName}},[i("Drop",{directives:[{name:"show",rawName:"v-show",value:e.dropVisible,expression:"dropVisible"}],ref:"dropdown",staticClass:"bcui-select__dropdown",attrs:{placement:e.placement}},[i("ul",{directives:[{name:"show",rawName:"v-show",value:e.notFountShow,expression:"notFountShow"}],class:[e.prefixCls+"__empty"]},[i("li",[e._v(e._s(e.localeNotFoundText))])]),e._v(" "),i("ul",{directives:[{name:"show",rawName:"v-show",value:!e.notFound&&!e.remote||e.remote&&!e.loading&&!e.notFound,expression:"(!notFound && !remote) || (remote && !loading && !notFound)"}],class:[e.prefixCls+"__dropdown-list"]},[e._t("default")],2),e._v(" "),i("ul",{directives:[{name:"show",rawName:"v-show",value:e.loading,expression:"loading"}],class:[e.prefixCls+"__loading"]},[e._v(e._s(e.localeLoadingText))])])],1)],1)};ra._withStripped=!0;var ca="bcui-select",la={name:"bc-select",mixins:[Wt],components:{Icon:ti,Drop:pi},directives:{clickoutside:Ti},props:{value:{type:[String,Number,Array],default:""},label:{type:[String,Number,Array],default:""},multiple:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!1},placeholder:{type:String},filterable:{type:Boolean,default:!1},filterMethod:{type:Function},remote:{type:Boolean,default:!1},remoteMethod:{type:Function},loading:{type:Boolean,default:!1},loadingText:{type:String},size:{validator:function(e){return R(e,["small","large","default"])}},labelInValue:{type:Boolean,default:!1},notFoundText:{type:String},placement:{validator:function(e){return R(e,["top","bottom"])},default:"bottom"},width:{type:Number}},data:function(){return{prefixCls:ca,visible:!1,options:[],optionInstances:[],selectedSingle:"",selectedMultiple:[],focusIndex:0,query:"",lastQuery:"",selectToChangeQuery:!1,inputLength:20,notFound:!1,slotChangeDuration:!1,model:this.value,currentLabel:this.label}},computed:{classes:function(){var e;return["".concat(ca),(e={},x()(e,"".concat(ca,"--visible"),this.visible),x()(e,"".concat(ca,"--disabled"),this.disabled),x()(e,"".concat(ca,"--multiple"),this.multiple),x()(e,"".concat(ca,"--single"),!this.multiple),x()(e,"".concat(ca,"--show-clear"),this.showCloseIcon),x()(e,"".concat(ca,"--").concat(this.size),!!this.size),e)]},showPlaceholder:function(){var e=!1;return"string"==typeof this.model?""===this.model&&(e=!0):Array.isArray(this.model)?this.model.length||(e=!0):null===this.model&&(e=!0),e},showCloseIcon:function(){return!this.multiple&&this.clearable&&!this.showPlaceholder},wrapperStyles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),e},inputStyle:function(){var e={};return this.multiple&&(this.showPlaceholder?e.width="100%":e.width="".concat(this.inputLength,"px")),e},localePlaceholder:function(){return void 0===this.placeholder?"请选择":this.placeholder},localeNotFoundText:function(){return void 0===this.notFoundText?"没有匹配数据":this.notFoundText},localeLoadingText:function(){return void 0===this.loadingText?"加载中...":this.loadingText},transitionName:function(){return"bottom"===this.placement?"slide-up":"slide-down"},dropVisible:function(){var e=!0,t=this.$slots.default||[];return this.loading||!this.remote||""!==this.query||t.length||(e=!1),this.visible&&e},notFountShow:function(){var e=this.$slots.default||[];return this.notFound&&!this.remote||this.remote&&!this.loading&&!e.length}},methods:{toggleMenu:function(){if(this.disabled)return!1;this.visible=!this.visible},hideMenu:function(){this.visible=!1,this.focusIndex=0,this.broadcast("bc-option","on-select-close")},findChild:function(e){var t=function t(i){i.$options.componentName?e(i):i.$children.length&&i.$children.forEach(function(e){t(e)})};this.optionInstances.length?this.optionInstances.forEach(function(e){t(e)}):this.$children.forEach(function(e){t(e)})},updateOptions:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],s=[],a=1;this.findChild(function(i){s.push({value:i.value,label:void 0===i.label?i.$el.innerHTML:i.label}),i.index=a++,e&&t.optionInstances.push(i)}),this.options=s,e&&(this.remote||(this.updateSingleSelected(!0,i),this.updateMultipleSelected(!0,i)))},updateSingleSelected:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=sa()(this.model);if("string"===i||"number"===i){for(var s=!1,a=0;a0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.multiple&&Array.isArray(this.model)){for(var i=this.remote?this.selectedMultiple:[],s=0;s1&&void 0!==arguments[1]&&arguments[1];if(!this.multiple){var i="";this.findChild(function(t){t.value===e?(t.selected=!0,i=void 0===t.label?t.$el.innerHTML:t.label):t.selected=!1}),this.hideMenu(),t||(this.labelInValue?(this.$emit("on-change",{value:e,label:i}),this.dispatch("bc-form-item","on-form-change",{value:e,label:i})):(this.$emit("on-change",e),this.dispatch("bc-form-item","on-form-change",e)))}},toggleMultipleSelected:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.multiple){for(var i=[],s=0;s=0?(t.selected=!0,i[s].label=void 0===t.label?t.$el.innerHTML:t.label):t.selected=!1}),t||(this.labelInValue?(this.$emit("on-change",i),this.dispatch("bc-form-item","on-form-change",i)):(this.$emit("on-change",e),this.dispatch("bc-form-item","on-form-change",e)))}},handleClose:function(){this.hideMenu()},handleKeydown:function(e){if(this.visible){var t=e.keyCode;27===t&&(e.preventDefault(),this.hideMenu()),40===t&&(e.preventDefault(),this.navigateOptions("next")),38===t&&(e.preventDefault(),this.navigateOptions("prev")),13===t&&(e.preventDefault(),this.findChild(function(e){e.isFocus&&e.select()}))}},navigateOptions:function(e){var t=this;if("next"===e){var i=this.focusIndex+1;this.focusIndex=this.focusIndex===this.options.length?1:i}else if("prev"===e){var s=this.focusIndex-1;this.focusIndex=this.focusIndex<=1?this.options.length:s}var a={disabled:!1,hidden:!1},n=!1;this.findChild(function(e){e.index===t.focusIndex?(a.disabled=e.disabled,a.hidden=e.hidden,e.disabled||e.hidden||(e.isFocus=!0)):e.isFocus=!1,e.hidden||e.disabled||(n=!0)}),this.resetScrollTop(),(a.disabled||a.hidden)&&n&&this.navigateOptions(e)},resetScrollTop:function(){var e=this.focusIndex-1,t=this.optionInstances[e].$el.getBoundingClientRect().bottom-this.$refs.dropdown.$el.getBoundingClientRect().bottom,i=this.optionInstances[e].$el.getBoundingClientRect().top-this.$refs.dropdown.$el.getBoundingClientRect().top;t>0&&(this.$refs.dropdown.$el.scrollTop+=t),i<0&&(this.$refs.dropdown.$el.scrollTop+=i)},handleBlur:function(){var e=this;setTimeout(function(){var t=e.model;e.multiple?e.query="":""!==t?(e.findChild(function(i){i.value===t&&(e.query=void 0===i.label?i.searchLabel:i.label)}),e.remote&&e.query!==e.lastQuery&&e.$nextTick(function(){e.query=e.lastQuery})):e.query=""},300)},resetInputState:function(){this.inputLength=12*this.$refs.input.value.length+20},handleInputDelete:function(){this.multiple&&this.model.length&&""===this.query&&this.removeTag(this.model.length-1)},slotChange:function(){this.options=[],this.optionInstances=[]},setQuery:function(e){this.filterable&&(this.query=e)},modelToQuery:function(){var e=this;!this.multiple&&this.filterable&&void 0!==this.model&&this.findChild(function(t){e.model===t.value&&(t.label?e.query=t.label:t.searchLabel?e.query=t.searchLabel:e.query=t.value)})},broadcastQuery:function(e){!function e(t,i){var s=t.$children,a=null;if(s.length){s.forEach(function(e){e.$options.name===i&&(a=e)});for(var n=0;n-1:e.model===t.value}):(e.modelToQuery(),e.$nextTick(function(){e.broadcastQuery("")})),e.slotChange(),e.updateOptions(!0,!0)}),this.$on("remove",function(){e.remote?e.findChild(function(t){t.selected=e.multiple?e.model.indexOf(t.value)>-1:e.model===t.value}):(e.modelToQuery(),e.$nextTick(function(){e.broadcastQuery("")})),e.slotChange(),e.updateOptions(!0,!0)}),this.$on("on-select-selected",function(t){if(e.model===t)e.hideMenu();else if(e.multiple){var i=e.model.indexOf(t);i>=0?e.removeTag(i):(e.model.push(t),e.broadcast("Drop","on-update-popper")),e.filterable&&(""!==e.query&&(e.selectToChangeQuery=!0),e.query="",e.$refs.input.focus())}else e.model=t,e.filterable&&e.findChild(function(i){i.value===t&&(""!==e.query&&(e.selectToChangeQuery=!0),e.lastQuery=e.query=void 0===i.label?i.searchLabel:i.label)})})},beforeDestroy:function(){document.removeEventListener("keydown",this.handleKeydown)},watch:{value:function(e){this.model=e,""===e&&(this.query="")},label:function(e){this.currentLabel=e,this.updateLabel()},model:function(){var e=this;this.$emit("input",this.model),this.modelToQuery(),this.multiple?this.slotChangeDuration?this.slotChangeDuration=!1:this.updateMultipleSelected():this.updateSingleSelected(),!this.visible&&this.filterable&&this.$nextTick(function(){e.broadcastQuery("")})},visible:function(e){var t=this;if(e){if(this.filterable&&(this.multiple?this.$refs.input.focus():this.$refs.input.select(),this.remote)){this.findChild(function(e){e.selected=t.multiple?t.model.indexOf(e.value)>-1:t.model===e.value});var i=this.$slots.default||[];""===this.query||i.length||this.remoteMethod(this.query)}this.broadcast("Drop","on-update-popper")}else this.filterable&&(this.$refs.input.blur(),setTimeout(function(){t.broadcastQuery("")},300)),this.broadcast("Drop","on-destroy-popper")},query:function(e){var t=this;if(this.remote&&this.remoteMethod)this.selectToChangeQuery||(this.$emit("on-query-change",e),this.remoteMethod(e)),this.focusIndex=0,this.findChild(function(e){e.isFocus=!1});else{this.selectToChangeQuery||this.$emit("on-query-change",e),this.broadcastQuery(e);var i=!0;this.$nextTick(function(){t.findChild(function(e){e.hidden||(i=!1)}),t.notFound=i})}this.selectToChangeQuery=!1,this.broadcast("Drop","on-update-popper")}}},ua=Object(P.a)(la,ra,[],!1,null,null,null);ua.options.__file="src/ui-core/components/select/select.vue";var da=ua.exports,pa=function(){var e=this,t=e.$createElement;return(e._self._c||t)("li",{directives:[{name:"show",rawName:"v-show",value:!e.hidden,expression:"!hidden"}],class:e.classes,on:{click:function(t){return t.stopPropagation(),e.select(t)},mouseout:function(t){return t.stopPropagation(),e.blur(t)}}},[e._t("default",[e._v(e._s(e.showLabel))])],2)};pa._withStripped=!0;var ha={name:"bc-option",mixins:[Wt],componentName:"select-item",props:{value:{type:[String,Number],required:!0},label:{type:[String,Number]},disabled:{type:Boolean,default:!1}},data:function(){return{selected:!1,index:0,isFocus:!1,hidden:!1,searchLabel:""}},computed:{classes:function(){var e;return["".concat("bcui-select-item"),(e={},x()(e,"".concat("bcui-select-item","--disabled"),this.disabled),x()(e,"".concat("bcui-select-item","--selected"),this.selected),x()(e,"".concat("bcui-select-item","--focus"),this.isFocus),e)]},showLabel:function(){return this.label?this.label:this.value}},methods:{select:function(){if(this.disabled)return!1;this.dispatch("bc-select","on-select-selected",this.value)},blur:function(){this.isFocus=!1},queryChange:function(e){var t=e.replace(/(\^|\(|\)|\[|\]|\$|\*|\+|\.|\?|\\|\{|\}|\|)/g,"\\$1");this.hidden=!new RegExp(t,"i").test(this.searchLabel)}},compiled:function(){this.searchLabel=this.$el.innerHTML},mounted:function(){var e=this;this.searchLabel=this.$el.innerHTML,this.dispatch("bc-select","append"),this.$on("on-select-close",function(){e.isFocus=!1}),this.$on("on-query-change",function(t){e.queryChange(t)})},beforeDestroy:function(){this.dispatch("bc-select","remove")}},fa=Object(P.a)(ha,pa,[],!1,null,null,null);fa.options.__file="src/ui-core/components/select/option.vue";var ma=fa.exports,va=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("li",{directives:[{name:"show",rawName:"v-show",value:!e.hidden,expression:"!hidden"}],class:[e.prefixCls+"-wrap"]},[i("div",{class:[e.prefixCls+"-title"]},[e._v(e._s(e.label))]),e._v(" "),i("ul",[i("li",{ref:"options",class:[e.prefixCls]},[e._t("default")],2)])])};va._withStripped=!0;var ba={name:"bc-option-group",props:{label:{type:String,default:""}},data:function(){return{prefixCls:"bcui-select-group",hidden:!1}},methods:{queryChange:function(){var e=this;this.$nextTick(function(){for(var t=e.$refs.options.querySelectorAll(".bcui-select-item"),i=!1,s=0;s=this.$children.length||(e&&this.$children[this.current].currentStatus||(this.$children[this.current].currentStatus=this.status))}},mounted:function(){this.updateStepItem(!0),this.setNextError(),this.updateCurrent(!0)}},ka=(i(203),Object(P.a)(Ca,ya,[],!1,null,null,null));ka.options.__file="src/ui-core/components/steps/steps.vue";var wa=ka.exports,xa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.stepItemClasses,style:e.stepItemStyles},[i("div",{class:[e.classPrefix+"-tail"]},[i("span",{class:[e.classPrefix+"-tail__line"]})]),e._v(" "),i("div",{class:[e.classPrefix+"-head"]},[i("div",{class:[e.classPrefix+"-head__inner"]},[e.showIcon?i("span",{class:e.iconClasses}):i("span",{staticClass:"bcui-steps-icon"},[e._v(e._s(e.stepNumber))])])]),e._v(" "),i("div",{class:[e.classPrefix+"-body"]},[e.title?i("div",{class:[e.classPrefix+"-title"]},[e._v(e._s(e.title))]):e._e(),e._v(" "),e.description?i("div",{class:[e.classPrefix+"-description"]},[e._v(e._s(e.description))]):e._e()])])};xa._withStripped=!0;var Ta={name:"bc-steps-item",components:{},props:{icon:{type:String,default:""},title:{type:String,default:""},description:{type:String,default:""},status:{validator:function(e){return R(e,["wait","process","finish","error"])}}},data:function(){return{classPrefix:"bcui-steps",stepNumber:"",stepLength:1,nextError:!1,currentStatus:""}},watch:{status:function(e){this.currentStatus=e,"error"===this.currentStatus&&this.$parent.setNextError()}},computed:{showIcon:function(){return this.icon||"finish"===this.currentStatus||"error"===this.currentStatus},stepItemClasses:function(){var e;return["".concat("bcui-steps","-item"),"".concat("bcui-steps","-status--").concat(this.currentStatus),(e={},x()(e,"".concat("bcui-steps","-custom"),!!this.icon),x()(e,"".concat("bcui-steps","-next-error"),this.nextError),e)]},iconClasses:function(){var e="";return this.icon?e=this.icon:"finish"===this.currentStatus?e="dui":"error"===this.currentStatus&&(e="close"),["".concat("bcui-steps","-icon"),"".concat("bcui-icon"),x()({},"".concat("bcui-icon","-").concat(e),""!==e)]},stepItemStyles:function(){return this.stepLength===this.stepNumber?{}:{marginRight:"-".concat(this.$parent.offset,"px"),width:"".concat(100/(this.stepLength-1),"%")}}},methods:{},created:function(){this.currentStatus=this.status},mounted:function(){}},$a=(i(204),Object(P.a)(Ta,xa,[],!1,null,null,null));$a.options.__file="src/ui-core/components/steps/steps-item.vue";var Pa=$a.exports,Ea=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{class:e.siwtchClasses,style:e.customColor,on:{click:e.toggle}},[i("span",{class:e.innerClasses},[e.checked?e._t("open"):e._e(),e._v(" "),e.checked?e._e():e._t("close")],2)])};Ea._withStripped=!0;var Ia={name:"bc-switch",mixins:[Wt],props:{value:{type:[String,Boolean,Number],default:!1},checkedValue:{type:[String,Boolean,Number],default:!0},uncheckedValue:{type:[String,Boolean,Number],default:!1},checkedColor:{type:String},uncheckedColor:{type:String},disabled:{type:Boolean,default:!1},size:{validator:function(e){return R(e,["large","small"])}}},data:function(){return{currentValue:this.value}},computed:{siwtchClasses:function(){var e;return["".concat("bcui-switch"),(e={},x()(e,"".concat("bcui-switch","--checked"),this.currentValue===this.checkedValue),x()(e,"".concat("bcui-switch","--disabled"),this.disabled),x()(e,"".concat("bcui-switch","--").concat(this.size),!!this.size),e)]},innerClasses:function(){return"".concat("bcui-switch","__inner")},customColor:function(){var e=null;return this.checkedColor&&this.currentValue===this.checkedValue&&((e={}).backgroundColor=this.checkedColor,e.borderColor=this.checkedColor),this.uncheckedColor&&this.currentValue===this.uncheckedValue&&((e={}).backgroundColor=this.uncheckedColor,e.borderColor=this.uncheckedColor),e},checked:function(){return this.currentValue===this.checkedValue}},methods:{toggle:function(){if(this.disabled)return!1;var e=this.currentValue===this.checkedValue?this.uncheckedValue:this.checkedValue;this.currentValue=e,this.$emit("input",e),this.$emit("on-change",e),this.dispatch("bc-form-item","on-form-change",e)}},watch:{value:function(e){this.currentValue=e}}},Na=Object(P.a)(Ia,Ea,[],!1,null,null,null);Na.options.__file="src/ui-core/components/switch/switch.vue";var Oa=Na.exports,Ba=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.tabClasses},[i("div",{class:[e.classPrefix+"-header"]},[i("div",{class:e.navbarClasses},[e.scrollable?[i("div",{class:["bcui-tab-navbar-prev",e.scrollable.prev?"":"disabled"],on:{click:e.scrollPrev}},[i("i",{staticClass:"bcui-icon-arrow-left"})]),e._v(" "),i("div",{class:["bcui-tab-navbar-next",e.scrollable.next?"":"disabled"],on:{click:e.scrollNext}},[i("i",{staticClass:"bcui-icon-arrow-right"})])]:e._e(),e._v(" "),i("div",{ref:"navScroll",class:e.scrollClasses},[i("div",{ref:"navbar",class:[e.classPrefix+"-navbar__inner"],style:e.navStyle},[i("div",{class:e.activeBarClasses,style:e.activeBarStyle}),e._v(" "),e._l(e.navList,function(t,s){return i("div",{key:s,class:e.createTabItemClass(t),on:{click:function(t){e.handleChange(s)}}},[""!==t.icon?i("bc-icon",{attrs:{type:t.icon}}):e._e(),e._v(e._s(t.label)+"\n "),e.showClose(t)?i("bc-icon",{attrs:{type:"close"},nativeOn:{click:function(t){t.stopPropagation(),e.handleRemove(s)}}}):e._e()],1)})],2)])],2)]),e._v(" "),i("div",{class:[e.classPrefix+"-content"]},[e._t("default")],2)])};Ba._withStripped=!0;var Da={name:"bc-tab",components:{},props:{value:{type:[String,Number]},type:{validator:function(e){return R(e,["card"])},type:String},animated:{type:Boolean,default:!0},size:{type:String,default:""}},data:function(){return{classPrefix:"bcui-tab",navList:[],activeBarWidth:0,activeBarOffset:0,activeTab:this.value,navStyle:{transform:""},scrollable:!1}},computed:{tabClasses:function(){var e;return["".concat("bcui-tab"),(e={},x()(e,"".concat("bcui-tab","--card"),"card"===this.type),x()(e,"".concat("bcui-tab","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-tab","--no-animation"),!this.animated),e)]},navbarClasses:function(){var e;return["".concat("bcui-tab-navbar"),(e={},x()(e,"".concat("bcui-tab-navbar","--card"),this.type),x()(e,"scrolled",!!this.scrollable),e)]},scrollClasses:function(){return["".concat("bcui-tab-navbar-scroll"),{}]},activeBarClasses:function(){var e="".concat("bcui-tab","-activebar");return[e,x()({},"".concat(e,"--animated"),this.animated)]},activeBarStyle:function(){var e=this.type,t=this.activeBarWidth,i=this.activeBarOffset,s=this.animated,a={display:"none",width:"".concat(t,"px")};return e||(a.display="block"),s&&(a.transform="translate3d(".concat(i,"px, 0px, 0px)")),a}},methods:{getTabList:function(){return this.$children.filter(function(e){return"bc-tab-pane"===e.$options.name})},initNavList:function(){var e=this;this.navList=[],this.paneList=this.getTabList(),this.paneList.forEach(function(t,i){e.navList.push({label:t.label,icon:t.icon||"",name:t.name||i,disabled:t.disabled,closable:t.closable}),0===i&&(e.activeTab||(e.activeTab=t.name||i))}),this.update(),this.updatePaneStatus(),this.updateActiveBarStatus()},createTabItemClass:function(e){var t,i="".concat("bcui-tab","-navbar__item");return[i,(t={},x()(t,"".concat(i,"--disabled"),e.disabled),x()(t,"".concat(i,"--active"),e.name===this.activeTab),t)]},handleChange:function(e){var t=this.navList[e];if(t.disabled)return!1;this.activeTab=t.name,this.$emit("input",t.name),this.$emit("on-tab-click",t.name)},handleRemove:function(e){var t=this.getTabList(),i=t[e];if(i.$destroy(),i.name===this.activeTab){var s=this.getTabList(),a=-1;if(s.length){var n=t.filter(function(t,i){return!t.disabled&&ie});a=o.length?o[0].currentName:n.length?n[n.length-1].currentName:s[0].currentName}this.activeTab=a,this.$emit("input",a)}this.$emit("on-tab-remove",i.currentName),this.initNavList()},showClose:function(e){return"card"===this.type&&(null!==e.closable?e.closable:this.closable)},updatePaneStatus:function(){var e=this;this.getTabList().forEach(function(t){t.show=t.name===e.activeTab})},updateActiveBarStatus:function(){var e=this;this.$nextTick(function(){var t=e.navList.findIndex(function(t){return t.name===e.activeTab});if(e.$refs.navbar){var i=e.$refs.navbar.querySelectorAll(".".concat("bcui-tab","-navbar__item")),s=i[t];if(e.activeBarWidth=parseFloat(q(s,"width")),t>0){for(var a=0,n="small"===e.size?0:parseFloat(q(s,"marginRight")),o=0;o2*t?i+t:e-t;this.setOffset(s)}},scrollPrev:function(){var e=this.$refs.navScroll.offsetWidth,t=this.getCurrentScrollOffset();if(t){var i=t>e?t-e:0;this.setOffset(i)}},update:function(){if(this.$refs.navbar&&this.$refs.navScroll){var e=this.$refs.navbar.offsetWidth,t=this.$refs.navScroll.offsetWidth,i=this.getCurrentScrollOffset();if(t0&&this.setOffset(0)}}},watch:{value:function(e){this.activeTab=e},activeTab:function(e,t){this.updatePaneStatus(),this.updateActiveBarStatus()}},updated:function(){this.update()},mounted:function(){this.initNavList()}},ja=Object(P.a)(Da,Ba,[],!1,null,null,null);ja.options.__file="src/ui-core/components/tab/tab.vue";var Ma=ja.exports,La=function(){var e=this.$createElement;return(this._self._c||e)("div",{directives:[{name:"show",rawName:"v-show",value:this.show,expression:"show"}],class:this.classPrefix},[this._t("default")],2)};La._withStripped=!0;var Aa={name:"bc-tab-pane",props:{name:{type:String},label:{type:String,default:""},icon:{type:String},disabled:{type:Boolean,default:!1},closable:{type:Boolean,default:null}},data:function(){return{classPrefix:"bcui-tab-pane",show:!1,currentName:this.name}},watch:{name:function(e){this.currentName=e,this.updateNav()},label:function(){this.updateNav()},icon:function(){this.updateNav()},disabled:function(){this.updateNav()}},components:{},created:function(){},mounted:function(){},methods:{updateNav:function(){this.$parent.initNavList()}},destroyed:function(){this.updateNav()}},Ra=Object(P.a)(Aa,La,[],!1,null,null,null);Ra.options.__file="src/ui-core/components/tab/tab-pane.vue";var za=Ra.exports,qa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("transition",{attrs:{name:"fade"}},[i("div",{class:e.tagClasses,style:e.style.container&&e.style.container},[e.showDot?i("span",{class:e.dotClasses,style:e.style.dot&&e.style.dot}):e._e(),e._v(" "),i("span",{class:e.textClasses},[e._t("default")],2),e._v(" "),e.closable?i("bc-icon",{attrs:{type:"times"},nativeOn:{click:function(t){return t.stopPropagation(),e.close(t)}}}):e._e()],1)])};qa._withStripped=!0;var Ga={name:"bc-tag",props:{closable:{type:Boolean,default:!1},color:{type:String},type:{validator:function(e){return R(e,["border","dot"])}},name:{type:[String,Number]}},components:{"bc-icon":ti},data:function(){return{classPrefix:"bcui-tag"}},computed:{style:function(){var e=this.color;return!!e&&(0!=e.indexOf("#")&&R(this.color,["primary","warning","success"])?{}:"dot"==this.type?{dot:{backgroundColor:e},container:{}}:"border"==this.type?{dot:{},container:{borderColor:e,color:e}}:{dot:{},container:{borderColor:e,backgroundColor:e,color:"#fff"}})},tagClasses:function(){var e;return["".concat("bcui-tag"),(e={},x()(e,"".concat("bcui-tag","--").concat(this.color),!!this.color&&R(this.color,["primary","warning","success"])),x()(e,"".concat("bcui-tag","-").concat(this.type),!!this.type),x()(e,"".concat("bcui-tag","--closable"),this.closable),e)]},textClasses:function(){return"".concat("bcui-tag","-text")},dotClasses:function(){return"".concat("bcui-tag","-dot__inner")},showDot:function(){return!!this.type&&"dot"===this.type}},created:function(){},methods:{close:function(e){void 0===this.name?this.$emit("on-close",e):this.$emit("on-close",e,this.name)}},mounted:function(){}},Va=Object(P.a)(Ga,qa,[],!1,null,null,null);Va.options.__file="src/ui-core/components/tag/tag.vue";var Ua=Va.exports,Fa=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{class:this.classPrefix},this._l(this.model,function(e){return t("tree-node",{key:e,attrs:{model:e}})}))};Fa._withStripped=!0;var Wa=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ul",{class:e.classPrefix},[i("li",[i("div",{class:{bold:e.isParent}},[e.model.isParent||0==e.model.depth?i("span",{class:e.expandArrowClasses,on:{click:e.toggle}},[i("icon",{attrs:{type:"arrow-right"}})],1):e._e(),e._v(" "),0==e.model.depth?i("span",[i("icon",{attrs:{type:"leftroot"}})],1):e._e(),e._v(" "),e.model.depth>0&&!e.model.isParent?i("span",[i("icon",{attrs:{type:"node"}})],1):e._e(),e._v(" "),i("span",{class:e.nodeNameClasses,on:{click:function(t){e.handleNodeClick(e.model)}}},[e._v(e._s(e.model.name))])]),e._v(" "),i("transition",{attrs:{name:"move"}},[e.isParent?i("ul",{directives:[{name:"show",rawName:"v-show",value:e.open,expression:"open"}],class:e.classPrefix},e._l(e.model.children,function(e){return i("bc-tree-node",{key:e,attrs:{model:e}})})):e._e()])],1)])};Wa._withStripped=!0;var Ha={name:"bc-tree-node",props:{model:Object},mixins:[Wt],components:{Icon:ti},data:function(){return{open:this.model.open,classPrefix:"bcui-treenode"}},computed:{isParent:function(){return this.model.children&&this.model.children.length},expandArrowClasses:function(){var e="".concat("bcui-treenode","-arrow");return[e,x()({},"".concat(e,"--open"),!!this.open)]},nodeNameClasses:function(){return["".concat("bcui-treenode","-name"),{}]}},methods:{toggle:function(){this.isParent&&(this.open=!this.open)},changeType:function(){this.isParent||(this.$set(this.model,"children",[]),this.addChild(),this.open=!0)},addChild:function(){this.model.children.push({name:"new stuff"})},handleNodeClick:function(e){this.dispatch("bc-tree","on-node-click",this.model)}}},Ka=Object(P.a)(Ha,Wa,[],!1,null,null,null);Ka.options.__file="src/ui-core/components/tree/tree-node.vue";var Qa=Ka.exports,Ya={name:"tree",props:{model:{type:Array}},components:{TreeNode:Qa},data:function(){return{classPrefix:"bcui-tree"}},computed:{},methods:{},mounted:function(){var e=this;this.$on("on-node-click",function(t){e.$emit("on-click",t)})}},Ja=Object(P.a)(Ya,Fa,[],!1,null,null,null);Ja.options.__file="src/ui-core/components/tree/tree.vue";var Xa=Ja.exports;Xa.install=function(e){e.component(Xa.name,Xa)};var Za=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.simple?i("ul",{class:e.simpleWrapClasses,style:e.styles},[i("li",{class:e.prevClasses,attrs:{title:e.Previous},on:{click:e.prev}},[i("a",[i("bc-icon",{attrs:{type:"chevron-left"}})],1)]),e._v(" "),i("div",{class:e.simplePagerClasses,attrs:{title:e.currentPage+"/"+e.allPages}},[i("input",{attrs:{type:"text"},domProps:{value:e.currentPage},on:{keydown:e.keyDown,keyup:e.keyUp,change:e.keyUp}}),e._v(" "),i("span",[e._v("/")]),e._v(" "+e._s(e.allPages)+"\n ")]),e._v(" "),i("li",{class:e.nextClasses,attrs:{title:e.Next},on:{click:e.next}},[i("a",[i("bc-icon",{attrs:{type:"chevron-right"}})],1)])]):i("ul",{class:e.wrapClasses,style:e.styles},[e.showTotal?i("span",{class:[e.prefixCls+"-total"]},[e._t("default",[e._v("Total "+e._s(e.total)+" "),(e.total,[e._v("items")])])],2):e._e(),e._v(" "),i("li",{class:e.prevClasses,attrs:{title:"Previous"},on:{click:e.prev}},[i("a",[i("bc-icon",{attrs:{type:"chevron-left"}})],1)]),e._v(" "),i("li",{class:e.firstPageClasses,attrs:{title:"1"},on:{click:function(t){e.changePage(1)}}},[i("a",[e._v("1")])]),e._v(" "),e.currentPage-3>1?i("li",{class:[e.prefixCls+"-item-jump-prev"],attrs:{title:"向前 5 页"},on:{click:e.fastPrev}},[i("a",[i("bc-icon",{attrs:{type:"chevron-left-double"}})],1)]):e._e(),e._v(" "),e.currentPage-2>1?i("li",{class:[e.prefixCls+"-item"],attrs:{title:e.currentPage-2},on:{click:function(t){e.changePage(e.currentPage-2)}}},[i("a",[e._v(e._s(e.currentPage-2))])]):e._e(),e._v(" "),e.currentPage-1>1?i("li",{class:[e.prefixCls+"-item"],attrs:{title:e.currentPage-1},on:{click:function(t){e.changePage(e.currentPage-1)}}},[i("a",[e._v(e._s(e.currentPage-1))])]):e._e(),e._v(" "),1!=e.currentPage&&e.currentPage!=e.allPages?i("li",{class:[e.prefixCls+"-item",e.prefixCls+"-item-active"],attrs:{title:e.currentPage}},[i("a",[e._v(e._s(e.currentPage))])]):e._e(),e._v(" "),e.currentPage+11?i("li",{class:e.lastPageClasses,attrs:{title:e.allPages},on:{click:function(t){e.changePage(e.allPages)}}},[i("a",[e._v(e._s(e.allPages))])]):e._e(),e._v(" "),i("li",{class:e.nextClasses,attrs:{title:"Next"},on:{click:e.next}},[i("a",[i("bc-icon",{attrs:{type:"chevron-right"}})],1)]),e._v(" "),i("li",{staticClass:"bcui-page-item-options"},[i("bc-page-item",{attrs:{"show-sizer":e.showSizer,"page-size":e.currentPageSize,"page-size-opts":e.pageSizeOpts,"show-elevator":e.showElevator,_current:e.currentPage,current:e.currentPage,"all-pages":e.allPages,"is-small":e.isSmall},on:{"on-size":e.onSize,"on-page":e.onPage}})],1)])};Za._withStripped=!0;var en=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showSizer||e.showElevator?i("div",{class:e.optsClasses},[e.showSizer?i("div",{class:e.sizerClasses},[i("bc-select",{attrs:{size:e.size},on:{"on-change":e.changeSize},model:{value:e.currentPageSize,callback:function(t){e.currentPageSize=t},expression:"currentPageSize"}},e._l(e.pageSizeOpts,function(t){return i("bc-option",{key:t,staticStyle:{"text-align":"center"},attrs:{value:t}},[e._v(e._s(t)+" "+e._s("/page"))])}))],1):e._e(),e._v(" "),e.showElevator?i("div",{class:e.ElevatorClasses},[e._v("\n "+e._s("Goto")+"\n "),i("input",{attrs:{type:"text"},domProps:{value:e._current},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.changePage(t):null}}}),e._v(" "+e._s("page")+"\n ")]):e._e()]):e._e()};en._withStripped=!0;var tn={name:"bc-pagination-option",components:{"bc-select":da,"bc-option":ma},props:{pageSizeOpts:Array,showSizer:Boolean,showElevator:Boolean,current:Number,_current:Number,pageSize:Number,allPages:Number,isSmall:Boolean},data:function(){return{currentPageSize:this.pageSize}},watch:{pageSize:function(e){this.currentPageSize=e}},computed:{size:function(){return this.isSmall?"small":"default"},optsClasses:function(){return["".concat("bcui-page","-options")]},sizerClasses:function(){return["".concat("bcui-page","-options-sizer")]},ElevatorClasses:function(){return["".concat("bcui-page","-options-elevator")]}},methods:{changeSize:function(){this.$emit("on-size",this.currentPageSize)},changePage:function(e){var t=e.target.value.trim(),i=0;if(/^[1-9][0-9]*$/.test(t+"")){if((t=Number(t))!=this.current){var s=this.allPages;i=t>s?s:t}}else i=1;i&&(this.$emit("on-page",i),e.target.value=i)}}},sn=Object(P.a)(tn,en,[],!1,null,null,null);sn.options.__file="src/ui-core/components/pagination/options.vue";var an=sn.exports,nn={name:"bc-pagination",components:{"bc-page-item":an,"bc-icon":ti},props:{current:{type:Number,default:1},total:{type:Number,default:0},pageSize:{type:Number,default:10},pageSizeOpts:{type:Array,default:function(){return[10,20,30,40]}},size:{validator:function(e){return R(e,["small"])}},simple:{type:Boolean,default:!1},showTotal:{type:Boolean,default:!1},showElevator:{type:Boolean,default:!1},showSizer:{type:Boolean,default:!1},className:{type:String},styles:{type:Object}},data:function(){return{prefixCls:"bcui-page",currentPage:this.current,currentPageSize:this.pageSize}},watch:{current:function(e){this.currentPage=e},pageSize:function(e){this.currentPageSize=e}},computed:{isSmall:function(){return!!this.size},allPages:function(){var e=Math.ceil(this.total/this.currentPageSize);return 0===e?1:e},simpleWrapClasses:function(){return["".concat("bcui-page"),"".concat("bcui-page","-simple"),x()({},"".concat(this.className),!!this.className)]},simplePagerClasses:function(){return"".concat("bcui-page","-simple-pager")},wrapClasses:function(){var e;return["".concat("bcui-page"),(e={},x()(e,"".concat(this.className),!!this.className),x()(e,"mini",!!this.size),e)]},prevClasses:function(){return["".concat("bcui-page","-prev"),x()({},"".concat("bcui-page","-disabled"),1===this.currentPage)]},nextClasses:function(){return["".concat("bcui-page","-next"),x()({},"".concat("bcui-page","-disabled"),this.currentPage===this.allPages)]},firstPageClasses:function(){return["".concat("bcui-page","-item"),x()({},"".concat("bcui-page","-item-active"),1===this.currentPage)]},lastPageClasses:function(){return["".concat("bcui-page","-item"),x()({},"".concat("bcui-page","-item-active"),this.currentPage===this.allPages)]}},methods:{changePage:function(e){this.currentPage!=e&&(this.currentPage=e,this.$emit("on-change",e))},prev:function(){var e=this.currentPage;if(e<=1)return!1;this.changePage(e-1)},next:function(){var e=this.currentPage;if(e>=this.allPages)return!1;this.changePage(e+1)},fastPrev:function(){var e=this.currentPage-5;e>0?this.changePage(e):this.changePage(1)},fastNext:function(){var e=this.currentPage+5;e>this.allPages?this.changePage(this.allPages):this.changePage(e)},onSize:function(e){this.currentPageSize=e,this.changePage(1),this.$emit("on-page-size-change",e)},onPage:function(e){this.changePage(e)},keyDown:function(e){var t=e.keyCode;t>=48&&t<=57||8==t||37==t||39==t||e.preventDefault()},keyUp:function(e){var t=e.keyCode,i=parseInt(e.target.value);if(38===t)this.prev();else if(40===t)this.next();else if(13==t){var s=1;s=i>this.allPages?this.allPages:i<=0?1:i,e.target.value=s,this.changePage(s)}}}},on=Object(P.a)(nn,Za,[],!1,null,null,null);on.options.__file="src/ui-core/components/pagination/pagination.vue";var rn=on.exports,cn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"clickoutside",rawName:"v-clickoutside",value:e.handleClose,expression:"handleClose"}],class:[e.wrapperClasses],on:{mouseenter:e.handleMouseEnter,mouseleave:e.handleMouseLeave}},[i("div",{ref:"reference",class:[e.classPrefix+"-rel"],on:{click:e.handleClick}},[e._t("default")],2),e._v(" "),i("transition",{attrs:{name:e.transition}},[i("Drop",{directives:[{name:"show",rawName:"v-show",value:e.show,expression:"show"}],ref:"drop",class:["bcui-popover__inner"],attrs:{placement:e.placement},nativeOn:{mouseenter:function(t){return e.handleMouseEnter(t)},mouseleave:function(t){return e.handleMouseLeave(t)}}},[i("div",{class:[e.classPrefix+"__body"]},[i("div",{class:[e.classPrefix+"__arrow"]}),e._v(" "),i("div",{class:[e.classPrefix+"__inner-content"]},[i("div",{class:[e.classPrefix+"__title"]},[e._t("title",[e._v(e._s(e.title))])],2),e._v(" "),i("div",{class:[e.classPrefix+"__content"]},[e._t("content",[e._v(e._s(e.content))])],2)])])])],1)],1)};cn._withStripped=!0;var ln=function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"bcui-base-dropdown",style:this.styles},[this._t("default")],2)};ln._withStripped=!0;var un={name:"bc-base-drop",props:{placement:{type:String,default:"top-start"}},components:{},data:function(){return{popper:null,width:""}},computed:{styles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),e}},methods:{update:function(){var e=this;this.popper?this.$nextTick(function(){e.popper.update()}):this.$nextTick(function(){e.popper=new ci(e.$parent.$refs.reference,e.$el,{gpuAcceleration:!1,placement:e.placement,modifiers:{preventOverflow:{boundariesElement:"scrollParent",escapeWithReference:!0},flip:{boundariesElement:"scrollParent",flipVariations:!0}}},{onCreate:function(t){e.resetTransformOrigin(t)}})})},destroy:function(){var e=this;this.popper&&(this.resetTransformOrigin(this.popper),setTimeout(function(){e.popper.destroy(),e.popper=null},300))},resetTransformOrigin:function(e){var t={top:"bottom",bottom:"top"}[e.popper.getAttribute("x-placement").split("-")[0]];e.popper.style.transformOrigin="center ".concat(t)}},created:function(){this.$on("on-update-popper",this.update),this.$on("on-destroy-popper",this.destroy)},mounted:function(){},beforeDestroy:function(){this.popper&&this.popper.destroy()}},dn=Object(P.a)(un,ln,[],!1,null,null,null);dn.options.__file="src/ui-core/components/popover/popover-drop.vue";var pn=dn.exports,hn={name:"bc-popover",directives:{clickoutside:Ti},props:{placement:{validator:function(e){return R(e,["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"])},default:"top"},value:{type:Boolean,default:!1},title:{type:String},content:{type:String},trigger:{validator:function(e){return R(e,["click","hover","focus","custom"])},default:"click"}},components:{Drop:pn},data:function(){return{classPrefix:"bcui-popover",show:this.value,timer:null}},watch:{value:function(e){this.show=e},show:function(e){e?this.$refs.drop.update():this.$refs.drop.destroy(),this.$emit("on-visible-change",e),this.$emit("input",e)}},computed:{transition:function(){return["bottom-start","bottom","bottom-end"].indexOf(this.placement)>-1?"slide-up":"fade"},wrapperClasses:function(){return["".concat("bcui-popover"),"".concat("bcui-popover","-placement-").concat(this.placement)]}},methods:{handleClick:function(){var e=this.trigger;if("custom"===e||"click"!==e)return!1;this.show=!this.show},handleMouseEnter:function(){var e=this,t=this.trigger;if("custom"===t||"hover"!==t)return!1;this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){e.show=!0},150)},handleMouseLeave:function(){var e=this,t=this.trigger;if("custom"===t||"hover"!==t)return!1;this.timer&&(clearTimeout(this.timer),this.timer=setTimeout(function(){e.show=!1},150))},handleFocus:function(){},handleBlur:function(){},handleClose:function(){return"custom"!==this.trigger&&("click"===this.trigger&&void(this.show=!1))},hasParent:function(){var e=G(this,"bc-dropdown");return e||!1}},created:function(){this.$on("on-update-popper",this.update),this.$on("on-destroy-popper",this.destroy)},mounted:function(){var e=this;this.$on("on-click",function(t){var i=e.hasParent();i&&i.$emit("on-click",t)}),this.$on("on-hover-click",function(){var t=e.hasParent();t?(e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!1}),t.$emit("on-hover-click")):e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!1})}),this.$on("on-child-click",function(){e.$nextTick(function(){if("custom"===e.trigger)return!1;e.show=!0});var t=e.hasParent();t&&t.$emit("on-child-click")})}},fn=Object(P.a)(hn,cn,[],!1,null,null,null);fn.options.__file="src/ui-core/components/popover/index.vue";var mn=fn.exports,vn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.progressClasses},["circle"===e.type?[i("div",{class:e.circleClassPrefix,style:e.circleSizeStyle},[i("svg",{attrs:{viewBox:"0 0 100 100"}},[i("path",{staticClass:"bcui-progress-circle__track",attrs:{d:e.trackPath,stroke:e.pathColor,"stroke-width":e.relativeStrokeWidth,fill:"none"}}),e._v(" "),i("path",{staticClass:"bcui-progress-circle__path",style:e.circlePathStyle,attrs:{d:e.trackPath,"stroke-linecap":"butt",stroke:e.strokeColor,"stroke-width":e.relativeStrokeWidth,fill:"none"}})]),e._v(" "),e.showInfo||this.$slots.default?i("div",{class:[e.circleClassPrefix+"__inner"]},[e.showInfo?[e._v(e._s(e.percent)+"%")]:e._e(),e._v(" "),this.$slots.default?[e._t("default")]:e._e()],2):e._e()])]:[i("div",{class:e.barClassPrefix},[i("div",{class:[e.barClassPrefix+"__inner"],style:e.pathStyles},[i("div",{class:[e.barClassPrefix+"__bar"],style:e.barStyles})])])]],2)};vn._withStripped=!0;var bn={name:"bc-progress",components:{},props:{percent:{type:Number|String,default:0},type:{type:String,default:"bar"},showInfo:{type:Boolean,default:!1},width:{type:Number,default:126},strokeWidth:{type:Number,default:4},strokeColor:{type:String,default:"#2d77ee"},pathColor:{type:String,default:"#f0f0f0"},colorGradation:{type:Array}},data:function(){return{classPrefix:"bcui-progress"}},watch:{},computed:{progressClasses:function(){return["bcui-progress",{}]},barClassPrefix:function(){return"".concat("bcui-progress","-bar")},circleClassPrefix:function(){return"".concat("bcui-progress","-circle")},pathStyles:function(){var e={};return this.pathColor&&(e.backgroundColor=this.pathColor),this.strokeWidth&&(e.height=this.strokeWidth),e},barStyles:function(){var e={},t=this.percent,i=this.strokeColor,s=this.colorGradation;return e.width="".concat(this.percent,"%"),i&&(e.backgroundColor=this.strokeColor),s&&s.forEach(function(i){var s=i.min,a=i.max;t>s&&t<=a&&(e.backgroundColor=i.color)}),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},trackPath:function(){var e=parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10);return"M 50 50 m 0 -".concat(e," a ").concat(e," ").concat(e," 0 1 1 0 ").concat(2*e," a ").concat(e," ").concat(e," 0 1 1 0 -").concat(2*e)},perimeter:function(){var e=50-parseFloat(this.relativeStrokeWidth)/2;return 2*Math.PI*e},circleSizeStyle:function(){return{width:this.width,height:this.width}},circlePathStyle:function(){var e=this.perimeter;return{strokeDasharray:"".concat(e,"px,").concat(e,"px"),strokeDashoffset:(1-this.percent/100)*e+"px",transition:"stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease"}}},methods:{},mounted:function(){}},gn=Object(P.a)(bn,vn,[],!1,null,null,null);gn.options.__file="src/ui-core/components/progress/index.vue";var _n=gn.exports,yn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("label",{class:e.wrapClasses},[i("span",{class:e.radioClasses},[i("span",{class:e.innerClasses}),e._v(" "),i("input",{class:e.inputClasses,attrs:{type:"radio",disabled:e.disabled},domProps:{checked:e.currentValue},on:{change:e.change}})]),e._v(" "),i("span",{staticClass:"bcui-radio__label"},[e._t("default"),e._v(" "),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])};yn._withStripped=!0;var Sn={name:"bc-radio",mixins:[Wt],props:{value:{type:Boolean,default:!1},label:{type:[String,Number]},disabled:{type:Boolean,default:!1},checkedValue:{type:[String,Boolean,Number],default:!0},uncheckedValue:{type:[String,Boolean,Number],default:!1}},data:function(){return{currentValue:this.value,group:!1,parent:G(this,"bc-radio-group")}},computed:{wrapClasses:function(){var e;return["".concat("bcui-radio"),(e={},x()(e,"".concat("bcui-radio","-group-item"),this.group),x()(e,"".concat("bcui-radio","--checked"),this.currentValue),x()(e,"".concat("bcui-radio","--disabled"),this.disabled),e)]},radioClasses:function(){var e;return["".concat("bcui-radio","__input"),(e={},x()(e,"".concat("bcui-radio","__input--checked"),this.currentValue),x()(e,"".concat("bcui-radio","__input--disabled"),this.disabled),e)]},innerClasses:function(){return"".concat("bcui-radio","__inner")},inputClasses:function(){return"".concat("bcui-radio","__original-input")}},watch:{value:function(){this.updateValue()}},methods:{change:function(e){if(this.disabled)return!1;var t=e.target.checked?this.uncheckedValue:this.checkedValue;this.currentValue=t,this.$emit("input",t),this.group&&void 0!==this.label&&this.parent.change({value:this.label,checked:this.value}),this.group||(this.$emit("on-change",t),this.dispatch("bc-form-item","on-form-change",t))},updateValue:function(){this.currentValue=this.value}},mounted:function(){this.parent&&(this.group=!0),this.group?this.parent.updateValue():this.updateValue()}},Cn=Object(P.a)(Sn,yn,[],!1,null,null,null);Cn.options.__file="src/ui-core/components/radio/radio.vue";var kn=Cn.exports,wn=function(){var e=this.$createElement;return(this._self._c||e)("div",{class:this.classes},[this._t("default")],2)};wn._withStripped=!0;var xn={name:"bc-radio-group",mixins:[Wt],props:{value:{type:[String,Number],default:""},size:{validator:function(e){return R(e,["small","large"])}},type:{validator:function(e){return R(e,["button"])}},vertical:{type:Boolean,default:!1}},data:function(){return{currentValue:this.value,childrens:[]}},computed:{classes:function(){var e;return["".concat("bcui-radio-group"),(e={},x()(e,"".concat("bcui-radio-group","--").concat(this.size),!!this.size),x()(e,"".concat("bcui-radio-group","--vertical"),this.vertical),x()(e,"".concat("bcui-radio-group","-").concat(this.type),!!this.type),e)]}},watch:{value:function(){this.updateValue()}},methods:{updateValue:function(){var e=this.value;this.childrens=V(this,"bc-radio"),this.childrens&&this.childrens.forEach(function(t){t.currentValue=e==t.label,t.group=!0})},change:function(e){this.currentValue=e.value,this.updateValue(),this.$emit("input",e.value),this.$emit("on-change",e.value),this.dispatch("bc-form-item","on-form-change",e.value)}},mounted:function(){this.updateValue()}},Tn=Object(P.a)(xn,wn,[],!1,null,null,null);Tn.options.__file="src/ui-core/components/radio/radio-group.vue";var $n,Pn=Tn.exports,En="bcui-notice",In="bcui-icon",Nn="bcui_notice_key_",On=24,Bn=4500,Dn=1,jn={info:"info",success:"confirm",warning:"alert",error:"error"};function Mn(){return $n=$n||H.newInstance({classPrefix:En,styles:{top:"".concat(On,"px"),right:0}})}function Ln(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.title||"",s=t.desc||"",a=t.name||"".concat(Nn).concat(Dn),n=t.onClose||function(){},o=0===t.duration?0:t.duration||Bn,r=t.render||function(){};Dn++;var c,l=Mn(),u=""===s?"":" ".concat(En,"--with-desc");if("normal"==e)c='\n
\n
').concat(i,'
\n
').concat(s,"
\n
\n ");else{var d=jn[e];c='\n
\n \n \n \n
').concat(i,'
\n
').concat(s,"
\n
\n ")}l.notice({name:a.toString(),duration:o,styles:{},transitionName:"move-notice",content:c,onClose:n,render:r,closable:!0})}var An={open:function(e){return Ln("normal",e)},info:function(e){return Ln("info",e)},success:function(e){return Ln("success",e)},warning:function(e){return Ln("warning",e)},warn:function(e){return Ln("warning",e)},error:function(e){return Ln("error",e)},config:function(e){e.top&&(On=e.top),(e.duration||0===e.duration)&&(Bn=e.duration)},close:function(e){if(!e)return!1;e=e.toString(),$n&&$n.remove(e)},destroy:function(){var e=Mn();$n=null,e.destroy()}},Rn={inserted:function(e,t){t.value&&setTimeout(function(){return e.focus()})}},zn={bind:function(e,t,i){var s=e.getAttribute("loading-text")||"",a=Object.assign({},{bg:"rgba(251, 252, 253, 0.8)",textColor:"#fff"},{text:s}),n=window.getComputedStyle(e).position;"static"!==n&&""!==n||(e.style.position="relative");document.createElement("div");var o=document.createElement("div");if(o.className="bcui-loading-spinner",o.innerHTML='\n \n \n ',a.text){var r=document.createElement("p");r.textContent=a.text,o.appendChild(r)}var c=document.createElement("div");c.style.backgroundColor=a.bg,c.style.display="none",c.className="bcui-loading-box",c.appendChild(o),e.appendChild(c)},inserted:function(e,t,i){var s=e.getElementsByClassName("bcui-loading-box"),a=s[s.length-1];t.oldValue!=t.value&&(t.value?t.def.showLoadingBox(a):t.def.hideLoadingBox(a))},update:function(e,t,i){var s=e.getElementsByClassName("bcui-loading-box"),a=s[s.length-1];t.oldValue!=t.value&&(t.value?t.def.showLoadingBox(a):t.def.hideLoadingBox(a))},showLoadingBox:function(e){e.style.display="initial",window.requestAnimationFrame(function(){e.style.opacity=1})},hideLoadingBox:function(e){e.style.display="none",window.requestAnimationFrame(function(){e.style.opacity=0})},version:"__VERSION__"},qn=zn,Gn={AutoComplete:Qt,Alert:ai,BaseDrop:di,Breadcrumb:vi,BreadcrumbItem:yi,Dropdown:Ei,DropdownMenu:Bi,DropdownItem:Li,Button:qi,ButtonGroup:Fi,Card:Qi,Checkbox:Zi,CheckboxGroup:ss,Drawer:rs,Icon:ei,Menu:ds,MenuItem:ms,Submenu:ks,MenuGroup:_s,Modal:Es,Input:js,Form:Rs,FormItem:Ys,Row:ea,Col:oa,Select:da,Steps:wa,StepsItem:Pa,Option:ma,OptionGroup:_a,Switch:Oa,Tab:Ma,TabPane:za,Tag:Ua,Tree:Xa,Tooltip:Ws,Pagination:rn,Popover:mn,Progress:_n,Radio:kn,RadioGroup:Pn},Vn=function e(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1];e.installed||(Object.keys(Gn).forEach(function(e){var i=Gn[e];t.component(i.name,i)}),t.component("bc-message",ie),t.component("bc-notice",An),t.prototype.$notice=An,t.prototype.$message=ie,t.prototype.$modal=Es,t.directive("clickoutside",Ti),t.directive("auto-focus",Rn),t.directive("loading",qn))};"undefined"!=typeof widnow&&window.Vue&&Vn(window.Vue);var Un=Object.assign(Gn,{install:Vn}),Fn=Object(P.a)({},void 0,void 0,!1,null,null,null);Fn.options.__file="src/components/header/index.vue";var Wn=Fn.exports,Hn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"filter-inputer-searcher",style:e.wrapperStyles},[i("bc-input",{on:{"on-enter":e.handleInputEnter,"on-change":e.handleInputChange},model:{value:e.inputValue,callback:function(t){e.inputValue=t},expression:"inputValue"}},[i("bc-select",{style:e.filterStyles,attrs:{slot:"select"},on:{"on-change":e.handleFilterChange},slot:"select",model:{value:e.filter,callback:function(t){e.filter=t},expression:"filter"}},e._l(e.searchKeywords,function(t){return i("bc-option",{key:t.key,attrs:{value:t.key}},[e._v(e._s(t.label))])}))],1)],1)};Hn._withStripped=!0;var Kn={name:"filter-input-searcher",components:{},props:{searchKeywords:{type:Array},width:{type:Number|String},filterWidth:{type:Number}},data:function(){return{classPrefix:"filter-inputer-searcher",filter:"",inputValue:"",timer:null}},watch:{inputValue:function(e,t){!e&&t&&(this.$emit("on-input-change",{}),this.$emit("input",{}))}},computed:{wrapperStyles:function(){var e={};return this.width&&(e.width="".concat(this.width,"px")),e},filterStyles:function(){var e={};return this.filterWidth&&(e.width="".concat(this.filterWidth,"px")),e}},methods:{handleInputEnter:function(e){var t=this,i=this.inputValue,s=this.timer,a=this.filter;i&&a&&(s&&clearTimeout(s),this.timer=setTimeout(function(){var e=t.createFitlerParams();t.$emit("on-input-enter",e),t.$emit("input",e)},300))},handleInputFocus:function(e){this.$emit("on-input-focus",e)},handleInputChange:function(e){var t=this,i=this.inputValue,s=this.timer,a=this.filter;i&&a&&(s&&clearTimeout(s),this.timer=setTimeout(function(){var e=t.createFitlerParams();t.$emit("on-input-change",e),t.$emit("input",e)},300))},handleFilterChange:function(e){var t=this.inputValue,i=this.filter;if(t&&i){var s=this.createFitlerParams();this.$emit("on-filter-change",s),this.$emit("input",s)}},createFitlerParams:function(){var e=this.inputValue,t=this.filter,i="";return this.searchKeywords.forEach(function(e){e.key===t&&(i=e.qo)}),e&&t?{key:t,value:e,qo:i||"="}:{}}},mounted:function(){}},Qn=(i(205),Object(P.a)(Kn,Hn,[],!1,null,null,null));Qn.options.__file="src/components/filter-input-searcher/index.vue";var Yn={Sidebar:Nt,Header:Wn,FilterInputSearcher:Qn.exports},Jn=function e(t){e.installed||Object.keys(Yn).forEach(function(e){var i=Yn[e];t.component(e,i)})};"undefined"!=typeof widnow&&window.Vue&&Jn(window.Vue);var Xn=Object.assign(Yn,{install:Jn}),Zn=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.getClass},[i("div",{ref:"fieldbox",staticStyle:{display:"none"}},[e._t("default")],2),e._v(" "),i("div",[e._m(0),e._v(" "),i("div",{staticClass:"bcui-table__body-wrapper"},[i("table",{ref:"test",staticClass:"bcui-table__body"},[i("colgroup",[e.check?i("col",{staticClass:"bcui-check-col"}):e._e(),e._v(" "),e.expandProps.expand?i("col",{staticClass:"bcui-expand-col"}):e._e(),e._v(" "),e._l(e.getHeaderProps,function(t){return t.show?i("col",{attrs:{width:t.width}}):e._e()})],2),e._v(" "),i("thead",[i("tr",[e.check?i("th",{staticClass:"bcui-table-selection-column"},[i("div",{staticClass:"bcui-th-cell"},[e.checkAll?i("bc-checkbox",{ref:"check-all",on:{input:function(e){}},model:{value:e.checkAllStatus,callback:function(t){e.checkAllStatus=t},expression:"checkAllStatus"}}):e._e()],1)]):e._e(),e._v(" "),e.expandProps.expand&&e.expandProps.icon?i("th",{staticClass:"bcui-th-expand"}):e._e(),e._v(" "),e._l(e.getHeaderProps,function(t){return t.show?i("th",{class:t.classify?"overflow-v":"",style:e._thStyleObject(t)},[i("div",{staticClass:"bcui-th-cell",class:t.classify?"overflow-v":"",on:{click:function(i){e._clickTh(t)}}},[t.label_DOM?i("div",[i("bc-th-label",{attrs:{dom:t.label_DOM}})],1):i("span",[e._v(e._s(t.label)+"\n "),t.icon?i("i",{class:"bcui-th-icon bcfont bcui-icon-"+t.icon}):e._e(),e._v(" "),t.sort?i("span",{class:["bcui-table-column-sorter","sort-"+t.$$sortType],on:{click:function(i){e._changeSort(t)}}},["desc"===t.$$sortType?i("i",{class:["bcui-th-icon","icon","icon-triangle-bottom"]}):"asc"===t.$$sortType?i("i",{class:["bcui-th-icon","icon","icon-triangle-top"]}):i("i",{class:["bcui-th-icon","icon","icon-triangle-bottom"]})]):e._e(),e._v(" "),t.classify?i("span",{on:{click:function(){}}},[i("i",{staticClass:"bcui-th-icon bcfont bcui-icon-caidan"}),e._v(" "),e.filterKey[t.field].length?i("div",{staticClass:"bcui-classify "},[i("div",e._l(e.filterKey[t.field],function(s){return i("div",{staticClass:"bcui-classify-label",on:{click:function(i){e.filterTable(s,e.filterKey[t.field],t.field)}}},[i("i",{class:s.check?"bcfont text-link bcui-icon-dui":"bcfont bcui-icon-xuxianxuankuang"}),i("span",[e._v(" "+e._s(s.label))])])}))]):e._e()]):e._e()])])]):e._e()})],2)]),e._v(" "),e.tableData.length?i("tbody",[e._l(e.getShowData,function(t,s){return[i("tr",{key:s,staticClass:"bcui-tr-data",class:e.customTrClass(s,t,e.getShowData)},[e.check?i("td",{staticClass:"bcui-td-check bcui-table-selection-column"},[i("div",{staticClass:"cell"},[i("bc-checkbox",{attrs:{disabled:t["$$check-disabled"]},on:{input:function(i){e._checkRow(t,s,i,e.getShowData)}},model:{value:t.$$check,callback:function(i){e.$set(t,"$$check",i)},expression:"rowData['$$check']"}})],1)]):e._e(),e._v(" "),e.expandProps.expand&&e.expandProps.icon?i("td",{on:{click:function(i){e._expandRow(t,s)}}},[i("div",{staticClass:"bcui-td-expand"},[i("span",{class:{rotate90:t.$$expand}},[i("i",{class:"bcfont bcui-icon-arrow-right-double"})])])]):e._e(),e._v(" "),e._l(e.getHeaderProps,function(a,n){return a.show?i("td",{style:"max-width:"+a.maxWidth},[a.custom_DOM?i("div",{staticClass:"cell"},[i("bc-table-cell",{attrs:{custom:a.custom_DOM,options:a,item:t,rowkey:a.field,index:s,table:e.tableData}})],1):i("div",{staticClass:"cell"},[i("span",[e._v(e._s(t[a.field]))])])]):e._e()})],2),e._v(" "),e.expandProps.custom_DOM?[i("tr",{directives:[{name:"show",rawName:"v-show",value:t.$$expand,expression:"rowData['$$expand']"}],staticClass:"bcui-tr-expand"},[i("td",{attrs:{colspan:e.getTrCount}},[[i("div",{staticClass:"expand-box "},[i("bc-expand-row",{attrs:{custom:e.expandProps.custom_DOM,item:t,index:s,table:e.tableData}})],1)]],2)])]:e.expandProps.td_DOM?[i("bc-expand-row",{directives:[{name:"show",rawName:"v-show",value:t.$$expand,expression:"rowData['$$expand']"}],staticClass:"bcui-tr-expand",attrs:{custom:e.expandProps.td_DOM,item:t,index:s,type:"tr",table:e.tableData}})]:e._e()]})],2):e._e()]),e._v(" "),e.getShowData.length?e._e():i("div",{staticClass:"empty-text"},[i("i",{staticClass:"bcfont bcui-icon-information-warning",staticStyle:{"font-size":"24px"}}),e._v(" "),i("span",[e._v(e._s(e.emptyText))])])])]),e._v(" "),i("div",{staticClass:"pagi-footer"},[!0===e.pagination?i("bc-pagination",{ref:"pagi",attrs:{theme:this.colorType,currentPage:e.currentPage,dataSize:e.dataSize,pageSize:e.pageSize},on:{"update:currentPage":function(t){e.currentPage=t},"update:pageSize":function(t){e.pageSize=t}}}):e._e()],1)])};Zn._withStripped=!0;var eo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.getClass},[i("div",{staticClass:"bcui-page-size-button"},[i("span",{},[e._v("每页")]),e._v(" "),i("span",{staticClass:"text-link",on:{click:function(t){e.pageSizeBox()}}},[e._v(e._s(e.pageSize))]),e._v(" "),i("ul",{directives:[{name:"show",rawName:"v-show",value:e.pageSizeBoxVisible,expression:"pageSizeBoxVisible"}],staticClass:"bcui-pager page-size-box"},[null===e.customSize?[e._l(e.pageSizes,function(t,s){return i("li",{on:{click:function(i){e.pageSizeChange(t)}}},[e._v(" "+e._s(t)+" ")])}),e._v(" "),i("li",{on:{click:e.goCustomSize}},[e._v(" 自定义 ")])]:[i("li",{staticClass:"custom-size-dom",staticStyle:{width:"80px"},attrs:{contenteditable:"true"},on:{keyup:function(t){return"button"in t||!e._k(t.keyCode,"enter",13,t.key,"Enter")?e.updateCustomSize(t):null}}},[e._v(" "+e._s(e.customSize)+" ")]),e._v(" "),i("li",{staticStyle:{padding:"3px 8px"},on:{click:e.updateCustomSize}},[e._v(" ↵ ")])]],2),e._v(" "),i("span",{},[e._v("条")])]),e._v(" "),i("button",{staticClass:"btn-prev",on:{click:function(t){e.privatePageChange(e.current-1)}}},[e._v("<")]),e._v(" "),i("ul",{staticClass:"bcui-pager"},e._l(e.getShowPage(),function(t){return i("li",{staticClass:"number",class:{active:t===e.current},on:{click:function(i){e.privatePageChange(t)}}},[e._v(e._s(t))])})),e._v(" "),i("button",{staticClass:"btn-next",on:{click:function(t){e.privatePageChange(e.current+1)}}},[e._v(">")]),e._v(" "),i("span",{staticClass:"bcui-pagination__jump"},[e._v("前往\n "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.searchPage,expression:"searchPage"}],staticClass:"bcui-pagination__editor",attrs:{type:"number",min:"1"},domProps:{value:e.searchPage},on:{keyup:function(t){return"button"in t||13===t.keyCode?e.onEnter(t):null},input:function(t){t.target.composing||(e.searchPage=t.target.value)}}}),e._v("页\n ")]),e._v(" "),i("span",{staticClass:"bcui-pagination__total"},[e._v("共 "+e._s(e.dataSize)+" 条 ")])])};eo._withStripped=!0;i(206);var to={name:"bc-pagination",props:{dataSize:{type:Number,default:0},pageSize:{type:Number,default:10},pageSizes:{type:Array,default:function(){return[10,20,50]}},pageChange:{type:Function},theme:{type:String},currentPage:{type:Number}},data:function(){return{customSize:null,searchPage:1,pageSizeBoxVisible:!1,current:1}},methods:{getallPage:function(){return Math.ceil(this.dataSize/this.pageSize)||1},goCustomSize:function(){this.customSize=0},updateCustomSize:function(){var e=this.$el.querySelector(".custom-size-dom").innerText;e&&parseInt(e,10)?this.pageSizeChange(parseInt(e,10)):this.pageSizeChange(this.pageSize)},onEnter:function(){var e=this.getallPage();this.searchPage?this.searchPage>e?this.current=e:this.current=parseInt(this.searchPage):this.current=1,this.searchPage=this.current,this.privatePageChange(this.current)},pageSizeBox:function(){this.pageSizeBoxVisible=!0},pageSizeChange:function(e){this.pageSizeBoxVisible=!1,this.customSize=null,this.$emit("update:pageSize",parseInt(e,10))},getShowPage:function(){var e,t,i=this.getallPage(),s=[];this.current<4?(e=1,t=i>5?5:i):this.current>i-3?(e=i-4>0?i-4:1,t=i):(e=this.current-2,t=this.current+2);for(var a=e;at&&(e=t),this.$emit("on-page-change",e),this.$emit("update:currentPage",e),this.$props.pageChange&&this.$props.pageChange(e),this.current=e)}},beforeCreate:function(){},beforeUpdate:function(){},computed:{getClass:function(){return["".concat("bcui-pagination"),x()({},"".concat("bcui-pagination","--dark"),"console"===this.theme)]}},mounted:function(){this.current=this.currentPage||1,this.$on("current",this.privatePageChange),this.$watch("currentPage",function(e){this.current=this.currentPage||1})}},io=(i(207),Object(P.a)(to,eo,[],!1,null,"3630889e",null));io.options.__file="src/ui-core/components/table/src/components/pagination.vue";var so=io.exports,ao=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("label",{staticClass:"bcui-checkbox ",class:{"bcui-checkbox--checked":e.t_value}},[i("span",{staticClass:"bcui-checkbox__input",class:{"bcui-checkbox__input--checked":e.t_value,"is-disabled":e.disabled}},[i("span",{staticClass:"bcui-checkbox__inner"}),e._v(" "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.t_value,expression:"t_value"}],staticClass:"bcui-checkbox__original-input",attrs:{type:"checkbox",disabled:e.disabled},domProps:{checked:Array.isArray(e.t_value)?e._i(e.t_value,null)>-1:e.t_value},on:{change:function(t){var i=e.t_value,s=t.target,a=!!s.checked;if(Array.isArray(i)){var n=e._i(i,null);s.checked?n<0&&(e.t_value=i.concat([null])):n>-1&&(e.t_value=i.slice(0,n).concat(i.slice(n+1)))}else e.t_value=a}}})])])])};ao._withStripped=!0;var no={name:"bc-checkbox",props:["value","disabled"],data:function(){return{t_value:!1}},methods:{check_row:function(){this.disabled||this.$emit("row-click",!this.t_value)}},computed:{},mounted:function(){this.t_value=void 0!==this.value&&this.value,this.$watch("t_value",function(e,t){this.$emit("input",e)}),this.$watch("value",function(e,t){this.t_value=e})}},oo=(i(208),Object(P.a)(no,ao,[],!1,null,null,null));oo.options.__file="src/ui-core/components/table/src/components/checkbox.vue";var ro=oo.exports,co={name:"",props:["dom"],components:{},data:function(){return{}},created:function(){},methods:{},mounted:function(){},render:function(){return(0,this.$createElement)("div",{attrs:{class:"bc-table-custom-label"}},this.dom)}},lo=(i(209),Object(P.a)(co,void 0,void 0,!1,null,null,null));lo.options.__file="src/ui-core/components/table/src/components/custom-render/table-th-label.vue";var uo=lo.exports,po={name:"bc-expand-row",data:function(){return{}},render:function(e){return e(this.type||"div",[this.custom({record:this.item,rowkey:this.rowkey,text:this.item[this.rowkey],index:this.index,table:this.table})])},methods:{},beforeUpdate:function(){},props:["custom","item","type","rowkey","index","options","table"]},ho=(i(210),Object(P.a)(po,void 0,void 0,!1,null,null,null));ho.options.__file="src/ui-core/components/table/src/components/custom-render/table-expand-row.vue";var fo=ho.exports,mo={name:"bc-table-cell",data:function(){return{}},render:function(e){return e("div",[this.custom({record:this.item,rowkey:this.rowkey,text:this.item[this.rowkey],index:this.index,table:this.table})])},methods:{deepCopy:function(e){return this.options.deepCopy?JSON.parse(JSON.stringify(e)):e}},beforeUpdate:function(){},props:["custom","item","deepItem","rowkey","index","options","table"]},vo=(i(211),Object(P.a)(mo,void 0,void 0,!1,null,null,null));vo.options.__file="src/ui-core/components/table/src/components/custom-render/table-cell.vue";var bo,go=vo.exports,_o=(i(212),{name:"bc-table",mixins:[{methods:{filter:function(e,t,i){var s=e,a=i;if(""===a||void 0===a||0===a.length)return s;function n(e){return e=(e+="").toLowerCase(),Array.isArray(a)?a.includes(e):e===a}function o(e){return r(Object.values(e))}function r(e){return!!e.filter(function(e){return"string"==typeof e?n(e):"[object Object]"===Object.prototype.toString.call(e)&&o(e)}).length}return"string"==typeof a?a=a.toLowerCase():Array.isArray(a)&&a.forEach(function(e,t){e+="",a[t]=e.toLowerCase()}),s.filter(function(e){var i=e[t];return void 0!==i&&""!==i&&("number"==typeof i?n(i):"string"==typeof i?n(i):Array.isArray(i)?r(i):"[object Object]"===Object.prototype.toString.call(i)&&o(i))})},sort:function(e,t,i){var s=e,a=null;return a="desc"===i?-1:"asc"===i?1:0,s.sort(function(e,i){if(null==e[t]||null==i[t])return 0;var s=e[t],n=i[t];return("string"==typeof s&&!isNaN(s)||"string"==typeof n&&!isNaN(n))&&(s=parseFloat(s),n=parseFloat(n)),s>n?a:si&&this.pagination?a.slice(s*i-i,s*i):a).length&&this.$nextTick(function(){t.currentPage=1}),e},getTrCount:function(){var e=0;return this.check&&(e+=1),this.expandProps.expand&&(e+=1),e+=Object.keys(this.headerProps).length},getHeaderProps:function(){var e=this.headerProps;for(var t in e)n.a.set(e[t],"$$sortType",e[t].sortType);return e},getClass:function(){var e;return["".concat("bcui-table"),(e={},x()(e,"".concat("bcui-table","--noborder"),!this.border),x()(e,"".concat("bcui-table","--light"),"light"===this.theme),e)]}},beforeUpdate:function(){},mounted:function(){this._upTableData(this.tableData),this.$watch("tableData",function(e,t){this._upTableData(e)})}}),yo=(i(213),Object(P.a)(_o,Zn,[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"bcui-table__header-wrapper"},[t("table",{staticClass:"bcui-table__header"})])}],!1,null,null,null));yo.options.__file="src/ui-core/components/table/src/components/table.vue";var So=yo.exports,Co=function(){var e=this.$createElement;return(this._self._c||e)("div",[this._v("HiddenColunm")])};Co._withStripped=!0;var ko={name:"bc-table-column",props:{field:String,width:String,index:String,type:String,deepCopy:Boolean,show:{type:Boolean,default:!0},maxWidth:{type:String,default:""},icon:{type:String},params:[Object],label:[String,Function],classify:[String,Array],sort:[Boolean],sortType:{type:String,default:"none"}},data:function(){return{}},methods:{updateProps:function(){n.a.set(this.$parent.headerProps,this.$props.field,this.$props)},delProps:function(){n.a.delete(this.$parent.headerProps,this.$props.field)}},beforeCreate:function(){},mounted:function(){this.$scopedSlots.default&&(this.$props.custom_DOM=this.$scopedSlots.default),this.$slots.label&&(this.$props.label_DOM=this.$slots.label),this.$props._vnode=this,this.updateProps()},destroyed:function(){this.delProps()}},wo=(i(214),Object(P.a)(ko,Co,[],!1,null,null,null));wo.options.__file="src/ui-core/components/table/src/components/table-colunm.vue";var xo=wo.exports,To=function(){var e=this.$createElement;return(this._self._c||e)("div",[this._v("\n HiddenRow\n")])};To._withStripped=!0;var $o={name:"bc-expand-row",props:{expand:Boolean,accordion:{type:Boolean,default:!0},icon:{type:Boolean,default:!0}},data:function(){return{}},methods:{updateProps:function(){this.$parent.expandProps=this.$props},delProps:function(){}},beforeCreate:function(){},mounted:function(){this.$scopedSlots.default?this.$props.custom_DOM=this.$scopedSlots.default:this.$scopedSlots.td&&(this.$props.td_DOM=this.$scopedSlots.td),this.$props._vnode=this,this.updateProps()},destroyed:function(){this.delProps()}},Po=(i(215),Object(P.a)($o,To,[],!1,null,null,null));Po.options.__file="src/ui-core/components/table/src/components/expand-row.vue";var Eo=Po.exports,Io=function e(t){e.installed||(t.component(So.name,So),t.component(xo.name,xo),t.component(Eo.name,Eo))};"undefined"!=typeof window&&window.Vue&&Io(window.Vue);var No=Object.assign(So,{install:Io}),Oo=i(121),Bo=i.n(Oo),Do=i(122),jo=i.n(Do);i(378),i(379),i(380);n.a.config.productionTip=!1,n.a.use(Un),n.a.use(Xn),n.a.use(No),n.a.use(Bo.a),n.a.use(jo.a),n.a.prototype.$http=r.a.create({headers:{"X-Requested-With":"XMLHttpRequest"}}),localStorage.setItem("topics_search_keyword",""),localStorage.setItem("subscribes_search_keyword",""),localStorage.setItem("group_search_keyword",""),new n.a({router:Ut,data:function(){return{bus:c}},render:function(e){return e(l.default)}}).$mount("#app")},39:function(e,t,i){},40:function(e,t,i){},41:function(e,t,i){},42:function(e,t,i){},43:function(e,t,i){},44:function(e,t,i){},45:function(e,t,i){},46:function(e,t,i){},47:function(e,t,i){},48:function(e,t,i){},49:function(e,t,i){},50:function(e,t,i){},51:function(e,t,i){},52:function(e,t,i){},53:function(e,t,i){},54:function(e,t,i){},55:function(e,t,i){},56:function(e,t,i){},57:function(e,t,i){},58:function(e,t,i){},59:function(e,t,i){},60:function(e,t,i){},61:function(e,t,i){},62:function(e,t,i){},63:function(e,t,i){},64:function(e,t,i){},65:function(e,t,i){},66:function(e,t,i){},67:function(e,t,i){},68:function(e,t,i){},88:function(e,t,i){"use strict";var s=function(){var e=this.$createElement;return(this._self._c||e)("router-view")},a=[];s._withStripped=!0,i.d(t,"a",function(){return s}),i.d(t,"b",function(){return a})}})}); \ No newline at end of file diff --git a/carrera-console/carrera-boot/src/main/resources/static/logo-with-text.png b/carrera-console/carrera-boot/src/main/resources/static/logo-with-text.png new file mode 100644 index 0000000..e590d21 Binary files /dev/null and b/carrera-console/carrera-boot/src/main/resources/static/logo-with-text.png differ diff --git a/carrera-console/carrera-boot/src/main/resources/static/vendors.js b/carrera-console/carrera-boot/src/main/resources/static/vendors.js new file mode 100644 index 0000000..aefb766 --- /dev/null +++ b/carrera-console/carrera-boot/src/main/resources/static/vendors.js @@ -0,0 +1,44 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[function(e,t,n){"use strict";function r(e,t,n,r,i,o,a,s){var l,c="function"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),r&&(c.functional=!0),o&&(c._scopeId="data-v-"+o),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},c._ssrRegister=l):i&&(l=s?function(){i.call(this,this.$root.$options.shadowRoot)}:i),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var d=c.beforeCreate;c.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:c}}n.d(t,"a",function(){return r})},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),a=r||i||o,s=a&&(r?document.documentMode||6:+(o||i)[1]),l=!o&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),u=!o&&/Chrome\//.test(e),d=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),m=/PhantomJS/.test(e),h=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),g=/Android/.test(e),v=h||g||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=h||/Mac/.test(t),b=/\bCrOS\b/.test(e),x=/win/i.test(t),k=d&&e.match(/Version\/(\d*\.\d*)/);k&&(k=Number(k[1])),k&&k>=15&&(d=!1,l=!0);var w=y&&(c||d&&(null==k||k<12.11)),_=n||a&&s>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var E,T=function(e,t){var n=e.className,r=S(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function C(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function A(e,t){return C(e).appendChild(t)}function M(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=s-o,a+=n-a%n,o=s+1}}h?z=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(z=function(e){try{e.select()}catch(e){}});var F=function(){this.id=null};function j(e,t){for(var n=0;n=t)return r+Math.min(a,t-i);if(i+=o-r,r=o+1,(i+=n-i%n)>=t)return r}}var V=[""];function K(e){for(;V.length<=e;)V.push(Y(V)+" ");return V[e]}function Y(e){return e[e.length-1]}function Z(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||Q.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function ne(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var re=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&re.test(e)}function oe(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,o=r<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+r}}function se(e,t,r){var i=this;this.input=r,i.scrollbarFiller=M("div",null,"CodeMirror-scrollbar-filler"),i.scrollbarFiller.setAttribute("cm-not-content","true"),i.gutterFiller=M("div",null,"CodeMirror-gutter-filler"),i.gutterFiller.setAttribute("cm-not-content","true"),i.lineDiv=I("div",null,"CodeMirror-code"),i.selectionDiv=M("div",null,null,"position: relative; z-index: 1"),i.cursorDiv=M("div",null,"CodeMirror-cursors"),i.measure=M("div",null,"CodeMirror-measure"),i.lineMeasure=M("div",null,"CodeMirror-measure"),i.lineSpace=I("div",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,"position: relative; outline: none");var o=I("div",[i.lineSpace],"CodeMirror-lines");i.mover=M("div",[o],null,"position: relative"),i.sizer=M("div",[i.mover],"CodeMirror-sizer"),i.sizerWidth=null,i.heightForcer=M("div",null,null,"position: absolute; height: "+q+"px; width: 1px;"),i.gutters=M("div",null,"CodeMirror-gutters"),i.lineGutter=null,i.scroller=M("div",[i.sizer,i.heightForcer,i.gutters],"CodeMirror-scroll"),i.scroller.setAttribute("tabIndex","-1"),i.wrapper=M("div",[i.scrollbarFiller,i.gutterFiller,i.scroller],"CodeMirror"),a&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),l||n&&v||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,r.init(i)}function le(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&tn?ge(n,le(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?ge(e.line,t):n<0?ge(e.line,0):e}(t,le(e,t.line).text.length)}function Se(e,t){for(var n=[],r=0;r=t:o.to>t);(r||(r=[])).push(new Ce(a,o.from,l?null:o.to))}}return r}(n,i,a),l=function(e,t,n){var r;if(e)for(var i=0;i=t:o.to>t);if(s||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&s)for(var x=0;xt)&&(!n||Re(n,o.marker)<0)&&(n=o.marker)}return n}function qe(e,t,n,r,i){var o=le(e,t),a=Te&&o.markedSpans;if(a)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?ve(c.to,n)>=0:ve(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?ve(c.from,r)<=0:ve(c.from,r)<0)))return!0}}}function Ue(e){for(var t;t=Pe(e);)e=t.find(-1,!0).line;return e}function We(e,t){var n=le(e,t),r=Ue(n);return n==r?t:fe(r)}function Be(e,t){if(t>e.lastLine())return t;var n,r=le(e,t);if(!He(e,r))return t;for(;n=Fe(r);)r=n.find(1,!0).line;return fe(r)+1}function He(e,t){var n=Te&&t.markedSpans;if(n)for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}var Ze=null;function Xe(e,t,n){var r;Ze=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:Ze=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:Ze=i)}return null!=r?r:Ze}var Je=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,a=/[1n]/;function s(e,t,n){this.level=e,this.from=t,this.to=n}return function(l,c){var u,d="ltr"==c?"L":"R";if(0==l.length||"ltr"==c&&!n.test(l))return!1;for(var f=l.length,p=[],m=0;m-1&&(r[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function it(e,t){var n=nt(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function lt(e){e.prototype.on=function(e,t){tt(this,e,t)},e.prototype.off=function(e,t){rt(this,e,t)}}function ct(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ut(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function dt(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ft(e){ct(e),ut(e)}function pt(e){return e.target||e.srcElement}function mt(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var ht,gt,vt=function(){if(a&&s<9)return!1;var e=M("div");return"draggable"in e||"dragDrop"in e}();function yt(e){if(null==ht){var t=M("span","​");A(e,M("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(ht=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&s<8))}var n=ht?M("span","​"):M("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function bt(e){if(null!=gt)return gt;var t=A(e,document.createTextNode("AخA")),n=E(t,0,1).getBoundingClientRect(),r=E(t,1,2).getBoundingClientRect();return C(e),!(!n||n.left==n.right)&&(gt=r.right-n.right<3)}var xt,kt=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},wt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},_t="oncopy"in(xt=M("div"))||(xt.setAttribute("oncopy","return;"),"function"==typeof xt.oncopy),St=null,Et={},Tt={};function Ct(e){if("string"==typeof e&&Tt.hasOwnProperty(e))e=Tt[e];else if(e&&"string"==typeof e.name&&Tt.hasOwnProperty(e.name)){var t=Tt[e.name];"string"==typeof t&&(t={name:t}),(e=J(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ct("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ct("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function At(e,t){t=Ct(t);var n=Et[t.name];if(!n)return At(e,"text/plain");var r=n(e,t);if(Mt.hasOwnProperty(t.name)){var i=Mt[t.name];for(var o in i)i.hasOwnProperty(o)&&(r.hasOwnProperty(o)&&(r["_"+o]=r[o]),r[o]=i[o])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)r[a]=t.modeProps[a];return r}var Mt={};function It(e,t){var n=Mt.hasOwnProperty(e)?Mt[e]:Mt[e]={};$(t,n)}function Ot(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function Lt(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Dt(e,t,n){return!e.startState||e.startState(t,n)}var Nt=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};Nt.prototype.eol=function(){return this.pos>=this.string.length},Nt.prototype.sol=function(){return this.pos==this.lineStart},Nt.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Nt.prototype.next=function(){if(this.post},Nt.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Nt.prototype.skipToEnd=function(){this.pos=this.string.length},Nt.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Nt.prototype.backUp=function(e){this.pos-=e},Nt.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e},o=this.string.substr(this.pos,e.length);if(i(o)==i(e))return!1!==t&&(this.pos+=e.length),!0},Nt.prototype.current=function(){return this.string.slice(this.start,this.pos)},Nt.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Nt.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Nt.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var zt=function(e,t){this.state=e,this.lookAhead=t},Rt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function $t(e,t,n,r){var i=[e.state.modeGen],o={};Gt(e,t.text,e.doc.mode,n,function(e,t){return i.push(e,t)},o,r);for(var a=n.state,s=function(r){n.baseTokens=i;var s=e.state.overlays[r],l=1,c=0;n.state=!0,Gt(e,t.text,s.mode,n,function(e,t){for(var n=l;ce&&i.splice(l,1,e,i[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(s.opaque)i.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;ne.options.maxHighlightLength&&Ot(e.doc.mode,r.state),o=$t(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Ft(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new Rt(r,!0,t);var o=function(e,t,n){for(var r,i,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=o.first)return o.first;var l=le(o,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof zt?c.lookAhead:0)<=o.modeFrontier))return s;var u=P(l.text,null,e.options.tabSize);(null==i||r>u)&&(i=s-1,r=u)}return i}(e,t,n),a=o>r.first&&le(r,o-1).stateAfter,s=a?Rt.fromSaved(r,a,o):new Rt(r,Dt(r.mode),o);return r.iter(o,t,function(n){jt(e,n.text,s);var r=s.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&rt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}Rt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Rt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Rt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Rt.fromSaved=function(e,t,n){return t instanceof zt?new Rt(e,Ot(e.mode,t.state),n,t.lookAhead):new Rt(e,Ot(e.mode,t),n)},Rt.prototype.save=function(e){var t=!1!==e?Ot(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new zt(t,this.maxLookAhead):t};var Wt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Bt(e,t,n,r){var i,o=e.doc,a=o.mode;t=_e(o,t);var s,l=le(o,t.line),c=Ft(e,t.line,n),u=new Nt(l.text,e.options.tabSize,c);for(r&&(s=[]);(r||u.pose.options.maxHighlightLength?(s=!1,a&&jt(e,t,r,d.pos),d.pos=t.length,l=null):l=Ht(Ut(n,d,r.state,f),o),f){var p=f[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){for(;c1&&!/ /.test(e))return e;for(var n=t,r="",i=0;ic&&d.from<=c);f++);if(d.to>=u)return e(n,r,i,o,a,s,l);e(n,r.slice(0,d.to-c),i,o,null,s,l),o=null,r=r.slice(d.to-c),c=d.to}}}function nn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rn(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,s,l,c,u,d,f,p=i.length,m=0,h=1,g="",v=0;;){if(v==m){l=c=u=s="",f=null,d=null,v=1/0;for(var y=[],b=void 0,x=0;xm||w.collapsed&&k.to==m&&k.from==m)){if(null!=k.to&&k.to!=m&&v>k.to&&(v=k.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&k.from==m&&(u+=" "+w.startStyle),w.endStyle&&k.to==v&&(b||(b=[])).push(w.endStyle,k.to),w.title&&((f||(f={})).title=w.title),w.attributes)for(var _ in w.attributes)(f||(f={}))[_]=w.attributes[_];w.collapsed&&(!d||Re(d.marker,w)<0)&&(d=k)}else k.from>m&&v>k.from&&(v=k.from)}if(b)for(var S=0;S=p)break;for(var T=Math.min(p,v);;){if(g){var C=m+g.length;if(!d){var A=C>T?g.slice(0,T-m):g;t.addToken(t,A,a?a+l:l,u,m+A.length==v?c:"",s,f)}if(C>=T){g=g.slice(T-m),m=T;break}m=C,u=""}g=i.slice(o,o=n[h++]),a=Xt(n[h++],t.cm.options)}}else for(var M=1;Mn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function On(e,t,n,r){return Nn(e,Dn(e,t),n,r)}function Ln(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&o.push((l.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,n,r){var i,o=$n(t.map,n,r),l=o.node,c=o.start,u=o.end,d=o.collapse;if(3==l.nodeType){for(var f=0;f<4;f++){for(;c&&ie(t.line.text.charAt(o.coverStart+c));)--c;for(;o.coverStart+u1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,i))}else{var p;c>0&&(d=r="right"),i=e.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==r?p.length-1:0]:l.getBoundingClientRect()}if(a&&s<9&&!c&&(!i||!i.left&&!i.right)){var m=l.parentNode.getClientRects()[0];i=m?{left:m.left,right:m.left+rr(e.display),top:m.top,bottom:m.bottom}:Rn}for(var h=i.top-t.rect.top,g=i.bottom-t.rect.top,v=(h+g)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=l-s)-1,t>=l&&(a="right")),null!=i){if(r=e[c+2],s==l&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],a="left";if("right"==n&&i==l-s)for(;c=0&&(n=e[i]).left==n.right;i--);return n}function Fn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(l=r.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return a("before"==c?l-1:l,"before"==c);function u(e,t,n){var r=s[t],i=1==r.level;return a(n?e-1:e,i!=n)}var d=Xe(s,l,c),f=Ze,p=u(l,d,"before"==c);return null!=f&&(p.other=u(l,f,"before"!=c)),p}function Yn(e,t){var n=0;t=_e(e.doc,t),e.options.lineWrapping||(n=rr(e.display)*t.ch);var r=le(e.doc,t.line),i=Ve(r)+Sn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Zn(e,t,n,r,i){var o=ge(e,t,n);return o.xRel=i,r&&(o.outside=!0),o}function Xn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Zn(r.first,0,null,!0,-1);var i=pe(r,n),o=r.first+r.size-1;if(i>o)return Zn(r.first+r.size-1,le(r,o).text.length,null,!0,1);t<0&&(t=0);for(var a=le(r,i);;){var s=tr(e,a,i,t,n),l=je(a,s.ch+(s.xRel>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==i)return c;a=le(r,i=c.line)}}function Jn(e,t,n,r){r-=Bn(t);var i=t.text.length,o=ae(function(t){return Nn(e,n,t-1).bottom<=r},i,0);return i=ae(function(t){return Nn(e,n,t).top>r},o,i),{begin:o,end:i}}function Qn(e,t,n,r){n||(n=Dn(e,t));var i=Hn(e,t,Nn(e,n,r),"line").top;return Jn(e,t,n,i)}function er(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function tr(e,t,n,r,i){i-=Ve(t);var o=Dn(e,t),a=Bn(t),s=0,l=t.text.length,c=!0,u=Qe(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?function(e,t,n,r,i,o,a){var s=Jn(e,t,r,a),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f=c||p.to<=l)){var m=1!=p.level,h=Nn(e,r,m?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=hg)&&(u=p,d=g)}}return u||(u=i[i.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}:function(e,t,n,r,i,o,a){var s=ae(function(s){var l=i[s],c=1!=l.level;return er(Kn(e,ge(n,c?l.to:l.from,c?"before":"after"),"line",t,r),o,a,!0)},0,i.length-1),l=i[s];if(s>0){var c=1!=l.level,u=Kn(e,ge(n,c?l.from:l.to,c?"after":"before"),"line",t,r);er(u,o,a,!0)&&u.top>a&&(l=i[s-1])}return l})(e,t,n,o,u,r,i);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var f,p,m=null,h=null,g=ae(function(t){var n=Nn(e,o,t);return n.top+=a,n.bottom+=a,!!er(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(m=t,h=n),!0)},s,l),v=!1;if(h){var y=r-h.left=x.bottom}return g=oe(t.text,g,1),Zn(n,g,p,v,r-f)}function nr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==zn){zn=M("pre");for(var t=0;t<49;++t)zn.appendChild(document.createTextNode("x")),zn.appendChild(M("br"));zn.appendChild(document.createTextNode("x"))}A(e.measure,zn);var n=zn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),C(e.measure),n||1}function rr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=M("span","xxxxxxxxxx"),n=M("pre",[t]);A(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function ir(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)n[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,r[e.options.gutters[a]]=o.clientWidth;return{fixedPos:or(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function or(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ar(e){var t=nr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/rr(e.display)-3);return function(i){if(He(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r=e.display.viewTo||s.to().linet||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(h,n||0,null==r?f:r,function(e,t,i,d){var g="ltr"==i,v=p(e,g?"left":"right"),y=p(t-1,g?"right":"left"),b=null==n&&0==e,x=null==r&&t==f,k=0==d,w=!h||d==h.length-1;if(y.top-v.top<=3){var _=(c?b:x)&&k,S=(c?x:b)&&w,E=_?s:(g?v:y).left,T=S?l:(g?y:v).right;u(E,v.top,T-E,v.bottom)}else{var C,A,M,I;g?(C=c&&b&&k?s:v.left,A=c?l:m(e,i,"before"),M=c?s:m(t,i,"after"),I=c&&x&&w?l:y.right):(C=c?m(e,i,"before"):s,A=!c&&b&&k?l:v.right,M=!c&&x&&w?s:y.left,I=c?m(t,i,"after"):l),u(C,v.top,A-C,v.bottom),v.bottom0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function gr(e){e.state.focused||(e.display.input.focus(),yr(e))}function vr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,br(e))},100)}function yr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,D(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),hr(e))}function br(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function xr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r.005||f<-.005)&&(de(i.line,l),kr(i.line),i.rest))for(var p=0;pe.display.sizerWidth){var m=Math.ceil(c/rr(e.display));m>e.display.maxLineLength&&(e.display.maxLineLength=m,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function kr(e){if(e.widgets)for(var t=0;t=a&&(o=pe(t,Ve(le(t,l))-e.wrapper.clientHeight),a=l)}return{from:o,to:Math.max(a,o+1)}}function _r(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=or(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",a=0;ao&&(t.bottom=t.top+o);var s=e.doc.height+En(n),l=t.tops-r;if(t.topi+o){var u=Math.min(t.top,(c?s:t.bottom)-o);u!=i&&(a.scrollTop=u)}var d=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,f=An(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.leftf+d-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function Tr(e,t){null!=t&&(Mr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Cr(e){Mr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ar(e,t,n){null==t&&null==n||Mr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Mr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=Yn(e,t.from),r=Yn(e,t.to);Ir(e,n,r,t.margin)}}function Ir(e,t,n,r){var i=Er(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Ar(e,i.scrollLeft,i.scrollTop)}function Or(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||li(e,{top:t}),Lr(e,t,!0),n&&li(e),ri(e,100))}function Lr(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dr(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,_r(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Nr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+En(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Cn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var zr=function(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),tt(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),tt(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,a&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};zr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},zr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},zr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},zr.prototype.zeroWidthHack=function(){var e=y&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new F,this.disableVert=new F},zr.prototype.enableZeroWidthBar=function(e,t,n){e.style.pointerEvents="auto",t.set(1e3,function r(){var i=e.getBoundingClientRect(),o="vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1);o!=e?e.style.pointerEvents="none":t.set(1e3,r)})},zr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Rr=function(){};function $r(e,t){t||(t=Nr(e));var n=e.display.barWidth,r=e.display.barHeight;Pr(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&xr(e),Pr(e,Nr(e)),n=e.display.barWidth,r=e.display.barHeight}function Pr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Rr.prototype.update=function(){return{bottom:0,right:0}},Rr.prototype.setScrollLeft=function(){},Rr.prototype.setScrollTop=function(){},Rr.prototype.clear=function(){};var Fr={native:zr,null:Rr};function jr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Fr[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),tt(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){"horizontal"==n?Dr(e,t):Or(e,t)},e),e.display.scrollbars.addClass&&D(e.display.wrapper,e.display.scrollbars.addClass)}var qr=0;function Ur(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++qr},t=e.curOp,sn?sn.ops.push(t):t.ownsGroup=sn={ops:[t],delayedCallbacks:[]}}function Wr(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new oi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Hr(e){var t=e.cm,n=t.display;e.updatedDisplay&&xr(t),e.barMeasure=Nr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=On(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Cn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-An(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Gr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft1&&(a=!0)),null!=c.scrollLeft&&(Dr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return i}(t,_e(r,e.scrollToPos.from),_e(r,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!ot(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null;if(t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!m){var o=M("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Sn(e.display))+"px;\n height: "+(t.bottom-t.top+Cn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,i)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var s=0;st)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Te&&We(e.doc,t)i.viewFrom?ei(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)ei(e);else if(t<=i.viewFrom){var o=ti(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):ei(e)}else if(n>=i.viewTo){var a=ti(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):ei(e)}else{var s=ti(e,t,t,-1),l=ti(e,n,n+r,1);s&&l?(i.view=i.view.slice(0,s.index).concat(an(e,s.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):ei(e)}var c=i.externalMeasured;c&&(n=i.lineN&&t=r.viewTo)){var o=r.view[cr(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==j(a,n)&&a.push(n)}}}function ei(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function ti(e,t,n,r){var i,o=cr(e,t),a=e.display.view;if(!Te||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,l=0;l0){if(o==a.length-1)return null;i=s+a[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;We(e.doc,n)!=n;){if(o==(r<0?0:a.length-1))return null;n+=r*a[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function ni(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo)){var n=+new Date+e.options.workTime,r=Ft(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(r.line>=e.display.viewFrom){var a=o.styles,s=o.text.length>e.options.maxHighlightLength?Ot(t.mode,r.state):null,l=$t(e,o,r,!0);s&&(r.state=s),o.styles=l.styles;var c=o.styleClasses,u=l.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),f=0;!d&&fn)return ri(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Kr(e,function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==ni(e))return!1;Sr(e)&&(ei(e),t.dims=ir(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(i,n.viewTo)),Te&&(o=We(e.doc,o),a=Be(e.doc,a));var s=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=an(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=an(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,cr(e,n)))),r.viewTo=n}(e,o,a),n.viewOffset=Ve(le(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=ni(e);if(!s&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var u=function(e){if(e.hasFocus())return null;var t=L();if(!t||!O(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&O(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,i=e.options.lineNumbers,o=r.lineDiv,a=o.firstChild;function s(t){var n=t.nextSibling;return l&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,u=r.viewFrom,d=0;d-1&&(p=!1),dn(e,f,u,n)),p&&(C(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(he(e.options,u)))),a=f.node.nextSibling}else{var m=yn(e,f,u,n);o.insertBefore(m,a)}u+=f.size}for(;a;)a=s(a)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=L()&&(e.activeElt.focus(),e.anchorNode&&O(document.body,e.anchorNode)&&O(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(u),C(n.cursorDiv),C(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ri(e,400)),n.updateLineNumbers=null,!0}function si(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=An(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+En(e.display)-Mn(e),n.top)}),t.visible=wr(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ai(e,t);r=!1){xr(e);var i=Nr(e);ur(e),$r(e,i),ui(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function li(e,t){var n=new oi(e,t);if(ai(e,n)){xr(e),si(e,n);var r=Nr(e);ur(e),$r(e,r),ui(e,r),n.finish()}}function ci(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function ui(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Cn(e)+"px"}function di(e){var t=e.display.gutters,n=e.options.gutters;C(t);for(var r=0;r-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}oi.prototype.signal=function(e,t){st(e,t)&&this.events.push(arguments)},oi.prototype.finish=function(){for(var e=0;es.clientWidth,u=s.scrollHeight>s.clientHeight;if(i&&c||o&&u){if(o&&y&&l)e:for(var f=t.target,p=a.view;f!=s;f=f.parentNode)for(var m=0;m=0&&ve(e,r.to())<=0)return n}return-1};var bi=function(e,t){this.anchor=e,this.head=t};function xi(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort(function(e,t){return ve(e.from(),t.from())}),n=j(t,i);for(var o=1;o0:l>=0){var c=ke(s.from(),a.from()),u=xe(s.to(),a.to()),d=s.empty()?a.from()==a.head:s.from()==s.head;o<=n&&--n,t.splice(--o,2,new bi(d?u:c,d?c:u))}}return new yi(t,n)}function ki(e,t){return new yi([new bi(e,t||e)],0)}function wi(e){return e.text?ge(e.from.line+e.text.length-1,Y(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function _i(e,t){if(ve(e,t.from)<0)return e;if(ve(e,t.to)<=0)return wi(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=wi(t).ch-t.to.ch),ge(n,r)}function Si(e,t){for(var n=[],r=0;r1&&e.remove(s.line+1,m-1),e.insert(s.line+1,v)}cn(e,"change",e,t)}function Ii(e,t,n){!function e(r,i,o){if(r.linked)for(var a=0;as-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(zi(e.done),Y(e.done)):e.done.length&&!Y(e.done).ranges?Y(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Y(e.done)):void 0}(i,i.lastOp==r)))a=Y(o.changes),0==ve(t.from,t.to)&&0==ve(t.from,a.to)?a.to=wi(t):o.changes.push(Ni(e,t));else{var l=Y(i.done);for(l&&l.ranges||Pi(e.sel,i.done),o={changes:[Ni(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,a||it(e,"historyAdded")}function $i(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,Y(i.done),t))?i.done[i.done.length-1]=t:Pi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=n,r&&!1!==r.clearRedo&&zi(i.undone)}function Pi(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Fi(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o})}function ji(e){if(!e)return null;for(var t,n=0;n-1&&(Y(s)[d]=c[d],delete c[d])}}}return r}function Wi(e,t,n,r){if(r){var i=e.anchor;if(n){var o=ve(t,i)<0;o!=ve(n,i)<0?(i=t,t=n):o!=ve(t,n)<0&&(t=n)}return new bi(i,t)}return new bi(n||t,t)}function Bi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Yi(e,new yi([Wi(e.sel.primary(),t,n,i)],0),r)}function Hi(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(it(l,"beforeCursorEnter"),l.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var c=l.find(r<0?1:-1),u=void 0;if((r<0?l.inclusiveRight:l.inclusiveLeft)&&(c=no(e,c,-r,c&&c.line==t.line?o:null)),c&&c.line==t.line&&(u=ve(c,n))&&(r<0?u<0:u>0))return eo(e,c,t,r,i)}var d=l.find(r<0?-1:1);return(r<0?l.inclusiveLeft:l.inclusiveRight)&&(d=no(e,d,r,d.line==t.line?o:null)),d?eo(e,d,t,r,i):null}}return t}function to(e,t,n,r,i){var o=r||1,a=eo(e,t,n,o,i)||!i&&eo(e,t,n,o,!0)||eo(e,t,n,-o,i)||!i&&eo(e,t,n,-o,!0);return a||(e.cantEdit=!0,ge(e.first,0))}function no(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?_e(e,ge(t.line-1)):null:n>0&&t.ch==(r||le(e,t.line)).text.length?t.line0)){var u=[l,1],d=ve(c.from,s.from),f=ve(c.to,s.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(f>0||!a.inclusiveRight&&!f)&&u.push({from:s.to,to:c.to}),i.splice.apply(i,u),l+=u.length-3}}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)ao(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else ao(e,t)}}function ao(e,t){if(1!=t.text.length||""!=t.text[0]||0!=ve(t.from,t.to)){var n=Si(e,t);Ri(e,t,n,e.cm?e.cm.curOp.id:NaN),co(e,t,n,Ie(e,t));var r=[];Ii(e,function(e,n){n||-1!=j(r,e.history)||(mo(e.history,t),r.push(e.history)),co(e,t,null,Ie(e,t))})}}function so(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var i,o=e.history,a=e.sel,s="undo"==t?o.done:o.undone,l="undo"==t?o.undone:o.done,c=0;c=0;--p){var m=f(p);if(m)return m.v}}}}function lo(e,t){if(0!=t&&(e.first+=t,e.sel=new yi(Z(e.sel.ranges,function(e){return new bi(ge(e.anchor.line+t,e.anchor.ch),ge(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Jr(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.lineo&&(t={from:t.from,to:ge(o,le(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ce(e,t.from,t.to),n||(n=Si(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,a=t.to,s=!1,l=o.line;e.options.lineWrapping||(l=fe(Ue(le(r,o.line))),r.iter(l,a.line+1,function(e){if(e==i.maxLine)return s=!0,!0})),r.sel.contains(t.from,t.to)>-1&&at(e),Mi(r,t,n,ar(e)),e.options.lineWrapping||(r.iter(l,o.line+t.text.length,function(e){var t=Ke(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=le(e,r).stateAfter;if(i&&(!(i instanceof zt)||r+i.lookAhead1||!(this.children[0]instanceof go))){var s=[];this.collapse(s),this.children=[new go(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=i.lines.length%25+25,s=a;s10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=I("span",[o.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(qe(e,t.line,t,n,o)||t.line!=n.line&&qe(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Te=!0}o.addToHistory&&Ri(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,function(e){c&&o.collapsed&&!c.options.lineWrapping&&Ue(e)==c.display.maxLine&&(s=!0),o.collapsed&&l!=t.line&&de(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Ce(o,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l}),o.collapsed&&e.iter(t.line,n.line+1,function(t){He(e,t)&&de(t,0)}),o.clearOnEnter&&tt(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(Ee=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++xo,o.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),o.collapsed)Jr(c,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=t.line;u<=n.line;u++)Qr(c,u,"text");o.atomic&&Ji(c.doc),cn(c,"markerAdded",c,o)}return o}ko.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Ur(e),st(this,"clear")){var n=this.find();n&&cn(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Jr(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Ji(e.doc)),e&&cn(e,"markerCleared",e,this,r,i),t&&Wr(e),this.parent&&this.parent.clear()}},ko.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;l--)oo(this,r[l]);s?Ki(this,s):this.cm&&Cr(this.cm)}),undo:Xr(function(){so(this,"undo")}),redo:Xr(function(){so(this,"redo")}),undoSelection:Xr(function(){so(this,"undo",!0)}),redoSelection:Xr(function(){so(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=_e(this,e),t=_e(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var a=o.markedSpans;if(a)for(var s=0;s=l.to||null==l.from&&i!=e.line||null!=l.from&&i==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=o,++n}),_e(this,ge(n,t))},indexFromPos:function(e){var t=(e=_e(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var u=e.dataTransfer.getData("Text");if(u){var d;if(t.state.draggingText&&!t.state.draggingText.copy&&(d=t.listSelections()),Zi(t.doc,ki(n,n)),d)for(var f=0;f=0;t--)uo(e.doc,"",r[t].from,r[t].to,"+delete");Cr(e)})}function Ko(e,t,n){var r=oe(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Yo(e,t,n){var r=Ko(e,t.ch,n);return null==r?null:new ge(t.line,r,n<0?"after":"before")}function Zo(e,t,n,r,i){if(e){var o=Qe(n,t.doc.direction);if(o){var a,s=i<0?Y(o):o[0],l=i<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Dn(t,n);a=i<0?n.text.length-1:0;var d=Nn(t,u,a).top;a=ae(function(e){return Nn(t,u,e).top==d},i<0==(1==s.level)?s.from:s.to-1,a),"before"==c&&(a=Ko(n,a,1))}else a=i<0?s.to:s.from;return new ge(r,a,c)}}return new ge(r,i<0?n.text.length:0,i<0?"before":"after")}Fo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Fo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Fo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Fo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Fo.default=y?Fo.macDefault:Fo.pcDefault;var Xo={selectAll:ro,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),W)},killLine:function(e){return Vo(e,function(t){if(t.empty()){var n=le(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new ge(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),ge(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=le(e.doc,i.line-1).text;a&&(i=new ge(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),ge(i.line-1,a.length-1),i,"+transpose"))}n.push(new bi(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return Kr(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(ve((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(ve(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,o=!1,c=Yr(e,function(t){l&&(i.scroller.draggable=!1),e.state.draggingText=!1,rt(i.wrapper.ownerDocument,"mouseup",c),rt(i.wrapper.ownerDocument,"mousemove",u),rt(i.scroller,"dragstart",d),rt(i.scroller,"drop",c),o||(ct(t),r.addNew||Bi(e.doc,n,null,null,r.extend),l||a&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),u=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};l&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),tt(i.wrapper.ownerDocument,"mouseup",c),tt(i.wrapper.ownerDocument,"mousemove",u),tt(i.scroller,"dragstart",d),tt(i.scroller,"drop",c),vr(e),setTimeout(function(){return i.input.focus()},20)}(e,r,t,o):function(e,t,n,r){var i=e.display,o=e.doc;ct(t);var a,s,l=o.sel,c=l.ranges;if(r.addNew&&!r.extend?(s=o.sel.contains(n),a=s>-1?c[s]:new bi(n,n)):(a=o.sel.primary(),s=o.sel.primIndex),"rectangle"==r.unit)r.addNew||(a=new bi(n,n)),n=lr(e,t,!0,!0),s=-1;else{var u=pa(e,n,r.unit);a=r.extend?Wi(a,u.anchor,u.head,r.extend):u}r.addNew?-1==s?(s=c.length,Yi(o,xi(e,c.concat([a]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==r.unit&&!r.extend?(Yi(o,xi(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),l=o.sel):Gi(o,s,a,B):(s=0,Yi(o,new yi([a],0),B),l=o.sel);var d=n;function f(t){if(0!=ve(d,t))if(d=t,"rectangle"==r.unit){for(var i=[],c=e.options.tabSize,u=P(le(o,n.line).text,n.ch,c),f=P(le(o,t.line).text,t.ch,c),p=Math.min(u,f),m=Math.max(u,f),h=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));h<=g;h++){var v=le(o,h).text,y=G(v,p,c);p==m?i.push(new bi(ge(h,y),ge(h,y))):v.length>y&&i.push(new bi(ge(h,y),ge(h,G(v,m,c))))}i.length||i.push(new bi(n,n)),Yi(o,xi(e,l.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,x=a,k=pa(e,t,r.unit),w=x.anchor;ve(k.anchor,w)>0?(b=k.head,w=ke(x.from(),k.anchor)):(b=k.anchor,w=xe(x.to(),k.head));var _=l.ranges.slice(0);_[s]=function(e,t){var n=t.anchor,r=t.head,i=le(e.doc,n.line);if(0==ve(n,r)&&n.sticky==r.sticky)return t;var o=Qe(i);if(!o)return t;var a=Xe(o,n.ch,n.sticky),s=o[a];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==o.length)return t;if(r.line!=n.line)l=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=Xe(o,r.ch,r.sticky),d=u-a||(r.ch-n.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var f=o[c+(l?-1:0)],p=l==(1==f.level),m=p?f.from:f.to,h=p?"after":"before";return n.ch==m&&n.sticky==h?t:new bi(new ge(n.line,m,h),r)}(e,new bi(_e(o,w),b)),Yi(o,xi(e,_,s),B)}}var p=i.wrapper.getBoundingClientRect(),m=0;function h(t){e.state.selectingText=!1,m=1/0,ct(t),i.input.focus(),rt(i.wrapper.ownerDocument,"mousemove",g),rt(i.wrapper.ownerDocument,"mouseup",v),o.history.lastSelOrigin=null}var g=Yr(e,function(t){0!==t.buttons&&mt(t)?function t(n){var a=++m,s=lr(e,n,!0,"rectangle"==r.unit);if(s)if(0!=ve(s,d)){e.curOp.focus=L(),f(s);var l=wr(i,o);(s.line>=l.to||s.linep.bottom?20:0;c&&setTimeout(Yr(e,function(){m==a&&(i.scroller.scrollTop+=c,t(n))}),50)}}(t):h(t)}),v=Yr(e,h);e.state.selectingText=v,tt(i.wrapper.ownerDocument,"mousemove",g),tt(i.wrapper.ownerDocument,"mouseup",v)}(e,r,t,o)}(t,r,o,e):pt(e)==n.scroller&&ct(e):2==i?(r&&Bi(t.doc,r),setTimeout(function(){return n.input.focus()},20)):3==i&&(_?t.display.input.onContextMenu(e):vr(t)))}}function pa(e,t,n){if("char"==n)return new bi(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new bi(ge(t.line,0),_e(e.doc,ge(t.line+1,0)));var r=n(e,t);return new bi(r.from,r.to)}function ma(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&ct(t);var a=e.display,s=a.lineDiv.getBoundingClientRect();if(o>s.bottom||!st(e,n))return dt(t);o-=s.top-a.viewOffset;for(var l=0;l=i){var u=pe(e.doc,o),d=e.options.gutters[l];return it(e,n,e,u,d,t),dt(t)}}}function ha(e,t){return ma(e,t,"gutterClick",!0)}function ga(e,t){_n(e.display,t)||function(e,t){return!!st(e,"gutterContextMenu")&&ma(e,t,"gutterContextMenu",!1)}(e,t)||ot(e,t,"contextmenu")||_||e.display.input.onContextMenu(t)}function va(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),qn(e)}da.prototype.compare=function(e,t,n){return this.time+400>e&&0==ve(t,this.pos)&&n==this.button};var ya={toString:function(){return"CodeMirror.Init"}},ba={},xa={};function ka(e){di(e),Jr(e),_r(e)}function wa(e,t,n){var r=n&&n!=ya;if(!t!=!r){var i=e.display.dragFunctions,o=t?tt:rt;o(e.display.scroller,"dragstart",i.start),o(e.display.scroller,"dragenter",i.enter),o(e.display.scroller,"dragover",i.over),o(e.display.scroller,"dragleave",i.leave),o(e.display.scroller,"drop",i.drop)}}function _a(e){e.options.lineWrapping?(D(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),Ye(e)),sr(e),Jr(e),qn(e),setTimeout(function(){return $r(e)},100)}function Sa(e,t){var n=this;if(!(this instanceof Sa))return new Sa(e,t);this.options=t=t?$(t):{},$(ba,t,!1),fi(t);var r=t.value;"string"==typeof r?r=new Co(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new Sa.inputStyles[t.inputStyle](this),o=this.display=new se(e,r,i);for(var c in o.wrapper.CodeMirror=this,di(this),va(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),jr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new F,keySeq:null,specialChars:null},t.autofocus&&!v&&o.input.focus(),a&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;tt(t.scroller,"mousedown",Yr(e,fa)),tt(t.scroller,"dblclick",a&&s<11?Yr(e,function(t){if(!ot(e,t)){var n=lr(e,t);if(n&&!ha(e,t)&&!_n(e.display,t)){ct(t);var r=e.findWordAt(n);Bi(e.doc,r.anchor,r.head)}}}):function(t){return ot(e,t)||ct(t)}),tt(t.scroller,"contextmenu",function(t){return ga(e,t)});var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout(function(){return t.activeTouch=null},1e3),(r=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}tt(t.scroller,"touchstart",function(i){if(!ot(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!ha(e,i)){t.input.ensurePolled(),clearTimeout(n);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-r.end<=300?r:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),tt(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),tt(t.scroller,"touchend",function(n){var r=t.activeTouch;if(r&&!_n(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var a,s=e.coordsChar(t.activeTouch,"page");a=!r.prev||o(r,r.prev)?new bi(s,s):!r.prev.prev||o(r,r.prev.prev)?e.findWordAt(s):new bi(ge(s.line,0),_e(e.doc,ge(s.line+1,0))),e.setSelection(a.anchor,a.head),e.focus(),ct(n)}i()}),tt(t.scroller,"touchcancel",i),tt(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Or(e,t.scroller.scrollTop),Dr(e,t.scroller.scrollLeft,!0),it(e,"scroll",e))}),tt(t.scroller,"mousewheel",function(t){return vi(e,t)}),tt(t.scroller,"DOMMouseScroll",function(t){return vi(e,t)}),tt(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ot(e,t)||ft(t)},over:function(t){ot(e,t)||(function(e,t){var n=lr(e,t);if(n){var r=document.createDocumentFragment();fr(e,n,r),e.display.dragCursor||(e.display.dragCursor=M("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),A(e.display.dragCursor,r)}}(e,t),ft(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-Ao<100))ft(t);else if(!ot(e,t)&&!_n(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var n=M("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),d&&n.parentNode.removeChild(n)}}(e,t)},drop:Yr(e,Mo),leave:function(t){ot(e,t)||Io(e)}};var l=t.input.getField();tt(l,"keyup",function(t){return sa.call(e,t)}),tt(l,"keydown",Yr(e,aa)),tt(l,"keypress",Yr(e,la)),tt(l,"focus",function(t){return yr(e,t)}),tt(l,"blur",function(t){return br(e,t)})}(this),Do(),Ur(this),this.curOp.forceUpdate=!0,Oi(this,r),t.autofocus&&!v||this.hasFocus()?setTimeout(R(yr,this),20):br(this),xa)xa.hasOwnProperty(c)&&xa[c](n,t[c],ya);Sr(this),t.finishInit&&t.finishInit(this);for(var u=0;u150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?P(le(o,t-1).text,null,a):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(e.options.indentWithTabs)for(var p=Math.floor(c/a);p;--p)f+=a,d+="\t";if(f1)if(Ca&&Ca.text.join("\n")==t){if(r.ranges.length%Ca.text.length==0){c=[];for(var u=0;u=0;d--){var f=r.ranges[d],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=ge(p.line,p.ch-n):e.state.overwrite&&!s?m=ge(m.line,Math.min(le(o,m.line).text.length,m.ch+Y(l).length)):s&&Ca&&Ca.lineWise&&Ca.text.join("\n")==t&&(p=m=ge(p.line,0))),a=e.curOp.updateInput;var h={from:p,to:m,text:c?c[d%c.length]:l,origin:i||(s?"paste":e.state.cutIncoming?"cut":"+input")};oo(e.doc,h),cn(e,"inputRead",e,h)}t&&!s&&Oa(e,t),Cr(e),e.curOp.updateInput=a,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Ia(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Kr(t,function(){return Ma(t,n,0,null,"paste")}),!0}function Oa(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var s=0;s-1){a=Ta(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(le(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Ta(e,i.head.line,"smart"));a&&cn(e,"electricInput",e,i.head.line)}}}function La(e){for(var t=[],n=[],r=0;r=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=Xe(i,n.ch,n.sticky),a=i[o];if("ltr"==e.doc.direction&&a.level%2==0&&(r>0?a.to>n.ch:a.from=a.from&&f>=u.begin)){var p=d?"before":"after";return new ge(n.line,f,p)}}var m=function(e,t,r){for(var o=function(e,t){return t?new ge(n.line,l(e,1),"before"):new ge(n.line,e,"after")};e>=0&&e0==(1!=a.level),c=s?r.begin:l(r.end,-1);if(a.from<=c&&c0?u.end:l(u.begin,-1);return null==g||r>0&&g==t.text.length||!(h=m(r>0?0:i.length-1,r,c(g)))?null:h}(e.cm,s,t,n):Yo(s,t,n))){if(r||((a=t.line+n)=e.first+e.size||(t=new ge(a,t.ch,t.sticky),!(s=le(e,a)))))return!1;t=Zo(i,e.cm,s,t.line,n)}else t=o;return!0}if("char"==r)l();else if("column"==r)l(!0);else if("word"==r||"group"==r)for(var c=null,u="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(n<0)||l(!f);f=!1){var p=s.text.charAt(t.ch)||"\n",m=te(p,d)?"w":u&&"\n"==p?"n":!u||/\s/.test(p)?null:"p";if(!u||f||m||(m="s"),c&&c!=m){n<0&&(n=1,l(),t.sticky="after");break}if(m&&(c=m),n>0&&!l(!f))break}var h=to(e,t,o,a,!0);return ye(o,h)&&(h.hitSide=!0),h}function Ra(e,t,n,r){var i,o,a=e.doc,s=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*nr(e.display),3);i=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;(o=Xn(e,s,i)).outside;){if(n<0?i<=0:i>=a.height){o.hitSide=!0;break}i+=5*n}return o}var $a=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new F,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Pa(e,t){var n=Ln(e,t.line);if(!n||n.hidden)return null;var r=le(e.doc,t.line),i=In(n,r,t.line),o=Qe(r,e.doc.direction),a="left";if(o){var s=Xe(o,t.ch);a=s%2?"right":"left"}var l=$n(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Fa(e,t){return t&&(e.bad=!0),e}function ja(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Fa(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Pa(t,i)||{node:l[0].measure.map[2],offset:0},u=o.liner.firstLine()&&(a=ge(a.line-1,le(r.doc,a.line-1).length)),s.ch==le(r.doc,s.line).text.length&&s.linei.viewTo-1)return!1;a.line==i.viewFrom||0==(e=cr(r,a.line))?(t=fe(i.view[0].line),n=i.view[0].node):(t=fe(i.view[e].line),n=i.view[e-1].node.nextSibling);var l,c,u=cr(r,s.line);if(u==i.view.length-1?(l=i.viewTo-1,c=i.lineDiv.lastChild):(l=fe(i.view[u+1].line)-1,c=i.view[u+1].node.previousSibling),!n)return!1;for(var d=r.doc.splitLines(function(e,t,n,r,i){var o="",a=!1,s=e.doc.lineSeparator(),l=!1;function c(){a&&(o+=s,l&&(o+=s),a=l=!1)}function u(e){e&&(c(),o+=e)}function d(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void u(n);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(ge(r,0),ge(i+1,0),(g=+f,function(e){return e.id==g}));return void(p.length&&(o=p[0].find(0))&&u(ce(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&c();for(var h=0;h1&&f.length>1;)if(Y(d)==Y(f))d.pop(),f.pop(),l--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),t++}for(var p=0,m=0,h=d[0],g=f[0],v=Math.min(h.length,g.length);pa.ch&&y.charCodeAt(y.length-m-1)==b.charCodeAt(b.length-m-1);)p--,m++;d[d.length-1]=y.slice(0,y.length-m).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var k=ge(t,p),w=ge(l,f.length?Y(f).length-m:0);return d.length>1||d[0]||ve(k,w)?(uo(r.doc,d,k,w,"+input"),!0):void 0},$a.prototype.ensurePolled=function(){this.forceCompositionEnd()},$a.prototype.reset=function(){this.forceCompositionEnd()},$a.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},$a.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},$a.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Kr(this.cm,function(){return Jr(e.cm)})},$a.prototype.setUneditable=function(e){e.contentEditable="false"},$a.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Yr(this.cm,Ma)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},$a.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},$a.prototype.onContextMenu=function(){},$a.prototype.resetPosition=function(){},$a.prototype.needsContentAttribute=!0;var Ua=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new F,this.hasSelection=!1,this.composing=null};Ua.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ot(r,e)){if(r.somethingSelected())Aa({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=La(r);Aa({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,W):(n.prevInput="",i.value=t.text.join("\n"),z(i))}"cut"==e.type&&(r.state.cutIncoming=!0)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),h&&(i.style.width="0px"),tt(i,"input",function(){a&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),tt(i,"paste",function(e){ot(r,e)||Ia(e,r)||(r.state.pasteIncoming=!0,n.fastPoll())}),tt(i,"cut",o),tt(i,"copy",o),tt(e.scroller,"paste",function(t){_n(e,t)||ot(r,t)||(r.state.pasteIncoming=!0,n.focus())}),tt(e.lineSpace,"selectstart",function(t){_n(e,t)||ct(t)}),tt(i,"compositionstart",function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}}),tt(i,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},Ua.prototype.createField=function(e){this.wrapper=Na(),this.textarea=this.wrapper.firstChild},Ua.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=dr(e);if(e.options.moveInputWithCursor){var i=Kn(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return r},Ua.prototype.showSelection=function(e){var t=this.cm,n=t.display;A(n.cursorDiv,e.cursors),A(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ua.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&z(this.textarea),a&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&s>=9&&(this.hasSelection=null))}},Ua.prototype.getField=function(){return this.textarea},Ua.prototype.supportsTouch=function(){return!1},Ua.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!v||L()!=this.textarea))try{this.textarea.focus()}catch(e){}},Ua.prototype.blur=function(){this.textarea.blur()},Ua.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ua.prototype.receivedFocus=function(){this.slowPoll()},Ua.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Ua.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function n(){var r=t.poll();r||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))})},Ua.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||wt(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(a&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||r||(r="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(r.length,i.length);l1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Ua.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ua.prototype.onKeyPress=function(){a&&s>=9&&(this.hasSelection=null),this.fastPoll()},Ua.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea,o=lr(n,e),c=r.scroller.scrollTop;if(o&&!d){var u=n.options.resetSelectionOnContextMenu;u&&-1==n.doc.sel.contains(o)&&Yr(n,Yi)(n.doc,ki(o),W);var f=i.style.cssText,p=t.wrapper.style.cssText;t.wrapper.style.cssText="position: absolute";var m,h=t.wrapper.getBoundingClientRect();if(i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(m=window.scrollY),r.input.focus(),l&&window.scrollTo(null,m),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=!0,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),a&&s>=9&&v(),_){ft(e);var g=function(){rt(window,"mouseup",g),setTimeout(y,20)};tt(window,"mouseup",g)}else setTimeout(y,50)}function v(){if(null!=i.selectionStart){var e=n.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,r.selForContextMenu=n.doc.sel}}function y(){if(t.contextMenuPending=!1,t.wrapper.style.cssText=p,i.style.cssText=f,a&&s<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=i.selectionStart){(!a||a&&s<9)&&v();var e=0,o=function(){r.selForContextMenu==n.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Yr(n,ro)(n):e++<10?r.detectingSelectAll=setTimeout(o,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(o,200)}}},Ua.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Ua.prototype.setUneditable=function(){},Ua.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,i,o){e.defaults[n]=r,i&&(t[n]=o?function(e,t,n){n!=ya&&i(e,t,n)}:i)}e.defineOption=n,e.Init=ya,n("value","",function(e,t){return e.setValue(t)},!0),n("mode",null,function(e,t){e.doc.modeOption=t,Ti(e)},!0),n("indentUnit",2,Ti,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(e){Ci(e),qn(e),Jr(e)},!0),n("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(ge(r,o))}r++});for(var i=n.length-1;i>=0;i--)uo(e.doc,t,n[i],ge(n[i].line,n[i].ch+t.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=ya&&e.refresh()}),n("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),n("electricChars",!0),n("inputStyle",v?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),n("rtlMoveVisually",!x),n("wholeLineUpdateBefore",!0),n("theme","default",function(e){va(e),ka(e)},!0),n("keyMap","default",function(e,t,n){var r=Go(t),i=n!=ya&&Go(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,_a,!0),n("gutters",[],function(e){fi(e.options),ka(e)},!0),n("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?or(e.display)+"px":"0",e.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(e){return $r(e)},!0),n("scrollbarStyle","native",function(e){jr(e),$r(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),n("lineNumbers",!1,function(e){fi(e.options),ka(e)},!0),n("firstLineNumber",1,ka,!0),n("lineNumberFormatter",function(e){return e},ka,!0),n("showCursorWhenSelecting",!1,ur,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,function(e,t){"nocursor"==t&&(br(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),n("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),n("dragDrop",!0,wa),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,ur,!0),n("singleCursorHeightPerLine",!0,ur,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Ci,!0),n("addModeClass",!1,Ci,!0),n("pollInterval",100),n("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),n("historyEventDelay",1250),n("viewportMargin",10,function(e){return e.refresh()},!0),n("maxHighlightLength",1e4,Ci,!0),n("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),n("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),n("autofocus",null),n("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),n("phrases",null)}(Sa),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&Yr(this,t[e])(this,n,i),it(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Go(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Ta(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Cr(this));else{var o=i.from(),a=i.to(),s=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var l=s;l0&&Gi(this.doc,r,new bi(o,c[r].to()),W)}}}),getTokenAt:function(e,t){return Bt(this,e,t)},getLineTokens:function(e,t){return Bt(this,ge(e),t,!0)},getTokenTypeAt:function(e){e=_e(this.doc,e);var t,n=Pt(this,le(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=r+i>>1;if((a?n[2*a-1]:0)>=o)i=a;else{if(!(n[2*a+1]o&&(e=o,i=!0),r=le(this.doc,e)}else r=e;return Hn(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-Ve(r):0)},defaultTextHeight:function(){return nr(this.display)},defaultCharWidth:function(){return rr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,a,s,l=this.display,c=(e=Kn(this,_e(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),l.sizer.appendChild(t),"over"==r)c=e.top;else if("above"==r||"near"==r){var d=Math.max(l.wrapper.clientHeight,this.doc.height),f=Math.max(l.sizer.clientWidth,l.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(c=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(u=l.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(l.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(o=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(s=Er(o,a)).scrollTop&&Or(o,s.scrollTop),null!=s.scrollLeft&&Dr(o,s.scrollLeft))},triggerOnKeyDown:Zr(aa),triggerOnKeyPress:Zr(la),triggerOnKeyUp:sa,triggerOnMouseDown:Zr(fa),execCommand:function(e){if(Xo.hasOwnProperty(e))return Xo[e].call(null,this)},triggerElectric:Zr(function(e){Oa(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=_e(this.doc,e),a=0;a0&&s(n.charAt(r-1));)--r;for(;i.5)&&sr(this),it(this,"refresh",this)}),swapDoc:Zr(function(e){var t=this.doc;return t.cm=null,Oi(this,e),qn(this),this.display.input.reset(),Ar(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,cn(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},lt(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,o){e.registerHelper(t,r,o),n[t]._global.push({pred:i,val:o})}}(Sa);var Wa="iter insert remove copy getEditor constructor".split(" ");for(var Ba in Co.prototype)Co.prototype.hasOwnProperty(Ba)&&j(Wa,Ba)<0&&(Sa.prototype[Ba]=function(e){return function(){return e.apply(this.doc,arguments)}}(Co.prototype[Ba]));return lt(Co),Sa.inputStyles={textarea:Ua,contenteditable:$a},Sa.defineMode=function(e){Sa.defaults.mode||"null"==e||(Sa.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Et[e]=t}.apply(this,arguments)},Sa.defineMIME=function(e,t){Tt[e]=t},Sa.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Sa.defineMIME("text/plain","null"),Sa.defineExtension=function(e,t){Sa.prototype[e]=t},Sa.defineDocExtension=function(e,t){Co.prototype[e]=t},Sa.fromTextArea=function(e,t){if((t=t?$(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=L();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=s.getValue()}var i;if(e.form&&(tt(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var a=o.submit=function(){r(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(t){t.save=r,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,r(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(rt(e.form,"submit",r),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=Sa(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=rt,e.on=tt,e.wheelEventPixels=gi,e.Doc=Co,e.splitLines=kt,e.countColumn=P,e.findColumn=G,e.isWordChar=ee,e.Pass=U,e.signal=it,e.Line=Vt,e.changeEnd=wi,e.scrollbarModel=Fr,e.Pos=ge,e.cmpPos=ve,e.modes=Et,e.mimeModes=Tt,e.resolveMode=Ct,e.getMode=At,e.modeExtensions=Mt,e.extendMode=It,e.copyState=Ot,e.startState=Dt,e.innerMode=Lt,e.commands=Xo,e.keyMap=Fo,e.keyName=Ho,e.isModifierKey=Wo,e.lookupKey=Uo,e.normalizeKeyMap=qo,e.StringStream=Nt,e.SharedTextMarker=_o,e.TextMarker=ko,e.LineWidget=yo,e.e_preventDefault=ct,e.e_stopPropagation=ut,e.e_stop=ft,e.addClass=D,e.contains=O,e.rmClass=T,e.keyNames=zo}(Sa),Sa.version="5.42.0",Sa}()},,function(e,t,n){(function(t,n){ +/*! + * Vue.js v2.5.17 + * (c) 2014-2018 Evan You + * Released under the MIT License. + */var r;r=function(){"use strict";var e=Object.freeze({});function r(e){return null==e}function i(e){return null!=e}function o(e){return!0===e}function a(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function s(e){return null!==e&&"object"==typeof e}var l=Object.prototype.toString;function c(e){return l.call(e).slice(8,-1)}function u(e){return"[object Object]"===l.call(e)}function d(e){return"[object RegExp]"===l.call(e)}function f(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function p(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function m(e){var t=parseFloat(e);return isNaN(t)?e:t}function h(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function x(e,t){return b.call(e,t)}function k(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var w=/-(\w)/g,_=k(function(e){return e.replace(w,function(e,t){return t?t.toUpperCase():""})}),S=k(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),E=/\B([A-Z])/g,T=k(function(e){return e.replace(E,"-$1").toLowerCase()}),C=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function A(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function M(e,t){for(var n in t)e[n]=t[n];return e}function I(e){for(var t={},n=0;n0,J=Y&&Y.indexOf("edge/")>0,Q=(Y&&Y.indexOf("android"),Y&&/iphone|ipad|ipod|ios/.test(Y)||"ios"===K),ee=Y&&/chrome\/\d+/.test(Y)&&!J,te={}.watch,ne=!1;if(G)try{var re={};Object.defineProperty(re,"passive",{get:function(){ne=!0}}),window.addEventListener("test-passive",null,re)}catch(e){}var ie=function(){return void 0===W&&(W=!G&&!V&&void 0!==t&&"server"===t.process.env.VUE_ENV),W},oe=G&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ae(e){return"function"==typeof e&&/native code/.test(e.toString())}var se,le="undefined"!=typeof Symbol&&ae(Symbol)&&"undefined"!=typeof Reflect&&ae(Reflect.ownKeys);se="undefined"!=typeof Set&&ae(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ce=O,ue=O,de=O,fe=O,pe="undefined"!=typeof console,me=/(?:^|[-_])(\w)/g;ce=function(e,t){var n=t?de(t):"";j.warnHandler?j.warnHandler.call(null,e,t,n):pe&&!j.silent&&console.error("[Vue warn]: "+e+n)},ue=function(e,t){pe&&!j.silent&&console.warn("[Vue tip]: "+e+(t?de(t):""))},fe=function(e,t){if(e.$root===e)return"";var n="function"==typeof e&&null!=e.cid?e.options:e._isVue?e.$options||e.constructor.options:e||{},r=n.name||n._componentTag,i=n.__file;if(!r&&i){var o=i.match(/([^\/\\]+)\.vue$/);r=o&&o[1]}return(r?"<"+r.replace(me,function(e){return e.toUpperCase()}).replace(/[-_]/g,"")+">":"")+(i&&!1!==t?" at "+i:"")},de=function(e){if(e._isVue&&e.$parent){for(var t=[],n=0;e;){if(t.length>0){var r=t[t.length-1];if(r.constructor===e.constructor){n++,e=e.$parent;continue}n>0&&(t[t.length-1]=[r,n],n=0)}t.push(e),e=e.$parent}return"\n\nfound in\n\n"+t.map(function(e,t){return""+(0===t?"---\x3e ":function(e,t){for(var n="";t;)t%2==1&&(n+=e),t>1&&(e+=e),t>>=1;return n}(" ",5+2*t))+(Array.isArray(e)?fe(e[0])+"... ("+e[1]+" recursive calls)":fe(e))}).join("\n")}return"\n\n(found in "+fe(e)+")"};var he=0,ge=function(){this.id=he++,this.subs=[]};ge.prototype.addSub=function(e){this.subs.push(e)},ge.prototype.removeSub=function(e){y(this.subs,e)},ge.prototype.depend=function(){ge.target&&ge.target.addDep(this)},ge.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!x(i,"default"))a=!1;else if(""===a||a===T(e)){var u=Je(String,i.type);(u<0||l0&&(Ot((c=e(c,(n||"")+"_"+l))[0])&&Ot(d)&&(s[u]=_e(d.text+c[0].text),c.shift()),s.push.apply(s,c)):a(c)?Ot(d)?s[u]=_e(d.text+c):""!==c&&s.push(_e(c)):Ot(c)&&Ot(d)?s[u]=_e(d.text+c.text):(o(t._isVList)&&i(c.tag)&&r(c.key)&&i(n)&&(c.key="__vlist"+n+"_"+l+"__"),s.push(c)));return s}(e):void 0}function Ot(e){return i(e)&&i(e.text)&&!1===e.isComment}function Lt(e,t){return(e.__esModule||le&&"Module"===e[Symbol.toStringTag])&&(e=e.default),s(e)?t.extend(e):e}function Dt(e){return e.isComment&&e.asyncFactory}function Nt(e){if(Array.isArray(e))for(var t=0;tGt)){ce("You may have an infinite update loop "+(e.user?'in watcher with expression "'+e.expression+'"':"in a component render function."),e.vm);break}var n=Kt.slice(),r=Vt.slice();Qt=Vt.length=Kt.length=0,Yt={},Zt={},Xt=Jt=!1,function(e){for(var t=0;tQt&&Vt[n].id>e.id;)n--;Vt.splice(n+1,0,e)}else Vt.push(e);Xt||(Xt=!0,pt(en))}}(this)},nn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||s(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Qe(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},nn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},nn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},nn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||y(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var rn={enumerable:!0,configurable:!0,get:O,set:O};function on(e,t,n){rn.get=function(){return this[t][n]},rn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,rn)}function an(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&Me(!1);var o=function(o){i.push(o);var a=Ve(o,t,n,e),s=T(o);(v(s)||j.isReservedAttr(s))&&ce('"'+s+'" is a reserved attribute and cannot be used as component prop.',e),Ne(r,o,a,function(){e.$parent&&!Ut&&ce("Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: \""+o+'"',e)}),o in e||on(e,"_props",o)};for(var a in t)o(a);Me(!0)}(e,t.props),t.methods&&function(e,t){var n=e.$options.props;for(var r in t)null==t[r]&&ce('Method "'+r+'" has an undefined value in the component definition. Did you reference the function correctly?',e),n&&x(n,r)&&ce('Method "'+r+'" has already been defined as a prop.',e),r in e&&q(r)&&ce('Method "'+r+'" conflicts with an existing Vue instance method. Avoid defining component methods that start with _ or $.'),e[r]=null==t[r]?O:C(t[r],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;u(t=e._data="function"==typeof t?function(e,t){ye();try{return e.call(t,t)}catch(e){return Qe(e,t,"data()"),{}}finally{be()}}(t,e):t||{})||(t={},ce("data functions should return an object:\nhttps://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function",e));var n=Object.keys(t),r=e.$options.props,i=e.$options.methods,o=n.length;for(;o--;){var a=n[o];i&&x(i,a)&&ce('Method "'+a+'" has already been defined as a data property.',e),r&&x(r,a)?ce('The data property "'+a+'" is already declared as a prop. Use prop default value instead.',e):q(a)||on(e,"_data",a)}De(t,!0)}(e):De(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=ie();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;null==a&&ce('Getter is missing for computed property "'+i+'".',e),r||(n[i]=new nn(e,a||O,O,sn)),i in e?i in e.$data?ce('The computed property "'+i+'" is already defined in data.',e):e.$options.props&&i in e.$options.props&&ce('The computed property "'+i+'" is already defined as a prop.',e):ln(e,i,o)}}(e,t.computed),t.watch&&t.watch!==te&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i=0||n.indexOf(e[i])<0)&&r.push(e[i]);return r}return e}function Rn(e){this instanceof Rn||ce("Vue is a constructor and should be called with the `new` keyword"),this._init(e)}function $n(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,i=e._Ctor||(e._Ctor={});if(i[r])return i[r];var o=e.name||n.options.name;o&&We(o);var a=function(e){this._init(e)};return(a.prototype=Object.create(n.prototype)).constructor=a,a.cid=t++,a.options=He(n.options,e),a.super=n,a.options.props&&function(e){var t=e.options.props;for(var n in t)on(e.prototype,"_props",n)}(a),a.options.computed&&function(e){var t=e.options.computed;for(var n in t)ln(e.prototype,n,t[n])}(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,P.forEach(function(e){a[e]=n[e]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=M({},a.options),i[r]=a,a}}function Pn(e){return e&&(e.Ctor.options.name||e.tag)}function Fn(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"==typeof e?e.split(",").indexOf(t)>-1:!!d(e)&&e.test(t)}function jn(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=Pn(a.componentOptions);s&&!t(s)&&qn(n,o,r,i)}}}function qn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,y(n,t)}!function(t){t.prototype._init=function(t){var n,r,i=this;i._uid=Dn++,j.performance&&st&&(n="vue-perf-start:"+i._uid,r="vue-perf-end:"+i._uid,st(n)),i._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r,n._parentElm=t._parentElm,n._refElm=t._refElm;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(i,t):i.$options=He(Nn(i.constructor),t||{},i),mt(i),i._self=i,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(i),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&$t(e,t)}(i),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=Pt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Ln(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ln(t,e,n,r,i,!0)};var o=r&&r.data;Ne(t,"$attrs",o&&o.attrs||e,function(){!Ut&&ce("$attrs is readonly.",t)},!0),Ne(t,"$listeners",n._parentListeners||e,function(){!Ut&&ce("$listeners is readonly.",t)},!0)}(i),Ht(i,"beforeCreate"),function(e){var t=dn(e.$options.inject,e);t&&(Me(!1),Object.keys(t).forEach(function(n){Ne(e,n,t[n],function(){ce('Avoid mutating an injected value directly since the changes will be overwritten whenever the provided component re-renders. injection being mutated: "'+n+'"',e)})}),Me(!0))}(i),an(i),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(i),Ht(i,"created"),j.performance&&st&&(i._name=fe(i,!1),st(r),lt("vue "+i._name+" init",n,r)),i.$options.el&&i.$mount(i.$options.el)}}(Rn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};t.set=function(e){ce("Avoid replacing instance root $data. Use nested data properties instead.",this)},n.set=function(){ce("$props is readonly.",this)},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ze,e.prototype.$delete=Re,e.prototype.$watch=function(e,t,n){if(u(t))return un(this,e,t,n);(n=n||{}).user=!0;var r=new nn(this,e,t,n);return n.immediate&&t.call(this,r.value),function(){r.teardown()}}}(Rn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){if(Array.isArray(e))for(var r=0,i=e.length;r1?A(r):r;for(var i=A(arguments,1),o=0,a=r.length;oparseInt(this.max)&&qn(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return j},set:function(){ce("Do not replace the Vue.config object, set individual fields instead.")}};Object.defineProperty(e,"config",t),e.util={warn:ce,extend:M,mergeOptions:He,defineReactive:Ne},e.set=ze,e.delete=Re,e.nextTick=pt,e.options=Object.create(null),P.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,M(e.options.components,Wn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=A(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=He(this.options,e),this}}(e),$n(e),function(e){P.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&We(e),"component"===t&&u(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(Rn),Object.defineProperty(Rn.prototype,"$isServer",{get:ie}),Object.defineProperty(Rn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Rn,"FunctionalRenderContext",{value:Sn}),Rn.version="2.5.17";var Bn=h("style,class"),Hn=h("input,textarea,option,select,progress"),Gn=function(e,t,n){return"value"===n&&Hn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Vn=h("contenteditable,draggable,spellcheck"),Kn=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Yn="http://www.w3.org/1999/xlink",Zn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Xn=function(e){return Zn(e)?e.slice(6,e.length):""},Jn=function(e){return null==e||!1===e};function Qn(e){for(var t=e.data,n=e,r=e;i(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(t=er(r.data,t));for(;i(n=n.parent);)n&&n.data&&(t=er(t,n.data));return function(e,t){if(i(e)||i(t))return tr(e,nr(t));return""}(t.staticClass,t.class)}function er(e,t){return{staticClass:tr(e.staticClass,t.staticClass),class:i(e.class)?[e.class,t.class]:t.class}}function tr(e,t){return e?t?e+" "+t:e:t||""}function nr(e){return Array.isArray(e)?function(e){for(var t,n="",r=0,o=e.length;r-1?Cr(e,t,n):Kn(t)?Jn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Vn(t)?e.setAttribute(t,Jn(n)||"false"===n?"false":"true"):Zn(t)?Jn(n)?e.removeAttributeNS(Yn,Xn(t)):e.setAttributeNS(Yn,t,n):Cr(e,t,n)}function Cr(e,t,n){if(Jn(n))e.removeAttribute(t);else{if(Z&&!X&&"TEXTAREA"===e.tagName&&"placeholder"===t&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var Ar={create:Er,update:Er};function Mr(e,t){var n=t.elm,o=t.data,a=e.data;if(!(r(o.staticClass)&&r(o.class)&&(r(a)||r(a.staticClass)&&r(a.class)))){var s=Qn(t),l=n._transitionClasses;i(l)&&(s=tr(s,nr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Ir,Or,Lr,Dr,Nr,zr,Rr,$r={create:Mr,update:Mr},Pr=/[\w).+\-_$\]]/;function Fr(e){var t,n,r,i,o,a=!1,s=!1,l=!1,c=!1,u=0,d=0,f=0,p=0;for(r=0;r=0&&" "===(h=e.charAt(m));m--);h&&Pr.test(h)||(c=!0)}}else void 0===i?(p=r+1,i=e.slice(0,r).trim()):g();function g(){(o||(o=[])).push(e.slice(p,r).trim()),p=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==p&&g(),o)for(r=0;r-1?{exp:e.slice(0,Dr),key:'"'+e.slice(Dr+1)+'"'}:{exp:e,key:null};Or=e,Dr=Nr=zr=0;for(;!Qr();)ei(Lr=Jr())?ni(Lr):91===Lr&&ti(Lr);return{exp:e.slice(0,Nr),key:e.slice(Nr+1,zr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Jr(){return Or.charCodeAt(++Dr)}function Qr(){return Dr>=Ir}function ei(e){return 34===e||39===e}function ti(e){var t=1;for(Nr=Dr;!Qr();)if(ei(e=Jr()))ni(e);else if(91===e&&t++,93===e&&t--,0===t){zr=Dr;break}}function ni(e){for(var t=e;!Qr()&&(e=Jr())!==t;);}var ri,ii="__r",oi="__c";function ai(e,t,n,r,i){var o;t=(o=t)._withTask||(o._withTask=function(){ct=!0;var e=o.apply(null,arguments);return ct=!1,e}),n&&(t=function(e,t,n){var r=ri;return function i(){null!==e.apply(null,arguments)&&si(t,i,n,r)}}(t,e,r)),ri.addEventListener(e,t,ne?{capture:r,passive:i}:r)}function si(e,t,n,r){(r||ri).removeEventListener(e,t._withTask||t,n)}function li(e,t){if(!r(e.data.on)||!r(t.data.on)){var n=t.data.on||{},o=e.data.on||{};ri=t.elm,function(e){if(i(e[ii])){var t=Z?"change":"input";e[t]=[].concat(e[ii],e[t]||[]),delete e[ii]}i(e[oi])&&(e.change=[].concat(e[oi],e.change||[]),delete e[oi])}(n),Ct(n,o,ai,si,t.context),ri=void 0}}var ci={create:li,update:li};function ui(e,t){if(!r(e.data.domProps)||!r(t.data.domProps)){var n,o,a=t.elm,s=e.data.domProps||{},l=t.data.domProps||{};for(n in i(l.__ob__)&&(l=t.data.domProps=M({},l)),s)r(l[n])&&(a[n]="");for(n in l){if(o=l[n],"textContent"===n||"innerHTML"===n){if(t.children&&(t.children.length=0),o===s[n])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===n){a._value=o;var c=r(o)?"":String(o);di(a,c)&&(a.value=c)}else a[n]=o}}}function di(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var n=e.value,r=e._vModifiers;if(i(r)){if(r.lazy)return!1;if(r.number)return m(n)!==m(t);if(r.trim)return n.trim()!==t.trim()}return n!==t}(e,t))}var fi={create:ui,update:ui},pi=k(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function mi(e){var t=hi(e.style);return e.staticStyle?M(e.staticStyle,t):t}function hi(e){return Array.isArray(e)?I(e):"string"==typeof e?pi(e):e}var gi,vi=/^--/,yi=/\s*!important$/,bi=function(e,t,n){if(vi.test(t))e.style.setProperty(t,n);else if(yi.test(n))e.style.setProperty(t,n.replace(yi,""),"important");else{var r=ki(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Ei(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function Ti(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&M(t,Ci(e.name||"v")),M(t,e),t}return"string"==typeof e?Ci(e):void 0}}var Ci=k(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),Ai=G&&!X,Mi="transition",Ii="animation",Oi="transition",Li="transitionend",Di="animation",Ni="animationend";Ai&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Oi="WebkitTransition",Li="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Di="WebkitAnimation",Ni="webkitAnimationEnd"));var zi=G?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ri(e){zi(function(){zi(e)})}function $i(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Si(e,t))}function Pi(e,t){e._transitionClasses&&y(e._transitionClasses,t),Ei(e,t)}function Fi(e,t,n){var r=qi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Mi?Li:Ni,l=0,c=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++l>=a&&c()};setTimeout(function(){l0&&(n=Mi,u=a,d=o.length):t===Ii?c>0&&(n=Ii,u=c,d=l.length):d=(n=(u=Math.max(a,c))>0?a>c?Mi:Ii:null)?n===Mi?o.length:l.length:0,{type:n,timeout:u,propCount:d,hasTransform:n===Mi&&ji.test(r[Oi+"Property"])}}function Ui(e,t){for(;e.length explicit "+t+" duration is not a valid number - got "+JSON.stringify(e)+".",n.context):isNaN(e)&&ce(" explicit "+t+" duration is NaN - the duration expression might be incorrect.",n.context)}function Vi(e){return"number"==typeof e&&!isNaN(e)}function Ki(e){if(r(e))return!1;var t=e.fns;return i(t)?Ki(Array.isArray(t)?t[0]:t):(e._length||e.length)>1}function Yi(e,t){!0!==t.data.show&&Bi(t)}var Zi=function(e){var t,n,s={},l=e.modules,c=e.nodeOps;for(t=0;t - did you register the component correctly? For recursive components, make sure to provide the "name" option.',e.context),e.elm=e.ns?c.createElementNS(e.ns,h):c.createElement(h,e),k(e),y(e,m,t),i(d)&&x(e,t),v(n,e.elm,r),d&&d.pre&&p--):o(e.isComment)?(e.elm=c.createComment(e.text),v(n,e.elm,r)):(e.elm=c.createTextNode(e.text),v(n,e.elm,r))}}function g(e,t){i(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,b(e)?(x(e,t),k(e)):(pr(e),t.push(e))}function v(e,t,n){i(e)&&(i(n)?n.parentNode===e&&c.insertBefore(e,t,n):c.appendChild(e,t))}function y(e,t,n){if(Array.isArray(t)){T(t);for(var r=0;rp?w(e,r(n[v+1])?null:n[v+1].elm,n,f,v,o):f>v&&S(0,t,d,p)}(l,f,p,n,a):i(p)?(i(e.text)&&c.setTextContent(l,""),w(l,null,p,0,p.length-1,n)):i(f)?S(0,f,0,f.length-1):i(e.text)&&c.setTextContent(l,""):e.text!==t.text&&c.setTextContent(l,t.text),i(d)&&i(u=d.hook)&&i(u=u.postpatch)&&u(e,t)}}}function M(e,t,n){if(o(n)&&i(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r, or missing . Bailing hydration and performing full client-side render.")}d=e,e=new xe(c.tagName(d).toLowerCase(),{},[],void 0,d)}var g=e.elm,v=c.parentNode(g);if(m(t,p,g._leaveCb?null:v,c.nextSibling(g)),i(t.parent))for(var y=t.parent,x=b(t);y;){for(var k=0;k-1,a.selected!==o&&(a.selected=o);else if(N(to(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}else ce('