Browse Source

common and modules

thing_master
xiachao 1 year ago
parent
commit
4eaafd8dcb
  1. 67
      common/cache/pom.xml
  2. 26
      common/cache/src/main/java/com/thing/common/cache/config/CacheManagerProperties.java
  3. 49
      common/cache/src/main/java/com/thing/common/cache/config/LocalCacheConfig.java
  4. 97
      common/cache/src/main/java/com/thing/common/cache/config/RedisConfig.java
  5. 160
      common/cache/src/main/java/com/thing/common/cache/constants/CacheNameEnum.java
  6. 26
      common/cache/src/main/java/com/thing/common/cache/redis/LettuceConnectionValidConfig.java
  7. 26
      common/cache/src/main/java/com/thing/common/cache/redis/LettuceConnectionValidTask.java
  8. 65
      common/cache/src/main/java/com/thing/common/cache/redis/RedisKeys.java
  9. 123
      common/cache/src/main/java/com/thing/common/cache/redis/RedisUtils.java
  10. 38
      common/cache/src/main/java/com/thing/common/cache/redis/SysParamsRedis.java
  11. 39
      common/cache/src/main/java/com/thing/common/cache/redis/aspect/RedisAspect.java
  12. 17
      common/cache/src/main/java/com/thing/common/cache/service/AbstractCacheService.java
  13. 40
      common/cache/src/main/java/com/thing/common/cache/service/CacheInitializer.java
  14. 129
      common/core/pom.xml
  15. 75
      common/core/src/main/java/com/thing/common/core/annotation/CustomExcel.java
  16. 17
      common/core/src/main/java/com/thing/common/core/annotation/CustomExcelCollection.java
  17. 21
      common/core/src/main/java/com/thing/common/core/annotation/LogOperation.java
  18. 41
      common/core/src/main/java/com/thing/common/core/config/AsyncEventConfig.java
  19. 20
      common/core/src/main/java/com/thing/common/core/config/RestTemplateConfig.java
  20. 429
      common/core/src/main/java/com/thing/common/core/constants/Constant.java
  21. 39
      common/core/src/main/java/com/thing/common/core/container/GlobalContainer.java
  22. 73
      common/core/src/main/java/com/thing/common/core/convert/DateConverter.java
  23. 30
      common/core/src/main/java/com/thing/common/core/enumeration/ActionType.java
  24. 36
      common/core/src/main/java/com/thing/common/core/enumeration/AggType.java
  25. 26
      common/core/src/main/java/com/thing/common/core/enumeration/AlarmSettingType.java
  26. 26
      common/core/src/main/java/com/thing/common/core/enumeration/AlarmStatus.java
  27. 35
      common/core/src/main/java/com/thing/common/core/enumeration/AlarmType.java
  28. 61
      common/core/src/main/java/com/thing/common/core/enumeration/ApiFuncEnum.java
  29. 26
      common/core/src/main/java/com/thing/common/core/enumeration/ApiSeparateAttr.java
  30. 46
      common/core/src/main/java/com/thing/common/core/enumeration/ApiType.java
  31. 61
      common/core/src/main/java/com/thing/common/core/enumeration/ApiTypeEnum.java
  32. 22
      common/core/src/main/java/com/thing/common/core/enumeration/ApiTypes.java
  33. 99
      common/core/src/main/java/com/thing/common/core/enumeration/AttributeEnum.java
  34. 225
      common/core/src/main/java/com/thing/common/core/enumeration/AttributeTypeEnum.java
  35. 16
      common/core/src/main/java/com/thing/common/core/enumeration/CacheEventType.java
  36. 35
      common/core/src/main/java/com/thing/common/core/enumeration/CalculationStatusEnum.java
  37. 22
      common/core/src/main/java/com/thing/common/core/enumeration/CalculationSymbol.java
  38. 35
      common/core/src/main/java/com/thing/common/core/enumeration/CarbonLifecycleEnum.java
  39. 49
      common/core/src/main/java/com/thing/common/core/enumeration/CloudService.java
  40. 22
      common/core/src/main/java/com/thing/common/core/enumeration/ColumnRelationType.java
  41. 22
      common/core/src/main/java/com/thing/common/core/enumeration/CompanyType.java
  42. 68
      common/core/src/main/java/com/thing/common/core/enumeration/ConfigTypeEnum.java
  43. 22
      common/core/src/main/java/com/thing/common/core/enumeration/ContainsCondition.java
  44. 28
      common/core/src/main/java/com/thing/common/core/enumeration/DataBaseType.java
  45. 22
      common/core/src/main/java/com/thing/common/core/enumeration/DataTreatingMarkEnum.java
  46. 55
      common/core/src/main/java/com/thing/common/core/enumeration/DatasetAttrTimestampType.java
  47. 31
      common/core/src/main/java/com/thing/common/core/enumeration/DatasetInterValType.java
  48. 22
      common/core/src/main/java/com/thing/common/core/enumeration/DatasetSeparateAttr.java
  49. 24
      common/core/src/main/java/com/thing/common/core/enumeration/DatasetStatus.java
  50. 22
      common/core/src/main/java/com/thing/common/core/enumeration/DatasetThingRelationStatus.java
  51. 39
      common/core/src/main/java/com/thing/common/core/enumeration/DefaultType.java
  52. 27
      common/core/src/main/java/com/thing/common/core/enumeration/DeleteEnum.java
  53. 22
      common/core/src/main/java/com/thing/common/core/enumeration/DeviceSendCmdStatus.java
  54. 22
      common/core/src/main/java/com/thing/common/core/enumeration/DeviceTemplateMark.java
  55. 26
      common/core/src/main/java/com/thing/common/core/enumeration/DictRelationEnum.java
  56. 60
      common/core/src/main/java/com/thing/common/core/enumeration/DictTypeEnum.java
  57. 23
      common/core/src/main/java/com/thing/common/core/enumeration/EnergyVarietyEnum.java
  58. 41
      common/core/src/main/java/com/thing/common/core/enumeration/ExtendRelationType.java
  59. 31
      common/core/src/main/java/com/thing/common/core/enumeration/FormulaSymbols.java
  60. 29
      common/core/src/main/java/com/thing/common/core/enumeration/GateWayStatus.java
  61. 50
      common/core/src/main/java/com/thing/common/core/enumeration/Granularity.java
  62. 70
      common/core/src/main/java/com/thing/common/core/enumeration/GroupTypeEnum.java
  63. 22
      common/core/src/main/java/com/thing/common/core/enumeration/IntervalPushStatus.java
  64. 21
      common/core/src/main/java/com/thing/common/core/enumeration/IsDefaultEnum.java
  65. 28
      common/core/src/main/java/com/thing/common/core/enumeration/MenuTypeEnum.java
  66. 64
      common/core/src/main/java/com/thing/common/core/enumeration/MimeTypeEnum.java
  67. 353
      common/core/src/main/java/com/thing/common/core/enumeration/MinioFileContentTypeEnum.java
  68. 38
      common/core/src/main/java/com/thing/common/core/enumeration/MonitorPolymerizationType.java
  69. 30
      common/core/src/main/java/com/thing/common/core/enumeration/MonitorTimeType.java
  70. 34
      common/core/src/main/java/com/thing/common/core/enumeration/MsgType.java
  71. 26
      common/core/src/main/java/com/thing/common/core/enumeration/OrderStatus.java
  72. 25
      common/core/src/main/java/com/thing/common/core/enumeration/PeakValleyEnum.java
  73. 22
      common/core/src/main/java/com/thing/common/core/enumeration/PermissionStatus.java
  74. 31
      common/core/src/main/java/com/thing/common/core/enumeration/Protocol.java
  75. 25
      common/core/src/main/java/com/thing/common/core/enumeration/ProtocolPrefix.java
  76. 22
      common/core/src/main/java/com/thing/common/core/enumeration/PushReceiveStatus.java
  77. 22
      common/core/src/main/java/com/thing/common/core/enumeration/PushStatus.java
  78. 12
      common/core/src/main/java/com/thing/common/core/enumeration/QueryChannel.java
  79. 24
      common/core/src/main/java/com/thing/common/core/enumeration/QueueEventType.java
  80. 35
      common/core/src/main/java/com/thing/common/core/enumeration/QueueOriginType.java
  81. 23
      common/core/src/main/java/com/thing/common/core/enumeration/RegionLeafEnum.java
  82. 22
      common/core/src/main/java/com/thing/common/core/enumeration/RegionLevelEnum.java
  83. 22
      common/core/src/main/java/com/thing/common/core/enumeration/RepeatPushStatus.java
  84. 40
      common/core/src/main/java/com/thing/common/core/enumeration/ReportTypeEnum.java
  85. 26
      common/core/src/main/java/com/thing/common/core/enumeration/RoleType.java
  86. 12
      common/core/src/main/java/com/thing/common/core/enumeration/RsaKeyType.java
  87. 22
      common/core/src/main/java/com/thing/common/core/enumeration/ScheduleStatus.java
  88. 22
      common/core/src/main/java/com/thing/common/core/enumeration/ShowStatus.java
  89. 98
      common/core/src/main/java/com/thing/common/core/enumeration/SignEnum.java
  90. 15
      common/core/src/main/java/com/thing/common/core/enumeration/SignTypeEnum.java
  91. 29
      common/core/src/main/java/com/thing/common/core/enumeration/SmsService.java
  92. 12
      common/core/src/main/java/com/thing/common/core/enumeration/SocketEventType.java
  93. 17
      common/core/src/main/java/com/thing/common/core/enumeration/SourceStatus.java
  94. 20
      common/core/src/main/java/com/thing/common/core/enumeration/SubscribeStatusEnum.java
  95. 27
      common/core/src/main/java/com/thing/common/core/enumeration/SuperAdminEnum.java
  96. 22
      common/core/src/main/java/com/thing/common/core/enumeration/SuperTenantEnum.java
  97. 22
      common/core/src/main/java/com/thing/common/core/enumeration/SyncUpdateEnum.java
  98. 22
      common/core/src/main/java/com/thing/common/core/enumeration/SysTenantEnum.java
  99. 26
      common/core/src/main/java/com/thing/common/core/enumeration/TaskTime.java
  100. 34
      common/core/src/main/java/com/thing/common/core/enumeration/TaskTimeType.java

67
common/cache/pom.xml

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.thing</groupId>
<artifactId>common</artifactId>
<version>5.1</version>
</parent>
<groupId>com.thing.common</groupId>
<artifactId>cache</artifactId>
<packaging>jar</packaging>
<name>ThingBI Server Common Cache</name>
<properties>
<main.dir>${basedir}/..</main.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

26
common/cache/src/main/java/com/thing/common/cache/config/CacheManagerProperties.java

@ -0,0 +1,26 @@
package com.thing.common.cache.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author siyang
* @date 2024-03-29
* @description
*/
@Data
@Component
@ConfigurationProperties(prefix = "cache-manager")
public class CacheManagerProperties {
private Map<String, CacheSpecs> specs;
@Data
public static class CacheSpecs {
private Integer timeToLiveInMinutes;
private Integer maxSize;
}
}

49
common/cache/src/main/java/com/thing/common/cache/config/LocalCacheConfig.java

@ -0,0 +1,49 @@
package com.thing.common.cache.config;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.thing.common.cache.config.CacheManagerProperties.CacheSpecs;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author zhenghh. 2021-11-01
*/
@Data
@Slf4j
@EnableCaching
@Configuration
@RequiredArgsConstructor
@ConditionalOnProperty(name = "spring.cache.type", havingValue = "caffeine", matchIfMissing = true)
public class LocalCacheConfig {
private final CacheManagerProperties cacheManagerProperties;
/** 初始化缓存管理器 */
@Bean
public CacheManager cacheManager() {
log.info("【caffeine】===初始化本地缓存管理器");
Map<String, CacheSpecs> specs = cacheManagerProperties.getSpecs();
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
for (String name : specs.keySet()) {
Caffeine<Object, Object> cacheBuilder =
Caffeine.newBuilder()
.maximumSize(specs.get(name).getMaxSize())
.expireAfterWrite(
specs.get(name).getTimeToLiveInMinutes(), TimeUnit.MINUTES)
.recordStats();
cacheManager.registerCustomCache(name, cacheBuilder.build());
}
return cacheManager;
}
}

97
common/cache/src/main/java/com/thing/common/cache/config/RedisConfig.java

@ -0,0 +1,97 @@
package com.thing.common.cache.config;
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import com.thing.common.cache.config.CacheManagerProperties.CacheSpecs;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.*;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
/**
* Redis配置
*
* @author Mark sunlightcs@gmail.com
*/
@Data
@Slf4j
@EnableCaching
@Configuration
@RequiredArgsConstructor
@ConditionalOnProperty(name = "spring.cache.type", havingValue = "redis", matchIfMissing = true)
public class RedisConfig {
@Resource private RedisConnectionFactory factory;
@Resource private CacheManagerProperties cacheManagerProperties;
/**
* 为了方便缓存caffeine和redis的切换不建议显示使用redisTemplate
* 需要用缓存的地方统一使用SpringCache注解譬如@Cacheable
*/
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
// 设置序列化方式
StringRedisSerializer keySerializer = new StringRedisSerializer();
RedisSerializer<Object> valSerializer = new GenericFastJsonRedisSerializer();
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setValueSerializer(valSerializer);
redisTemplate.setHashKeySerializer(keySerializer);
redisTemplate.setHashValueSerializer(valSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 采用spring的cache注解时会使用此处定义的cacheManager
* 如果在管理器中没有配置某个缓存则会无限期存储且不会使用json序列化
*/
@Bean
public CacheManager cacheManager() {
log.info("【redis】===初始化redis缓存管理器");
Map<String, CacheSpecs> specs = cacheManagerProperties.getSpecs();
RedisSerializer<Object> valSerializer = new GenericFastJsonRedisSerializer();
RedisCacheConfiguration defaultCacheConfig =
RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(
RedisSerializationContext.SerializationPair.fromSerializer(
new StringRedisSerializer()))
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(
valSerializer));
// 创建各个缓存的配置每个缓存可以有不同的过期时间
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
specs.forEach(
(cacheName, spec) ->
cacheConfigurations.put(
cacheName,
defaultCacheConfig.entryTtl(
Duration.ofMinutes(spec.getTimeToLiveInMinutes()))));
return RedisCacheManager.builder(factory)
.withInitialCacheConfigurations(cacheConfigurations)
.build();
}
}

