소스 검색

feat: 使用配置的方式获取审批人类型,顺序

黄资权 1 년 전
부모
커밋
beff49e5d2

+ 50 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ApproveGetApproverEnum.java

@@ -0,0 +1,50 @@
+package com.dragonsoft.dcuc.approve.enumresources;
+
+import com.dragonsoft.duceap.base.enums.ICodeEnum;
+
+/**
+ * <p>
+ * 审批回调获取审批人类型
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ */
+public enum ApproveGetApproverEnum implements ICodeEnum {
+    /**
+     * 当前机构
+     */
+    CURRENT_ORG("currentOrg", "当前机构"),
+    /**
+     * 上一级机构
+     */
+    NEXT_ORG("nextOrg", "上一级机构"),
+    /**
+     * 上一级一直再上级
+     */
+    NEXT_AND_NEXT_ORG("nextAndNextOrg", "上一级一直再上级"),
+    /**
+     * 配置的
+     */
+    CONFIG("config", "配置的");
+
+    private final String value;
+
+    private final String label;
+
+    ApproveGetApproverEnum(String value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+    @Override
+    public String getValue() {
+        return this.value;
+    }
+
+    @Override
+    public String getLabel() {
+        return this.label;
+    }
+
+}

+ 23 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/approver/IGetApproverBusiness.java

@@ -0,0 +1,23 @@
+package com.dragonsoft.dcuc.approve.business.approver;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ * @see com.dragonsoft.dcuc.approve.enumresources.ApproveGetApproverEnum
+ */
+public interface IGetApproverBusiness {
+    /**
+     * 获取审批人
+     *
+     * @param applicantUser 申请人
+     * @param labelCode     标签代码
+     * @return 审批人
+     */
+    List<String> getApproverList(String applicantUser, String labelCode);
+}

+ 33 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/approver/impl/ConfigGetApproverBusinessImpl.java

@@ -0,0 +1,33 @@
+package com.dragonsoft.dcuc.approve.business.approver.impl;
+
+import com.dragonsoft.dcuc.approve.business.approver.IGetApproverBusiness;
+import com.dragonsoft.dcuc.approve.properties.ApproveWorkFlowCallbackProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 获取配置的的审批人
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ * @see com.dragonsoft.dcuc.approve.enumresources.ApproveGetApproverEnum
+ */
+@Component(value = "configGetApproverBusiness")
+public class ConfigGetApproverBusinessImpl implements IGetApproverBusiness {
+
+    private ApproveWorkFlowCallbackProperties approveWorkFlowCallbackProperties;
+
+    @Autowired
+    public void setApproveWorkFlowCallbackProperties(ApproveWorkFlowCallbackProperties approveWorkFlowCallbackProperties) {
+        this.approveWorkFlowCallbackProperties = approveWorkFlowCallbackProperties;
+    }
+
+    @Override
+    public List<String> getApproverList(String applicantUser, String labelCode) {
+        return approveWorkFlowCallbackProperties.getFinalApproveList();
+    }
+}

+ 38 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/approver/impl/CurrentOrgGetApproverBusinessImpl.java

@@ -0,0 +1,38 @@
+package com.dragonsoft.dcuc.approve.business.approver.impl;
+
+import com.dragonsoft.dcuc.approve.business.approver.IGetApproverBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ */
+@Component(value = "currentOrgGetApproverBusiness")
+public class CurrentOrgGetApproverBusinessImpl implements IGetApproverBusiness {
+    private IDcucBusiness dcucBusiness;
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Override
+    public List<String> getApproverList(String applicantUser, String labelCode) {
+        // 获取申请人对应的机构代码
+        OauthUserVO handleUserInfo = dcucBusiness.getOauthUserInfoByIdcard(applicantUser);
+        String currentOrgCode = handleUserInfo.getOrgCode();
+
+        // 获取机构代码上有这个标签的人
+
+        return dcucBusiness.getUserByLabelCodeUserList(currentOrgCode, labelCode);
+    }
+}

+ 64 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/approver/impl/NextAndNextOrgGetApproverBusinessImpl.java

@@ -0,0 +1,64 @@
+package com.dragonsoft.dcuc.approve.business.approver.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.dragonsoft.dcuc.approve.business.approver.IGetApproverBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 一级一级的获取机构的审批人
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ */
+@Component(value = "nextAndNextOrgGetApproverBusiness")
+public class NextAndNextOrgGetApproverBusinessImpl implements IGetApproverBusiness {
+    private IDcucBusiness dcucBusiness;
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Override
+    public List<String> getApproverList(String applicantUser, String labelCode) {
+        // 获取申请人对应的机构代码
+        OauthUserVO handleUserInfo = dcucBusiness.getOauthUserInfoByIdcard(applicantUser);
+        String currentOrgCode = handleUserInfo.getOrgCode();
+        // 看有没有再获取上级机构的
+        ApiOrgResultVo apiOrgResultVo = dcucBusiness.orgInfo(currentOrgCode);
+        String upOrgCode = apiOrgResultVo.getUpOrgCode();
+        // 获取机构代码上有这个标签的人
+        return getNextAndNextApproverList(upOrgCode, labelCode);
+    }
+
+    /**
+     * 一级一级的获取
+     *
+     * @param orgCode   机构代码
+     * @param labelCode 标签代码
+     * @return 审批人
+     */
+    protected List<String> getNextAndNextApproverList(String orgCode, String labelCode) {
+        // 看有没有再获取上级机构的
+        List<String> approverList = dcucBusiness.getUserByLabelCodeUserList(orgCode, labelCode);
+        if (CollUtil.isEmpty(approverList)) {
+            ApiOrgResultVo apiOrgResultVo = dcucBusiness.orgInfo(orgCode);
+            String upOrgCode = apiOrgResultVo.getUpOrgCode();
+            if (CollUtil.isEmpty(approverList)
+                    && StrUtil.isNotBlank(upOrgCode)) {
+                approverList = getNextAndNextApproverList(upOrgCode, labelCode);
+            }
+        }
+        return approverList;
+    }
+
+}

+ 46 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/approver/impl/NextOrgGetApproverBusinessImpl.java

@@ -0,0 +1,46 @@
+package com.dragonsoft.dcuc.approve.business.approver.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.dragonsoft.dcuc.approve.business.approver.IGetApproverBusiness;
+import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
+import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 获取上一级
+ * </p>
+ *
+ * @author huangziquan
+ * @date 2024/3/4
+ */
+@Component(value = "nextOrgGetApproverBusiness")
+public class NextOrgGetApproverBusinessImpl implements IGetApproverBusiness {
+    private IDcucBusiness dcucBusiness;
+
+    @Autowired
+    public void setDcucBusiness(IDcucBusiness dcucBusiness) {
+        this.dcucBusiness = dcucBusiness;
+    }
+
+    @Override
+    public List<String> getApproverList(String applicantUser, String labelCode) {
+        // 获取申请人对应的机构代码
+        OauthUserVO handleUserInfo = dcucBusiness.getOauthUserInfoByIdcard(applicantUser);
+        String currentOrgCode = handleUserInfo.getOrgCode();
+
+        List<String> approverList = Collections.emptyList();
+        if (CollUtil.isEmpty(approverList)) {
+            // 看有没有再获取上级机构的
+            ApiOrgResultVo apiOrgResultVo = dcucBusiness.orgInfo(currentOrgCode);
+            String upOrgCode = apiOrgResultVo.getUpOrgCode();
+            approverList = dcucBusiness.getUserByLabelCodeUserList(upOrgCode, labelCode);
+        }
+        return approverList;
+    }
+}

+ 9 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/IDcucBusiness.java

@@ -68,4 +68,13 @@ public interface IDcucBusiness {
      */
     List<UserLabel2RespVO> getUserByLabelCode(String orgCode, String labelCode);
 
+    /**
+     * 根据机构代码、标签代码获取审批人员
+     *
+     * @param orgCode   机构代码
+     * @param labelCode 标签代码
+     * @return 审批人
+     */
+    List<String> getUserByLabelCodeUserList(String orgCode, String labelCode);
+
 }

+ 10 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucBusinessImpl.java

@@ -34,11 +34,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.*;
 import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
 import java.net.URI;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author lidr huangziquan
@@ -237,6 +237,15 @@ public class DcucBusinessImpl implements IDcucBusiness {
         return oauthUserVO;
     }
 
+    @Override
+    public List<String> getUserByLabelCodeUserList(String orgCode, String labelCode) {
+        List<UserLabel2RespVO> userByLabelCodeList = getUserByLabelCode(orgCode, labelCode);
+        return Optional.ofNullable(userByLabelCodeList)
+                .orElse(Collections.emptyList())
+                .stream().map(UserLabel2RespVO::getIdcard)
+                .collect(Collectors.toList());
+    }
+
     @Override
     public List<UserLabel2RespVO> getUserByLabelCode(String orgCode, String labelCode) {
         SearchParam labelSearchParam = new SearchParam();

+ 12 - 36
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/external/impl/DcucWorkFlowCallbackBusinessImpl.java

@@ -2,13 +2,13 @@ package com.dragonsoft.dcuc.approve.business.external.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.map.MapUtil;
+import com.dragonsoft.dcuc.approve.business.approver.IGetApproverBusiness;
 import com.dragonsoft.dcuc.approve.business.external.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.business.external.IWorkFlowCallbackBusiness;
-import com.dragonsoft.dcuc.approve.model.vo.dcuc.ApiOrgResultVo;
-import com.dragonsoft.dcuc.approve.model.vo.dcuc.OauthUserVO;
-import com.dragonsoft.dcuc.approve.model.vo.dcuc.UserLabel2RespVO;
+import com.dragonsoft.dcuc.approve.enumresources.ApproveGetApproverEnum;
 import com.dragonsoft.dcuc.approve.properties.ApproveWorkFlowCallbackProperties;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import com.dragonsoft.duceap.core.spring.SpringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -16,8 +16,6 @@ import org.springframework.stereotype.Component;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -55,42 +53,20 @@ public class DcucWorkFlowCallbackBusinessImpl implements IWorkFlowCallbackBusine
         Map<String, Object> dataMap = (Map<String, Object>) param.get("data");
         // 需要提交才有
         String handleUser = MapUtil.getStr(dataMap, "handleUser");
-        // 获取申请人对应的机构代码
-        OauthUserVO handleUserInfo = dcucBusiness.getOauthUserInfoByIdcard(handleUser);
-        String currentOrgCode = handleUserInfo.getOrgCode();
 
         String labelCode = approveWorkFlowCallbackProperties.getLabelCode();
-        // 获取机构代码上有这个标签的人
-        List<String> approverList = getOrgLabelUser(currentOrgCode, labelCode);
+        List<ApproveGetApproverEnum> approveGetApproverEnumList = approveWorkFlowCallbackProperties.getApproveGetApproverEnumList();
+        List<String> approverList = Collections.emptyList();
 
-        if (CollUtil.isEmpty(approverList)) {
-            // 看有没有再获取上级机构的
-            // todo 确认需求是获取上一级还是只是获取上级
-            ApiOrgResultVo apiOrgResultVo = dcucBusiness.orgInfo(currentOrgCode);
-            String upOrgCode = apiOrgResultVo.getUpOrgCode();
-            approverList = getOrgLabelUser(upOrgCode, labelCode);
+        for (ApproveGetApproverEnum approveGetApproverEnum : approveGetApproverEnumList) {
+            String value = approveGetApproverEnum.getValue();
+            IGetApproverBusiness getApproverBusiness = SpringUtils.getBean(value + "GetApproverBusiness");
+            approverList = getApproverBusiness.getApproverList(handleUser, labelCode);
+            if (CollUtil.isNotEmpty(approverList)) {
+                break;
+            }
         }
 
-        // 没有的话获取兜底的科信审批人员
-        if (CollUtil.isEmpty(approverList)) {
-            approverList = approveWorkFlowCallbackProperties.getFinalApproveList();
-        }
         return approverList;
     }
-
-    /**
-     * 根据机构代码、标签代码获取审批人员
-     *
-     * @param orgCode   机构代码
-     * @param labelCode 标签代码
-     * @return 审批人
-     */
-    protected List<String> getOrgLabelUser(String orgCode, String labelCode) {
-        List<UserLabel2RespVO> userByLabelCodeList = dcucBusiness.getUserByLabelCode(orgCode, labelCode);
-        return Optional.ofNullable(userByLabelCodeList)
-                .orElse(Collections.emptyList())
-                .stream().map(UserLabel2RespVO::getIdcard)
-                .collect(Collectors.toList());
-    }
-
 }

+ 11 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/properties/ApproveWorkFlowCallbackProperties.java

@@ -1,10 +1,12 @@
 package com.dragonsoft.dcuc.approve.properties;
 
+import com.dragonsoft.dcuc.approve.enumresources.ApproveGetApproverEnum;
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -31,4 +33,13 @@ public class ApproveWorkFlowCallbackProperties {
      */
     private List<String> finalApproveList = Collections.emptyList();
 
+    /**
+     * 回调获取审批人的顺序,方法
+     */
+    private List<ApproveGetApproverEnum> approveGetApproverEnumList = Arrays.asList(
+            ApproveGetApproverEnum.CURRENT_ORG,
+            ApproveGetApproverEnum.NEXT_ORG,
+            ApproveGetApproverEnum.CONFIG
+    );
+
 }