diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleService.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleService.java index 3ff4391..4119206 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleService.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/base/service/SimpleService.java @@ -9,10 +9,14 @@ import com.eshore.gringotts.web.domain.base.repository.SimpleRepository; import com.eshore.gringotts.web.domain.user.entity.User; import com.eshore.gringotts.web.domain.user.service.UserService; import java.util.Optional; +import javax.persistence.criteria.Predicate; import javax.transaction.Transactional; import lombok.extern.slf4j.Slf4j; +import org.eclipse.collections.api.factory.Lists; import org.eclipse.collections.api.factory.Sets; +import org.eclipse.collections.api.list.MutableList; import org.eclipse.collections.api.set.ImmutableSet; +import org.springframework.data.domain.Sort; /** * @author lanyuanxiaoyao @@ -51,60 +55,59 @@ public abstract class SimpleService { } public ImmutableSet list() { - User user = userService.currentLoginUser(); return Sets.immutable.ofAll(repository.findAll( - (root, query, builder) -> builder.equal(root.get("createdUser"), user) + (root, query, builder) -> { + MutableList predicates = Lists.mutable.empty(); + User user = userService.currentLoginUser(); + if (User.isNotAdministrator(user)) { + predicates.add(builder.equal(root.get("createdUser"), user)); + } + return builder.and(predicates.toArray(new Predicate[predicates.size()])); + }, + Sort.by("createdTime").descending() )); } public ImmutableSet list(ImmutableSet ids) { - User user = userService.currentLoginUser(); return Sets.immutable.ofAll(repository.findAll( - (root, query, builder) -> builder.and( - builder.in(root.get("id")).value(ids.select(ObjectUtil::isNotNull)), - builder.equal(root.get("createdUser"), user) - ) + (root, query, builder) -> { + MutableList predicates = Lists.mutable.of( + builder.in(root.get("id")).value(ids.select(ObjectUtil::isNotNull)) + ); + User user = userService.currentLoginUser(); + if (User.isNotAdministrator(user)) { + predicates.add(builder.equal(root.get("createdUser"), user)); + } + return builder.and(predicates.toArray(new Predicate[predicates.size()])); + }, + Sort.by("createdTime").descending() )); } - public ENTITY detail(Long id) { - if (ObjectUtil.isNull(id)) { - return null; - } - User user = userService.currentLoginUser(); - return repository.findOne( - (root, query, builder) -> builder.and( - builder.equal(root.get("id"), id), - builder.equal(root.get("createdUser"), user) - ) - ) - .orElse(null); - } - public Optional detailOptional(Long id) { if (ObjectUtil.isNull(id)) { return Optional.empty(); } - User user = userService.currentLoginUser(); return repository.findOne( - (root, query, builder) -> builder.and( - builder.equal(root.get("id"), id), - builder.equal(root.get("createdUser"), user) - ) + (root, query, builder) -> { + MutableList predicates = Lists.mutable.of( + builder.equal(root.get("id"), id) + ); + User user = userService.currentLoginUser(); + if (User.isNotAdministrator(user)) { + predicates.add(builder.equal(root.get("createdUser"), user)); + } + return builder.and(predicates.toArray(new Predicate[predicates.size()])); + } ); } + public ENTITY detail(Long id) { + return detailOptional(id).orElse(null); + } + public ENTITY detailOrThrow(Long id) { - if (ObjectUtil.isNull(id)) { - throw new IdNotFoundException(id); - } - User user = userService.currentLoginUser(); - return repository.findOne( - (root, query, builder) -> builder.and( - builder.equal(root.get("id"), id), - builder.equal(root.get("createdUser"), user) - ) - ).orElseThrow(() -> new IdNotFoundException(id)); + return detailOptional(id).orElseThrow(() -> new IdNotFoundException(id)); } @Transactional(rollbackOn = Throwable.class) diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/controller/ConfirmationController.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/controller/ConfirmationController.java index 29af8dd..c659824 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/controller/ConfirmationController.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/controller/ConfirmationController.java @@ -9,6 +9,7 @@ import com.eshore.gringotts.web.domain.confirmation.entity.Confirmation; import com.eshore.gringotts.web.domain.confirmation.service.ConfirmationService; import com.eshore.gringotts.web.domain.resource.service.DataResourceService; import com.eshore.gringotts.web.domain.upload.service.DataFileService; +import java.time.LocalDateTime; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.extern.slf4j.Slf4j; @@ -97,6 +98,10 @@ public class ConfirmationController extends SimpleController evidences; @Column(nullable = false) @Enumerated(EnumType.STRING) diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/repository/ConfirmationRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/repository/ConfirmationRepository.java index b083e8b..4171d02 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/repository/ConfirmationRepository.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/confirmation/repository/ConfirmationRepository.java @@ -6,6 +6,7 @@ import com.eshore.gringotts.web.domain.user.entity.User; import java.util.List; import java.util.Optional; import javax.transaction.Transactional; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.Modifying; @@ -21,7 +22,7 @@ import org.springframework.stereotype.Repository; public interface ConfirmationRepository extends SimpleRepository { @Override @EntityGraph(value = "confirmation.list", type = EntityGraph.EntityGraphType.FETCH) - List findAll(Specification specification); + List findAll(Specification specification, Sort sort); @Override @EntityGraph(value = "confirmation.detail", type = EntityGraph.EntityGraphType.FETCH) @@ -31,6 +32,6 @@ public interface ConfirmationRepository extends SimpleRepository { @Override public Long save(Confirmation entity) { - if (confirmationRepository.existsByTarget_Id(entity.getTarget().getId())) { + if (ObjectUtil.isNull(entity.getId()) && confirmationRepository.existsByTarget_Id(entity.getTarget().getId())) { throw new ConfirmationDuplicatedException(); } return super.save(entity); diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java index 80dec65..25600ec 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/resource/repository/DataResourceRepository.java @@ -4,6 +4,7 @@ import com.eshore.gringotts.web.domain.base.repository.SimpleRepository; import com.eshore.gringotts.web.domain.resource.entity.DataResource; import java.util.List; import java.util.Optional; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.stereotype.Repository; @@ -13,7 +14,7 @@ import org.springframework.stereotype.Repository; public interface DataResourceRepository extends SimpleRepository { @Override @EntityGraph(value = "data_resource.list", type = EntityGraph.EntityGraphType.FETCH) - List findAll(Specification specification); + List findAll(Specification specification, Sort sort); @Override @EntityGraph(value = "data_resource.detail", type = EntityGraph.EntityGraphType.FETCH) diff --git a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/entity/User.java b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/entity/User.java index a8a5eb3..f0f65c0 100644 --- a/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/entity/User.java +++ b/gringotts-web/src/main/java/com/eshore/gringotts/web/domain/user/entity/User.java @@ -58,6 +58,42 @@ public class User extends SimpleEntity { @ToString.Exclude private User checkedUser; + public static boolean isAdministrator(User user) { + return Role.ADMINISTRATOR.equals(user.role); + } + + public static boolean isNotAdministrator(User user) { + return !isAdministrator(user); + } + + public static boolean isChecker(User user) { + return Role.CHECKER.equals(user.role); + } + + public static boolean isNotChecker(User user) { + return !isChecker(user); + } + + public static boolean isProvider(User user) { + return Role.PROVIDER.equals(user.role); + } + + public static boolean isNotProvider(User user) { + return !isProvider(user); + } + + public static boolean isCustomer(User user) { + return Role.CUSTOMER.equals(user.role); + } + + public static boolean isNotCustomer(User user) { + return !isCustomer(user); + } + + public static boolean isUser(User user) { + return isProvider(user) || isCustomer(user); + } + public enum State { /** * 审查中