160
common/cache/src/main/java/com/thing/common/cache/constants/CacheNameEnum.java

@ -0,0 +1,160 @@
package com.thing.common.cache.constants;
import lombok.Getter;
/**
* @author mark. 2021-11-01
*/
public class CacheNameEnum {
/** 物模型 */
@Getter
public enum ModelField {
THING_MODEL_ID("id"),
THING_MODEL_CODE("code"),
THING_MODEL_TOKEN("token"),
THING_MODEL_GATEWAY("gateway"),
THING_MODEL_ORIGIN("origin"),
THING_MODEL_REAL_TYPE("realType"),
THING_MODEL_CREATE_DATE("create_date"),
THING_MODEL_STATUS("status"),
THING_MODEL_STATUS_TS("statusTs");
private final String field;
ModelField(String field) {
this.field = field;
}
}
/** 物实体 */
@Getter
public enum EntityField {
THING_ENTITY_ID("entityId"),
THING_ENTITY_CODE("entityCode"),
THING_ENTITY_NAME("entityName"),
THING_ENTITY_TENANT_CODE("tenantCode"),
THING_ENTITY_TYPE("entityType"),
THING_ENTITY_DEPT_IDS("deptIds"),
THING_ENTITY_STATUS("status"),
THING_ENTITY_DEPT_NAME("deptName"),
THING_ENTITY_REAL_TYPE("realType"),
THING_ENTITY_TAGS("tags"),
THING_ENTITY_CREATE_DATE("create_date"),
THING_ENTITY_ENABLE_STATUS("enableStatus"),
THING_ENTITY_TEMPLATE_MARK("templateMark");
private final String field;
EntityField(String field) {
this.field = field;
}
}
@Getter
public enum DictField {
THING_DICT_ID("id"),
THING_DICT_ENTITY_NAME("entityName"),
THING_DICT_ENTITY_CODE("entityCode"),
THING_DICT_GROUP_NAME("groupName"),
THING_DICT_DATA_TYPE("dataType"),
THING_DICT_TEMPLATE_MARK("templateMark"),
THING_DICT_TENANT_CODE("tenantCode"),
THING_DICT_NAME("name"),
THING_DICT_CODE("code"),
THING_DICT_CREATE_DATE("create_date"),
THING_DICT_ENTITY_ID("entityId"),
THING_DICT_RELATION_SORT("sort");
private final String field;
DictField(String field) {
this.field = field;
}
}
@Getter
public enum RelationRootField {
THING_RELATION_ROOT_ID("id"),
THING_RELATION_ROOT_CHILDREN("children"),
THING_RELATION_ROOT_TENANT_CODE("tenantCode"),
THING_RELATION_ROOT_GROUP_NAME("groupName"),
THING_RELATION_ROOT_ENTITY_NAME("entityName"),
THING_RELATION_ROOT_ENTITY_TYPE("entityType"),
THING_RELATION_ROOT_NAME("name"),
THING_RELATION_ROOT_CREATE_DATE("create_date"),
THING_RELATION_ROOT_SORT("sort");
private final String field;
RelationRootField(String field) {
this.field = field;
}
}
@Getter
public enum RelationDetailField {
THING_RELATION_DETAIL_ID("id"),
THING_RELATION_DETAIL_ROOT_ID("rootId"),
THING_RELATION_DETAIL_FROM_ID("fromId"),
THING_RELATION_DETAIL_FROM_NAME("fromName"),
THING_RELATION_DETAIL_FROM_CODE("fromCode"),
THING_RELATION_DETAIL_ROOT_THING_ID("rootThingId"),
THING_RELATION_DETAIL_CHILDREN("children"),
THING_RELATION_DETAIL_TO_ID("toId"),
THING_RELATION_DETAIL_TO_NAME("toName"),
THING_RELATION_DETAIL_TO_CODE("toCode"),
THING_RELATION_DETAIL_CREATE_DATE("createDate"),
THING_RELATION_DETAIL_SORT("sort")
;
private final String field;
RelationDetailField(String field) {
this.field = field;
}
}
/** 物计算项 */
@Deprecated
public static final String CALCULATION_ATTRIBUTES = "calculationAttributes";
/** 告警规则 */
public static final String ALARM_RULE = "alarmRule";
/** 告警物 */
public static final String ALARM_RULE_ENTITY = "alarmRuleEntity";
/** 告警动作 */
public static final String ALARM_RULE_ACTION = "alarmRuleAction";
/** 数据解析 */
public static final String SCRIPT_INFO = "scriptInfo";
/** 承租人物编码 */
public static final String AUTH_THING_CODES = "authThingCodes";
/** 物模型 */
public static final String THING_MODEL = "thingModel";
/** 物实体 */
public static final String THING_ENTITY = "thingEntity";
/** 物属性 */
public final static String THING_DICT = "thingDict";
/** 物指标 */
public static final String THING_DICT_RELATION = "thingDictRelation";
/** 物关系 */
public static final String THING_ROOT_RELATION = "thingRootRelation";
/** 物根关系 */
public static final String THING_DETAIL_RELATION = "thingDetailRelation";
/**
* 新版本物计算配置
*/
public final static String THING_CALC_CONFIG = "thingCalcConfig";
/**
* 过滤规则
*/
public final static String FILTER_RULE = "filterRule";
/**
* 模拟数据配置
*/
public final static String MOCK_DATA_CONFIG = "mockDataConfig";
/**
* 模拟数据某配置下的最新一笔数据的时间
*/
public final static String MOCK_DATA_LATEST_TIME = "mockDataLatestTime";
}

26
common/cache/src/main/java/com/thing/common/cache/redis/LettuceConnectionValidConfig.java

@ -0,0 +1,26 @@
package com.thing.common.cache.redis;
import com.thing.common.cache.config.RedisConfig;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@RequiredArgsConstructor
@ConditionalOnBean(RedisConfig.class)
public class LettuceConnectionValidConfig implements InitializingBean {
private final RedisConnectionFactory redisConnectionFactory;
@Override
public void afterPropertiesSet() {
if (redisConnectionFactory instanceof LettuceConnectionFactory c) {
c.setValidateConnection(true);
}
}
}

26
common/cache/src/main/java/com/thing/common/cache/redis/LettuceConnectionValidTask.java

@ -0,0 +1,26 @@
package com.thing.common.cache.redis;
import com.thing.common.cache.config.RedisConfig;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@RequiredArgsConstructor
@ConditionalOnBean(RedisConfig.class)
public class LettuceConnectionValidTask {
private final RedisConnectionFactory redisConnectionFactory;
@Scheduled(cron = "0/2 * * * * ?")
public void task() {
if (redisConnectionFactory instanceof LettuceConnectionFactory c) {
c.validateConnection();
}
}
}

65
common/cache/src/main/java/com/thing/common/cache/redis/RedisKeys.java

@ -0,0 +1,65 @@
package com.thing.common.cache.redis;
/**
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
public class RedisKeys {
/**
* 系统参数Key
*/
public static String getSysParamsKey(){
return "sys:params";
}
/**
* 系统参数Key
*/
public static String getSysParamsKey(String paramCode){
return "sys:params:" + paramCode;
}
/**
* 验证码Key
*/
public static String getCaptchaKey(String uuid){
return "sys:captcha:" + uuid;
}
/**
* 登录用户Key
*/
public static String getSecurityUserKey(Long id){
return "sys:security:user:" + id;
}
/**
* 系统日志Key
*/
public static String getSysLogKey(){
return "sys:log";
}
/**
* 系统资源Key
*/
public static String getSysResourceKey(){
return "sys:resource";
}
/**
* 用户菜单导航Key
*/
public static String getUserMenuNavKey(Long userId){
return "sys:user:nav:" + userId;
}
/**
* 用户权限标识Key
*/
public static String getUserPermissionsKey(Long userId){
return "sys:user:permissions:" + userId;
}
}

123
common/cache/src/main/java/com/thing/common/cache/redis/RedisUtils.java

@ -0,0 +1,123 @@
package com.thing.common.cache.redis;
import com.thing.common.cache.config.RedisConfig;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* Redis工具类
*
* @author Mark sunlightcs@gmail.com
*/
@Component
@RequiredArgsConstructor
@SuppressWarnings("unused")
@ConditionalOnBean(RedisConfig.class)
public class RedisUtils {
private final RedisTemplate<String, Object> redisTemplate;
/** 默认过期时长为24小时,单位:秒 */
public final static long DEFAULT_EXPIRE = 60 * 60 * 24L;
/** 过期时长为1小时,单位:秒 */
public final static long HOUR_ONE_EXPIRE = (long) 60 * 60;
/** 过期时长为6小时,单位:秒 */
public final static long HOUR_SIX_EXPIRE = 60 * 60 * 6L;
/** 不设置过期时长 */
public final static long NOT_EXPIRE = -1L;
public void set(String key, Object value, long expire){
redisTemplate.opsForValue().set(key, value);
if(expire != NOT_EXPIRE){
expire(key, expire);
}
}
public void set(String key, Object value){
set(key, value, DEFAULT_EXPIRE);
}
public Object get(String key, long expire) {
Object value = redisTemplate.opsForValue().get(key);
if(expire != NOT_EXPIRE){
expire(key, expire);
}
return value;
}
public Object get(String key) {
return get(key, NOT_EXPIRE);
}
public void delete(String key) {
redisTemplate.delete(key);
}
public void delete(Collection<String> keys) {
redisTemplate.delete(keys);
}
public Object hGet(String key, String field) {
return redisTemplate.opsForHash().get(key, field);
}
public Map<String, Object> hGetAll(String key){
HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
return hashOperations.entries(key);
}
public void hMSet(String key, Map<String, Object> map){
hMSet(key, map, DEFAULT_EXPIRE);
}
public void hMSet(String key, Map<String, Object> map, long expire){
redisTemplate.opsForHash().putAll(key, map);
if(expire != NOT_EXPIRE){
expire(key, expire);
}
}
public void hSet(String key, String field, Object value) {
hSet(key, field, value, DEFAULT_EXPIRE);
}
public void hSet(String key, String field, Object value, long expire) {
redisTemplate.opsForHash().put(key, field, value);
if(expire != NOT_EXPIRE){
expire(key, expire);
}
}
public void expire(String key, long expire){
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
public void hDel(String key, Object... fields){
redisTemplate.opsForHash().delete(key, fields);
}
public void leftPush(String key, Object value){
leftPush(key, value, DEFAULT_EXPIRE);
}
public void leftPush(String key, Object value, long expire){
redisTemplate.opsForList().leftPush(key, value);
if(expire != NOT_EXPIRE){
expire(key, expire);
}
}
public Object rightPop(String key){
return redisTemplate.opsForList().rightPop(key);
}
}

38
common/cache/src/main/java/com/thing/common/cache/redis/SysParamsRedis.java

@ -0,0 +1,38 @@
package com.thing.common.cache.redis;
import com.thing.common.cache.config.RedisConfig;
import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;
/**
* 参数管理
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@Component
@RequiredArgsConstructor
@ConditionalOnBean(RedisConfig.class)
public class SysParamsRedis {
private final RedisUtils redisUtils;
public void delete(Object[] paramCodes) {
String key = RedisKeys.getSysParamsKey();
redisUtils.hDel(key, paramCodes);
}
public void set(String paramCode, String paramValue){
if(paramValue == null){
return ;
}
String key = RedisKeys.getSysParamsKey();
redisUtils.hSet(key, paramCode, paramValue);
}
public String get(String paramCode){
String key = RedisKeys.getSysParamsKey();
return (String)redisUtils.hGet(key, paramCode);
}
}

39
common/cache/src/main/java/com/thing/common/cache/redis/aspect/RedisAspect.java

@ -0,0 +1,39 @@
package com.thing.common.cache.redis.aspect;
import com.thing.common.cache.config.RedisConfig;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;
/**
* Redis切面处理类
*
* @author Mark sunlightcs@gmail.com
*/
@Aspect
@Component
@ConditionalOnBean(RedisConfig.class)
public class RedisAspect {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Value("${spring.cache.type}")
private String cacheType;
@Around("execution(* com.thing.common.cache.redis.RedisUtils.*(..))")
public Object around(ProceedingJoinPoint point) throws Throwable {
Object result = null;
if("redis".equals(cacheType)){
try{
result = point.proceed();
}catch (Exception e){
logger.error("redis error", e);
}
}
return result;
}
}

17
common/cache/src/main/java/com/thing/common/cache/service/AbstractCacheService.java

@ -0,0 +1,17 @@
package com.thing.common.cache.service;
/**
* @author SiYang
* @date 2024/01/19 14:07
* @description 缓存服务用来初始化缓存
* 1. 业务类数据初始化采用该初始化器
* 2. 技术架构类依赖的初始化采用 CommandLineRunner
*/
public abstract class AbstractCacheService {
/** 定义缓存名称 */
public abstract String getCacheName();
/** 项目启动时初始化缓存 */
public abstract void initCache();
}

40
common/cache/src/main/java/com/thing/common/cache/service/CacheInitializer.java

@ -0,0 +1,40 @@
package com.thing.common.cache.service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
* @author SiYang
* @date 2024/01/24 23:20
* @description 缓存初始化器
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class CacheInitializer implements ApplicationListener<ContextRefreshedEvent> {
private final List<AbstractCacheService> cacheInitializers;
/** 容器初始化时缓存预热 */
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// 确保事件来源是容器本身避免处理容器中的其他刷新事件
if (event.getSource() instanceof ConfigurableApplicationContext) {
if (CollectionUtils.isEmpty(cacheInitializers)) {
return;
}
// 初始化缓存
cacheInitializers.forEach(
e -> {
log.info("初始化缓存: {}", e.getCacheName());
e.initCache();
});
}
}
}

129
common/core/pom.xml

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.thing</groupId>
<artifactId>common</artifactId>
<version>5.1</version>
</parent>
<groupId>com.thing.common</groupId>
<artifactId>core</artifactId>
<packaging>jar</packaging>
<name>ThingBI Server Common Core</name>
<properties>
<main.dir>${basedir}/..</main.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- hutool -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<!-- guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<!-- yml 解析工具 -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.github.jsonzou</groupId>
<artifactId>jmockdata</artifactId>
</dependency>
<!-- easy poi -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
<dependency>
<groupId>com.thing.common</groupId>
<artifactId>data</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

