Commit 20beff75 authored by huangcb's avatar huangcb

优化创建模型/修改模型功能

parent 374e6f04
package com.esv.datacenter.iot;
import com.esv.datacenter.iot.common.constants.CommonConstants;
import com.esv.datacenter.iot.common.util.LogUtils;
import org.slf4j.MDC;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
......@@ -21,6 +24,7 @@ import java.util.TimeZone;
public class IoTApplication {
public static void main(String[] args) {
MDC.put(CommonConstants.LOG_TRACE_ID, LogUtils.getThreadTraceId());
SpringApplication.run(IoTApplication.class, args);
}
......
package com.esv.datacenter.iot.common.component;
import com.esv.datacenter.iot.common.util.FileUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: huangchaobin@esvtek.com
* @createTime: 2020/08/03 20:09
* @version:1.0
*/
@Component
@RefreshScope
@Slf4j
public class BaseDataComponent {
@Value("${db.dict.table-field.map}")
private String dbTableFieldMap;
private static Map<String, Boolean> sqlReservedWordsMap;
/**
* @description 获取数据库表字段映射
* @return java.util.Map<java.lang.Integer,java.lang.String>
* @author huangChaobin@esvtek.com
* @createTime 2020/08/03 20:12
**/
public Map<Integer, String> getDbTableFieldMap() {
Map<Integer, String> map = new HashMap<>(32);
String[] kvs = dbTableFieldMap.split(",");
for (String kv : kvs) {
map.put(Integer.parseInt(kv.split("-")[0]), kv.split("-")[1]);
}
return map;
}
/**
* @description 获取SQL保留字
* @return java.util.Map<java.lang.String,java.lang.Boolean>
* @author huangChaobin@esvtek.com
* @createTime 2020/08/04 9:13
**/
public Map<String, Boolean> getSqlReservedWordsMap() {
if (null != sqlReservedWordsMap) {
return sqlReservedWordsMap;
}
sqlReservedWordsMap = new HashMap<>(1024);
String dataPath = "/data/SqlReservedWords.txt";
try {
String fileContent = FileUtils.getJarFileContent(this.getClass(), dataPath);
String[] words = fileContent.split(",");
for (int i = 0; i < words.length; i++) {
sqlReservedWordsMap.put(words[i], true);
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return sqlReservedWordsMap;
}
}
package com.esv.datacenter.iot.common.component;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.esv.datacenter.iot.common.util.FeignUtils;
import com.esv.datacenter.iot.feign.FeignBaseService;
import com.esv.datacenter.iot.module.omodel.dto.ModelAndInstanceDto;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelEntity;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelPropertyEntity;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
......@@ -66,9 +63,8 @@ public class TimescaleComponent {
@Autowired
private DynamicDataSource dynamicDataSource;
@Autowired
private FeignBaseService feignBaseService;
private BaseDataComponent baseDataComponent;
/**
* @description 创建表
......@@ -109,7 +105,7 @@ public class TimescaleComponent {
} catch (Exception e) {
log.error("建表[{}]失败", table);
log.error(e.getMessage(), e);
return false;
throw e;
} finally {
// 关闭数据源
if (Objects.nonNull(dataSource) && !dataSource.isClosed()) {
......@@ -128,7 +124,7 @@ public class TimescaleComponent {
* @createTime 2020/08/03 17:10
**/
public Boolean dropTable(Long modelId) {
HikariDataSource dataSource = this.getHikariDataSource4Transaction();
HikariDataSource dataSource = this.getHikariDataSource();
String table = tablePrefix + modelId;
try {
......@@ -149,7 +145,7 @@ public class TimescaleComponent {
} catch (Exception e) {
log.error("删除表[{}]失败", table);
log.error(e.getMessage(), e);
return false;
throw e;
} finally {
// 关闭数据源
if (Objects.nonNull(dataSource) && !dataSource.isClosed()) {
......@@ -162,8 +158,7 @@ public class TimescaleComponent {
private String generateCreateTableSql(String table, List<ObjectModelPropertyEntity> propertyEntityList) {
// 获取字典表数据
String dictType = "col_type";
Map<Integer, String> dictMap = this.getDictMap(dictType);
Map<Integer, String> dbTableFieldMap = this.baseDataComponent.getDbTableFieldMap();
// 获取表字段映射
Map<String, String> fieldMap = this.getTableFieldMap();
......@@ -173,10 +168,32 @@ public class TimescaleComponent {
sb.append("create table if not exists ").append(table).append("(")
.append("time TIMESTAMPTZ NOT NULL,")
.append("instance_id int8 NULL");
String propertyType;
String defaultValue;
for (ObjectModelPropertyEntity propertyEntity : propertyEntityList) {
propertyType = dbTableFieldMap.get(propertyEntity.getPropertyType()).toLowerCase();
defaultValue = StringUtils.trimToNull(propertyEntity.getPropertyDefaultValue());
sb.append(",");
sb.append(propertyEntity.getPropertyCode()).append(" ");
sb.append(fieldMap.get(dictMap.get(propertyEntity.getPropertyType()))).append(" NULL");
sb.append(fieldMap.get(propertyType)).append(" NULL");
if (Objects.nonNull(defaultValue)) {
sb.append(" DEFAULT ");
switch (propertyType) {
case "boolean":
if ("true".equalsIgnoreCase(defaultValue)) {
sb.append("'1'::\"bit\"");
} else {
sb.append("'0'::\"bit\"");
}
break;
case "number":
sb.append(defaultValue);
break;
default:
sb.append("'").append(defaultValue).append("'::text");
break;
}
}
}
sb.append(");");
......@@ -204,19 +221,17 @@ public class TimescaleComponent {
StringBuffer sb = new StringBuffer();
sb.append("select t1.tablename")
.append(" from pg_tables t1, pg_class t2")
.append(" where t1.tablename like '")
.append(tablePrefix)
.append("_%' and t1.tablename = t2.relname")
.append(" where t1.tablename = '")
.append(table)
.append("' and t1.tablename = t2.relname")
.append(" order by t1.tablename desc");
String sql = sb.toString();
// 使用jdbcTemplate来执行sql
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List<Map<String, Object>> resultMapList = jdbcTemplate.queryForList(sql);
for (Map<String, Object> map : resultMapList) {
if (table.equals(String.valueOf(map.get("tablename")))) {
return true;
}
if (null != resultMapList && 0 < resultMapList.size()) {
return true;
}
return false;
......@@ -253,24 +268,4 @@ public class TimescaleComponent {
return fieldMap;
}
private Map<Integer, String> getDictMap(String dictType) {
JSONObject feignReqJson = new JSONObject();
feignReqJson.put("type", dictType);
JSONObject feignResultJson = feignBaseService.getDict(feignReqJson);
JSONArray dataJsonArray = FeignUtils.getFeignResultDataList(feignResultJson);
JSONArray dictArray = new JSONArray();
for (int i = 0; i < dataJsonArray.size(); i++) {
if (dictType.equals(dataJsonArray.getJSONObject(i).getString("type"))) {
dictArray = dataJsonArray.getJSONObject(i).getJSONArray("dictList");
break;
}
}
Map<Integer, String> dictMap = new HashMap<>(32);
for (int i = 0; i < dictArray.size(); i++) {
dictMap.put(dictArray.getJSONObject(i).getInteger("code"), dictArray.getJSONObject(i).getString("name"));
}
return dictMap;
}
}
package com.esv.datacenter.iot.common.filter;
import com.esv.datacenter.iot.common.constants.CommonConstants;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
......@@ -39,7 +40,7 @@ public class LogbackFilter implements Filter {
filterChain.doFilter(servletRequest, servletResponse);
} finally {
if(bInsertMDC) {
MDC.remove("traceId");
MDC.remove(CommonConstants.LOG_TRACE_ID);
}
}
}
......@@ -50,10 +51,10 @@ public class LogbackFilter implements Filter {
}
private boolean setMDC(String traceId) {
if (StringUtils.isEmpty(traceId) || "null".equalsIgnoreCase(traceId)) {
if (StringUtils.isEmpty(traceId) || CommonConstants.NULL_STRING.equalsIgnoreCase(traceId)) {
traceId = UUID.randomUUID().toString().replace("-", "");
}
MDC.put("traceId", traceId);
MDC.put(CommonConstants.LOG_TRACE_ID, traceId);
return true;
}
}
package com.esv.datacenter.iot.common.util;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
@Slf4j
public class FileUtils {
public static String readFileContent(String fileName) {
String fileContent = null;
FileInputStream fip = null;
InputStreamReader reader = null;
try {
File f = new File(fileName);
fip = new FileInputStream(f);
reader = new InputStreamReader(fip, "UTF-8");
StringBuffer sb = new StringBuffer();
while (reader.ready()) {
sb.append((char) reader.read());
}
fileContent = sb.toString();
} catch (IOException e) {
log.error(e.getMessage());
} finally {
try {
if (null != reader) {
reader.close();
}
if (null != fip) {
fip.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
return fileContent;
}
public static String getJarFileContent(Class<?> c, String dataPath) throws Exception {
InputStream inputStream = c.getResourceAsStream(dataPath);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuffer sb = new StringBuffer();
String txt;
while ((txt = bufferedReader.readLine()) != null) {
sb.append(txt);
}
return sb.toString();
}
}
package com.esv.datacenter.iot.module.omodel.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.esv.datacenter.iot.common.exception.EException;
import com.esv.datacenter.iot.common.response.ECode;
import com.esv.datacenter.iot.common.response.EResponse;
import com.esv.datacenter.iot.common.util.ReqUtils;
import com.esv.datacenter.iot.common.validator.groups.*;
import com.esv.datacenter.iot.module.omodel.form.ModelInstanceForm;
import com.esv.datacenter.iot.module.omodel.form.ModelPropertyForm;
import com.esv.datacenter.iot.module.omodel.form.ObjectModelForm;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelInstanceService;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelPropertyService;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -37,10 +36,13 @@ public class ObjectModelController {
private ObjectModelService objectModelService;
private ObjectModelInstanceService objectModelInstanceService;
private ObjectModelPropertyService objectModelPropertyService;
public ObjectModelController(ObjectModelService objectModelService, ObjectModelInstanceService objectModelInstanceService) {
public ObjectModelController(ObjectModelService objectModelService, ObjectModelInstanceService objectModelInstanceService,
ObjectModelPropertyService objectModelPropertyService) {
this.objectModelService = objectModelService;
this.objectModelInstanceService = objectModelInstanceService;
this.objectModelPropertyService = objectModelPropertyService;
}
/**
......@@ -52,14 +54,11 @@ public class ObjectModelController {
**/
@PostMapping("/add")
public EResponse add(@RequestBody @Validated(ValidatorInsert.class) ObjectModelForm form) throws EException {
// 参数校验:模型属性
String[] notBlandParams = new String[]{"propertyCode", "propertyName", "propertyType"};
List<ModelPropertyForm> propertyList = form.getPropertyList();
propertyList.forEach(property -> {
ReqUtils.checkParamsNotBlank(JSON.parseObject(property.toString()), notBlandParams);
});
// TODO,参数校验:模型属性是否数据库保留字段
// 将模型属性代码转换为小写
this.objectModelPropertyService.propertyCode2Lowercase(propertyList);
// 模型属性校验
this.objectModelPropertyService.checkModelProperty(propertyList);
Long id = objectModelService.createObjectModel(form);
JSONObject data = new JSONObject();
......@@ -113,7 +112,16 @@ public class ObjectModelController {
// 校验模型ID是否有效
this.checkIsValidModelId(form.getId());
return EResponse.ok(objectModelService.updateModel(form));
List<ModelPropertyForm> propertyList = form.getPropertyList();
// 将模型属性代码转换为小写
this.objectModelPropertyService.propertyCode2Lowercase(propertyList);
// 模型属性校验
this.objectModelPropertyService.checkModelProperty(propertyList);
// 更新模型
this.objectModelService.updateModel(form);
return EResponse.ok();
}
/**
......
......@@ -44,5 +44,23 @@ public interface ObjectModelPropertyService extends IService<ObjectModelProperty
**/
void saveModelProperty(Long modelId, List<ModelPropertyForm> propertyList);
/**
* @description 校验属性
* @param propertyList:
* @return void
* @author huangChaobin@esvtek.com
* @createTime 2020/08/03 19:59
**/
void checkModelProperty(List<ModelPropertyForm> propertyList);
/**
* @description 属性代码转换为小写
* @param propertyList:
* @return void
* @author huangChaobin@esvtek.com
* @createTime 2020/08/03 20:40
**/
void propertyCode2Lowercase(List<ModelPropertyForm> propertyList);
}
......@@ -48,11 +48,11 @@ public interface ObjectModelService extends IService<ObjectModelEntity> {
/**
* @description 更新模型
* @param form:
* @return java.lang.Integer
* @return void
* @author huangChaobin@esvtek.com
* @createTime 2020/08/01 10:48
**/
Integer updateModel(ObjectModelForm form);
void updateModel(ObjectModelForm form);
/**
* @description 模型实例数
......
package com.esv.datacenter.iot.module.omodel.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.common.component.BaseDataComponent;
import com.esv.datacenter.iot.common.em.DbDeletedEnum;
import com.esv.datacenter.iot.common.exception.EException;
import com.esv.datacenter.iot.common.response.ECode;
import com.esv.datacenter.iot.common.util.ReqUtils;
import com.esv.datacenter.iot.module.omodel.dao.ObjectModelPropertyDao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelPropertyEntity;
import com.esv.datacenter.iot.module.omodel.form.ModelPropertyForm;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelPropertyService;
import com.esv.datacenter.iot.module.omodel.vo.ModelPropertyVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service("objectModelPropertyService")
public class ObjectModelPropertyServiceImpl extends ServiceImpl<ObjectModelPropertyDao, ObjectModelPropertyEntity> implements ObjectModelPropertyService {
@Autowired
private BaseDataComponent baseDataComponent;
@Override
public Integer logicDeleteModelProperty(ObjectModelPropertyEntity entity) {
return this.getBaseMapper().logicDeleteModelProperty(entity);
......@@ -71,4 +84,59 @@ public class ObjectModelPropertyServiceImpl extends ServiceImpl<ObjectModelPrope
this.updateById(entity);
}
}
@Override
public void checkModelProperty(List<ModelPropertyForm> propertyList) {
Map<Integer, String> dbTableFieldMap = this.baseDataComponent.getDbTableFieldMap();
Map<String, Boolean> sqlReservedWordsMap = this.baseDataComponent.getSqlReservedWordsMap();
String[] notBlandParams = new String[]{"propertyCode", "propertyName", "propertyType"};
propertyList.forEach(property -> {
// 必填校验
ReqUtils.checkParamsNotBlank(JSON.parseObject(property.toString()), notBlandParams);
// propertyCode是否为保留字校验
if (sqlReservedWordsMap.containsKey(property.getPropertyCode())) {
throw new EException(ECode.PARAM_ERROR.code(), "属性代码["+property.getPropertyCode()+"]为保留字段");
}
// propertyType校验
if (!dbTableFieldMap.containsKey(property.getPropertyType())) {
throw new EException(ECode.PARAM_ERROR.code(), "无效的属性类型["+property.getPropertyType()+"]");
}
// propertyDefaultValue校验
String propertyType = dbTableFieldMap.get(property.getPropertyType());
String propertyDefaultValue = StringUtils.trimToNull(property.getPropertyDefaultValue());
if (Objects.nonNull(propertyDefaultValue)) {
switch(propertyType) {
case "boolean":
if (!Boolean.TRUE.toString().equalsIgnoreCase(propertyDefaultValue)
&& !Boolean.FALSE.toString().equalsIgnoreCase(propertyDefaultValue)) {
throw new EException(ECode.PARAM_ERROR.code(), "无效的默认值["+propertyDefaultValue+"]");
}
break;
case "number":
try {
new BigDecimal(propertyDefaultValue);
} catch (Exception e) {
throw new EException(ECode.PARAM_ERROR.code(), "无效的默认值["+propertyDefaultValue+"]");
}
break;
default:
break;
}
}
});
}
@Override
public void propertyCode2Lowercase(List<ModelPropertyForm> propertyList) {
for (int i = 0; i < propertyList.size(); i++) {
ModelPropertyForm form = propertyList.get(i);
if (Objects.nonNull(form.getPropertyCode())) {
form.setPropertyCode(form.getPropertyCode().toLowerCase());
propertyList.set(i, form);
}
}
}
}
\ No newline at end of file
......@@ -113,7 +113,7 @@ public class ObjectModelServiceImpl extends ServiceImpl<ObjectModelDao, ObjectMo
@Override
@Transactional(rollbackFor = Exception.class)
public Integer updateModel(ObjectModelForm form) {
public void updateModel(ObjectModelForm form) {
Long modelId = form.getId();
// 模型名称校验:不能重复
......@@ -125,6 +125,13 @@ public class ObjectModelServiceImpl extends ServiceImpl<ObjectModelDao, ObjectMo
throw new EException(ECode.BIZ_PARAM_ERROR.code(), "模型[" + form.getName() + "]已存在");
}
// 更新模型
ObjectModelEntity modelEntity = new ObjectModelEntity();
modelEntity.setId(modelId);
modelEntity.setName(form.getName());
modelEntity.setDescription(form.getDescription());
this.getBaseMapper().updateById(modelEntity);
// 判断是否修改模型属性并校验
List<ModelPropertyForm> propertyList = form.getPropertyList();
if (null != propertyList && 0 < propertyList.size()) {
......@@ -134,14 +141,13 @@ public class ObjectModelServiceImpl extends ServiceImpl<ObjectModelDao, ObjectMo
// 保存模型属性
this.objectModelPropertyService.saveModelProperty(modelId, propertyList);
}
// 更新模型
ObjectModelEntity modelEntity = new ObjectModelEntity();
modelEntity.setId(modelId);
modelEntity.setName(form.getName());
modelEntity.setDescription(form.getDescription());
return this.getBaseMapper().updateById(modelEntity);
// 删除时序数据库表
this.timescaleComponent.dropTable(modelId);
// 创建时序数据库表
this.createModelTimescaleDB(modelEntity, form);
}
}
@Override
......@@ -150,7 +156,7 @@ public class ObjectModelServiceImpl extends ServiceImpl<ObjectModelDao, ObjectMo
// 获取模型实例数
int modelInstanceCount = this.modelInstanceCount(modelId);
if (0 < modelInstanceCount) {
throw new EException(ECode.BIZ_PARAM_ERROR.code(), "该模型已有实例,不能删除");
throw new EException(ECode.BIZ_PARAM_ERROR.code(), "该模型已有" + modelInstanceCount + "个实例,不能删除");
}
// 逻辑删除模型
......
......@@ -68,6 +68,10 @@ ribbon:
enabled: true
clients: datacenter-base-service
feign-base-service-name: datacenter-base-service
db:
dict:
table-field:
map: 1-string,2-number,3-boolean
timescale:
data-source:
jdbc-url: jdbc:postgresql://192.168.31.248:5432/iot
......
......@@ -68,6 +68,10 @@ ribbon:
enabled: true
clients: datacenter-base-service
feign-base-service-name: datacenter-base-service
db:
dict:
table-field:
map: 1-string,2-number,3-boolean
timescale:
data-source:
jdbc-url: jdbc:postgresql://192.168.31.248:5432/iot
......
......@@ -68,6 +68,10 @@ ribbon:
enabled: true
clients: datacenter-base-service
feign-base-service-name: datacenter-base-service
db:
dict:
table-field:
map: 1-string,2-number,3-boolean
timescale:
data-source:
jdbc-url: jdbc:postgresql://192.168.31.248:5432/iot
......
......@@ -68,6 +68,10 @@ ribbon:
enabled: true
clients: datacenter-base-service
feign-base-service-name: datacenter-base-service
db:
dict:
table-field:
map: 1-string,2-number,3-boolean
timescale:
data-source:
jdbc-url: jdbc:postgresql://192.168.31.248:5432/iot
......
abort
,abs
,absolute
,access
,action
,ada
,add
,admin
,after
,aggregate
,alias
,all
,allocate
,also
,alter
,always
,analyse
,analyze
,and
,any
,are
,array
,as
,asc
,asensitive
,assertion
,assignment
,asymmetric
,at
,atomic
,attribute
,attributes
,audit
,authorization
,auto_increment
,avg
,avg_row_length
,backup
,backward
,before
,begin
,bernoulli
,between
,bigint
,binary
,bit
,bit_length
,bitvar
,blob
,bool
,boolean
,both
,breadth
,break
,browse
,bulk
,by
,cache
,call
,called
,cardinality
,cascade
,cascaded
,case
,cast
,catalog
,catalog_name
,ceil
,ceiling
,chain
,change
,char
,char_length
,character
,character_length
,character_set_catalog
,character_set_name
,character_set_schema
,characteristics
,characters
,check
,checked
,checkpoint
,checksum
,class
,class_origin
,clob
,close
,cluster
,clustered
,coalesce
,cobol
,collate
,collation
,collation_catalog
,collation_name
,collation_schema
,collect
,column
,column_name
,columns
,command_function
,command_function_code
,comment
,commit
,committed
,completion
,compress
,compute
,condition
,condition_number
,connect
,connection
,connection_name
,constraint
,constraint_catalog
,constraint_name
,constraint_schema
,constraints
,constructor
,contains
,containstable
,continue
,conversion
,convert
,copy
,corr
,corresponding
,count
,covar_pop
,covar_samp
,create
,createdb
,createrole
,createuser
,cross
,csv
,cube
,cume_dist
,current
,current_date
,current_default_transform_group
,current_path
,current_role
,current_time
,current_timestamp
,current_transform_group_for_type
,current_user
,cursor
,cursor_name
,cycle
,data
,database
,databases
,date
,datetime
,datetime_interval_code
,datetime_interval_precision
,day
,day_hour
,day_microsecond
,day_minute
,day_second
,dayofmonth
,dayofweek
,dayofyear
,dbcc
,deallocate
,dec
,decimal
,declare
,default
,defaults
,deferrable
,deferred
,defined
,definer
,degree
,delay_key_write
,delayed
,delete
,delimiter
,delimiters
,dense_rank
,deny
,depth
,deref
,derived
,desc
,describe
,descriptor
,destroy
,destructor
,deterministic
,diagnostics
,dictionary
,disable
,disconnect
,disk
,dispatch
,distinct
,distinctrow
,distributed
,div
,do
,domain
,double
,drop
,dual
,dummy
,dump
,dynamic
,dynamic_function
,dynamic_function_code
,each
,element
,else
,elseif
,enable
,enclosed
,encoding
,encrypted
,end
,end-exec
,enum
,equals
,errlvl
,escape
,escaped
,every
,except
,exception
,exclude
,excluding
,exclusive
,exec
,execute
,existing
,exists
,exit
,exp
,explain
,external
,extract
,false
,fetch
,fields
,file
,fillfactor
,filter
,final
,first
,float
,float4
,float8
,floor
,flush
,following
,for
,force
,foreign
,fortran
,forward
,found
,free
,freetext
,freetexttable
,freeze
,from
,full
,fulltext
,function
,fusion
,general
,generated
,get
,global
,go
,goto
,grant
,granted
,grants
,greatest
,group
,grouping
,handler
,having
,header
,heap
,hierarchy
,high_priority
,hold
,holdlock
,host
,hosts
,hour
,hour_microsecond
,hour_minute
,hour_second
,identified
,identity
,identity_insert
,identitycol
,if
,ignore
,ilike
,immediate
,immutable
,implementation
,implicit
,in
,include
,including
,increment
,index
,indicator
,infile
,infix
,inherit
,inherits
,initial
,initialize
,initially
,inner
,inout
,input
,insensitive
,insert
,insert_id
,instance
,instantiable
,instead
,int
,int1
,int2
,int3
,int4
,int8
,integer
,intersect
,intersection
,interval
,into
,invoker
,is
,isam
,isnull
,isolation
,iterate
,join
,key
,key_member
,key_type
,keys
,kill
,lancompiler
,language
,large
,last
,last_insert_id
,lateral
,leading
,least
,leave
,left
,length
,less
,level
,like
,limit
,lineno
,lines
,listen
,ln
,load
,local
,localtime
,localtimestamp
,location
,locator
,lock
,login
,logs
,long
,longblob
,longtext
,loop
,low_priority
,lower
,map
,match
,matched
,max
,max_rows
,maxextents
,maxvalue
,mediumblob
,mediumint
,mediumtext
,member
,merge
,message_length
,message_octet_length
,message_text
,method
,middleint
,min
,min_rows
,minus
,minute
,minute_microsecond
,minute_second
,minvalue
,mlslabel
,mod
,mode
,modifies
,modify
,module
,month
,monthname
,more
,move
,multiset
,mumps
,myisam
,name
,names
,national
,natural
,nchar
,nclob
,nesting
,new
,next
,no
,no_write_to_binlog
,noaudit
,nocheck
,nocompress
,nocreatedb
,nocreaterole
,nocreateuser
,noinherit
,nologin
,nonclustered
,none
,normalize
,normalized
,nosuperuser
,not
,nothing
,notify
,notnull
,nowait
,null
,nullable
,nullif
,nulls
,number
,numeric
,object
,octet_length
,octets
,of
,off
,offline
,offset
,offsets
,oids
,old
,on
,online
,only
,open
,opendatasource
,openquery
,openrowset
,openxml
,operation
,operator
,optimize
,option
,optionally
,options
,or
,order
,ordering
,ordinality
,others
,out
,outer
,outfile
,output
,over
,overlaps
,overlay
,overriding
,owner
,pack_keys
,pad
,parameter
,parameter_mode
,parameter_name
,parameter_ordinal_position
,parameter_specific_catalog
,parameter_specific_name
,parameter_specific_schema
,parameters
,partial
,partition
,pascal
,password
,path
,pctfree
,percent
,percent_rank
,percentile_cont
,percentile_disc
,placing
,plan
,pli
,position
,postfix
,power
,preceding
,precision
,prefix
,preorder
,prepare
,prepared
,preserve
,primary
,print
,prior
,privileges
,proc
,procedural
,procedure
,process
,processlist
,public
,purge
,quote
,raid0
,raiserror
,range
,rank
,raw
,read
,reads
,readtext
,real
,recheck
,reconfigure
,recursive
,ref
,references
,referencing
,regexp
,regr_avgx
,regr_avgy
,regr_count
,regr_intercept
,regr_r2
,regr_slope
,regr_sxx
,regr_sxy
,regr_syy
,reindex
,relative
,release
,reload
,rename
,repeat
,repeatable
,replace
,replication
,require
,reset
,resignal
,resource
,restart
,restore
,restrict
,result
,return
,returned_cardinality
,returned_length
,returned_octet_length
,returned_sqlstate
,returns
,revoke
,right
,rlike
,role
,rollback
,rollup
,routine
,routine_catalog
,routine_name
,routine_schema
,row
,row_count
,row_number
,rowcount
,rowguidcol
,rowid
,rownum
,rows
,rule
,save
,savepoint
,scale
,schema
,schema_name
,schemas
,scope
,scope_catalog
,scope_name
,scope_schema
,scroll
,search
,second
,second_microsecond
,section
,security
,select
,self
,sensitive
,separator
,sequence
,serializable
,server_name
,session
,session_user
,set
,setof
,sets
,setuser
,share
,show
,shutdown
,signal
,similar
,simple
,size
,smallint
,some
,soname
,source
,space
,spatial
,specific
,specific_name
,specifictype
,sql
,sql_big_result
,sql_big_selects
,sql_big_tables
,sql_calc_found_rows
,sql_log_off
,sql_log_update
,sql_low_priority_updates
,sql_select_limit
,sql_small_result
,sql_warnings
,sqlca
,sqlcode
,sqlerror
,sqlexception
,sqlstate
,sqlwarning
,sqrt
,ssl
,stable
,start
,starting
,state
,statement
,static
,statistics
,status
,stddev_pop
,stddev_samp
,stdin
,stdout
,storage
,straight_join
,strict
,string
,structure
,style
,subclass_origin
,sublist
,submultiset
,substring
,successful
,sum
,superuser
,symmetric
,synonym
,sysdate
,sysid
,system
,system_user
,table
,table_name
,tables
,tablesample
,tablespace
,temp
,template
,temporary
,terminate
,terminated
,text
,textsize
,than
,then
,ties
,time
,timestamp
,timezone_hour
,timezone_minute
,tinyblob
,tinyint
,tinytext
,to
,toast
,top
,top_level_count
,trailing
,tran
,transaction
,transaction_active
,transactions_committed
,transactions_rolled_back
,transform
,transforms
,translate
,translation
,treat
,trigger
,trigger_catalog
,trigger_name
,trigger_schema
,trim
,true
,truncate
,trusted
,tsequal
,type
,uescape
,uid
,unbounded
,uncommitted
,under
,undo
,unencrypted
,union
,unique
,unknown
,unlisten
,unlock
,unnamed
,unnest
,unsigned
,until
,update
,updatetext
,upper
,usage
,use
,user
,user_defined_type_catalog
,user_defined_type_code
,user_defined_type_name
,user_defined_type_schema
,using
,utc_date
,utc_time
,utc_timestamp
,vacuum
,valid
,validate
,validator
,value
,values
,var_pop
,var_samp
,varbinary
,varchar
,varchar2
,varcharacter
,variable
,variables
,varying
,verbose
,view
,volatile
,waitfor
,when
,whenever
,where
,while
,width_bucket
,window
,with
,within
,without
,work
,write
,writetext
,x509
,xor
,year
,year_month
,zerofill
,zone
\ No newline at end of file
package com.esv.datacenter.iot;
import com.esv.datacenter.iot.common.util.FileUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @description:
* @author: huangchaobin@esvtek.com
* @createTime: 2020/08/04 9:06
* @version:1.0
*/
@SpringBootTest
@Slf4j
public class SimpleTest {
@Test
public void test() {
String dataPath = "/data/SqlReservedWords.txt";
try {
String fileContent = FileUtils.getJarFileContent(this.getClass(), dataPath);
String[] datas = fileContent.split(",");
log.info(fileContent);
log.info(datas[0]);
log.info(datas[1]);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
}
......@@ -29,7 +29,7 @@ public class TimescaleComponentTest {
@Test
public void createTable_test() {
Long modelId = 999L;
Long modelId = 99999L;
ModelAndInstanceDto modelAndInstanceDto = new ModelAndInstanceDto();
ObjectModelEntity objectModelEntity = new ObjectModelEntity();
......@@ -40,6 +40,28 @@ public class TimescaleComponentTest {
ObjectModelPropertyEntity objectModelPropertyEntity = new ObjectModelPropertyEntity();
objectModelPropertyEntity.setPropertyCode("temp");
objectModelPropertyEntity.setPropertyType(2);
objectModelPropertyEntity.setPropertyDefaultValue("26");
objectModelPropertyEntity.setPropertyName("温度");
objectModelPropertyEntity.setPropertyUnit("摄氏度");
objectModelPropertyEntityList.add(objectModelPropertyEntity);
modelAndInstanceDto.setObjectModelPropertyEntityList(objectModelPropertyEntityList);
objectModelPropertyEntity = new ObjectModelPropertyEntity();
objectModelPropertyEntity.setPropertyCode("hum");
objectModelPropertyEntity.setPropertyType(2);
objectModelPropertyEntity.setPropertyName("湿度");
objectModelPropertyEntityList.add(objectModelPropertyEntity);
modelAndInstanceDto.setObjectModelPropertyEntityList(objectModelPropertyEntityList);
objectModelPropertyEntity = new ObjectModelPropertyEntity();
objectModelPropertyEntity.setPropertyCode("deleted");
objectModelPropertyEntity.setPropertyType(3);
objectModelPropertyEntity.setPropertyName("是否删除");
objectModelPropertyEntity.setPropertyDefaultValue("false");
objectModelPropertyEntityList.add(objectModelPropertyEntity);
modelAndInstanceDto.setObjectModelPropertyEntityList(objectModelPropertyEntityList);
objectModelPropertyEntity = new ObjectModelPropertyEntity();
objectModelPropertyEntity.setPropertyCode("remark");
objectModelPropertyEntity.setPropertyType(1);
objectModelPropertyEntity.setPropertyName("备注");
objectModelPropertyEntityList.add(objectModelPropertyEntity);
modelAndInstanceDto.setObjectModelPropertyEntityList(objectModelPropertyEntityList);
......@@ -49,7 +71,7 @@ public class TimescaleComponentTest {
@Test
public void dropTable_test() {
Long modelId = 999L;
Long modelId = 99999L;
Boolean result = timescaleComponent.dropTable(modelId);
log.info(String.valueOf(result));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment