提交 eeb0869d 编写于 作者: O o2sword

自建表导入优化

上级 6ec3c976
......@@ -128,10 +128,10 @@ class ActionCover extends BaseAction {
}
if (StringUtils.isNotEmpty(obj.getAlias())) {
obj.setAlias(
this.idleAliasWithQuery(business, query.getId(), obj.getAlias(), Table.class, obj.getId()));
this.idleAliasWithQuery(business, null, obj.getAlias(), Table.class, obj.getId()));
}
if (StringUtils.isNotEmpty(obj.getName())) {
obj.setName(this.idleNameWithQuery(business, query.getId(), obj.getName(), Table.class, obj.getId()));
obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Table.class, obj.getId()));
}
obj.setQuery(query.getId());
}
......@@ -145,10 +145,10 @@ class ActionCover extends BaseAction {
}
if (StringUtils.isNotEmpty(obj.getAlias())) {
obj.setAlias(
this.idleAliasWithQuery(business, query.getId(), obj.getAlias(), Statement.class, obj.getId()));
this.idleAliasWithQuery(business, null, obj.getAlias(), Statement.class, obj.getId()));
}
if (StringUtils.isNotEmpty(obj.getName())) {
obj.setName(this.idleNameWithQuery(business, query.getId(), obj.getName(), Statement.class, obj.getId()));
obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Statement.class, obj.getId()));
}
obj.setQuery(query.getId());
}
......@@ -181,58 +181,6 @@ class ActionCover extends BaseAction {
return query;
}
private <T extends JpaObject> String idleNameWithQuery(Business business, String queryId, String name, Class<T> cls,
String excludeId) throws Exception {
if (StringUtils.isEmpty(name)) {
return "";
}
List<String> list = new ArrayList<>();
list.add(name);
for (int i = 1; i < 99; i++) {
list.add(name + String.format("%02d", i));
}
list.add(StringTools.uniqueToken());
EntityManager em = business.entityManagerContainer().get(cls);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<T> root = cq.from(cls);
Predicate p = root.get("name").in(list);
p = cb.and(p, cb.equal(root.get("query"), queryId));
if (StringUtils.isNotEmpty(excludeId)) {
p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
}
cq.select(root.get("name")).where(p);
List<String> os = em.createQuery(cq).getResultList();
list = ListUtils.subtract(list, os);
return list.get(0);
}
private <T extends JpaObject> String idleAliasWithQuery(Business business, String queryId, String alias,
Class<T> cls, String excludeId) throws Exception {
if (StringUtils.isEmpty(alias)) {
return "";
}
List<String> list = new ArrayList<>();
list.add(alias);
for (int i = 1; i < 99; i++) {
list.add(alias + String.format("%02d", i));
}
list.add(StringTools.uniqueToken());
EntityManager em = business.entityManagerContainer().get(cls);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<T> root = cq.from(cls);
Predicate p = root.get("alias").in(list);
p = cb.and(p, cb.equal(root.get("query"), queryId));
if (StringUtils.isNotEmpty(excludeId)) {
p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
}
cq.select(root.get("alias")).where(p);
List<String> os = em.createQuery(cq).getResultList();
list = ListUtils.subtract(list, os);
return list.get(0);
}
public static class Wi extends WrapQuery {
private static final long serialVersionUID = -4612391443319365035L;
......
......@@ -22,6 +22,7 @@ import com.x.query.core.entity.View;
import com.x.query.core.entity.schema.Statement;
import com.x.query.core.entity.schema.Table;
import com.x.query.core.entity.wrap.*;
import org.apache.commons.lang3.StringUtils;
class ActionCreate extends BaseAction {
......@@ -79,6 +80,13 @@ class ActionCreate extends BaseAction {
}
obj = WrapTable.inCopier.copy(_o);
obj.setQuery(query.getId());
if (StringUtils.isNotEmpty(obj.getAlias())) {
obj.setAlias(
this.idleAliasWithQuery(business, null, obj.getAlias(), Table.class, obj.getId()));
}
if (StringUtils.isNotEmpty(obj.getName())) {
obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Table.class, obj.getId()));
}
persistObjects.add(obj);
}
for (WrapStatement _o : wi.getStatementList()) {
......@@ -88,6 +96,13 @@ class ActionCreate extends BaseAction {
}
obj = WrapStatement.inCopier.copy(_o);
obj.setQuery(query.getId());
if (StringUtils.isNotEmpty(obj.getAlias())) {
obj.setAlias(
this.idleAliasWithQuery(business, null, obj.getAlias(), Statement.class, obj.getId()));
}
if (StringUtils.isNotEmpty(obj.getName())) {
obj.setName(this.idleNameWithQuery(business, null, obj.getName(), Statement.class, obj.getId()));
}
persistObjects.add(obj);
}
for (WrapReveal _o : wi.getRevealList()) {
......
......@@ -95,4 +95,60 @@ abstract class BaseAction extends StandardJaxrsAction {
return list.get(0);
}
protected <T extends JpaObject> String idleNameWithQuery(Business business, String queryId, String name, Class<T> cls,
String excludeId) throws Exception {
if (StringUtils.isEmpty(name)) {
return "";
}
List<String> list = new ArrayList<>();
list.add(name);
for (int i = 1; i < 99; i++) {
list.add(name + String.format("%02d", i));
}
list.add(StringTools.uniqueToken());
EntityManager em = business.entityManagerContainer().get(cls);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<T> root = cq.from(cls);
Predicate p = root.get("name").in(list);
if (StringUtils.isNotEmpty(queryId)) {
p = cb.and(p, cb.equal(root.get("query"), queryId));
}
if (StringUtils.isNotEmpty(excludeId)) {
p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
}
cq.select(root.get("name")).where(p);
List<String> os = em.createQuery(cq).getResultList();
list = ListUtils.subtract(list, os);
return list.get(0);
}
protected <T extends JpaObject> String idleAliasWithQuery(Business business, String queryId, String alias,
Class<T> cls, String excludeId) throws Exception {
if (StringUtils.isEmpty(alias)) {
return "";
}
List<String> list = new ArrayList<>();
list.add(alias);
for (int i = 1; i < 99; i++) {
list.add(alias + String.format("%02d", i));
}
list.add(StringTools.uniqueToken());
EntityManager em = business.entityManagerContainer().get(cls);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<T> root = cq.from(cls);
Predicate p = root.get("alias").in(list);
if (StringUtils.isNotEmpty(queryId)) {
p = cb.and(p, cb.equal(root.get("query"), queryId));
}
if (StringUtils.isNotEmpty(excludeId)) {
p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), excludeId));
}
cq.select(root.get("alias")).where(p);
List<String> os = em.createQuery(cq).getResultList();
list = ListUtils.subtract(list, os);
return list.get(0);
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册