75
common/core/src/main/java/com/thing/common/core/annotation/CustomExcel.java

@ -0,0 +1,75 @@
package com.thing.common.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Author: SiYang
* Date: 2023/09/26 10:19
* Description:
* easyPoi并没有给出动态表头的注解方案
* 想要使用动态表头只能自己构建 ExcelExportEntity 这个对象比较繁琐
* 我们可以使用自定义注解的方式使得构建该对象的过程自动化
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomExcel {
/**
* 表头唯一标识
* 这里只是给出概念通常使用 {@link #keyGenerator} 来定义
*/
String key() default "";
/**
* 指定列名有些列名是固定的不需要生成
*/
String name() default "";
/**
* 表头key生成器不指定的话默认使用 {@link #columnNameGenerator} 的结果
*/
String keyGenerator() default "";
/**
* 指定生成策略生成策略指的是数据类内部自定义的方法
* 被CustomExcel注解的属性可以定义多种生成策略
* 该方法用来指定生成策略
*/
String columnNameGenerator() default "";
/**
* 列的序号
*/
int orderNum() default 0;
/**
* 列序号生成器需要自定义生成方法这里的值为方法名称
* 顺序的体现只需要orderNum有大小关系而不一定要连续
*/
String orderGenerator() default "";
/**
* 是否需要合并列
* 该字段映射到easyPoi的ExcelExportEntity对象中似乎无效
* easyPoi的合并功能还是一如既往地令人失望所以合并还是得靠自己实现
*/
boolean needMerge() default false;
/**
* 标题分组
*/
String groupName() default "";
/**
* 指定生成title的方法
* 该方法如果返回的值相同那么就表示这些列的标题需要合并
*/
String groupGenerator() default "";
int width() default 10;
int height() default 10;
}

17
common/core/src/main/java/com/thing/common/core/annotation/CustomExcelCollection.java

@ -0,0 +1,17 @@
package com.thing.common.core.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Author: SiYang
* Date: 2023/09/26 14:49
* Description: 处理内嵌list的注解
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomExcelCollection {
}

21
common/core/src/main/java/com/thing/common/core/annotation/LogOperation.java

@ -0,0 +1,21 @@
package com.thing.common.core.annotation;
import java.lang.annotation.*;
/**
* 操作日志注解
*
* @author Mark sunlightcs@gmail.com
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogOperation {
String value() default "";
String type() default "";
}

41
common/core/src/main/java/com/thing/common/core/config/AsyncEventConfig.java

@ -0,0 +1,41 @@
package com.thing.common.core.config;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Author: SiYang
* Date: 2023/12/01 14:31
* Description: 异步事件配置
*/
@Configuration
public class AsyncEventConfig {
@Bean
public SimpleApplicationEventMulticaster applicationEventMulticaster(BeanFactory beanFactory) {
SimpleApplicationEventMulticaster applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
// 设置线程池, 不设置的话默认没有线程池没有线程池就不会异步调度事件
applicationEventMulticaster.setTaskExecutor(eventExecutor());
return applicationEventMulticaster;
}
@Bean
public TaskExecutor eventExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(20);
threadPoolTaskExecutor.setMaxPoolSize(50);
threadPoolTaskExecutor.setQueueCapacity(30);
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
threadPoolTaskExecutor.setThreadNamePrefix("eventExecutor-");
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
threadPoolTaskExecutor.setAwaitTerminationSeconds(5);
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}

20
common/core/src/main/java/com/thing/common/core/config/RestTemplateConfig.java

@ -0,0 +1,20 @@
package com.thing.common.core.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @author zy
* @version 1.0
* @date 2022/1/7 0007 14:43:22
*/
@Configuration
public class RestTemplateConfig {
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
}

429
common/core/src/main/java/com/thing/common/core/constants/Constant.java

@ -0,0 +1,429 @@
package com.thing.common.core.constants;
import com.google.common.collect.ImmutableMap;
import com.thing.common.core.utils.DateTimeUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 常量
*
* @author Mark sunlightcs@gmail.com
*/
public interface Constant {
String API_BASE = "api_v1";
/**
* 成功
*/
int SUCCESS = 1;
/**
* 失败
*/
int FAIL = 0;
/**
* OK
*/
String OK = "OK";
/**
* 用户标识
*/
String USER_KEY = "userId";
String AUTH = "auth";
/**
* 数据集主键
*/
String DATASET_ID = "datasetId";
String API_ID = "apiId";
/**
* 扩展计算主键
*/
String TRANSPORT_EXTEND_ID = "transportExtendId";
/**
* 用户标识
*/
String DEVICE_KEY = "deviceId";
/**
* 看板标识
*/
String DASHBOARD_KEY = "dashboardId";
/**
* 菜单根节点标识
*/
Long MENU_ROOT = 0L;
/**
* 部门根节点标识
*/
Long DEPT_ROOT = 0L;
/**
* 数据字典根节点标识
*/
Long DICT_ROOT = 0L;
/**
* 部门根节点标识
*/
Integer DEPT_SORT_ROOT = 0;
/**
* 告警字典根节点标识
*/
Long ALARM_DICT_TOOT = 0L;
/**
* 升序
*/
String ASC = "asc";
/**
* 降序
*/
String DESC = "desc";
/**
* 创建时间字段名
*/
String CREATE_DATE = "create_date";
/**
* 创建时间字段名
*/
String ID = "id";
/**
* 数据权限过滤
*/
String SQL_FILTER = "sqlFilter";
/**
* 当前页码
*/
String PAGE = "page";
/**
* 每页显示记录数
*/
String LIMIT = "limit";
String BEGIN_TIME = "beginTime";
String END_TIME = "endTime";
/**
* 排序字段
*/
String ORDER_FIELD = "orderField";
/**
* 排序方式
*/
String ORDER = "order";
/**
* token header
*/
String TOKEN_HEADER = "token";
/**
* 云存储配置KEY
*/
String CLOUD_STORAGE_CONFIG_KEY = "CLOUD_STORAGE_CONFIG_KEY";
/**
* 短信配置KEY
*/
String SMS_CONFIG_KEY = "SMS_CONFIG_KEY";
/**
* 邮件配置KEY
*/
String MAIL_CONFIG_KEY = "MAIL_CONFIG_KEY";
/**
* 微信配置KEY
*/
String WECHAT_CONFIG_KEY = "WECHAT_CONFIG_KEY";
/**
* 钉钉配置KEY
*/
String DINGTALK_CONFIG_KEY = "DINGTALK_CONFIG_KEY";
/**
* 企业微信配置KEY
*/
String WECHAT_COM_CONFIG_KEY = "WECHAT_COM_CONFIG_KEY";
/**
* 代码生成参数KEY
*/
String DEV_TOOLS_PARAM_KEY = "DEV_TOOLS_PARAM_KEY";
/**
* 租户编码
*/
String TENANT_CODE = "tenantCode";
/**
* 取SQL结果集的第一条
*/
String SQL_FIRST = "limit 1";
/**
* tb中默认的设备类型
*/
String DEFAULT_DEVICE_TYPE = "default";
/**
* 默认数据源
*/
String DEFAULT_SOURCE = "defaultSource";
/**
* 物编码
*/
String THING_CODE = "thingCode";
/**
* 物编码
*/
String ENTITY_ID = "entityId";
/**
* tb中additionalInfo字段的覆盖活动时间
*/
String TB_OVERWRITE_ACTIVITY_TIME = "overwriteActivityTime";
/**
* tb中additionalInfo字段的描述
*/
String TB_DESCRIPTION = "description";
/**
* tb中additionalInfo字段的描述
*/
String TB_GATEWAY = "gateway";
/**
* 公司id
*/
String COMPANY_ID = "companyId";
String PROTOCOL_SEPARATOR = "://";
String COLON = ":";
/**
* 获取token
*/
String API_GET_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
/**
* 获取用户列表
*/
String API_GET_USERLIST = "https://api.weixin.qq.com/cgi-bin/user/get";
/**
* 获取用户信息
*/
String API_GET_USERINFO = "https://api.weixin.qq.com/cgi-bin/user/info";
/**
* 发送模板消息
*/
String API_SEND_MSG = "https://api.weixin.qq.com/cgi-bin/message/template/send";
/**
* 获取分组用户
*/
String API_GET_GROUPLIST = "https://api.weixin.qq.com/cgi-bin/tags/get";
/**
* 获取模板列表
*/
String API_GET_TEMPLATELIST = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template";
String PUBLISHER_TYPE_SMS = "短信服务_platform:";
String PUBLISHER_TYPE_WECHAT = "微信公众号服务";
String PUBLISHER_TYPE_DINGTALK = "钉钉机器人服务";
String PUBLISHER_TYPE_WECHATCOM = "企业微信机器人服务";
String PUBLISHER_TYPE_ALARM = "告警触发推送服务";
/**
* 企业物的初始分配数量
*/
Long INITIAL_AUTH_NUM = 1L;
/**
* 设备在线离线tb共享属性key
*/
String THING_ONLINE_STATUS = "thing_online_status";
/**
* 计算结果时间
*/
String RESULT_TIME = "time";
/**
* 计算结果值
*/
String RESULT_VALUE = "value";
/**
* 最新时间
*/
String LAST_TIME = "lastTime";
/**
* 最新结果值
*/
String LAST_VALUE = "lastValue";
/**
* 公司的ID
*/
String CONSUMER_PID = "consumerPid";
//集中办公区
String CENTRALIZED_OFFICE_AREA = "centralized_office_area";
//独立办公区的党政机关
String INDEPENDENT_OFFICE_AREA = "independent_office_area";
//中小学公共机构
String PRIMARY_SECONDARY_SCHOOLS = "primary_secondary_schools";
//高等教育机构
String HIGHER_EDUCATION = "higher_education";
//医疗卫生机构
String MEDICAL_HYGIENE = "medical_hygiene";
//场馆类公共机构
String VENUE_CATEGORY = "venue_category";
//三级医院
String TERTIARY_HOSPITAL = "tertiary_hospital";
//二级医院
String SECONDARY_HOSPITAL = "secondary_Hospital";
//演出类-剧院音乐厅等
String PERFORMANCE_VENUES = "performance_venues";
//非演出类-博物馆纪念馆文化馆美术馆科技馆等
String NON_PERFORMANCE_VENUES_ONE = "non_performance_venues_one";
//非演出类-图书馆档案馆等
String NON_PERFORMANCE_VENUES_TWO = "non_performance_venues_two";
//承办赛事类-体育场等
String UNDERTAKING_EVENTS = "undertaking_events";
//非承办赛事类-体育中心训练中心等
String NON_UNDERTAKING_EVENTS = "non_undertaking_events";
//>90000
String BUILD_A = "build_a";
//4500190000
String BUILD_B = "build_b";
//45000
String BUILD_C = "build_c";
//25000
String BUILD_D = "build_d";
//1100125000
String BUILD_E = "build_e";
//11000
String BUILD_F = "build_f";
//5000
String BUILD_G = "build_g";
//5000
String BUILD_H = "build_h";
//---------/
String BUILD_I = "build_i";
//6300
String NUMBER_A = "number_a";
//30006300
String NUMBER_B = "number_b";
//3000
String NUMBER_C = "number_c";
//1700
String NUMBER_D = "number_d";
//6001700
String NUMBER_E = "number_e";
//600
String NUMBER_F = "number_f";
//----/
String NUMBER_G = "number_g";
//单位建筑面积能耗
String ENERGY_PERBULID ="energy_perbulid";
//人均建筑能耗
String ENERGY_PERPERSON = "energy_perperson";
//食堂人均能耗
String ENERGY_PERCAFETERIA_PERSON ="energy_percafeteria_person";
//数据中心电能使用率
String ENERGY_UTILIZATION_EFFICIENCY = "energy_utilization_efficiency";
String ATTR_GROUP = "ATTR_GROUP";
Integer INDEX_0=0;
Integer INDEX_1=1;
Integer INDEX_2=2;
Integer INDEX_3=3;
Integer COUNT_0=0;
Integer COUNT_1=1;
Integer COUNT_2=2;
Integer LIST_LENGTH=2;
Long DEFAULT_TAG_GROUP = 1567752318059458562L;
Map<String, Long> EMUNTIMEMAP = ImmutableMap.<String, Long>builder()
.put("1", (long) (30*60*1000))
.put("2", (long)(60*60*1000))
.put("3", (long)(5*60*60*1000))
.put("4", (long)(12*60*60*1000))
.put("5", (long)(24*60*60*1000))
.put("6", DateTimeUtils.firstDayOfWeekMilli())
.put("7", (long)(7*24*60*60*1000))
.put("8", (30L*24*60*60*1000))
.put("9", (3*30L*24*60*60*1000))
.put("10",(6*30L*24*60*60*1000))
.put("11",(365L*24*60*60*1000))
.build();
Map<String, String> EMUNSTRTIMEMAP = ImmutableMap.<String, String>builder()
.put("0","0,0,30")
.put("1","0,1,0")
.put("2","0,5,0")
.put("3","0,12,0")
.put("4","0,24,0")
.put("5","7,0,0")
.put("6","30,0,0")
.put("7","90,0,0")
.build();
Map<String, String> EMUNSTRINGTIMEMAP = ImmutableMap.<String, String>builder()
.put("30分钟","{\"day\":\"0\",\"hour\":\"0\",\"minute\":\"30\"}")
.put("1小时","{\"day\":\"0\",\"hour\":\"1\",\"minute\":\"0\"}")
.put("5小时","{\"day\":\"0\",\"hour\":\"5\",\"minute\":\"0\"}")
.put("12小时","{\"day\":\"0\",\"hour\":\"12\",\"minute\":\"0\"}")
.put("1天","{\"day\":\"1\",\"hour\":\"0\",\"minute\":\"0\"}")
.put("7天","{\"day\":\"7\",\"hour\":\"0\",\"minute\":\"0\"}")
.put("30天","{\"day\":\"30\",\"hour\":\"0\",\"minute\":\"0\"}")
.put("3月","{\"day\":\"90\",\"hour\":\"0\",\"minute\":\"0\"}")
.put("6月","{\"day\":\"180\",\"hour\":\"0\",\"minute\":\"0\"}")
.put("1年","{\"day\":\"365\",\"hour\":\"0\",\"minute\":\"0\"}")
.build();
Map<String, String> STATUS_MAP = ImmutableMap.<String, String>builder()
.put("0","离网")
.put("1","空闲")
.put("3","占用(充电中)")
.put("2", "占用(未充电)")
.put("4", "占用(预约锁定)")
.put("255", "故障").build();
Map<Integer, String> CARTYPES = ImmutableMap.<Integer, String>builder()
.put(1, "公共")
.put(50, "个人")
.put(100, "公交")
.put(101, "环卫")
.put(102, "物流")
.put(103, "出租车")
.put(255, "其他").build();
Long ONE_FIVE_MINUTE = 300000L;
Long ONE_HOUR = 3600000L;
Long ONE_DAY = 86400000L;
Long FIVE_DAY = 2592000000L;
Long THREE_DAY = 2592000000L;
Long ONE_YEAR = 2592000000L;
}

