refactor(web):优化确认服务和数据资源服务的查询逻辑
This commit is contained in:
@@ -17,6 +17,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import javax.persistence.criteria.CriteriaBuilder;
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Join;
|
||||||
|
import javax.persistence.criteria.JoinType;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
import javax.persistence.criteria.Root;
|
import javax.persistence.criteria.Root;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
@@ -52,15 +54,21 @@ public class ConfirmationService extends SimpleServiceSupport<Confirmation> impl
|
|||||||
if (User.isAdministrator(loginUser)) {
|
if (User.isAdministrator(loginUser)) {
|
||||||
return Lists.immutable.empty();
|
return Lists.immutable.empty();
|
||||||
}
|
}
|
||||||
|
Join<Confirmation, CheckOrder> orderJoin = root.join(Confirmation_.order, JoinType.LEFT);
|
||||||
return Lists.immutable.of(builder.or(
|
return Lists.immutable.of(builder.or(
|
||||||
builder.equal(root.get(Confirmation_.createdUser), loginUser),
|
builder.equal(root.get(Confirmation_.createdUser), loginUser),
|
||||||
builder.and(
|
builder.and(
|
||||||
builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.ROLE),
|
builder.isNotNull(orderJoin),
|
||||||
builder.equal(root.get(Confirmation_.order).get(CheckOrder_.targetRole), loginUser.getRole())
|
builder.or(
|
||||||
),
|
builder.and(
|
||||||
builder.and(
|
builder.equal(orderJoin.get(CheckOrder_.target), CheckOrder.Target.ROLE),
|
||||||
builder.equal(root.get(Confirmation_.order).get(CheckOrder_.target), CheckOrder.Target.USER),
|
builder.equal(orderJoin.get(CheckOrder_.targetRole), loginUser.getRole())
|
||||||
builder.equal(root.get(Confirmation_.order).get(CheckOrder_.targetUser), loginUser)
|
),
|
||||||
|
builder.and(
|
||||||
|
builder.equal(orderJoin.get(CheckOrder_.target), CheckOrder.Target.USER),
|
||||||
|
builder.equal(orderJoin.get(CheckOrder_.targetUser), loginUser)
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.eshore.gringotts.web.domain.resource.service;
|
|||||||
|
|
||||||
import com.eshore.gringotts.web.domain.authentication.entity.Authentication;
|
import com.eshore.gringotts.web.domain.authentication.entity.Authentication;
|
||||||
import com.eshore.gringotts.web.domain.authentication.entity.Authentication_;
|
import com.eshore.gringotts.web.domain.authentication.entity.Authentication_;
|
||||||
import com.eshore.gringotts.web.domain.base.entity.CheckingNeededEntity;
|
|
||||||
import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport;
|
import com.eshore.gringotts.web.domain.base.service.SimpleServiceSupport;
|
||||||
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
|
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation;
|
||||||
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation_;
|
import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation_;
|
||||||
@@ -19,6 +18,7 @@ import com.eshore.gringotts.web.helper.EntityHelper;
|
|||||||
import javax.persistence.criteria.CriteriaBuilder;
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
import javax.persistence.criteria.Join;
|
import javax.persistence.criteria.Join;
|
||||||
|
import javax.persistence.criteria.JoinType;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
import javax.persistence.criteria.Root;
|
import javax.persistence.criteria.Root;
|
||||||
import javax.persistence.criteria.Subquery;
|
import javax.persistence.criteria.Subquery;
|
||||||
@@ -79,23 +79,34 @@ public class DataResourceService extends SimpleServiceSupport<DataResource> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableList<DataResource> listNoConfirmation() {
|
public ImmutableList<DataResource> listNoConfirmation() {
|
||||||
return Lists.immutable.ofAll(dataResourceRepository.findAllByConfirmationIsNull());
|
return Lists.immutable.ofAll(dataResourceRepository.findAll(
|
||||||
|
(root, query, builder) -> {
|
||||||
|
Join<DataResource, Confirmation> confirmationJoin = root.join(DataResource_.confirmation, JoinType.LEFT);
|
||||||
|
return builder.and(
|
||||||
|
builder.isNull(confirmationJoin.get(Confirmation_.id)),
|
||||||
|
builder.equal(root.get(DataResource_.createdUser), userService.currentLoginUser())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableList<DataResource> listNoAuthentication() {
|
public ImmutableList<DataResource> listNoAuthentication() {
|
||||||
return Lists.immutable.ofAll(dataResourceRepository.findAll(
|
return Lists.immutable.ofAll(dataResourceRepository.findAll(
|
||||||
(root, query, builder) -> {
|
(root, query, builder) -> {
|
||||||
Join<DataResource, Confirmation> confirmationJoin = root.join("confirmation");
|
Join<DataResource, Confirmation> confirmationJoin = root.join(DataResource_.confirmation, JoinType.LEFT);
|
||||||
confirmationJoin.on(builder.equal(confirmationJoin.get("state"), CheckingNeededEntity.State.NORMAL));
|
confirmationJoin.on(builder.equal(confirmationJoin.get(Confirmation_.state), Confirmation.State.NORMAL));
|
||||||
|
|
||||||
Subquery<Authentication> authenticationSubquery = query.subquery(Authentication.class);
|
Subquery<Authentication> authenticationSubquery = query.subquery(Authentication.class);
|
||||||
Root<Authentication> authenticationRoot = authenticationSubquery.from(Authentication.class);
|
Root<Authentication> authenticationRoot = authenticationSubquery.from(Authentication.class);
|
||||||
authenticationSubquery.select(authenticationRoot)
|
authenticationSubquery.select(authenticationRoot)
|
||||||
.where(
|
.where(
|
||||||
builder.equal(authenticationRoot.get("target"), root),
|
builder.equal(authenticationRoot.get(Authentication_.target), root),
|
||||||
builder.equal(authenticationRoot.get("createdUser"), userService.currentLoginUser())
|
builder.equal(authenticationRoot.get(Authentication_.createdUser), userService.currentLoginUser())
|
||||||
);
|
);
|
||||||
return builder.exists(authenticationSubquery).not();
|
return builder.and(
|
||||||
|
builder.exists(authenticationSubquery).not(),
|
||||||
|
builder.equal(root.get(DataResource_.createdUser), userService.currentLoginUser())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user