Commit 29485f98 authored by huangcb's avatar huangcb

1.调整mybatis配置;2.增加物模型代码;

parent e7db7235
......@@ -110,6 +110,11 @@
<artifactId>druid-spring-boot-starter</artifactId>
<version>${alibaba-druid.version}</version>
</dependency>
<dependency>
<groupId>com.esv.platform</groupId>
<artifactId>gateway-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>
......
......@@ -18,10 +18,10 @@ import java.util.TimeZone;
*/
@SpringBootApplication
@EnableDiscoveryClient
public class BaseApplication {
public class IoTApplication {
public static void main(String[] args) {
SpringApplication.run(BaseApplication.class, args);
SpringApplication.run(IoTApplication.class, args);
}
@Bean
......
......@@ -4,21 +4,85 @@ import com.alibaba.fastjson.JSONObject;
import com.esv.datacenter.iot.common.constants.CommonConstants;
import com.esv.datacenter.iot.common.exception.EException;
import com.esv.datacenter.iot.common.response.ECode;
import com.esv.gateway.common.GatewayHeaders;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* @description: Http请求工具类
* @project: freight-base-service
* @name: com.esv.htwl.base.common.util.ReqUtils
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/05/26 19:09
* @version:1.0
*/
@Slf4j
public class ReqUtils {
public static String getRequestHeader(String headerKey) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (null == servletRequestAttributes) {
Object value = ThreadLocalCacheUtils.getByKey(headerKey);
return null == value ? null : value.toString();
} else {
HttpServletRequest request = servletRequestAttributes.getRequest();
return request.getHeader(headerKey);
}
}
/**
* description 获取当前请求的用户ID
* param []
* return java.lang.Long
* author Administrator
* createTime 2020/04/28 14:08
**/
public static Long getRequestUserId() {
String userId = getRequestHeader(GatewayHeaders.USER_ID);
if (StringUtils.isNotBlank(userId)) {
return Long.parseLong(userId);
} else {
return null;
}
}
/**
* description 获取当前请求的租户ID
* param []
* return java.lang.Long
* author Administrator
* createTime 2020/05/25 13:55
**/
public static Long getRequestTenantId() {
String userId = getRequestHeader(GatewayHeaders.TENANT_ID);
if (StringUtils.isNotBlank(userId)) {
return Long.parseLong(userId);
} else {
return null;
}
}
/**
* description 获取当前请求的用户帐号
* param []
* return java.lang.String
* author Administrator
* createTime 2020/04/28 14:12
**/
public static String getRequestUserAccount() {
return getRequestHeader(GatewayHeaders.USER_ACCOUNT);
}
/**
* 获得Http客户端的ip
* @param req
......@@ -52,4 +116,63 @@ public class ReqUtils {
}
}
}
/**
* description 获取Post请求Body
* param [req]
* return java.lang.String
* author HuangChaobin
* createTime 2020/06/02 19:45
**/
public static String getPostBody(HttpServletRequest req) {
String reqBody = null;
String method = req.getMethod();
if (!CommonConstants.HTTP_REQUEST_METHOD_POST.equalsIgnoreCase(method)) {
return reqBody;
}
StringBuilder sb = new StringBuilder();
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = req.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(CommonConstants.DEFAULT_CHARACTER_ENCODING)));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
if (0 == sb.length()) {
Map<String, String> bodyMap = new HashMap<>();
Map<String, String[]> parameterMap = req.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
for (String value : entry.getValue()) {
bodyMap.put(entry.getKey(), value);
}
}
reqBody = bodyMap.toString();
} else {
reqBody = sb.toString();
}
} catch (IOException e) {
log.error("解析post参数时发生错误:{}", e.getMessage(), e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
return reqBody;
}
}
package com.esv.datacenter.iot.common.util;
import java.util.HashMap;
import java.util.Map;
/**
* @description: ThreadLocal Cache工具类
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/06/11 15:27
* @version:1.0
*/
public class ThreadLocalCacheUtils {
private static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();
/**
* 向ThreadLocal缓存值
**/
public static void setByKey(String key, Object value) {
Map<String, Object> map = threadLocal.get();
if (null == map) {
map = new HashMap<>(8);
}
map.put(key, value);
threadLocal.set(map);
}
/**
* 从ThreadLocal里获取缓存Key的值
**/
public static Object getByKey(String key) {
Map<String, Object> map = threadLocal.get();
if (null == map) {
return null;
} else {
return map.get(key);
}
}
/**
* 从ThreadLocal里移除缓存Key
**/
public static void removeByKey(String key) {
Map<String, Object> map = threadLocal.get();
if (null != map) {
map.remove(key);
threadLocal.set(map);
}
}
/**
* 从ThreadLocal里获取缓存
**/
public static Object get() {
return threadLocal.get();
}
/**
* 移除当前线程缓存
* 用于释放当前线程ThreadLocal资源
*/
public static void remove() {
threadLocal.remove();
}
}
package com.esv.datacenter.iot.config.mybatis;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
import com.esv.datacenter.iot.common.util.ReqUtils;
import com.esv.gateway.common.DataPermsType;
import com.esv.gateway.common.GatewayHeaders;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.schema.Column;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @description:
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/17 13:35
* @version:1.0
*/
public class DataPermHandler implements TenantHandler {
/**
* 不需要数据权限查询的表
**/
private final List<String> filterTableNames = Arrays.asList("");
@Override
public Expression getTenantId(boolean where) {
String dataPerm = ReqUtils.getRequestHeader(GatewayHeaders.DATA_PERM);
//这里只是演示切换单个tenantId和多个tenantId
final boolean multipleTenantIds = DataPermsType.DATA_PERM_DEPARTMENT.equals(dataPerm);
//具体场景,可以根据情况来拼接
if (where && multipleTenantIds) {
//演示如何实现tenant_id in (1,2)
return multipleTenantIdCondition();
} else {
return singleTenantIdCondition();
}
}
// 获取tenantId
private Expression singleTenantIdCondition() {
String tenantId = ReqUtils.getRequestHeader(GatewayHeaders.TENANT_ID);
return new LongValue(tenantId);
}
// 获取departmentId
private Expression multipleTenantIdCondition() {
String departmentChildren = ReqUtils.getRequestHeader(GatewayHeaders.DEPARTMENT_CHILDREN);
final InExpression inExpression = new InExpression();
inExpression.setLeftExpression(new Column(getTenantIdColumn()));
final ExpressionList itemsList = new ExpressionList();
final List<Expression> inValues = new ArrayList<>();
for (String departmentId : departmentChildren.split(",")) {
inValues.add(new LongValue(departmentId));
}
itemsList.setExpressions(inValues);
inExpression.setRightItemsList(itemsList);
return inExpression;
}
@Override
public String getTenantIdColumn() {
String dataPerm = ReqUtils.getRequestHeader(GatewayHeaders.DATA_PERM);
//这里只是演示切换单个tenantId和多个tenantId
final boolean multipleTenantIds = DataPermsType.DATA_PERM_DEPARTMENT.equals(dataPerm);
if (multipleTenantIds) {
return "department_id";
}
return "tenant_id";
}
/**
* description 判断是否过滤表
* param [tableName]
* return boolean
* author chenfm
* createTime 2020/4/8 9:31
**/
@Override
public boolean doTableFilter(String tableName) {
// 只有查询时添加条件
if (tableName.endsWith("|select")) {
tableName = tableName.replace("|select", "");
} else {
return true;
}
if (filterTableNames.contains(tableName)) {
return true;
}
// 全局数据权限不加入条件
String dataPerm = ReqUtils.getRequestHeader(GatewayHeaders.DATA_PERM);
if (DataPermsType.DATA_PERM_ALL.equals(dataPerm)) {
return true;
}
return false;
}
}
package com.esv.datacenter.iot.config.mybatis;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.BinaryExpression;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.select.*;
import java.util.List;
/**
* @description:
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/17 13:34
* @version:1.0
*/
@Slf4j
public class DataPermParser extends TenantSqlParser {
/**
* 目前仅支持:in, between, >, <, =, !=等比较操作,处理多租户的字段加上表别名
*
* @param expression
* @param table
* @return
*/
protected Expression processTableAlias(Expression expression, Table table) {
String tableAliasName;
if (table.getAlias() == null) {
tableAliasName = table.getName();
} else {
tableAliasName = table.getAlias().getName();
}
if (expression instanceof InExpression) {
InExpression in = (InExpression) expression;
if (in.getLeftExpression() instanceof Column) {
setTableAliasNameForColumn((Column) in.getLeftExpression(), tableAliasName);
}
} else if (expression instanceof BinaryExpression) {
BinaryExpression compare = (BinaryExpression) expression;
if (compare.getLeftExpression() instanceof Column) {
setTableAliasNameForColumn((Column) compare.getLeftExpression(), tableAliasName);
} else if (compare.getRightExpression() instanceof Column) {
setTableAliasNameForColumn((Column) compare.getRightExpression(), tableAliasName);
}
} else if (expression instanceof Between) {
Between between = (Between) expression;
if (between.getLeftExpression() instanceof Column) {
setTableAliasNameForColumn((Column) between.getLeftExpression(), tableAliasName);
}
}
return expression;
}
private void setTableAliasNameForColumn(Column column, String tableAliasName) {
column.setColumnName(tableAliasName + "." + column.getColumnName());
}
/**
* 默认是按 tenant_id=1 按等于条件追加
*
* @param currentExpression 现有的条件:比如你原来的sql查询条件
* @param table
* @return
*/
@Override
protected Expression builderExpression(Expression currentExpression, Table table) {
final Expression tenantExpression = this.getTenantHandler().getTenantId(true);
Expression appendExpression;
if (!(tenantExpression instanceof SupportsOldOracleJoinSyntax)) {
appendExpression = new EqualsTo();
((EqualsTo) appendExpression).setLeftExpression(this.getAliasColumn(table));
((EqualsTo) appendExpression).setRightExpression(tenantExpression);
} else {
appendExpression = processTableAlias(tenantExpression, table);
}
if (currentExpression == null) {
return appendExpression;
}
if (currentExpression instanceof BinaryExpression) {
BinaryExpression binaryExpression = (BinaryExpression) currentExpression;
if (binaryExpression.getLeftExpression() instanceof FromItem) {
processFromItem((FromItem) binaryExpression.getLeftExpression());
}
if (binaryExpression.getRightExpression() instanceof FromItem) {
processFromItem((FromItem) binaryExpression.getRightExpression());
}
} else if (currentExpression instanceof InExpression) {
InExpression inExp = (InExpression) currentExpression;
ItemsList rightItems = inExp.getRightItemsList();
if (rightItems instanceof SubSelect) {
processSelectBody(((SubSelect) rightItems).getSelectBody());
}
}
if (currentExpression instanceof OrExpression) {
return new AndExpression(new Parenthesis(currentExpression), appendExpression);
} else {
return new AndExpression(currentExpression, appendExpression);
}
}
@Override
protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) {
FromItem fromItem = plainSelect.getFromItem();
if (fromItem instanceof Table) {
Table fromTable = (Table) fromItem;
if (!this.getTenantHandler().doTableFilter(fromTable.getName() + "|select")) {
plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable));
if (addColumn) {
plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(this.getTenantHandler().getTenantIdColumn())));
}
}
} else {
processFromItem(fromItem);
}
List<Join> joins = plainSelect.getJoins();
if (joins != null && joins.size() > 0) {
joins.forEach(j -> {
processJoin(j);
processFromItem(j.getRightItem());
});
}
}
}
package com.esv.datacenter.iot.config.mybatis;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.esv.datacenter.iot.common.util.ReqUtils;
import com.esv.gateway.common.GatewayHeaders;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @description:
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/17 13:31
* @version:1.0
*/
@Slf4j
@Component
public class EsvMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasSetter("createUser")) {
String userAccount = ReqUtils.getRequestHeader(GatewayHeaders.USER_ACCOUNT);
this.setFieldValByName("createUser", userAccount, metaObject);
}
if (metaObject.hasSetter("createTime")) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
if (metaObject.hasSetter("updateUser")) {
String userAccount = ReqUtils.getRequestHeader(GatewayHeaders.USER_ACCOUNT);
this.setFieldValByName("updateUser", userAccount, metaObject);
}
if (metaObject.hasSetter("updateTime")) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
if (metaObject.hasSetter("tenantId") && metaObject.getValue("tenantId") == null) {
String tenantId = ReqUtils.getRequestHeader(GatewayHeaders.TENANT_ID);
this.setFieldValByName("tenantId", Long.parseLong(tenantId), metaObject);
}
if (metaObject.hasSetter("departmentId") && metaObject.getValue("departmentId") == null) {
String departmentId = ReqUtils.getRequestHeader(GatewayHeaders.DEPARTMENT_ID);
if (StringUtils.isBlank(departmentId)) {
departmentId = "-1";
}
this.setFieldValByName("departmentId", Long.parseLong(departmentId), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
if (metaObject.hasSetter("updateUser")) {
String userAccount = ReqUtils.getRequestHeader(GatewayHeaders.USER_ACCOUNT);
this.setFieldValByName("updateUser", userAccount, metaObject);
}
if (metaObject.hasSetter("updateTime")) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
}
package com.esv.datacenter.iot.config;
package com.esv.datacenter.iot.config.mybatis;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @project: htwl-base-service
* @name: com.esv.htwl.base.config.MybatisPlusConfig
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/09 9:58
* @createTime: 2020/04/17 13:30
* @version:1.0
*/
@Configuration
......@@ -20,23 +22,22 @@ import org.springframework.context.annotation.Configuration;
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* description MybatisPlus乐观锁插件
* description 多租户分页插件
* param []
* return com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor
* author chenfm
* createTime 2020/4/13 20:17
* return com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
* author Administrator
* createTime 2020/04/17 14:56
**/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
List<ISqlParser> sqlParserList = new ArrayList<>();
TenantSqlParser tenantSqlParser = new DataPermParser();
tenantSqlParser.setTenantHandler(new DataPermHandler());
sqlParserList.add(tenantSqlParser);
paginationInterceptor.setSqlParserList(sqlParserList);
return paginationInterceptor;
}
}
package com.esv.datacenter.iot.module.omodel.dao;
import com.esv.datacenter.iot.module.omodel.entity.InstanceTopicEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 物模型实例Topic表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Mapper
public interface InstanceTopicDao extends BaseMapper<InstanceTopicEntity> {
}
package com.esv.datacenter.iot.module.omodel.dao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 物模型表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Mapper
public interface ObjectModelDao extends BaseMapper<ObjectModelEntity> {
}
package com.esv.datacenter.iot.module.omodel.dao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelInstanceEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 物模型实例表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Mapper
public interface ObjectModelInstanceDao extends BaseMapper<ObjectModelInstanceEntity> {
}
package com.esv.datacenter.iot.module.omodel.dao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelPropertyEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 物模型属性表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Mapper
public interface ObjectModelPropertyDao extends BaseMapper<ObjectModelPropertyEntity> {
}
package com.esv.datacenter.iot.module.omodel.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 物模型实例Topic表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Data
@TableName("base_instance_topic")
public class InstanceTopicEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 模型ID
*/
private Long modelId;
/**
* 实例ID
*/
private Long instanceId;
/**
* MQTT Topic
*/
private String topic;
/**
* 创建时间
*/
private Date createTime;
}
package com.esv.datacenter.iot.module.omodel.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 物模型表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Data
@TableName("base_object_model")
public class ObjectModelEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 模型名称
*/
private String name;
/**
* 模型描述
*/
private String description;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.omodel.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 物模型实例表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Data
@TableName("base_object_model_instance")
public class ObjectModelInstanceEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 模型ID
*/
private Long modelId;
/**
* 实例名称
*/
private String instanceName;
/**
* 实例描述
*/
private String description;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.omodel.entity;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
* 物模型属性表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
@Data
@TableName("base_object_model_property")
public class ObjectModelPropertyEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Long id;
/**
* 模型ID
*/
private Long modelId;
/**
* 属性代码
*/
private String propertyCode;
/**
* 属性名称
*/
private String propertyName;
/**
* 属性类型(字典表)
*/
private Integer propertyType;
/**
* 属性默认值
*/
private String propertyDefaultValue;
/**
* 属性单位
*/
private String propertyUnit;
/**
* 排列序号
*/
private Long sortNum;
/**
* 是否删除:0-未删除、1-已删除
*/
@TableLogic
private Boolean deleted;
/**
* 创建者
*/
@TableField(fill = FieldFill.INSERT)
private String createUser;
/**
* 修改者
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateUser;
/**
* 创建时间
*/
private Date createTime;
/**
* 修改时间
*/
private Date updateTime;
}
package com.esv.datacenter.iot.module.omodel.form;
import com.esv.datacenter.iot.common.validator.groups.ValidatorInsert;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
/**
* @description:
* @author: huangchaobin@esvtek.com
* @createTime: 2020/07/31 13:47
* @version:1.0
*/
@Data
public class ObjectModelForm {
/**
*
*/
private Long id;
/**
* 模型名称
*/
@Length(max = 50, message = "[模型名称]长度不合法", groups = {ValidatorInsert.class})
@NotBlank(message = "[模型名称]不能为空", groups = {ValidatorInsert.class})
private String name;
/**
* 模型描述
*/
@Length(max = 200, message = "[模型描述]长度不合法", groups = {ValidatorInsert.class})
@NotBlank(message = "[模型描述]不能为空", groups = {ValidatorInsert.class})
private String description;
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE);
}
}
package com.esv.datacenter.iot.module.omodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.omodel.entity.InstanceTopicEntity;
/**
* 物模型实例Topic表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
public interface InstanceTopicService extends IService<InstanceTopicEntity> {
}
package com.esv.datacenter.iot.module.omodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelInstanceEntity;
/**
* 物模型实例表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
public interface ObjectModelInstanceService extends IService<ObjectModelInstanceEntity> {
}
package com.esv.datacenter.iot.module.omodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelPropertyEntity;
/**
* 物模型属性表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
public interface ObjectModelPropertyService extends IService<ObjectModelPropertyEntity> {
}
package com.esv.datacenter.iot.module.omodel.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelEntity;
import com.esv.datacenter.iot.module.omodel.form.ObjectModelForm;
/**
* 物模型表
*
* @author 黄朝斌
* @email huangchaobin@esvtek.com
* @date 2020-07-31 13:35:49
*/
public interface ObjectModelService extends IService<ObjectModelEntity> {
/**
* @description 创建模型
* @param form:
* @return java.lang.Long
* @author huangChaobin@esvtek.com
* @createTime 2020/07/31 13:52
**/
Long createObjectModel(ObjectModelForm form);
}
package com.esv.datacenter.iot.module.omodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.omodel.dao.InstanceTopicDao;
import com.esv.datacenter.iot.module.omodel.entity.InstanceTopicEntity;
import com.esv.datacenter.iot.module.omodel.service.InstanceTopicService;
import org.springframework.stereotype.Service;
@Service("instanceTopicService")
public class InstanceTopicServiceImpl extends ServiceImpl<InstanceTopicDao, InstanceTopicEntity> implements InstanceTopicService {
}
\ No newline at end of file
package com.esv.datacenter.iot.module.omodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.omodel.dao.ObjectModelInstanceDao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelInstanceEntity;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelInstanceService;
import org.springframework.stereotype.Service;
@Service("objectModelInstanceService")
public class ObjectModelInstanceServiceImpl extends ServiceImpl<ObjectModelInstanceDao, ObjectModelInstanceEntity> implements ObjectModelInstanceService {
}
\ No newline at end of file
package com.esv.datacenter.iot.module.omodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.service.ObjectModelPropertyService;
import org.springframework.stereotype.Service;
@Service("objectModelPropertyService")
public class ObjectModelPropertyServiceImpl extends ServiceImpl<ObjectModelPropertyDao, ObjectModelPropertyEntity> implements ObjectModelPropertyService {
}
\ No newline at end of file
package com.esv.datacenter.iot.module.omodel.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.esv.datacenter.iot.module.omodel.dao.ObjectModelDao;
import com.esv.datacenter.iot.module.omodel.entity.ObjectModelEntity;
import com.esv.datacenter.iot.module.omodel.form.ObjectModelForm;
import com.esv.datacenter.iot.module.omodel.service.ObjectModelService;
import org.springframework.stereotype.Service;
@Service("objectModelService")
public class ObjectModelServiceImpl extends ServiceImpl<ObjectModelDao, ObjectModelEntity> implements ObjectModelService {
@Override
public Long createObjectModel(ObjectModelForm form) {
return null;
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.omodel.dao.InstanceTopicDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.omodel.entity.InstanceTopicEntity" id="instanceTopicMap">
<result property="id" column="id"/>
<result property="modelId" column="model_id"/>
<result property="instanceId" column="instance_id"/>
<result property="topic" column="topic"/>
<result property="createTime" column="create_time"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.omodel.dao.ObjectModelDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.omodel.entity.ObjectModelEntity" id="objectModelMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="description" column="description"/>
<result property="deleted" column="deleted"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.omodel.dao.ObjectModelInstanceDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.omodel.entity.ObjectModelInstanceEntity" id="objectModelInstanceMap">
<result property="id" column="id"/>
<result property="modelId" column="model_id"/>
<result property="instanceName" column="instance_name"/>
<result property="description" column="description"/>
<result property="deleted" column="deleted"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.esv.datacenter.iot.module.omodel.dao.ObjectModelPropertyDao">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.esv.datacenter.iot.module.omodel.entity.ObjectModelPropertyEntity" id="objectModelPropertyMap">
<result property="id" column="id"/>
<result property="modelId" column="model_id"/>
<result property="propertyCode" column="property_code"/>
<result property="propertyName" column="property_name"/>
<result property="propertyType" column="property_type"/>
<result property="propertyDefaultValue" column="property_default_value"/>
<result property="propertyUnit" column="property_unit"/>
<result property="sortNum" column="sort_num"/>
<result property="deleted" column="deleted"/>
<result property="createUser" column="create_user"/>
<result property="updateUser" column="update_user"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
\ No newline at end of file
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