From bc7d3f25277d5cf28180dfe18d24ad2fe1f205bf Mon Sep 17 00:00:00 2001 From: zhouhao Date: Fri, 15 Mar 2024 16:22:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/web/AuthorizedToken.java | 11 + .../web/crud/query/DefaultQueryHelper.java | 293 +++++++++--------- .../web/crud/query/QueryHelper.java | 2 +- .../web/crud/query/ToHumpMap.java | 18 ++ .../hswebframework/web/bean/CompareUtils.java | 8 +- 5 files changed, 182 insertions(+), 150 deletions(-) create mode 100644 hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/ToHumpMap.java diff --git a/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/AuthorizedToken.java b/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/AuthorizedToken.java index f53a74868..af9db38e3 100644 --- a/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/AuthorizedToken.java +++ b/hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/AuthorizedToken.java @@ -1,5 +1,6 @@ package org.hswebframework.web.authorization.basic.web; +import org.hswebframework.web.authorization.Authentication; import org.hswebframework.web.authorization.token.ParsedToken; /** @@ -14,6 +15,16 @@ public interface AuthorizedToken extends ParsedToken { */ String getUserId(); + /** + * 获取认证权限信息 + * + * @return Authentication + * @since 4.0.17 + */ + default Authentication getAuthentication() { + return null; + } + /** * @return 令牌有效期,单位毫秒,-1为长期有效 */ diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/DefaultQueryHelper.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/DefaultQueryHelper.java index b5262fb34..f1af6d81a 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/DefaultQueryHelper.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/DefaultQueryHelper.java @@ -79,7 +79,10 @@ public class DefaultQueryHelper implements QueryHelper { public NativeQuerySpec select(String sql, Supplier newInstance, Object... args) { - return new NativeQuerySpecImpl<>(this, sql, args, map -> FastBeanCopier.copy(map, newInstance), true); + NativeQuerySpecImpl impl = new NativeQuerySpecImpl<>( + this, sql, args, map -> FastBeanCopier.copy(map, newInstance), true); + impl.setMapBuilder(ToHumpMap::new); + return impl; } @Override @@ -100,22 +103,22 @@ public class DefaultQueryHelper implements QueryHelper { Table table = nameMapping.computeIfAbsent(type, this::parseTableName); if (StringUtils.hasText(table.schema())) { return database - .getMetadata() - .getSchema(table.schema()) - .flatMap(schema -> schema.getTableOrView(table.name(), false)) - .orElseThrow(() -> new UnsupportedOperationException("table [" + table.schema() + "." + table.name() + "] not found")); + .getMetadata() + .getSchema(table.schema()) + .flatMap(schema -> schema.getTableOrView(table.name(), false)) + .orElseThrow(() -> new UnsupportedOperationException("table [" + table.schema() + "." + table.name() + "] not found")); } return database - .getMetadata() - .getCurrentSchema() - .getTableOrView(table.name(), false) - .orElseThrow(() -> new UnsupportedOperationException("table [" + table.name() + "] not found")); + .getMetadata() + .getCurrentSchema() + .getTableOrView(table.name(), false) + .orElseThrow(() -> new UnsupportedOperationException("table [" + table.name() + "] not found")); } static RDBColumnMetadata getColumn(TableOrViewMetadata table, String column) { return table - .getColumn(column) - .orElseThrow(() -> new UnsupportedOperationException("column [" + column + "] not found in [" + table.getName() + "]")); + .getColumn(column) + .orElseThrow(() -> new UnsupportedOperationException("column [" + column + "] not found in [" + table.getName() + "]")); } Table parseTableName(Class type) { @@ -165,8 +168,8 @@ public class DefaultQueryHelper implements QueryHelper { if (col != null && !analyzer.columnIsExpression(column, context.getColumnIndex())) { Object val = col.metadata == null - ? getCodec().decode(context.getResult()) - : col.metadata.decode(context.getResult()); + ? getCodec().decode(context.getResult()) + : col.metadata.decode(context.getResult()); doWrap(instance, column, val); } else { doWrap(instance, col == null ? QueryHelperUtils.toHump(column) : col.alias, getCodec().decode(context.getResult())); @@ -186,12 +189,12 @@ public class DefaultQueryHelper implements QueryHelper { SqlRequest countSql = analyzer.refactorCount(param == null ? new QueryParamEntity() : param, args); return parent - .database - .sql() - .reactive() - .select(countSql, countWrapper) - .single(0) - .contextWrite(logContext); + .database + .sql() + .reactive() + .select(countSql, countWrapper) + .single(0) + .contextWrite(logContext); } @Override @@ -208,12 +211,12 @@ public class DefaultQueryHelper implements QueryHelper { request = createPagingSql(request, param.getPageIndex(), param.getPageSize()); } return parent - .database - .sql() - .reactive() - .select(request, this) - .map(mapper) - .contextWrite(logContext); + .database + .sql() + .reactive() + .select(request, this) + .map(mapper) + .contextWrite(logContext); } @Override @@ -228,10 +231,10 @@ public class DefaultQueryHelper implements QueryHelper { PrepareSqlFragments sql = PrepareSqlFragments.of(request.getSql(), request.getParameters()); Paginator paginator = parent - .database - .getMetadata() - .getCurrentSchema() - .findFeatureNow(RDBFeatureType.paginator.getId()); + .database + .getMetadata() + .getCurrentSchema() + .findFeatureNow(RDBFeatureType.paginator.getId()); return paginator.doPaging(sql, pageIndex, pageSize).toRequest(); } @@ -239,8 +242,8 @@ public class DefaultQueryHelper implements QueryHelper { @Override public Mono> fetchPaged(int pageIndex, int pageSize) { return fetchPaged(this.param == null - ? new QueryParamEntity().doPaging(pageIndex, pageSize) - : this.param.clone().doPaging(pageIndex, pageSize)); + ? new QueryParamEntity().doPaging(pageIndex, pageSize) + : this.param.clone().doPaging(pageIndex, pageSize)); } public Mono> fetchPaged(QueryParamEntity param) { @@ -251,43 +254,43 @@ public class DefaultQueryHelper implements QueryHelper { if (param.getTotal() != null) { return sqlExecutor - .select(createPagingSql(listSql, param.getPageIndex(), param.getPageSize()), this).map(mapper) - .collectList() - .map(list -> PagerResult.of(param.getTotal(), list, param)) - .contextWrite(logContext); + .select(createPagingSql(listSql, param.getPageIndex(), param.getPageSize()), this).map(mapper) + .collectList() + .map(list -> PagerResult.of(param.getTotal(), list, param)) + .contextWrite(logContext); } SqlRequest countSql = analyzer.refactorCount(param, args); if (param.isParallelPager()) { return Mono.zip(sqlExecutor - .select(countSql, countWrapper) - .single(0), + .select(countSql, countWrapper) + .single(0), sqlExecutor - .select(createPagingSql(listSql, param.getPageIndex(), param.getPageSize()), this) - .map(mapper) - .collectList(), + .select(createPagingSql(listSql, param.getPageIndex(), param.getPageSize()), this) + .map(mapper) + .collectList(), (total, list) -> PagerResult.of(total, list, param)) .contextWrite(logContext); } return sqlExecutor - .select(countSql, countWrapper) - .single(0) - .>flatMap(total -> { - QueryParamEntity copy = param.clone(); - copy.rePaging(total); - if (total == 0) { - return Mono.just(PagerResult.of(0, new ArrayList<>(), copy)); - } - return sqlExecutor - .select(createPagingSql(listSql, copy.getPageIndex(), copy.getPageSize()), this) - .map(mapper) - .collectList() - .map(list -> PagerResult.of(total, list, copy)); + .select(countSql, countWrapper) + .single(0) + .>flatMap(total -> { + QueryParamEntity copy = param.clone(); + copy.rePaging(total); + if (total == 0) { + return Mono.just(PagerResult.of(0, new ArrayList<>(), copy)); + } + return sqlExecutor + .select(createPagingSql(listSql, copy.getPageIndex(), copy.getPageSize()), this) + .map(mapper) + .collectList() + .map(list -> PagerResult.of(total, list, copy)); - }) - .contextWrite(logContext); + }) + .contextWrite(logContext); } } @@ -370,12 +373,12 @@ public class DefaultQueryHelper implements QueryHelper { String owner) { return table - .getColumns() - .stream() - .map(column -> Selects - .column(owner == null ? column.getName() : owner + "." + column.getName()) - .as(alias + "." + column.getAlias())) - .toArray(SelectColumnSupplier[]::new); + .getColumns() + .stream() + .map(column -> Selects + .column(owner == null ? column.getName() : owner + "." + column.getName()) + .as(alias + "." + column.getAlias())) + .toArray(SelectColumnSupplier[]::new); } JoinConditionalSpecImpl getJoin() { @@ -441,7 +444,7 @@ public class DefaultQueryHelper implements QueryHelper { @Override SelectColumnSupplier[] forSelect() { this.alias = this.alias != null ? - this.alias : MethodReferenceConverter.convertToColumn(setter); + this.alias : MethodReferenceConverter.convertToColumn(setter); if (column != null) { String[] nestMaybe = column.split("[.]"); @@ -534,9 +537,9 @@ public class DefaultQueryHelper implements QueryHelper { @Override public FromSpec from(Class clazz) { query = parent - .database - .dml() - .query(table = parent.getTable(from = clazz)); + .database + .dml() + .query(table = parent.getTable(from = clazz)); return this; } @@ -556,21 +559,21 @@ public class DefaultQueryHelper implements QueryHelper { operator.getParameter().setPageSize(null); operator.getParameter().setOrderBy(new ArrayList<>()); return operator - .select(Selects.count1().as("_total")) - .fetch(countWrapper) - .reactive() - .single(0) - .contextWrite(logContext); + .select(Selects.count1().as("_total")) + .fetch(countWrapper) + .reactive() + .single(0) + .contextWrite(logContext); } @Override public Flux fetch() { return createQuery() - .fetch(this) - .reactive() - .contextWrite(logContext) - .as(resultHandler); + .fetch(this) + .reactive() + .contextWrite(logContext) + .as(resultHandler); } @Override @@ -584,53 +587,53 @@ public class DefaultQueryHelper implements QueryHelper { @Override public Mono> fetchPaged(int pageIndex, int pageSize) { return fetchPaged(param != null - ? param.clone().doPaging(pageIndex, pageSize) - : new QueryParamEntity().doPaging(pageIndex, pageSize)); + ? param.clone().doPaging(pageIndex, pageSize) + : new QueryParamEntity().doPaging(pageIndex, pageSize)); } private Mono> fetchPaged(QueryParamEntity param) { if (param.getTotal() != null) { return createQuery() - .paging(param.getPageIndex(), param.getPageSize()) - .fetch(this) - .reactive() - .as(resultHandler) - .collectList() - .map(list -> PagerResult.of(param.getTotal(), list, param)) - .contextWrite(logContext); + .paging(param.getPageIndex(), param.getPageSize()) + .fetch(this) + .reactive() + .as(resultHandler) + .collectList() + .map(list -> PagerResult.of(param.getTotal(), list, param)) + .contextWrite(logContext); } if (param.isParallelPager()) { return Mono.zip(count(), createQuery() - .paging(param.getPageIndex(), param.getPageSize()) - .fetch(this) - .reactive() - .as(resultHandler) - .collectList(), + .paging(param.getPageIndex(), param.getPageSize()) + .fetch(this) + .reactive() + .as(resultHandler) + .collectList(), (total, list) -> PagerResult.of(total, list, param)) .contextWrite(logContext); } return this - .count() - .flatMap(i -> { - QueryParamEntity copy = param.clone(); - copy.rePaging(i); - if (i == 0) { - return Mono.just(PagerResult.of(0, new ArrayList<>(), copy)); - } - return createQuery() - .paging(copy.getPageIndex(), copy.getPageSize()) - .fetch(this) - .reactive() - .as(resultHandler) - .collectList() - .map(list -> PagerResult.of(i, list, copy)) - .contextWrite(logContext); - }); + .count() + .flatMap(i -> { + QueryParamEntity copy = param.clone(); + copy.rePaging(i); + if (i == 0) { + return Mono.just(PagerResult.of(0, new ArrayList<>(), copy)); + } + return createQuery() + .paging(copy.getPageIndex(), copy.getPageSize()) + .fetch(this) + .reactive() + .as(resultHandler) + .collectList() + .map(list -> PagerResult.of(i, list, copy)) + .contextWrite(logContext); + }); } @Override @@ -674,11 +677,11 @@ public class DefaultQueryHelper implements QueryHelper { Query condition = QueryParamEntity.newQuery(); JoinConditionalSpecImpl spec = new JoinConditionalSpecImpl( - this, - type, - joinTable, - alias, - condition + this, + type, + joinTable, + alias, + condition ); joins().add(spec); @@ -729,7 +732,7 @@ public class DefaultQueryHelper implements QueryHelper { public void prepare(List terms) { for (Term term : terms) { if (Objects.equals(TermType.eq, term.getTermType()) - && term.getValue() instanceof JoinConditionalSpecImpl.ColumnRef) { + && term.getValue() instanceof JoinConditionalSpecImpl.ColumnRef) { joinTerms.add(term); } if (term.getTerms() != null) { @@ -745,18 +748,18 @@ public class DefaultQueryHelper implements QueryHelper { return buildBatchHandler(join, mapping); } return flux -> flux - .flatMap(data -> { - QueryParamEntity param = new QueryParamEntity(); - param.setTerms(refactorTerms(data)); - return parent - .select(join.mainClassSafe()) - .all(join.mainClass) - .from(join.mainClass) - .where(param.noPaging()) - .fetch() - .collectList() - .map(list -> FastBeanCopier.copy(Collections.singletonMap(mapping.targetProperty, list), data)); - }, 16); + .flatMap(data -> { + QueryParamEntity param = new QueryParamEntity(); + param.setTerms(refactorTerms(data)); + return parent + .select(join.mainClassSafe()) + .all(join.mainClass) + .from(join.mainClass) + .where(param.noPaging()) + .fetch() + .collectList() + .map(list -> FastBeanCopier.copy(Collections.singletonMap(mapping.targetProperty, list), data)); + }, 16); } private List refactorTerms(R main) { @@ -797,26 +800,26 @@ public class DefaultQueryHelper implements QueryHelper { String mainProperty = ref.getColumn().getAlias(); return flux -> QueryHelper - .combineOneToMany( - flux, - t -> FastBeanCopier.getProperty(t, mainProperty), - idList -> { - term.setColumn(joinProperty); - term.setTermType(TermType.in); - term.setValue(idList); + .combineOneToMany( + flux, + t -> FastBeanCopier.getProperty(t, mainProperty), + idList -> { + term.setColumn(joinProperty); + term.setTermType(TermType.in); + term.setValue(idList); - QueryParamEntity param = new QueryParamEntity(); - param.setTerms(terms); - return parent - .select(join.mainClassSafe()) - .all(join.mainClass) - .from(join.mainClass) - .where(param.noPaging()) - .fetch(); - }, - r -> FastBeanCopier.getProperty(r, joinProperty), - (t, list) -> FastBeanCopier.copy(Collections.singletonMap(mapping.targetProperty, list), t) - ); + QueryParamEntity param = new QueryParamEntity(); + param.setTerms(terms); + return parent + .select(join.mainClassSafe()) + .all(join.mainClass) + .from(join.mainClass) + .where(param.noPaging()) + .fetch(); + }, + r -> FastBeanCopier.getProperty(r, joinProperty), + (t, list) -> FastBeanCopier.copy(Collections.singletonMap(mapping.targetProperty, list), t) + ); } } @@ -1028,8 +1031,8 @@ public class DefaultQueryHelper implements QueryHelper { String column) { RDBColumnMetadata columnMetadata = join - .getColumn(column) - .orElseThrow(() -> new IllegalArgumentException("column [" + column + "] not found")); + .getColumn(column) + .orElseThrow(() -> new IllegalArgumentException("column [" + column + "] not found")); getAccepter().accept(mainColumn, termType, new ColumnRef(columnMetadata, alias)); @@ -1176,8 +1179,8 @@ public class DefaultQueryHelper implements QueryHelper { String column) { RDBColumnMetadata columnMetadata = join - .getColumn(column) - .orElseThrow(() -> new IllegalArgumentException("column [" + column + "] not found")); + .getColumn(column) + .orElseThrow(() -> new IllegalArgumentException("column [" + column + "] not found")); getAccepter().accept(mainColumn, termType, new JoinConditionalSpecImpl.ColumnRef(columnMetadata, alias)); diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryHelper.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryHelper.java index 156cda9f0..840572eb9 100644 --- a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryHelper.java +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryHelper.java @@ -150,7 +150,7 @@ public interface QueryHelper { interface NativeQuerySpec extends ExecuteSpec { /** - * 设置日志,在执行sql等操作时使用次日志进行日志打印. + * 设置日志,在执行sql等操作时使用此日志进行日志打印. * * @param logger Logger * @return this diff --git a/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/ToHumpMap.java b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/ToHumpMap.java new file mode 100644 index 000000000..0f2dab926 --- /dev/null +++ b/hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/ToHumpMap.java @@ -0,0 +1,18 @@ +package org.hswebframework.web.crud.query; + +import java.util.LinkedHashMap; + +public class ToHumpMap extends LinkedHashMap { + + @Override + public V put(String key, V value) { + V val = super.put(key, value); + + String humpKey = QueryHelperUtils.toHump(key); + if (!humpKey.equals(key)) { + super.put(humpKey, value); + } + return val; + } + +} diff --git a/hsweb-core/src/main/java/org/hswebframework/web/bean/CompareUtils.java b/hsweb-core/src/main/java/org/hswebframework/web/bean/CompareUtils.java index 5321af8f9..85e2d807e 100644 --- a/hsweb-core/src/main/java/org/hswebframework/web/bean/CompareUtils.java +++ b/hsweb-core/src/main/java/org/hswebframework/web/bean/CompareUtils.java @@ -178,9 +178,9 @@ public abstract class CompareUtils { if (target instanceof String) { //日期格式的字符串? String stringValue = String.valueOf(target); - if (DateFormatter.isSupport(stringValue)) { + DateFormatter dateFormatter = DateFormatter.getFormatter(stringValue); + if (dateFormatter != null) { //格式化为相同格式的字符串进行对比 - DateFormatter dateFormatter = DateFormatter.getFormatter(stringValue); return (dateFormatter.toString(new Date(number.longValue())).equals(stringValue)); } try { @@ -260,9 +260,9 @@ public abstract class CompareUtils { if (target instanceof String) { //日期格式的字符串? String stringValue = String.valueOf(target); - if (DateFormatter.isSupport(stringValue)) { + DateFormatter dateFormatter = DateFormatter.getFormatter(stringValue); + if (dateFormatter != null) { //格式化为相同格式的字符串进行对比 - DateFormatter dateFormatter = DateFormatter.getFormatter(stringValue); return (dateFormatter.toString(date).equals(stringValue)); } }