39
common/core/src/main/java/com/thing/common/core/container/GlobalContainer.java

@ -0,0 +1,39 @@
package com.thing.common.core.container;
import cn.hutool.core.util.ObjectUtil;
import java.util.concurrent.ConcurrentHashMap;
public class GlobalContainer {
private ConcurrentHashMap<String, Object> container = new ConcurrentHashMap<>();
private static GlobalContainer instance;
private GlobalContainer(){}
public static synchronized GlobalContainer getInstance() {
if(ObjectUtil.isNull(instance)) {
instance = new GlobalContainer();
}
return instance;
}
public void put(String key, Object object){
container.put(key, object);
}
public Object get(String key){
return container.get(key);
}
public Object remove(String key){ return container.remove(key); }
@Override
public String toString() {
return super.toString();
}
}

73
common/core/src/main/java/com/thing/common/core/convert/DateConverter.java

@ -0,0 +1,73 @@
package com.thing.common.core.convert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 日期转换
*
* @author Mark sunlightcs@gmail.com
*/
@Component
public class DateConverter implements Converter<String, Date> {
private static final Logger logger = LoggerFactory.getLogger(DateConverter.class);
private static List<String> formatList = new ArrayList<>(5);
static {
formatList.add("yyyy-MM");
formatList.add("yyyy-MM-dd");
formatList.add("yyyy-MM-dd hh:mm");
formatList.add("yyyy-MM-dd hh:mm:ss");
formatList.add("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
}
@Override
public Date convert(String source) {
String value = source.trim();
if (StringUtils.isEmpty(value)) {
return null;
}
if(source.matches("^\\d{4}-\\d{1,2}$")){
return parseDate(source, formatList.get(0));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
return parseDate(source, formatList.get(1));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formatList.get(2));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formatList.get(3));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}.*T.*\\d{1,2}:\\d{1,2}:\\d{1,2}.*..*$")){
return parseDate(source, formatList.get(4));
} else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
/**
* 格式化日期
* @param dateStr String 字符型日期
* @param format String 格式
* @return Date 日期
*/
public Date parseDate(String dateStr, String format) {
Date date = null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
logger.error("Formatted date with date: {} and format : {} ", dateStr, format);
}
return date;
}
}

30
common/core/src/main/java/com/thing/common/core/enumeration/ActionType.java

@ -0,0 +1,30 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 动作类型
*/
@Getter
@AllArgsConstructor
public enum ActionType {
/**
* 消息
*/
MSG("0"),
/**
* 控制
*/
CONTROL("1"),
/**
* 日志新增
*/
LOG_SAVE("99"),
/**
* 日志修改
*/
LOG_UPDATE("100");
private final String value;
}

36
common/core/src/main/java/com/thing/common/core/enumeration/AggType.java

@ -0,0 +1,36 @@
package com.thing.common.core.enumeration;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
public enum AggType {
AVG, SUM, MAX, MIN, COUNT;
/**
* 得到方法名称
* @param prefix 前缀
* @param suffix 后缀
* @return 方法名称
*/
public static String getMethodName(String prefix,String suffix ,AggType agg) {
if(Arrays.stream(AggType.values()).noneMatch(s -> StringUtils.equals(s.name(), agg.name()))){
throw new IllegalArgumentException("Unsupported agg type: " + agg);
}
return prefix+agg+suffix;
}
public static AggType match(String func){
if(StringUtils.isBlank(func)){
return AggType.MAX;
}
for (AggType value : AggType.values()) {
if(StringUtils.endsWithIgnoreCase(value.name(),func)){
return value;
}
}
return AggType.MAX;
}
}

26
common/core/src/main/java/com/thing/common/core/enumeration/AlarmSettingType.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 告警选择
*/
@Getter
@AllArgsConstructor
public enum AlarmSettingType {
/**
* 严重程度
*/
LEVEL("alarm_level"),
/**
* 告警类型
*/
TYPE("alarm_type"),
/**
* 告警名称
*/
NAME("alarm_name");
private final String status;
}

26
common/core/src/main/java/com/thing/common/core/enumeration/AlarmStatus.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 告警状态
*/
@Getter
@AllArgsConstructor
public enum AlarmStatus {
/**
* 待处理
*/
PENDING("0"),
/**
* 处理中
*/
PROCESSING("1"),
/**
* 已处理
*/
PROCESSED("2");
private final String status;
}

35
common/core/src/main/java/com/thing/common/core/enumeration/AlarmType.java

