Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iot-service
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Container Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
SuperHive
back-end
iot-service
Commits
28f9e05d
Commit
28f9e05d
authored
Aug 07, 2020
by
huangcb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加数据类型:date/time/datetime处理
parent
800dced9
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
215 additions
and
12 deletions
+215
-12
TimescaleComponent.java
...v/datacenter/iot/common/component/TimescaleComponent.java
+16
-2
DateUtils.java
...in/java/com/esv/datacenter/iot/common/util/DateUtils.java
+98
-0
DataModelPropertyServiceImpl.java
.../datamodel/service/impl/DataModelPropertyServiceImpl.java
+16
-0
application-dev.yml
src/main/resources/application-dev.yml
+3
-3
application-local.yml
src/main/resources/application-local.yml
+1
-1
DataModelControllerTest.java
.../module/datamodel/controller/DataModelControllerTest.java
+81
-6
No files found.
src/main/java/com/esv/datacenter/iot/common/component/TimescaleComponent.java
View file @
28f9e05d
package
com
.
esv
.
datacenter
.
iot
.
common
.
component
;
import
com.esv.datacenter.iot.common.util.DateUtils
;
import
com.esv.datacenter.iot.module.datamodel.entity.DataModelPropertyEntity
;
import
com.zaxxer.hikari.HikariDataSource
;
import
io.micrometer.core.instrument.util.TimeUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -186,6 +188,18 @@ public class TimescaleComponent {
case
"number"
:
sb
.
append
(
defaultValue
);
break
;
case
"integer"
:
sb
.
append
(
defaultValue
);
break
;
case
"date"
:
sb
.
append
(
"'"
).
append
(
defaultValue
).
append
(
"'::date"
);
break
;
case
"time"
:
sb
.
append
(
DateUtils
.
getMilliSecondsOfDay
(
defaultValue
));
break
;
case
"datetime"
:
sb
.
append
(
"'"
).
append
(
defaultValue
).
append
(
"'"
);
break
;
default
:
sb
.
append
(
"'"
).
append
(
defaultValue
).
append
(
"'::text"
);
break
;
...
...
@@ -201,9 +215,9 @@ public class TimescaleComponent {
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"CREATE INDEX "
)
.
append
(
table
)
.
append
(
"_
instan
ce_id_idx ON "
)
.
append
(
"_
devi
ce_id_idx ON "
)
.
append
(
table
)
.
append
(
" (
instan
ce_id);"
);
.
append
(
" (
devi
ce_id);"
);
return
sb
.
toString
();
}
...
...
src/main/java/com/esv/datacenter/iot/common/util/DateUtils.java
View file @
28f9e05d
...
...
@@ -6,6 +6,7 @@ import org.joda.time.format.DateTimeFormat;
import
org.joda.time.format.DateTimeFormatter
;
import
java.util.Date
;
import
java.util.Objects
;
/**
* @description: 日期工具类
...
...
@@ -321,4 +322,101 @@ public class DateUtils {
DateTime
dateTime
=
new
DateTime
(
target
);
return
dateTime
.
isAfter
(
startTime
.
getTime
())
&&
dateTime
.
isBefore
(
endTime
.
getTime
());
}
/**
* @description 判断是否有效日期时间(yyyy-MM-dd HH:mm:ss)
* @param dateTimeStr:
* @param format:
* @return boolean
* @author huangChaobin@esvtek.com
* @createTime 2020/08/07 16:21
**/
public
static
boolean
isValidDatetime
(
String
dateTimeStr
,
String
format
)
{
if
(
Objects
.
isNull
(
StringUtils
.
trimToNull
(
format
)))
{
format
=
DATE_FORMAT1
;
}
try
{
Date
datetime
=
parse
(
dateTimeStr
,
format
);
if
(!
dateTimeStr
.
equals
(
format
(
datetime
,
format
)))
{
return
false
;
}
}
catch
(
Exception
e
)
{
return
false
;
}
return
true
;
}
/**
* @description 判断是否有效日期(yyyy-MM-dd)
* @param dateStr:
* @param format:
* @return boolean
* @author huangChaobin@esvtek.com
* @createTime 2020/08/07 16:20
**/
public
static
boolean
isValidDate
(
String
dateStr
,
String
format
)
{
if
(
Objects
.
isNull
(
StringUtils
.
trimToNull
(
format
)))
{
format
=
DATE_FORMAT3
;
}
try
{
Date
date
=
parse
(
dateStr
,
format
);
if
(!
dateStr
.
equals
(
format
(
date
,
format
)))
{
return
false
;
}
}
catch
(
Exception
e
)
{
return
false
;
}
return
true
;
}
/**
* @description 校验是否有效时间(HH:mm:ss)
* @param time:
* @param format:
* @return boolean
* @author huangChaobin@esvtek.com
* @createTime 2020/08/07 16:08
**/
public
static
boolean
isValidTime
(
String
time
,
String
format
)
{
if
(
Objects
.
isNull
(
StringUtils
.
trimToNull
(
format
)))
{
format
=
DATE_FORMAT1
;
}
String
datetime
=
"1970-01-01 "
+
time
;
try
{
Date
date
=
parse
(
datetime
,
format
);
if
(!
datetime
.
equals
(
format
(
date
,
format
)))
{
return
false
;
}
}
catch
(
Exception
e
)
{
return
false
;
}
return
true
;
}
/**
* @description 获取距离当天0点0分0秒的秒数
* @param time:
* @return int
* @author huangChaobin@esvtek.com
* @createTime 2020/08/07 16:17
**/
public
static
int
getSecondsOfDay
(
String
time
)
{
String
[]
hms
=
time
.
split
(
":"
);
int
timeOfDay
=
3600
*
Integer
.
parseInt
(
hms
[
0
])
+
60
*
Integer
.
parseInt
(
hms
[
1
])
+
Integer
.
parseInt
(
hms
[
2
]);
return
timeOfDay
;
}
/**
* @description 获取距离当天0点0分0秒的毫秒数
* @param time:
* @return int
* @author huangChaobin@esvtek.com
* @createTime 2020/08/07 16:17
**/
public
static
int
getMilliSecondsOfDay
(
String
time
)
{
return
getSecondsOfDay
(
time
)
*
1000
;
}
}
src/main/java/com/esv/datacenter/iot/module/datamodel/service/impl/DataModelPropertyServiceImpl.java
View file @
28f9e05d
...
...
@@ -7,6 +7,7 @@ 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.DateUtils
;
import
com.esv.datacenter.iot.common.util.ReqUtils
;
import
com.esv.datacenter.iot.module.datamodel.dao.DataModelPropertyDao
;
import
com.esv.datacenter.iot.module.datamodel.entity.DataModelPropertyEntity
;
...
...
@@ -129,6 +130,21 @@ public class DataModelPropertyServiceImpl extends ServiceImpl<DataModelPropertyD
throw
new
EException
(
ECode
.
PARAM_ERROR
.
code
(),
"无效的默认值["
+
propertyDefaultValue
+
"]"
);
}
break
;
case
"date"
:
if
(!
DateUtils
.
isValidDate
(
propertyDefaultValue
,
null
))
{
throw
new
EException
(
ECode
.
PARAM_ERROR
.
code
(),
"无效的默认值["
+
propertyDefaultValue
+
"]"
);
}
break
;
case
"time"
:
if
(!
DateUtils
.
isValidTime
(
propertyDefaultValue
,
null
))
{
throw
new
EException
(
ECode
.
PARAM_ERROR
.
code
(),
"无效的默认值["
+
propertyDefaultValue
+
"]"
);
}
break
;
case
"datetime"
:
if
(!
DateUtils
.
isValidDatetime
(
propertyDefaultValue
,
null
))
{
throw
new
EException
(
ECode
.
PARAM_ERROR
.
code
(),
"无效的默认值["
+
propertyDefaultValue
+
"]"
);
}
break
;
default
:
break
;
}
...
...
src/main/resources/application-dev.yml
View file @
28f9e05d
...
...
@@ -71,7 +71,7 @@ feign-base-service-name: datacenter-base-service
db
:
dict
:
table-field
:
map
:
1-string,2-number,3-
boolean
map
:
1-string,2-number,3-
integer,4-boolean,5-date,6-time,7-datetime
timescale
:
data-source
:
jdbc-url
:
jdbc:postgresql://192.168.31.248:5432/iot
...
...
@@ -84,5 +84,5 @@ timescale:
maximum-pool-size
:
1
max-lifetime
:
0
table-field
:
map
:
string-text,number-numeric,boolean-bit(1)
table-prefix
:
iot_model_
\ No newline at end of file
map
:
string-text,number-numeric,integer-int8,boolean-bit(1),date-date,time-int4,datetime-timestamptz
table-prefix
:
iot_data_model_
\ No newline at end of file
src/main/resources/application-local.yml
View file @
28f9e05d
...
...
@@ -84,5 +84,5 @@ timescale:
maximum-pool-size
:
1
max-lifetime
:
0
table-field
:
map
:
string-text,number-numeric,integer-int8,boolean-bit(1),date-date,time-int,datetime-timestamptz
map
:
string-text,number-numeric,integer-int8,boolean-bit(1),date-date,time-int
4
,datetime-timestamptz
table-prefix
:
iot_data_model_
\ No newline at end of file
src/test/java/com/esv/datacenter/iot/module/datamodel/controller/DataModelControllerTest.java
View file @
28f9e05d
...
...
@@ -3,8 +3,8 @@ package com.esv.datacenter.iot.module.datamodel.controller;
import
com.alibaba.fastjson.JSONObject
;
import
com.esv.datacenter.iot.BaseTestController
;
import
com.esv.datacenter.iot.common.response.ECode
;
import
com.esv.datacenter.iot.module.datamodel.form.DataModelPropertyForm
;
import
com.esv.datacenter.iot.module.datamodel.form.DataModelForm
;
import
com.esv.datacenter.iot.module.datamodel.form.DataModelPropertyForm
;
import
lombok.extern.slf4j.Slf4j
;
import
org.junit.Assert
;
import
org.junit.FixMethodOrder
;
...
...
@@ -39,24 +39,99 @@ import java.util.List;
public
class
DataModelControllerTest
extends
BaseTestController
{
/**
*
*
创建数据模型
**/
@Test
public
void
a1_add_success_test
()
throws
Exception
{
String
url
=
"/
m
odel/add"
;
String
url
=
"/
dataM
odel/add"
;
// 构造数据
DataModelForm
form
=
new
DataModelForm
();
form
.
setName
(
"
测试模型
"
);
form
.
setName
(
"
hcb-测试模型-1639
"
);
form
.
setDescription
(
"这是一个测试模型"
);
List
<
DataModelPropertyForm
>
propertyList
=
new
ArrayList
<>();
DataModelPropertyForm
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"
id
"
);
dataModelPropertyForm
.
setPropertyName
(
"
主键
"
);
dataModelPropertyForm
.
setPropertyCode
(
"
t1
"
);
dataModelPropertyForm
.
setPropertyName
(
"
string
"
);
dataModelPropertyForm
.
setPropertyType
(
1
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"hello world"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t2"
);
dataModelPropertyForm
.
setPropertyName
(
"number"
);
dataModelPropertyForm
.
setPropertyType
(
2
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"3.14"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t3"
);
dataModelPropertyForm
.
setPropertyName
(
"integer"
);
dataModelPropertyForm
.
setPropertyType
(
3
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"100"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t4"
);
dataModelPropertyForm
.
setPropertyName
(
"boolean"
);
dataModelPropertyForm
.
setPropertyType
(
4
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"true"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t5"
);
dataModelPropertyForm
.
setPropertyName
(
"date"
);
dataModelPropertyForm
.
setPropertyType
(
5
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"1970-01-01"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t6"
);
dataModelPropertyForm
.
setPropertyName
(
"time"
);
dataModelPropertyForm
.
setPropertyType
(
6
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"00:00:00"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
dataModelPropertyForm
=
new
DataModelPropertyForm
();
dataModelPropertyForm
.
setPropertyCode
(
"t7"
);
dataModelPropertyForm
.
setPropertyName
(
"datetime"
);
dataModelPropertyForm
.
setPropertyType
(
7
);
dataModelPropertyForm
.
setPropertyDefaultValue
(
"1970-01-01 00:00:00"
);
propertyList
.
add
(
dataModelPropertyForm
);
form
.
setPropertyList
(
propertyList
);
MvcResult
mvcResult
=
this
.
getMockMvc
().
perform
(
MockMvcRequestBuilders
.
post
(
url
)
.
contentType
(
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
.
headers
(
this
.
getDefaultHttpHeaders
())
.
content
(
form
.
toString
()))
.
andDo
(
MockMvcResultHandlers
.
print
())
.
andExpect
(
MockMvcResultMatchers
.
status
().
isOk
())
.
andReturn
();
String
responseStr
=
mvcResult
.
getResponse
().
getContentAsString
();
log
.
info
(
responseStr
);
JSONObject
result
=
JSONObject
.
parseObject
(
responseStr
);
Assert
.
assertEquals
(
ECode
.
SUCCESS
.
code
(),
result
.
getIntValue
(
"code"
));
}
/**
* 删除数据模型
**/
@Test
public
void
b1_delete_success_test
()
throws
Exception
{
String
url
=
"/dataModel/delete"
;
// 构造数据
DataModelForm
form
=
new
DataModelForm
();
form
.
setId
(
4L
);
MvcResult
mvcResult
=
this
.
getMockMvc
().
perform
(
MockMvcRequestBuilders
.
post
(
url
)
.
contentType
(
MediaType
.
APPLICATION_JSON_UTF8_VALUE
)
.
headers
(
this
.
getDefaultHttpHeaders
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment