From b08fab9c4a5e3297f8a82d909303b385a5735c35 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Fri, 10 Dec 2021 23:26:21 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E9=A2=9D=E5=A4=96=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=AE=A1=E6=A0=B8=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ApprovalController.java | 3 +- .../approval/domain/ApprovalDomainQo.java | 10 ++++-- .../approval/domain/ApprovalDomainVo.java | 35 +++++++++++++++++++ .../service/ModuleDelegateService.java | 19 +++++++--- .../framework/beans/meta/BeanController.java | 2 +- .../framework/beans/meta/BeanInfo.java | 3 ++ 6 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainVo.java diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/controller/ApprovalController.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/controller/ApprovalController.java index 60eff4b..38f1845 100644 --- a/flyfish-approval/src/main/java/com/flyfish/framework/approval/controller/ApprovalController.java +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/controller/ApprovalController.java @@ -71,7 +71,8 @@ public class ApprovalController { */ @PostMapping("submit") public Mono> submit(@Valid @RequestBody ApprovalSubmitDto body) { - return moduleDelegateService.submit(body).map(Result::ok); + return moduleDelegateService.submit(body).map(Result::ok) + .onErrorResume(e -> Mono.just(Result.error(e.getMessage()))); } diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java index 43fe473..6695087 100644 --- a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainQo.java @@ -4,7 +4,8 @@ import com.flyfish.framework.annotations.EnumValue; import com.flyfish.framework.annotations.Order; import com.flyfish.framework.annotations.Property; import com.flyfish.framework.approval.enums.ApproveStatus; -import com.flyfish.framework.domain.authorized.AuthorizedDomain; +import com.flyfish.framework.builder.CriteriaBuilder; +import com.flyfish.framework.domain.authorized.AuthorizedQo; import lombok.Getter; import lombok.Setter; @@ -15,10 +16,15 @@ import lombok.Setter; */ @Getter @Setter -public class ApprovalDomainQo extends AuthorizedDomain { +public class ApprovalDomainQo extends AuthorizedQo { @Property("审批状态") @Order(50) @EnumValue(ApproveStatus.class) private String status; + + @Override + public CriteriaBuilder criteriaBuilder() { + return super.criteriaBuilder().with("status", "approveStatus"); + } } diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainVo.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainVo.java new file mode 100644 index 0000000..d2a5b21 --- /dev/null +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/domain/ApprovalDomainVo.java @@ -0,0 +1,35 @@ +package com.flyfish.framework.approval.domain; + +import com.flyfish.framework.approval.enums.ApproveStatus; +import com.flyfish.framework.domain.base.Vo; +import lombok.Data; + +import java.util.Optional; + +/** + * 包装的审批实体 + * + * @author wangyu + */ +@Data +public abstract class ApprovalDomainVo implements Vo { + + // 审批状态 + private String approveStatusName; + // 审批状态编码 + private String approveStatus; + // 下一审批人 + private String nextApprover; + + @Override + public Vo from(T po) { + this.setApproveStatusName(Optional.ofNullable(po.getApproveStatus()).map(ApproveStatus::getName) + .orElse(ApproveStatus.DRAFT.getName())); + this.setApproveStatus(Optional.ofNullable(po.getApproveStatus()).map(ApproveStatus::name) + .orElse(ApproveStatus.DRAFT.name())); + if (po.getNext() != -1) { + this.setNextApprover(po.getApprovers().get(po.getNext())); + } + return this; + } +} diff --git a/flyfish-approval/src/main/java/com/flyfish/framework/approval/service/ModuleDelegateService.java b/flyfish-approval/src/main/java/com/flyfish/framework/approval/service/ModuleDelegateService.java index 8e79d32..1f7df72 100644 --- a/flyfish-approval/src/main/java/com/flyfish/framework/approval/service/ModuleDelegateService.java +++ b/flyfish-approval/src/main/java/com/flyfish/framework/approval/service/ModuleDelegateService.java @@ -10,14 +10,17 @@ import com.flyfish.framework.beans.meta.RestBean; import com.flyfish.framework.domain.base.DomainService; import com.flyfish.framework.exception.biz.InvalidBusinessException; import com.flyfish.framework.service.BaseReactiveService; +import com.flyfish.framework.utils.ReflectionUtils; +import org.apache.commons.lang3.ClassUtils; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.data.util.CastUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import reactor.core.publisher.Mono; import javax.annotation.Resource; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; @@ -37,9 +40,14 @@ public class ModuleDelegateService { // 审批的服务们 private Map> approvalServices; - @Autowired(required = false) - public void setApprovalServices(List> services) { + @Autowired + @SuppressWarnings("all") + public void setApprovalServices(ObjectProvider services) { this.approvalServices = services.stream() + .filter(service -> ReflectionUtils.getGenericType(service.getClass()) + .map(clazz -> ClassUtils.isAssignable(clazz, ApprovalDomain.class)) + .orElse(false)) + .map(service -> (BaseReactiveService) service) .collect(Collectors.toMap(DomainService::getCollectionName, s -> s)); } @@ -50,7 +58,7 @@ public class ModuleDelegateService { * @return 结果 */ public BaseReactiveService getService(String module) { - return approvalServices.get(module); + return CastUtils.cast(approvalServices.get(module)); } /** @@ -150,6 +158,9 @@ public class ModuleDelegateService { BaseReactiveService service = getService(data.getModule()); return service.getById(data.getId()) .flatMap(domain -> { + if (ApproveStatus.DRAFT != domain.getApproveStatus() && ApproveStatus.REJECTED != domain.getApproveStatus()) { + return Mono.error(new InvalidBusinessException("该数据已经提交审批,请勿重复提交!")); + } domain.setApprovers(data.getApprovers()); domain.setApproveStatus(ApproveStatus.PENDING); domain.setNext(0); diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java index a1f60c1..1cf9c3a 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanController.java @@ -74,7 +74,7 @@ public class BeanController { BeanInfo info = new BeanInfo(); if (clazz.isAnnotationPresent(RestBean.class)) { RestBean annotation = clazz.getAnnotation(RestBean.class); - info.setType(clazz.getSuperclass().getSimpleName()); + info.setSuperType(clazz.getSuperclass().getSimpleName()); info.setName(annotation.name()); info.setCode(annotation.value()); info.setSearch(BeanProperty.from(annotation.queryClass())); diff --git a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java index 15ae27d..9bec8d0 100644 --- a/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java +++ b/flyfish-web/src/main/java/com/flyfish/framework/beans/meta/BeanInfo.java @@ -23,6 +23,9 @@ public class BeanInfo { // bean的类型 private String type; + // 父类 + private String superType; + // 默认layout private String layout;