From 097980ac1bbc85ada9f5b4e8bf673e194773fa01 Mon Sep 17 00:00:00 2001 From: robinhoodjim Date: Sat, 2 May 2026 11:16:33 +0800 Subject: [PATCH 1/3] Support Logic Delete --- .../core/base/annotation/MappingEntity.java | 5 +- .../com/robin/core/base/dao/CommJdbcUtil.java | 1 - .../com/robin/core/base/dao/IjdbcDao.java | 2 +- .../java/com/robin/core/base/dao/JdbcDao.java | 329 +++++++----------- .../com/robin/core/base/dao/JdbcHelper.java | 160 +++++++++ .../com/robin/core/base/dao/SqlMapperDao.java | 6 +- .../base/dao/handler/MetaObjectHandler.java | 1 + .../base/dao/util/AnnotationRetriever.java | 21 +- .../core/base/dao/util/EntityMappingUtil.java | 37 +- .../java/com/robin/core/base/util/Const.java | 2 + .../com/robin/spring/CustomerClassLoader.java | 2 + .../robin/spring/CustomerURLClassLoader.java | 1 + .../com/robin/core/test/db/JdbcDaoTest.java | 19 +- .../com/robin/core/test/db/TestJdbcBatch.java | 2 +- .../com/robin/core/test/model/SysUser.java | 5 + .../com/robin/core/test/model/TestModel.java | 4 +- .../resources/applicationContext-test.xml | 1 + 17 files changed, 361 insertions(+), 237 deletions(-) create mode 100644 core/src/main/java/com/robin/core/base/dao/JdbcHelper.java diff --git a/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java b/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java index 109652d8..332950e2 100644 --- a/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java +++ b/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java @@ -28,6 +28,7 @@ String jdbcDao() default "jdbcDao"; //Does all field must declare explicit? boolean explicit() default false; - String statusColumn() default ""; - String statusValue() default ""; + String logicColumn() default ""; + String validValue() default ""; + String invalidValue() default ""; } diff --git a/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java b/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java index 394d2b2e..819bd84e 100644 --- a/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java +++ b/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java @@ -40,7 +40,6 @@ import org.springframework.util.ObjectUtils; import java.lang.invoke.MethodHandle; -import java.lang.reflect.Method; import java.sql.Date; import java.sql.*; import java.time.LocalDateTime; diff --git a/core/src/main/java/com/robin/core/base/dao/IjdbcDao.java b/core/src/main/java/com/robin/core/base/dao/IjdbcDao.java index a432a980..3920868e 100644 --- a/core/src/main/java/com/robin/core/base/dao/IjdbcDao.java +++ b/core/src/main/java/com/robin/core/base/dao/IjdbcDao.java @@ -236,7 +236,7 @@ public interface IjdbcDao { */ int deleteByField(Class clazz, String field, Object value) throws DAOException; int deleteByField(Class clazz, PropertyFunction function, Object value) throws DAOException; - int deleteByCondition(Class clazz,FilterCondition condition); + int deleteByCondition(Class clazz,FilterCondition condition); int deleteByLogic(Class clazz,List

pkObjs,String statusColumn,String statusValue) throws DAOException; List queryByVO(Class type, BaseObject vo, String orderByStr); List> queryByNamedParam(String executeSql, Map> parmaMap) throws DAOException; diff --git a/core/src/main/java/com/robin/core/base/dao/JdbcDao.java b/core/src/main/java/com/robin/core/base/dao/JdbcDao.java index 57daf208..433ba2f1 100644 --- a/core/src/main/java/com/robin/core/base/dao/JdbcDao.java +++ b/core/src/main/java/com/robin/core/base/dao/JdbcDao.java @@ -28,7 +28,6 @@ import com.robin.core.base.spring.SpringContextHolder; import com.robin.core.base.util.Const; import com.robin.core.base.util.LicenseUtils; -import com.robin.core.convert.util.ConvertUtil; import com.robin.core.fileaccess.meta.DataCollectionMeta; import com.robin.core.query.extractor.ResultSetOperationExtractor; import com.robin.core.query.extractor.SplitPageResultSetExtractor; @@ -61,6 +60,11 @@ public class JdbcDao extends JdbcDaoSupport implements IjdbcDao { private QueryFactory queryFactory; private LobHandler lobHandler; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; + private String logicColumn; + private boolean logicDelete=false; + private Integer validValue=Const.VALID_INT; + private Integer invalidValue=Const.INVALID_INT; + private MetaObjectHandler metaObjectHandler; public JdbcDao() { } @@ -81,7 +85,32 @@ public JdbcDao(@NonNull DataSource dataSource, @NonNull LobHandler lobHandler, @ namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(returnTemplate()); LicenseUtils.getInstance(); } + public void setLogicColumn(String logicColumn){ + this.logicColumn=logicColumn; + logicDelete=true; + } + public boolean isContainLogicColumn(){ + return logicDelete; + } + public String getLogicColumn(){ + return logicColumn; + } + public Integer getValidValue(){ + return validValue; + } + public void setValidValue(Integer validValue){ + this.validValue=validValue; + } + public Integer getInvalidValue() { + return invalidValue; + } + public void setInvalidValue(Integer invalidValue) { + this.invalidValue = invalidValue; + } + public void setMetaObjectHandler(MetaObjectHandler metaObjectHandler) { + this.metaObjectHandler = metaObjectHandler; + } @Override public PageQuery> queryByPageQuery(String querySQL, PageQuery> pageQuery) throws DAOException { List> list; @@ -121,7 +150,7 @@ public PageQuery> queryByPageQuery(String querySQL, PageQuer @Override public void queryBySelectId(PageQuery> pageQuery) throws DAOException { try { - String selectId = assertQuery(pageQuery); + String selectId = JdbcHelper.assertQuery(pageQuery); QueryString queryString1 = queryFactory.getQuery(selectId); queryByParameter(queryString1, pageQuery); } catch (QueryConfgNotFoundException e) { @@ -135,7 +164,7 @@ public void queryBySelectId(PageQuery> pageQuery) throws DAO @Override public int executeBySelectId(PageQuery> pageQuery) throws DAOException { try { - String selectId = assertQuery(pageQuery); + String selectId = JdbcHelper.assertQuery(pageQuery); if (sqlGen == null) { throw new DAOException("SQLGen property is null!"); } @@ -161,17 +190,17 @@ public int executeBySelectId(PageQuery> pageQuery) throws DA @Override - public List> queryByPageSql(String sqlstr, PageQuery> pageQuery) throws DAOException { + public List> queryByPageSql(String sqlStr, PageQuery> pageQuery) throws DAOException { if (log.isDebugEnabled()) { - log.debug(QUERY_SQL, sqlstr); + log.debug(QUERY_SQL, sqlStr); } - return queryItemList(pageQuery, sqlstr); + return queryItemList(pageQuery, sqlStr); } @Override - public void queryBySql(String querySQL, String countSql, String[] displayname, PageQuery> pageQuery) throws DAOException { - CommJdbcUtil.queryBySql(this.returnTemplate(), lobHandler, sqlGen, querySQL, countSql, displayname, pageQuery); + public void queryBySql(String querySQL, String countSql, String[] displayName, PageQuery> pageQuery) throws DAOException { + CommJdbcUtil.queryBySql(this.returnTemplate(), lobHandler, sqlGen, querySQL, countSql, displayName, pageQuery); } @Override @@ -199,14 +228,14 @@ public Map getBySql(String querySQL, Object... objects) throws D } @Override - public List queryEntityBySql(String querySQL, final Class targetclazz, Object... obj) { + public List queryEntityBySql(String querySQL, final Class targetClazz, Object... obj) { List list; Assert.notNull(querySQL, "querySql is null"); try { if (log.isDebugEnabled()) { log.debug(QUERY_SQL, querySQL); } - list = this.returnTemplate().queryForObject(querySQL, obj, new EntityExtractor<>(targetclazz, lobHandler)); + list = this.returnTemplate().queryForObject(querySQL, obj, new EntityExtractor<>(targetClazz, lobHandler)); return list; } catch (Exception e) { throw new DAOException(e); @@ -233,10 +262,10 @@ public List queryByVO(Class type, BaseObject vo, St } try { List fields = AnnotationRetriever.getMappingFieldsCache(type); - String wholeSelectSql = getWholeSelectSql(type); - EntityMappingUtil.SelectSegment segment = EntityMappingUtil.getSelectByVOSegment(type, vo, orderByStr, wholeSelectSql); + String wholeSelectSql = JdbcHelper.getWholeSelectSql(type,sqlGen); + EntityMappingUtil.SelectSegment segment = EntityMappingUtil.getSelectByVOSegment(type, vo, orderByStr, wholeSelectSql,this); List> rsList = queryBySql(segment.getSelectSql(), segment.getValues().toArray()); - wrapList(type, retlist, fields, rsList); + JdbcHelper.wrapList(type, retlist, fields, rsList); } catch (Exception ex) { throw new DAOException(ex); } catch (Throwable ex1) { @@ -264,7 +293,7 @@ public void queryByCondition(Class type, FilterConditi log.debug(QUERY_SQL, sql); } List> rsList = queryBySql(sql, objs); - wrapList(type, retlist, fields, rsList); + JdbcHelper.wrapList(type, retlist, fields, rsList); pageQuery.setRecordSet(retlist); } catch (Exception e) { throw new DAOException(e); @@ -320,7 +349,7 @@ public List queryByField(Class type, String fieldNa List retlist = new ArrayList<>(); try { StringBuilder buffer = new StringBuilder(); - buffer.append(getWholeSelectSql(type)).append(Const.SQL_WHERE); + buffer.append(JdbcHelper.getWholeSelectSql(type,sqlGen)).append(Const.SQL_WHERE); StringBuilder queryBuffer = new StringBuilder(); AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(type); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(type); @@ -328,14 +357,11 @@ public List queryByField(Class type, String fieldNa List> rsList; if (map1.containsKey(fieldName)) { List queryParam=Lists.newArrayList(fieldValues); - generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); - if(tableDef.isContainStatusColumn()){ - appendStatusColumn(queryBuffer,tableDef.getStatusColumn()); - queryParam.add(tableDef.getStatusValue()); - } + JdbcHelper.generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); + appendLogicColumnCondition(tableDef,queryBuffer,queryParam); buffer.append(queryBuffer); rsList = queryBySql(buffer.toString(), queryParam.toArray()); - wrapList(type, retlist, fields, rsList); + JdbcHelper.wrapList(type, retlist, fields, rsList); } else { throw new DAOException("query Field not in entity"); } @@ -382,24 +408,21 @@ public List queryByFieldOrderBy(Class type, String StringBuilder builder = new StringBuilder(); AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(type); List fields = AnnotationRetriever.getMappingFieldsCache(type); - builder.append(getWholeSelectSql(type)).append(Const.SQL_WHERE); + builder.append(JdbcHelper.getWholeSelectSql(type,sqlGen)).append(Const.SQL_WHERE); StringBuilder queryBuffer = new StringBuilder(); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(type); List> rsList; if (map1.containsKey(fieldName)) { List queryParam=Lists.newArrayList(fieldValues); - generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); - if(tableDef.isContainStatusColumn()){ - appendStatusColumn(queryBuffer,tableDef.getStatusColumn()); - queryParam.add(tableDef.getStatusValue()); - } + JdbcHelper.generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); + appendLogicColumnCondition(tableDef,queryBuffer,queryParam); builder.append(queryBuffer); if (!ObjectUtils.isEmpty(orderByStr)) { builder.append(" order by ").append(orderByStr); } rsList = queryBySql(builder.toString(), queryParam.toArray()); - wrapList(type, retlist, fields, rsList); + JdbcHelper.wrapList(type, retlist, fields, rsList); } else { throw new DAOException("query Field not in entity"); } @@ -411,6 +434,7 @@ public List queryByFieldOrderBy(Class type, String return retlist; } + @Override public List queryByFieldOrderBy(Class type, PropertyFunction function, Const.OPERATOR oper, String orderByStr, Object... fieldValues) throws DAOException { String fieldName = AnnotationRetriever.getFieldName(function); @@ -422,12 +446,12 @@ public List queryAll(Class type) throws DAOExceptio List retlist = new ArrayList<>(); List fields = AnnotationRetriever.getMappingFieldsCache(type); try { - String sql = getWholeSelectSql(type); + String sql = JdbcHelper.getWholeSelectSql(type,sqlGen); if (log.isDebugEnabled()) { log.debug(QUERY_SQL, sql); } List> rsList = queryBySql(sql); - wrapList(type, retlist, fields, rsList); + JdbcHelper.wrapList(type, retlist, fields, rsList); } catch (Exception e) { throw new DAOException(e); }catch (Throwable ex1){ @@ -437,13 +461,13 @@ public List queryAll(Class type) throws DAOExceptio } @Override - public void batchUpdate(String sql, List> resultList, List> columnpoolList, final int batchsize) throws DAOException { - CommJdbcUtil.batchUpdate(returnTemplate(), sql, resultList, columnpoolList, batchsize); + public void batchUpdate(String sql, List> resultList, List> columnpoolList, final int batchSize) throws DAOException { + CommJdbcUtil.batchUpdate(returnTemplate(), sql, resultList, columnpoolList, batchSize); } @Override - public void batchUpdateWithRowIterator(String sql, Iterator> rowIterator, DataCollectionMeta collectionMeta, int batchsize) throws DAOException { - CommJdbcUtil.batchUpdateWithIterator(returnTemplate(), sql, rowIterator, collectionMeta, batchsize); + public void batchUpdateWithRowIterator(String sql, Iterator> rowIterator, DataCollectionMeta collectionMeta, int batchSize) throws DAOException { + CommJdbcUtil.batchUpdateWithIterator(returnTemplate(), sql, rowIterator, collectionMeta, batchSize); } @@ -529,7 +553,7 @@ public P createVO(T obj, Class

P retObj = null; try { //function as mybatis-plus MetaObjectHandler - MetaObjectHandler handler = SpringContextHolder.getBean(MetaObjectHandler.class); + MetaObjectHandler handler = getCurrentMetaHandler(); if (!ObjectUtils.isEmpty(handler)) { Map fieldContentMap = AnnotationRetriever.getMappingFieldsMapCache(obj.getClass()); handler.insertFill(new MetaObject(obj, fieldContentMap)); @@ -602,7 +626,7 @@ public int batchUpdate(List list,Class clazz){ AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); Map columnMetaMap = EntityMappingUtil.returnMetaMap(clazz, sqlGen, this, tableDef); String insertSql=EntityMappingUtil.getInsertSqlIgnoreValue(clazz, sqlGen, this, fields); - MetaObjectHandler handler = SpringContextHolder.getBean(MetaObjectHandler.class); + MetaObjectHandler handler = getCurrentMetaHandler(); int[][] rs=getJdbcTemplate().batchUpdate(insertSql, list, 1000, (ps, t) -> { if (!ObjectUtils.isEmpty(handler)) { Map fieldContentMap = AnnotationRetriever.getMappingFieldsMapCache(clazz); @@ -637,7 +661,7 @@ public int updateVO(T obj, List conditio int ret = 0; try { //function as mybatis-plus MetaObjectHandler - MetaObjectHandler handler = SpringContextHolder.getBean(MetaObjectHandler.class); + MetaObjectHandler handler = getCurrentMetaHandler(); if (!ObjectUtils.isEmpty(handler)) { Map fieldContentMap = AnnotationRetriever.getMappingFieldsMapCache(obj.getClass()); handler.updateFill(new MetaObject(obj, fieldContentMap)); @@ -653,6 +677,12 @@ public int updateVO(T obj, List conditio } return ret; } + private MetaObjectHandler getCurrentMetaHandler(){ + if(metaObjectHandler!=null){ + return metaObjectHandler; + } + return SpringContextHolder.getBean(MetaObjectHandler.class); + } private int updateWithSegment(int ret, EntityMappingUtil.UpdateSegment updateSegment) { StringBuilder builder = new StringBuilder(); @@ -673,12 +703,12 @@ public int updateByKey(Class clazz, T obj) throws DAOE int ret = 0; try { //function as mybatis-plus MetaObjectHandler - MetaObjectHandler handler = SpringContextHolder.getBean(MetaObjectHandler.class); + MetaObjectHandler handler = getCurrentMetaHandler(); if (!ObjectUtils.isEmpty(handler)) { Map fieldContentMap = AnnotationRetriever.getMappingFieldsMapCache(obj.getClass()); handler.updateFill(new MetaObject(obj, fieldContentMap)); } - EntityMappingUtil.UpdateSegment updateSegment = EntityMappingUtil.getUpdateSegmentByKey(obj, sqlGen); + EntityMappingUtil.UpdateSegment updateSegment = EntityMappingUtil.getUpdateSegmentByKey(obj, sqlGen,this); ret = updateWithSegment(ret, updateSegment); } catch (Exception ex) { logError(ex); @@ -702,28 +732,41 @@ public int deleteVO(Class claz try { AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); List fields = AnnotationRetriever.getMappingFieldsCache(clazz); - + FieldContent pkField=fields.stream().filter(FieldContent::isPrimary).findFirst().get(); + boolean isLogicDelete=tableDef.isContainLogicColumn() || logicDelete; StringBuilder buffer = new StringBuilder(); - buffer.append("delete from "); - if (tableDef.getSchema() != null && !tableDef.getSchema().isEmpty()) { - buffer.append(sqlGen.getSchemaName(tableDef.getSchema())).append("."); - } - buffer.append(tableDef.getTableName()).append(Const.SQL_WHERE); - StringBuilder fieldBuffer = new StringBuilder(); - for (FieldContent field : fields) { - if (field.isPrimary()) { - fieldBuffer.append(field.getFieldName()).append(" in (:ids) "); - break; + List ids = Lists.newArrayList(value); + Map params = new HashMap<>(); + params.put("ids",ids); + if(!isLogicDelete) { + buffer.append("delete from "); + if (tableDef.getSchema() != null && !tableDef.getSchema().isEmpty()) { + buffer.append(sqlGen.getSchemaName(tableDef.getSchema())).append("."); + } + buffer.append(tableDef.getTableName()).append(Const.SQL_WHERE); + buffer.append(pkField.getFieldName()).append(" in (:ids) "); + }else{ + buffer.append("update "); + if (tableDef.getSchema() != null && !tableDef.getSchema().isEmpty()) { + buffer.append(sqlGen.getSchemaName(tableDef.getSchema())).append("."); } + String curLogicColumn=tableDef.isContainLogicColumn()?tableDef.getLogicColumn():logicColumn; + Integer curValidValue=tableDef.isContainLogicColumn()?tableDef.getValidValue():validValue; + Integer curInvalidValue=tableDef.isContainLogicColumn()?tableDef.getInvalidValue():invalidValue; + + buffer.append(tableDef.getTableName()).append(" set "); + buffer.append(curLogicColumn); + buffer.append("=:invalid ").append(Const.SQL_WHERE); + buffer.append(pkField.getFieldName()).append(" in (:ids) and "); + buffer.append(curLogicColumn); + buffer.append("=:valid "); + params.put("valid",curValidValue); + params.put("invalid",curInvalidValue); } - List ids = Lists.newArrayList(value); - Map> params = Collections.singletonMap("ids", ids); - buffer.append(fieldBuffer); - String deleteSql = buffer.toString(); if (log.isDebugEnabled()) { - log.debug("delete sql= {}", deleteSql); + log.debug("delete sql= {}", buffer); } - return getNamedJdbcTemplate().update(deleteSql, params); + return getNamedJdbcTemplate().update(buffer.toString(), params); } catch (Exception ex) { logError(ex); throw new DAOException(ex); @@ -740,7 +783,7 @@ public int deleteByLogic(Class StringBuilder buffer = new StringBuilder(); buffer.append("update "); - appendSchemaAndTable(tableDef, buffer); + JdbcHelper.appendSchemaAndTable(tableDef,sqlGen, buffer); buffer.append(" set "); if (fieldsMap.containsKey(statusColumn)) { buffer.append(fieldsMap.get(statusColumn).getFieldName()).append("=:status"); @@ -769,7 +812,7 @@ public int deleteByField(Class clazz, String field, Ob Map fieldsMap = AnnotationRetriever.getMappingFieldsMapCache(clazz); StringBuilder buffer = new StringBuilder(); buffer.append("delete from "); - appendSchemaAndTable(tableDef, buffer); + JdbcHelper.appendSchemaAndTable(tableDef,sqlGen, buffer); buffer.append(Const.SQL_WHERE); StringBuilder fieldBuffer = new StringBuilder(); if (fieldsMap.containsKey(field)) { @@ -798,15 +841,15 @@ public int deleteByField(Class clazz, PropertyFunction return deleteByField(clazz, fieldName, value); } @Override - public int deleteByCondition(Class clazz,FilterCondition condition){ + public int deleteByCondition(Class clazz,FilterCondition condition){ try { List objList = new ArrayList<>(); AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); StringBuilder buffer = new StringBuilder(); buffer.append("delete from "); - appendSchemaAndTable(tableDef, buffer); + JdbcHelper.appendSchemaAndTable(tableDef,sqlGen, buffer); buffer.append(Const.SQL_WHERE); - extractQueryParts(condition, objList,buffer); + JdbcHelper.extractQueryParts(condition, objList,buffer); String deleteSql =buffer.toString(); if (log.isDebugEnabled()) { log.debug("delete sql= {}", deleteSql); @@ -825,7 +868,7 @@ public T getEntity(Class clazz, EntityMappingUtil.SelectSegment segment = EntityMappingUtil.getSelectPkSegment(clazz, id, sqlGen, this); List> list1 = queryBySql(segment.getSelectSql(), segment.getAvailableFields(), segment.getValues().toArray()); if (!CollectionUtils.isEmpty(list1)) { - wrapResultToModelWithKey(obj, list1.get(0), segment.getAvailableFields(), id); + JdbcHelper.wrapResultToModelWithKey(obj, list1.get(0), segment.getAvailableFields(), id); } else { throw new DAOException("id not exists!"); } @@ -856,19 +899,15 @@ public void setLobHandler(LobHandler lobHandler) { this.lobHandler = lobHandler; } - private String getWholeSelectSql(Class clazz) throws DAOException { - try { - AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); - List fields = AnnotationRetriever.getMappingFieldsCache(clazz); - StringBuilder builder = getAllSelectColumns(fields); - builder.deleteCharAt(builder.length() - 1).append(" from "); - appendSchemaAndTable(tableDef, builder); - return builder.toString(); - } catch (Exception ex) { - throw new DAOException(ex); + private void appendLogicColumnCondition(AnnotationRetriever.EntityContent tableDef,StringBuilder queryBuffer, List queryParam){ + if(tableDef.isContainLogicColumn()){ + appendLogicColumn(queryBuffer,tableDef.getLogicColumn()); + queryParam.add(tableDef.getValidValue()); + }else if(logicDelete){ + appendLogicColumn(queryBuffer,logicColumn); + queryParam.add(validValue); } } - private void queryByParameter(QueryString qs, PageQuery> pageQuery) throws DAOException { if (!ObjectUtils.isEmpty(pageQuery.getQueryParameters()) || !ObjectUtils.isEmpty(pageQuery.getNamedParameters())) { @@ -881,22 +920,12 @@ private void queryByParameter(QueryString qs, PageQuery> pag private StringBuilder getQueryPartByCondition(Class type, FilterCondition condition,List objList){ StringBuilder buffer = new StringBuilder(); - buffer.append(getWholeSelectSql(type)).append(Const.SQL_WHERE); - extractQueryParts(condition, objList, buffer); + buffer.append(JdbcHelper.getWholeSelectSql(type,sqlGen)).append(Const.SQL_WHERE); + JdbcHelper.extractQueryParts(condition, objList, buffer); return buffer; } - private static void extractQueryParts(FilterCondition condition, List objList, StringBuilder buffer) { - if (!CollectionUtils.isEmpty(condition.getConditions())) { - if (condition.getConditions().size() == 1) { - buffer.append(condition.getConditions().get(0).toPreparedSQLPart(objList)); - } else { - buffer.append(condition.toPreparedSQLPart(objList)); - } - } else { - buffer.append(condition.toPreparedSQLPart(objList)); - } - } + private List> queryItemList(final PageQuery> qs, final String pageSQL) throws DAOException { int pageNum = qs.getCurrentPage(); @@ -921,107 +950,15 @@ private List> queryAllItemList(final String querySQL, final }); } - private void generateQuerySqlBySingleFields(FieldContent columncfg, Const.OPERATOR oper, StringBuilder queryBuffer, int length) { - switch (oper) { - case EQ: - case NE: - case GT: - case LT: - case GE: - case LE: - queryBuffer.append(columncfg.getFieldName()).append(oper.getSignal()).append("?"); - break; - case BETWEEN: - queryBuffer.append(columncfg.getFieldName()).append(" between ? and ?"); - break; - case IN: - queryBuffer.append(columncfg.getFieldName()).append(" in ("); - for (int i = 0; i < length; i++) { - if (i > 0) { - queryBuffer.append(","); - } - queryBuffer.append("?"); - } - queryBuffer.append(")"); - break; - case LIKE: - case LLIKE: - case RLIKE: - queryBuffer.append(columncfg.getFieldName()).append(" like ?"); - break; - default: - queryBuffer.append(columncfg.getFieldName()).append(Const.OPERATOR.EQ.getValue()).append("?"); - break; - } - } - private void appendStatusColumn(StringBuilder queryBuilder,String statusColumn){ + private void appendLogicColumn(StringBuilder queryBuilder, String statusColumn){ queryBuilder.append(" AND ").append(statusColumn).append("=?"); } - private void wrapResultToModelWithKey(BaseObject obj, Map map, List fields, Serializable pkObj) throws Throwable { - for (FieldContent field : fields) { - if (field.isPrimary()) { - field.getSetMethod().invoke(obj, pkObj); - } else { - wrapValueWithPropNoCase(obj, map, field); - } - } - } - - private void wrapValueWithPropNoCase(BaseObject obj, Map map, FieldContent field) throws Throwable { - if (map.containsKey(field.getPropertyName())) { - field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName()))); - } else if (map.containsKey(field.getPropertyName().toUpperCase())) { - field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName().toUpperCase()))); - } - } - - private void wrapResultToModel(BaseObject obj, Map map, List fields) throws Throwable { - for (FieldContent field : fields) { - if (field.isPrimary()) { - if (field.getPrimaryKeys() == null) { - if (!ObjectUtils.isEmpty(map.get(field.getPropertyName()))) { - field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName()))); - } else if (!ObjectUtils.isEmpty(map.get(field.getPropertyName().toUpperCase()))) { - field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName().toUpperCase()))); - } - } else { - Object pkObj = field.getGetMethod().type().returnType().getDeclaredConstructor().newInstance(); - field.getSetMethod().bindTo(obj).invoke(pkObj); - for (FieldContent pkField : field.getPrimaryKeys()) { - pkField.getSetMethod().bindTo(pkObj).invoke(ConvertUtil.parseParameter(pkField.getGetMethod().type().returnType(), map.get(pkField.getPropertyName()))); - } - } - } else { - wrapValueWithPropNoCase(obj, map, field); - } - } - } - - private StringBuilder getAllSelectColumns(List fields) { - StringBuilder builder = new StringBuilder(Const.SQL_SELECT); - for (FieldContent field : fields) { - if (field.isPrimary()) { - if (field.getPrimaryKeys() != null) { - for (FieldContent fieldContent : field.getPrimaryKeys()) { - builder.append(fieldContent.getFieldName()).append(Const.SQL_AS).append(fieldContent.getPropertyName()).append(","); - - } - } else { - builder.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); - } - } else { - builder.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); - } - } - return builder; - } - - private void appendSchemaAndTable(AnnotationRetriever.EntityContent entityContent, StringBuilder builder) { - if (entityContent.getSchema() != null && !entityContent.getSchema().isEmpty()) { - builder.append(sqlGen.getSchemaName(entityContent.getSchema())).append("."); + private NamedParameterJdbcTemplate getNamedJdbcTemplate() { + if (namedParameterJdbcTemplate == null) { + namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(returnTemplate()); } - builder.append(entityContent.getTableName()); + return namedParameterJdbcTemplate; } @@ -1060,32 +997,6 @@ private List> queryBySql(String sqlstr, List m } - private NamedParameterJdbcTemplate getNamedJdbcTemplate() { - if (namedParameterJdbcTemplate == null) { - namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(returnTemplate()); - } - return namedParameterJdbcTemplate; - } - - private String assertQuery(PageQuery> pageQuery) { - if (pageQuery == null) { - throw new DAOException("missing pagerQueryObject"); - } - String selectId = pageQuery.getSelectParamId(); - if (selectId == null || ObjectUtils.isEmpty(selectId.trim())) { - throw new IllegalArgumentException("selectid is Null"); - } - return selectId; - } - - private void wrapList(Class type, List retlist, List fields, List> rsList) throws Throwable { - for (Map map : rsList) { - T obj = type.getDeclaredConstructor().newInstance(); - wrapResultToModel(obj, map, fields); - retlist.add(obj); - } - } - public static class Builder { private final List conditions = new ArrayList<>(); diff --git a/core/src/main/java/com/robin/core/base/dao/JdbcHelper.java b/core/src/main/java/com/robin/core/base/dao/JdbcHelper.java new file mode 100644 index 00000000..b7d3eba4 --- /dev/null +++ b/core/src/main/java/com/robin/core/base/dao/JdbcHelper.java @@ -0,0 +1,160 @@ +package com.robin.core.base.dao; + +import com.robin.core.base.dao.util.AnnotationRetriever; +import com.robin.core.base.dao.util.FieldContent; +import com.robin.core.base.exception.DAOException; +import com.robin.core.base.model.BaseObject; +import com.robin.core.base.util.Const; +import com.robin.core.convert.util.ConvertUtil; +import com.robin.core.query.util.PageQuery; +import com.robin.core.sql.util.BaseSqlGen; +import com.robin.core.sql.util.FilterCondition; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +public class JdbcHelper { + static void wrapResultToModelWithKey(BaseObject obj, Map map, List fields, Serializable pkObj) throws Throwable { + for (FieldContent field : fields) { + if (field.isPrimary()) { + field.getSetMethod().invoke(obj, pkObj); + } else { + wrapValueWithPropNoCase(obj, map, field); + } + } + } + + static void wrapValueWithPropNoCase(BaseObject obj, Map map, FieldContent field) throws Throwable { + if (map.containsKey(field.getPropertyName())) { + field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName()))); + } else if (map.containsKey(field.getPropertyName().toUpperCase())) { + field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName().toUpperCase()))); + } + } + + static void wrapResultToModel(BaseObject obj, Map map, List fields) throws Throwable { + for (FieldContent field : fields) { + if (field.isPrimary()) { + if (field.getPrimaryKeys() == null) { + if (!ObjectUtils.isEmpty(map.get(field.getPropertyName()))) { + field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName()))); + } else if (!ObjectUtils.isEmpty(map.get(field.getPropertyName().toUpperCase()))) { + field.getSetMethod().bindTo(obj).invoke(ConvertUtil.parseParameter(field.getGetMethod().type().returnType(), map.get(field.getPropertyName().toUpperCase()))); + } + } else { + Object pkObj = field.getGetMethod().type().returnType().getDeclaredConstructor().newInstance(); + field.getSetMethod().bindTo(obj).invoke(pkObj); + for (FieldContent pkField : field.getPrimaryKeys()) { + pkField.getSetMethod().bindTo(pkObj).invoke(ConvertUtil.parseParameter(pkField.getGetMethod().type().returnType(), map.get(pkField.getPropertyName()))); + } + } + } else { + wrapValueWithPropNoCase(obj, map, field); + } + } + } + + static StringBuilder getAllSelectColumns(List fields) { + StringBuilder builder = new StringBuilder(Const.SQL_SELECT); + for (FieldContent field : fields) { + if (field.isPrimary()) { + if (field.getPrimaryKeys() != null) { + for (FieldContent fieldContent : field.getPrimaryKeys()) { + builder.append(fieldContent.getFieldName()).append(Const.SQL_AS).append(fieldContent.getPropertyName()).append(","); + + } + } else { + builder.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); + } + } else { + builder.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); + } + } + return builder; + } + + static void appendSchemaAndTable(AnnotationRetriever.EntityContent entityContent, BaseSqlGen sqlGen, StringBuilder builder) { + if (entityContent.getSchema() != null && !entityContent.getSchema().isEmpty()) { + builder.append(sqlGen.getSchemaName(entityContent.getSchema())).append("."); + } + builder.append(entityContent.getTableName()); + } + static void wrapList(Class type, List retlist, List fields, List> rsList) throws Throwable { + for (Map map : rsList) { + T obj = type.getDeclaredConstructor().newInstance(); + wrapResultToModel(obj, map, fields); + retlist.add(obj); + } + } + static void extractQueryParts(FilterCondition condition, List objList, StringBuilder buffer) { + if (!CollectionUtils.isEmpty(condition.getConditions())) { + if (condition.getConditions().size() == 1) { + buffer.append(condition.getConditions().get(0).toPreparedSQLPart(objList)); + } else { + buffer.append(condition.toPreparedSQLPart(objList)); + } + } else { + buffer.append(condition.toPreparedSQLPart(objList)); + } + } + static String assertQuery(PageQuery> pageQuery) { + if (pageQuery == null) { + throw new DAOException("missing pagerQueryObject"); + } + String selectId = pageQuery.getSelectParamId(); + if (selectId == null || ObjectUtils.isEmpty(selectId.trim())) { + throw new IllegalArgumentException("selectid is Null"); + } + return selectId; + } + static void generateQuerySqlBySingleFields(FieldContent columncfg, Const.OPERATOR oper, StringBuilder queryBuffer, int length) { + switch (oper) { + case EQ: + case NE: + case GT: + case LT: + case GE: + case LE: + queryBuffer.append(columncfg.getFieldName()).append(oper.getSignal()).append("?"); + break; + case BETWEEN: + queryBuffer.append(columncfg.getFieldName()).append(" between ? and ?"); + break; + case IN: + queryBuffer.append(columncfg.getFieldName()).append(" in ("); + for (int i = 0; i < length; i++) { + if (i > 0) { + queryBuffer.append(","); + } + queryBuffer.append("?"); + } + queryBuffer.append(")"); + break; + case LIKE: + case LLIKE: + case RLIKE: + queryBuffer.append(columncfg.getFieldName()).append(" like ?"); + break; + default: + queryBuffer.append(columncfg.getFieldName()).append(Const.OPERATOR.EQ.getValue()).append("?"); + break; + } + } + static String getWholeSelectSql(Class clazz,BaseSqlGen sqlGen) throws DAOException { + try { + AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); + List fields = AnnotationRetriever.getMappingFieldsCache(clazz); + StringBuilder builder = JdbcHelper.getAllSelectColumns(fields); + builder.deleteCharAt(builder.length() - 1).append(" from "); + JdbcHelper.appendSchemaAndTable(tableDef,sqlGen, builder); + return builder.toString(); + } catch (Exception ex) { + throw new DAOException(ex); + } + } + + +} diff --git a/core/src/main/java/com/robin/core/base/dao/SqlMapperDao.java b/core/src/main/java/com/robin/core/base/dao/SqlMapperDao.java index 4a662596..a69279d5 100644 --- a/core/src/main/java/com/robin/core/base/dao/SqlMapperDao.java +++ b/core/src/main/java/com/robin/core/base/dao/SqlMapperDao.java @@ -23,6 +23,7 @@ import javax.sql.DataSource; import java.lang.invoke.MethodHandle; +import java.lang.reflect.InvocationTargetException; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; @@ -205,7 +206,7 @@ private static ResultSetExtractor> resultSetExtractor(SqlMapperConfigure } } else { try { - Object targetObject = segment1.getResultClass().newInstance(); + Object targetObject = segment1.getResultClass().getDeclaredConstructor().newInstance(); for (int i = 0; i < count; i++) { String columnName = rsmd.getColumnName(i + 1); if (!segment1.getColumnMapper().containsKey(columnName)) { @@ -214,7 +215,8 @@ private static ResultSetExtractor> resultSetExtractor(SqlMapperConfigure CommJdbcUtil.setTargetValue(targetObject, resultSet.getObject(i + 1), segment1.getColumnMapper().get(columnName).left, segment1.getColumnMapper().get(columnName).right, pageQuery); } retList.add(targetObject); - } catch (IllegalAccessException|InstantiationException ex1) { + } catch (IllegalAccessException | InstantiationException | NoSuchMethodException | + InvocationTargetException ex1) { throw new SQLException("target Type can not initialize"); } } diff --git a/core/src/main/java/com/robin/core/base/dao/handler/MetaObjectHandler.java b/core/src/main/java/com/robin/core/base/dao/handler/MetaObjectHandler.java index ff4eecd9..ff0d7f9c 100644 --- a/core/src/main/java/com/robin/core/base/dao/handler/MetaObjectHandler.java +++ b/core/src/main/java/com/robin/core/base/dao/handler/MetaObjectHandler.java @@ -19,6 +19,7 @@ default boolean containColumn(String fieldName,MetaObject metaObject){ return metaObject.hasGetter(fieldName) && metaObject.hasSetter(fieldName); } + default Object getFieldValByName(String fieldName, MetaObject metaObject) { return metaObject.hasGetter(fieldName) ? metaObject.getValue(fieldName) : null; } diff --git a/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java b/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java index 6f4400fc..6b09c52d 100644 --- a/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java +++ b/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java @@ -212,12 +212,16 @@ private static EntityContent getMappingTableEntity(Cla if (!ObjectUtils.isEmpty(jdbcDao)) { content.setJdbcDao(jdbcDao); } - if(!ObjectUtils.isEmpty(entity.statusColumn())){ - content.setStatusColumn(entity.statusColumn()); - content.setContainStatusColumn(true); + + if(!ObjectUtils.isEmpty(entity.logicColumn())){ + content.setLogicColumn(entity.logicColumn()); + content.setContainLogicColumn(true); + } + if(!ObjectUtils.isEmpty(entity.validValue())){ + content.setValidValue(Integer.parseInt(entity.validValue())); } - if(!ObjectUtils.isEmpty(entity.statusValue())){ - content.setStatusValue(entity.statusValue()); + if(!ObjectUtils.isEmpty(entity.invalidValue())){ + content.setInvalidValue(Integer.parseInt(entity.invalidValue())); } } else { flag = clazz.isAnnotationPresent(Entity.class); @@ -756,9 +760,10 @@ public static class EntityContent { private String schema; private String jdbcDao; private Class clazz; - private boolean containStatusColumn=false; - private String statusColumn; - private String statusValue=Const.VALID; + private boolean containLogicColumn =false; + private String logicColumn; + private Integer validValue =Const.VALID_INT; + private Integer invalidValue =Const.INVALID_INT; public EntityContent(String tableName) { this.tableName = tableName; diff --git a/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java b/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java index 776d5a9f..3a01e3a8 100644 --- a/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java +++ b/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java @@ -260,7 +260,7 @@ public static UpdateSegment getUpdateSegment(BaseObject obj, List tableDef = AnnotationRetriever.getMappingTableByCache(obj.getClass()); List fields = AnnotationRetriever.getMappingFieldsCache(obj.getClass()); //AnnotationRetriever.validateEntity(obj); @@ -305,18 +305,25 @@ public static UpdateSegment getUpdateSegmentByKey(BaseObject obj, BaseSqlGen sql if (!CollectionUtils.isEmpty(field.getPrimaryKeys())) { for (FieldContent pkFields : field.getPrimaryKeys()) { Object tobj = AnnotationRetriever.getValueFromVO(pkFields, obj); - wherebuffer.append(pkFields.getFieldName()).append("=?,"); + wherebuffer.append(pkFields.getFieldName()).append("=? and"); whereObjects.add(tobj); } } else if (field.isPrimary()) { - wherebuffer.append(field.getFieldName()).append("=?,"); + wherebuffer.append(field.getFieldName()).append("=? and "); whereObjects.add(object); } } } + if(tableDef.isContainLogicColumn()){ + wherebuffer.append(tableDef.getLogicColumn()).append("=? and "); + whereObjects.add(tableDef.getValidValue()); + }else if(jdbcDao.isContainLogicColumn()){ + wherebuffer.append(jdbcDao.getLogicColumn()).append("=? and "); + whereObjects.add(jdbcDao.getValidValue()); + } objList.addAll(whereObjects); updateSegment.setFieldStr(fieldBuffer.substring(0, fieldBuffer.length() - 1)); - updateSegment.setWhereStr(wherebuffer.substring(0, wherebuffer.length() - 1)); + updateSegment.setWhereStr(wherebuffer.substring(0, wherebuffer.length() - 5)); updateSegment.setParams(objList); return updateSegment; } @@ -357,9 +364,12 @@ public static SelectSegment getSelectPkSegment(Class c sqlbuffer.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); } } - if(tableDef.isContainStatusColumn()){ - wherebuffer.append(tableDef.getStatusColumn()).append("=? and "); - selectObjs.add(tableDef.getStatusValue()); + if(tableDef.isContainLogicColumn()){ + wherebuffer.append(tableDef.getLogicColumn()).append("=? and "); + selectObjs.add(tableDef.getValidValue()); + }else if(jdbcDao.isContainLogicColumn()){ + wherebuffer.append(jdbcDao.getLogicColumn()).append("=? and "); + selectObjs.add(jdbcDao.getValidValue()); } sqlbuffer.deleteCharAt(sqlbuffer.length() - 1).append(Const.SQL_FROM); appendSchemaAndTable(tableDef, sqlbuffer, sqlGen); @@ -370,8 +380,9 @@ public static SelectSegment getSelectPkSegment(Class c return segment; } - public static SelectSegment getSelectByVOSegment(Class type, BaseObject vo, String orderByStr, String wholeSelectSql) throws Throwable { + public static SelectSegment getSelectByVOSegment(Class type, BaseObject vo, String orderByStr, String wholeSelectSql,JdbcDao jdbcDao) throws Throwable { AnnotationRetriever.isBaseObjectClassValid(type); + AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(type); List params = new ArrayList<>(); StringBuilder builder = new StringBuilder(); builder.append(wholeSelectSql).append(Const.SQL_WHERE); @@ -384,7 +395,13 @@ public static SelectSegment getSelectByVOSegment(Class typ params.add(obj); builder.append(" and "); } - + } + if(tableDef.isContainLogicColumn()){ + builder.append(tableDef.getLogicColumn()).append("=? and "); + params.add(tableDef.getValidValue()); + }else if(jdbcDao.isContainLogicColumn()){ + builder.append(jdbcDao.getLogicColumn()).append("=? and "); + params.add(jdbcDao.getValidValue()); } String sql = builder.substring(0, builder.length() - 5); if (orderByStr != null && !orderByStr.isEmpty()) { @@ -397,7 +414,7 @@ public static SelectSegment getSelectByVOSegment(Class typ return selectSegment; } - public static SelectSegment getSelectByVOSegment(Class type, FilterCondition condition, String wholeSelectSql) { + public static SelectSegment getSelectByVOSegment(Class type, FilterCondition condition, String wholeSelectSql) { AnnotationRetriever.isBaseObjectClassValid(type); List params = new ArrayList<>(); StringBuilder builder = new StringBuilder(); diff --git a/core/src/main/java/com/robin/core/base/util/Const.java b/core/src/main/java/com/robin/core/base/util/Const.java index 0085ef7c..a1ac45e2 100644 --- a/core/src/main/java/com/robin/core/base/util/Const.java +++ b/core/src/main/java/com/robin/core/base/util/Const.java @@ -181,6 +181,8 @@ public String toString() { public static final String VALID = "1"; public static final String INVALID = "0"; + public static final Integer VALID_INT=1; + public static final Integer INVALID_INT=0; public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final Pattern MATCHER_OF_PARAMETER = Pattern.compile("%\\[\\w+\\]"); diff --git a/core/src/main/java/com/robin/spring/CustomerClassLoader.java b/core/src/main/java/com/robin/spring/CustomerClassLoader.java index ff3c3be2..cf43c2cb 100644 --- a/core/src/main/java/com/robin/spring/CustomerClassLoader.java +++ b/core/src/main/java/com/robin/spring/CustomerClassLoader.java @@ -107,6 +107,8 @@ private static URL[] getUrls(String... paths) { } } + + @Override protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { diff --git a/core/src/main/java/com/robin/spring/CustomerURLClassLoader.java b/core/src/main/java/com/robin/spring/CustomerURLClassLoader.java index c23ef457..133d859a 100644 --- a/core/src/main/java/com/robin/spring/CustomerURLClassLoader.java +++ b/core/src/main/java/com/robin/spring/CustomerURLClassLoader.java @@ -76,6 +76,7 @@ private void init() { String key = new String(keyDecryptByte); encryptKeyMap.put(className, Pair.of(confusedName, key)); } + } catch (Exception ex) { ex.printStackTrace(); } diff --git a/core/src/test/java/com/robin/core/test/db/JdbcDaoTest.java b/core/src/test/java/com/robin/core/test/db/JdbcDaoTest.java index db80edff..4e9e0a52 100644 --- a/core/src/test/java/com/robin/core/test/db/JdbcDaoTest.java +++ b/core/src/test/java/com/robin/core/test/db/JdbcDaoTest.java @@ -89,6 +89,18 @@ public void testMyBatisInsert(){ log.info("get id {}",id); assertNotNull(id); } + @Test + public void testQueryByField(){ + TestModelService modelService=SpringContextHolder.getBean(TestModelService.class); + TestModel model=modelService.getEntity(10); + List list= modelService.queryByField(TestModel::getName, Const.OPERATOR.LIKE,"res%"); + assertNotNull(list); + } + @Test + public void testDeleteLogic(){ + TestModelService modelService=SpringContextHolder.getBean(TestModelService.class); + modelService.deleteEntity(new Integer[]{10}); + } @Test public void testAnnotationInsert() { @@ -99,7 +111,12 @@ public void testAnnotationInsert() { model.setCsId(1L); Integer id = service.saveEntity(model); assertNotNull(id); - model.setName("ressds"); + } + @Test + public void TestAnnotationUpdate(){ + TestModelService service = (TestModelService) SpringContextHolder.getBean("modelService"); + TestModel model =service.getEntity(10); + model.setName("test111"); model.setCsId(2L); service.updateEntity(model); } diff --git a/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java b/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java index 4330fecb..f8b814ca 100644 --- a/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java +++ b/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java @@ -32,7 +32,7 @@ public void doTestBatch(){ collectionMeta.addColumnMeta("creator",Const.META_TYPE_INTEGER,null); collectionMeta.addColumnMeta("time",Const.META_TYPE_TIMESTAMP,null); - Iterator> iterator=new Iterator>() { + Iterator> iterator=new Iterator<>() { Map rowMap=new HashMap<>(); int pos=0; Random random=new Random(123123123L); diff --git a/core/src/test/java/com/robin/core/test/model/SysUser.java b/core/src/test/java/com/robin/core/test/model/SysUser.java index edd29512..2da6bfad 100644 --- a/core/src/test/java/com/robin/core/test/model/SysUser.java +++ b/core/src/test/java/com/robin/core/test/model/SysUser.java @@ -20,6 +20,9 @@ import com.robin.core.base.model.BaseObject; import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; + @MappingEntity(value = "t_sys_user_info",schema = "frameset",jdbcDao = "jdbcDao1") @Data public class SysUser extends BaseObject { @@ -42,6 +45,8 @@ public class SysUser extends BaseObject { private Integer orderNo; @MappingField(value ="user_password") private String userPassword; + private LocalDateTime createTm; + private BigDecimal dVal; } diff --git a/core/src/test/java/com/robin/core/test/model/TestModel.java b/core/src/test/java/com/robin/core/test/model/TestModel.java index 24a53f10..74a6624e 100644 --- a/core/src/test/java/com/robin/core/test/model/TestModel.java +++ b/core/src/test/java/com/robin/core/test/model/TestModel.java @@ -7,7 +7,7 @@ import java.sql.Timestamp; -@MappingEntity(value = "t_test",schema = "test") +@MappingEntity(value = "t_test",schema = "test", logicColumn = "status") @Data public class TestModel extends BaseObject{ @MappingField(primary=true,increment=true) @@ -20,6 +20,6 @@ public class TestModel extends BaseObject{ private Long csId; @MappingField private Timestamp createTime; - + private Integer status; } diff --git a/core/src/test/resources/applicationContext-test.xml b/core/src/test/resources/applicationContext-test.xml index b88e59ca..c46ccca0 100644 --- a/core/src/test/resources/applicationContext-test.xml +++ b/core/src/test/resources/applicationContext-test.xml @@ -68,6 +68,7 @@ + From ece12d80401e98a8704ad6e462cd6c473707c11f Mon Sep 17 00:00:00 2001 From: robinjim Date: Wed, 5 Aug 2026 11:29:13 +0800 Subject: [PATCH 2/3] Const CLASSTYPE Replace String columnType!!! --- .../robin/comm/sql/CommRecordGenerator.java | 8 +- .../com/robin/comm/sql/CommSqlParser.java | 34 ++--- .../robin/comm/sql/DataMetaCalciteTable.java | 16 +-- .../com/robin/comm/sql/FilterSqlParser.java | 2 +- .../robin/comm/util/es/ESSchemaAwareUtil.java | 16 +-- .../com/robin/comm/util/ppt/PptBaseUtil.java | 73 ++++++---- .../com/robin/comm/util/ppt/PptGenerater.java | 23 +-- .../robin/comm/util/xls/ExcelBaseOper.java | 14 +- .../comm/util/xls/ExcelCellStyleUtil.java | 22 +-- .../robin/comm/util/xls/ExcelColumnProp.java | 22 ++- .../robin/comm/util/xls/ExcelProcessor.java | 98 ++++++------- .../robin/comm/util/xls/ExcelSheetProp.java | 7 +- .../fs/ApacheVfsFileSystemAccessor.java | 32 ++++- .../fileaccess/fs/IFileSystemAccessor.java | 3 + .../fs/LocalFileSystemAccessor.java | 15 ++ .../iterator/AbstractFileIterator.java | 4 +- .../fileaccess/iterator/ArffFileIterator.java | 8 +- .../fileaccess/iterator/XlsxFileIterator.java | 2 +- .../robin/core/fileaccess/util/AvroUtils.java | 26 ++-- .../util/ByteBufferMapSerializer.java | 12 +- .../fileaccess/util/SqlContentResolver.java | 9 +- .../fileaccess/writer/AbstractFileWriter.java | 6 +- .../fileaccess/writer/XlsxFileWriter.java | 16 +-- .../robin/comm/test/TestExcelOperation.java | 105 +++++++------- .../com/robin/comm/test/TestXMLReader.java | 9 +- core/pom.xml | 14 +- .../core/base/annotation/MappingEntity.java | 4 +- .../core/base/annotation/MappingField.java | 3 +- .../com/robin/core/base/dao/CommJdbcUtil.java | 44 +++--- .../java/com/robin/core/base/dao/JdbcDao.java | 31 ++-- .../LobCreatingPreparedStatementCallBack.java | 7 +- .../robin/core/base/dao/SimpleJdbcDao.java | 26 ++-- .../base/dao/util/AnnotationRetriever.java | 124 ++++++++-------- .../core/base/dao/util/EntityMappingUtil.java | 60 +++++--- .../core/base/dao/util/FieldContent.java | 13 +- .../base/datameta/DataBaseColumnMeta.java | 20 ++- .../core/base/datameta/DataBaseParam.java | 2 +- .../core/base/datameta/DataBaseUtil.java | 78 +++++------ .../base/reflect/ClassGraphReflector.java | 7 +- .../java/com/robin/core/base/util/Const.java | 132 ++++++++++++------ .../core/base/util/ModelScriptGenerator.java | 9 +- .../core/base/util/ModelSqlGenerator.java | 3 +- .../core/collection/util/CollectionsUtil.java | 19 +-- .../robin/core/convert/util/ConvertUtil.java | 70 +++++++--- .../robin/core/convert/util/DataTypeEnum.java | 6 +- .../fileaccess/meta/DataCollectionMeta.java | 39 ++++-- .../fileaccess/meta/DataSetColumnMeta.java | 21 +-- .../mapper/segment/ResultMapperSegment.java | 20 +-- .../robin/core/script/BaseScriptExecutor.java | 1 + .../com/robin/core/script/ScriptExecutor.java | 58 ++++++-- .../robin/core/sql/util/AbstractSqlGen.java | 55 ++++---- .../com/robin/core/sql/util/BaseSqlGen.java | 5 +- .../robin/core/sql/util/FilterCondition.java | 6 +- .../core/sql/util/FilterConditionBuilder.java | 54 +++---- .../robin/core/sql/util/JoinCondition.java | 7 +- .../com/robin/core/sql/util/OracleSqlGen.java | 4 +- .../com/robin/core/test/db/TestJdbcBatch.java | 10 +- .../com/robin/core/test/model/TestLob.java | 6 +- .../com/robin/core/test/model/TestModel.java | 4 +- .../robin/core/test/model/TestSequence.java | 4 +- .../dataming/smile/utils/SmileUtils.java | 14 +- .../spark/algorithm/AbstractSparkModeler.java | 12 +- .../robin/dataming/weka/utils/WekaUtils.java | 8 +- .../com/robin/dataming/DecisionTreeTest.java | 10 +- .../com/robin/dataming/smile/DBSCANTest.java | 8 +- .../dataming/smile/DecisionTreeTest.java | 10 +- .../robin/es/service/ESRepositoryService.java | 17 +-- .../com/robin/es/util/CommEsQueryUtils.java | 26 ++-- .../com/robin/es/util/MongoQueryUtils.java | 2 +- .../com/robin/etl/cdc/MySqlBinLogScanner.java | 2 +- .../com/robin/etl/common/EtlConstant.java | 55 ++++++++ .../robin/etl/context/StatefulJobContext.java | 2 +- .../com/robin/etl/context/StepContext.java | 3 +- .../com/robin/etl/meta/model/EtlFlowCfg.java | 13 +- .../com/robin/etl/meta/model/EtlStepCfg.java | 12 +- .../etl/meta/model/EtlStepCondition.java | 2 +- .../robin/etl/meta/model/EtlStepParam.java | 5 +- .../etl/meta/service/EtlFlowCfgService.java | 57 +++----- .../frameset/DataMappingContoller.java | 2 +- ...bstractCloudStorageFileSystemAccessor.java | 11 ++ .../fileaccess/fs/HdfsFileSystemAccessor.java | 11 ++ .../fs/MinioFileSystemAccessor.java | 21 ++- .../iterator/ArrowFileIterator.java | 13 +- .../iterator/ParquetFileIterator.java | 58 ++++---- .../iterator/ParquetReaderUtil.java | 16 +-- .../iterator/ProtoBufFileIterator.java | 10 +- .../fileaccess/util/ArrowSchemaUtils.java | 12 +- .../robin/comm/fileaccess/util/OrcUtil.java | 69 +++++---- .../comm/fileaccess/util/ParquetUtil.java | 21 ++- .../comm/fileaccess/util/ProtoBufUtil.java | 16 +-- .../fileaccess/writer/ArrowFileWriter.java | 7 +- .../comm/fileaccess/writer/OrcFileWriter.java | 26 ++-- .../iterator/AbstractQueueIterator.java | 1 - .../resaccess/iterator/KafkaIterator.java | 1 - .../java/com/robin/test/OffHeapMapTest.java | 14 +- .../java/com/robin/test/TestCloudStorage.java | 56 ++++---- .../com/robin/test/TestParquetWriter.java | 14 +- .../com/robin/test/TestProtobufWriter.java | 16 +-- .../java/com/robin/test/TestResourceGen.java | 8 +- .../com/robin/test/TestResourceReadWrite.java | 24 ++-- .../meta/explore/SourceFileExplorer.java | 75 +++++----- .../resource/GlobalResourceService.java | 2 +- .../controller/AbstractAutoController.java | 2 +- 103 files changed, 1319 insertions(+), 993 deletions(-) diff --git a/common/src/main/java/com/robin/comm/sql/CommRecordGenerator.java b/common/src/main/java/com/robin/comm/sql/CommRecordGenerator.java index 0a4475ab..124d0c6b 100644 --- a/common/src/main/java/com/robin/comm/sql/CommRecordGenerator.java +++ b/common/src/main/java/com/robin/comm/sql/CommRecordGenerator.java @@ -170,7 +170,7 @@ static void doCalculator(SqlSegment segment,Map inputRecord,Map inputMap, SqlS return runValue; } protected static void checkColumnNumeric(SqlSegment segment,String columnName){ - Assert.isTrue(Const.META_TYPE_INTEGER.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()) - || Const.META_TYPE_BIGINT.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()) - || Const.META_TYPE_DOUBLE.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()),"require numeric column"); + Assert.isTrue(Const.CLASSTYPE.INTEGER.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()) + || Const.CLASSTYPE.LONG.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()) + || Const.CLASSTYPE.DOUBLE.equals(segment.getOriginSchemaMap().get(columnName).getColumnType()),"require numeric column"); } private static Object getValueWithCalculate(Map inputMap, SqlSegment segment, SqlNode nodes) { diff --git a/common/src/main/java/com/robin/comm/sql/CommSqlParser.java b/common/src/main/java/com/robin/comm/sql/CommSqlParser.java index 3ab5cb4f..0a1fefd0 100644 --- a/common/src/main/java/com/robin/comm/sql/CommSqlParser.java +++ b/common/src/main/java/com/robin/comm/sql/CommSqlParser.java @@ -191,7 +191,7 @@ public static List getCalculateSchema(SqlSegment segment, Dat } columns.add(meta1); } else { - columns.add(new DataSetColumnMeta(columnName, Const.META_TYPE_FORMULA)); + columns.add(new DataSetColumnMeta(columnName, Const.CLASSTYPE.FORMULA)); } } } @@ -405,7 +405,7 @@ public static class ValueParts { private List functionParams; private String aliasName; private SqlLiteral constantValue; - private String columnType; + private Const.CLASSTYPE columnType; private SqlNode node; private SqlKind sqlKind = SqlKind.IDENTIFIER; private String nodeString; @@ -429,10 +429,10 @@ public void setCalculator(SqlNode node) { this.calculator = node.toString().replace(Quoting.BACK_TICK.string, "").replaceAll("\\s+", ""); this.sqlKind = SqlKind.LISTAGG; if (FilterSqlParser.fourZeOper.matcher(calculator).find()) { - columnType = Const.META_TYPE_DOUBLE; + columnType = Const.CLASSTYPE.DOUBLE; polandQueue = PolandNotationUtil.parsePre(calculator); } else { - columnType = Const.META_TYPE_BOOLEAN; + columnType = Const.CLASSTYPE.BOOLEAN; } } @@ -442,17 +442,17 @@ public void decideType(SqlLiteral literal) { SqlNumericLiteral literal1 = (SqlNumericLiteral) literal; if (literal1.getScale() == 0) { if (literal1.getPrec() < 12) { - columnType = Const.META_TYPE_INTEGER; + columnType = Const.CLASSTYPE.INTEGER; } else { - columnType = Const.META_TYPE_BIGINT; + columnType = Const.CLASSTYPE.LONG; } } else { - columnType = Const.META_TYPE_DOUBLE; + columnType = Const.CLASSTYPE.DOUBLE; } } else if (SqlTimeLiteral.class.isAssignableFrom(literal.getClass())) { - columnType = Const.META_TYPE_TIMESTAMP; + columnType = Const.CLASSTYPE.TIMESTAMP; } else if (SqlCharStringLiteral.class.isAssignableFrom(literal.getClass())) { - columnType = Const.META_TYPE_STRING; + columnType = Const.CLASSTYPE.STRING; } } } @@ -464,14 +464,14 @@ public static void main(String[] args) { String groupSql = "select max(a1),min(a2),sum(c1),c3 from test where ((a1+a2)*a9)/10>a3 group by c3 having sum(c1)>100 order by c3 desc,sum(c1) asc"; DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - DataCollectionMeta meta = builder.addColumn("a1", Const.META_TYPE_DOUBLE).addColumn("a2", Const.META_TYPE_DOUBLE) - .addColumn("a3", Const.META_TYPE_DOUBLE).addColumn("a4", Const.META_TYPE_DOUBLE) - .addColumn("a5", Const.META_TYPE_DOUBLE).addColumn("a6", Const.META_TYPE_DOUBLE) - .addColumn("a7", Const.META_TYPE_INTEGER).addColumn("a8", Const.META_TYPE_DOUBLE) - .addColumn("a9", Const.META_TYPE_DOUBLE).addColumn("b1", Const.META_TYPE_DOUBLE) - .addColumn("b2", Const.META_TYPE_DOUBLE).addColumn("b3", Const.META_TYPE_DOUBLE) - .addColumn("c1", Const.META_TYPE_DOUBLE).addColumn("c2", Const.META_TYPE_DOUBLE) - .addColumn("c3", Const.META_TYPE_INTEGER).addColumn("c4", Const.META_TYPE_STRING).tableName("test").build(); + DataCollectionMeta meta = builder.addColumn("a1", Const.CLASSTYPE.DOUBLE).addColumn("a2", Const.CLASSTYPE.DOUBLE) + .addColumn("a3", Const.CLASSTYPE.DOUBLE).addColumn("a4", Const.CLASSTYPE.DOUBLE) + .addColumn("a5", Const.CLASSTYPE.DOUBLE).addColumn("a6", Const.CLASSTYPE.DOUBLE) + .addColumn("a7", Const.CLASSTYPE.INTEGER).addColumn("a8", Const.CLASSTYPE.DOUBLE) + .addColumn("a9", Const.CLASSTYPE.DOUBLE).addColumn("b1", Const.CLASSTYPE.DOUBLE) + .addColumn("b2", Const.CLASSTYPE.DOUBLE).addColumn("b3", Const.CLASSTYPE.DOUBLE) + .addColumn("c1", Const.CLASSTYPE.DOUBLE).addColumn("c2", Const.CLASSTYPE.DOUBLE) + .addColumn("c3", Const.CLASSTYPE.INTEGER).addColumn("c4", Const.CLASSTYPE.STRING).tableName("test").build(); SqlSegment segment = CommSqlParser.parseSingleTableQuerySql(sql, Lex.MYSQL, meta, "N_COLUMN"); Map map = new HashMap<>(); map.put("a1", 1.0); diff --git a/common/src/main/java/com/robin/comm/sql/DataMetaCalciteTable.java b/common/src/main/java/com/robin/comm/sql/DataMetaCalciteTable.java index cdbbd68c..dd737b5a 100644 --- a/common/src/main/java/com/robin/comm/sql/DataMetaCalciteTable.java +++ b/common/src/main/java/com/robin/comm/sql/DataMetaCalciteTable.java @@ -22,26 +22,26 @@ public RelDataType getRowType(RelDataTypeFactory typeFactory) { Assert.isTrue(!ObjectUtils.isEmpty(colmeta) && !CollectionUtils.isEmpty(colmeta.getColumnList()),"meta define is missing!"); RelDataTypeFactory.Builder builder = typeFactory.builder(); for(DataSetColumnMeta columnMeta:colmeta.getColumnList()){ - if(Const.META_TYPE_INTEGER.equals(columnMeta.getColumnType())){ + if(Const.CLASSTYPE.INTEGER.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.INTEGER); - }else if(Const.META_TYPE_BIGINT.equals(columnMeta.getColumnType())){ + }else if(Const.CLASSTYPE.LONG.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.BIGINT); } - else if(Const.META_TYPE_DOUBLE.equals(columnMeta.getColumnType())){ + else if(Const.CLASSTYPE.DOUBLE.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.DOUBLE); } - else if(Const.META_TYPE_DECIMAL.equals(columnMeta.getColumnType())){ + else if(Const.CLASSTYPE.DECIMAL.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.DECIMAL); } - else if(Const.META_TYPE_TIMESTAMP.equals(columnMeta.getColumnType())){ + else if(Const.CLASSTYPE.TIMESTAMP.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.TIMESTAMP); } - else if(Const.META_TYPE_DATE.equals(columnMeta.getColumnType())){ + else if(Const.CLASSTYPE.DATE.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.DATE); } - else if(Const.META_TYPE_CLOB.equals(columnMeta.getColumnType()) || Const.META_TYPE_BLOB.equals(columnMeta.getColumnType())){ + else if(Const.CLASSTYPE.CLOB.equals(columnMeta.getColumnType()) || Const.CLASSTYPE.BLOB.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.BINARY); - }else if(Const.META_TYPE_STRING.equals(columnMeta.getColumnType())){ + }else if(Const.CLASSTYPE.STRING.equals(columnMeta.getColumnType())){ builder.add(columnMeta.getColumnName(), SqlTypeName.VARCHAR); } } diff --git a/common/src/main/java/com/robin/comm/sql/FilterSqlParser.java b/common/src/main/java/com/robin/comm/sql/FilterSqlParser.java index f5f7b555..b93ac28b 100644 --- a/common/src/main/java/com/robin/comm/sql/FilterSqlParser.java +++ b/common/src/main/java/com/robin/comm/sql/FilterSqlParser.java @@ -273,7 +273,7 @@ protected static boolean cmpObject(Map> inPartMap,Map getIndex(String httpUrl,String indexName,String } return indexCfgMap; } - public static String translateEsType(String columnType) { + public static Const.CLASSTYPE translateEsType(String columnType) { Assert.notNull(columnType,"type is null"); - String retType; + Const.CLASSTYPE retType; if ("auto".equalsIgnoreCase(columnType) || "keyword".equalsIgnoreCase(columnType) || "text".equalsIgnoreCase(columnType)) { - retType=Const.META_TYPE_STRING; + retType= Const.CLASSTYPE.STRING; }else if("double".equalsIgnoreCase(columnType)){ - retType=Const.META_TYPE_DOUBLE; + retType= Const.CLASSTYPE.DOUBLE; }else if("integer".equalsIgnoreCase(columnType)){ - retType=Const.META_TYPE_INTEGER; + retType= Const.CLASSTYPE.INTEGER; }else if("float".equalsIgnoreCase(columnType)){ - retType=Const.META_TYPE_NUMERIC; + retType= Const.CLASSTYPE.NUMERIC; }else if("short".equalsIgnoreCase(columnType)){ - retType=Const.META_TYPE_SHORT; + retType= Const.CLASSTYPE.SHORT; }else { - retType=Const.META_TYPE_STRING; + retType= Const.CLASSTYPE.STRING; } return retType; } diff --git a/common/src/main/java/com/robin/comm/util/ppt/PptBaseUtil.java b/common/src/main/java/com/robin/comm/util/ppt/PptBaseUtil.java index 23da1656..22899938 100644 --- a/common/src/main/java/com/robin/comm/util/ppt/PptBaseUtil.java +++ b/common/src/main/java/com/robin/comm/util/ppt/PptBaseUtil.java @@ -1,8 +1,31 @@ package com.robin.comm.util.ppt; +import com.robin.comm.util.xls.TableConfigProp; +import com.robin.comm.util.xls.TableHeaderColumn; +import org.apache.poi.hslf.model.HeadersFooters; +import org.apache.poi.hslf.usermodel.HSLFSlide; +import org.apache.poi.hslf.usermodel.HSLFSlideShow; +import org.apache.poi.hslf.usermodel.HSLFTable; +import org.apache.poi.hwpf.usermodel.Picture; +import org.apache.poi.sl.usermodel.PictureData.PictureType; +import org.apache.poi.sl.usermodel.*; +import org.apache.poi.xslf.usermodel.SlideLayout; +import org.apache.poi.xslf.usermodel.XSLFSlideLayout; +import org.apache.poi.xslf.usermodel.XSLFSlideMaster; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + + public class PptBaseUtil { - /*public static void adjustHeaderFooter(HSLFSlideShow show,PptHeaderFooterSection section){ + public static void adjustHeaderFooter(HSLFSlideShow show, PptHeaderFooterSection section){ HeadersFooters slideHeaders = show.getSlideHeadersFooters(); if(section.getHeaderStr()!=null && !"".equals(section.getHeaderStr())) slideHeaders.setHeaderText(section.getHeaderStr()); @@ -17,17 +40,17 @@ public class PptBaseUtil { if(section.getNodeHeaderStr()!=null && !"".equals(section.getNodeHeaderStr())) notesHeaders.setHeaderText(section.getNodeHeaderStr()); } - public static void insertTable(HSLFSlide slide,PptTableDef def,List> resultList){ - TableHeaderProp prop=def.getHeaderProp(); + public static void insertTable(HSLFSlide slide, PptTableDef def, List> resultList){ + TableConfigProp prop=def.getHeaderProp(); int width=prop.getContainrow(); int rows=prop.getTotalCol(); - HSLFTable celltab=new HSLFTable(width,rows,null); + /*HSLFTable celltab=new HSLFTable(width,rows,null); List list=prop.getHeaderColumnList().get(0); for(int i=0;i master = show.getSlideMasters(); + XSLFSlideMaster slideMaster=(XSLFSlideMaster) master.get(0); - Fill fill = master.getBackground().getFill(); + XSLFSlideLayout layout=slideMaster.getLayout(SlideLayout.BLANK); String path=config.getBackgroundPic(); - int pic_type=-1; + PictureType pic_type; if(path.indexOf(".png") != -1){ - pic_type = Picture.PNG; + pic_type = PictureType.PNG; }else{ - pic_type = Picture.JPEG; + pic_type = PictureType.JPEG; } - int idx = show.addPicture(new File(path), pic_type); - fill.setFillType(Fill.FILL_PICTURE); - fill.setPictureData(idx); - }*/ + PictureData data = show.addPicture(new File(path), pic_type); + + } } diff --git a/common/src/main/java/com/robin/comm/util/ppt/PptGenerater.java b/common/src/main/java/com/robin/comm/util/ppt/PptGenerater.java index 69d2c1ff..92cbeb94 100644 --- a/common/src/main/java/com/robin/comm/util/ppt/PptGenerater.java +++ b/common/src/main/java/com/robin/comm/util/ppt/PptGenerater.java @@ -1,15 +1,20 @@ package com.robin.comm.util.ppt; +import org.apache.poi.hslf.usermodel.HSLFSlide; +import org.apache.poi.hslf.usermodel.HSLFSlideShow; +import org.apache.poi.sl.usermodel.Slide; +import org.apache.poi.sl.usermodel.SlideShow; + +import java.io.IOException; +import java.util.List; + public class PptGenerater { - /*public static void GeneratePpt(SlideShow show,PptConfig config){ + public static void GeneratePpt(HSLFSlideShow show, PptConfig config) throws IOException{ List> sectionList=config.getSectionList(); PptHeaderFooterSection headerFooter=config.getHeaderFooter(); - if(config.getBackgroundPic()!=null) - try { - PptBaseUtil.setBackground(show, config); - } catch (IOException e) { - e.printStackTrace(); - } + if(config.getBackgroundPic()!=null){ + PptBaseUtil.setBackground(show, config); + } if(headerFooter!=null) PptBaseUtil.adjustHeaderFooter(show, headerFooter); for (int i=0;i se } }else if(sec.getType().equalsIgnoreCase(PptSection.TYPE_TABLE)) { - PptBaseUtil.insertTable(slide, sec.getTableDef(),sec.getResultList()); + PptBaseUtil.insertTable((HSLFSlide)slide, sec.getTableDef(),sec.getResultList()); }else if(sec.getType().equalsIgnoreCase(PptSection.TYPE_IMAGE)) PptBaseUtil.insertImage(show, slide, sec.getImageDef()); } }catch (Exception e) { e.printStackTrace(); } - }*/ + } } diff --git a/common/src/main/java/com/robin/comm/util/xls/ExcelBaseOper.java b/common/src/main/java/com/robin/comm/util/xls/ExcelBaseOper.java index 4e0b46a4..c2cc624b 100644 --- a/common/src/main/java/com/robin/comm/util/xls/ExcelBaseOper.java +++ b/common/src/main/java/com/robin/comm/util/xls/ExcelBaseOper.java @@ -200,7 +200,7 @@ public static CellStyle getHeaderStyle(Workbook wb, int rowspan, HorizontalAlign return cs; } - public static Cell merged(Sheet sheet,String colType, int startRow, int startCell, int endRow, int endCell, CellStyle cs, String value, CreationHelper helper) { + public static Cell merged(Sheet sheet, Const.CLASSTYPE colType, int startRow, int startCell, int endRow, int endCell, CellStyle cs, String value, CreationHelper helper) { Cell cell; CellRangeAddress cellRangeAddress = new CellRangeAddress(startRow, endRow, startCell, endCell); sheet.addMergedRegion(cellRangeAddress); @@ -340,29 +340,29 @@ private static Cell createCell(Row row, int column, CellStyle cellStyle, Creatio return cell; } - public static Cell createCell(Row row1,int j, String value, String colType, CellStyle cellStyle, CreationHelper helper) { + public static Cell createCell(Row row1, int j, String value, Const.CLASSTYPE colType, CellStyle cellStyle, CreationHelper helper) { Cell cell; - if (colType.equals(Const.META_TYPE_STRING)) { + if (colType.equals(Const.CLASSTYPE.STRING)) { cell = createCell(row1, j, cellStyle, helper, value); - } else if (colType.equals(Const.META_TYPE_NUMERIC) || colType.equals(Const.META_TYPE_DOUBLE)) { + } else if (colType.equals(Const.CLASSTYPE.NUMERIC) || colType.equals(Const.CLASSTYPE.DOUBLE)) { if (!StringUtils.isEmpty(value)) { cell = createCell(row1, j, cellStyle, helper, Double.parseDouble(value)); } else { cell = createCell(row1, j, cellStyle, helper, ""); } - } else if (colType.equals(Const.META_TYPE_INTEGER)) { + } else if (colType.equals(Const.CLASSTYPE.INTEGER)) { if (!StringUtils.isEmpty(value)) { cell = createCell(row1, j, cellStyle, helper, Integer.parseInt(value)); } else { cell = createCell(row1, j, cellStyle, helper, ""); } - } else if (colType.equals(Const.META_TYPE_DATE) || colType.equals(Const.META_TYPE_TIMESTAMP)) { + } else if (colType.equals(Const.CLASSTYPE.DATE) || colType.equals(Const.CLASSTYPE.TIMESTAMP)) { if (!StringUtils.isEmpty(value)) { cell = createCellDate(row1, j, cellStyle, helper, value); } else { cell = createCell(row1, j, cellStyle, helper, ""); } - } else if (colType.equalsIgnoreCase(Const.META_TYPE_FORMULA)) { + } else if (colType.equals(Const.CLASSTYPE.FORMULA)) { cell = createFormulaCell(row1, j, cellStyle, value); } else { cell = createCell(row1, j, cellStyle, helper, value); diff --git a/common/src/main/java/com/robin/comm/util/xls/ExcelCellStyleUtil.java b/common/src/main/java/com/robin/comm/util/xls/ExcelCellStyleUtil.java index 3b6149b4..200d9b06 100644 --- a/common/src/main/java/com/robin/comm/util/xls/ExcelCellStyleUtil.java +++ b/common/src/main/java/com/robin/comm/util/xls/ExcelCellStyleUtil.java @@ -32,7 +32,7 @@ private ExcelCellStyleUtil() { } - public static CellStyle getNoBorderCellType(Workbook wb, String metaType) { + public static CellStyle getNoBorderCellType(Workbook wb, Const.CLASSTYPE metaType) { CellStyle cs = wb.createCellStyle(); cs.setAlignment(HorizontalAlignment.CENTER); cs.setBorderBottom(BorderStyle.THIN); @@ -45,24 +45,24 @@ public static CellStyle getNoBorderCellType(Workbook wb, String metaType) { return cs; } - private static void extractMeta(Workbook wb,String metaType, CellStyle cs) { + private static void extractMeta(Workbook wb, Const.CLASSTYPE metaType, CellStyle cs) { switch (metaType) { - case Const.META_TYPE_NUMERIC: - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_FLOAT: + case NUMERIC: + case DOUBLE: + case FLOAT: cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00")); break; - case Const.META_TYPE_DATE: - case Const.META_TYPE_TIMESTAMP: + case DATE: + case TIMESTAMP: cs.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat(DateTimeFormatHolder.getTimestampFormatter().toString())); break; - case Const.META_TYPE_INTEGER: + case INTEGER: cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("0")); break; } } - public static CellStyle getBorderCellType(Workbook wb, String metaType) { + public static CellStyle getBorderCellType(Workbook wb, Const.CLASSTYPE metaType) { CellStyle cs = wb.createCellStyle(); cs.setAlignment(HorizontalAlignment.CENTER); cs.setBorderBottom(BorderStyle.THIN); @@ -83,7 +83,7 @@ public static CellStyle getBorderCellType(Workbook wb, String metaType) { return cs; } - public static CellStyle getCellStyle(Workbook wb,String metaType,Map cellMap){ + public static CellStyle getCellStyle(Workbook wb, Const.CLASSTYPE metaType, Map cellMap){ if(cellMap.containsKey(metaType)){ return cellMap.get(metaType); }else{ @@ -110,7 +110,7 @@ public static CellStyle getCellStyle(Workbook wb,String metaType,Map cellMap) { + public static CellStyle getCellStyle(Workbook wb, int rowspan, int colspan, Const.CLASSTYPE metaType, TableConfigProp header, Map cellMap) { CellStyle cs = null; if (cellMap.containsKey("C_" + rowspan + "_" + colspan + "_" + metaType)) { cs = cellMap.get("C_" + rowspan + "_" + colspan + "_" + metaType); diff --git a/common/src/main/java/com/robin/comm/util/xls/ExcelColumnProp.java b/common/src/main/java/com/robin/comm/util/xls/ExcelColumnProp.java index 62f3b66d..ebe234ea 100644 --- a/common/src/main/java/com/robin/comm/util/xls/ExcelColumnProp.java +++ b/common/src/main/java/com/robin/comm/util/xls/ExcelColumnProp.java @@ -15,6 +15,7 @@ */ package com.robin.comm.util.xls; +import com.robin.core.base.util.Const; import lombok.Getter; import lombok.Setter; @@ -23,7 +24,7 @@ public class ExcelColumnProp { private String columnName; private String columnCode; - private String columnType; + private Const.CLASSTYPE columnType; private String formula; private String format; private boolean needMerge; @@ -32,25 +33,20 @@ public class ExcelColumnProp { private ExcelColumnProp() { } - - public ExcelColumnProp(String columnName, String columnCode, String columnType, boolean needMerge) { + public ExcelColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType){ this.columnCode = columnCode; this.columnName = columnName; this.columnType = columnType; + } + public ExcelColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType, boolean needMerge) { + this(columnName,columnCode,columnType); this.needMerge = needMerge; } - public ExcelColumnProp(String columnName, String columnCode, String columnType, String formula) { - this.columnCode = columnCode; - this.columnName = columnName; - this.columnType = columnType; + public ExcelColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType, String formula) { + this(columnName,columnCode,columnType); this.formula = formula; } - public ExcelColumnProp(String columnName, String columnCode, String columnType) { - this.columnCode = columnCode; - this.columnName = columnName; - this.columnType = columnType; - this.needMerge = false; - } + } diff --git a/common/src/main/java/com/robin/comm/util/xls/ExcelProcessor.java b/common/src/main/java/com/robin/comm/util/xls/ExcelProcessor.java index cfe63fee..a23f7df5 100644 --- a/common/src/main/java/com/robin/comm/util/xls/ExcelProcessor.java +++ b/common/src/main/java/com/robin/comm/util/xls/ExcelProcessor.java @@ -19,7 +19,6 @@ import com.robin.core.base.util.Const; import com.robin.core.convert.util.DataTypeEnum; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.tuple.Pair; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFSheet; @@ -91,7 +90,7 @@ public static void readExcelFile(Workbook wb, ExcelSheetProp prop, IExcelAfterPr if (i >= prop.getColumnPropList().size()) { break; } - String type = prop.getColumnPropList().get(i).getColumnType(); + Const.CLASSTYPE type = prop.getColumnPropList().get(i).getColumnType(); Cell cell = row.getCell(i); Object strCell = ""; @@ -162,11 +161,11 @@ public static int readExcelFile(InputStream myxls, int sheetIndex, Map> values, CellStyle style) { + /*public static void createRows(Row row, ExcelSheetProp prop, List> values, CellStyle style) { for (int i = prop.getStartCol(); i < prop.getStartCol() + values.size(); i++) { createCell(values.get(i).getKey(), style, row, i, values.get(i).getValue().toString()); } - } + }*/ /** * @param prop @@ -634,15 +633,15 @@ private static void createHeaderCellRegion(Sheet targetsheet, Workbook wb, Excel if (!CollectionUtils.isEmpty(region.getSubRegions())) { if (region.getColheigth() == 1 && region.getCollength() == 1) { CellStyle style = ExcelBaseOper.getHeaderStyle(wb, 1, HorizontalAlignment.CENTER, region, header); - Cell cell = ExcelBaseOper.createCell(baserow, startcol, value, Const.META_TYPE_STRING, style, helper); + Cell cell = ExcelBaseOper.createCell(baserow, startcol, value, Const.CLASSTYPE.STRING, style, helper); cell.setCellValue(name); } else { CellStyle style = ExcelBaseOper.getHeaderStyle(wb, 3, HorizontalAlignment.CENTER, region, header); - ExcelBaseOper.merged(targetsheet, Const.META_TYPE_STRING, baseRow, startcol, baseRow + region.getColheigth() - 1, startcol + region.getCollength() - 1, style, value, helper); + ExcelBaseOper.merged(targetsheet, Const.CLASSTYPE.STRING, baseRow, startcol, baseRow + region.getColheigth() - 1, startcol + region.getCollength() - 1, style, value, helper); } } else { CellStyle style = ExcelBaseOper.getHeaderStyle(wb, 3, HorizontalAlignment.CENTER, region, header); - ExcelBaseOper.merged(targetsheet, Const.META_TYPE_STRING, baseRow, startcol, baseRow + region.getColheigth() - 1, startcol + region.getCollength() - 1, style, value, helper); + ExcelBaseOper.merged(targetsheet, Const.CLASSTYPE.STRING, baseRow, startcol, baseRow + region.getColheigth() - 1, startcol + region.getCollength() - 1, style, value, helper); } } int tmpcol = startcol; @@ -661,10 +660,10 @@ private static void createHeaderCellRegion(Sheet targetsheet, Workbook wb, Table Row baseRow = headerRows[column.getStartrow()]; if (column.getRowspan() > 1 || column.getColspan() > 1) { style = ExcelBaseOper.getHeaderStyle(wb, 3, HorizontalAlignment.CENTER, prop); - ExcelBaseOper.merged(targetsheet, Const.META_TYPE_STRING, column.getStartrow(), column.getStartcol(), column.getStartrow() + column.getRowspan() - 1, column.getStartcol() + column.getColspan() - 1, style, column.getColumnName(), helper); + ExcelBaseOper.merged(targetsheet, Const.CLASSTYPE.STRING, column.getStartrow(), column.getStartcol(), column.getStartrow() + column.getRowspan() - 1, column.getStartcol() + column.getColspan() - 1, style, column.getColumnName(), helper); } else { style = ExcelBaseOper.getHeaderStyle(wb, 1, HorizontalAlignment.CENTER, prop); - ExcelBaseOper.createCell(baseRow, column.getStartcol(), column.getColumnName(), Const.META_TYPE_STRING, style, helper); + ExcelBaseOper.createCell(baseRow, column.getStartcol(), column.getColumnName(), Const.CLASSTYPE.STRING, style, helper); } } @@ -673,10 +672,11 @@ private static void createHeaderCellRegion(Sheet targetsheet, Workbook wb, Table Row baseRow = headerRows[region.getStartrow()]; if (region.getColheigth() > 1 || region.getCollength() > 1) { style = ExcelBaseOper.getHeaderStyle(wb, 3, HorizontalAlignment.CENTER, prop); - ExcelBaseOper.merged(targetsheet, Const.META_TYPE_STRING, region.getStartrow(), region.getStartcol(), region.getStartrow() + region.getColheigth() - 1, region.getStartcol() + region.getCollength() - 1, style, region.getName(), helper); + ExcelBaseOper.merged(targetsheet, Const.CLASSTYPE.STRING, region.getStartrow(), region.getStartcol(), region.getStartrow() + region.getColheigth() - 1, region.getStartcol() + region.getCollength() - 1, style, region.getName(), helper); } else { style = ExcelBaseOper.getHeaderStyle(wb, 1, HorizontalAlignment.CENTER, prop); - ExcelBaseOper.createCell(baseRow, region.getStartcol(), region.getName(), Const.META_TYPE_STRING, style, helper); + ExcelBaseOper.createCell(baseRow, region.getStartcol(), region.getName(), Const.CLASSTYPE.STRING, style, helper); + } } @@ -713,7 +713,7 @@ public static void processSingleLine(Map map, Workbook wb, Sheet targ for (int j = 0; j < prop.getColumnPropList().size(); j++) { ExcelColumnProp excelprop = prop.getColumnPropList().get(j); String columnCode = excelprop.getColumnCode(); - String columnType = excelprop.getColumnType(); + Const.CLASSTYPE columnType = excelprop.getColumnType(); boolean needMerge = excelprop.isNeedMerge(); Object valObj = map.get(columnCode); String valueobj; @@ -749,7 +749,7 @@ public static void processSingleLine(Map map, Workbook wb, Sheet targ ExcelBaseOper.createCell(row, j, valueobj, columnType, stylesingle, helper); } } else { - if(Const.META_TYPE_FORMULA.equals(excelprop.getColumnType())){ + if(Const.CLASSTYPE.FORMULA.equals(excelprop.getColumnType())){ valueobj=ExcelBaseOper.returnFormulaWithPos(excelprop.getFormula(),i+prop.getStartRow()+1); } ExcelBaseOper.createCell(row, j, valueobj, columnType, stylesingle, helper); @@ -759,7 +759,7 @@ public static void processSingleLine(Map map, Workbook wb, Sheet targ for (int k = 0; k < fieldCount; k++) { ExcelColumnProp excelprop = prop.getColumnPropList().get(k); boolean needMerge = excelprop.isNeedMerge(); - String columnType = excelprop.getColumnType(); + Const.CLASSTYPE columnType = excelprop.getColumnType(); CellStyle stylesingle = ExcelCellStyleUtil.getCellStyle(wb, 1, 1, columnType, header, cellMap); CellStyle stylemutil = ExcelCellStyleUtil.getCellStyle(wb, 1, 2, columnType, header, cellMap); if (needMerge) { @@ -792,7 +792,7 @@ public static void processSingleLine(Map map, Workbook wb, Sheet targ ExcelBaseOper.merged(targetsheet, prop.getColumnPropList().get(d).getColumnType(), fromPos[d] + startRow, startCol + i, i + startRow, startCol + i, stylemutil, valueArr[d], helper); } else { String columnCode = prop.getColumnPropList().get(d).getColumnCode(); - String columnType = prop.getColumnPropList().get(d).getColumnType(); + Const.CLASSTYPE columnType = prop.getColumnPropList().get(d).getColumnType(); CellStyle stylesingle = ExcelCellStyleUtil.getCellStyle(wb, 1, 1, columnType, header, cellMap); Object valObj = map.get(columnCode); String valueobj; @@ -862,7 +862,7 @@ private static void fillColumns(Workbook wb, Sheet targetsheet, ExcelSheetProp p if (valueobj != null) { value = valueobj.toString(); } - String colType = columnProp.getColumnType(); + Const.CLASSTYPE colType = columnProp.getColumnType(); if (columname != null && !"".equals(columname)) { CellStyle cellStyle = ExcelCellStyleUtil.getCellStyle(wb, 1, 1, colType, null, cellMap); @@ -876,28 +876,28 @@ private static void fillColumns(Workbook wb, Sheet targetsheet, ExcelSheetProp p } - public static void createCell(String colType, CellStyle cellStyle, Row row1, int j, String value) { - if (colType.equals(Const.META_TYPE_STRING)) { + public static void createCell(Const.CLASSTYPE colType, CellStyle cellStyle, Row row1, int j, String value) { + if (colType.equals(Const.CLASSTYPE.STRING)) { createCell(cellStyle, row1, (short) j, value); - } else if (colType.equals(Const.META_TYPE_NUMERIC) || colType.equals(Const.META_TYPE_DOUBLE)) { + } else if (colType.equals(Const.CLASSTYPE.NUMERIC) || colType.equals(Const.CLASSTYPE.DOUBLE)) { if (!StringUtils.isEmpty(value)) { createCell(cellStyle, row1, (short) j, Double.parseDouble(value)); } else { createNullCell(cellStyle, row1, (short) j); } - } else if (colType.equals(Const.META_TYPE_BIGINT)) { + } else if (colType.equals(Const.CLASSTYPE.LONG)) { if (!StringUtils.isEmpty(value)) { createCell(cellStyle, row1, (short) j, Long.parseLong(value)); } else { createNullCell(cellStyle, row1, (short) j); } - } else if (colType.equalsIgnoreCase(Const.META_TYPE_INTEGER)) { + } else if (colType.equals(Const.CLASSTYPE.INTEGER)) { if (!StringUtils.isEmpty(value)) { createCell(cellStyle, row1, (short) j, Integer.parseInt(value)); } else { createNullCell(cellStyle, row1, (short) j); } - } else if (colType.equals(Const.META_TYPE_DATE)) { + } else if (colType.equals(Const.CLASSTYPE.DATE)) { if (!"".equals(value)) { createCellDate(cellStyle, row1, (short) j, value); } diff --git a/common/src/main/java/com/robin/comm/util/xls/ExcelSheetProp.java b/common/src/main/java/com/robin/comm/util/xls/ExcelSheetProp.java index 64df8891..95d0b0ae 100644 --- a/common/src/main/java/com/robin/comm/util/xls/ExcelSheetProp.java +++ b/common/src/main/java/com/robin/comm/util/xls/ExcelSheetProp.java @@ -15,6 +15,7 @@ */ package com.robin.comm.util.xls; +import com.robin.core.base.util.Const; import com.robin.core.fileaccess.meta.DataCollectionMeta; import com.robin.core.fileaccess.meta.DataSetColumnMeta; import lombok.Data; @@ -87,11 +88,11 @@ public Builder setFileExt(String fileExt){ prop.setFileExt(fileExt); return this; } - public Builder addColumnProp(String columnName,String columnCode,String columnType){ + public Builder addColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType){ prop.getColumnPropList().add(new ExcelColumnProp(columnName,columnCode,columnType)); return this; } - public Builder addColumnProp(String columnName,String columnCode,String columnType,String formula){ + public Builder addColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType, String formula){ prop.getColumnPropList().add(new ExcelColumnProp(columnName,columnCode,columnType,formula)); return this; } @@ -99,7 +100,7 @@ public Builder addColumnProp(ExcelColumnProp columnProp){ prop.getColumnPropList().add(columnProp); return this; } - public Builder addColumnProp(String columnName,String columnCode,String columnType,boolean needMerge){ + public Builder addColumnProp(String columnName, String columnCode, Const.CLASSTYPE columnType, boolean needMerge){ prop.getColumnPropList().add(new ExcelColumnProp(columnName,columnCode,columnType,needMerge)); return this; } diff --git a/common/src/main/java/com/robin/core/fileaccess/fs/ApacheVfsFileSystemAccessor.java b/common/src/main/java/com/robin/core/fileaccess/fs/ApacheVfsFileSystemAccessor.java index ac8a22f3..299e8e0a 100644 --- a/common/src/main/java/com/robin/core/fileaccess/fs/ApacheVfsFileSystemAccessor.java +++ b/common/src/main/java/com/robin/core/fileaccess/fs/ApacheVfsFileSystemAccessor.java @@ -1,5 +1,6 @@ package com.robin.core.fileaccess.fs; +import com.robin.core.base.exception.MissingConfigException; import com.robin.core.base.exception.OperationNotSupportException; import com.robin.core.base.util.Const; import com.robin.core.convert.util.ConvertUtil; @@ -20,6 +21,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.*; +import java.util.stream.Collectors; public class ApacheVfsFileSystemAccessor extends AbstractFileSystemAccessor { private ThreadLocal local = new ThreadLocal<>(); @@ -180,8 +182,8 @@ public FileObject createNotExists(DataCollectionMeta meta, String resourcePath) return fo; } catch (FileSystemException ex) { logger.info("{}", ex.getMessage()); + throw ex; } - return null; } public boolean checkFileExist(VfsParam param, String resourcePath) throws Exception { @@ -218,6 +220,34 @@ public InputStream getRawInputStream(String resourcePath) throws IOException { } } + @Override + public List listPath(String inputPath) throws Exception { + VfsParam param = new VfsParam(); + + ConvertUtil.convertToTarget(colmeta.getResourceCfgMap(), param); + try (FileObject fo = manager.resolveFile(getUriByParam(param, inputPath).toString(), getOptions(param))) { + if(fo.isFolder()){ + FileObject [] files=fo.findFiles(new AllFileSelector()); + return Arrays.stream(files).map(f->f.getPath().toFile().getPath()).collect(Collectors.toList()); + }else{ + throw new MissingConfigException("not a directory"); + } + }catch (Exception ex){ + throw ex; + } + } + + @Override + public boolean isDirectory(String inputPath) throws Exception { + VfsParam param = new VfsParam(); + ConvertUtil.convertToTarget(colmeta.getResourceCfgMap(), param); + try (FileObject fo = manager.resolveFile(getUriByParam(param, inputPath).toString(), getOptions(param))) { + return fo.isFolder(); + }catch (Exception ex){ + throw ex; + } + } + private static URI getUriByParam(VfsParam param, String relativePath) throws URISyntaxException { String userInfo = param.getUserName() + ":" + param.getPassword();//URLEncoder.encode(param.getPassword(), "iso8859-1");// 解决密码中的特殊字符问题,如@。 String remoteFilePath = relativePath; diff --git a/common/src/main/java/com/robin/core/fileaccess/fs/IFileSystemAccessor.java b/common/src/main/java/com/robin/core/fileaccess/fs/IFileSystemAccessor.java index 83a4db73..2fe4f456 100644 --- a/common/src/main/java/com/robin/core/fileaccess/fs/IFileSystemAccessor.java +++ b/common/src/main/java/com/robin/core/fileaccess/fs/IFileSystemAccessor.java @@ -4,6 +4,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.io.*; +import java.util.List; /** * All FileSystem accessor interface,Extends By Local/VFS/HDFS and cloud storage supported. @@ -61,4 +62,6 @@ public interface IFileSystemAccessor extends Closeable { void init(DataCollectionMeta meta); void finishReadOrWrite() throws IOException; String getIdentifier(); + List listPath(String inputPath) throws Exception; + boolean isDirectory(String inputPath) throws Exception; } diff --git a/common/src/main/java/com/robin/core/fileaccess/fs/LocalFileSystemAccessor.java b/common/src/main/java/com/robin/core/fileaccess/fs/LocalFileSystemAccessor.java index 05da494d..64e2781f 100644 --- a/common/src/main/java/com/robin/core/fileaccess/fs/LocalFileSystemAccessor.java +++ b/common/src/main/java/com/robin/core/fileaccess/fs/LocalFileSystemAccessor.java @@ -2,10 +2,14 @@ import com.robin.core.base.util.Const; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.DirectoryFileFilter; +import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.lang3.tuple.Pair; import java.io.*; import java.net.URI; +import java.util.List; +import java.util.stream.Collectors; public class LocalFileSystemAccessor extends AbstractFileSystemAccessor { private static LocalFileSystemAccessor accessor=new LocalFileSystemAccessor(); @@ -104,4 +108,15 @@ private static String getProcessPath(String url){ } return url; } + + @Override + public List listPath(String inputPath) throws Exception { + return FileUtils.listFiles(new File(getProcessPath(inputPath)), FileFilterUtils.fileFileFilter(), DirectoryFileFilter.DIRECTORY).stream().map(f->f.getPath()).collect(Collectors.toList()); + } + + @Override + public boolean isDirectory(String inputPath) { + File file=new File(getProcessPath(inputPath)); + return file.exists() && file.isDirectory(); + } } diff --git a/common/src/main/java/com/robin/core/fileaccess/iterator/AbstractFileIterator.java b/common/src/main/java/com/robin/core/fileaccess/iterator/AbstractFileIterator.java index 2d8ce6d6..3eb17ece 100644 --- a/common/src/main/java/com/robin/core/fileaccess/iterator/AbstractFileIterator.java +++ b/common/src/main/java/com/robin/core/fileaccess/iterator/AbstractFileIterator.java @@ -85,8 +85,8 @@ public AbstractFileIterator(DataCollectionMeta colmeta) { for (DataSetColumnMeta meta : colmeta.getColumnList()) { columnList.add(meta.getColumnName()); columnMap.put(meta.getColumnName(), meta); - if (Const.META_TYPE_FORMULA.equals(meta.getColumnType())) { - meta.setColumnType(Const.META_TYPE_DOUBLE); + if (Const.CLASSTYPE.FORMULA.equals(meta.getColumnType())) { + meta.setColumnType(Const.CLASSTYPE.DOUBLE); } } if (!CollectionUtils.isEmpty(colmeta.getResourceCfgMap()) && !ObjectUtils.isEmpty(colmeta.getResourceCfgMap().get(ResourceConst.STORAGEFILTERSQL))) { diff --git a/common/src/main/java/com/robin/core/fileaccess/iterator/ArffFileIterator.java b/common/src/main/java/com/robin/core/fileaccess/iterator/ArffFileIterator.java index 2da931cf..f31a5d36 100644 --- a/common/src/main/java/com/robin/core/fileaccess/iterator/ArffFileIterator.java +++ b/common/src/main/java/com/robin/core/fileaccess/iterator/ArffFileIterator.java @@ -53,14 +53,14 @@ private DataSetColumnMeta parseDefine(String content){ String columnName=arr[0].trim(); DataSetColumnMeta columnMeta=null; if("REAL".equalsIgnoreCase(arr[1]) || "numeric".equalsIgnoreCase(arr[1])){ - columnMeta=new DataSetColumnMeta(columnName,Const.META_TYPE_DOUBLE,null); + columnMeta=new DataSetColumnMeta(columnName, Const.CLASSTYPE.DOUBLE,null); }else if("string".equalsIgnoreCase(arr[1])){ - columnMeta=new DataSetColumnMeta(columnName,Const.META_TYPE_STRING,null); + columnMeta=new DataSetColumnMeta(columnName, Const.CLASSTYPE.STRING,null); }else if("date".equalsIgnoreCase(type)){ - columnMeta=new DataSetColumnMeta(columnName,Const.META_TYPE_TIMESTAMP,null); + columnMeta=new DataSetColumnMeta(columnName, Const.CLASSTYPE.TIMESTAMP,null); }else if(type.startsWith("{")){ List nominalValues= Lists.newArrayList(type.substring(1,type.length()-1).split(",")); - columnMeta=new DataSetColumnMeta(columnName,Const.META_TYPE_STRING,null); + columnMeta=new DataSetColumnMeta(columnName, Const.CLASSTYPE.STRING,null); columnMeta.setNominalValues(nominalValues); } return columnMeta; diff --git a/common/src/main/java/com/robin/core/fileaccess/iterator/XlsxFileIterator.java b/common/src/main/java/com/robin/core/fileaccess/iterator/XlsxFileIterator.java index f114dd5a..3a097303 100644 --- a/common/src/main/java/com/robin/core/fileaccess/iterator/XlsxFileIterator.java +++ b/common/src/main/java/com/robin/core/fileaccess/iterator/XlsxFileIterator.java @@ -163,7 +163,7 @@ private void readNext() throws Exception{ } } private Object parseValue(String value, DataSetColumnMeta columnMeta){ - if(!columnMeta.getColumnType().equals(Const.META_TYPE_TIMESTAMP)){ + if(!columnMeta.getColumnType().equals(Const.CLASSTYPE.TIMESTAMP)){ return ConvertUtil.convertStringToTargetObject(value, columnMeta, formatter); }else{ double dValue=Double.valueOf(value); diff --git a/common/src/main/java/com/robin/core/fileaccess/util/AvroUtils.java b/common/src/main/java/com/robin/core/fileaccess/util/AvroUtils.java index 9b6f53f3..d7714f7e 100644 --- a/common/src/main/java/com/robin/core/fileaccess/util/AvroUtils.java +++ b/common/src/main/java/com/robin/core/fileaccess/util/AvroUtils.java @@ -62,21 +62,21 @@ public static Schema getSchemaForDbMeta(String namespace, String className, List for (DataBaseColumnMeta meta : columnList) { switch (meta.getColumnType()) { - case Const.META_TYPE_BIGINT: + case LONG: fields = fields.name(meta.getColumnName()).type().nullable().longType().noDefault(); break; - case Const.META_TYPE_INTEGER: + case INTEGER: fields = fields.name(meta.getColumnName()).type().nullable().intType().noDefault(); break; - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_NUMERIC: + case DOUBLE: + case NUMERIC: fields = fields.name(meta.getColumnName()).type().nullable().doubleType().noDefault(); break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: Schema timestampMilliType = LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG)); fields = fields.name(meta.getColumnName()).type(timestampMilliType).noDefault(); break; - case Const.META_TYPE_BOOLEAN: + case BOOLEAN: fields = fields.name(meta.getColumnName()).type().nullable().booleanType().noDefault(); break; default: @@ -112,34 +112,34 @@ public static Schema getSchemaFromMeta(DataCollectionMeta colmeta) { for (DataSetColumnMeta meta : colmeta.getColumnList()) { switch (meta.getColumnType()) { - case Const.META_TYPE_BIGINT: + case LONG: if (meta.isRequired()) { fields = fields.name(meta.getColumnName()).type().longType().noDefault(); } else { fields = fields.name(meta.getColumnName()).type().nullable().longType().noDefault(); } break; - case Const.META_TYPE_INTEGER: + case INTEGER: if (meta.isRequired()) { fields = fields.name(meta.getColumnName()).type().intType().noDefault(); } else { fields = fields.name(meta.getColumnName()).type().nullable().intType().noDefault(); } break; - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_NUMERIC: + case DOUBLE: + case NUMERIC: if (meta.isRequired()) { fields = fields.name(meta.getColumnName()).type().doubleType().noDefault(); } else { fields = fields.name(meta.getColumnName()).type().nullable().doubleType().noDefault(); } break; - case Const.META_TYPE_TIMESTAMP: - case Const.META_TYPE_DATE: + case TIMESTAMP: + case DATE: Schema timestampMilliType = LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG)); fields = fields.name(meta.getColumnName()).type(timestampMilliType).noDefault(); break; - case Const.META_TYPE_BOOLEAN: + case BOOLEAN: if (meta.isRequired()) { fields = fields.name(meta.getColumnName()).type().booleanType().noDefault(); } else { diff --git a/common/src/main/java/com/robin/core/fileaccess/util/ByteBufferMapSerializer.java b/common/src/main/java/com/robin/core/fileaccess/util/ByteBufferMapSerializer.java index 7114b63a..0da711a8 100644 --- a/common/src/main/java/com/robin/core/fileaccess/util/ByteBufferMapSerializer.java +++ b/common/src/main/java/com/robin/core/fileaccess/util/ByteBufferMapSerializer.java @@ -54,17 +54,17 @@ public static void deSerialize(ByteBufferInputStream inputStream, List columnMap=new HashMap<>(); + protected Map columnMap=new HashMap<>(); protected List columnList=new ArrayList<>(); protected Logger logger= LoggerFactory.getLogger(getClass()); protected DateTimeFormatter formatter; @@ -134,7 +134,7 @@ public void close() throws IOException{ } protected String getOutputStringByType(Map valueMap,String columnName){ - String columnType=columnMap.get(columnName); + Const.CLASSTYPE columnType=columnMap.get(columnName); Object obj=getMapValueByMeta(valueMap,columnName); if(obj!=null) { return DataBaseUtil.toStringByDBType(obj,columnType,formatter); @@ -145,7 +145,7 @@ protected String getOutputStringByType(Map valueMap,String columnName) protected Object getMapValueByMeta(Map valueMap,String columnName){ Object obj=null; - String columnType=columnMap.get(columnName); + Const.CLASSTYPE columnType=columnMap.get(columnName); if(valueMap.containsKey(columnName)){ obj=valueMap.get(columnName); }else if(valueMap.containsKey(columnName.toUpperCase())){ diff --git a/common/src/main/java/com/robin/core/fileaccess/writer/XlsxFileWriter.java b/common/src/main/java/com/robin/core/fileaccess/writer/XlsxFileWriter.java index 9d47b93f..073edd1c 100644 --- a/common/src/main/java/com/robin/core/fileaccess/writer/XlsxFileWriter.java +++ b/common/src/main/java/com/robin/core/fileaccess/writer/XlsxFileWriter.java @@ -46,7 +46,7 @@ public class XlsxFileWriter extends AbstractFileWriter{ private OPCPackage opcPackage; private static final char CHARA = 'A'; - private final Map cellStyleMap=new HashMap<>(); + private final Map cellStyleMap=new HashMap<>(); private int rowPos=2; private int currentSheetPos=0; private ExcelSheetProp sheetProp; @@ -180,7 +180,7 @@ public void finishWrite() throws IOException { } streamWriter.flush(); if(!(out instanceof FinishableOutputStream)) { - writer.flush(); + out.flush(); }else{ ((FinishableOutputStream) out).finish(); } @@ -261,7 +261,7 @@ private String getEndCell(int columnSize) { builder.append((char)(CHARA + secondPos - 1)); return builder.toString(); } - protected void writeLine(Map valueMap, DataCollectionMeta colmeta, Map cellStyleMap, int rowpos) throws XMLStreamException { + protected void writeLine(Map valueMap, DataCollectionMeta colmeta, Map cellStyleMap, int rowpos) throws XMLStreamException { streamWriter.writeStartElement("row"); streamWriter.writeAttribute("r", String.valueOf(rowpos)); @@ -271,7 +271,7 @@ protected void writeLine(Map valueMap, DataCollectionMeta colmet streamWriter.writeStartElement("c"); streamWriter.writeAttribute("r", getEndCell(i + 1) + rowpos); streamWriter.writeAttribute("s", String.valueOf(style.getFontIndexAsInt())); - if (Const.META_TYPE_STRING.equals(colmeta.getColumnList().get(i).getColumnType())) { + if (Const.CLASSTYPE.STRING.equals(colmeta.getColumnList().get(i).getColumnType())) { streamWriter.writeAttribute("t", "inlineStr"); streamWriter.writeStartElement("is"); streamWriter.writeStartElement("t"); @@ -281,7 +281,7 @@ protected void writeLine(Map valueMap, DataCollectionMeta colmet } else { streamWriter.writeAttribute("t", "n"); - if (Const.META_TYPE_TIMESTAMP.equals(colmeta.getColumnList().get(i).getColumnType()) || Const.META_TYPE_DATE.equals(colmeta.getColumnList().get(i).getColumnType())) { + if (Const.CLASSTYPE.TIMESTAMP.equals(colmeta.getColumnList().get(i).getColumnType()) || Const.CLASSTYPE.DATE.equals(colmeta.getColumnList().get(i).getColumnType())) { streamWriter.writeStartElement("v"); Object value = valueMap.get(colmeta.getColumnList().get(i).getColumnName()); Date valDate = null; @@ -308,7 +308,7 @@ else if(Date.class.isAssignableFrom(value.getClass())){ streamWriter.writeEndElement(); } streamWriter.writeEndElement(); - }else if(Const.META_TYPE_FORMULA.equals(sheetProp.getColumnPropList().get(i).getColumnType())){ + }else if(Const.CLASSTYPE.FORMULA.equals(sheetProp.getColumnPropList().get(i).getColumnType())){ streamWriter.writeStartElement("c"); streamWriter.writeAttribute("r", getEndCell(i + 1) + rowpos); streamWriter.writeAttribute("s", String.valueOf(style.getFontIndexAsInt())); @@ -326,8 +326,8 @@ public void setSheetProp(ExcelSheetProp sheetProp) { this.sheetProp = sheetProp; } - private void writeHeader(List columnName, Map cellStyleMap) throws Exception { - CellStyle style = cellStyleMap.get(Const.META_TYPE_STRING); + private void writeHeader(List columnName, Map cellStyleMap) throws Exception { + CellStyle style = cellStyleMap.get(Const.CLASSTYPE.STRING); streamWriter.writeStartElement("row"); streamWriter.writeAttribute("r", "1"); for (int i = 0; i < columnName.size(); i++) { diff --git a/common/src/test/java/com/robin/comm/test/TestExcelOperation.java b/common/src/test/java/com/robin/comm/test/TestExcelOperation.java index 0ad05ee8..23a2b2ab 100644 --- a/common/src/test/java/com/robin/comm/test/TestExcelOperation.java +++ b/common/src/test/java/com/robin/comm/test/TestExcelOperation.java @@ -48,9 +48,9 @@ public class TestExcelOperation { @Test public void testReadWithIterator() throws Exception { DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - builder.addColumn("name", Const.META_TYPE_STRING).addColumn("time", Const.META_TYPE_TIMESTAMP) - .addColumn("intcol", Const.META_TYPE_INTEGER).addColumn("dval", Const.META_TYPE_DOUBLE) - .addColumn("dval2", Const.META_TYPE_DOUBLE).addColumn("diff", Const.META_TYPE_DOUBLE) + builder.addColumn("name", Const.CLASSTYPE.STRING).addColumn("time", Const.CLASSTYPE.TIMESTAMP) + .addColumn("intcol", Const.CLASSTYPE.INTEGER).addColumn("dval", Const.CLASSTYPE.DOUBLE) + .addColumn("dval2", Const.CLASSTYPE.DOUBLE).addColumn("diff", Const.CLASSTYPE.DOUBLE) .fileFormat(Const.FILEFORMATSTR.XLSX.getValue()).resPath("file:///d:/test2.xlsx"); LocalFileSystemAccessor accessor = LocalFileSystemAccessor.getInstance(); @@ -69,16 +69,17 @@ public void testReadWithIterator() throws Exception { @Test public void testWriteStAX() throws Exception{ ExcelSheetProp.Builder builder1 = ExcelSheetProp.Builder.newBuilder(); - builder1.addColumnProp(new ExcelColumnProp("name", "name", Const.META_TYPE_STRING, false)); - builder1.addColumnProp(new ExcelColumnProp("time", "time", Const.META_TYPE_TIMESTAMP, false)); - builder1.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.META_TYPE_INTEGER, false)); - builder1.addColumnProp(new ExcelColumnProp("dval", "dval", Const.META_TYPE_DOUBLE, false)); - builder1.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.META_TYPE_DOUBLE, false)); - builder1.addColumnProp(new ExcelColumnProp("diff", "diff", Const.META_TYPE_FORMULA, "(D{P}-E{P})/C{P}")); + builder1.addColumnProp(new ExcelColumnProp("name", "name", Const.CLASSTYPE.STRING, false)); + builder1.addColumnProp(new ExcelColumnProp("time", "time", Const.CLASSTYPE.TIMESTAMP, false)); + builder1.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.CLASSTYPE.INTEGER, false)); + builder1.addColumnProp(new ExcelColumnProp("dval", "dval", Const.CLASSTYPE.DOUBLE, false)); + builder1.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.CLASSTYPE.DOUBLE, false)); + builder1.addColumnProp(new ExcelColumnProp("diff", "diff", Const.CLASSTYPE.FORMULA, "(D{P}-E{P})/C{P}")); DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - builder.addColumn("name", Const.META_TYPE_STRING).addColumn("time", Const.META_TYPE_TIMESTAMP) - .addColumn("intcol", Const.META_TYPE_INTEGER).addColumn("dval", Const.META_TYPE_DOUBLE) - .addColumn("dval2", Const.META_TYPE_DOUBLE).addColumn("diff", Const.META_TYPE_DOUBLE) + builder.addColumn("name", Const.CLASSTYPE.STRING).addColumn("time", Const.CLASSTYPE.TIMESTAMP) + .addColumn("intcol", Const.CLASSTYPE.INTEGER).addColumn("dval", Const.CLASSTYPE.DOUBLE) + .addColumn("dval2", Const.CLASSTYPE.DOUBLE).addColumn("diff", Const.CLASSTYPE.DOUBLE) + //.resourceCfg(Const.COLUMN_XLSX_MULTIPLESHEETS,"true") .fileFormat(Const.FILEFORMATSTR.XLSX.getValue()).resPath("file:///d:/test2.xlsx"); DataCollectionMeta meta = builder.build(); LocalFileSystemAccessor accessor = LocalFileSystemAccessor.getInstance(); @@ -88,7 +89,7 @@ public void testWriteStAX() throws Exception{ writer.setSheetProp(builder1.build()); writer.beginWrite(); Long startTs = System.currentTimeMillis() - 3600 * 24 * 1000; - for(int j=0;j<1200000;j++){ + for(int j=0;j<12000;j++){ cachedMap.put("name", StringUtils.generateRandomChar(12)); cachedMap.put("time", String.valueOf(startTs + j * 1000)); cachedMap.put("intcol", String.valueOf(random.nextInt(1000))); @@ -106,14 +107,14 @@ public void testWriteStAX() throws Exception{ @Test public void testWriteStream() throws Exception{ DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - builder.addColumn("name", Const.META_TYPE_STRING).addColumn("time", Const.META_TYPE_TIMESTAMP) - .addColumn("intcol", Const.META_TYPE_INTEGER).addColumn("dval", Const.META_TYPE_DOUBLE) - .addColumn("dval2", Const.META_TYPE_DOUBLE).addColumn("diff", Const.META_TYPE_DOUBLE) + builder.addColumn("name", Const.CLASSTYPE.STRING).addColumn("time", Const.CLASSTYPE.TIMESTAMP) + .addColumn("intcol", Const.CLASSTYPE.INTEGER).addColumn("dval", Const.CLASSTYPE.DOUBLE) + .addColumn("dval2", Const.CLASSTYPE.DOUBLE).addColumn("diff", Const.CLASSTYPE.DOUBLE) .fileFormat(Const.FILEFORMATSTR.XLSX.getValue()).resPath("file:///d:/test.xlsx"); DataCollectionMeta meta = builder.build(); XMLOutputFactory factory = XMLOutputFactory.newFactory(); XMLStreamWriter writer=null; - Map cellStyleMap=new HashMap<>(); + Map cellStyleMap=new HashMap<>(); Map cachedMap=new HashMap<>(); Random random = new Random(12312321321312L); ByteArrayOutputStream byteOut=new ByteArrayOutputStream(); @@ -234,7 +235,7 @@ private String getEndCell(int columnSize) { return builder.toString(); } - private void writeLine(XMLStreamWriter writer,Map valueMap, DataCollectionMeta colmeta, Map cellStyleMap, int rowpos) throws Exception { + private void writeLine(XMLStreamWriter writer, Map valueMap, DataCollectionMeta colmeta, Map cellStyleMap, int rowpos) throws Exception { writer.writeStartElement("row"); writer.writeAttribute("r", String.valueOf(rowpos)); @@ -244,7 +245,7 @@ private void writeLine(XMLStreamWriter writer,Map valueMap, Data writer.writeStartElement("c"); writer.writeAttribute("r", getEndCell(i + 1) + rowpos); writer.writeAttribute("s", String.valueOf(style.getFontIndexAsInt())); - if (Const.META_TYPE_STRING.equals(colmeta.getColumnList().get(i).getColumnType())) { + if (Const.CLASSTYPE.STRING.equals(colmeta.getColumnList().get(i).getColumnType())) { writer.writeAttribute("t", "inlineStr"); writer.writeStartElement("is"); writer.writeStartElement("t"); @@ -254,7 +255,7 @@ private void writeLine(XMLStreamWriter writer,Map valueMap, Data } else { writer.writeAttribute("t", "n"); writer.writeStartElement("v"); - if (Const.META_TYPE_TIMESTAMP.equals(colmeta.getColumnList().get(i).getColumnType()) || Const.META_TYPE_DATE.equals(colmeta.getColumnList().get(i).getColumnType())) { + if (Const.CLASSTYPE.TIMESTAMP.equals(colmeta.getColumnList().get(i).getColumnType()) || Const.CLASSTYPE.DATE.equals(colmeta.getColumnList().get(i).getColumnType())) { Object value = valueMap.get(colmeta.getColumnList().get(i).getColumnName()); Date valDate = null; double dateVal=0.0; @@ -284,8 +285,8 @@ else if(Date.class.isAssignableFrom(value.getClass())){ writer.writeCharacters("\n"); } - private void writeHeader(XMLStreamWriter writer, List columnName, Map cellStyleMap) throws Exception { - CellStyle style = cellStyleMap.get(Const.META_TYPE_STRING); + private void writeHeader(XMLStreamWriter writer, List columnName, Map cellStyleMap) throws Exception { + CellStyle style = cellStyleMap.get(Const.CLASSTYPE.STRING); writer.writeStartElement("row"); writer.writeAttribute("r", "1"); for (int i = 0; i < columnName.size(); i++) { @@ -314,14 +315,14 @@ public void testGenerate() throws Exception { prop.setStartRow(1); prop.setSheetName("test"); prop.setStreamMode(); - prop.addColumnProp(new ExcelColumnProp("name", "name", Const.META_TYPE_STRING, false)); - prop.addColumnProp(new ExcelColumnProp("time", "time", Const.META_TYPE_TIMESTAMP, false)); - prop.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.META_TYPE_INTEGER, false)); - prop.addColumnProp(new ExcelColumnProp("dval", "dval", Const.META_TYPE_DOUBLE, false)); - prop.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.META_TYPE_DOUBLE, false)); - prop.addColumnProp(new ExcelColumnProp("diff", "diff", Const.META_TYPE_FORMULA, "(D{P}-E{P})/C{P}")); - //prop.addColumnProp(new ExcelColumnProp("差距1", "sep1", Const.META_TYPE_FORMULA, "D{P+1}-D{P}")); - //prop.addColumnProp(new ExcelColumnProp("差距2", "sep2", Const.META_TYPE_FORMULA, "D{P-1}-D{P}")); + prop.addColumnProp(new ExcelColumnProp("name", "name", Const.CLASSTYPE.STRING, false)); + prop.addColumnProp(new ExcelColumnProp("time", "time", Const.CLASSTYPE.TIMESTAMP, false)); + prop.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.CLASSTYPE.INTEGER, false)); + prop.addColumnProp(new ExcelColumnProp("dval", "dval", Const.CLASSTYPE.DOUBLE, false)); + prop.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.CLASSTYPE.DOUBLE, false)); + prop.addColumnProp(new ExcelColumnProp("diff", "diff", Const.CLASSTYPE.FORMULA, "(D{P}-E{P})/C{P}")); + //prop.addColumnProp(new ExcelColumnProp("差距1", "sep1", Const.DBCOLUMNTYPE.FORMULA, "D{P+1}-D{P}")); + //prop.addColumnProp(new ExcelColumnProp("差距2", "sep2", Const.DBCOLUMNTYPE.FORMULA, "D{P-1}-D{P}")); TableConfigProp header = new TableConfigProp(); header.setContainrow(1); Random random = new Random(12312321321312L); @@ -383,12 +384,12 @@ public void testRead() throws IOException { builder.setStartRow(1); builder.setSheetName("test"); builder.setStreamMode(); - builder.addColumnProp(new ExcelColumnProp("name", "name", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("time", "time", Const.META_TYPE_TIMESTAMP, false)); - builder.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.META_TYPE_INTEGER, false)); - builder.addColumnProp(new ExcelColumnProp("dval", "dval", Const.META_TYPE_DOUBLE, false)); - builder.addColumnProp(new ExcelColumnProp("差距1", "sep1", Const.META_TYPE_FORMULA, "D{P+1}-D{P}")); - builder.addColumnProp(new ExcelColumnProp("差距2", "sep2", Const.META_TYPE_FORMULA, "D{P-1}-D{P}")); + builder.addColumnProp(new ExcelColumnProp("name", "name", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("time", "time", Const.CLASSTYPE.TIMESTAMP, false)); + builder.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.CLASSTYPE.INTEGER, false)); + builder.addColumnProp(new ExcelColumnProp("dval", "dval", Const.CLASSTYPE.DOUBLE, false)); + builder.addColumnProp(new ExcelColumnProp("差距1", "sep1", Const.CLASSTYPE.FORMULA, "D{P+1}-D{P}")); + builder.addColumnProp(new ExcelColumnProp("差距2", "sep2", Const.CLASSTYPE.FORMULA, "D{P-1}-D{P}")); ExcelSheetProp prop=builder.build(); ExcelProcessor.readExcelFile("d:/test.xlsx", prop); if (!CollectionUtils.isEmpty(prop.getColumnList())) { @@ -403,17 +404,17 @@ public void testGenWithQuery() { builder.setStartCol(1); builder.setStartRow(1); builder.setSheetName("TestSheet1"); - builder.addColumnProp(new ExcelColumnProp("唯一键", "uuid", Const.META_TYPE_BIGINT, false)); - builder.addColumnProp(new ExcelColumnProp("企业id", "corpId", Const.META_TYPE_BIGINT, false)); - builder.addColumnProp(new ExcelColumnProp("车牌号", "carNum", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("车架号", "vin", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("品牌", "brand", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("修改时间", "modifier", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("颜色", "color", Const.META_TYPE_BIGINT, false)); - builder.addColumnProp(new ExcelColumnProp("生产者", "maufactor", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("model", "model", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("engine", "engine", Const.META_TYPE_STRING, false)); - builder.addColumnProp(new ExcelColumnProp("img", "img", Const.META_TYPE_STRING, false)); + builder.addColumnProp(new ExcelColumnProp("唯一键", "uuid", Const.CLASSTYPE.LONG, false)); + builder.addColumnProp(new ExcelColumnProp("企业id", "corpId", Const.CLASSTYPE.LONG, false)); + builder.addColumnProp(new ExcelColumnProp("车牌号", "carNum", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("车架号", "vin", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("品牌", "brand", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("修改时间", "modifier", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("颜色", "color", Const.CLASSTYPE.LONG, false)); + builder.addColumnProp(new ExcelColumnProp("生产者", "maufactor", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("model", "model", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("engine", "engine", Const.CLASSTYPE.STRING, false)); + builder.addColumnProp(new ExcelColumnProp("img", "img", Const.CLASSTYPE.STRING, false)); builder.setStreamMode(); builder.setStreamRows(3000); TableConfigProp header = new TableConfigProp(); @@ -441,7 +442,7 @@ public void doTestRead() { try (Workbook wb = new XSSFWorkbook(new FileInputStream("e:/1234.xlsx"))) { DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd"); ExcelProcessor.readExcel(wb, 0, 2, (w, r, ev) -> { - Object obj = ExcelProcessor.readValue(r.getCell(1), Const.META_TYPE_DOUBLE, format, ev); + Object obj = ExcelProcessor.readValue(r.getCell(1), Const.CLASSTYPE.DOUBLE, format, ev); System.out.println(obj); }); } catch (Exception ex) { @@ -467,10 +468,10 @@ public void doGenMergeHeader() { headList.add(firstCols); headList.add(secondCols); tableConfigProp.setHeaderColumnList(headList); - sheetProp.addColumnProp(new ExcelColumnProp("班级", "className", Const.META_TYPE_STRING)); - sheetProp.addColumnProp(new ExcelColumnProp("平级分", "avg", Const.META_TYPE_DOUBLE)); - sheetProp.addColumnProp(new ExcelColumnProp("名次", "rank", Const.META_TYPE_INTEGER)); - sheetProp.addColumnProp(new ExcelColumnProp("均分差", "minus", Const.META_TYPE_DOUBLE)); + sheetProp.addColumnProp(new ExcelColumnProp("班级", "className", Const.CLASSTYPE.STRING)); + sheetProp.addColumnProp(new ExcelColumnProp("平级分", "avg", Const.CLASSTYPE.DOUBLE)); + sheetProp.addColumnProp(new ExcelColumnProp("名次", "rank", Const.CLASSTYPE.INTEGER)); + sheetProp.addColumnProp(new ExcelColumnProp("均分差", "minus", Const.CLASSTYPE.DOUBLE)); List> rsList = new ArrayList<>(); Map tmap = new HashMap<>(); tmap.put("avg", 85.0); diff --git a/common/src/test/java/com/robin/comm/test/TestXMLReader.java b/common/src/test/java/com/robin/comm/test/TestXMLReader.java index e96a5006..66d5f4bf 100644 --- a/common/src/test/java/com/robin/comm/test/TestXMLReader.java +++ b/common/src/test/java/com/robin/comm/test/TestXMLReader.java @@ -11,7 +11,6 @@ import org.apache.avro.SchemaBuilder; import org.apache.avro.generic.GenericRecord; import org.junit.Test; -import org.springframework.core.io.support.SpringFactoriesLoader; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; @@ -24,10 +23,10 @@ public class TestXMLReader { public static void main(String[] args) { DataCollectionMeta colmeta = new DataCollectionMeta(); - colmeta.addColumnMeta("col1", Const.META_TYPE_BIGINT, null); - colmeta.addColumnMeta("col2", Const.META_TYPE_STRING, null); - colmeta.addColumnMeta("id", Const.META_TYPE_STRING, null); - colmeta.addColumnMeta("key", Const.META_TYPE_STRING, null); + colmeta.addColumnMeta("col1", Const.CLASSTYPE.LONG, null); + colmeta.addColumnMeta("col2", Const.CLASSTYPE.STRING, null); + colmeta.addColumnMeta("id", Const.CLASSTYPE.STRING, null); + colmeta.addColumnMeta("key", Const.CLASSTYPE.STRING, null); colmeta.setEncode("UTF-8"); colmeta.setPath("f:/test.xml"); colmeta.setFileFormat(Const.FILEFORMATSTR.XML.getValue()); diff --git a/core/pom.xml b/core/pom.xml index 81e70a88..21843407 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -123,13 +123,6 @@ true - - org.javassist - javassist - 3.23.2-GA - true - - junit junit @@ -287,6 +280,13 @@ ${spring.boot.version} true + + io.etcd + jetcd-core + 0.7.3 + true + + diff --git a/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java b/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java index 332950e2..570d4759 100644 --- a/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java +++ b/core/src/main/java/com/robin/core/base/annotation/MappingEntity.java @@ -28,7 +28,5 @@ String jdbcDao() default "jdbcDao"; //Does all field must declare explicit? boolean explicit() default false; - String logicColumn() default ""; - String validValue() default ""; - String invalidValue() default ""; + } diff --git a/core/src/main/java/com/robin/core/base/annotation/MappingField.java b/core/src/main/java/com/robin/core/base/annotation/MappingField.java index f0c209ae..9e5eb774 100644 --- a/core/src/main/java/com/robin/core/base/annotation/MappingField.java +++ b/core/src/main/java/com/robin/core/base/annotation/MappingField.java @@ -19,6 +19,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import java.sql.Types; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @@ -28,7 +29,7 @@ boolean increment() default false; String sequenceName() default ""; boolean required() default false; - String datatype() default ""; + int datatype() default Types.VARCHAR; int precise() default 0; int scale() default 0; int length() default 0; diff --git a/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java b/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java index 819bd84e..06967c22 100644 --- a/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java +++ b/core/src/main/java/com/robin/core/base/dao/CommJdbcUtil.java @@ -67,21 +67,21 @@ private static List getResultItemsByPrepared(@NonNull JdbcTemplate jdbcTemplate, for (int i = 1; i <= len; i++) { String columnType = pageQuery.getColumnTypes().get(String.valueOf(i - 1)); String value = pageQuery.getParameters().get(String.valueOf(i)); - switch (columnType) { - case Const.META_TYPE_INTEGER: + switch (Const.CLASSTYPE.forName(columnType)) { + case INTEGER: ps.setInt(i, Integer.parseInt(value)); break; - case Const.META_TYPE_DOUBLE: + case DOUBLE: ps.setDouble(i, Double.parseDouble(value)); break; - case Const.META_TYPE_BIGINT: + case LONG: ps.setLong(i, Long.parseLong(value)); break; - case Const.META_TYPE_DATE: + case DATE: Date date = new Date(LocalDateTime.parse(value, dayFormat).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); ps.setDate(i, date); break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: Timestamp ts = new Timestamp(LocalDateTime.parse(value, timeFormat).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); ps.setTimestamp(i, ts); break; @@ -317,38 +317,38 @@ public static Object getRecordValue(ResultSetMetaData rsmd, ResultSet rs, LobHan return retObj; } - static void setTargetValue(Object target, Object value, String columnName, String columnType, PageQuery> pageQuery) throws DAOException { + static void setTargetValue(Object target, Object value, String columnName, Const.CLASSTYPE columnType, PageQuery> pageQuery) throws DAOException { try { if (value != null) { Object targetValue = null; if (columnType == null) { targetValue = value; - } else if (columnType.equals(Const.META_TYPE_INTEGER)) { + } else if (columnType.equals(Const.CLASSTYPE.INTEGER)) { if (NumberUtils.isDigits(value.toString())) { targetValue = NumberUtils.createInteger(value.toString()); } else { throw new DAOException("Column " + columnName + " is not integer value"); } - } else if (columnType.equals(Const.META_TYPE_DOUBLE) || columnType.equals(Const.META_TYPE_NUMERIC)) { + } else if (columnType.equals(Const.CLASSTYPE.DOUBLE) || columnType.equals(Const.CLASSTYPE.NUMERIC)) { if (NumberUtils.isNumber(value.toString())) { targetValue = NumberUtils.createDouble(value.toString()); } else { throw new DAOException("Column " + columnName + " is not double value"); } - } else if (columnType.equals(Const.META_TYPE_BIGINT)) { + } else if (columnType.equals(Const.CLASSTYPE.LONG)) { if (NumberUtils.isDigits(value.toString())) { targetValue = NumberUtils.createLong(value.toString()); } else { throw new DAOException("Column " + columnName + " is not long value"); } - } else if (columnType.equals(Const.META_TYPE_DATE)) { + } else if (columnType.equals(Const.CLASSTYPE.DATE)) { if (Date.class.isAssignableFrom(value.getClass()) || java.util.Date.class.isAssignableFrom(value.getClass()) || LocalDateTime.class.isAssignableFrom(value.getClass())) { targetValue = value; } else { LocalDateTime ds=LocalDateTime.parse(value.toString(),DateTimeFormatHolder.getTimestampFormatter()); targetValue =new Timestamp(ds.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); } - } else if (columnType.equals(Const.META_TYPE_TIMESTAMP)) { + } else if (columnType.equals(Const.CLASSTYPE.TIMESTAMP)) { if (Timestamp.class.isAssignableFrom(value.getClass()) || LocalDateTime.class.isAssignableFrom(value.getClass())) { targetValue = value; } else { @@ -571,7 +571,7 @@ private static void setValueByMeta(PreparedStatement ps, Map val if (value == null) { value = valueMap.get(columnMeta.getColumnName().toLowerCase()); } - if (Const.META_TYPE_INTEGER.equals(columnMeta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(columnMeta.getColumnType())) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.INTEGER); } else { @@ -581,7 +581,7 @@ private static void setValueByMeta(PreparedStatement ps, Map val ps.setNull(pos + 1, Types.INTEGER); } } - } else if (Const.META_TYPE_BIGINT.equals(columnMeta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(columnMeta.getColumnType())) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.BIGINT); } else { @@ -591,7 +591,7 @@ private static void setValueByMeta(PreparedStatement ps, Map val ps.setNull(pos + 1, Types.BIGINT); } } - } else if (Const.META_TYPE_NUMERIC.equals(columnMeta.getColumnType()) || Const.META_TYPE_DOUBLE.equals(columnMeta.getColumnType())) { + } else if (Const.CLASSTYPE.NUMERIC.equals(columnMeta.getColumnType()) || Const.CLASSTYPE.DOUBLE.equals(columnMeta.getColumnType())) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.DOUBLE); } else { @@ -601,7 +601,7 @@ private static void setValueByMeta(PreparedStatement ps, Map val ps.setNull(pos + 1, Types.DOUBLE); } } - } else if (Const.META_TYPE_DATE.equals(columnMeta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(columnMeta.getColumnType())) { + } else if (Const.CLASSTYPE.DATE.equals(columnMeta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(columnMeta.getColumnType())) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.DATE); } else { @@ -613,7 +613,7 @@ private static void setValueByMeta(PreparedStatement ps, Map val ps.setDate(pos + 1, new Date(LocalDateTime.parse(value, timeFormat).toInstant(ZoneOffset.UTC).toEpochMilli())); } } - } else if (Const.META_TYPE_STRING.equals(columnMeta.getColumnType())) { + } else if (Const.CLASSTYPE.STRING.equals(columnMeta.getColumnType())) { if (value != null) { ps.setString(pos + 1, value); } else { @@ -640,31 +640,31 @@ private static void setValueByType(PreparedStatement ps, Map res if (value == null) { value = resultMap.get(typeMap.get("name").toLowerCase()); } - if (Const.META_TYPE_STRING.equals(typeMap.get("dataType"))) { + if (Const.CLASSTYPE.STRING.equals(typeMap.get("dataType"))) { if (value != null) { ps.setString(pos + 1, value); } else { ps.setNull(pos + 1, Types.VARCHAR); } - } else if (Const.META_TYPE_NUMERIC.equals(typeMap.get("dataType"))) { + } else if (Const.CLASSTYPE.NUMERIC.equals(typeMap.get("dataType"))) { if (value == null || "".equals(value)) { ps.setNull(pos + 1, Types.DOUBLE); } else { ps.setDouble(pos + 1, Double.parseDouble(value)); } - } else if (Const.META_TYPE_INTEGER.equals(typeMap.get("dataType"))) { + } else if (Const.CLASSTYPE.INTEGER.equals(typeMap.get("dataType"))) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.INTEGER); } else { ps.setInt(pos + 1, Integer.parseInt(value)); } - } else if (Const.META_TYPE_DOUBLE.equals(typeMap.get("dataType"))) { + } else if (Const.CLASSTYPE.DOUBLE.equals(typeMap.get("dataType"))) { if (StringUtils.isEmpty(value)) { ps.setNull(pos + 1, Types.DOUBLE); } else { ps.setDouble(pos + 1, Double.parseDouble(value)); } - } else if (Const.META_TYPE_DATE.equals(typeMap.get("dataType")) || Const.META_TYPE_TIMESTAMP.equals(typeMap.get("dataType"))) { + } else if (Const.CLASSTYPE.DATE.equals(typeMap.get("dataType")) || Const.CLASSTYPE.TIMESTAMP.equals(typeMap.get("dataType"))) { if (value == null || "".equals(value)) { ps.setNull(pos + 1, Types.DATE); diff --git a/core/src/main/java/com/robin/core/base/dao/JdbcDao.java b/core/src/main/java/com/robin/core/base/dao/JdbcDao.java index 433ba2f1..f30cd733 100644 --- a/core/src/main/java/com/robin/core/base/dao/JdbcDao.java +++ b/core/src/main/java/com/robin/core/base/dao/JdbcDao.java @@ -28,6 +28,7 @@ import com.robin.core.base.spring.SpringContextHolder; import com.robin.core.base.util.Const; import com.robin.core.base.util.LicenseUtils; +import com.robin.core.convert.util.ConvertUtil; import com.robin.core.fileaccess.meta.DataCollectionMeta; import com.robin.core.query.extractor.ResultSetOperationExtractor; import com.robin.core.query.extractor.SplitPageResultSetExtractor; @@ -358,7 +359,7 @@ public List queryByField(Class type, String fieldNa if (map1.containsKey(fieldName)) { List queryParam=Lists.newArrayList(fieldValues); JdbcHelper.generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); - appendLogicColumnCondition(tableDef,queryBuffer,queryParam); + appendLogicColumnCondition(fields,queryBuffer,queryParam); buffer.append(queryBuffer); rsList = queryBySql(buffer.toString(), queryParam.toArray()); JdbcHelper.wrapList(type, retlist, fields, rsList); @@ -416,7 +417,7 @@ public List queryByFieldOrderBy(Class type, String if (map1.containsKey(fieldName)) { List queryParam=Lists.newArrayList(fieldValues); JdbcHelper.generateQuerySqlBySingleFields(map1.get(fieldName), oper, queryBuffer, fieldValues.length); - appendLogicColumnCondition(tableDef,queryBuffer,queryParam); + appendLogicColumnCondition(fields,queryBuffer,queryParam); builder.append(queryBuffer); if (!ObjectUtils.isEmpty(orderByStr)) { builder.append(" order by ").append(orderByStr); @@ -733,12 +734,13 @@ public int deleteVO(Class claz AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(clazz); List fields = AnnotationRetriever.getMappingFieldsCache(clazz); FieldContent pkField=fields.stream().filter(FieldContent::isPrimary).findFirst().get(); - boolean isLogicDelete=tableDef.isContainLogicColumn() || logicDelete; + TableLogicConfig config=EntityMappingUtil.getLogicDeleteConfig(clazz,this); + StringBuilder buffer = new StringBuilder(); List ids = Lists.newArrayList(value); Map params = new HashMap<>(); params.put("ids",ids); - if(!isLogicDelete) { + if(config==null) { buffer.append("delete from "); if (tableDef.getSchema() != null && !tableDef.getSchema().isEmpty()) { buffer.append(sqlGen.getSchemaName(tableDef.getSchema())).append("."); @@ -750,18 +752,14 @@ public int deleteVO(Class claz if (tableDef.getSchema() != null && !tableDef.getSchema().isEmpty()) { buffer.append(sqlGen.getSchemaName(tableDef.getSchema())).append("."); } - String curLogicColumn=tableDef.isContainLogicColumn()?tableDef.getLogicColumn():logicColumn; - Integer curValidValue=tableDef.isContainLogicColumn()?tableDef.getValidValue():validValue; - Integer curInvalidValue=tableDef.isContainLogicColumn()?tableDef.getInvalidValue():invalidValue; - buffer.append(tableDef.getTableName()).append(" set "); - buffer.append(curLogicColumn); + buffer.append(config.getColumnName()); buffer.append("=:invalid ").append(Const.SQL_WHERE); buffer.append(pkField.getFieldName()).append(" in (:ids) and "); - buffer.append(curLogicColumn); + buffer.append(config.getColumnName()); buffer.append("=:valid "); - params.put("valid",curValidValue); - params.put("invalid",curInvalidValue); + params.put("valid",config.getValidValue()); + params.put("invalid",config.getInvalidValue()); } if (log.isDebugEnabled()) { log.debug("delete sql= {}", buffer); @@ -899,10 +897,11 @@ public void setLobHandler(LobHandler lobHandler) { this.lobHandler = lobHandler; } - private void appendLogicColumnCondition(AnnotationRetriever.EntityContent tableDef,StringBuilder queryBuffer, List queryParam){ - if(tableDef.isContainLogicColumn()){ - appendLogicColumn(queryBuffer,tableDef.getLogicColumn()); - queryParam.add(tableDef.getValidValue()); + private void appendLogicColumnCondition(List fieldContents,StringBuilder queryBuffer, List queryParam){ + Optional logicDeleteContent=fieldContents.stream().filter(f -> f.isIfLogicColumn()).findAny(); + if(logicDeleteContent.isPresent()){ + appendLogicColumn(queryBuffer,logicDeleteContent.get().getFieldName()); + queryParam.add(ConvertUtil.parseParameter(logicDeleteContent.get().getDataType(),logicDeleteContent.get().getValidValue())); }else if(logicDelete){ appendLogicColumn(queryBuffer,logicColumn); queryParam.add(validValue); diff --git a/core/src/main/java/com/robin/core/base/dao/LobCreatingPreparedStatementCallBack.java b/core/src/main/java/com/robin/core/base/dao/LobCreatingPreparedStatementCallBack.java index bb323ac6..796511ff 100644 --- a/core/src/main/java/com/robin/core/base/dao/LobCreatingPreparedStatementCallBack.java +++ b/core/src/main/java/com/robin/core/base/dao/LobCreatingPreparedStatementCallBack.java @@ -30,6 +30,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; +import java.sql.Types; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -90,10 +91,10 @@ protected void setValues(PreparedStatement ps, LobCreator lobCreator) } } - private void setValueByDataType(PreparedStatement ps, Object value, LobCreator lobCreator, String dataType, int pos) throws SQLException { - if ("clob".equalsIgnoreCase(dataType)) { + private void setValueByDataType(PreparedStatement ps, Object value, LobCreator lobCreator, Integer dataType, int pos) throws SQLException { + if (dataType== Types.CLOB) { lobCreator.setClobAsString(ps, pos, value.toString()); - } else if ("blob".equalsIgnoreCase(dataType)) { + } else if (dataType==Types.BLOB) { lobCreator.setBlobAsBytes(ps, pos, (byte[]) value); } else { setValue(ps, pos, value); diff --git a/core/src/main/java/com/robin/core/base/dao/SimpleJdbcDao.java b/core/src/main/java/com/robin/core/base/dao/SimpleJdbcDao.java index 94ce86e3..fe61cf05 100644 --- a/core/src/main/java/com/robin/core/base/dao/SimpleJdbcDao.java +++ b/core/src/main/java/com/robin/core/base/dao/SimpleJdbcDao.java @@ -635,12 +635,12 @@ public boolean dumpBySql(final String sql, String tableName, final String split, try { while (rs.next()) { for (int i = 0; i < columncount; i++) { - String type = DataBaseUtil.translateDbType(meta.getColumnType(i + 1)); + Const.CLASSTYPE type = DataBaseUtil.translateDbType(meta.getColumnType(i + 1)); if (rs.wasNull()) { resultList.add(""); continue; } - if (!type.equals(Const.META_TYPE_DATE)) { + if (!type.equals(Const.CLASSTYPE.DATE)) { resultList.add(rs.getString(i + 1)); } else { resultList.add(dateformat.format(rs.getTimestamp(i + 1))); @@ -680,7 +680,7 @@ public boolean importByFile(String columns, String tableName, String split, Stri } else { insertSqlbuilder.append(" values ("); } - final List columnTypes = new ArrayList<>(); + final List columnTypes = new ArrayList<>(); int columnCount = qRunner.query(conn, querySql, rs -> { ResultSetMetaData meta = rs.getMetaData(); int columncount = meta.getColumnCount(); @@ -713,13 +713,13 @@ public boolean importByFile(String columns, String tableName, String split, Stri obj1[i] = null; continue; } - if (columnTypes.get(i).equalsIgnoreCase(Const.META_TYPE_BIGINT)) { + if (columnTypes.get(i).equals(Const.CLASSTYPE.LONG)) { obj1[i] = Long.valueOf(arr[i]); - } else if (columnTypes.get(i).equalsIgnoreCase(Const.META_TYPE_INTEGER)) { + } else if (columnTypes.get(i).equals(Const.CLASSTYPE.INTEGER)) { obj1[i] = Integer.valueOf(arr[i]); - } else if (columnTypes.get(i).equalsIgnoreCase(Const.META_TYPE_DOUBLE) || columnTypes.get(i).equalsIgnoreCase(Const.META_TYPE_NUMERIC)) { + } else if (columnTypes.get(i).equals(Const.CLASSTYPE.DOUBLE) || columnTypes.get(i).equals(Const.CLASSTYPE.NUMERIC)) { obj1[i] = Double.valueOf(arr[i]); - } else if (columnTypes.get(i).equals(Const.META_TYPE_DATE)) { + } else if (columnTypes.get(i).equals(Const.CLASSTYPE.DATE)) { obj1[i] = dateformat.parse(arr[i]); } else { obj1[i] = arr[i]; @@ -764,20 +764,20 @@ public static void transformDateType(Map resultMap, Map optional= Optional.ofNullable(value); objArr[row][pos] =optional.isPresent()?new Date(DateUtils.parseDate(optional.get(), dateFormat, dayFormat).getTime()):null; break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: Optional optional1= Optional.ofNullable(value); objArr[row][pos] =optional1.isPresent()?new Timestamp(DateUtils.parseDate(optional1.get(), dayFormat, dayFormat).getTime()):null; break; diff --git a/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java b/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java index 6b09c52d..3f0be508 100644 --- a/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java +++ b/core/src/main/java/com/robin/core/base/dao/util/AnnotationRetriever.java @@ -16,6 +16,7 @@ package com.robin.core.base.dao.util; import com.baomidou.mybatisplus.annotation.*; +import com.robin.core.base.annotation.LogicColumn; import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.annotation.MappingField; import com.robin.core.base.exception.ConfigurationIncorrectException; @@ -103,11 +104,18 @@ private static List getMappingFields(Class c for (int i = 0; i < fields.size(); i++) { Field field = fields.get(i); MappingField mapfield = field.getAnnotation(MappingField.class); + FieldContent content=null; if (isFieldValid(entity, mapfield, field)) { - FieldContent content = retrieveField(field, fieldClasses.get(i)); - if (content != null) { - list.add(content); - } + content = retrieveField(field, fieldClasses.get(i)); + } + LogicColumn logicColumn=field.getAnnotation(LogicColumn.class); + if(logicColumn!=null && !Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers())){ + content.setIfLogicColumn(true); + content.setValidValue(logicColumn.value()); + content.setInvalidValue(logicColumn.delval()); + } + if (!Objects.isNull(content)) { + list.add(content); } } } else { @@ -129,13 +137,20 @@ private static List getMappingFields(Class c flag = clazz.isAnnotationPresent(TableName.class); if (flag) { Field[] fields = clazz.getDeclaredFields(); + FieldContent content=null; for (Field field : fields) { TableField mapfield = field.getAnnotation(TableField.class); if ((!Objects.isNull(mapfield) && mapfield.exist()) || (!Modifier.isStatic(field.getModifiers()) && !Modifier.isFinal(field.getModifiers()))) { - FieldContent content = retrieveFieldByMyBatis(field, clazz); - if (!Objects.isNull(content)) { - list.add(content); - } + content = retrieveFieldByMyBatis(field, clazz); + } + TableLogic logicField=field.getAnnotation(TableLogic.class); + if(Objects.isNull(logicField)){ + content.setIfLogicColumn(true); + content.setValidValue(logicField.value()); + content.setInvalidValue(logicField.delval()); + } + if (!Objects.isNull(content)) { + list.add(content); } } } @@ -212,17 +227,6 @@ private static EntityContent getMappingTableEntity(Cla if (!ObjectUtils.isEmpty(jdbcDao)) { content.setJdbcDao(jdbcDao); } - - if(!ObjectUtils.isEmpty(entity.logicColumn())){ - content.setLogicColumn(entity.logicColumn()); - content.setContainLogicColumn(true); - } - if(!ObjectUtils.isEmpty(entity.validValue())){ - content.setValidValue(Integer.parseInt(entity.validValue())); - } - if(!ObjectUtils.isEmpty(entity.invalidValue())){ - content.setInvalidValue(Integer.parseInt(entity.invalidValue())); - } } else { flag = clazz.isAnnotationPresent(Entity.class); if (flag) { @@ -438,7 +442,7 @@ private static FieldContent retrieveField(Field field, Class Class getFieldOwnedClass(PropertyFunctio return aClass; } - public static String getFieldType(PropertyFunction field) { + public static Const.CLASSTYPE getFieldType(PropertyFunction field) { Class clazz = field.getClass(); String name = clazz.getName(); SerializedLambda lambda = Optional.ofNullable(functionMap.get(name)).map(Reference::get).orElseGet(() -> getLambdaSerialized(field)); String retClass = lambda.getImplMethodSignature(); - String retType = Const.META_TYPE_STRING; + Const.CLASSTYPE retType = Const.CLASSTYPE.STRING; if ("()Ljava/lang/Long;".equals(retClass)) { - retType = Const.META_TYPE_BIGINT; + retType = Const.CLASSTYPE.LONG; } else if ("()Ljava/lang/Double;".equals(retClass) || "()Ljava/lang/BigDecimal;".equals(retClass)) { - retType = Const.META_TYPE_DOUBLE; + retType = Const.CLASSTYPE.DOUBLE; } else if ("()Ljava/lang/Integer;".equals(retClass)) { - retType = Const.META_TYPE_INTEGER; + retType = Const.CLASSTYPE.INTEGER; } else if ("()Ljava/lang/Short;".equals(retClass)) { - retType = Const.META_TYPE_SHORT; + retType = Const.CLASSTYPE.SHORT; } else if ("()Ljava/lang/byte;".equals(retClass)) { - retType = Const.META_TYPE_BLOB; + retType = Const.CLASSTYPE.BLOB; } else if ("()Ljava/sql/Date;".equals(retClass) || "()Ljava/util/Date;".equals(retClass) || "()Ljava/time/LocalDate;".equals(retClass)) { - retType = Const.META_TYPE_DATE; + retType = Const.CLASSTYPE.DATE; } else if ("()Ljava/sql/Timestamp;".equals(retClass) || "()Ljava/time/LocalDateTime;".equals(retClass)) { - retType = Const.META_TYPE_TIMESTAMP; + retType = Const.CLASSTYPE.TIMESTAMP; } return retType; } - public static String getFieldType(FieldContent content){ + public static Const.CLASSTYPE getFieldType(FieldContent content){ Class clazz=content.getField().getType(); - String retType = Const.META_TYPE_STRING; + Const.CLASSTYPE retType = Const.CLASSTYPE.STRING; if(Long.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_BIGINT; + retType= Const.CLASSTYPE.LONG; }else if(Double.class.isAssignableFrom(clazz) || Float.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_DOUBLE; + retType= Const.CLASSTYPE.DOUBLE; }else if(Integer.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_INTEGER; + retType= Const.CLASSTYPE.INTEGER; }else if(Short.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_SHORT; + retType= Const.CLASSTYPE.SHORT; }else if(byte[].class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_BLOB; + retType= Const.CLASSTYPE.BLOB; }else if(Date.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_DATE; + retType= Const.CLASSTYPE.DATE; }else if(java.util.Date.class.isAssignableFrom(clazz) && Timestamp.class.isAssignableFrom(clazz)){ - retType=Const.META_TYPE_TIMESTAMP; + retType= Const.CLASSTYPE.TIMESTAMP; } return retType; } @@ -670,10 +674,10 @@ private static void wrapValue(PreparedStatement ps, LobHandler lobHandler, Field setParameter(ps, pos, value); return; } - String datatype = field.getDataType(); - if (datatype.equalsIgnoreCase(Const.META_TYPE_CLOB)) { + int datatype = field.getDataType(); + if (datatype==Types.CLOB) { lobHandler.getLobCreator().setClobAsString(ps, pos, value.toString()); - } else if (datatype.equalsIgnoreCase(Const.META_TYPE_BLOB)) { + } else if (datatype==Types.BLOB) { lobHandler.getLobCreator().setBlobAsBytes(ps, pos, (byte[]) value); } else { setParameter(ps, pos, value); @@ -707,15 +711,11 @@ public static void setParameter(PreparedStatement stmt, int pos, Object obj) { } } - private static void parseType(FieldContent content, Type type, String datatype) { - if (StringUtils.isEmpty(datatype)) { + private static void parseType(FieldContent content, Type type, int datatype) { + if (datatype==-1000) { adjustByType(content, type); } else { - if ("clob".equalsIgnoreCase(datatype)) { - content.setDataType(Const.META_TYPE_CLOB); - } else if ("blob".equalsIgnoreCase(datatype)) { - content.setDataType(Const.META_TYPE_BLOB); - } + content.setDataType(datatype); } } @@ -726,29 +726,29 @@ private static boolean isFieldValid(MappingEntity entity, MappingField mapfield, private static void adjustByType(FieldContent content, Type type) { if (type.equals(Void.class)) { - content.setDataType(Const.META_TYPE_INTEGER); + content.setDataType(Types.INTEGER); } else if (type.equals(Long.class)) { - content.setDataType(Const.META_TYPE_BIGINT); + content.setDataType(Types.BIGINT); } else if (type.equals(Integer.class)) { - content.setDataType(Const.META_TYPE_INTEGER); + content.setDataType(Types.INTEGER); } else if (type.equals(Double.class)) { - content.setDataType(Const.META_TYPE_NUMERIC); + content.setDataType(Types.DOUBLE); } else if (type.equals(Float.class)) { - content.setDataType(Const.META_TYPE_NUMERIC); + content.setDataType(Types.FLOAT); } else if (type.equals(String.class)) { - content.setDataType(Const.META_TYPE_STRING); + content.setDataType(Types.VARCHAR); } else if (type.equals(java.util.Date.class)) { - content.setDataType(Const.META_TYPE_TIMESTAMP); + content.setDataType(Types.TIMESTAMP); } else if (type.equals(Date.class)) { - content.setDataType(Const.META_TYPE_DATE); + content.setDataType(Types.DATE); } else if (type.equals(byte[].class)) { - content.setDataType(Const.META_TYPE_BLOB); + content.setDataType(Types.BLOB); } else if (type.equals(Timestamp.class)) { - content.setDataType(Const.META_TYPE_TIMESTAMP); + content.setDataType(Types.TIMESTAMP); } else if (type.equals(Short.class)) { - content.setDataType(Const.META_TYPE_SHORT); + content.setDataType(Types.SMALLINT); } else { - content.setDataType(Const.META_TYPE_OBJECT); + content.setDataType(Types.JAVA_OBJECT); } } @@ -761,9 +761,7 @@ public static class EntityContent { private String jdbcDao; private Class clazz; private boolean containLogicColumn =false; - private String logicColumn; - private Integer validValue =Const.VALID_INT; - private Integer invalidValue =Const.INVALID_INT; + public EntityContent(String tableName) { this.tableName = tableName; diff --git a/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java b/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java index 3a01e3a8..2317e2f9 100644 --- a/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java +++ b/core/src/main/java/com/robin/core/base/dao/util/EntityMappingUtil.java @@ -9,6 +9,7 @@ import com.robin.core.base.spring.SpringContextHolder; import com.robin.core.base.util.Const; import com.robin.core.base.util.IUserUtils; +import com.robin.core.convert.util.ConvertUtil; import com.robin.core.sql.util.BaseSqlGen; import com.robin.core.sql.util.FilterCondition; import lombok.Data; @@ -63,7 +64,7 @@ public static InsertSegment getInsertSegment(BaseObject obj, BaseSqlGen sqlGen, } DataBaseColumnMeta columnMeta=Optional.ofNullable(columnMetaMap.get(content.getFieldName().toLowerCase())).orElse(columnMetaMap.get(content.getFieldName().toUpperCase())); - if (content.getDataType().equals(Const.META_TYPE_BLOB) || content.getDataType().equals(Const.META_TYPE_CLOB)) { + if (content.getDataType().equals(Types.CLOB) || content.getDataType().equals(Types.BLOB)) { insertSegment.setContainlob(true); } if (!content.isIncrement() && !content.isSequential()) { @@ -104,6 +105,15 @@ public static InsertSegment getInsertSegment(BaseObject obj, BaseSqlGen sqlGen, paramTypes.add(new SqlParameter(columnMeta.getDataType())); } } + }else { + TableLogicConfig config=getLogicDeleteConfig(obj.getClass(),jdbcDao); + if(config!=null && config.getColumnName().equals(content.getFieldName())){ + fieldBuffer.append(content.getFieldName()).append(","); + valueBuffer.append("?,"); + params.add(ConvertUtil.parseParameter(content.getDataType(),config.getValidValue())); + paramTypes.add(new SqlParameter(columnMeta.getDataType())); + } + } } else { insertSegment.setHasPrimaryKey(true); @@ -314,12 +324,10 @@ public static UpdateSegment getUpdateSegmentByKey(BaseObject obj, BaseSqlGen sql } } } - if(tableDef.isContainLogicColumn()){ - wherebuffer.append(tableDef.getLogicColumn()).append("=? and "); - whereObjects.add(tableDef.getValidValue()); - }else if(jdbcDao.isContainLogicColumn()){ - wherebuffer.append(jdbcDao.getLogicColumn()).append("=? and "); - whereObjects.add(jdbcDao.getValidValue()); + TableLogicConfig config=EntityMappingUtil.getLogicDeleteConfig(obj.getClass(),jdbcDao); + if(config!=null) { + wherebuffer.append(config.getColumnName()).append("=? and "); + whereObjects.add(config.getValidValue()); } objList.addAll(whereObjects); updateSegment.setFieldStr(fieldBuffer.substring(0, fieldBuffer.length() - 1)); @@ -364,12 +372,10 @@ public static SelectSegment getSelectPkSegment(Class c sqlbuffer.append(field.getFieldName()).append(Const.SQL_AS).append(field.getPropertyName()).append(","); } } - if(tableDef.isContainLogicColumn()){ - wherebuffer.append(tableDef.getLogicColumn()).append("=? and "); - selectObjs.add(tableDef.getValidValue()); - }else if(jdbcDao.isContainLogicColumn()){ - wherebuffer.append(jdbcDao.getLogicColumn()).append("=? and "); - selectObjs.add(jdbcDao.getValidValue()); + TableLogicConfig config=getLogicDeleteConfig(clazz,jdbcDao); + if(config!=null){ + wherebuffer.append(config.getColumnName()).append("=? and "); + selectObjs.add(config.getValidValue()); } sqlbuffer.deleteCharAt(sqlbuffer.length() - 1).append(Const.SQL_FROM); appendSchemaAndTable(tableDef, sqlbuffer, sqlGen); @@ -379,10 +385,26 @@ public static SelectSegment getSelectPkSegment(Class c segment.setValues(selectObjs); return segment; } + public static TableLogicConfig getLogicDeleteConfig(Class type,JdbcDao dao){ + List fields=AnnotationRetriever.getMappingFieldsCache(type); + Optional optional=fields.stream().filter(f ->f.isIfLogicColumn()).findAny(); + TableLogicConfig config=null; + if(optional.isPresent()){ + config=new TableLogicConfig(); + config.setColumnName(optional.get().getFieldName()); + config.setValidValue(optional.get().getValidValue()); + config.setInvalidValue(optional.get().getInvalidValue()); + }else if(dao.isContainLogicColumn()) { + config=new TableLogicConfig(); + config.setColumnName(dao.getLogicColumn()); + config.setValidValue(dao.getValidValue().toString()); + config.setInvalidValue(dao.getInvalidValue().toString()); + } + return config; + } public static SelectSegment getSelectByVOSegment(Class type, BaseObject vo, String orderByStr, String wholeSelectSql,JdbcDao jdbcDao) throws Throwable { AnnotationRetriever.isBaseObjectClassValid(type); - AnnotationRetriever.EntityContent tableDef = AnnotationRetriever.getMappingTableByCache(type); List params = new ArrayList<>(); StringBuilder builder = new StringBuilder(); builder.append(wholeSelectSql).append(Const.SQL_WHERE); @@ -396,12 +418,10 @@ public static SelectSegment getSelectByVOSegment(Class builder.append(" and "); } } - if(tableDef.isContainLogicColumn()){ - builder.append(tableDef.getLogicColumn()).append("=? and "); - params.add(tableDef.getValidValue()); - }else if(jdbcDao.isContainLogicColumn()){ - builder.append(jdbcDao.getLogicColumn()).append("=? and "); - params.add(jdbcDao.getValidValue()); + TableLogicConfig config=getLogicDeleteConfig(type,jdbcDao); + if(config!=null){ + builder.append(config.getColumnName()).append("=? and "); + params.add(config.getValidValue()); } String sql = builder.substring(0, builder.length() - 5); if (orderByStr != null && !orderByStr.isEmpty()) { diff --git a/core/src/main/java/com/robin/core/base/dao/util/FieldContent.java b/core/src/main/java/com/robin/core/base/dao/util/FieldContent.java index 4c612fab..2a066c97 100644 --- a/core/src/main/java/com/robin/core/base/dao/util/FieldContent.java +++ b/core/src/main/java/com/robin/core/base/dao/util/FieldContent.java @@ -1,20 +1,19 @@ package com.robin.core.base.dao.util; -import cn.hutool.core.util.ObjectUtil; + import com.robin.core.base.annotation.MappingField; import lombok.Data; import org.springframework.util.ObjectUtils; import java.lang.invoke.MethodHandle; import java.lang.reflect.Field; -import java.lang.reflect.Method; import java.util.List; @Data public class FieldContent { private String propertyName; private String fieldName; - private String dataType; + private Integer dataType; private String sequenceName; private boolean required; private boolean increment; @@ -29,6 +28,10 @@ public class FieldContent { private int length; private String defaultValue; private Object value; + private boolean ifLogicColumn; + private String validValue; + private String invalidValue; + //composite primary keys private List primaryKeys; @@ -66,7 +69,7 @@ public Builder setField(Field field){ content.setField(field); return this; } - public Builder setDataType(String dataType){ + public Builder setDataType(Integer dataType){ content.setDataType(dataType); return this; } @@ -109,7 +112,7 @@ public Builder setDefaultValue(String value){ public Builder withMappingField(MappingField mapfield){ String fieldName=null; - if(!ObjectUtil.isEmpty(mapfield)) { + if(!ObjectUtils.isEmpty(mapfield)) { String colfield = mapfield.value(); if (!ObjectUtils.isEmpty(colfield)) { fieldName = colfield; diff --git a/core/src/main/java/com/robin/core/base/datameta/DataBaseColumnMeta.java b/core/src/main/java/com/robin/core/base/datameta/DataBaseColumnMeta.java index 13e86f75..a00f8fb7 100644 --- a/core/src/main/java/com/robin/core/base/datameta/DataBaseColumnMeta.java +++ b/core/src/main/java/com/robin/core/base/datameta/DataBaseColumnMeta.java @@ -15,6 +15,7 @@ */ package com.robin.core.base.datameta; +import com.robin.core.base.util.Const; import lombok.Data; import java.io.Serializable; @@ -22,7 +23,7 @@ @Data public class DataBaseColumnMeta implements Serializable { private String columnName; - private String columnType; + private Const.CLASSTYPE columnType; private Integer dataType; private String typeName; private Integer columnLength; @@ -41,16 +42,17 @@ public class DataBaseColumnMeta implements Serializable { private DataBaseColumnMeta() { } - public DataBaseColumnMeta(String columnName,String columnType) { + + public DataBaseColumnMeta(String columnName, Const.CLASSTYPE columnType) { this.columnName=columnName; this.columnType=columnType; } - public DataBaseColumnMeta(String columnName,String columnType,Integer length) { - this.columnName=columnName; - this.columnType=columnType; + + public DataBaseColumnMeta(String columnName, Const.CLASSTYPE columnType, Integer length) { + this(columnName,columnType); if(length!=null) { - this.columnLength=length; - } + this.columnLength=length; + } } public static class Builder{ private DataBaseColumnMeta meta=new DataBaseColumnMeta(); @@ -62,6 +64,10 @@ public Builder columnName(String columnName){ return this; } public Builder columnType(String columnType){ + meta.setColumnType(Const.CLASSTYPE.forName(columnType)); + return this; + } + public Builder columnType(Const.CLASSTYPE columnType){ meta.setColumnType(columnType); return this; } diff --git a/core/src/main/java/com/robin/core/base/datameta/DataBaseParam.java b/core/src/main/java/com/robin/core/base/datameta/DataBaseParam.java index 38070b24..1d8fe9f9 100644 --- a/core/src/main/java/com/robin/core/base/datameta/DataBaseParam.java +++ b/core/src/main/java/com/robin/core/base/datameta/DataBaseParam.java @@ -96,7 +96,7 @@ public DataBaseParam(String url,String userName,String passwd){ this.passwd=passwd; this.userName=userName; } - private DataBaseParam(){ + public DataBaseParam(){ } @Override diff --git a/core/src/main/java/com/robin/core/base/datameta/DataBaseUtil.java b/core/src/main/java/com/robin/core/base/datameta/DataBaseUtil.java index 3bfa2ca5..4a47e088 100644 --- a/core/src/main/java/com/robin/core/base/datameta/DataBaseUtil.java +++ b/core/src/main/java/com/robin/core/base/datameta/DataBaseUtil.java @@ -131,7 +131,7 @@ public List getTableMetaByTableName(String tablename, String List pklist = this.getAllPrimaryKeyByTableName(tablename, dbOrtablespacename); while (rs.next()) { String columnname = rs.getString("COLUMN_NAME"); - String columnType = translateDbType(rs.getInt("DATA_TYPE")); + Const.CLASSTYPE columnType = translateDbType(rs.getInt("DATA_TYPE")); int datalength = !ObjectUtils.isEmpty(rs.getString("COLUMN_SIZE"))?Integer.parseInt(rs.getString("COLUMN_SIZE")):0; boolean nullable = rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls; String comment = rs.getString("REMARKS"); @@ -157,7 +157,7 @@ public List getTableMetaByTableName(String tablename, String } } - private static void setType(String columnname, String columnType, Integer datatype, String typeName, int datalength, boolean nullable, String comment, int precise, int scale, DataBaseColumnMeta.Builder builder) { + private static void setType(String columnname, Const.CLASSTYPE columnType, Integer datatype, String typeName, int datalength, boolean nullable, String comment, int precise, int scale, DataBaseColumnMeta.Builder builder) { builder.columnName(columnname); builder.columnType(columnType); builder.dataType(datatype); @@ -208,7 +208,7 @@ public static List getTableMetaByTableName(Connection conn, } while (rs.next()) { String columnname = rs.getString("COLUMN_NAME"); - String columnType = translateDbType(rs.getInt("DATA_TYPE")); + Const.CLASSTYPE columnType = translateDbType(rs.getInt("DATA_TYPE")); int datalength = !ObjectUtils.isEmpty(rs.getString("COLUMN_SIZE"))?Integer.parseInt(rs.getString("COLUMN_SIZE")):0; boolean nullable = rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls; String comment = ""; @@ -305,47 +305,47 @@ public static List getQueryMeta(Connection conn, String sql) } } - public static String translateDbType(Integer type) { - String retStr; + public static Const.CLASSTYPE translateDbType(Integer type) { + Const.CLASSTYPE retStr; if (type == Types.INTEGER || type == Types.TINYINT) { - retStr = Const.META_TYPE_INTEGER; + retStr = Const.CLASSTYPE.INTEGER; } else if (type == Types.BIGINT) { - retStr = Const.META_TYPE_BIGINT; + retStr = Const.CLASSTYPE.LONG; } else if (type == Types.NUMERIC) { - retStr = Const.META_TYPE_NUMERIC; + retStr = Const.CLASSTYPE.NUMERIC; } else if (type == Types.FLOAT) { - retStr = Const.META_TYPE_FLOAT; + retStr = Const.CLASSTYPE.FLOAT; } else if (type == Types.DECIMAL) { - retStr = Const.META_TYPE_DECIMAL; + retStr = Const.CLASSTYPE.DECIMAL; } else if (type == Types.DOUBLE) { - retStr = Const.META_TYPE_DOUBLE; + retStr = Const.CLASSTYPE.DOUBLE; } else if (type == Types.DATE) { - retStr = Const.META_TYPE_DATE; + retStr = Const.CLASSTYPE.DATE; } else if (type == Types.TIME || type == Types.TIMESTAMP) { - retStr = Const.META_TYPE_TIMESTAMP; + retStr = Const.CLASSTYPE.TIMESTAMP; } else if (type == Types.BOOLEAN) { - retStr = Const.META_TYPE_BOOLEAN; + retStr = Const.CLASSTYPE.BOOLEAN; } else if (type == Types.BLOB || type == Types.BINARY || type == Types.BIT) { - retStr = Const.META_TYPE_BINARY; + retStr = Const.CLASSTYPE.BLOB; } else { - retStr = Const.META_TYPE_STRING; + retStr = Const.CLASSTYPE.STRING; } return retStr; } public static Map transformDbTypeByObj(Object obj) { Map retMap = new HashMap<>(); - String type = null; + Const.CLASSTYPE type = null; DateTimeFormatter targetFormat = null; if (obj instanceof Long) { - type = Const.META_TYPE_BIGINT; + type = Const.CLASSTYPE.LONG; } else if (obj instanceof Integer) { - type = Const.META_TYPE_INTEGER; + type = Const.CLASSTYPE.INTEGER; } else if (obj instanceof Double || obj instanceof Float) { - type = Const.META_TYPE_DOUBLE; + type = Const.CLASSTYPE.DOUBLE; } else if (obj instanceof Date || obj instanceof Timestamp) { - type = Const.META_TYPE_TIMESTAMP; + type = Const.CLASSTYPE.TIMESTAMP; } else if (obj instanceof String) { if (isStringValueDate(obj.toString(), format)) { targetFormat = format; @@ -357,9 +357,9 @@ public static Map transformDbTypeByObj(Object obj) { targetFormat = format3; } if (targetFormat != null) { - type = Const.META_TYPE_TIMESTAMP; + type = Const.CLASSTYPE.TIMESTAMP; } else { - type = Const.META_TYPE_STRING; + type = Const.CLASSTYPE.STRING; } } retMap.put("type", type); @@ -377,21 +377,21 @@ private static boolean isStringValueDate(String value, DateTimeFormatter format) return false; } - public static Object translateValueByDBType(String value, String type) throws ParseException { + public static Object translateValueByDBType(String value, Const.CLASSTYPE type) throws ParseException { Object retObj; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); switch (type) { - case Const.META_TYPE_INTEGER: + case INTEGER: retObj = Integer.valueOf(value); break; - case Const.META_TYPE_BIGINT: + case LONG: retObj = Long.valueOf(value); break; - case Const.META_TYPE_NUMERIC: - case Const.META_TYPE_DOUBLE: + case NUMERIC: + case DOUBLE: retObj = Double.valueOf(value); break; - case Const.META_TYPE_DATE: + case DATE: retObj = format.parse(value); break; default: @@ -401,20 +401,20 @@ public static Object translateValueByDBType(String value, String type) throws Pa return retObj; } - public static boolean isValueValid(Object value, String type) { + public static boolean isValueValid(Object value, Const.CLASSTYPE type) { boolean validtag = false; if (value != null) { switch (type) { - case Const.META_TYPE_INTEGER: - case Const.META_TYPE_BIGINT: - case Const.META_TYPE_NUMERIC: - case Const.META_TYPE_DOUBLE: + case INTEGER: + case LONG: + case NUMERIC: + case DOUBLE: if (NumberUtils.isNumber(value.toString())) { validtag = true; } break; - case Const.META_TYPE_DATE: - case Const.META_TYPE_TIMESTAMP: + case DATE: + case TIMESTAMP: if (Date.class.isAssignableFrom(value.getClass()) || java.sql.Date.class.isAssignableFrom(value.getClass()) || Timestamp.class.isAssignableFrom(value.getClass()) || Long.class.isAssignableFrom(value.getClass())) { validtag = true; } @@ -426,14 +426,14 @@ public static boolean isValueValid(Object value, String type) { return validtag; } - public static String toStringByDBType(Object value, String type, DateTimeFormatter formatter) { + public static String toStringByDBType(Object value, Const.CLASSTYPE type, DateTimeFormatter formatter) { String retObj = null; if (value != null) { - if (type.equals(Const.META_TYPE_INTEGER) || type.equals(Const.META_TYPE_BIGINT) || type.equals(Const.META_TYPE_NUMERIC) || type.equals(Const.META_TYPE_DOUBLE)) { + if (type.equals(Const.CLASSTYPE.INTEGER) || type.equals(Const.CLASSTYPE.LONG) || type.equals(Const.CLASSTYPE.NUMERIC) || type.equals(Const.CLASSTYPE.DOUBLE)) { if (NumberUtils.isNumber(value.toString())) { retObj = value.toString(); } - } else if (type.equals(Const.META_TYPE_DATE) || type.equals(Const.META_TYPE_TIMESTAMP)) { + } else if (type.equals(Const.CLASSTYPE.DATE) || type.equals(Const.CLASSTYPE.TIMESTAMP)) { long millsecod ; if (value instanceof java.util.Date) { millsecod = ((java.util.Date) value).getTime(); diff --git a/core/src/main/java/com/robin/core/base/reflect/ClassGraphReflector.java b/core/src/main/java/com/robin/core/base/reflect/ClassGraphReflector.java index 03e7ce2e..73735158 100644 --- a/core/src/main/java/com/robin/core/base/reflect/ClassGraphReflector.java +++ b/core/src/main/java/com/robin/core/base/reflect/ClassGraphReflector.java @@ -16,6 +16,9 @@ public class ClassGraphReflector implements InitializingBean { private ScanResult scanResult; //default Scan package private String scanPackage="com.robin"; + public ClassGraphReflector(){ + + } @Override @@ -70,6 +73,8 @@ public boolean isAnnotationClassWithAnnotationFields(Class clazz, Class baseClass){ + return scanResult.getSubclasses(baseClass.getCanonicalName()).directOnly(); + } } diff --git a/core/src/main/java/com/robin/core/base/util/Const.java b/core/src/main/java/com/robin/core/base/util/Const.java index a1ac45e2..167e767e 100644 --- a/core/src/main/java/com/robin/core/base/util/Const.java +++ b/core/src/main/java/com/robin/core/base/util/Const.java @@ -18,6 +18,7 @@ import com.google.common.collect.Lists; +import java.sql.Types; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; @@ -47,23 +48,7 @@ public class Const { public static final int FIELD_TYPE_DATE = 4; public static final int FIELD_TYPE_BOOLEAN = 5; - //datameta type - public static final String META_TYPE_STRING = "1"; - public static final String META_TYPE_DATE = "2"; - public static final String META_TYPE_NUMERIC = "3"; - public static final String META_TYPE_INTEGER = "4"; - public static final String META_TYPE_BIGINT = "5"; - public static final String META_TYPE_DOUBLE = "6"; - public static final String META_TYPE_BOOLEAN = "7"; - public static final String META_TYPE_BINARY = "8"; - public static final String META_TYPE_TIMESTAMP = "9"; - public static final String META_TYPE_CLOB = "10"; - public static final String META_TYPE_BLOB = "11"; - public static final String META_TYPE_OBJECT = "12"; - public static final String META_TYPE_SHORT = "13"; - public static final String META_TYPE_FORMULA = "14"; - public static final String META_TYPE_FLOAT = "15"; - public static final String META_TYPE_DECIMAL = "16"; + //filter type public static final String FILTER_OPER_BETWEEN = "BT"; public static final String FILTER_OPER_LIKE = "LK"; @@ -119,6 +104,77 @@ public String toString() { return String.valueOf(this.value); } } + public enum CLASSTYPE { + SHORT("SHORT"), + LONG("LONG"), + INTEGER("INTEGER"), + FLOAT("FLOAT"), + DOUBLE("DOUBLE"), + DATE("DATE"), + TIMESTAMP("TIMESTAMP"), + BOOLEAN("BOOLEAN"), + DECIMAL("DECIMAL"), + NUMERIC("NUMERIC"), + STRING("STRING"), + CLOB("CLOB"), + BLOB("BLOB"), + CHAR("CHAR"), + FORMULA("FORMULA"); + private String value; + CLASSTYPE(String value){ + this.value=value; + } + + public String getValue() { + return value; + } + public static CLASSTYPE forName(String name){ + for(CLASSTYPE s: CLASSTYPE.values()){ + if(s.getValue().equalsIgnoreCase(name)){ + return s; + } + } + return null; + } + } + public static CLASSTYPE getByDataType(Integer dataType){ + CLASSTYPE retType= CLASSTYPE.STRING; + switch (dataType){ + case Types.BIGINT: + retType= CLASSTYPE.LONG; + break; + case Types.SMALLINT: + retType= CLASSTYPE.SHORT; + break; + case Types.INTEGER: + retType= CLASSTYPE.INTEGER; + break; + case Types.FLOAT: + retType= CLASSTYPE.FLOAT; + break; + case Types.DOUBLE: + case Types.NUMERIC: + case Types.DECIMAL: + retType= CLASSTYPE.DOUBLE; + break; + case Types.DATE: + retType= CLASSTYPE.DATE; + break; + case Types.TIMESTAMP: + retType= CLASSTYPE.TIMESTAMP; + break; + case Types.CLOB: + retType= CLASSTYPE.CLOB; + break; + case Types.BLOB: + retType= CLASSTYPE.BLOB; + break; + default: + retType= CLASSTYPE.STRING; + break; + } + return retType; + } //filesuffix @@ -239,36 +295,7 @@ public String toString() { } } - public enum META_TYPE { - METATYPE_CHAR(META_TYPE_STRING, "CHAR"), - METATYPE_VARCHAR(META_TYPE_STRING, "VARCHAR"), - METATYPE_BIGINT(META_TYPE_BIGINT, "BIGINT"), - METATYPE_DOUBLE(META_TYPE_DOUBLE, "DOUBLE"), - METATYPE_NUMERIC(META_TYPE_DOUBLE, "NUMERIC"), - METATYPE_TIMESTAMP(META_TYPE_TIMESTAMP, "TIMESTMAP"), - METATYPE_INT(META_TYPE_INTEGER, "INT"); - - private String name; - private String id; - - META_TYPE(String id, String name) { - this.id = id; - this.name = name; - } - - @Override - public String toString() { - return name; - } - - public String getName() { - return name; - } - public String getValue() { - return id; - } - } public enum CYCLE_TYPE { YEAR("8"), //年 @@ -556,4 +583,17 @@ public String getCode() { return code; } } + public enum SCRIPTENGINE{ + JS("js"), + GRAAL("graal.js"), + RUBY("jruby"); + private String name; + SCRIPTENGINE(String name){ + this.name=name; + } + + public String getName() { + return name; + } + } } diff --git a/core/src/main/java/com/robin/core/base/util/ModelScriptGenerator.java b/core/src/main/java/com/robin/core/base/util/ModelScriptGenerator.java index 3be6a22d..a468f991 100644 --- a/core/src/main/java/com/robin/core/base/util/ModelScriptGenerator.java +++ b/core/src/main/java/com/robin/core/base/util/ModelScriptGenerator.java @@ -17,6 +17,8 @@ import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.datameta.BaseDataBaseMeta; +import com.robin.core.base.datameta.DataBaseMetaFactory; +import com.robin.core.base.datameta.DataBaseParam; import com.robin.core.base.model.BaseObject; import com.robin.core.base.reflect.ClassGraphReflector; import com.robin.core.sql.util.BaseSqlGen; @@ -31,12 +33,13 @@ public class ModelScriptGenerator { public static void main(String[] args) { if (args == null || args.length < 2) { - System.out.println("usage java -classpath .:./* com.robin.core.base.util.ModelScriptGenerator %DBTYPE% %OUTPUT_FILE%"); + System.out.println("usage java -classpath .:./* com.robin.core.base.util.ModelScriptGenerator $DBTYPE $OUTPUT_FILE"); System.exit(-1); } - String configFile = args[0]; + String dbType = args[0]; String outputFile = args[1]; - + BaseDataBaseMeta meta= DataBaseMetaFactory.getDataBaseMetaByType(dbType,new DataBaseParam()); + generateScript(dbType,meta,outputFile); } public static void generateScript(String dbType, BaseDataBaseMeta meta,String outputFile, String... packageNames){ diff --git a/core/src/main/java/com/robin/core/base/util/ModelSqlGenerator.java b/core/src/main/java/com/robin/core/base/util/ModelSqlGenerator.java index 466099b6..8c66f9bb 100644 --- a/core/src/main/java/com/robin/core/base/util/ModelSqlGenerator.java +++ b/core/src/main/java/com/robin/core/base/util/ModelSqlGenerator.java @@ -16,6 +16,7 @@ import org.springframework.util.CollectionUtils; import java.sql.Connection; +import java.sql.Types; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -98,7 +99,7 @@ private static List adjustDiffSqls(AnnotationRetr if (columMap.containsKey(field.getFieldName())) { //length change if (field.getDataType().equals(columMap.get(field.getFieldName()).getColumnType())) { - if (!field.getDataType().equals(Const.META_TYPE_INTEGER) && !field.getDataType().equals(Const.META_TYPE_BIGINT)) { + if (field.getDataType()!=Types.INTEGER && field.getDataType()!=Types.BIGINT) { if (field.getLength() != 0 && field.getLength() != columMap.get(field.getFieldName()).getColumnLength()) { alertSqls.add(sqlGen.getAlertColumnSqlPart(entityContent, field, BaseSqlGen.AlertType.ALERT)); } diff --git a/core/src/main/java/com/robin/core/collection/util/CollectionsUtil.java b/core/src/main/java/com/robin/core/collection/util/CollectionsUtil.java index eb0161a0..ed153ca2 100644 --- a/core/src/main/java/com/robin/core/collection/util/CollectionsUtil.java +++ b/core/src/main/java/com/robin/core/collection/util/CollectionsUtil.java @@ -24,12 +24,12 @@ private CollectionsUtil(){ } - public static List> getSortedMapByLongValue(Map h, final boolean asc) { - List> l = new ArrayList<>(h.entrySet()); - Collections.sort(l, (o1, o2) -> getCompareVal(o1, o2,asc)); + public static List> getSortedMapByLongValue(Class clazz, Map h, final boolean asc) { + List> l = new ArrayList<>(h.entrySet()); + Collections.sort(l, (o1, o2) -> getCompareVal(clazz, o1, o2,asc)); return l; } - private static int getCompareVal(Map.Entry o1, Map.Entry o2,boolean asc) { + private static int getCompareVal(Class clazz, Map.Entry o1, Map.Entry o2,boolean asc) { int retval = 0; if(o1.getValue() instanceof Long) { if ((Long) o2.getValue() > (Long) o1.getValue()) { @@ -76,16 +76,7 @@ private static int getCompareVal(Map.Entry o1, Map.Entry o } return retval; } - public static List> getSortedMapByIntValue(Map h,final boolean asc) { - List> l = new ArrayList<>(h.entrySet()); - Collections.sort(l, (o1, o2) -> getCompareVal(o1,o2,asc)); - return l; - } - public static List> getSortedMapByDoubleValue(Map h,final boolean asc) { - List> l = new ArrayList<>(h.entrySet()); - Collections.sort(l, (o1, o2) -> getCompareVal(o1,o2,asc)); - return l; - } + public static boolean isEmpty(Collection collection){ return CollectionUtils.isEmpty(collection); } diff --git a/core/src/main/java/com/robin/core/convert/util/ConvertUtil.java b/core/src/main/java/com/robin/core/convert/util/ConvertUtil.java index 6e158d86..6344b60a 100644 --- a/core/src/main/java/com/robin/core/convert/util/ConvertUtil.java +++ b/core/src/main/java/com/robin/core/convert/util/ConvertUtil.java @@ -417,32 +417,59 @@ public static Object parseParameter(DataBaseColumnMeta meta, Object strValue) { } return ret; } - - public static Object parseParameter(DataSetColumnMeta meta, Object strValue) { + public static Object parseParameter(Integer dataType,Object strValue){ if (strValue == null) { return null; } Object ret = null; if (!StringUtils.isEmpty(strValue)) { - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (dataType==Types.INTEGER) { ret = Integer.parseInt(strValue.toString()); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType())) { + } else if (dataType==Types.BIGINT) { ret = Long.parseLong(strValue.toString()); - } else if (Const.META_TYPE_FLOAT.equals(meta.getColumnType())) { + } else if (dataType==Types.FLOAT) { ret = Float.parseFloat(strValue.toString()); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (dataType==Types.DOUBLE || dataType==Types.DECIMAL || dataType==Types.NUMERIC) { ret = Double.parseDouble(strValue.toString()); - } else if (Const.META_TYPE_SHORT.equals(meta.getColumnType())) { + } else if (dataType==Types.SMALLINT) { ret = Short.valueOf(strValue.toString()); - } else if (Const.META_TYPE_DATE.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (dataType==Types.DATE || dataType==Types.TIMESTAMP) { LocalDateTime localDateTime = getLocalDateTimeFrom(strValue); - if (Const.META_TYPE_DATE.equals(meta.getColumnType())) { + if (dataType==Types.DATE) { ret = new java.util.Date(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli()); - } else if (Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else { ret = new Timestamp(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli()); } - } else if (Const.META_TYPE_STRING.equals(meta.getColumnType())) { + } else { ret = strValue.toString(); + } + } + return ret; + } + public static Object parseParameter(Const.CLASSTYPE columnType, Object strValue){ + if (strValue == null) { + return null; + } + Object ret = null; + if (!StringUtils.isEmpty(strValue)) { + if (Const.CLASSTYPE.INTEGER.equals(columnType)) { + ret = Integer.parseInt(strValue.toString()); + } else if (Const.CLASSTYPE.LONG.equals(columnType)) { + ret = Long.parseLong(strValue.toString()); + } else if (Const.CLASSTYPE.FLOAT.equals(columnType)) { + ret = Float.parseFloat(strValue.toString()); + } else if (Const.CLASSTYPE.DOUBLE.equals(columnType) || Const.CLASSTYPE.NUMERIC.equals(columnType) + || Const.CLASSTYPE.DECIMAL.equals(columnType)) { + ret = Double.parseDouble(strValue.toString()); + } else if (Const.CLASSTYPE.SHORT.equals(columnType)) { + ret = Short.valueOf(strValue.toString()); + } else if (Const.CLASSTYPE.DATE.equals(columnType) || Const.CLASSTYPE.TIMESTAMP.equals(columnType)) { + LocalDateTime localDateTime = getLocalDateTimeFrom(strValue); + if (Const.CLASSTYPE.DATE.equals(columnType)) { + ret = new java.util.Date(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli()); + } else { + ret = new Timestamp(localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli()); + } } else { ret = strValue.toString(); } @@ -450,6 +477,10 @@ public static Object parseParameter(DataSetColumnMeta meta, Object strValue) { return ret; } + public static Object parseParameter(DataSetColumnMeta meta, Object strValue) { + return parseParameter(meta.getColumnType(),strValue); + } + public static Object parseParameter(Class type, Object strValue) throws Exception { if (Objects.isNull(strValue)) { @@ -582,7 +613,7 @@ private static boolean isFormatterFit(String value, DateTimeFormatter formatter) public static Object convertStringToTargetObject(String value, DataSetColumnMeta meta, DateTimeFormatter formatter) { Object retObj; - String columnType = meta.getColumnType(); + Const.CLASSTYPE columnType = meta.getColumnType(); retObj = translateValue(value, columnType, meta.getColumnName(), formatter); if (retObj == null && meta.getDefaultNullValue() != null) { retObj = meta.getDefaultNullValue(); @@ -627,29 +658,28 @@ public static Object wrapObjectByAutoDetect(Object object, String dateFormatStr) return retObj; } - private static Object translateValue(String value, String columnType, String columnName, DateTimeFormatter dateformat) throws RuntimeException { + private static Object translateValue(String value, Const.CLASSTYPE columnType, String columnName, DateTimeFormatter dateformat) throws RuntimeException { Object retObj; try { if (value == null || StringUtils.isEmpty(value.trim())) { return null; } - if (columnType.equals(Const.META_TYPE_INTEGER)) { + if (Const.CLASSTYPE.INTEGER.equals(columnType)) { if (value.contains(".")) { value = value.substring(0, value.indexOf(".")); } retObj = Integer.valueOf(value); - } else if (columnType.equals(Const.META_TYPE_BIGINT)) { + } else if (Const.CLASSTYPE.LONG.equals(columnType)) { if (value.contains(".")) { value = value.substring(0, value.indexOf(".")); } retObj = Long.valueOf(value); - } else if (columnType.equals(Const.META_TYPE_NUMERIC)) { - retObj = Double.valueOf(value); - } else if (columnType.equals(Const.META_TYPE_DOUBLE)) { + } else if (Const.CLASSTYPE.NUMERIC.equals(columnType) || Const.CLASSTYPE.DECIMAL.equals(columnType) + || Const.CLASSTYPE.DOUBLE.equals(columnType)) { retObj = Double.valueOf(value); - } else if (columnType.equals(Const.META_TYPE_DATE)) { + } else if (Const.CLASSTYPE.DATE.equals(columnType)) { retObj = new java.util.Date(LocalDateTime.parse(value, dateformat).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); - } else if (columnType.equals(Const.META_TYPE_TIMESTAMP)) { + } else if (Const.CLASSTYPE.TIMESTAMP.equals(columnType)) { retObj = new Timestamp(LocalDateTime.parse(value, dateformat).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); } else { retObj = value; diff --git a/core/src/main/java/com/robin/core/convert/util/DataTypeEnum.java b/core/src/main/java/com/robin/core/convert/util/DataTypeEnum.java index 3d8569fd..a419fb5c 100644 --- a/core/src/main/java/com/robin/core/convert/util/DataTypeEnum.java +++ b/core/src/main/java/com/robin/core/convert/util/DataTypeEnum.java @@ -20,7 +20,7 @@ public class DataTypeEnum implements Serializable{ private static final long serialVersionUID = 1L; - private String dataType; + private Integer dataType; private String name; private String cnName; private String indicatorId; @@ -29,10 +29,10 @@ public class DataTypeEnum implements Serializable{ private String isNull; private String dataPercise; private String dataLength; - public String getDataType() { + public Integer getDataType() { return dataType; } - public void setDataType(String dataType) { + public void setDataType(Integer dataType) { this.dataType = dataType; } public String getName() { diff --git a/core/src/main/java/com/robin/core/fileaccess/meta/DataCollectionMeta.java b/core/src/main/java/com/robin/core/fileaccess/meta/DataCollectionMeta.java index 51c11a64..78de2787 100644 --- a/core/src/main/java/com/robin/core/fileaccess/meta/DataCollectionMeta.java +++ b/core/src/main/java/com/robin/core/fileaccess/meta/DataCollectionMeta.java @@ -16,9 +16,11 @@ package com.robin.core.fileaccess.meta; import cn.hutool.setting.yaml.YamlUtil; +import com.google.common.collect.Lists; import com.robin.core.base.datameta.BaseDataBaseMeta; import com.robin.core.base.datameta.DataBaseColumnMeta; import com.robin.core.base.datameta.DataBaseParam; +import com.robin.core.base.util.Const; import com.robin.core.base.util.FileUtils; import com.robin.core.base.util.ResourceConst; import com.robin.core.convert.util.ConvertUtil; @@ -37,7 +39,7 @@ @Data @Slf4j -public class DataCollectionMeta implements Serializable { +public class DataCollectionMeta implements Serializable,Cloneable { private String split=","; private String encode="UTF-8"; private List columnList=new ArrayList<>(); @@ -71,26 +73,26 @@ public void setAvroSchema(Class clazz){ valueClassName=fullClassName.substring(pos+1); } - public void addColumnMeta(String columnName,String columnType,Object defaultNullValue){ + public void addColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue){ this.columnList.add(new DataSetColumnMeta(columnName, columnType, defaultNullValue)); columnNameMap.put(columnName,1); } - public void addColumnMeta(String columnName,String columnType,boolean flushOut){ + public void addColumnMeta(String columnName, Const.CLASSTYPE columnType, boolean flushOut){ this.columnList.add(new DataSetColumnMeta(columnName, columnType, flushOut)); columnNameMap.put(columnName,1); } - public void addColumnMeta(String columnName,String columnType,Object defaultNullValue,boolean required){ + public void addColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue, boolean required){ this.columnList.add(new DataSetColumnMeta(columnName, columnType, defaultNullValue,required)); columnNameMap.put(columnName,null); } - public void addColumnMeta(String columnName,String columnCode,String columnType,Object defaultNullValue,boolean required){ + public void addColumnMeta(String columnName, String columnCode, Const.CLASSTYPE columnType, Object defaultNullValue, boolean required){ DataSetColumnMeta setColumnMeta=new DataSetColumnMeta(columnName,columnCode, columnType, defaultNullValue); setColumnMeta.setRequired(required); this.columnList.add(setColumnMeta); columnNameMap.put(columnName,null); } - public void addColumnMeta(String columnName,String columnType,Object defaultNullValue,boolean required,String dateFormat){ + public void addColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue, boolean required, String dateFormat){ this.columnList.add(new DataSetColumnMeta(columnName, columnType, defaultNullValue,required,dateFormat)); columnNameMap.put(columnName,null); } @@ -99,7 +101,7 @@ public void addColumnMeta(DataSetColumnMeta columnMeta){ columnNameMap.put(columnMeta.getColumnName(),1); } - public DataSetColumnMeta createColumnMeta(String columnName,String columnType,Object defaultNullValue){ + public DataSetColumnMeta createColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue){ return new DataSetColumnMeta(columnName,columnType,defaultNullValue); } public Map getColumnNameMap(){ @@ -107,7 +109,7 @@ public Map getColumnNameMap(){ } public static List parseMeta(List columnMetas){ if(!CollectionUtils.isEmpty(columnMetas)){ - return columnMetas.stream().map(f->new DataSetColumnMeta(f.getColumnName(),f.getColumnType().toString(),f.getDefaultValue(),!f.isNullable(),null)).collect(Collectors.toList()); + return columnMetas.stream().map(f->new DataSetColumnMeta(f.getColumnName(),f.getColumnType(),f.getDefaultValue(),!f.isNullable(),null)).collect(Collectors.toList()); } return Collections.emptyList(); } @@ -132,18 +134,22 @@ public static Builder newBuilder(){ public Builder(){ } - public DataCollectionMeta.Builder addColumn(String name, String columnType){ + public DataCollectionMeta.Builder addColumn(String name, Const.CLASSTYPE columnType){ meta.addColumnMeta(name,columnType,null); return this; } - public DataCollectionMeta.Builder addColumn(String columnName,String columnType,String defaultNullValue){ + public DataCollectionMeta.Builder addColumn(String columnName, Const.CLASSTYPE columnType, String defaultNullValue){ meta.addColumnMeta(columnName,columnType,defaultNullValue); return this; } - public DataCollectionMeta.Builder addColumn(String columnName,String columnType,boolean flushOut){ + public DataCollectionMeta.Builder addColumn(String columnName, Const.CLASSTYPE columnType, boolean flushOut){ meta.addColumnMeta(columnName,columnType,flushOut); return this; } + public DataCollectionMeta.Builder add(DataSetColumnMeta columnMeta){ + meta.addColumnMeta(columnMeta); + return this; + } public DataCollectionMeta.Builder dateFormatter(String formatter){ meta.setDefaultTimestampFormat(formatter); return this; @@ -173,7 +179,10 @@ public DataCollectionMeta.Builder resourceCfg(Map map){ return this; } public DataCollectionMeta.Builder fsType(String fsType){ - meta.setFsType(fsType); + Const.FILESYSTEM filesystem= Const.FILESYSTEM.forName(fsType); + if(filesystem!=null) { + meta.setFsType(filesystem.getValue()); + } return this; } public DataCollectionMeta.Builder resPath(String resPath){ @@ -231,4 +240,10 @@ public String constructUrl() { return null; } + @Override + public Object clone() throws CloneNotSupportedException { + DataCollectionMeta colMeta=(DataCollectionMeta) super.clone(); + colMeta.columnList= Lists.newArrayList(this.columnList); + return colMeta; + } } diff --git a/core/src/main/java/com/robin/core/fileaccess/meta/DataSetColumnMeta.java b/core/src/main/java/com/robin/core/fileaccess/meta/DataSetColumnMeta.java index 223d4af3..6cf854fb 100644 --- a/core/src/main/java/com/robin/core/fileaccess/meta/DataSetColumnMeta.java +++ b/core/src/main/java/com/robin/core/fileaccess/meta/DataSetColumnMeta.java @@ -1,6 +1,7 @@ package com.robin.core.fileaccess.meta; import com.robin.core.base.datameta.DataBaseColumnMeta; +import com.robin.core.base.util.Const; import lombok.Data; import org.springframework.util.ObjectUtils; @@ -12,9 +13,10 @@ public class DataSetColumnMeta implements Serializable { private String columnName; private String columnCode; - private String columnType; + private Const.CLASSTYPE columnType; private Object defaultNullValue; private String dateFormat; + private Integer dataType; private boolean required; private boolean algrithColumn; private boolean primary; @@ -29,7 +31,7 @@ public DataSetColumnMeta(){ } - public DataSetColumnMeta(String columnName,String columnType,Object defaultNullValue){ + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue){ this.columnName=columnName; this.columnCode=columnName; this.columnType=columnType; @@ -39,28 +41,31 @@ public DataSetColumnMeta(String columnName,String columnType,Object defaultNullV this.defaultNullValue=""; } } - public DataSetColumnMeta(String columnName,String columnCode,String columnType,Object defaultNullValue){ + public DataSetColumnMeta(String columnName, String columnCode, Const.CLASSTYPE columnType, Object defaultNullValue){ this(columnName,columnType,defaultNullValue); this.columnCode=columnCode; } - public DataSetColumnMeta(String columnName,String columnType){ + + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType){ this(columnName,columnType,null); } - public DataSetColumnMeta(String columnName,String columnType,String algrithOper,boolean flushOut){ + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType, String algrithOper, boolean flushOut){ this(columnName,columnType,null); this.algrithOper=algrithOper; this.flushOut=flushOut; } - public DataSetColumnMeta(String columnName,String columnType,boolean flushOut){ + + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType, boolean flushOut){ this(columnName,columnType,null); this.flushOut=flushOut; } - public DataSetColumnMeta(String columnName,String columnType,Object defaultNullValue,boolean required,String dateFormat){ + + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue, boolean required, String dateFormat){ this(columnName,columnType,defaultNullValue); this.required=required; this.dateFormat=dateFormat; } - public DataSetColumnMeta(String columnName,String columnType,Object defaultNullValue,boolean required){ + public DataSetColumnMeta(String columnName, Const.CLASSTYPE columnType, Object defaultNullValue, boolean required){ this(columnName,columnType,defaultNullValue); this.required=required; } diff --git a/core/src/main/java/com/robin/core/query/mapper/segment/ResultMapperSegment.java b/core/src/main/java/com/robin/core/query/mapper/segment/ResultMapperSegment.java index 61cead3d..a61018d4 100644 --- a/core/src/main/java/com/robin/core/query/mapper/segment/ResultMapperSegment.java +++ b/core/src/main/java/com/robin/core/query/mapper/segment/ResultMapperSegment.java @@ -16,7 +16,7 @@ public class ResultMapperSegment extends AbstractSegment { private String className; private Class resultClass; - private Map> columnMapper = new HashMap<>(); + private Map> columnMapper = new HashMap<>(); public ResultMapperSegment(String nameSpace, String id, String value) { super(nameSpace, id, value); @@ -41,35 +41,35 @@ public void parse(Element element) { } } - private String getMetaType(String jdbcType) { - String metaType = null; + private Const.CLASSTYPE getMetaType(String jdbcType) { + Const.CLASSTYPE metaType = null; switch (jdbcType.toUpperCase()) { case "CHAR": case "VARCHAR": - metaType = Const.META_TYPE_STRING; + metaType = Const.CLASSTYPE.STRING; break; case "DOUBLE": case "NUMERIC": - metaType = Const.META_TYPE_DOUBLE; + metaType = Const.CLASSTYPE.DOUBLE; break; case "BIGINT": - metaType = Const.META_TYPE_BIGINT; + metaType = Const.CLASSTYPE.LONG; break; case "INT": - metaType = Const.META_TYPE_INTEGER; + metaType = Const.CLASSTYPE.INTEGER; break; case "TIMESTAMP": case "DATE": - metaType = Const.META_TYPE_TIMESTAMP; + metaType = Const.CLASSTYPE.TIMESTAMP; break; default: - metaType = Const.META_TYPE_STRING; + metaType = Const.CLASSTYPE.STRING; break; } return metaType; } - public Map> getColumnMapper() { + public Map> getColumnMapper() { return columnMapper; } diff --git a/core/src/main/java/com/robin/core/script/BaseScriptExecutor.java b/core/src/main/java/com/robin/core/script/BaseScriptExecutor.java index 0e665063..35d12d3d 100644 --- a/core/src/main/java/com/robin/core/script/BaseScriptExecutor.java +++ b/core/src/main/java/com/robin/core/script/BaseScriptExecutor.java @@ -36,6 +36,7 @@ public class BaseScriptExecutor implements IscriptExecutor{ public BaseScriptExecutor(String scriptEngineName){ ScriptEngineManager factory = new ScriptEngineManager(); scriptEngine = factory.getEngineByName(scriptEngineName); + logger.info("get {} with class {}",scriptEngineName,scriptEngine.getClass().getName()); compEngine = (Compilable) scriptEngine; cache=CacheBuilder.newBuilder().concurrencyLevel(4).weakKeys().maximumSize(10000).removalListener(new KeyRemoveListener()).expireAfterAccess(120, TimeUnit.MINUTES).build(new CacheLoader(){ @Override diff --git a/core/src/main/java/com/robin/core/script/ScriptExecutor.java b/core/src/main/java/com/robin/core/script/ScriptExecutor.java index 204c3226..fbe90b77 100644 --- a/core/src/main/java/com/robin/core/script/ScriptExecutor.java +++ b/core/src/main/java/com/robin/core/script/ScriptExecutor.java @@ -15,10 +15,7 @@ */ package com.robin.core.script; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -27,7 +24,9 @@ import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; +import com.robin.core.base.util.Const; import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.CollectionUtils; public class ScriptExecutor { private ConcurrentMap scriptExecutorMap=new ConcurrentHashMap<>(); @@ -42,7 +41,7 @@ private ScriptExecutor() { } - public List getAllScriptEngineNames() { + private List getAllScriptEngineNames() { List scriptEngineNames = new ArrayList<>(); ScriptEngineManager factory = new ScriptEngineManager(); for (ScriptEngineFactory fac : factory.getEngineFactories()) { @@ -52,8 +51,12 @@ public List getAllScriptEngineNames() { name = "js"; } else if (name.toLowerCase().endsWith("ruby")) { name = "jruby"; - } - scriptEngineNames.add(name.toLowerCase()); + }else if("Spring Expression Language".equalsIgnoreCase(name)){ + name="spel"; + } + if(!scriptEngineNames.contains(name)) { + scriptEngineNames.add(name.toLowerCase()); + } } Collections.sort(scriptEngineNames); return scriptEngineNames; @@ -61,6 +64,23 @@ public List getAllScriptEngineNames() { public Bindings createBindings(String scriptName){ return scriptExecutorMap.get(scriptName).createBindings(); } + public void fillBindings(Bindings bindings,Map paramMap){ + bindings.clear(); + if(!CollectionUtils.isEmpty(paramMap)){ + for (Map.Entry entry : paramMap.entrySet()) { + bindings.put(entry.getKey(), entry.getValue()); + } + } + } + public Bindings createBindings(String scriptName,Map paramMap){ + Bindings bindings=scriptExecutorMap.get(scriptName).createBindings(); + if(!CollectionUtils.isEmpty(paramMap)){ + for (Map.Entry entry : paramMap.entrySet()) { + bindings.put(entry.getKey(), entry.getValue()); + } + } + return bindings; + } public Object evaluate(String scriptname,String key,String scripts,Bindings bindings) throws Exception{ return scriptExecutorMap.get(scriptname).evaluate(key, scripts, bindings); } @@ -86,5 +106,27 @@ private static class InnerClass{ public static ScriptExecutor getInstance(){ return InnerClass.scriptExecutor; } - + public static void main(String[] args) throws Exception{ + Random random=new Random(123123L); + CompiledScript script= ScriptExecutor.getInstance().returnScript(Const.SCRIPTENGINE.JS.getName(),"k","(a-b)/c-Math.sin(d)*e"); + double a,b,e; + int c,d; + System.out.println(System.currentTimeMillis()/1000); + Bindings bindings=ScriptExecutor.getInstance().createBindings(Const.SCRIPTENGINE.JS.getName()); + for (int i=0;i<200000;i++){ + a= random.nextDouble()*1000; + b= random.nextDouble()*100; + c= random.nextInt(100); + d=random.nextInt(89); + e= random.nextDouble()*100; + bindings.put("a",a); + bindings.put("b",b); + bindings.put("c",c); + bindings.put("d",d); + bindings.put("e",e); + Object value=script.eval(bindings); + } + System.out.println(System.currentTimeMillis()/1000); + } + } diff --git a/core/src/main/java/com/robin/core/sql/util/AbstractSqlGen.java b/core/src/main/java/com/robin/core/sql/util/AbstractSqlGen.java index 956c6fec..b77e1e09 100644 --- a/core/src/main/java/com/robin/core/sql/util/AbstractSqlGen.java +++ b/core/src/main/java/com/robin/core/sql/util/AbstractSqlGen.java @@ -29,6 +29,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import java.sql.Types; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -266,7 +267,7 @@ public String[] getResultColName(String field) { @Override public String getFieldDefineSqlPart(FieldContent field) { - String datatype = field.getDataType(); + Integer datatype = field.getDataType(); StringBuilder builder = new StringBuilder(); String name = field.getFieldName(); if (name == null || "".equals(name)) { @@ -278,7 +279,7 @@ public String getFieldDefineSqlPart(FieldContent field) { } @Override public String getFieldDefineSqlByMeta(DataBaseColumnMeta columnMeta){ - String datatype = columnMeta.getColumnType(); + Const.CLASSTYPE datatype = columnMeta.getColumnType(); StringBuilder builder = new StringBuilder(); String name = columnMeta.getColumnName(); builder.append(name).append(" ").append(returnTypeDef(datatype, columnMeta)); @@ -356,7 +357,7 @@ protected String toSQLForGeneric(FilterCondition param) { case LIKE: case RLIKE: case LLIKE: - if (Const.META_TYPE_STRING.equals(param.getColumnType())) { + if (Const.CLASSTYPE.STRING.equals(param.getColumnType())) { if (param.getValue().toString().startsWith("%") || param.getValue().toString().endsWith("%")) { String str = param.getValue().toString().replace("%", ""); if (!ObjectUtils.isEmpty(str)) { @@ -422,13 +423,13 @@ protected String wrapValue(FilterCondition condition){ if(containsSqlInjection(condition.getValue())){ return null; } - if(Const.META_TYPE_DATE.equals(condition.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(condition.getColumnType()) ||Const.META_TYPE_STRING.equals(condition.getColumnType())){ + if(Const.CLASSTYPE.DATE.equals(condition.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(condition.getColumnType()) || Const.CLASSTYPE.STRING.equals(condition.getColumnType())){ return "'"+condition.getValue().toString()+"'"; } return condition.getValue().toString(); } - protected String wrapValue(String value,String columnType){ - if(Const.META_TYPE_DATE.equals(columnType) || Const.META_TYPE_TIMESTAMP.equals(columnType) ||Const.META_TYPE_STRING.equals(columnType)){ + protected String wrapValue(String value, Const.CLASSTYPE columnType){ + if(Const.CLASSTYPE.DATE.equals(columnType) || Const.CLASSTYPE.TIMESTAMP.equals(columnType) || Const.CLASSTYPE.STRING.equals(columnType)){ return "'"+value+"'"; } return value; @@ -441,20 +442,22 @@ protected static boolean containsSqlInjection(Object obj) { @Override - public String returnTypeDef(String dataType, FieldContent field) { + public String returnTypeDef(Integer dataType, FieldContent field) { StringBuilder builder=new StringBuilder(); + switch (dataType) { - case Const.META_TYPE_BIGINT: + case Types.BIGINT: builder.append(getLongFormat()); break; - case Const.META_TYPE_INTEGER: + case Types.INTEGER: builder.append(getIntegerFormat()); break; - case Const.META_TYPE_SHORT: + case Types.SMALLINT: builder.append(getShortFormat()); break; - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_NUMERIC: + case Types.DOUBLE: + case Types.DECIMAL: + case Types.NUMERIC: int precise = field.getPrecise(); int scale = field.getScale(); if (precise == 0) { @@ -465,13 +468,13 @@ public String returnTypeDef(String dataType, FieldContent field) { } builder.append(getDecimalFormat(precise, scale)); break; - case Const.META_TYPE_DATE: + case Types.DATE: builder.append("DATE"); break; - case Const.META_TYPE_TIMESTAMP: + case Types.TIMESTAMP: builder.append(getTimestampFormat()); break; - case Const.META_TYPE_STRING: + case Types.VARCHAR: int length = field.getLength()==0?32:field.getLength(); if (length == 1) { builder.append(getCharFormat(1)); @@ -479,10 +482,10 @@ public String returnTypeDef(String dataType, FieldContent field) { builder.append(getVarcharFormat(length)); } break; - case Const.META_TYPE_CLOB: + case Types.CLOB: builder.append(getClobFormat()); break; - case Const.META_TYPE_BLOB: + case Types.BLOB: builder.append(getBlobFormat()); break; default: @@ -499,13 +502,13 @@ public String returnTypeDef(String dataType, FieldContent field) { return builder.toString(); } @Override - public String returnTypeDef(String dataType, DataBaseColumnMeta field) { + public String returnTypeDef(Const.CLASSTYPE dataType, DataBaseColumnMeta field) { StringBuilder builder=new StringBuilder(); - if(dataType.equals(Const.META_TYPE_BIGINT)){ + if(dataType.equals(Const.CLASSTYPE.LONG)){ builder.append(getLongFormat()); - }else if(dataType.equals(Const.META_TYPE_INTEGER)){ + }else if(dataType.equals(Const.CLASSTYPE.INTEGER)){ builder.append(getIntegerFormat()); - }else if(dataType.equals(Const.META_TYPE_DOUBLE) || dataType.equals(Const.META_TYPE_NUMERIC)){ + }else if(dataType.equals(Const.CLASSTYPE.DOUBLE) || dataType.equals(Const.CLASSTYPE.NUMERIC)){ int precise= field.getDataPrecise(); int scale= field.getDataScale(); if(precise==0) { @@ -515,11 +518,11 @@ public String returnTypeDef(String dataType, DataBaseColumnMeta field) { scale=8; } builder.append(getDecimalFormat(precise,scale)); - }else if(dataType.equals(Const.META_TYPE_DATE)){ + }else if(dataType.equals(Const.CLASSTYPE.DATE)){ builder.append("DATE"); - }else if(dataType.equals(Const.META_TYPE_TIMESTAMP)){ + }else if(dataType.equals(Const.CLASSTYPE.TIMESTAMP)){ builder.append(getTimestampFormat()); - }else if(dataType.equals(Const.META_TYPE_STRING)){ + }else if(dataType.equals(Const.CLASSTYPE.STRING)){ int length= field.getColumnLength(); if(length==0){ length=32; @@ -529,9 +532,9 @@ public String returnTypeDef(String dataType, DataBaseColumnMeta field) { } else { builder.append(getVarcharFormat(length)); } - }else if(dataType.equals(Const.META_TYPE_CLOB)){ + }else if(dataType.equals(Const.CLASSTYPE.CLOB)){ builder.append(getClobFormat()); - }else if(dataType.equals(Const.META_TYPE_BLOB)){ + }else if(dataType.equals(Const.CLASSTYPE.BLOB)){ builder.append(getBlobFormat()); } if(field.isIncrement() && supportIncrement()){ diff --git a/core/src/main/java/com/robin/core/sql/util/BaseSqlGen.java b/core/src/main/java/com/robin/core/sql/util/BaseSqlGen.java index 15a66d20..ad3f8cd0 100644 --- a/core/src/main/java/com/robin/core/sql/util/BaseSqlGen.java +++ b/core/src/main/java/com/robin/core/sql/util/BaseSqlGen.java @@ -19,6 +19,7 @@ import com.robin.core.base.dao.util.FieldContent; import com.robin.core.base.datameta.DataBaseColumnMeta; import com.robin.core.base.exception.DAOException; +import com.robin.core.base.util.Const; import com.robin.core.query.util.PageQuery; import com.robin.core.query.util.QueryString; @@ -62,8 +63,8 @@ public interface BaseSqlGen { String getFieldDefineSqlPart(FieldContent field); String getFieldDefineSqlByMeta(DataBaseColumnMeta columnMeta); - String returnTypeDef(String dataType, FieldContent field); - String returnTypeDef(String dataType, DataBaseColumnMeta field); + String returnTypeDef(Integer dataType, FieldContent field); + String returnTypeDef(Const.CLASSTYPE dataType, DataBaseColumnMeta field); String getSchemaName(String schema); String getAlertColumnSqlPart(AnnotationRetriever.EntityContent entityContent, FieldContent fieldContent, AlertType type); String getDbType(); diff --git a/core/src/main/java/com/robin/core/sql/util/FilterCondition.java b/core/src/main/java/com/robin/core/sql/util/FilterCondition.java index 2eb61c85..9704a2b5 100644 --- a/core/src/main/java/com/robin/core/sql/util/FilterCondition.java +++ b/core/src/main/java/com/robin/core/sql/util/FilterCondition.java @@ -21,7 +21,7 @@ public class FilterCondition { private Object value; private List values; private List conditions; - private String columnType; + private Const.CLASSTYPE columnType; private Const.LINKOPERATOR linkOper = Const.LINKOPERATOR.LINK_AND; private Class mappingClass; private String orderByStr; @@ -40,7 +40,7 @@ public FilterCondition(Object leftColumn, Const.OPERATOR operator) { this.operator = operator; } - public FilterCondition(String columnCode, String columnType, Const.OPERATOR operator) { + public FilterCondition(String columnCode, Const.CLASSTYPE columnType, Const.OPERATOR operator) { this.columnCode = columnCode; this.columnType = columnType; this.operator = operator; @@ -58,7 +58,7 @@ public FilterCondition(String columnCode, Const.OPERATOR operator, Object value) this.value = value; } - public FilterCondition(String columnCode, String columnType, Const.OPERATOR operator, Object value) { + public FilterCondition(String columnCode, Const.CLASSTYPE columnType, Const.OPERATOR operator, Object value) { this.columnCode = columnCode; this.operator = operator; this.value = value; diff --git a/core/src/main/java/com/robin/core/sql/util/FilterConditionBuilder.java b/core/src/main/java/com/robin/core/sql/util/FilterConditionBuilder.java index b2cfe64d..1e06705a 100644 --- a/core/src/main/java/com/robin/core/sql/util/FilterConditionBuilder.java +++ b/core/src/main/java/com/robin/core/sql/util/FilterConditionBuilder.java @@ -42,7 +42,7 @@ public FilterConditionBuilder eq(String columnName, Object object) { return this; } - public FilterConditionBuilder eq(String columnName, Object object, String columnType) { + public FilterConditionBuilder eq(String columnName, Object object, Const.CLASSTYPE columnType) { conditions.add(new FilterCondition(columnName, columnType, Const.OPERATOR.EQ, object)); return this; } @@ -61,7 +61,7 @@ public FilterCondition eq(PropertyFunction function String fieldName = AnnotationRetriever.getFieldName(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); return Optional.ofNullable(map1.get(fieldName)).map(f -> { FilterCondition condition = constructCondition(f.getFieldName(),columnType, Const.OPERATOR.EQ,mappingClass,object); return condition; @@ -71,7 +71,7 @@ public FilterCondition eq(PropertyFu String fieldName = AnnotationRetriever.getFieldName(left); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(left); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); - String columnType = AnnotationRetriever.getFieldType(left); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(left); return Optional.ofNullable(map1.get(fieldName)).map(f -> { FilterCondition condition = constructCondition(f.getFieldName(),columnType, Const.OPERATOR.EQ,mappingClass,right); return condition; @@ -83,7 +83,7 @@ public FilterConditionBuilder addEq(PropertyFunction mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Optional.ofNullable(map1.get(fieldName)).map(f -> { FilterCondition condition = constructCondition(f.getFieldName(),columnType, Const.OPERATOR.EQ,mappingClass,object); conditions.add(condition); @@ -94,14 +94,14 @@ public FilterConditionBuilder addEq(PropertyFunction FilterConditionBuilder addEq(Class mappingClass,String fieldName, Object object) { Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { - String columnType = AnnotationRetriever.getFieldType(map1.get(fieldName)); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(map1.get(fieldName)); FilterCondition condition = constructCondition(f.getFieldName(),columnType, Const.OPERATOR.EQ,mappingClass,object); conditions.add(condition); return f; }).orElseThrow(()->new ConfigurationIncorrectException("class " + mappingClass.getCanonicalName() + " can not parse")); return this; } - private FilterCondition constructCondition(String fieldName,String columnType,Const.OPERATOR operator,Class mappingClass,Object object){ + private FilterCondition constructCondition(String fieldName, Const.CLASSTYPE columnType, Const.OPERATOR operator, Class mappingClass, Object object){ FilterCondition condition = new FilterCondition(fieldName, operator); condition.setMappingClass(mappingClass); condition.setValue(object); @@ -115,12 +115,12 @@ private FilterCondition constructCondition(String fieldNa return condition; } - public FilterConditionBuilder addIn(String columnName, String columnType, List objects) { + public FilterConditionBuilder addIn(String columnName, Const.CLASSTYPE columnType, List objects) { conditions.add(in(columnName, columnType, objects)); return this; } - public FilterCondition in(String columnName, String columnType, List objects) { + public FilterCondition in(String columnName, Const.CLASSTYPE columnType, List objects) { FilterCondition condition = new FilterCondition(columnName, Const.OPERATOR.IN); condition.setValues(objects); condition.setAliasMap(aliasMap); @@ -133,7 +133,7 @@ public FilterCondition in(String columnName, String columnType, List objects) } public FilterCondition in(PropertyFunction function, List objects) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); String columnName; @@ -161,7 +161,7 @@ public FilterCondition in(String columnName,FilterCondition inClause){ return condition; } - public FilterConditionBuilder addIn(String columnName, List objects, String columnType) { + public FilterConditionBuilder addIn(String columnName, List objects, Const.CLASSTYPE columnType) { FilterCondition condition = new FilterCondition(columnName, Const.OPERATOR.IN); condition.setValues(objects); condition.setColumnType(columnType); @@ -173,7 +173,7 @@ public FilterConditionBuilder addIn(String columnName, Li public FilterConditionBuilder addIn(PropertyFunction function, List objects) { String fieldName = AnnotationRetriever.getFieldName(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { conditions.add(in(f.getFieldName(), columnType, objects)); @@ -183,7 +183,7 @@ public FilterConditionBuilder addIn(PropertyFunction objects) { + public FilterCondition notIn(String columnName, Const.CLASSTYPE columnType, List objects) { FilterCondition condition = new FilterCondition(columnName, Const.OPERATOR.NOTIN); condition.setValues(objects); condition.setAliasMap(aliasMap); @@ -205,7 +205,7 @@ public FilterCondition notIn(String columnName, FilterCondition clause) { public FilterConditionBuilder addIn(PropertyFunction function,FilterCondition inClause){ String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { @@ -227,14 +227,14 @@ public FilterConditionBuilder addNotIn(PropertyFunction FilterConditionBuilder addNotIn(String columnName, String columnType, List objects) { + public FilterConditionBuilder addNotIn(String columnName, Const.CLASSTYPE columnType, List objects) { conditions.add(notIn(columnName, columnType, objects)); return this; } public FilterConditionBuilder addNotIn(PropertyFunction function, List objects) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { @@ -245,7 +245,7 @@ public FilterConditionBuilder addNotIn(PropertyFunction objects) { + public FilterCondition between(String columnName, Const.CLASSTYPE columnType, List objects) { FilterCondition condition = new FilterCondition(columnName, columnType, Const.OPERATOR.BETWEEN); condition.setAliasMap(aliasMap); condition.setValues(objects); @@ -255,14 +255,14 @@ public FilterCondition between(String columnName, String columnType, List obj return condition; } - public FilterConditionBuilder addBetween(String columnName, String columnType, List objects) { + public FilterConditionBuilder addBetween(String columnName, Const.CLASSTYPE columnType, List objects) { conditions.add(between(columnName, columnType, objects)); return this; } public FilterConditionBuilder addBetween(PropertyFunction function, List objects) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { @@ -273,7 +273,7 @@ public FilterConditionBuilder addBetween(PropertyFunction return this; } - public FilterCondition filter(String columnName, String columnType, Const.OPERATOR operator, Object object) { + public FilterCondition filter(String columnName, Const.CLASSTYPE columnType, Const.OPERATOR operator, Object object) { FilterCondition condition= new FilterCondition(columnName, columnType, operator, object); if(sqlBuilder!=null){ condition.setSqlBuilder(sqlBuilder); @@ -291,7 +291,7 @@ public FilterCondition filter(Object left, Const.OPERATOR operator, Object right public FilterCondition filter(PropertyFunction function, Const.OPERATOR operator, Object object) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); return Optional.ofNullable(map1.get(fieldName)).map(f -> @@ -301,7 +301,7 @@ public FilterCondition filter(PropertyFunction func } public FilterCondition filter(PropertyFunction function, Const.OPERATOR operator, PropertyFunction object) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); return Optional.ofNullable(map1.get(fieldName)).map(f -> @@ -310,7 +310,7 @@ public FilterCondition filter(Proper new ConfigurationIncorrectException("class " + mappingClass.getCanonicalName() + " can not parse")); } - public FilterConditionBuilder addFilter(String columnName, String columnType, Const.OPERATOR operator, Object object) { + public FilterConditionBuilder addFilter(String columnName, Const.CLASSTYPE columnType, Const.OPERATOR operator, Object object) { FilterCondition condition=new FilterCondition(columnName, columnType, operator, object); if(sqlBuilder!=null){ condition.setSqlBuilder(sqlBuilder); @@ -327,7 +327,7 @@ public FilterConditionBuilder addFilter(Object left,Object right,Const.OPERATOR return this; } - public FilterConditionBuilder addFilter(String columnName, String columnType, Const.OPERATOR operator, List values) { + public FilterConditionBuilder addFilter(String columnName, Const.CLASSTYPE columnType, Const.OPERATOR operator, List values) { FilterCondition condition = new FilterCondition(columnName, columnType, operator); condition.setValues(values); condition.setAliasMap(aliasMap); @@ -338,7 +338,7 @@ public FilterConditionBuilder addFilter(String columnName, String columnType, Co return this; } - public FilterConditionBuilder addFilter(String columnName, Const.OPERATOR operator, List values, String columnType) { + public FilterConditionBuilder addFilter(String columnName, Const.OPERATOR operator, List values, Const.CLASSTYPE columnType) { FilterCondition condition = new FilterCondition(columnName, columnType, operator); condition.setValues(values); condition.setAliasMap(aliasMap); @@ -348,7 +348,7 @@ public FilterConditionBuilder addFilter(String columnName, Const.OPERATOR operat conditions.add(condition); return this; } - public FilterConditionBuilder addFilter(Class mappingClass, String propertyName, Const.OPERATOR operator, List values, String columnType) { + public FilterConditionBuilder addFilter(Class mappingClass, String propertyName, Const.OPERATOR operator, List values, Const.CLASSTYPE columnType) { Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); if(map1.containsKey(propertyName)) { FilterCondition condition = new FilterCondition(map1.get(propertyName).getFieldName(), columnType, operator); @@ -365,7 +365,7 @@ public FilterConditionBuilder addFilter(Class mappingC public FilterConditionBuilder addFilter(PropertyFunction function, Const.OPERATOR operator, Object value) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { @@ -378,7 +378,7 @@ public FilterConditionBuilder addFilter(PropertyFunction< public FilterConditionBuilder addFilter(PropertyFunction function, Const.OPERATOR operator, List value) { String fieldName = AnnotationRetriever.getFieldName(function); - String columnType = AnnotationRetriever.getFieldType(function); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(function); Class mappingClass=AnnotationRetriever.getFieldOwnedClass(function); Map map1 = AnnotationRetriever.getMappingFieldsMapCache(mappingClass); Optional.ofNullable(map1.get(fieldName)).map(f -> { diff --git a/core/src/main/java/com/robin/core/sql/util/JoinCondition.java b/core/src/main/java/com/robin/core/sql/util/JoinCondition.java index 253d1aeb..0b4349cd 100644 --- a/core/src/main/java/com/robin/core/sql/util/JoinCondition.java +++ b/core/src/main/java/com/robin/core/sql/util/JoinCondition.java @@ -6,6 +6,7 @@ import com.robin.core.base.util.Const; import lombok.Data; import org.apache.commons.lang3.tuple.Triple; +import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @@ -33,9 +34,9 @@ public Builder() { } public JoinCondition.Builder join(PropertyFunction leftColumn, PropertyFunction rightColumn, Const.JOINTYPE joinType) { - String leftColumnType = AnnotationRetriever.getFieldType(leftColumn); - String rightColumnType = AnnotationRetriever.getFieldType(rightColumn); - //Assert.isTrue(leftColumnType.equals(rightColumnType), " join columns does not have same type!"); + Const.CLASSTYPE leftColumnType = AnnotationRetriever.getFieldType(leftColumn); + Const.CLASSTYPE rightColumnType = AnnotationRetriever.getFieldType(rightColumn); + Assert.isTrue(leftColumnType.equals(rightColumnType), " join columns does not have same type!"); statement.getJoins().add(Triple.of(leftColumn, rightColumn, joinType)); Class leftModelClass=AnnotationRetriever.getFieldOwnedClass(leftColumn); Class rightModelClass=AnnotationRetriever.getFieldOwnedClass(rightColumn); diff --git a/core/src/main/java/com/robin/core/sql/util/OracleSqlGen.java b/core/src/main/java/com/robin/core/sql/util/OracleSqlGen.java index 7f2a6406..e8c3d411 100644 --- a/core/src/main/java/com/robin/core/sql/util/OracleSqlGen.java +++ b/core/src/main/java/com/robin/core/sql/util/OracleSqlGen.java @@ -86,9 +86,9 @@ protected String wrapValue(FilterCondition condition) { if(containsSqlInjection(condition.getValue())){ return null; } - if(Const.META_TYPE_DATE.equals(condition.getColumnType())){ + if(Const.CLASSTYPE.DATE.equals(condition.getColumnType())){ return "to_date('" + condition.getValue().toString() + "','"+dayFormatStr+"')"; - }else if(Const.META_TYPE_TIMESTAMP.equals(condition.getColumnType())){ + }else if(Const.CLASSTYPE.TIMESTAMP.equals(condition.getColumnType())){ return "to_date('" + condition.getValue().toString() + "','"+timeFormatStr+"')"; } return super.wrapValue(condition); diff --git a/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java b/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java index f8b814ca..6582b151 100644 --- a/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java +++ b/core/src/test/java/com/robin/core/test/db/TestJdbcBatch.java @@ -26,11 +26,11 @@ public void doTestBatch(){ int maxrow=1000; DataCollectionMeta collectionMeta=new DataCollectionMeta(); - collectionMeta.addColumnMeta("name", Const.META_TYPE_STRING,null); - collectionMeta.addColumnMeta("code",Const.META_TYPE_STRING,null); - collectionMeta.addColumnMeta("amount",Const.META_TYPE_DOUBLE,null); - collectionMeta.addColumnMeta("creator",Const.META_TYPE_INTEGER,null); - collectionMeta.addColumnMeta("time",Const.META_TYPE_TIMESTAMP,null); + collectionMeta.addColumnMeta("name", Const.CLASSTYPE.STRING,null); + collectionMeta.addColumnMeta("code", Const.CLASSTYPE.STRING,null); + collectionMeta.addColumnMeta("amount", Const.CLASSTYPE.DOUBLE,null); + collectionMeta.addColumnMeta("creator", Const.CLASSTYPE.INTEGER,null); + collectionMeta.addColumnMeta("time", Const.CLASSTYPE.TIMESTAMP,null); Iterator> iterator=new Iterator<>() { Map rowMap=new HashMap<>(); diff --git a/core/src/test/java/com/robin/core/test/model/TestLob.java b/core/src/test/java/com/robin/core/test/model/TestLob.java index 2eb8652f..e245ebad 100644 --- a/core/src/test/java/com/robin/core/test/model/TestLob.java +++ b/core/src/test/java/com/robin/core/test/model/TestLob.java @@ -20,6 +20,8 @@ import com.robin.core.base.model.BaseObject; import lombok.Data; +import java.sql.Types; + @MappingEntity(value ="testtablob",schema = "test") @Data public class TestLob extends BaseObject { @@ -27,9 +29,9 @@ public class TestLob extends BaseObject { private Long id; @MappingField private String name; - @MappingField(datatype="clob") + @MappingField(datatype= Types.CLOB) private String lob1; - @MappingField(datatype="blob") + @MappingField(datatype=Types.BLOB) private byte[] lob2; diff --git a/core/src/test/java/com/robin/core/test/model/TestModel.java b/core/src/test/java/com/robin/core/test/model/TestModel.java index 74a6624e..cd292b9a 100644 --- a/core/src/test/java/com/robin/core/test/model/TestModel.java +++ b/core/src/test/java/com/robin/core/test/model/TestModel.java @@ -1,5 +1,6 @@ package com.robin.core.test.model; +import com.robin.core.base.annotation.LogicColumn; import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.annotation.MappingField; import com.robin.core.base.model.BaseObject; @@ -7,7 +8,7 @@ import java.sql.Timestamp; -@MappingEntity(value = "t_test",schema = "test", logicColumn = "status") +@MappingEntity(value = "t_test",schema = "test") @Data public class TestModel extends BaseObject{ @MappingField(primary=true,increment=true) @@ -20,6 +21,7 @@ public class TestModel extends BaseObject{ private Long csId; @MappingField private Timestamp createTime; + @LogicColumn private Integer status; } diff --git a/core/src/test/java/com/robin/core/test/model/TestSequence.java b/core/src/test/java/com/robin/core/test/model/TestSequence.java index f715f582..0908e835 100644 --- a/core/src/test/java/com/robin/core/test/model/TestSequence.java +++ b/core/src/test/java/com/robin/core/test/model/TestSequence.java @@ -5,6 +5,8 @@ import com.robin.core.base.model.BaseObject; import lombok.Data; +import java.sql.Types; + @MappingEntity(value = "t_testseq",jdbcDao = "jdbcDao1") @Data public class TestSequence extends BaseObject { @@ -12,7 +14,7 @@ public class TestSequence extends BaseObject { private Long id; private String name; private String code; - @MappingField(datatype = "blob") + @MappingField(datatype = Types.BLOB) private byte[] picture; //column not exists private String addition; diff --git a/dataming/src/main/java/com/robin/dataming/smile/utils/SmileUtils.java b/dataming/src/main/java/com/robin/dataming/smile/utils/SmileUtils.java index 33b91813..9d6c1f19 100644 --- a/dataming/src/main/java/com/robin/dataming/smile/utils/SmileUtils.java +++ b/dataming/src/main/java/com/robin/dataming/smile/utils/SmileUtils.java @@ -50,25 +50,25 @@ public static List parseTuples(DataCollectionMeta colMeta, IResourceItera private static DataType wrapDataType(DataSetColumnMeta columnMeta){ DataType type=null; switch (columnMeta.getColumnType()){ - case Const.META_TYPE_BIGINT: + case LONG: type= DataTypes.LongType; break; - case Const.META_TYPE_INTEGER: + case INTEGER: type=DataTypes.IntegerType; break; - case Const.META_TYPE_DOUBLE: + case DOUBLE: type=DataTypes.DoubleType; break; - case Const.META_TYPE_DECIMAL: + case DECIMAL: type=DataTypes.DecimalType; break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: type=DataTypes.TimeType; break; - case Const.META_TYPE_SHORT: + case SHORT: type=DataTypes.ShortType; break; - case Const.META_TYPE_STRING: + case STRING: if(CollectionUtils.isEmpty(columnMeta.getNominalValues())) { type = DataTypes.StringType; }else{ diff --git a/dataming/src/main/java/com/robin/dataming/spark/algorithm/AbstractSparkModeler.java b/dataming/src/main/java/com/robin/dataming/spark/algorithm/AbstractSparkModeler.java index 8b46c8a4..2e204b9c 100644 --- a/dataming/src/main/java/com/robin/dataming/spark/algorithm/AbstractSparkModeler.java +++ b/dataming/src/main/java/com/robin/dataming/spark/algorithm/AbstractSparkModeler.java @@ -124,17 +124,17 @@ private StructType getSchema(DataCollectionMeta collectionMeta){ StructType type=new StructType(); for(int i=0;i configMap=new HashMap<>(); diff --git a/dataming/src/test/java/com/robin/dataming/smile/DBSCANTest.java b/dataming/src/test/java/com/robin/dataming/smile/DBSCANTest.java index 6918f20f..e452b4db 100644 --- a/dataming/src/test/java/com/robin/dataming/smile/DBSCANTest.java +++ b/dataming/src/test/java/com/robin/dataming/smile/DBSCANTest.java @@ -23,10 +23,10 @@ public static void main(String[] args){ meta.setFileFormat(Const.FILESUFFIX_CSV); meta.setPath("file:///e:/iris.csv"); //"erwidth","banlength","banwidth","class" - meta.addColumnMeta("erlength", Const.META_TYPE_DOUBLE,null); - meta.addColumnMeta("erwidth", Const.META_TYPE_DOUBLE,null); - meta.addColumnMeta("banlength", Const.META_TYPE_DOUBLE,null); - meta.addColumnMeta("banwidth", Const.META_TYPE_DOUBLE,null); + meta.addColumnMeta("erlength", Const.CLASSTYPE.DOUBLE,null); + meta.addColumnMeta("erwidth", Const.CLASSTYPE.DOUBLE,null); + meta.addColumnMeta("banlength", Const.CLASSTYPE.DOUBLE,null); + meta.addColumnMeta("banwidth", Const.CLASSTYPE.DOUBLE,null); try(IResourceIterator iterator= TextFileIteratorFactory.getProcessIteratorByType(meta)){ DBSCANModeler modeler=new DBSCANModeler(meta,iterator); diff --git a/dataming/src/test/java/com/robin/dataming/smile/DecisionTreeTest.java b/dataming/src/test/java/com/robin/dataming/smile/DecisionTreeTest.java index 50944f48..a0d216c2 100644 --- a/dataming/src/test/java/com/robin/dataming/smile/DecisionTreeTest.java +++ b/dataming/src/test/java/com/robin/dataming/smile/DecisionTreeTest.java @@ -27,11 +27,11 @@ public static void main(String[] args) { meta.setFileFormat(Const.FILESUFFIX_CSV); meta.setPath("file:///e:/iris.csv"); //"erwidth","banlength","banwidth","class" - meta.addColumnMeta("erlength", Const.META_TYPE_DOUBLE, null); - meta.addColumnMeta("erwidth", Const.META_TYPE_DOUBLE, null); - meta.addColumnMeta("banlength", Const.META_TYPE_DOUBLE, null); - meta.addColumnMeta("banwidth", Const.META_TYPE_DOUBLE, null); - DataSetColumnMeta columnMeta=meta.createColumnMeta("label",Const.META_TYPE_STRING,null); + meta.addColumnMeta("erlength", Const.CLASSTYPE.DOUBLE, null); + meta.addColumnMeta("erwidth", Const.CLASSTYPE.DOUBLE, null); + meta.addColumnMeta("banlength", Const.CLASSTYPE.DOUBLE, null); + meta.addColumnMeta("banwidth", Const.CLASSTYPE.DOUBLE, null); + DataSetColumnMeta columnMeta=meta.createColumnMeta("label", Const.CLASSTYPE.STRING,null); columnMeta.setNominalValues(Lists.newArrayList(new String[]{"setosa", "versicolor","virginica"})); meta.addColumnMeta(columnMeta); try(IResourceIterator iterator= TextFileIteratorFactory.getProcessIteratorByType(meta)){ diff --git a/estool/src/main/java/com/robin/es/service/ESRepositoryService.java b/estool/src/main/java/com/robin/es/service/ESRepositoryService.java index 0b1ca80a..135cdf11 100644 --- a/estool/src/main/java/com/robin/es/service/ESRepositoryService.java +++ b/estool/src/main/java/com/robin/es/service/ESRepositoryService.java @@ -17,7 +17,6 @@ import com.robin.es.util.BaseObjectWrapper; import com.robin.es.util.CommEsQueryUtils; import org.apache.commons.lang3.tuple.Pair; -import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; @@ -38,7 +37,6 @@ import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.index.reindex.BulkByScrollResponse; import org.elasticsearch.index.reindex.DeleteByQueryRequest; import org.elasticsearch.search.SearchHit; @@ -52,7 +50,6 @@ import java.io.IOException; import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.*; @@ -516,23 +513,23 @@ protected boolean createSchema() { } private String getType(FieldContent content) { - String columnType = AnnotationRetriever.getFieldType(content); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(content); String esType = null; switch (columnType) { - case Const.META_TYPE_FLOAT: + case FLOAT: esType = "float"; break; - case Const.META_TYPE_DOUBLE: + case DOUBLE: esType = "double"; break; - case Const.META_TYPE_SHORT: + case SHORT: esType = "short"; break; - case Const.META_TYPE_BIGINT: + case LONG: esType = "long"; break; - case Const.META_TYPE_DATE: - case Const.META_TYPE_TIMESTAMP: + case DATE: + case TIMESTAMP: esType = "date"; //paramMap.put("format", "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"); break; diff --git a/estool/src/main/java/com/robin/es/util/CommEsQueryUtils.java b/estool/src/main/java/com/robin/es/util/CommEsQueryUtils.java index ca851ed3..22f24382 100644 --- a/estool/src/main/java/com/robin/es/util/CommEsQueryUtils.java +++ b/estool/src/main/java/com/robin/es/util/CommEsQueryUtils.java @@ -233,23 +233,23 @@ private static void wrapBuilderByType(FieldType fieldType, BoolQueryBuilder quer - private static FieldType getByFieldType(String columnType) { + private static FieldType getByFieldType(Const.CLASSTYPE columnType) { FieldType type = FieldType.Auto; switch (columnType) { - case Const.META_TYPE_BIGINT: + case LONG: type = FieldType.Long; break; - case Const.META_TYPE_FLOAT: + case FLOAT: type = FieldType.Double; break; - case Const.META_TYPE_INTEGER: + case INTEGER: type = FieldType.Integer; break; - case Const.META_TYPE_SHORT: + case SHORT: type = FieldType.Short; break; - case Const.META_TYPE_DATE: - case Const.META_TYPE_TIMESTAMP: + case DATE: + case TIMESTAMP: type = FieldType.Date; break; } @@ -331,20 +331,20 @@ private static Object parseValue(FieldType fieldType, String value) { return value; } - public static Object parseValue(@NonNull String columnType, String value) { + public static Object parseValue(@NonNull Const.CLASSTYPE columnType, String value) { Object retVal = null; if (!ObjectUtils.isEmpty(value)) { switch (columnType) { - case Const.META_TYPE_DOUBLE: + case DOUBLE: retVal = Double.valueOf(value); break; - case Const.META_TYPE_INTEGER: + case INTEGER: retVal = Integer.valueOf(value); break; - case Const.META_TYPE_BIGINT: + case LONG: retVal = Long.valueOf(value); break; - case Const.META_TYPE_FLOAT: + case FLOAT: retVal = Float.valueOf(value); break; default: @@ -356,7 +356,7 @@ public static Object parseValue(@NonNull String columnType, String value) { public static void getCondition(BoolQueryBuilder queryBuilders, FieldContent content, Const.OPERATOR operator, Object[] value) { String columnName = content.getPropertyName(); - String columnType = AnnotationRetriever.getFieldType(content); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(content); Assert.isTrue(value!=null && value.length>1,""); switch (operator) { case GE: diff --git a/estool/src/main/java/com/robin/es/util/MongoQueryUtils.java b/estool/src/main/java/com/robin/es/util/MongoQueryUtils.java index 80a4081f..faae2fa0 100644 --- a/estool/src/main/java/com/robin/es/util/MongoQueryUtils.java +++ b/estool/src/main/java/com/robin/es/util/MongoQueryUtils.java @@ -11,7 +11,7 @@ public class MongoQueryUtils { public static Bson getCondition(FieldContent content, Const.OPERATOR operator, Object[] value) { String columnName = content.getPropertyName(); - String columnType = AnnotationRetriever.getFieldType(content); + Const.CLASSTYPE columnType = AnnotationRetriever.getFieldType(content); Assert.isTrue(value!=null && value.length>1,""); Bson filter=null; switch (operator) { diff --git a/etl/src/main/java/com/robin/etl/cdc/MySqlBinLogScanner.java b/etl/src/main/java/com/robin/etl/cdc/MySqlBinLogScanner.java index cf7762f1..e8abd37b 100644 --- a/etl/src/main/java/com/robin/etl/cdc/MySqlBinLogScanner.java +++ b/etl/src/main/java/com/robin/etl/cdc/MySqlBinLogScanner.java @@ -13,7 +13,7 @@ import com.robin.core.base.datameta.DataBaseParam; import com.robin.core.base.exception.OperationNotSupportException; import com.robin.core.fileaccess.meta.DataCollectionMeta; -import com.robin.core.fileaccess.writer.AbstractQueueWriter; +import com.robin.comm.resaccess.writer.AbstractQueueWriter; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; diff --git a/etl/src/main/java/com/robin/etl/common/EtlConstant.java b/etl/src/main/java/com/robin/etl/common/EtlConstant.java index 1ee476bb..8caaff61 100644 --- a/etl/src/main/java/com/robin/etl/common/EtlConstant.java +++ b/etl/src/main/java/com/robin/etl/common/EtlConstant.java @@ -1,5 +1,6 @@ package com.robin.etl.common; + import java.util.Arrays; import java.util.List; @@ -57,9 +58,63 @@ public Integer getInt(){ return Integer.valueOf(this.value); } } + public enum AGGERATION{ + SUM("SUM"), + AVG("AVG"), + MAX("MAX"), + MIN("MIN"), + COUNT("COUNT"); + private String value; + AGGERATION(String value){this.value=value;} + + public String getValue() { + return value; + } + public static AGGERATION forName(String name){ + for(AGGERATION s: AGGERATION.values()){ + if(s.getValue().equalsIgnoreCase(name)){ + return s; + } + } + return null; + } + } + public static final String FILESTORAGETYPE="cloud.storageType"; public static final String FLOWPARAM="flowParam"; public static final String CYCLEPARAM="cycleType"; + public static final String PARAM_EXPRESSIONS="expressions"; + public static final String PARAM_REVERSEPOLAND="reversePoland"; + public static final String PARAM_SCRIPTENGINE="scriptEngine"; + public static final String PARAM_COALEASE_NAME="coalease.name"; + public static final String PARAM_COALEASE_TYPE="coalease.type"; + public static final String PARAM_COALEASE_REMOVEFIELDS="coalease.removeFields"; + public static final String PARAM_COALEASE_INPUTFIEDLS="coalease.inputFields"; + public static final String PARAM_SQL_SELECT="db.selectSql"; + public static final String PARAM_SQL_PARAMETER="db.sqlParameters"; + public static final String PARAM_DB_HOST="db.hostName"; + public static final String PARAM_DB_PORT="db.port"; + public static final String PARAM_DB_DATABASENAME="db.databaseName"; + public static final String PARAM_DB_JDBCURL="db.jdbcUrl"; + public static final String PARAM_DB_USER="db.username"; + public static final String PARAM_DB_PASSWORD="db.password"; + public static final String PARAM_DB_TYPE="db.type"; + public static final String PARAM_DATASOURCE_ID="dataSourceId"; + public static final String PARAM_STORAGE_TYPE="storageType"; + public static final String PARAM_STORAGE_PARAMETERS="storageParameters"; + public static final String PARAM_FLUSHOUT_PATH="flushOutPath"; + public static final String PARAM_FILTER_SQL="filterSql"; + public static final String PARAM_INPUT_PATH="inputPath"; + public static final String PARAM_DATAMETA_DEFINE="dataMetaDefine"; + public static final String PARAM_FLUSHOUT_COLUMNS="flushOutColumns"; + public static final String PARAM_DATASET_ID="dataSetId"; + public static final String PARAM_MAPPING_FIELDS="mappingFields"; + public static final String PARAM_GROUPBY_FIELDS="groupByFields"; + public static final String PARAM_AGGREGATES="aggregates"; + public static final String AGG_COUNT_FIELD="$AGGCOUNTFIELD"; + public static final String PARAM_INPUTSOURCEMETA = "$inputMeta"; + + public static final List WORKNODECMDPARAM= Arrays.asList(new String[]{"command","operation","jobId","taskId","deplayTs"}); public static final List MASTERNODECMDPARAM= Arrays.asList(new String[]{"command","operation","jobId","taskId","deplayTs","status"}); diff --git a/etl/src/main/java/com/robin/etl/context/StatefulJobContext.java b/etl/src/main/java/com/robin/etl/context/StatefulJobContext.java index 0e6989d5..3bfcbdec 100644 --- a/etl/src/main/java/com/robin/etl/context/StatefulJobContext.java +++ b/etl/src/main/java/com/robin/etl/context/StatefulJobContext.java @@ -15,6 +15,6 @@ public class StatefulJobContext { private DataCollectionMeta outputMeta; private DataCollectionMeta workingMeta; private Long outputSourceId; - private Map jobParam; + private Map jobParam; } diff --git a/etl/src/main/java/com/robin/etl/context/StepContext.java b/etl/src/main/java/com/robin/etl/context/StepContext.java index 1b363ca2..902f0ddb 100644 --- a/etl/src/main/java/com/robin/etl/context/StepContext.java +++ b/etl/src/main/java/com/robin/etl/context/StepContext.java @@ -3,6 +3,7 @@ import com.robin.core.fileaccess.meta.DataCollectionMeta; import lombok.Data; +import java.util.HashMap; import java.util.Map; @Data @@ -10,7 +11,7 @@ public class StepContext { private String jobId; private Long stepId; private String taskId; - private Map taskParam; + private Map taskParam=new HashMap<>(); private DataCollectionMeta inputMeta; private DataCollectionMeta outputMeta; private Integer stepType; diff --git a/etl/src/main/java/com/robin/etl/meta/model/EtlFlowCfg.java b/etl/src/main/java/com/robin/etl/meta/model/EtlFlowCfg.java index 9ecaddfe..19577cb3 100644 --- a/etl/src/main/java/com/robin/etl/meta/model/EtlFlowCfg.java +++ b/etl/src/main/java/com/robin/etl/meta/model/EtlFlowCfg.java @@ -1,5 +1,6 @@ package com.robin.etl.meta.model; +import com.robin.core.base.annotation.LogicColumn; import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.annotation.MappingField; import com.robin.core.base.model.BaseObject; @@ -8,7 +9,7 @@ import java.sql.Timestamp; @Data -@MappingEntity("t_flow_cfg") +@MappingEntity(value = "t_flow_cfg") public class EtlFlowCfg extends BaseObject { @MappingField(primary=true,increment=true) private Long id; @@ -18,8 +19,7 @@ public class EtlFlowCfg extends BaseObject { private String remark; @MappingField private String version; - @MappingField - private String isValid; + @MappingField private String status; @MappingField @@ -32,17 +32,16 @@ public class EtlFlowCfg extends BaseObject { private Timestamp modifyTime; @MappingField private String defineXml; - @MappingField(length=1) + @LogicColumn private String state; private Integer cycleType; private String triggerType; private String triggerTime; - private String runInterval; + private String cronTrigger; @MappingField private Integer priority; - @MappingField - private String stepDefinition; + } diff --git a/etl/src/main/java/com/robin/etl/meta/model/EtlStepCfg.java b/etl/src/main/java/com/robin/etl/meta/model/EtlStepCfg.java index 3d7ca076..ffd159d2 100644 --- a/etl/src/main/java/com/robin/etl/meta/model/EtlStepCfg.java +++ b/etl/src/main/java/com/robin/etl/meta/model/EtlStepCfg.java @@ -1,26 +1,30 @@ package com.robin.etl.meta.model; +import com.robin.core.base.annotation.LogicColumn; import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.annotation.MappingField; import com.robin.core.base.model.BaseObject; import lombok.Data; @Data -@MappingEntity("t_step_cfg") +@MappingEntity(value = "t_step_cfg") public class EtlStepCfg extends BaseObject { @MappingField(primary = true, increment = true) private Long id; @MappingField private Long flowId; @MappingField - private Long funcId; - @MappingField - private Long transId; + private String funcId; + private Long subFlowId; + @MappingField("p_step_id") + private Long parentStepId; @MappingField private String name; @MappingField private Long resourceId; + @LogicColumn + private String status; } diff --git a/etl/src/main/java/com/robin/etl/meta/model/EtlStepCondition.java b/etl/src/main/java/com/robin/etl/meta/model/EtlStepCondition.java index 0b14c934..0a275971 100644 --- a/etl/src/main/java/com/robin/etl/meta/model/EtlStepCondition.java +++ b/etl/src/main/java/com/robin/etl/meta/model/EtlStepCondition.java @@ -15,7 +15,7 @@ public class EtlStepCondition extends BaseObject { @MappingField private Long parentStepId; @MappingField - private Long subStepId; + private Long stepId; @MappingField private Short hasCondition; @MappingField diff --git a/etl/src/main/java/com/robin/etl/meta/model/EtlStepParam.java b/etl/src/main/java/com/robin/etl/meta/model/EtlStepParam.java index 8c059293..2625afd0 100644 --- a/etl/src/main/java/com/robin/etl/meta/model/EtlStepParam.java +++ b/etl/src/main/java/com/robin/etl/meta/model/EtlStepParam.java @@ -1,5 +1,6 @@ package com.robin.etl.meta.model; +import com.robin.core.base.annotation.LogicColumn; import com.robin.core.base.annotation.MappingEntity; import com.robin.core.base.annotation.MappingField; import com.robin.core.base.model.BaseObject; @@ -9,7 +10,7 @@ * @author robinjim * @version 1.0 */ -@MappingEntity("t_step_param") +@MappingEntity(value = "t_step_param") @Data public class EtlStepParam extends BaseObject { @MappingField(primary = true,increment = true) @@ -22,7 +23,7 @@ public class EtlStepParam extends BaseObject { private String paramName; @MappingField private String paramValue; - + @LogicColumn private String status; diff --git a/etl/src/main/java/com/robin/etl/meta/service/EtlFlowCfgService.java b/etl/src/main/java/com/robin/etl/meta/service/EtlFlowCfgService.java index 0a6cd56e..87e3f551 100644 --- a/etl/src/main/java/com/robin/etl/meta/service/EtlFlowCfgService.java +++ b/etl/src/main/java/com/robin/etl/meta/service/EtlFlowCfgService.java @@ -1,11 +1,14 @@ package com.robin.etl.meta.service; import com.google.common.collect.Maps; +import com.robin.core.base.exception.ServiceException; import com.robin.core.base.service.BaseAnnotationJdbcService; import com.robin.core.base.util.Const; import com.robin.etl.common.EtlConstant; +import com.robin.etl.meta.dto.JobConfiguration; import com.robin.etl.meta.model.*; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.ArrayList; @@ -25,59 +28,43 @@ public class EtlFlowCfgService extends BaseAnnotationJdbcService getCfgConfig(Long flowId) { + public JobConfiguration getCfgConfig(Long flowId) { Map retMap = new HashMap<>(); + JobConfiguration configuration=new JobConfiguration(); try { EtlFlowCfg cfg = getEntity(flowId); - retMap.put(EtlConstant.CYCLEPARAM, cfg.getCycleType()); + Assert.notNull(cfg,"flow "+flowId+" does not exists!"); + configuration.setFlowCfg(cfg); List flowParamList = etlFlowParamService.queryByField("flowId", Const.OPERATOR.EQ, flowId); List stepCfgs = etlStepCfgService.queryByField("flowId", Const.OPERATOR.EQ, flowId); List stepParams = etlStepParamService.queryByField("flowId", Const.OPERATOR.EQ, flowId); - Map> stepCfgMap = stepCfgs.stream().collect(Collectors.groupingBy(EtlStepCfg::getId)); + Map> stepCfgMap = stepCfgs.stream().collect(Collectors.groupingBy(EtlStepCfg::getParentStepId)); + Map> relayStepMap = stepCfgs.stream().collect(Collectors.groupingBy(EtlStepCfg::getId)); + Map> stepParamsMap = stepParams.stream().collect(Collectors.groupingBy(EtlStepParam::getStepId)); List conditions = etlStepConditionService.queryByField("flowId", Const.OPERATOR.EQ, flowId); - Map> parentMap = conditions.stream().collect(Collectors.groupingBy(EtlStepCondition::getId)); - Map> childrelationMap = new HashMap<>(); + Map> parentMap = conditions.stream().collect(Collectors.groupingBy(EtlStepCondition::getParentStepId)); + Map> currerntMap = conditions.stream().collect(Collectors.groupingBy(EtlStepCondition::getStepId)); Map cfgParam = Maps.newHashMap(); flowParamList.forEach(f -> { cfgParam.put(f.getParamName(), f.getParamValue()); }); - retMap.put("flowParam", cfgParam); - retMap.put("stepCfgs", stepCfgMap); - retMap.put("stepParamsMap", stepParamsMap); - - conditions.forEach(f -> { - if (null == f.getParentStepId()) { - if (childrelationMap.containsKey("NULL")) { - childrelationMap.get("NULL").add(f); - } else { - List list = new ArrayList<>(); - list.add(f); - childrelationMap.put("NULL", list); - } - } else { - if (childrelationMap.containsKey(f.getParentStepId().toString())) { - childrelationMap.get(f.getParentStepId()).add(f); - } else { - List list = new ArrayList<>(); - list.add(f); - childrelationMap.put(f.getParentStepId().toString(), list); - } - } - }); - retMap.put("stepConditions", parentMap); - retMap.put("relationMap", childrelationMap); + configuration.setPublicParameters(cfgParam); + configuration.setNextSteps(stepCfgMap); + configuration.setRelaySteps(relayStepMap); + configuration.setNextStepConditions(parentMap); + configuration.setRelayStepConditions(currerntMap); + configuration.setStepParameters(stepParamsMap); //adjust rootNode - EtlStepCondition rootNode = parentMap.get("NULL").get(0); + EtlStepCfg rootNode = stepCfgMap.get(0L).get(0); if (null != rootNode) { retMap.put("rootNode", rootNode); } - - } catch (Exception ex) { - + throw new ServiceException(ex); } - return retMap; + return configuration; } + } diff --git a/example/boot-example/src/main/java/com/robin/basis/controller/frameset/DataMappingContoller.java b/example/boot-example/src/main/java/com/robin/basis/controller/frameset/DataMappingContoller.java index f93622cf..3985296e 100644 --- a/example/boot-example/src/main/java/com/robin/basis/controller/frameset/DataMappingContoller.java +++ b/example/boot-example/src/main/java/com/robin/basis/controller/frameset/DataMappingContoller.java @@ -154,7 +154,7 @@ public Map listField(HttpServletRequest request, HttpServletResp Map map = new HashMap<>(); String columnName = meta1.getColumnName(); map.put("columnName", meta1.getColumnName()); - map.put("columnType", meta1.getColumnType().toString()); + map.put("columnType", meta1.getColumnType().getValue()); columnName = columnName.replace("-", "").replaceAll("_", "").replaceAll("$", ""); map.put("propName", columnName); map.put("propType", ""); diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/AbstractCloudStorageFileSystemAccessor.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/AbstractCloudStorageFileSystemAccessor.java index d41d219e..0f05c4a2 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/AbstractCloudStorageFileSystemAccessor.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/AbstractCloudStorageFileSystemAccessor.java @@ -10,6 +10,7 @@ import org.springframework.util.ObjectUtils; import java.io.*; +import java.util.List; import java.util.Map; /** @@ -106,4 +107,14 @@ protected String getContentType(DataCollectionMeta meta) { public abstract InputStream getObject(String bucketName, String objectName); public abstract boolean createBucket(String name, Map paramMap, Map retMap) throws Exception; + + @Override + public List listPath(String inputPath) throws Exception { + return null; + } + + @Override + public boolean isDirectory(String inputPath) throws Exception { + return true; + } } diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/HdfsFileSystemAccessor.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/HdfsFileSystemAccessor.java index 4ee78a62..066335ca 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/HdfsFileSystemAccessor.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/HdfsFileSystemAccessor.java @@ -10,6 +10,7 @@ import org.slf4j.LoggerFactory; import java.io.*; +import java.util.List; /** * Singleton HDFS FileSystem Accessor,using defaultName as key @@ -134,4 +135,14 @@ public long getInputStreamSize(String resourcePath) throws IOException { throw new IOException(ex); } } + + @Override + public List listPath(String inputPath) throws Exception { + return hdfsUtil.listFile(inputPath); + } + + @Override + public boolean isDirectory(String inputPath) throws Exception { + return hdfsUtil.isDirectory(inputPath); + } } diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/MinioFileSystemAccessor.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/MinioFileSystemAccessor.java index bb0accd1..c30d6094 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/MinioFileSystemAccessor.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/fs/MinioFileSystemAccessor.java @@ -8,12 +8,11 @@ import com.robin.core.base.util.ResourceConst; import com.robin.core.fileaccess.meta.DataCollectionMeta; import com.robin.dfs.minio.MinioUtils; -import io.minio.BucketExistsArgs; -import io.minio.MakeBucketArgs; -import io.minio.MinioAsyncClient; +import io.minio.*; import io.minio.admin.MinioAdminClient; import io.minio.admin.QuotaUnit; import io.minio.admin.UserInfo; +import io.minio.messages.Item; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import okhttp3.OkHttpClient; @@ -25,6 +24,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Map; /** @@ -183,6 +185,19 @@ public boolean setPolicy(Map paramMap) throws Exception{ return true; } + @Override + public List listPath(String inputPath) throws Exception { + Iterable> iterable= client.listObjects(ListObjectsArgs.builder().bucket(bucketName).region(region).prefix(inputPath).build()); + List retList=new ArrayList<>(); + if(!iterable.iterator().hasNext()){ + Iterator> iterator=iterable.iterator(); + while (iterator.hasNext()){ + retList.add(iterator.next().get().objectName()); + } + } + return retList; + } + public static class Builder{ private MinioFileSystemAccessor accessor; public Builder(){ diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ArrowFileIterator.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ArrowFileIterator.java index 555a811e..c8bfda15 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ArrowFileIterator.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ArrowFileIterator.java @@ -9,7 +9,6 @@ import org.apache.arrow.memory.BufferAllocator; import org.apache.arrow.memory.RootAllocator; import org.apache.arrow.vector.*; -import org.apache.arrow.vector.compression.CompressionCodec; import org.apache.arrow.vector.ipc.ArrowStreamReader; import org.apache.arrow.vector.types.pojo.Field; import org.apache.arrow.vector.types.pojo.Schema; @@ -94,25 +93,25 @@ protected void pullNext() { ex.printStackTrace(); } } - public void wrapValue(Field field, String columnName, String columnType, int row, Map valueMap) throws UnsupportedEncodingException { + public void wrapValue(Field field, String columnName, Const.CLASSTYPE columnType, int row, Map valueMap) throws UnsupportedEncodingException { FieldVector vectors=currentBatch.getVector(field); if(IntVector.class.isAssignableFrom(vectors.getClass())){ IntVector intVector=(IntVector) vectors; - if(Const.META_TYPE_INTEGER.equals(columnType)){ + if(Const.CLASSTYPE.INTEGER.equals(columnType)){ valueMap.put(columnName,intVector.get(row)); - }else if(Const.META_TYPE_BIGINT.equals(columnType)){ + }else if(Const.CLASSTYPE.LONG.equals(columnType)){ valueMap.put(columnName,intVector.getValueAsLong(row)); } }else if(BigIntVector.class.isAssignableFrom(vectors.getClass())){ BigIntVector bVector=(BigIntVector) vectors; - if(Const.META_TYPE_INTEGER.equals(columnType)){ + if(Const.CLASSTYPE.INTEGER.equals(columnType)){ valueMap.put(columnName,Integer.valueOf(String.valueOf(bVector.get(row)))); - }else if(Const.META_TYPE_BIGINT.equals(columnType)){ + }else if(Const.CLASSTYPE.LONG.equals(columnType)){ valueMap.put(columnName,bVector.getValueAsLong(row)); } }else if(TimeStampVector.class.isAssignableFrom(vectors.getClass())){ valueMap.put(columnName,new Timestamp(((TimeStampVector)vectors).get(row))); - }else if(Const.META_TYPE_STRING.equals(columnType)){ + }else if(Const.CLASSTYPE.STRING.equals(columnType)){ valueMap.put(columnName,new String(((VarCharVector)vectors).get(row),"utf-8")); } } diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetFileIterator.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetFileIterator.java index 01256d29..798a0a05 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetFileIterator.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetFileIterator.java @@ -54,10 +54,8 @@ import java.nio.channels.ReadableByteChannel; import java.nio.file.Paths; import java.sql.Timestamp; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.NoSuchElementException; import java.util.stream.Collectors; import static org.apache.parquet.filter2.predicate.FilterApi.*; @@ -303,101 +301,101 @@ private FilterPredicate parseOperator(String columnName, SqlKind operator, Objec } switch (operator) { case GREATER_THAN: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = gt(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = gt(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = gt(longColumn(columnName), Long.parseLong(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case GREATER_THAN_OR_EQUAL: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = gtEq(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = gtEq(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = gtEq(longColumn(columnName), Long.parseLong(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case EQUALS: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = eq(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = eq(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = eq(longColumn(columnName), Long.parseLong(value.toString())); - } else if (Const.META_TYPE_STRING.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.STRING.equals(meta.getColumnType())) { predicate = eq(binaryColumn(columnName), Binary.fromString(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case LESS_THAN: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = lt(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = lt(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = lt(longColumn(columnName), Long.parseLong(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case LESS_THAN_OR_EQUAL: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = ltEq(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = ltEq(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = ltEq(longColumn(columnName), Long.parseLong(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case NOT_EQUALS: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = notEq(intColumn(columnName), Integer.parseInt(value.toString())); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = notEq(doubleColumn(columnName), Double.parseDouble(value.toString())); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = notEq(longColumn(columnName), Long.parseLong(value.toString())); } else { throw new OperationNotSupportException("type not support"); } break; case IN: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = in(intColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Integer::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = in(doubleColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Double::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = in(longColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Long::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_STRING.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.STRING.equals(meta.getColumnType())) { predicate = in(binaryColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Binary::fromString).collect(Collectors.toList()))); } else { throw new OperationNotSupportException("type not support"); } break; case NOT_IN: - if (Const.META_TYPE_INTEGER.equals(meta.getColumnType())) { + if (Const.CLASSTYPE.INTEGER.equals(meta.getColumnType())) { predicate = notIn(intColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Integer::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_DOUBLE.equals(meta.getColumnType()) || Const.META_TYPE_DECIMAL.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.DOUBLE.equals(meta.getColumnType()) || Const.CLASSTYPE.DECIMAL.equals(meta.getColumnType())) { predicate = notIn(doubleColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Double::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_BIGINT.equals(meta.getColumnType()) || Const.META_TYPE_TIMESTAMP.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.LONG.equals(meta.getColumnType()) || Const.CLASSTYPE.TIMESTAMP.equals(meta.getColumnType())) { predicate = notIn(longColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Long::valueOf).collect(Collectors.toList()))); - } else if (Const.META_TYPE_STRING.equals(meta.getColumnType())) { + } else if (Const.CLASSTYPE.STRING.equals(meta.getColumnType())) { predicate = notIn(binaryColumn(columnName), Sets.newHashSet(super.segment.getInPartMap().get(columnName).stream().map(Binary::fromString).collect(Collectors.toList()))); } else { throw new OperationNotSupportException("type not support"); } break; case LIKE: - if (Const.META_TYPE_STRING.equals(meta.getColumnType())){ + if (Const.CLASSTYPE.STRING.equals(meta.getColumnType())){ predicate=FilterApi.userDefined(FilterApi.binaryColumn(columnName),new CharLikePredicate(value.toString())); }else { throw new OperationNotSupportException("type not support"); diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetReaderUtil.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetReaderUtil.java index d592ecbf..7b531b7b 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetReaderUtil.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ParquetReaderUtil.java @@ -9,22 +9,22 @@ public class ParquetReaderUtil { private ParquetReaderUtil(){ } - public static String parseColumnType(PrimitiveType type){ - String rettype= Const.META_TYPE_STRING; + public static Const.CLASSTYPE parseColumnType(PrimitiveType type){ + Const.CLASSTYPE rettype= Const.CLASSTYPE.STRING; if(type.getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT32)){ - rettype=Const.META_TYPE_INTEGER; + rettype= Const.CLASSTYPE.INTEGER; }else if(type.getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT64)){ if(LogicalTypeAnnotation.dateType().equals(type.getLogicalTypeAnnotation()) || LogicalTypeAnnotation.timestampType(true, LogicalTypeAnnotation.TimeUnit.MILLIS).equals(type.getLogicalTypeAnnotation())){ - rettype=Const.META_TYPE_TIMESTAMP; + rettype= Const.CLASSTYPE.TIMESTAMP; }else { - rettype = Const.META_TYPE_BIGINT; + rettype = Const.CLASSTYPE.LONG; } }else if(type.getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.DOUBLE)){ - rettype=Const.META_TYPE_DOUBLE; + rettype= Const.CLASSTYPE.DOUBLE; }else if(type.getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.FLOAT)){ - rettype=Const.META_TYPE_DOUBLE; + rettype= Const.CLASSTYPE.DOUBLE; }else if(type.getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT96)){ - rettype=Const.META_TYPE_TIMESTAMP; + rettype= Const.CLASSTYPE.TIMESTAMP; } return rettype; } diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ProtoBufFileIterator.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ProtoBufFileIterator.java index 29017e9f..6f44dab2 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ProtoBufFileIterator.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/iterator/ProtoBufFileIterator.java @@ -68,11 +68,13 @@ protected void pullNext() { } else { message = null; } - if (message == null) { + /* if (message == null) { throw new NoSuchElementException(""); - } - for (Descriptors.FieldDescriptor descriptor : container.getSchema().getMessageDescriptor(colmeta.getValueClassName()).getFields()) { - cachedValue.put(descriptor.getName(), message.getField(descriptor)); + }*/ + if(message!=null) { + for (Descriptors.FieldDescriptor descriptor : container.getSchema().getMessageDescriptor(colmeta.getValueClassName()).getFields()) { + cachedValue.put(descriptor.getName(), message.getField(descriptor)); + } } } catch (Exception ex) { diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ArrowSchemaUtils.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ArrowSchemaUtils.java index e1971553..f51b84e2 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ArrowSchemaUtils.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ArrowSchemaUtils.java @@ -25,20 +25,20 @@ public static Schema getSchema(DataCollectionMeta colmeta){ for(DataSetColumnMeta meta:colmeta.getColumnList()){ switch (meta.getColumnType()){ - case Const.META_TYPE_INTEGER: + case INTEGER: fieldList.add(new Field(meta.getColumnName(), FieldType.nullable(new ArrowType.Int(32,true)),null)); break; - case Const.META_TYPE_BIGINT: + case LONG: fieldList.add(new Field(meta.getColumnName(), FieldType.nullable(new ArrowType.Int(64,true)),null)); break; - case Const.META_TYPE_FLOAT: - case Const.META_TYPE_DOUBLE: + case FLOAT: + case DOUBLE: fieldList.add(new Field(meta.getColumnName(), FieldType.nullable(new ArrowType.Decimal(30,1)),null)); break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: fieldList.add(new Field(meta.getColumnName(), FieldType.nullable(new ArrowType.Timestamp(TimeUnit.MILLISECOND,"utc")),null)); break; - case Const.META_TYPE_STRING: + case STRING: fieldList.add(new Field(meta.getColumnName(), FieldType.nullable(new ArrowType.Utf8()),null)); break; default: diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/OrcUtil.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/OrcUtil.java index bdd5eaa3..f00f8c42 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/OrcUtil.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/OrcUtil.java @@ -34,34 +34,33 @@ public static TypeDescription getSchema(DataCollectionMeta colmeta){ continue; } switch (columnMeta.getColumnType()){ - case Const.META_TYPE_SHORT: + case SHORT: schema.addField(columnMeta.getColumnName(),TypeDescription.createShort()); break; - case Const.META_TYPE_INTEGER: + case INTEGER: schema.addField(columnMeta.getColumnName(),TypeDescription.createInt()); break; - case Const.META_TYPE_NUMERIC: - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_FLOAT: + case NUMERIC: + case DOUBLE: + case FLOAT: schema.addField(columnMeta.getColumnName(),TypeDescription.createDouble()); break; - case Const.META_TYPE_DECIMAL: + case DECIMAL: schema.addField(columnMeta.getColumnName(),TypeDescription.createDecimal()); break; - case Const.META_TYPE_BIGINT: + case LONG: schema.addField(columnMeta.getColumnName(),TypeDescription.createLong()); break; - case Const.META_TYPE_DATE: + case DATE: schema.addField(columnMeta.getColumnName(),TypeDescription.createDate()); break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: schema.addField(columnMeta.getColumnName(),TypeDescription.createTimestamp()); break; - case Const.META_TYPE_STRING: + case STRING: schema.addField(columnMeta.getColumnName(),TypeDescription.createString()); break; - case Const.META_TYPE_BINARY: - case Const.META_TYPE_BLOB: + case BLOB: schema.addField(columnMeta.getColumnName(),TypeDescription.createBinary()); break; default: @@ -192,24 +191,24 @@ private static Pair returnType(DataSetColumnMeta colu Object targetVal=null; try { switch (columnMeta.getColumnType()) { - case Const.META_TYPE_INTEGER: - case Const.META_TYPE_BIGINT: + case INTEGER: + case LONG: type = PredicateLeaf.Type.LONG; targetVal = Long.parseLong(value.toString()); break; - case Const.META_TYPE_DOUBLE: + case DOUBLE: type = PredicateLeaf.Type.FLOAT; targetVal =Double.parseDouble(value.toString()); break; - case Const.META_TYPE_DECIMAL: + case DECIMAL: type = PredicateLeaf.Type.DECIMAL; targetVal =new HiveDecimalWritable(HiveDecimal.create(Double.parseDouble(value.toString()))); break; - case Const.META_TYPE_DATE: + case DATE: type = PredicateLeaf.Type.DATE; targetVal = Long.parseLong(value.toString()); break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: type = PredicateLeaf.Type.TIMESTAMP; if(Timestamp.class.isAssignableFrom(value.getClass())){ targetVal= value; @@ -229,16 +228,16 @@ private static Pair returnType(DataSetColumnMeta colu private static Object returnWithType(DataSetColumnMeta columnMeta,Object value){ Object targetVal=null; switch (columnMeta.getColumnType()) { - case Const.META_TYPE_INTEGER: - case Const.META_TYPE_BIGINT: + case INTEGER: + case LONG: targetVal = Long.parseLong(value.toString()); break; - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_DECIMAL: + case DOUBLE: + case DECIMAL: targetVal = Double.parseDouble(value.toString()); break; - case Const.META_TYPE_DATE: - case Const.META_TYPE_TIMESTAMP: + case DATE: + case TIMESTAMP: targetVal = new Timestamp(Long.parseLong(value.toString())); break; default: @@ -253,38 +252,38 @@ public static Schema parseSchemaByType(TypeDescription schema,DataCollectionMeta } return AvroUtils.getSchemaFromMeta(colmeta); } - private static String parseFromCategory(TypeDescription.Category category){ - String columnType=Const.META_TYPE_STRING; + private static Const.CLASSTYPE parseFromCategory(TypeDescription.Category category){ + Const.CLASSTYPE columnType= Const.CLASSTYPE.STRING; switch (category){ case LONG: - columnType= Const.META_TYPE_BIGINT; + columnType= Const.CLASSTYPE.LONG; break; case INT: - columnType=Const.META_TYPE_INTEGER; + columnType= Const.CLASSTYPE.INTEGER; break; case FLOAT: - columnType=Const.META_TYPE_FLOAT; + columnType= Const.CLASSTYPE.FLOAT; break; case SHORT: - columnType=Const.META_TYPE_SHORT; + columnType= Const.CLASSTYPE.SHORT; break; case DOUBLE: case DECIMAL: - columnType=Const.META_TYPE_DOUBLE; + columnType= Const.CLASSTYPE.DOUBLE; break; case DATE: - columnType=Const.META_TYPE_DATE; + columnType= Const.CLASSTYPE.DATE; break; case TIMESTAMP: case TIMESTAMP_INSTANT: - columnType=Const.META_TYPE_TIMESTAMP; + columnType= Const.CLASSTYPE.TIMESTAMP; break; case VARCHAR: case STRING: - columnType=Const.META_TYPE_STRING; + columnType= Const.CLASSTYPE.STRING; break; case BINARY: - columnType=Const.META_TYPE_BLOB; + columnType= Const.CLASSTYPE.BLOB; break; } return columnType; diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ParquetUtil.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ParquetUtil.java index 613b55d8..ebee0e85 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ParquetUtil.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ParquetUtil.java @@ -337,32 +337,31 @@ public static MessageType genSchema(DataCollectionMeta colmeta) { Types.MessageTypeBuilder builder = Types.buildMessage(); for (DataSetColumnMeta columnMeta : colmeta.getColumnList()) { switch (columnMeta.getColumnType()) { - case Const.META_TYPE_SHORT: + case SHORT: builder.optional(PrimitiveType.PrimitiveTypeName.INT32).as(OriginalType.INT_16).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_INTEGER: + case INTEGER: builder.optional(PrimitiveType.PrimitiveTypeName.INT32).as(OriginalType.INT_32).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_FLOAT: + case FLOAT: builder.optional(PrimitiveType.PrimitiveTypeName.FLOAT).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_DOUBLE: - case Const.META_TYPE_DECIMAL: + case DOUBLE: + case DECIMAL: builder.optional(PrimitiveType.PrimitiveTypeName.DOUBLE).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_BIGINT: + case LONG: builder.optional(PrimitiveType.PrimitiveTypeName.INT64).as(OriginalType.INT_64).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_DATE: + case DATE: break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: builder.optional(PrimitiveType.PrimitiveTypeName.INT64).as(OriginalType.TIMESTAMP_MILLIS).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_STRING: + case STRING: builder.optional(PrimitiveType.PrimitiveTypeName.BINARY).as(OriginalType.UTF8).named(columnMeta.getColumnName()); break; - case Const.META_TYPE_BINARY: - case Const.META_TYPE_BLOB: + case BLOB: builder.optional(PrimitiveType.PrimitiveTypeName.BINARY).named(columnMeta.getColumnName()); break; default: diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ProtoBufUtil.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ProtoBufUtil.java index 106047b4..0f1ab12a 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ProtoBufUtil.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/util/ProtoBufUtil.java @@ -18,21 +18,21 @@ public class ProtoBufUtil { public static String translateType(DataSetColumnMeta column) { String retStr = ""; - if(column.getColumnType().equals(Const.META_TYPE_INTEGER)){ + if(column.getColumnType().equals(Const.CLASSTYPE.INTEGER)){ retStr="int32"; - } else if (column.getColumnType().equals(Const.META_TYPE_BIGINT)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.LONG)) { retStr = "int64"; - } else if (column.getColumnType().equals(Const.META_TYPE_DOUBLE)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.DOUBLE)) { retStr = "double"; - } else if (column.getColumnType().equals(Const.META_TYPE_NUMERIC)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.NUMERIC)) { retStr = "float"; - } else if (column.getColumnType().equals(Const.META_TYPE_TIMESTAMP)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.TIMESTAMP)) { retStr = "int64"; - } else if (column.getColumnType().equals(Const.META_TYPE_BOOLEAN)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.BOOLEAN)) { retStr = "bool"; - } else if (column.getColumnType().equals(Const.META_TYPE_STRING) ||column.getColumnType().equals(Const.META_TYPE_CLOB)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.STRING) ||column.getColumnType().equals(Const.CLASSTYPE.CLOB)) { retStr = "string"; - } else if (column.getColumnType().equals(Const.META_TYPE_BINARY) || column.getColumnType().equals(Const.META_TYPE_BLOB)) { + } else if (column.getColumnType().equals(Const.CLASSTYPE.BLOB)) { retStr = "byte"; } return retStr; diff --git a/hadooptool/src/main/java/com/robin/comm/fileaccess/writer/ArrowFileWriter.java b/hadooptool/src/main/java/com/robin/comm/fileaccess/writer/ArrowFileWriter.java index fec5157b..d45c687c 100644 --- a/hadooptool/src/main/java/com/robin/comm/fileaccess/writer/ArrowFileWriter.java +++ b/hadooptool/src/main/java/com/robin/comm/fileaccess/writer/ArrowFileWriter.java @@ -5,7 +5,6 @@ import com.robin.core.base.util.Const; import com.robin.core.fileaccess.meta.DataCollectionMeta; import com.robin.core.fileaccess.meta.DataSetColumnMeta; -import com.robin.core.fileaccess.util.ResourceUtil; import com.robin.core.fileaccess.writer.AbstractFileWriter; import org.apache.arrow.compression.CommonsCompressionFactory; import org.apache.arrow.memory.BufferAllocator; @@ -123,19 +122,19 @@ public void writeValue(Field field, DataSetColumnMeta meta, int row, Map map) throws IOException, OperationNo for (int i = 0; i < colmeta.getColumnList().size(); i++) { DataSetColumnMeta columnMeta = colmeta.getColumnList().get(i); if (StringUtils.isEmpty(columnMeta.getColumnType()) || Objects.isNull(map.get(columnMeta.getColumnName()))) { - if (!columnMeta.getColumnType().equals(Const.META_TYPE_STRING)) { + if (!columnMeta.getColumnType().equals(Const.CLASSTYPE.STRING)) { continue; } else { ((BytesColumnVector) batch.cols[i]).setVal(row, "".getBytes()); } } switch (columnMeta.getColumnType()) { - case Const.META_TYPE_INTEGER: + case INTEGER: ((LongColumnVector) batch.cols[i]).vector[row] = Integer.valueOf(map.get(columnMeta.getColumnName()).toString()); break; - case Const.META_TYPE_SHORT: + case SHORT: ((LongColumnVector) batch.cols[i]).vector[row] = Short.valueOf(map.get(columnMeta.getColumnName()).toString()); break; - case Const.META_TYPE_BIGINT: + case LONG: ((LongColumnVector) batch.cols[i]).vector[row] = Long.valueOf(map.get(columnMeta.getColumnName()).toString()); break; - case Const.META_TYPE_DOUBLE: + case DOUBLE: ((DoubleColumnVector) batch.cols[i]).vector[row] = Double.valueOf(map.get(columnMeta.getColumnName()).toString()); break; - case Const.META_TYPE_DECIMAL: + case DECIMAL: BigDecimal decimal = new BigDecimal(Double.valueOf(map.get(columnMeta.getColumnName()).toString())); if (columnMeta.getScale() > 0) { - decimal.setScale(columnMeta.getScale(), BigDecimal.ROUND_DOWN); + decimal.setScale(columnMeta.getScale(), RoundingMode.DOWN); } HiveDecimal decimal1 = HiveDecimal.create(decimal); if (columnMeta.getScale() > 0) { - decimal1.setScale(columnMeta.getScale()); + decimal1.setScale(columnMeta.getScale(),HiveDecimal.ROUND_CEILING); } ((DecimalColumnVector) batch.cols[i]).vector[row] = new HiveDecimalWritable(decimal1); break; - case Const.META_TYPE_DATE: + case DATE: if (Date.class.isAssignableFrom(map.get(columnMeta.getColumnName()).getClass())) { ((LongColumnVector) batch.cols[i]).vector[row] = (((Date) map.get(columnMeta.getColumnName())).getTime()); } else if (java.sql.Date.class.isAssignableFrom(map.get(columnMeta.getColumnName()).getClass())) { @@ -173,22 +174,21 @@ public void writeRecord(Map map) throws IOException, OperationNo ((LongColumnVector) batch.cols[i]).vector[row] = (Long.valueOf(map.get(columnMeta.getColumnName()).toString())); } break; - case Const.META_TYPE_TIMESTAMP: + case TIMESTAMP: if (Timestamp.class.isAssignableFrom(map.get(columnMeta.getColumnName()).getClass())) { ((TimestampColumnVector) batch.cols[i]).set(row, (Timestamp) map.get(columnMeta.getColumnName())); } else if (Long.class.isAssignableFrom(map.get(columnMeta.getColumnName()).getClass())) { ((TimestampColumnVector) batch.cols[i]).set(row, new Timestamp(Long.valueOf(map.get(columnMeta.getColumnName()).toString()))); } break; - case Const.META_TYPE_STRING: + case STRING: if (!StringUtils.isEmpty(map.get(columnMeta.getColumnName()))) { ((BytesColumnVector) batch.cols[i]).setVal(row, map.get(columnMeta.getColumnName()).toString().getBytes()); } else { ((BytesColumnVector) batch.cols[i]).setVal(row, "".getBytes()); } break; - case Const.META_TYPE_BINARY: - case Const.META_TYPE_BLOB: + case BLOB: ((BytesColumnVector) batch.cols[i]).setVal(row, (byte[]) map.get(columnMeta.getColumnName())); break; default: diff --git a/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/AbstractQueueIterator.java b/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/AbstractQueueIterator.java index fcc5ed30..f984bac7 100644 --- a/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/AbstractQueueIterator.java +++ b/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/AbstractQueueIterator.java @@ -6,7 +6,6 @@ import com.robin.comm.fileaccess.util.ProtoBufUtil; import com.robin.core.base.exception.OperationNotSupportException; import com.robin.core.base.util.ResourceConst; -import com.robin.core.convert.util.ConvertUtil; import com.robin.core.fileaccess.fs.AbstractFileSystemAccessor; import com.robin.core.fileaccess.iterator.AbstractResIterator; import com.robin.core.fileaccess.meta.DataCollectionMeta; diff --git a/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/KafkaIterator.java b/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/KafkaIterator.java index 920b4b42..945eeaea 100644 --- a/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/KafkaIterator.java +++ b/hadooptool/src/main/java/com/robin/comm/resaccess/iterator/KafkaIterator.java @@ -4,7 +4,6 @@ import com.robin.core.base.util.Const; import com.robin.core.base.util.ResourceConst; import com.robin.core.fileaccess.meta.DataCollectionMeta; -import com.robin.core.fileaccess.util.AvroUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.kafka.clients.consumer.ConsumerConfig; diff --git a/hadooptool/src/test/java/com/robin/test/OffHeapMapTest.java b/hadooptool/src/test/java/com/robin/test/OffHeapMapTest.java index 287c605b..0b293ad5 100644 --- a/hadooptool/src/test/java/com/robin/test/OffHeapMapTest.java +++ b/hadooptool/src/test/java/com/robin/test/OffHeapMapTest.java @@ -20,13 +20,13 @@ public class OffHeapMapTest { @Test public void testSerialAndUnSerial(){ DataCollectionMeta.Builder builder=new DataCollectionMeta.Builder(); - builder.addColumn("id", Const.META_TYPE_BIGINT,null); - builder.addColumn("name",Const.META_TYPE_STRING,null); - builder.addColumn("description",Const.META_TYPE_STRING,null); - builder.addColumn("sno",Const.META_TYPE_INTEGER,null); - builder.addColumn("price",Const.META_TYPE_DOUBLE,null); - builder.addColumn("amount",Const.META_TYPE_INTEGER,null); - builder.addColumn("type",Const.META_TYPE_INTEGER,null); + builder.addColumn("id", Const.CLASSTYPE.LONG,null); + builder.addColumn("name",Const.CLASSTYPE.STRING,null); + builder.addColumn("description",Const.CLASSTYPE.STRING,null); + builder.addColumn("sno",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("price",Const.CLASSTYPE.DOUBLE,null); + builder.addColumn("amount",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("type",Const.CLASSTYPE.INTEGER,null); DataCollectionMeta colmeta=builder.build(); Map recMap = new HashMap<>(); diff --git a/hadooptool/src/test/java/com/robin/test/TestCloudStorage.java b/hadooptool/src/test/java/com/robin/test/TestCloudStorage.java index fd0cd2a1..8edac96c 100644 --- a/hadooptool/src/test/java/com/robin/test/TestCloudStorage.java +++ b/hadooptool/src/test/java/com/robin/test/TestCloudStorage.java @@ -40,13 +40,13 @@ public void testDeleteMinion() throws Exception{ @Test public void testWriteToMinio(){ DataCollectionMeta.Builder builder=new DataCollectionMeta.Builder(); - builder.addColumn("id", Const.META_TYPE_BIGINT,null); - builder.addColumn("name",Const.META_TYPE_STRING,null); - builder.addColumn("description",Const.META_TYPE_STRING,null); - builder.addColumn("sno",Const.META_TYPE_INTEGER,null); - builder.addColumn("price",Const.META_TYPE_DOUBLE,null); - builder.addColumn("amount",Const.META_TYPE_INTEGER,null); - builder.addColumn("type",Const.META_TYPE_INTEGER,null); + builder.addColumn("id", Const.CLASSTYPE.LONG,null); + builder.addColumn("name",Const.CLASSTYPE.STRING,null); + builder.addColumn("description",Const.CLASSTYPE.STRING,null); + builder.addColumn("sno",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("price",Const.CLASSTYPE.DOUBLE,null); + builder.addColumn("amount",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("type",Const.CLASSTYPE.INTEGER,null); builder.resourceCfg(ResourceConst.PARQUETFILEFORMAT,ResourceConst.PARQUETSUPPORTFORMAT.PROTOBUF.getValue()).fileFormat(Const.FILEFORMATSTR.PROTOBUF.getValue()) .resPath("file:///f:/bigdata4.proto").resourceCfg("protocol",Const.VFS_PROTOCOL.FTP.getValue()).fsType(Const.FILESYSTEM.LOCAL.getValue()) @@ -116,16 +116,16 @@ public void testRead(){ @Test public static void testWriteStAX() { ExcelSheetProp.Builder newBuilder = ExcelSheetProp.Builder.newBuilder(); - newBuilder.addColumnProp(new ExcelColumnProp("name", "name", Const.META_TYPE_STRING, false)); - newBuilder.addColumnProp(new ExcelColumnProp("time", "time", Const.META_TYPE_TIMESTAMP, false)); - newBuilder.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.META_TYPE_INTEGER, false)); - newBuilder.addColumnProp(new ExcelColumnProp("dval", "dval", Const.META_TYPE_DOUBLE, false)); - newBuilder.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.META_TYPE_DOUBLE, false)); - newBuilder.addColumnProp(new ExcelColumnProp("diff", "diff", Const.META_TYPE_FORMULA, "(D{P}-E{P})/C{P}")); + newBuilder.addColumnProp(new ExcelColumnProp("name", "name", Const.CLASSTYPE.STRING, false)); + newBuilder.addColumnProp(new ExcelColumnProp("time", "time", Const.CLASSTYPE.TIMESTAMP, false)); + newBuilder.addColumnProp(new ExcelColumnProp("intcol", "intcol", Const.CLASSTYPE.INTEGER, false)); + newBuilder.addColumnProp(new ExcelColumnProp("dval", "dval", Const.CLASSTYPE.DOUBLE, false)); + newBuilder.addColumnProp(new ExcelColumnProp("dval2", "dval2", Const.CLASSTYPE.DOUBLE, false)); + newBuilder.addColumnProp(new ExcelColumnProp("diff", "diff", Const.CLASSTYPE.FORMULA, "(D{P}-E{P})/C{P}")); DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - builder.addColumn("name", Const.META_TYPE_STRING).addColumn("time", Const.META_TYPE_TIMESTAMP) - .addColumn("intcol", Const.META_TYPE_INTEGER).addColumn("dval", Const.META_TYPE_DOUBLE) - .addColumn("dval2", Const.META_TYPE_DOUBLE).addColumn("diff", Const.META_TYPE_DOUBLE) + builder.addColumn("name", Const.CLASSTYPE.STRING).addColumn("time", Const.CLASSTYPE.TIMESTAMP) + .addColumn("intcol", Const.CLASSTYPE.INTEGER).addColumn("dval", Const.CLASSTYPE.DOUBLE) + .addColumn("dval2", Const.CLASSTYPE.DOUBLE).addColumn("diff", Const.CLASSTYPE.DOUBLE) .resourceCfg(Const.COLUMN_XLSX_MULTIPLESHEETS,"true") .fileFormat(Const.FILEFORMATSTR.XLSX.getValue()).resPath("tmp/test.xlsx"); DataCollectionMeta meta = builder.build(); @@ -156,13 +156,13 @@ public static void testWriteStAX() { @Test public void testReadFromMinio() throws Exception{ DataCollectionMeta.Builder builder=new DataCollectionMeta.Builder(); - builder.addColumn("id",Const.META_TYPE_BIGINT,null); - builder.addColumn("name",Const.META_TYPE_STRING,null); - builder.addColumn("description",Const.META_TYPE_STRING,null); - builder.addColumn("sno",Const.META_TYPE_INTEGER,null); - builder.addColumn("price",Const.META_TYPE_DOUBLE,null); - builder.addColumn("amount",Const.META_TYPE_INTEGER,null); - builder.addColumn("type",Const.META_TYPE_INTEGER,null); + builder.addColumn("id",Const.CLASSTYPE.LONG,null); + builder.addColumn("name",Const.CLASSTYPE.STRING,null); + builder.addColumn("description",Const.CLASSTYPE.STRING,null); + builder.addColumn("sno",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("price",Const.CLASSTYPE.DOUBLE,null); + builder.addColumn("amount",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("type",Const.CLASSTYPE.INTEGER,null); builder.resourceCfg(ResourceConst.PARQUETFILEFORMAT,ResourceConst.PARQUETSUPPORTFORMAT.AVRO.getValue()) //.resourceCfg(ResourceConst.STORAGEFILTERSQL,"select name,sno,type,price*amount as totalFee from test where price*amount>500 and sno<7 and name like 'A%'") @@ -203,11 +203,11 @@ public void uploadFile(){ @Test public void test1(){ DataCollectionMeta.Builder builder=new DataCollectionMeta.Builder(); - builder.addColumn("id",Const.META_TYPE_BIGINT,null); - builder.addColumn("name",Const.META_TYPE_STRING,null); - builder.addColumn("description",Const.META_TYPE_STRING,null); - builder.addColumn("sno",Const.META_TYPE_INTEGER,null); - builder.addColumn("price",Const.META_TYPE_DOUBLE,null); + builder.addColumn("id",Const.CLASSTYPE.LONG,null); + builder.addColumn("name",Const.CLASSTYPE.STRING,null); + builder.addColumn("description",Const.CLASSTYPE.STRING,null); + builder.addColumn("sno",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("price",Const.CLASSTYPE.DOUBLE,null); FilterSqlParser.FilterSqlResult result= FilterSqlParser.doParse(builder.build(),"id>4097 and price*4>500 and name like 'A%'"); Map valueMap=new HashMap<>(); valueMap.put("id",5000); diff --git a/hadooptool/src/test/java/com/robin/test/TestParquetWriter.java b/hadooptool/src/test/java/com/robin/test/TestParquetWriter.java index ed6acda6..983c9016 100644 --- a/hadooptool/src/test/java/com/robin/test/TestParquetWriter.java +++ b/hadooptool/src/test/java/com/robin/test/TestParquetWriter.java @@ -39,13 +39,13 @@ public static void main(String[] args) { Connection conn=null; try { DataCollectionMeta colmeta = new DataCollectionMeta(); - colmeta.addColumnMeta("id", Const.META_TYPE_BIGINT, null); - colmeta.addColumnMeta("device_id", Const.META_TYPE_STRING, null); - colmeta.addColumnMeta("route_no", Const.META_TYPE_BIGINT, null); - colmeta.addColumnMeta("from_station", Const.META_TYPE_INTEGER, null); - colmeta.addColumnMeta("to_station", Const.META_TYPE_INTEGER, null); - colmeta.addColumnMeta("predict_value", Const.META_TYPE_INTEGER, null); - colmeta.addColumnMeta("predict_time", Const.META_TYPE_TIMESTAMP, null); + colmeta.addColumnMeta("id", Const.CLASSTYPE.LONG, null); + colmeta.addColumnMeta("device_id", Const.CLASSTYPE.STRING, null); + colmeta.addColumnMeta("route_no", Const.CLASSTYPE.LONG, null); + colmeta.addColumnMeta("from_station", Const.CLASSTYPE.INTEGER, null); + colmeta.addColumnMeta("to_station", Const.CLASSTYPE.INTEGER, null); + colmeta.addColumnMeta("predict_value", Const.CLASSTYPE.INTEGER, null); + colmeta.addColumnMeta("predict_time", Const.CLASSTYPE.TIMESTAMP, null); colmeta.setPath("/tmp/luoming/out.parquet.snappy"); colmeta.setFileFormat(Const.FILETYPE_PARQUET); conn= SimpleJdbcDao.getConnection(meta); diff --git a/hadooptool/src/test/java/com/robin/test/TestProtobufWriter.java b/hadooptool/src/test/java/com/robin/test/TestProtobufWriter.java index d80e567b..1ae5d869 100644 --- a/hadooptool/src/test/java/com/robin/test/TestProtobufWriter.java +++ b/hadooptool/src/test/java/com/robin/test/TestProtobufWriter.java @@ -36,10 +36,10 @@ public void testInsert(){ try(Connection connection= SimpleJdbcDao.getConnection(meta)) { //List columnMetaList= DataBaseUtil.getTableMetaByTableName(connection,"t_sys_code","nrd_server_dev",BaseDataBaseMeta.TYPE_MYSQL); DataCollectionMeta colmeta = new DataCollectionMeta(); - colmeta.addColumnMeta("id", Const.META_TYPE_INTEGER,null); - colmeta.addColumnMeta("cs_id",Const.META_TYPE_INTEGER,null); - colmeta.addColumnMeta("item_name",Const.META_TYPE_STRING,null); - colmeta.addColumnMeta("item_value",Const.META_TYPE_STRING,null); + colmeta.addColumnMeta("id", Const.CLASSTYPE.INTEGER,null); + colmeta.addColumnMeta("cs_id",Const.CLASSTYPE.INTEGER,null); + colmeta.addColumnMeta("item_name",Const.CLASSTYPE.STRING,null); + colmeta.addColumnMeta("item_value",Const.CLASSTYPE.STRING,null); colmeta.setEncode("UTF-8"); colmeta.setFileFormat(Const.FILESUFFIX_PROTOBUF); @@ -75,10 +75,10 @@ public boolean executeAdditionalOperation(Map map, ResultSetMeta @Test public void testRead(){ DataCollectionMeta colmeta = new DataCollectionMeta(); - colmeta.addColumnMeta("id", Const.META_TYPE_INTEGER,null); - colmeta.addColumnMeta("cs_id",Const.META_TYPE_INTEGER,null); - colmeta.addColumnMeta("item_name",Const.META_TYPE_STRING,null); - colmeta.addColumnMeta("item_value",Const.META_TYPE_STRING,null); + colmeta.addColumnMeta("id", Const.CLASSTYPE.INTEGER,null); + colmeta.addColumnMeta("cs_id",Const.CLASSTYPE.INTEGER,null); + colmeta.addColumnMeta("item_name",Const.CLASSTYPE.STRING,null); + colmeta.addColumnMeta("item_value",Const.CLASSTYPE.STRING,null); colmeta.setPath("d:/tmp/luoming/1.proto"); try{ IResourceIterator iterator= TextFileIteratorFactory.getProcessIteratorByPath(colmeta,new FileInputStream("d:/tmp/luoming/1.proto")); diff --git a/hadooptool/src/test/java/com/robin/test/TestResourceGen.java b/hadooptool/src/test/java/com/robin/test/TestResourceGen.java index 82708e7c..1b4eb54e 100644 --- a/hadooptool/src/test/java/com/robin/test/TestResourceGen.java +++ b/hadooptool/src/test/java/com/robin/test/TestResourceGen.java @@ -44,10 +44,10 @@ public static void main(String[] args){ Pair pair=null; try{ DataCollectionMeta colmeta=new DataCollectionMeta(); - colmeta.addColumnMeta("infoId",Const.META_TYPE_BIGINT,null); - colmeta.addColumnMeta("url",Const.META_TYPE_STRING,null); - colmeta.addColumnMeta("title",Const.META_TYPE_STRING,null); - colmeta.addColumnMeta("content",Const.META_TYPE_STRING,null); + colmeta.addColumnMeta("infoId",Const.CLASSTYPE.LONG,null); + colmeta.addColumnMeta("url",Const.CLASSTYPE.STRING,null); + colmeta.addColumnMeta("title",Const.CLASSTYPE.STRING,null); + colmeta.addColumnMeta("content",Const.CLASSTYPE.STRING,null); conn=SimpleJdbcDao.getConnection(meta); List> list=SimpleJdbcDao.queryString(conn, "select config_name as name,config_value as value from t_hadoop_cluster_config where cluster_id=4"); conn=SimpleJdbcDao.getConnection(meta1); diff --git a/hadooptool/src/test/java/com/robin/test/TestResourceReadWrite.java b/hadooptool/src/test/java/com/robin/test/TestResourceReadWrite.java index d70e5608..51fc344f 100644 --- a/hadooptool/src/test/java/com/robin/test/TestResourceReadWrite.java +++ b/hadooptool/src/test/java/com/robin/test/TestResourceReadWrite.java @@ -31,12 +31,12 @@ public void testWrite(){ BaseDataBaseMeta meta=DataBaseMetaFactory.getDataBaseMetaByType(BaseDataBaseMeta.TYPE_MYSQL, param); try(Connection conn=SimpleJdbcDao.getConnection(meta)){ DataCollectionMeta.Builder builder=new DataCollectionMeta.Builder(); - builder.addColumn("param_sn",Const.META_TYPE_INTEGER,null); - builder.addColumn("weixin_order_id",Const.META_TYPE_STRING,null); - builder.addColumn("open_id",Const.META_TYPE_STRING,null); - builder.addColumn("total_money",Const.META_TYPE_INTEGER,null); - builder.addColumn("subscribe_id",Const.META_TYPE_STRING,null); - builder.addColumn("product_name",Const.META_TYPE_STRING,null); + builder.addColumn("param_sn",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("weixin_order_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("open_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("total_money",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("subscribe_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("product_name",Const.CLASSTYPE.STRING,null); builder.resourceCfg("hostName", "127.0.0.1").resourceCfg("protocol", "ftp") .resourceCfg("file.useAvroEncode","true") @@ -87,12 +87,12 @@ public void testWrite(){ @Test public void testRead(){ DataCollectionMeta.Builder builder = new DataCollectionMeta.Builder(); - builder.addColumn("param_sn",Const.META_TYPE_INTEGER,null); - builder.addColumn("weixin_order_id",Const.META_TYPE_STRING,null); - builder.addColumn("open_id",Const.META_TYPE_STRING,null); - builder.addColumn("total_money",Const.META_TYPE_INTEGER,null); - builder.addColumn("subscribe_id",Const.META_TYPE_STRING,null); - builder.addColumn("product_name",Const.META_TYPE_STRING,null); + builder.addColumn("param_sn",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("weixin_order_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("open_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("total_money",Const.CLASSTYPE.INTEGER,null); + builder.addColumn("subscribe_id",Const.CLASSTYPE.STRING,null); + builder.addColumn("product_name",Const.CLASSTYPE.STRING,null); builder.resourceCfg("hostName", "127.0.0.1").resourceCfg("protocol", "ftp") .resourceCfg("port", 21).resourceCfg("userName", "test").resourceCfg("password", "test").fileFormat(Const.FILEFORMATSTR.PARQUET.getValue()) diff --git a/metadata/src/main/java/com/robin/meta/explore/SourceFileExplorer.java b/metadata/src/main/java/com/robin/meta/explore/SourceFileExplorer.java index 700a01d6..99e5a9dd 100644 --- a/metadata/src/main/java/com/robin/meta/explore/SourceFileExplorer.java +++ b/metadata/src/main/java/com/robin/meta/explore/SourceFileExplorer.java @@ -54,7 +54,7 @@ public static void exploreCsv(BufferedReader reader,DataCollectionMeta meta,Stri readHeader=ireader.getHeader(true); } List resultlist; - Map> typeMap=new HashMap<>(); + Map> typeMap=new HashMap<>(); Map> dateFormatMap=new HashMap<>(); while((resultlist=ireader.read())!=null && columnPos> typeMap=new HashMap<>(); + Map> typeMap=new HashMap<>(); Map> dateFormatMap=new HashMap<>(); List columns=new ArrayList<>(); try{ @@ -94,23 +94,23 @@ public static void exploreJson(BufferedReader reader,DataCollectionMeta meta,int log.error("",ex); } } - private static void adjustColumnTypeAndFormat(String[] columnNames,Map> typeMap,Map> dateFormatMap,DataCollectionMeta meta){ + private static void adjustColumnTypeAndFormat(String[] columnNames,Map> typeMap,Map> dateFormatMap,DataCollectionMeta meta){ for(String columnName:columnNames) { - List> sortList = CollectionsUtil.getSortedMapByLongValue(typeMap.get(columnName), false); + List> sortList = CollectionsUtil.getSortedMapByLongValue(Const.CLASSTYPE.class,typeMap.get(columnName), false); if(dateFormatMap.containsKey(columnName)){ - List> dateFormatList=CollectionsUtil.getSortedMapByLongValue(dateFormatMap.get(columnName),false); + List> dateFormatList=CollectionsUtil.getSortedMapByLongValue(String.class, dateFormatMap.get(columnName),false); meta.addColumnMeta(columnName,sortList.get(0).getKey(),null,false,dateFormatList.get(0).getKey()); }else{ //data with Same type if(sortList.size()==1){ meta.addColumnMeta(columnName,sortList.get(0).getKey(),null); }else{ - if(sortList.get(0).getKey().equals(Const.META_TYPE_INTEGER)){ + if(sortList.get(0).getKey().equals(Const.CLASSTYPE.INTEGER)){ //second large type contains less than 5 percent of primary type, skip secondary type if(sortList.get(1).getValue().doubleValue()/sortList.get(0).getValue().doubleValue()<=0.05){ meta.addColumnMeta(columnName,sortList.get(0).getKey(),null); }else{ - meta.addColumnMeta(columnName,Const.META_TYPE_NUMERIC,null); + meta.addColumnMeta(columnName, Const.CLASSTYPE.NUMERIC,null); } }else{ meta.addColumnMeta(columnName,sortList.get(0).getKey(),null); @@ -120,26 +120,26 @@ private static void adjustColumnTypeAndFormat(String[] columnNames,Map> dataTypeMap, Map> dateFomatMap){ - String type; + private static void getTypeByData(String targetValue,String columnName, Map> dataTypeMap, Map> dateFomatMap){ + Const.CLASSTYPE type; boolean isDate=false; if(NumberUtils.isDigits(targetValue) && !targetValue.contains(".")){ try{ Integer.parseInt(targetValue); - type=Const.META_TYPE_INTEGER; + type= Const.CLASSTYPE.INTEGER; }catch(Exception ex){ - type=Const.META_TYPE_BIGINT; + type= Const.CLASSTYPE.LONG; } addDataWithType(type,columnName, dataTypeMap); }else if(NumberUtils.isNumber(targetValue)){ - addDataWithType(Const.META_TYPE_DOUBLE,columnName, dataTypeMap); + addDataWithType(Const.CLASSTYPE.DOUBLE,columnName, dataTypeMap); } else { - if(!isDateWithType(columnName,normal_format, targetValue, "yyyy-MM-dd hh:mm:ss",dateFomatMap)){ - if(!isDateWithType(columnName,short_format, targetValue, "yyyyMMdd", dateFomatMap)){ - if(!isDateWithType(columnName,day_format, targetValue, "yyyy-MM-dd",dateFomatMap)){ - if(!isDateWithType(columnName,digital_format, targetValue, "yyyyMMddhhmmss", dateFomatMap)){ - if(isDateWithType(columnName,full_format, targetValue, "yyyy-MM-dd hh:mm:ss.SSS", dateFomatMap)){ + if(!isDateWithType(columnName,normal_format, targetValue, "yyyy-MM-dd hh:mm:ss",dataTypeMap,dateFomatMap)){ + if(!isDateWithType(columnName,short_format, targetValue, "yyyyMMdd",dataTypeMap, dateFomatMap)){ + if(!isDateWithType(columnName,day_format, targetValue, "yyyy-MM-dd",dataTypeMap,dateFomatMap)){ + if(!isDateWithType(columnName,digital_format, targetValue, "yyyyMMddhhmmss",dataTypeMap, dateFomatMap)){ + if(isDateWithType(columnName,full_format, targetValue, "yyyy-MM-dd hh:mm:ss.SSS",dataTypeMap, dateFomatMap)){ isDate=true; } }else{ @@ -155,18 +155,22 @@ private static void getTypeByData(String targetValue,String columnName, Map> dateFormatMap){ + private static boolean isDateWithType(String columnName, SimpleDateFormat format, String datastr, String formatstr,Map> typeMap, Map> dateFormatMap){ boolean isok=false; try{ if(format.parse(datastr)!=null && datastr.length()==formatstr.length()){ - addDataWithType(formatstr,columnName, dateFormatMap); + addDataWithType(Const.CLASSTYPE.DATE,columnName, typeMap); + Map map=new HashMap<>(); + map.put(formatstr,0L); + dateFormatMap.putIfAbsent(columnName,map); + dateFormatMap.get(columnName).put(formatstr,dateFormatMap.get(columnName).get(formatstr)+1); isok=true; } }catch(Exception ex){ @@ -174,20 +178,25 @@ private static boolean isDateWithType(String columnName, SimpleDateFormat format } return isok; } - - - private static void addDataWithType(String dbtype, String columnName, Map> typeMap){ - if(typeMap.containsKey(columnName)) { - if (!typeMap.get(columnName).containsKey(dbtype)) { - typeMap.get(columnName).put(dbtype, 1L); - } else { - typeMap.get(columnName).put(dbtype, typeMap.get(columnName).get(dbtype) + 1); + private static boolean isTimestampWithType(String columnName, SimpleDateFormat format, String datastr, String formatstr, Map> dateFormatMap){ + boolean isok=false; + try{ + if(format.parse(datastr)!=null && datastr.length()==formatstr.length()){ + addDataWithType(Const.CLASSTYPE.TIMESTAMP,columnName, dateFormatMap); + isok=true; } - }else{ - Map tmap=new HashMap<>(); - tmap.put(dbtype,1L); - typeMap.put(columnName,tmap); + }catch(Exception ex){ + } + return isok; + } + + + private static void addDataWithType(Const.CLASSTYPE dbtype, String columnName, Map> typeMap){ + Map tmap=new HashMap<>(); + tmap.put(dbtype,0L); + typeMap.putIfAbsent(columnName,tmap); + typeMap.get(columnName).put(dbtype, typeMap.get(columnName).get(dbtype) + 1); } public static final String getSpiltChar(String split){ String tmpSplit=split; diff --git a/metadata/src/main/java/com/robin/meta/service/resource/GlobalResourceService.java b/metadata/src/main/java/com/robin/meta/service/resource/GlobalResourceService.java index 445d7441..ee3b6a05 100644 --- a/metadata/src/main/java/com/robin/meta/service/resource/GlobalResourceService.java +++ b/metadata/src/main/java/com/robin/meta/service/resource/GlobalResourceService.java @@ -101,7 +101,7 @@ public DataCollectionMeta getResourceMetaDef(String keyword) { connection = SimpleJdbcDao.getConnection(meta); List columnList = DataBaseUtil.getTableMetaByTableName(connection, tableName, schema, meta.getDbType()); for (DataBaseColumnMeta columnmeta : columnList) { - colmeta.addColumnMeta(columnmeta.getColumnName(), columnmeta.getColumnType().toString(), null); + colmeta.addColumnMeta(columnmeta.getColumnName(), columnmeta.getColumnType(), null); } List pkList = DataBaseUtil.getAllPrimaryKeyByTableName(connection, tableName, schema); colmeta.setPkColumns(pkList); diff --git a/web/src/main/java/com/robin/core/web/controller/AbstractAutoController.java b/web/src/main/java/com/robin/core/web/controller/AbstractAutoController.java index 75c9ced3..9ff3ffc4 100644 --- a/web/src/main/java/com/robin/core/web/controller/AbstractAutoController.java +++ b/web/src/main/java/com/robin/core/web/controller/AbstractAutoController.java @@ -229,7 +229,7 @@ private FilterCondition getCondition(Map paramMap) throws SQLExce String key=entry.getKey(); Object value=entry.getValue(); if(contentMap.containsKey(key)){ - String columnType =columnMetaMap.containsKey(contentMap.get(key).getFieldName())? + Const.CLASSTYPE columnType =columnMetaMap.containsKey(contentMap.get(key).getFieldName())? columnMetaMap.get(contentMap.get(key).getFieldName()).getColumnType():columnMetaMap.get(contentMap.get(key).getFieldName().toUpperCase()).getColumnType(); if(Map.class.isInstance(value)){ Map tmap=(Map)value; From 3e6599fb22dc7f4c16c8d2996587526b8998b605 Mon Sep 17 00:00:00 2001 From: robinjim Date: Wed, 5 Aug 2026 14:36:16 +0800 Subject: [PATCH 3/3] Add logic Delete --- .../com/robin/core/base/annotation/LogicColumn.java | 13 +++++++++++++ .../robin/core/base/dao/util/TableLogicConfig.java | 10 ++++++++++ 2 files changed, 23 insertions(+) create mode 100644 core/src/main/java/com/robin/core/base/annotation/LogicColumn.java create mode 100644 core/src/main/java/com/robin/core/base/dao/util/TableLogicConfig.java diff --git a/core/src/main/java/com/robin/core/base/annotation/LogicColumn.java b/core/src/main/java/com/robin/core/base/annotation/LogicColumn.java new file mode 100644 index 00000000..0b354612 --- /dev/null +++ b/core/src/main/java/com/robin/core/base/annotation/LogicColumn.java @@ -0,0 +1,13 @@ +package com.robin.core.base.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface LogicColumn { + String value() default "1"; + String delval() default "0"; +} diff --git a/core/src/main/java/com/robin/core/base/dao/util/TableLogicConfig.java b/core/src/main/java/com/robin/core/base/dao/util/TableLogicConfig.java new file mode 100644 index 00000000..89d2df26 --- /dev/null +++ b/core/src/main/java/com/robin/core/base/dao/util/TableLogicConfig.java @@ -0,0 +1,10 @@ +package com.robin.core.base.dao.util; + +import lombok.Data; + +@Data +public class TableLogicConfig { + private String columnName; + private String validValue; + private String invalidValue; +}