@ -0,0 +1,35 @@
package com.thing.common.core.enumeration;
import com.thing.common.core.exception.SysException;
import java.util.Arrays;
import java.util.Objects;
public enum AlarmType {
/**
* 峰平谷
*/
PEAK("1"),
/**
* 夜间
*/
NIGHT("2");
private String value;
AlarmType(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static AlarmType match(String val) {
return Arrays.stream(AlarmType.values())
.filter(item -> Objects.equals(item.getValue(), val))
.findFirst()
.orElseThrow(() -> new SysException("type类型不正确:" + val));
}
}

61
common/core/src/main/java/com/thing/common/core/enumeration/ApiFuncEnum.java

@ -0,0 +1,61 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* API查询类型
*/
@Getter
@AllArgsConstructor
public enum ApiFuncEnum {
/**
* 求和
*/
SUM("sum", "求和"),
/**
* 平均
*/
AVG("avg", "平均数"),
/**
* 最大值
*/
MAX("max", "最大值"),
/**
* 最小值
*/
MIN("min", "最小值"),
/**
* 统计
*/
COUNT("count", "统计"),
/**
*
*/
BLANK("blank", "空");
private final String value;
private final String name;
public static String getName(String value) {
if (StringUtils.isBlank(value)) {
return value;
}
for (ApiFuncEnum apiFuncEnum : ApiFuncEnum.values()) {
if (StringUtils.equalsAnyIgnoreCase(apiFuncEnum.getValue(), value)) {
return apiFuncEnum.getName();
}
}
return value;
}
public static boolean noneMatch(String type) {
return Arrays.stream(ApiFuncEnum.values()).noneMatch(s -> StringUtils.equals(s.getValue(), type));
}
}

26
common/core/src/main/java/com/thing/common/core/enumeration/ApiSeparateAttr.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集设备分属性
*/
@Getter
@AllArgsConstructor
public enum ApiSeparateAttr {
/**
* 无属性
*/
NONE("none") ,
/**
* 分属性
*/
SEPARATE("split"),
/**
* 不分属性
*/
NO_SEPARATE("all");
private final String value;
}

46
common/core/src/main/java/com/thing/common/core/enumeration/ApiType.java

@ -0,0 +1,46 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* API类型
*/
@Getter
@AllArgsConstructor
public enum ApiType {
/**
* 列表
*/
LIST("list"),
/**
*
*/
TYPE("type"),
/**
*
*/
TAG("tag"),
/**
* 搜索
*/
SEARCH("search"),
/**
* 关系
*/
RELATION("relation"),
/**
*
*/
GROUP("group");
private final String value;
public static boolean matchName(String name) {
return Arrays.stream(ApiType.values())
.anyMatch(type -> StringUtils.equals(type.getValue(), StringUtils.trim(name)));
}
}

61
common/core/src/main/java/com/thing/common/core/enumeration/ApiTypeEnum.java

@ -0,0 +1,61 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* API查询类型
*/
@Getter
@AllArgsConstructor
public enum ApiTypeEnum {
/**
* 列表
*/
LIST("list", "列表"),
/**
* 类型
*/
TYPE("type", "类型"),
/**
* 标签
*/
TAG("tag", "标签"),
/**
* 搜索
*/
SEARCH("search", "搜索"),
/**
* 关系
*/
RELATION("relation", "关系"),
/**
*
*/
GROUP("group", "物组");
private final String value;
private final String name;
public static String getName(String value) {
if (StringUtils.isBlank(value)) {
return value;
}
for (ApiTypeEnum groupTypeEnum : ApiTypeEnum.values()) {
if (StringUtils.equalsAnyIgnoreCase(groupTypeEnum.getValue(), value)) {
return groupTypeEnum.getName();
}
}
return value;
}
public static boolean noneMatch(String type) {
return Arrays.stream(ApiTypeEnum.values()).noneMatch(s -> StringUtils.equals(s.getValue(), type));
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/ApiTypes.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集是否开启
*/
@Getter
@AllArgsConstructor
public enum ApiTypes {
/**
* 组态设计
*/
CONFIG("0"),
/**
* 超级API
*/
API("1");
private final String type;
}

99
common/core/src/main/java/com/thing/common/core/enumeration/AttributeEnum.java

@ -0,0 +1,99 @@
package com.thing.common.core.enumeration;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 首页物属性
*/
public enum AttributeEnum {
/**
* 气电比
*/
AC100,
/**
* 单位m³气体价格
*/
AC101,
/**
* 压力
*/
D6,
/**
* 露点温度
*/
D5,
/**
* 瞬时流量
*/
D1,
/**
* 累计流量用气量
*/
D2,
/**
* 瞬时功率
*/
A16,
/**
* 日均流量
*/
AC106,
/**
* 日均功率
*/
AC108,
/**
* 累计电量用电量
*/
A29,
/**
* 碳排量
*/
CO2,
/**
* C相电压
*/
A3,
/**
* A相电压
*/
A1,
/**
* B相电压
*/
A2,
/**
* C相电流
*/
A9,
/**
* A相电流
*/
A8,
/**
* B相电流
*/
A10,
/**
* 频率
*/
A25,
/**
* 密度
*/
AC120,
/**
* 手工录入温度
*/
AC121,
/**
* 手工录入节约用电量
*/
AC122;
public static List<String> getAllEnums() {
return Arrays.stream(AttributeEnum.values()).map(AttributeEnum::name).collect(Collectors.toList());
}
}

225
common/core/src/main/java/com/thing/common/core/enumeration/AttributeTypeEnum.java

@ -0,0 +1,225 @@
package com.thing.common.core.enumeration;
import com.thing.common.core.utils.DateTimeUtils;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public enum AttributeTypeEnum {
/** 刻 */
am,
/** 小时 */
hh,
/** 天 */
dd,
/** 月 */
mm,
/** 周 */
week,
/** 年 */
yy;
public static AttributeTypeEnum match(String attributeType) {
return Arrays.stream(AttributeTypeEnum.values())
.filter(item -> Objects.equals(item.name(), attributeType))
.findFirst()
.orElse(null);
}
public static String matchEndAdapter(String attribute,String attributeType) {
Optional<AttributeTypeEnum> optional = Arrays.stream(AttributeTypeEnum.values())
.filter(item -> StringUtils.endsWithIgnoreCase(attribute, item.name()))
.findFirst();
if(optional.isEmpty() || StringUtils.isBlank(attributeType)){
return attribute;
}
return attribute.replaceAll(optional.get().name(), "")+attributeType;
}
/**
* 获取给定时间所在的被指定范围类型的时间区间
*
* @param time 给定的时间
* @return
* 举例1
* 给定时间2023-09-11 12:00:00 以及时间范围类型 mm,
* 返回 2023-01-01 00:00:00 ~ 2023-12-01 00:00:00这段时间
* 举例2
* 给定时间2023-09-11 12:00:00 以及时间范围类型 dd,
* 返回 2023-09-01 00:00:00 ~ 2023-09-30 00:00:00这段时间
*/
public List<LocalDateTime> getTimeRange(LocalDateTime time) {
time = time.withHour(0).withMinute(0).withSecond(0).withNano(0);
switch (this) {
case am:
LocalDateTime beginTimeOfMin = LocalDateTime.of(time.toLocalDate(), LocalTime.MIN);
LocalDateTime endTimeOfMin = LocalDateTime.of(time.toLocalDate(), LocalTime.MAX);
return Stream.iterate(beginTimeOfMin, d -> d.plusMinutes(15))
.limit((ChronoUnit.MINUTES.between(beginTimeOfMin, endTimeOfMin) + 1) / 15)
.collect(Collectors.toList());
case hh:
LocalDateTime beginTimeOfHour = LocalDateTime.of(time.toLocalDate(), LocalTime.MIN);
LocalDateTime endTimeOfHour = LocalDateTime.of(time.toLocalDate(), LocalTime.MAX);
return Stream.iterate(beginTimeOfHour, d -> d.plusHours(1))
.limit(ChronoUnit.HOURS.between(beginTimeOfHour, endTimeOfHour) + 1)
.collect(Collectors.toList());
case dd:
LocalDateTime beginTimeOfMouth = time.with(TemporalAdjusters.firstDayOfMonth());
LocalDateTime endTimeOfMouth = time.with(TemporalAdjusters.lastDayOfMonth());
return Stream.iterate(beginTimeOfMouth, d -> d.plusDays(1))
.limit(ChronoUnit.DAYS.between(beginTimeOfMouth, endTimeOfMouth) + 1)
.collect(Collectors.toList());
case mm:
LocalDateTime beginTimeOfYear = time.with(TemporalAdjusters.firstDayOfYear());
LocalDateTime endTimeOfYear = time.with(TemporalAdjusters.lastDayOfYear());
return Stream.iterate(beginTimeOfYear, d -> d.plusMonths(1))
.limit(ChronoUnit.MONTHS.between(beginTimeOfYear, endTimeOfYear) + 1)
.collect(Collectors.toList());
case yy:
return Collections.singletonList(time.with(TemporalAdjusters.firstDayOfYear()));
default:
return Collections.emptyList();
}
}
/**
* 获取给定时间所在的被指定范围类型的时间区间
*
*/
public static List<LocalDateTime> getTimeRange(LocalDateTime startTime,LocalDateTime endTime) {
startTime = startTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
endTime = endTime.withHour(0).withMinute(0).withSecond(0).withNano(0);
return Stream.iterate(startTime, d -> d.plusDays(1))
.limit(ChronoUnit.DAYS.between(startTime, endTime) + 1)
.collect(Collectors.toList());
}
/**
* 获取上一个阶段的时间范围:
* 1. 若当前时间类型是am或者hh则上一个阶段的时间就是昨天的am或hh
* 2. 若当前时间类型是dd则上一个阶段的时间就是上个月的dd
* 3. 若当前时间类型是mm 则上一个阶段的时间就是去年的mm
*
* @param time 当前时间
* @return 上一个阶段的时间范围
*/
public List<LocalDateTime> getPreviousTimeRange(LocalDateTime time) {
switch (this) {
case am:
case hh:
return getTimeRange(time.minusDays(1));
case dd:
return getTimeRange(time.minusMonths(1));
case mm:
return getTimeRange(time.minusYears(1));
default:
return Collections.emptyList();
}
}
public List<String> getTimeRangeWithPattern(LocalDateTime time, DateTimeFormatter pattern) {
return getTimeRange(time).stream().map(t -> t.format(pattern)).collect(Collectors.toList());
}
public List<String> getTimeRangeWithPattern(LocalDateTime time) {
return getTimeRangeWithPattern(time, DateTimeUtils.DATE_TIME_PATTERN);
}
public List<Long> getTimestampList(LocalDateTime time) {
List<LocalDateTime> timeRange = getTimeRange(time);
return timeRange.stream().map(DateTimeUtils::parse).collect(Collectors.toList());
}
public List<Long> getPreviousTimestampList(LocalDateTime time) {
List<LocalDateTime> timeRange = getPreviousTimeRange(time);
return timeRange.stream().map(DateTimeUtils::parse).collect(Collectors.toList());
}
@SuppressWarnings("Duplicates")
public AttributeTypeEnum next() {
return switch (this) {
case am -> hh;
case hh -> dd;
case dd -> mm;
case mm -> yy;
default -> null;
};
}
@SuppressWarnings("Duplicates")
public AttributeTypeEnum previous() {
return switch (this) {
case yy -> mm;
case mm -> dd;
case dd -> hh;
case hh -> am;
default -> null;
};
}
/**
* 获取下一级时间
* 若当前是dd的2023-09-12 12:00:00 则下一级时间为mm的2023-09-01 00:00:00
* 若当前是mm的2023-09-12 12:00:00 则下一级时间为yy的2023-01-01 00:00:00
*/
public LocalDateTime nextAttributeTypeTime(LocalDateTime time) {
time = time.withHour(0).withMinute(0).withSecond(0).withNano(0);
return switch (this) {
case dd -> time.with(TemporalAdjusters.firstDayOfMonth());
case mm -> time.with(TemporalAdjusters.firstDayOfYear());
default -> null;
};
}
/**
* 获取当前时间的标准格式
* 若当前是dd的2023-09-12 12:00:00 则标准格式为dd的2023-09-12 00:00:00
* 若当前是mm的2023-09-12 12:00:00 则标准格式为dd的2023-09-01 00:00:00
* 若当前是yy的2023-09-12 12:00:00 则标准格式为dd的2023-01-01 00:00:00
*/
public LocalDateTime convertStandardTime(LocalDateTime time) {
time = time.withHour(0).withMinute(0).withSecond(0).withNano(0);
return switch (this) {
case dd -> time;
case mm -> time.with(TemporalAdjusters.firstDayOfMonth());
case yy -> time.with(TemporalAdjusters.firstDayOfYear());
default -> null;
};
}
public String nextAttributeTypeTime(String timeStr) {
LocalDateTime time = DateTimeUtils.parseDateTime(timeStr);
return Objects.requireNonNull(nextAttributeTypeTime(time))
.format(DateTimeUtils.DATE_TIME_PATTERN);
}
public String convertStandardTime(String timeStr) {
LocalDateTime time = DateTimeUtils.parseDateTime(timeStr);
return Objects.requireNonNull(convertStandardTime(time))
.format(DateTimeUtils.DATE_TIME_PATTERN);
}
public boolean isCurrentType(String attributeType) {
return Objects.equals(this.name(), attributeType);
}
public static String removeSuffix(String attrCode) {
if (attrCode.endsWith("am")
|| attrCode.endsWith("hh")
|| attrCode.endsWith("dd")
|| attrCode.endsWith("mm")
|| attrCode.endsWith("yy")) {
return attrCode.substring(0, attrCode.length() - 2);
}
return attrCode;
}
}

16
common/core/src/main/java/com/thing/common/core/enumeration/CacheEventType.java

@ -0,0 +1,16 @@
package com.thing.common.core.enumeration;
public enum CacheEventType {
/**
* 计算缓存
*/
CALCULATION_CACHE,
/**
* 告警缓存
*/
ALARM_CACHE,
/**
* 告警动作缓存
*/
ALARM_ACTION_CACHE
}

35
common/core/src/main/java/com/thing/common/core/enumeration/CalculationStatusEnum.java

@ -0,0 +1,35 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 计算数据类型
*/
@Getter
@AllArgsConstructor
public enum CalculationStatusEnum {
/**
* 数据缺失
*/
MISS("0"),
/**
* 默认值
*/
DEFAULT("1"),
/**
* 计算失败
*/
ERROR("2"),
/**
* 计算成功
*/
SUCCESS("3"),
/**
* 推送tb失败
*/
FAIL("4");
private final String value;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/CalculationSymbol.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.Getter;
/** 计算符号 */
public enum CalculationSymbol {
/** 大于 */
greater(">"),
/** 小于 */
less("<"),
/** 大于等于 */
greaterEqual(">="),
/** 小于等于 */
lessEqual("<=");
@Getter
private final String name;
CalculationSymbol(String name) {
this.name = name;
}
}

35
common/core/src/main/java/com/thing/common/core/enumeration/CarbonLifecycleEnum.java

@ -0,0 +1,35 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* @author siyang
* @date 2024/5/29 14:46
* @description 默认碳足迹生命周期枚举
*/
@Getter
@AllArgsConstructor
public enum CarbonLifecycleEnum {
MATERIAL_PURCHASE_TRANSPORT("原材料获取", 1),
PRODUCT_MANUFACTURE("生产制造", 2),
PRODUCT_TRANSPORT("运输", 3),
PRODUCT_USAGE("产品使用", 4),
DISPOSE("废弃处理", 5);
/** 描述 */
private final String desc;
/** 生命周期阶段 */
private final Integer stage;
public static CarbonLifecycleEnum match(Integer stage) {
return Arrays.stream(CarbonLifecycleEnum.values())
.filter(item -> Objects.equals(item.getStage(), stage))
.findFirst()
.orElse(null);
}
}

49
common/core/src/main/java/com/thing/common/core/enumeration/CloudService.java

@ -0,0 +1,49 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Stream;
/**
* 云服务商
*/
@Getter
@AllArgsConstructor
public enum CloudService {
/**
* 七牛云
*/
QINIU(1),
/**
* 阿里云
*/
ALIYUN(2),
/**
* 腾讯云
*/
QCLOUD(3),
/**
* FASTDFS
*/
FASTDFS(4),
/**
* 本地
*/
LOCAL(5),
/**
* MinIO
*/
MINIO(6);
private final int value;
public static CloudService match(int value) {
return Arrays.stream(CloudService.values())
.filter(item -> Objects.equals(item.getValue(), value))
.findFirst()
.orElse(null);
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/ColumnRelationType.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 字段关联类型
*/
@Getter
@AllArgsConstructor
public enum ColumnRelationType {
/**
* 映射
*/
MAPPING("0"),
/**
* 相等
*/
EQUAL("1");
private final String type;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/CompanyType.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 企业类型
*/
@Getter
@AllArgsConstructor
public enum CompanyType {
/**
* 企业角色
*/
COMPANY("0"),
/**
* 用户角色
*/
TENANT("1");
private final String value;
}

68
common/core/src/main/java/com/thing/common/core/enumeration/ConfigTypeEnum.java

@ -0,0 +1,68 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
/**
* 数据处理类型
*/
@Getter
@AllArgsConstructor
public enum ConfigTypeEnum {
/**
* 监控
*/
MONITORING("1"),
/**
* 用量
*/
USAGE("2"),
/**
* 数据报表
*/
DATA_REPORT("3"),
/**
* 设备管理
*/
DEVICE_MANAGEMENT("4"),
/**
* 用能统计报表
*/
ENERGY("5"),
/**
* 碳排统计报表
*/
CARBON("6"),
/**
* 碳排放监控
*/
CARBON_EMISSIONS("11"),
/**
* 企业数据维护
*/
CORPORATE_DATA("12"),
/**
* 碳排分析设置
*/
CARBON_ANALYSIS("13");
private final String value;
public static ConfigTypeEnum match(String configType) {
return Arrays.stream(ConfigTypeEnum.values())
.filter(item -> Objects.equals(item.getValue(), configType))
.findFirst()
.orElse(null);
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/ContainsCondition.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 树检索是否包含本身节点的情况
*/
@Getter
@AllArgsConstructor
public enum ContainsCondition {
/**
* 包含
*/
CONTAIN("0"),
/**
* 不包含
*/
REMOVE("1");
private final String value;
}

28
common/core/src/main/java/com/thing/common/core/enumeration/DataBaseType.java

@ -0,0 +1,28 @@
package com.thing.common.core.enumeration;
import java.util.Objects;
public enum DataBaseType {
MYSQL,POSTGRES,CLICKHOUSE,TIDB;
/**
* 匹配 统计 函数
* @param dataBaseType
* @param agg
* @return
*/
public static String statisticalAggFun(DataBaseType dataBaseType, AggType agg) {
if(Objects.requireNonNull(agg) == AggType.COUNT){
return agg+ "(val)";
}
if (Objects.requireNonNull(dataBaseType) == DataBaseType.MYSQL || Objects.requireNonNull(dataBaseType) == DataBaseType.TIDB || Objects.requireNonNull(dataBaseType) == DataBaseType.POSTGRES) {
return "ROUND(" +agg+ "(CAST(val AS DECIMAL)), 2)";
}
if (Objects.requireNonNull(dataBaseType) == DataBaseType.CLICKHOUSE) {
return "ROUND(" +agg+ "(CAST(val AS Float64)), 2)";
}
throw new IllegalArgumentException("Unsupported database type: " + dataBaseType);
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/DataTreatingMarkEnum.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据处理类型
*/
@Getter
@AllArgsConstructor
public enum DataTreatingMarkEnum {
/**
* 处理
*/
DISPOSE("1"),
/**
* 未处理
*/
UNTREATED("0");
private final String value;
}

55
common/core/src/main/java/com/thing/common/core/enumeration/DatasetAttrTimestampType.java

@ -0,0 +1,55 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集物关系上下级状态
*/
@Getter
@AllArgsConstructor
public enum DatasetAttrTimestampType {
/**
* 无值
*/
NONE("none") ,
/**
* 最近一天
*/
LASTESTDAY("1"),
/**
* 最近一周
*/
LASTESTWEEK("2"),
/**
* 最近一月
*/
LASTESTMONTH("3"),
/**
* 最近一年
*/
LASTESTYEAR("4"),
/**
* 任意时间
*/
ANYTIME("5"),
/**
* 最新值
*/
LASTEST("last"),
/**
* 最近一天 老项目在两个地方定义了最近一天这个枚举, 这里做个兼容吧
*/
NEAREST("nearest"),
/**
* 区间
*/
RANGE("range"),
/**
* 时间段
*/
INTERVAL("interval");
private final String type;
}

31
common/core/src/main/java/com/thing/common/core/enumeration/DatasetInterValType.java

@ -0,0 +1,31 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集状态
*/
@Getter
@AllArgsConstructor
public enum DatasetInterValType {
/**
* 最新值
*/
DAY("day"),
/**
* 最近一天
*/
WEEK("week"),
/**
* 最近一周
*/
MONTH("month"),
/**
* 时间段
*/
YEAR("year");
private final String type;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/DatasetSeparateAttr.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集设备分属性
*/
@Getter
@AllArgsConstructor
public enum DatasetSeparateAttr {
/**
* 分属性
*/
SEPARATE("0"),
/**
* 不分属性
*/
NO_SEPARATE("1");
private final String value;
}

24
common/core/src/main/java/com/thing/common/core/enumeration/DatasetStatus.java

@ -0,0 +1,24 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集是否开启
*/
@Getter
@AllArgsConstructor
public enum DatasetStatus {
/**
* 开启
*/
START("1"),
/**
* 关闭
*/
STOP("0");
private final String status;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/DatasetThingRelationStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集物关系上下级状态
*/
@Getter
@AllArgsConstructor
public enum DatasetThingRelationStatus {
/**
* 向上级
*/
PU,
/**
* 向下级
*/
PD;
}

39
common/core/src/main/java/com/thing/common/core/enumeration/DefaultType.java

@ -0,0 +1,39 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum DefaultType {
/**
* 物类型
*/
THING("默认物类型"),
/**
* 组类型
*/
GROUP("默认组类型"),
/**
* 字典类型
*/
DICT("默认字典类型"),
/**
* 关系类型
*/
RELATION("默认关系类型"),
/**
* 设备类型
*/
EQUIPMENT("设备类型"),
/**
* 备件类型
*/
EQUIPMENT_PART("备件类型");
private final String value;
}

27
common/core/src/main/java/com/thing/common/core/enumeration/DeleteEnum.java

@ -0,0 +1,27 @@
package com.thing.common.core.enumeration;
/**
* 删除标记枚举
*
* @author Mark sunlightcs@gmail.com
*/
public enum DeleteEnum {
/**
* 删除
*/
YES(1),
/**
* 未删除
*/
NO(0);
private int value;
DeleteEnum(int value) {
this.value = value;
}
public int value() {
return this.value;
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/DeviceSendCmdStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 设备指令下发状态
*/
@Getter
@AllArgsConstructor
public enum DeviceSendCmdStatus {
/**
* 失败
*/
FAILURE("0"),
/**
* 成功
*/
SUCCESS("1");
private final String value;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/DeviceTemplateMark.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 设备是否是模板
*/
@Getter
@AllArgsConstructor
public enum DeviceTemplateMark {
/**
* 模板
*/
TEMPLATE("0"),
/**
* 设备
*/
DEVICE("1");
private final String value;
}

26
common/core/src/main/java/com/thing/common/core/enumeration/DictRelationEnum.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 物关系类型
*/
@Getter
@AllArgsConstructor
public enum DictRelationEnum {
/**
*
*/
FROM_TYPE_THING("thing"),
/**
* 模板
*/
FROM_TYPE_TEMPLATE("template"),
/**
* 关系
*/
FROM_TYPE_RELATION("relation");
private final String value;
}

60
common/core/src/main/java/com/thing/common/core/enumeration/DictTypeEnum.java

@ -0,0 +1,60 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
/**
* 物关系类型
*/
@Getter
@AllArgsConstructor
public enum DictTypeEnum {
/**
* 默认
*/
DEFAULTTYPE("默认","default",1),
/**
* 瞬时
*/
INSTANT("瞬时","instant",2),
/**
* 递增
*/
INCREASE("递增","increase",3),
/**
* 区间
*/
REGION("区间","region",4),
/**
* 控制
*/
CONTROL("控制","control",5) ,
/**
* 告警
*/
ALARM("告警","alarm",6);
private final String name;
private final String type;
private final Integer sort;
public static String match(String type) {
Optional<DictTypeEnum> first = Arrays.stream(DictTypeEnum.values())
.filter(dictTypeEnum -> StringUtils.equals(type, dictTypeEnum.getType()))
.findFirst();
if(first.isPresent()){
return first.get().getName();
}
return "";
}
}

23
common/core/src/main/java/com/thing/common/core/enumeration/EnergyVarietyEnum.java

@ -0,0 +1,23 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
@Getter
@AllArgsConstructor
public enum EnergyVarietyEnum {
A("A", "电"),
C("C", "天然气");
private final String prefix;
private final String name;
public static EnergyVarietyEnum getByPrefix(String prefix) {
return Arrays.stream(EnergyVarietyEnum.values())
.filter(item -> Objects.equals(item.prefix, prefix))
.findFirst()
.orElse(null);
}
}

41
common/core/src/main/java/com/thing/common/core/enumeration/ExtendRelationType.java

@ -0,0 +1,41 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
/**
* 类型
*/
@Getter
@AllArgsConstructor
public enum ExtendRelationType {
/**
* 读写
*/
READ("读"),
WRITE("写")
/*,
ALL("读写")*/;
private final String name;
public static List<String> getRead() {
return List.of(READ.name()/*, ALL.name()*/);
}
public static List<String> getWrite() {
return List.of(WRITE.name()/*, ALL.name()*/);
}
public static String getByName(String name) {
return Arrays.stream(ExtendRelationType.values())
.filter(type -> StringUtils.equals(type.getName(), StringUtils.trim(name)))
.findFirst()
.orElseThrow(() -> new RuntimeException(name + "未匹配"))
.name();
}
}

31
common/core/src/main/java/com/thing/common/core/enumeration/FormulaSymbols.java

@ -0,0 +1,31 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据集状态
*/
@Getter
@AllArgsConstructor
public enum FormulaSymbols {
/**
* 加号
*/
PLUS("+"),
/**
* 减号
*/
MINUS("-"),
/**
* 乘号
*/
MULTIPLE("*"),
/**
* 除号
*/
DIVISION("/");
private final String symbols;
}

29
common/core/src/main/java/com/thing/common/core/enumeration/GateWayStatus.java

@ -0,0 +1,29 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* 物是否为网关
*/
@Getter
@AllArgsConstructor
public enum GateWayStatus {
/**
* 网关
*/
GATE_WAY("1"),
/**
* 非网关--即设备
*/
NO_GATE_WAY("0");
private final String value;
public static boolean noneMatch(String status){
return Arrays.stream(GateWayStatus.values()).noneMatch(s-> StringUtils.equals(s.getValue(),status));
}
}

50
common/core/src/main/java/com/thing/common/core/enumeration/Granularity.java

@ -0,0 +1,50 @@
package com.thing.common.core.enumeration;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* tb api支持的时间粒度请不要随便新增若要新增其他方式请@author
*/
@Getter
@AllArgsConstructor
public enum Granularity {
// 以小时计
HOUR("hh"),
// 以天计
DAY("dd"),
// 以月计
MONTH("mm");
private final String suffix;
public static List<Map<String, Object>> mapList() {
List<Map<String, Object>> list = Lists.newArrayList();
for (Granularity granularity : Granularity.values()) {
Map<String, Object> map = Maps.newHashMap();
map.put("code", granularity.getSuffix());
map.put("granularity", granularity);
list.add(map);
}
return list;
}
public static Granularity get(String suffix) {
if (StringUtils.isBlank(suffix)) {
return null;
}
return Arrays.stream(Granularity.values())
.filter(item -> StringUtils.equals(item.suffix, suffix))
.findFirst()
.orElse(null);
}
}

70
common/core/src/main/java/com/thing/common/core/enumeration/GroupTypeEnum.java

@ -0,0 +1,70 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* 组关系类型
*/
@Getter
@AllArgsConstructor
public enum GroupTypeEnum {
/**
*
*/
THING("thing", "物", "默认实体组", "物实体组"),
/**
* 属性
*/
ATTR("attr", "属性", "默认属性组", "物属性组"),
/**
* 标签
*/
TAG("tag", "标签", "默认标签组", "物标签组"),
/**
* 素材
*/
MATERIAL("material", "素材", "默认素材组", "素材组"),
/**
* 部件
*/
SECTION("section", "部件", "默认部件组", "部件组"),
/**
* 关系
*/
THING_RELATION("relation", "物关系", "默认物关系组", "物关系组"),
/**
* 关系 TODO 这个已经不存在了
*/
THING_TYPE("type", "物类型", "默认物类型组", "物类型组");
private final String value;
private final String name;
private final String group;
private final String custom;
public static String getDefaultGroupName(String value) {
if (StringUtils.isBlank(value)) {
return value;
}
for (GroupTypeEnum groupTypeEnum : GroupTypeEnum.values()) {
if (StringUtils.equalsAnyIgnoreCase(groupTypeEnum.getValue(), value)) {
return groupTypeEnum.getGroup();
}
}
return value;
}
public static boolean noneMatch(String type){
return Arrays.stream(GroupTypeEnum.values()).noneMatch(s-> StringUtils.equals(s.getValue(),type));
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/IntervalPushStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 开启关闭间隔推送
*/
@Getter
@AllArgsConstructor
public enum IntervalPushStatus {
/**
* 开启
*/
ON("0"),
/**
* 关闭
*/
OFF("1");
private final String status;
}

21
common/core/src/main/java/com/thing/common/core/enumeration/IsDefaultEnum.java

@ -0,0 +1,21 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 字典存储类型
*/
@Getter
@AllArgsConstructor
public enum IsDefaultEnum {
/**
* 系统字典
*/
Y(0),
/**
* 自定义字典
*/
N(1);
private final Integer value;
}

28
common/core/src/main/java/com/thing/common/core/enumeration/MenuTypeEnum.java

@ -0,0 +1,28 @@
package com.thing.common.core.enumeration;
/**
* 菜单类型枚举
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
public enum MenuTypeEnum {
/**
* 菜单
*/
MENU(0),
/**
* 按钮
*/
BUTTON(1);
private int value;
MenuTypeEnum(int value) {
this.value = value;
}
public int value() {
return this.value;
}
}

64
common/core/src/main/java/com/thing/common/core/enumeration/MimeTypeEnum.java

@ -0,0 +1,64 @@
package com.thing.common.core.enumeration;
import cn.hutool.core.collection.CollectionUtil;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* MimeType找不全还是用后缀吧...
*
* @author zhenghh. 2022-01-14
**/
public enum MimeTypeEnum {
/**
* 图片格式
*/
jpg, jpeg, png, gif, bmp, ico, jfif, webp, tif, tiff, tga, svg,
/**
* office
*/
doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx, xlam, xla, wps, dps, et, ett, wpt, odt, ods, ots, odp, otp, six, ott, fodt, fods,
/**
* 3d模型
* 3ds, 3dm, 3mf
*/
obj, stl, ply, gltf, glb, off, fbx, dae, wrl, ifc, brep, step, iges, fcstd, bim,
/**
* 文档
*/
pdf, ofd, rtf;
/**
* 获取所有图片格式
*
* @return list
*/
public static List<String> getImageMimeType() {
return CollectionUtil.newArrayList(jpg.name(), jpeg.name(), png.name(), gif.name(), bmp.name(), ico.name(),
jfif.name(), webp.name(), tif.name(), tiff.name(), tga.name(), svg.name());
}
/**
* 获取所有文件格式
*
* @return list
*/
public static List<String> getAllMimeType() {
List<String> list = CollectionUtil.newArrayList(Arrays.stream(MimeTypeEnum.values()).map(Enum::name).collect(Collectors.toList()));
list.add("3ds");
list.add("3dm");
list.add("3mf");
return list;
}
public static void main(String[] args) {
System.out.println(FilenameUtils.isExtension(StringUtils.lowerCase("D://1.3ds"), MimeTypeEnum.getAllMimeType()));
}
}

353
common/core/src/main/java/com/thing/common/core/enumeration/MinioFileContentTypeEnum.java

@ -0,0 +1,353 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
@Getter
@AllArgsConstructor
public enum MinioFileContentTypeEnum {
/**
* contentType
*/
TYPE1(".*", "application/octet-stream"),
TYPE2(".001", "application/x-001"),
TYPE3(".301", "application/x-301"),
TYPE4(".323", "text/h323"),
TYPE5(".906", "application/x-906"),
TYPE6(".907", "drawing/907"),
TYPE7(".a11", "application/x-a11"),
TYPE8(".acp", "audio/x-mei-aac"),
TYPE9(".ai", "application/postscript"),
TYPE10(".aif", "audio/aiff"),
TYPE11(".aifc", "audio/aiff"),
TYPE12(".aiff", "audio/aiff"),
TYPE13(".anv", "application/x-anv"),
TYPE14(".asa", "text/asa"),
TYPE15(".asf", "video/x-ms-asf"),
TYPE16(".asp", "text/asp"),
TYPE17(".asx", "video/x-ms-asf"),
TYPE18(".au", "audio/basic"),
TYPE19(".avi", "video/avi"),
TYPE20(".awf", "application/vnd.adobe.workflow"),
TYPE21(".biz", "text/xml"),
TYPE22(".bmp", "application/x-bmp"),
TYPE23(".bot", "application/x-bot"),
TYPE24(".c4t", "application/x-c4t"),
TYPE25(".c90", "application/x-c90"),
TYPE26(".cal", "application/x-cals"),
TYPE27(".cat", "application/s-pki.seccat"),
TYPE28(".cdf", "application/x-netcdf"),
TYPE29(".cdr", "application/x-cdr"),
TYPE30(".cel", "application/x-cel"),
TYPE31(".cer", "application/x-x509-ca-cert"),
TYPE32(".cg4", "application/x-g4"),
TYPE33(".cgm", "application/x-cgm"),
TYPE34(".cit", "application/x-cit"),
TYPE35(".class", "java/*"),
TYPE36(".cml", "text/xml"),
TYPE37(".cmp", "application/x-cmp"),
TYPE38(".cmx", "application/x-cmx"),
TYPE39(".cot", "application/x-cot"),
TYPE40(".crl", "application/pkix-crl"),
TYPE41(".crt", "application/x-x509-ca-cert"),
TYPE42(".csi", "application/x-csi"),
TYPE43(".css", "text/css"),
TYPE44(".cut", "application/x-cut"),
TYPE45(".dbf", "application/x-dbf"),
TYPE46(".dbm", "application/x-dbm"),
TYPE47(".dbx", "application/x-dbx"),
TYPE48(".dcd", "text/xml"),
TYPE49(".dcx", "application/x-dcx"),
TYPE50(".der", "application/x-x509-ca-cert"),
TYPE51(".dgn", "application/x-dgn"),
TYPE52(".dib", "application/x-dib"),
TYPE53(".dll", "application/x-msdownload"),
TYPE54(".doc", "application/msword"),
TYPE55(".dot", "application/msword"),
TYPE56(".drw", "application/x-drw"),
TYPE57(".dtd", "text/xml"),
TYPE58(".dwf", "Model/vnd.dwf"),
TYPE59(".dwg", "application/x-dwg"),
TYPE60(".dxb", "application/x-dxb"),
TYPE61(".dxf", "application/x-dxf"),
TYPE62(".edn", "application/vnd.adobe.edn"),
TYPE63(".emf", "application/x-emf"),
TYPE64(".eml", "message/rfc822"),
TYPE65(".ent", "text/xml"),
TYPE66(".epi", "application/x-epi"),
TYPE67(".eps", "application/x-ps"),
TYPE68(".etd", "application/x-ebx"),
TYPE69(".exe", "application/x-msdownload"),
TYPE70(".fax", "image/fax"),
TYPE71(".fdf", "application/vnd.fdf"),
TYPE72(".fif", "application/fractals"),
TYPE73(".fo", "text/xml"),
TYPE74(".frm", "application/x-frm"),
TYPE75(".g4", "application/x-g4"),
TYPE76(".gbr", "application/x-gbr"),
TYPE77(".gcd", "application/x-gcd"),
TYPE78(".gif", "image/gif"),
TYPE79(".gl2", "application/x-gl2"),
TYPE80(".gp4", "application/x-gp4"),
TYPE81(".hgl", "application/x-hgl"),
TYPE82(".hmr", "application/x-hmr"),
TYPE83(".hpg", "application/x-hpgl"),
TYPE84(".hpl", "application/x-hpl"),
TYPE85(".hqx", "application/mac-binhex40"),
TYPE86(".hrf", "application/x-hrf"),
TYPE87(".hta", "application/hta"),
TYPE88(".htc", "text/x-component"),
TYPE89(".htm", "text/html"),
TYPE90(".html", "text/html"),
TYPE91(".htt", "text/webviewhtml"),
TYPE92(".htx", "text/html"),
TYPE93(".icb", "application/x-icb"),
TYPE94(".ico", "image/x-icon"),
TYPE95(".iff", "application/x-iff"),
TYPE96(".ig4", "application/x-g4"),
TYPE97(".igs", "application/x-igs"),
TYPE98(".iii", "application/x-iphone"),
TYPE99(".img", "application/x-img"),
TYPE100(".ins", "application/x-internet-signup"),
TYPE101(".isp", "application/x-internet-signup"),
TYPE102(".IVF", "video/x-ivf"),
TYPE103(".java", "java/*"),
TYPE104(".jfif", "image/jpeg"),
TYPE105(".jpe", "image/jpeg"),
TYPE106(".jpeg", "image/jpeg"),
TYPE107(".jpg", "image/jpeg"),
TYPE108(".js", "application/x-javascript"),
TYPE109(".jsp", "text/html"),
TYPE110(".la1", "audio/x-liquid-file"),
TYPE111(".lar", "application/x-laplayer-reg"),
TYPE112(".latex", "application/x-latex"),
TYPE113(".lavs", "audio/x-liquid-secure"),
TYPE114(".lbm", "application/x-lbm"),
TYPE115(".lmsff", "audio/x-la-lms"),
TYPE116(".ls", "application/x-javascript"),
TYPE117(".ltr", "application/x-ltr"),
TYPE118(".m1v", "video/x-mpeg"),
TYPE119(".m2v", "video/x-mpeg"),
TYPE120(".m3u", "audio/mpegurl"),
TYPE121(".m4e", "video/mpeg4"),
TYPE122(".mac", "application/x-mac"),
TYPE123(".man", "application/x-troff-man"),
TYPE124(".math", "text/xml"),
TYPE125(".mdb", "application/x-mdb"),
TYPE126(".mfp", "application/x-shockwave-flash"),
TYPE127(".mht", "message/rfc822"),
TYPE128(".mhtml", "message/rfc822"),
TYPE129(".mi", "application/x-mi"),
TYPE130(".mid", "audio/mid"),
TYPE131(".midi", "audio/mid"),
TYPE132(".mil", "application/x-mil"),
TYPE133(".mml", "text/xml"),
TYPE134(".mnd", "audio/x-musicnet-download"),
TYPE135(".mns", "audio/x-musicnet-stream"),
TYPE136(".mocha", "application/x-javascript"),
TYPE137(".movie", "video/x-sgi-movie"),
TYPE138(".mp1", "audio/mp1"),
TYPE139(".mp2", "audio/mp2"),
TYPE140(".mp2v", "video/mpeg"),
TYPE141(".mp3", "audio/mp3"),
TYPE142(".mp4", "video/mp4"),
TYPE143(".mpa", "video/x-mpg"),
TYPE144(".mpd", "application/-project"),
TYPE145(".mpe", "video/x-mpeg"),
TYPE146(".mpeg", "video/mpg"),
TYPE147(".mpg", "video/mpg"),
TYPE148(".mpga", "audio/rn-mpeg"),
TYPE149(".mpp", "application/-project"),
TYPE150(".mps", "video/x-mpeg"),
TYPE151(".mpt", "application/-project"),
TYPE152(".mpv", "video/mpg"),
TYPE153(".mpv2", "video/mpeg"),
TYPE154(".mpw", "application/s-project"),
TYPE155(".mpx", "application/-project"),
TYPE156(".mtx", "text/xml"),
TYPE157(".mxp", "application/x-mmxp"),
TYPE158(".net", "image/pnetvue"),
TYPE159(".nrf", "application/x-nrf"),
TYPE160(".nws", "message/rfc822"),
TYPE161(".odc", "text/x-ms-odc"),
TYPE162(".out", "application/x-out"),
TYPE163(".p10", "application/pkcs10"),
TYPE164(".p12", "application/x-pkcs12"),
TYPE165(".p7b", "application/x-pkcs7-certificates"),
TYPE166(".p7c", "application/pkcs7-mime"),
TYPE167(".p7m", "application/pkcs7-mime"),
TYPE168(".p7r", "application/x-pkcs7-certreqresp"),
TYPE169(".p7s", "application/pkcs7-signature"),
TYPE170(".pc5", "application/x-pc5"),
TYPE171(".pci", "application/x-pci"),
TYPE172(".pcl", "application/x-pcl"),
TYPE173(".pcx", "application/x-pcx"),
TYPE174(".pdf", "application/pdf"),
TYPE175(".pdx", "application/vnd.adobe.pdx"),
TYPE176(".pfx", "application/x-pkcs12"),
TYPE177(".pgl", "application/x-pgl"),
TYPE178(".pic", "application/x-pic"),
TYPE179(".pko", "application-pki.pko"),
TYPE180(".pl", "application/x-perl"),
TYPE181(".plg", "text/html"),
TYPE182(".pls", "audio/scpls"),
TYPE183(".plt", "application/x-plt"),
TYPE184(".png", "image/png"),
TYPE185(".pot", "applications-powerpoint"),
TYPE186(".ppa", "application/vs-powerpoint"),
TYPE187(".ppm", "application/x-ppm"),
TYPE188(".pps", "application-powerpoint"),
TYPE189(".ppt", "applications-powerpoint"),
TYPE190(".pr", "application/x-pr"),
TYPE191(".prf", "application/pics-rules"),
TYPE192(".prn", "application/x-prn"),
TYPE193(".prt", "application/x-prt"),
TYPE194(".ps", "application/postscript"),
TYPE195(".ptn", "application/x-ptn"),
TYPE196(".pwz", "application/powerpoint"),
TYPE197(".r3t", "text/vnd.rn-realtext3d"),
TYPE198(".ra", "audio/vnd.rn-realaudio"),
TYPE199(".ram", "audio/x-pn-realaudio"),
TYPE200(".ras", "application/x-ras"),
TYPE201(".rat", "application/rat-file"),
TYPE202(".rdf", "text/xml"),
TYPE203(".rec", "application/vnd.rn-recording"),
TYPE204(".red", "application/x-red"),
TYPE205(".rgb", "application/x-rgb"),
TYPE206(".rjs", "application/vnd.rn-realsystem-rjs"),
TYPE207(".rjt", "application/vnd.rn-realsystem-rjt"),
TYPE208(".rlc", "application/x-rlc"),
TYPE209(".rle", "application/x-rle"),
TYPE210(".rm", "application/vnd.rn-realmedia"),
TYPE211(".rmf", "application/vnd.adobe.rmf"),
TYPE212(".rmi", "audio/mid"),
TYPE213(".rmj", "application/vnd.rn-realsystem-rmj"),
TYPE214(".rmm", "audio/x-pn-realaudio"),
TYPE215(".rmp", "application/vnd.rn-rn_music_package"),
TYPE216(".rms", "application/vnd.rn-realmedia-secure"),
TYPE217(".rmvb", "application/vnd.rn-realmedia-vbr"),
TYPE218(".rmx", "application/vnd.rn-realsystem-rmx"),
TYPE219(".rnx", "application/vnd.rn-realplayer"),
TYPE220(".rp", "image/vnd.rn-realpix"),
TYPE221(".rpm", "audio/x-pn-realaudio-plugin"),
TYPE222(".rsml", "application/vnd.rn-rsml"),
TYPE223(".rt", "text/vnd.rn-realtext"),
TYPE224(".rtf", "application/x-rtf"),
TYPE225(".rv", "video/vnd.rn-realvideo"),
TYPE226(".sam", "application/x-sam"),
TYPE227(".sat", "application/x-sat"),
TYPE228(".sdp", "application/sdp"),
TYPE229(".sdw", "application/x-sdw"),
TYPE230(".sit", "application/x-stuffit"),
TYPE231(".slb", "application/x-slb"),
TYPE232(".sld", "application/x-sld"),
TYPE233(".slk", "drawing/x-slk"),
TYPE234(".smi", "application/smil"),
TYPE235(".smil", "application/smil"),
TYPE236(".smk", "application/x-smk"),
TYPE237(".snd", "audio/basic"),
TYPE238(".sol", "text/plain"),
TYPE239(".sor", "text/plain"),
TYPE240(".spc", "application/x-pkcs7-certificates"),
TYPE241(".spl", "application/futuresplash"),
TYPE242(".spp", "text/xml"),
TYPE243(".ssm", "application/streamingmedia"),
TYPE244(".sst", "application-pki.certstore"),
TYPE245(".stl", "application/-pki.stl"),
TYPE246(".stm", "text/html"),
TYPE247(".sty", "application/x-sty"),
TYPE248(".svg", "image/svg+xml"),
TYPE249(".swf", "application/x-shockwave-flash"),
TYPE250(".tdf", "application/x-tdf"),
TYPE251(".tg4", "application/x-tg4"),
TYPE252(".tga", "application/x-tga"),
TYPE253(".tif", "image/tiff"),
TYPE254(".tiff", "image/tiff"),
TYPE255(".tld", "text/xml"),
TYPE256(".top", "drawing/x-top"),
TYPE257(".torrent", "application/x-bittorrent"),
TYPE258(".tsd", "text/xml"),
TYPE259(".txt", "text/plain"),
TYPE260(".uin", "application/x-icq"),
TYPE261(".uls", "text/iuls"),
TYPE262(".vcf", "text/x-vcard"),
TYPE263(".vda", "application/x-vda"),
TYPE264(".vdx", "application/vnd.visio"),
TYPE265(".vml", "text/xml"),
TYPE266(".vpg", "application/x-vpeg005"),
TYPE267(".vsd", "application/x-vsd"),
TYPE268(".vss", "application/vnd.visio"),
TYPE269(".vst", "application/x-vst"),
TYPE270(".vsw", "application/vnd.visio"),
TYPE271(".vsx", "application/vnd.visio"),
TYPE272(".vtx", "application/vnd.visio"),
TYPE273(".vxml", "text/xml"),
TYPE274(".wav", "audio/wav"),
TYPE275(".wax", "audio/x-ms-wax"),
TYPE276(".wb1", "application/x-wb1"),
TYPE277(".wb2", "application/x-wb2"),
TYPE278(".wb3", "application/x-wb3"),
TYPE279(".wbmp", "image/vnd.wap.wbmp"),
TYPE280(".wiz", "application/msword"),
TYPE281(".wk3", "application/x-wk3"),
TYPE282(".wk4", "application/x-wk4"),
TYPE283(".wkq", "application/x-wkq"),
TYPE284(".wks", "application/x-wks"),
TYPE285(".wm", "video/x-ms-wm"),
TYPE286(".wma", "audio/x-ms-wma"),
TYPE287(".wmd", "application/x-ms-wmd"),
TYPE288(".wmf", "application/x-wmf"),
TYPE289(".wml", "text/vnd.wap.wml"),
TYPE290(".wmv", "video/x-ms-wmv"),
TYPE291(".wmx", "video/x-ms-wmx"),
TYPE292(".wmz", "application/x-ms-wmz"),
TYPE293(".wp6", "application/x-wp6"),
TYPE294(".wpd", "application/x-wpd"),
TYPE295(".wpg", "application/x-wpg"),
TYPE296(".wpl", "application/-wpl"),
TYPE297(".wq1", "application/x-wq1"),
TYPE298(".wr1", "application/x-wr1"),
TYPE299(".wri", "application/x-wri"),
TYPE300(".wrk", "application/x-wrk"),
TYPE301(".ws", "application/x-ws"),
TYPE302(".ws2", "application/x-ws"),
TYPE303(".wsc", "text/scriptlet"),
TYPE304(".wsdl", "text/xml"),
TYPE305(".wvx", "video/x-ms-wvx"),
TYPE306(".xdp", "application/vnd.adobe.xdp"),
TYPE307(".xdr", "text/xml"),
TYPE308(".xfd", "application/vnd.adobe.xfd"),
TYPE309(".xfdf", "application/vnd.adobe.xfdf"),
TYPE310(".xhtml", "text/html"),
TYPE311(".xls", "application/x-xls"),
TYPE312(".xlw", "application/x-xlw"),
TYPE313(".xml", "text/xml"),
TYPE314(".xpl", "audio/scpls"),
TYPE315(".xq", "text/xml"),
TYPE316(".xql", "text/xml"),
TYPE317(".xquery", "text/xml"),
TYPE318(".xsd", "text/xml"),
TYPE319(".xsl", "text/xml"),
TYPE320(".xslt", "text/xml"),
TYPE321(".xwd", "application/x-xwd"),
TYPE322(".x_b", "application/x-x_b"),
TYPE323(".x_t", "application/x-x_t");
private final String suffix;
private final String contentType;
/**
* 获取所有文件格式
*
* @return list
*/
public static Map<String, Object> getKeyCodeMap() {
return Arrays.stream(MinioFileContentTypeEnum.values()).collect(Collectors.toMap(MinioFileContentTypeEnum::getSuffix, MinioFileContentTypeEnum::getContentType));
}
}

38
common/core/src/main/java/com/thing/common/core/enumeration/MonitorPolymerizationType.java

@ -0,0 +1,38 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 聚合函数类型
*/
@Getter
@AllArgsConstructor
public enum MonitorPolymerizationType {
/**
* 最大
*/
MAX("max"),
/**
* 最小
*/
MIN("min"),
/**
* 平均
*/
AVG("avg"),
/**
* 求和
*/
SUM("sum"),
/**
* 计数
*/
COUNT("count"),
/**
*
*/
BLANK("blank");
private final String name;
}

30
common/core/src/main/java/com/thing/common/core/enumeration/MonitorTimeType.java

@ -0,0 +1,30 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 监控分析时间类型
*/
@Getter
@AllArgsConstructor
public enum MonitorTimeType {
/**
* 最新
*/
LASTEST("lastest"),
/**
* 最近
*/
NEAREST("nearest"),
/**
* 区间
*/
INTERVAL("interval"),
/**
* 时间段
*/
RANGE("range");
private final String name;
}

34
common/core/src/main/java/com/thing/common/core/enumeration/MsgType.java

@ -0,0 +1,34 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 消息状态
*/
@Getter
@AllArgsConstructor
public enum MsgType {
/**
* 短信
*/
Sms("0"),
/**
* 邮箱
*/
Mail("1"),
/**
* 微信公众号
*/
WeChat("2"),
/**
* 钉钉
*/
DingTalk("3"),
/**
* 企业微信
*/
WeChatCom("4");
private final String value;
}

26
common/core/src/main/java/com/thing/common/core/enumeration/OrderStatus.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 订单状态
*/
@Getter
@AllArgsConstructor
public enum OrderStatus {
/**
* 已取消
*/
CANCEL(-1),
/**
* 等待付款
*/
WAITING(0),
/**
* 已完成
*/
FINISH(1);
private final int value;
}

25
common/core/src/main/java/com/thing/common/core/enumeration/PeakValleyEnum.java

@ -0,0 +1,25 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum PeakValleyEnum {
RUSH("rush", "尖"),
PEAK("peak", "峰"),
VALLEY("valley", "谷"),
NORMAL("normal", "平");
private final String code;
private final String name;
public static PeakValleyEnum match(String keyword) {
return Arrays.stream(PeakValleyEnum.values())
.filter(item -> keyword.contains(item.code))
.findFirst()
.orElse(null);
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/PermissionStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 字段是否需要关联权限
*/
@Getter
@AllArgsConstructor
public enum PermissionStatus {
/**
* 附带权限字段
*/
PERMISSION("0"),
/**
* 不附带权限字段
*/
NO_PERMISSION("1");
private final String status;
}

31
common/core/src/main/java/com/thing/common/core/enumeration/Protocol.java

@ -0,0 +1,31 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 协议
*/
@Getter
@AllArgsConstructor
public enum Protocol {
/**
* http
*/
HTTP("http"),
/**
* https
*/
HTTPS("https"),
/**
* ws
*/
WS("ws"),
/**
* tcp
*/
TCP("tcp");
private final String value;
}

25
common/core/src/main/java/com/thing/common/core/enumeration/ProtocolPrefix.java

@ -0,0 +1,25 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* tb api支持的时间粒度请不要随便新增若要新增其他方式请@author chenyang
*/
@Getter
@AllArgsConstructor
public enum ProtocolPrefix {
// http协议
HTTP("http://"),
// https协议
HTTPS("https://"),
// ws协议
WS("ws://"),
// tcp协议
TCP("tcp://");
private final String prefix;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/PushReceiveStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 推送接收的状态
*/
@Getter
@AllArgsConstructor
public enum PushReceiveStatus {
/**
* 已接收确认
*/
RECEIVE("0"),
/**
* 未接收确认
*/
NO_RECEIVE("1");
private final String status;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/PushStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 推送状态
*/
@Getter
@AllArgsConstructor
public enum PushStatus {
/**
* 成功
*/
SUCCESS("0"),
/**
* 失败
*/
FAIL("1");
private final String status;
}

12
common/core/src/main/java/com/thing/common/core/enumeration/QueryChannel.java

@ -0,0 +1,12 @@
package com.thing.common.core.enumeration;
public enum QueryChannel {
/**
* 从TB中查
*/
QUERY_FROM_TB,
/**
* 从DB中查
*/
QUERY_FROM_DB;
}

24
common/core/src/main/java/com/thing/common/core/enumeration/QueueEventType.java

@ -0,0 +1,24 @@
package com.thing.common.core.enumeration;
public enum QueueEventType {
/**
* 缓存
*/
CACHE,
/**
* 告警
*/
ALARM,
/**
* 计算
*/
CALCULATION,
/**
* 看板
*/
SOCKET,
/**
* 设备
*/
DEVICE
}

35
common/core/src/main/java/com/thing/common/core/enumeration/QueueOriginType.java

@ -0,0 +1,35 @@
package com.thing.common.core.enumeration;
/**
* 数据来源
*/
public enum QueueOriginType {
/**
* mqtt broker
*/
MQTT_BROKER,
/**
* mqtt client
*/
MQTT_CLIENT,
/**
* api
*/
API,
/**
* socket订阅tb
*/
TB,
/**
* modbus tcp
*/
MODBUS_TCP,
/**
* 自动数据同步 系统或socket关闭重启后同步
*/
AUTO_DATA_SYNC,
/**
* 手动数据同步 保存缓存设置或缓存查询点击同步按钮
*/
MANUAL_DATA_SYNC
}

23
common/core/src/main/java/com/thing/common/core/enumeration/RegionLeafEnum.java

@ -0,0 +1,23 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
/**
* 叶子节点枚举
*
* @author Mark sunlightcs@gmail.com
*/
@AllArgsConstructor
public enum RegionLeafEnum {
YES(1),
NO(0);
private final int value;
public int value() {
return this.value;
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/RegionLevelEnum.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
/**
* 行政区域 级别枚举
*
* @author Mark sunlightcs@gmail.com
*/
@AllArgsConstructor
public enum RegionLevelEnum {
ONE(1),
TWO(2),
THREE(3);
private final int value;
public int value() {
return this.value;
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/RepeatPushStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 开启关闭重复推送
*/
@Getter
@AllArgsConstructor
public enum RepeatPushStatus {
/**
* 开启
*/
ON("0"),
/**
* 关闭
*/
OFF("1");
private final String status;
}

40
common/core/src/main/java/com/thing/common/core/enumeration/ReportTypeEnum.java

@ -0,0 +1,40 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
/**
* 导出文件类型
*/
@Getter
@AllArgsConstructor
public enum ReportTypeEnum {
/**
* 监控实时分析列表
*/
MONITORING("1", "监控实时分析列表"),
/**
* 用量分析列表
*/
DOSAGE("2", "用量分析列表"),
/**
* 数据报表
*/
DATAREPORT("3", "数据报表");
private final String code;
private final String desc;
public static ReportTypeEnum getReportType(String code) {
return Arrays.stream(ReportTypeEnum.values())
.filter(item -> StringUtils.equals(code, item.getCode()))
.findFirst()
.orElseThrow(() -> new RuntimeException("未找到对应数据"));
}
}

26
common/core/src/main/java/com/thing/common/core/enumeration/RoleType.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 角色类型
*/
@Getter
@AllArgsConstructor
public enum RoleType {
/**
* 企业角色
*/
COMPANY("0"),
/**
* 用户角色
*/
USER("1"),
/**
* 默认角色
*/
DEFAULT("2");
private final String value;
}

12
common/core/src/main/java/com/thing/common/core/enumeration/RsaKeyType.java

@ -0,0 +1,12 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum RsaKeyType {
PUBLIC("public"),
PRIVATE("private");
private final String value;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/ScheduleStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 定时任务状态
*/
@Getter
@AllArgsConstructor
public enum ScheduleStatus {
/**
* 暂停
*/
PAUSE(0),
/**
* 正常
*/
NORMAL(1);
private final int value;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/ShowStatus.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据源是否展示初值终值
*/
@Getter
@AllArgsConstructor
public enum ShowStatus {
/**
* 展示
*/
TRUE("0"),
/**
* 不展示
*/
FALSE("1");
private final String showStatus;
}

98
common/core/src/main/java/com/thing/common/core/enumeration/SignEnum.java

@ -0,0 +1,98 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Getter
@AllArgsConstructor
public enum SignEnum {
GT(">", "大于", "<=", SignTypeEnum.RELATION),
GE(">=", "大于等于", "<", SignTypeEnum.RELATION),
LT("<", "小于", ">=", SignTypeEnum.RELATION),
LE("<=", "小于等于", ">", SignTypeEnum.RELATION),
EQ("=", "等于", "=", SignTypeEnum.RELATION),
DEQ("==", "等于", "==", SignTypeEnum.RELATION),
AND("&", "与", "|", SignTypeEnum.LOGIC),
DAND("&&", "短路与", "||", SignTypeEnum.LOGIC),
OR("|", "或", "&", SignTypeEnum.LOGIC),
DOR("||", "短路或", "&&", SignTypeEnum.LOGIC),
PLUS("+", "加", "-", SignTypeEnum.OPERATOR),
MINUS("-", "减", "+", SignTypeEnum.OPERATOR),
MULTIPLY("*", "乘", "/", SignTypeEnum.OPERATOR),
DIVIDE("/", "除", "*", SignTypeEnum.OPERATOR),
LB("(", "左侧小括号", ")", SignTypeEnum.BRACKETS),
RB(")", "右侧小括号", "(", SignTypeEnum.BRACKETS);
private final String val;
private final String name;
private final String inverseSign;
private final SignTypeEnum type;
public static SignEnum match(String val) {
return Arrays.stream(SignEnum.values())
.filter(item -> Objects.equals(item.getVal(), val))
.findFirst()
.orElse(null);
}
public static List<SignEnum> noBracketsSigns() {
return Arrays.stream(SignEnum.values())
.filter(SignEnum::isNotBrackets)
.collect(Collectors.toList());
}
public boolean isNotBrackets() {
return type != SignTypeEnum.BRACKETS;
}
/** 获取逆向符号 */
public SignEnum getInverseSign() {
return match(inverseSign);
}
public List<SignEnum> getSubSigns() {
return switch (this) {
case GE -> Arrays.asList(GE, GT, EQ);
case LE -> Arrays.asList(LE, LT, EQ);
default -> List.of(this);
};
}
public List<String> getSubSignStr() {
List<SignEnum> subSigns = getSubSigns();
return subSigns.stream().map(SignEnum::getVal).collect(Collectors.toList());
}
public boolean compare(String v1, String v2) {
Double t1 = Double.parseDouble(v1);
Double t2 = Double.parseDouble(v2);
return compare(t1, t2);
}
public boolean compare(Double v1, Double v2) {
BigDecimal t1 = BigDecimal.valueOf(v1);
BigDecimal t2 = BigDecimal.valueOf(v2);
return compare(t1, t2);
}
public boolean compare(BigDecimal v1, BigDecimal v2) {
int res = v1.compareTo(v2);
return switch (this) {
case GT -> res > 0;
case GE -> res >= 0;
case LT -> res < 0;
case LE -> res <= 0;
case EQ, DEQ -> res == 0;
default -> false;
};
}
public static SignEnum combineSign(SignEnum signA, SignEnum signB) {
String combineSign = signA.getVal() + signB.getVal();
return match(combineSign);
}
}

15
common/core/src/main/java/com/thing/common/core/enumeration/SignTypeEnum.java

@ -0,0 +1,15 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum SignTypeEnum {
RELATION("关系运算符"),
LOGIC("逻辑连结符"),
OPERATOR("数值计算操作符"),
BRACKETS("括号");
private final String name;
}

29
common/core/src/main/java/com/thing/common/core/enumeration/SmsService.java

@ -0,0 +1,29 @@
package com.thing.common.core.enumeration;
/**
* 短信服务商
*/
public enum SmsService {
/**
* 阿里云
*/
ALIYUN(1),
/**
* 腾讯云
*/
QCLOUD(2),
/**
* 七牛
*/
QINIU(3);
private int value;
SmsService(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}

12
common/core/src/main/java/com/thing/common/core/enumeration/SocketEventType.java

@ -0,0 +1,12 @@
package com.thing.common.core.enumeration;
public enum SocketEventType {
/**
* 客户端操作事件
*/
CLIENT,
/**
* 设备操作事件
*/
DEVICE
}

17
common/core/src/main/java/com/thing/common/core/enumeration/SourceStatus.java

@ -0,0 +1,17 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据源状态
*/
@Getter
@AllArgsConstructor
public enum SourceStatus {
ENABLE(1),
DISABLE(0);
private final Integer status;
}

20
common/core/src/main/java/com/thing/common/core/enumeration/SubscribeStatusEnum.java

@ -0,0 +1,20 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 订阅状态
*/
@Getter
@AllArgsConstructor
public enum SubscribeStatusEnum {
/**
* 订阅
*/
SUBSCRIBE,
/**
* 取消订阅
*/
UNSUBSCRIBE
}

27
common/core/src/main/java/com/thing/common/core/enumeration/SuperAdminEnum.java

@ -0,0 +1,27 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
/**
* 超级管理员枚举
*
* @author Mark sunlightcs@gmail.com
* @since 1.0.0
*/
@AllArgsConstructor
public enum SuperAdminEnum {
YES(1),
NO(0);
private final int value;
public int value() {
return this.value;
}
public static boolean isSuperAdmin(int code){
return code == YES.value;
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/SuperTenantEnum.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
/**
* 租户管理员枚举
*
* @author Mark sunlightcs@gmail.com
*/
@AllArgsConstructor
public enum SuperTenantEnum {
YES(1),
NO(0);
private final int value;
public int value() {
return this.value;
}
}

22
common/core/src/main/java/com/thing/common/core/enumeration/SyncUpdateEnum.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 模板属性与物属性的关系类型
*/
@Getter
@AllArgsConstructor
public enum SyncUpdateEnum {
/**
* 同步
*/
SYNC("sync"),
/**
* 更新
*/
UPDATE("update");
private final String value;
}

22
common/core/src/main/java/com/thing/common/core/enumeration/SysTenantEnum.java

@ -0,0 +1,22 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
/**
* 系统租户枚举
*
* @author Mark sunlightcs@gmail.com
*/
@AllArgsConstructor
public enum SysTenantEnum {
YES(1),
NO(0);
private final int value;
public int value() {
return this.value;
}
}

26
common/core/src/main/java/com/thing/common/core/enumeration/TaskTime.java

@ -0,0 +1,26 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 定时类型
*/
@Getter
@AllArgsConstructor
public enum TaskTime {
/**
*
*/
hh("时"),
/**
*
*/
mm("分"),
/**
*
*/
ss("秒");
private final String name;
}

34
common/core/src/main/java/com/thing/common/core/enumeration/TaskTimeType.java

@ -0,0 +1,34 @@
package com.thing.common.core.enumeration;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 定时类型
*/
@Getter
@AllArgsConstructor
public enum TaskTimeType {
/**
* 定时
*/
TIME("定时"),
/**
* 每日
*/
DAY("每日"),
/**
* 每周
*/
WEEK("每周"),
/**
* 轮询
*/
POLLING("轮询"),
/**
* CRON
*/
CRON("CRON");
private final String name;
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save