From 66bf1b92420faa7af5aff74fb2a6c18be0cc61e7 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Wed, 27 Nov 2024 19:51:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E4=BF=AE=E5=A4=8D=E5=BD=93?= =?UTF-8?q?=E5=89=8D=E7=94=A8=E6=88=B7=E8=BF=87=E6=BB=A4=E6=97=A0=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/base/service/SimpleService.java | 75 ++++++++++--------- .../controller/ConfirmationController.java | 9 +++ .../confirmation/entity/Confirmation.java | 4 + .../repository/ConfirmationRepository.java | 5 +- .../service/ConfirmationService.java | 3 +- .../repository/DataResourceRepository.java | 3 +- .../web/domain/user/entity/User.java | 36 +++++++++ 7 files changed, 95 insertions(+), 40 deletions(-) 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 { /** * 审查中