Commit 28f9e05d authored by huangcb's avatar huangcb

增加数据类型:date/time/datetime处理

parent 800dced9
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("_instance_id_idx ON ")
.append("_device_id_idx ON ")
.append(table)
.append(" (instance_id);");
.append(" (device_id);");
return sb.toString();
}
......
......@@ -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;
}
}
......@@ -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;
}
......
......@@ -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
......@@ -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-int4,datetime-timestamptz
table-prefix: iot_data_model_
\ No newline at end of file
......@@ -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 = "/model/add";
String url = "/dataModel/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())
......
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