Browse Source

feature(对接审批中心接口): 对接审批中心接口

对接审批中心接口
mazq 3 years ago
parent
commit
3b6bd14753
24 changed files with 712 additions and 237 deletions
  1. 25 11
      dcuc-auth-api/src/main/java/com/dragoninfo/dcuc/auth/auth/facade/IAuthApplyFacade.java
  2. 6 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/AppFunApplyUpdateDTO.java
  3. 43 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalPageViewDTO.java
  4. 54 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalSuggestionDTO.java
  5. 11 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalWorkFlowDTO.java
  6. 39 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ProcessStatusDTO.java
  7. 41 0
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ProcessTaskDTO.java
  8. 0 3
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/WorkFlowDTO.java
  9. 3 8
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/WorkFlowPageViewDTO.java
  10. 0 4
      dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/entity/WorkFlow.java
  11. 1 1
      dcuc-auth-service/pom.xml
  12. 20 8
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/IAuthApplyBusiness.java
  13. 333 96
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/impl/AuthApplyBusiness.java
  14. 6 6
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/impl/ServiceAuthBusinessImpl.java
  15. 20 11
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/facade/AuthApplyFacade.java
  16. 7 10
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/service/IWorkFlowService.java
  17. 16 64
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/service/impl/WorkFlowServiceImpl.java
  18. 21 1
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/DcucAuthApprovalConfig.java
  19. 6 0
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/DcucAuthConfig.java
  20. 0 4
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/SubSyncConfig.java
  21. 39 0
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/constance/ApprovalApiConstance.java
  22. 3 1
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/msg/WorkFlowResultListener.java
  23. 10 6
      dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/sub/business/impl/SubSyncBusiness.java
  24. 8 3
      dcuc-auth-service/src/main/resources/application-auth.yml

+ 25 - 11
dcuc-auth-api/src/main/java/com/dragoninfo/dcuc/auth/auth/facade/IAuthApplyFacade.java

@@ -1,15 +1,14 @@
 package com.dragoninfo.dcuc.auth.auth.facade;
 
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunApplyUpdateDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunAuthApplyDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.FunApplyDetailDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowViewDTO;
+import com.dragoninfo.dcuc.auth.auth.dto.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * 权限申请api
  * @author mazq
@@ -28,12 +27,13 @@ public interface IAuthApplyFacade {
 
     /**
      * 应用功能权限申请详情
-     * @param id
+     * @param applyOrdNo
      * @param needFlowInfo
      * @return
      */
     @PostMapping("funApplyDetail")
-    FunApplyDetailDTO funApplyDetail(@RequestParam("id") String id,@RequestParam(value = "needFlowInfo", required = false) Boolean needFlowInfo);
+    FunApplyDetailDTO funApplyDetail(@RequestParam("applyOrdNo") String applyOrdNo,
+                                     @RequestParam(value = "needFlowInfo", required = false) Boolean needFlowInfo);
 
     /**
      * 应用功能权限申请工单修改
@@ -50,24 +50,38 @@ public interface IAuthApplyFacade {
      * @return
      */
     @PostMapping("authApplySearch")
-    Page<WorkFlowViewDTO> authApplySearch(@RequestBody SearchDTO searchDTO);
+    Page<WorkFlowPageViewDTO> authApplySearch(@RequestBody SearchDTO searchDTO);
 
     /**
      * 通用
      * 工单撤销
-     * @param id
+     * @param applyOrdNo
      * @return
      */
     @GetMapping("authApplyCancel")
-    Boolean authApplyCancel(@RequestParam("id") String id);
+    ResponseStatus authApplyCancel(@RequestParam("applyOrdNo") String applyOrdNo);
 
     /**
      * 通用
      * 工单删除
-     * @param id
+     * @param applyOrdNo
      * @return
      */
     @DeleteMapping("authApplyDelete")
-    Boolean authApplyDelete(@RequestParam("id") String id);
+    ResponseStatus authApplyDelete(@RequestParam("applyOrdNo") String applyOrdNo);
+
+    /**
+     * 根据工作流审批单号获取审批意见
+     * @param applyOrdNo
+     * @return
+     */
+    @GetMapping("approvalSuggestion")
+    List<ApprovalSuggestionDTO> approvalSuggestion(@RequestParam("applyOrdNo") String applyOrdNo);
 
+    /**
+     * 根据工作流审批单号获取流程状态(流程图)
+     * @param applyOrdNo
+     * @return
+     */
+    List<ProcessStatusDTO> processStatusView(@RequestParam("applyOrdNo") String applyOrdNo);
 }

+ 6 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/AppFunApplyUpdateDTO.java

@@ -13,6 +13,12 @@ import java.util.List;
 @Data
 public class AppFunApplyUpdateDTO {
 
+
+    /**
+     * 工作流审批单号
+     */
+    private String applyOrdNo;
+
     /**
      * 工单id
      */

+ 43 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalPageViewDTO.java

@@ -0,0 +1,43 @@
+package com.dragoninfo.dcuc.auth.auth.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author mazq
+ * @date 2021/7/19
+ */
+@Data
+public class ApprovalPageViewDTO {
+
+    /**
+     * 当前节点
+     */
+    private String taskName;
+
+    /**
+     * 未操作者
+     */
+    private String unOperateUsers;
+
+    /**
+     * 审批类型
+     */
+    private String flowType;
+
+    /**
+     * 审批标题
+     */
+    private String processTitle;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 审批单号
+     */
+    private String approveNo;
+}

+ 54 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalSuggestionDTO.java

@@ -0,0 +1,54 @@
+package com.dragoninfo.dcuc.auth.auth.dto;
+
+import lombok.Data;
+
+/**
+ * 工作流审批意见DTO
+ * @author mazq
+ * @date 2021/7/20
+ */
+@Data
+public class ApprovalSuggestionDTO {
+
+    /**
+     * 节点名称
+     */
+    private String nodeName;
+
+    /**
+     * 审批意见
+     */
+    private String approveMessage;
+
+    /**
+     * 审批时间
+     */
+    private String approveTime;
+
+    /**
+     * 审批人
+     */
+    private String assignee;
+
+    /**
+     * 审批人身份证号
+     */
+    private String assigneeIdcard;
+
+    /**
+     * 审批动作
+     */
+    private String approveState;
+
+    /**
+     * 节点定义ID
+     */
+    private String id;
+
+    /**
+     * 排序字段
+     */
+    private Integer sort;
+
+
+}

+ 11 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ApprovalWorkFlowDTO.java

@@ -43,6 +43,12 @@ public class ApprovalWorkFlowDTO {
      * 申请理由
      */
     private String applyReason;
+
+    /**
+     * 工作流审批单号
+     */
+    private String approveNo;
+
     /**
      * 流程标识码
      */
@@ -68,6 +74,11 @@ public class ApprovalWorkFlowDTO {
      */
     private String processName;
 
+    /**
+     * 流程标题
+     */
+    private String processTitle;
+
     /**
      * 权限有效起始时间(2020-01-01 00:00:00
      */

+ 39 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ProcessStatusDTO.java

@@ -0,0 +1,39 @@
+package com.dragoninfo.dcuc.auth.auth.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@Data
+public class ProcessStatusDTO {
+
+    /**
+     * 节点ID
+     */
+    private String nodeId;
+
+    /**
+     * 节点名称
+     */
+    private String nodeName;
+
+    /**
+     * 操作者总计
+     */
+    private Integer operatorSummary;
+
+    /**
+     * 已办
+     */
+    private Integer finishOperatorSummary;
+
+    /**
+     * 列表详情集合
+     */
+    private List<ProcessTaskDTO> taskVos;
+
+}

+ 41 - 0
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/ProcessTaskDTO.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.auth.auth.dto;
+
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@Data
+public class ProcessTaskDTO {
+
+    /**
+     * 操作人
+     */
+    private String assignee;
+
+    /**
+     * 操作人姓名
+     */
+    private String assigneeName;
+
+    /**
+     * 操作状态
+     */
+    private String operateState;
+
+    /**
+     * 接收时间,yyyy-MM-dd HH:mm:ss
+     */
+    private String receiveTime;
+
+    /**
+     * 处理时间,yyyy-MM-dd HH:mm:ss
+     */
+    private String handleTime;
+
+    /**
+     * 处理耗时
+     */
+    private String costTime;
+}

+ 0 - 3
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/WorkFlowDTO.java

@@ -52,9 +52,6 @@ public class WorkFlowDTO {
     /** 工作流实例id */
     private String flowId;
 
-    /** 工作流流程标识码 */
-    private String businessCode;
-
     /** 工作流名称 */
     private String processName;
 

+ 3 - 8
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/WorkFlowViewDTO.java → dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/dto/WorkFlowPageViewDTO.java

@@ -10,7 +10,7 @@ import java.util.Date;
  * @date 2021/7/14
  */
 @Data
-public class WorkFlowViewDTO {
+public class WorkFlowPageViewDTO {
 
     /**
      * 主键id
@@ -43,13 +43,8 @@ public class WorkFlowViewDTO {
     private String taskName;
 
     /**
-     * 是否可以编辑
+     * 流程审批单号
      */
-    private Boolean showEdit;
-
-    /**
-     * 是否可以撤回
-     */
-    private Boolean showRecall;
+    private String applyOrdNo;
 
 }

+ 0 - 4
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/entity/WorkFlow.java

@@ -88,10 +88,6 @@ public class WorkFlow implements LogicDeleteable,IdEntity<String> {
     @Column(name = "FLOW_ID")
     private String flowId;
 
-    /** 工作流流程标识码 */
-    @Column(name = "BUSINESS_CODE")
-    private String businessCode;
-
     /** 工作流状态 */
     @Column(name = "FLOW_STATUS")
     private String flowStatus;

+ 1 - 1
dcuc-auth-service/pom.xml

@@ -77,7 +77,7 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-common</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
+            <version>2.0.1-SNAPSHOT</version>
         </dependency>
 
         <dependency>

+ 20 - 8
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/IAuthApplyBusiness.java

@@ -1,13 +1,12 @@
 package com.dragoninfo.dcuc.auth.auth.business;
 
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunApplyUpdateDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunAuthApplyDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.FunApplyDetailDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowViewDTO;
+import com.dragoninfo.dcuc.auth.auth.dto.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.data.domain.Page;
 
+import java.util.List;
+
 /**
  * @author mazq
  * @date 2021/7/8
@@ -44,15 +43,15 @@ public interface IAuthApplyBusiness {
      * @param searchDTO
      * @return
      */
-    Page<WorkFlowViewDTO> authApplySearch(SearchDTO searchDTO);
+    Page<WorkFlowPageViewDTO> authApplySearch(SearchDTO searchDTO);
 
     /**
      * 通用
      * 工单撤销
-     * @param id
+     * @param applyOrdNo
      * @return
      */
-    Boolean authApplyCancel(String id);
+    ResponseStatus authApplyCancel(String applyOrdNo);
 
     /**
      * 通用
@@ -60,6 +59,19 @@ public interface IAuthApplyBusiness {
      * @param id
      * @return
      */
-    Boolean authApplyDelete(String id);
+    ResponseStatus authApplyDelete(String id);
 
+    /**
+     * 查询审批流程意见
+     * @param applyOrdNo
+     * @return
+     */
+    List<ApprovalSuggestionDTO> approvalSuggestion(String applyOrdNo);
+
+    /**
+     * 根据工作流审批单号获取流程状态(流程图)
+     * @param applyOrdNo
+     * @return
+     */
+    List<ProcessStatusDTO> processStatusView(String applyOrdNo);
 }

+ 333 - 96
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/impl/AuthApplyBusiness.java

@@ -1,6 +1,10 @@
 package com.dragoninfo.dcuc.auth.auth.business.impl;
 
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.dragoninfo.dcuc.auth.auth.business.IAuthApplyBusiness;
 import com.dragoninfo.dcuc.auth.auth.constance.AuthFlowOpeCons;
 import com.dragoninfo.dcuc.auth.auth.dto.*;
@@ -11,28 +15,42 @@ import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowSourceEnum;
 import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowStatusEnum;
 import com.dragoninfo.dcuc.auth.auth.service.IAppFunAuthApplyService;
 import com.dragoninfo.dcuc.auth.auth.service.IWorkFlowService;
-import com.dragoninfo.dcuc.auth.config.SubSyncConfig;
+import com.dragoninfo.dcuc.auth.config.DcucAuthApprovalConfig;
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
+import com.dragoninfo.dcuc.auth.constance.ApprovalApiConstance;
 import com.dragoninfo.dcuc.auth.util.WorkFlowTimeUtil;
+import com.dragoninfo.dcuc.common.Constants;
+import com.dragoninfo.dcuc.common.entity.ApiPageReq;
+import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
+import com.dragoninfo.dcuc.common.entity.SearchParam;
+import com.dragoninfo.dcuc.common.http.HttpUtil;
 import com.dragoninfo.dcuc.duceap.enums.AuthApplyTypeEnum;
-import com.dragoninfo.dcuc.duceap.enums.OperateDisposeTypeEnum;
-import com.dragoninfo.dcuc.user.user.enumresources.OperateTypeEnum;
+import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
-import com.dragonsoft.duceap.base.exception.ApplicationException;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.core.context.ContextUtils;
 import com.dragonsoft.duceap.core.search.Searchable;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
 import com.dragonsoft.duceap.core.search.filter.Condition;
 import com.google.common.base.Joiner;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.Header;
+import org.apache.http.message.BasicHeader;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
-import java.text.SimpleDateFormat;
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -46,7 +64,10 @@ import java.util.stream.Collectors;
 public class AuthApplyBusiness implements IAuthApplyBusiness {
 
     @Autowired
-    private SubSyncConfig subSyncConfig;
+    private DcucAuthConfig authConfig;
+
+    @Autowired
+    private DcucAuthApprovalConfig approvalConfig;
 
     @Autowired
     private IWorkFlowService workFlowService;
@@ -67,88 +88,228 @@ public class AuthApplyBusiness implements IAuthApplyBusiness {
         workFlowDTO.setApplyType(applyType);
         workFlowDTO.setApplySource(WorkFlowSourceEnum.SELF_AUTH_APPLY.getValue());
         workFlowDTO.setMessageId(UUIDUtils.getUUID()+ StrUtil.COLON + applyType);
-        workFlowDTO.setApplyAppCode(subSyncConfig.getAppCode());
+        workFlowDTO.setApplyAppCode(authConfig.getAppCode());
         //保存工单
         WorkFlow workFlow = workFlowService.saveWorkFlow(workFlowDTO);
         List<AppFunAuthResourceDTO> authResources = authApplyDTO.getResourceInfos();
         //保存授权相关信息
         List<AppFunApplyContent> contentList = funAuthApplyService.saveAuthApplyDetail(workFlow, authResources);
-        ResponseStatus status = funApplyPushToApproval(authApplyDTO, contentList);
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_CREATE_API;
+        url = Joiner.on(StrUtil.SLASH).join(url, api);
+        ResponseDTO status = funApplyPushToApproval(url, authApplyDTO, contentList);
         //推送不成功删除工单
         if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())){
             workFlowService.delById(workFlow.getId());
+        } else {
+            String applicantOrdNo = status.getResult().toString();
+            workFlow.setApplicantOrdNo(applicantOrdNo);
+            workFlowService.update(workFlow);
         }
         return status;
 
     }
 
     @Override
-    public Page<WorkFlowViewDTO> authApplySearch(SearchDTO searchDTO) {
+    public Page<WorkFlowPageViewDTO> authApplySearch(SearchDTO searchDTO) {
         Searchable searchable = Searchable.toSearchable(searchDTO);
-        parseTime(searchable);
-        Page<WorkFlow> workFlowsPage = workFlowService.pageSearch(searchable);
-        List<WorkFlow> content = workFlowsPage.getContent();
-        List<WorkFlowViewDTO> collect = content.stream().map(item -> {
-            WorkFlowViewDTO workFlowViewDTO = new WorkFlowViewDTO();
-            BeanUtils.copyProperties(item, workFlowViewDTO);
-            return workFlowViewDTO;
+        //查询审批中心获取审批单列表
+        Result<List<WorkFlowPageViewDTO>> result = getApprovalList(searchable);
+        return new PageImpl<>(result.getContent(), searchable.getPage(), result.getTotalElements());
+    }
+
+    /**
+     * 从审批中心获取申请单列表
+     * @param searchable
+     * @return
+     */
+    private Result<List<WorkFlowPageViewDTO>> getApprovalList(Searchable searchable) {
+        ApiSearchReq apiSearchReq = constructApiSearch(searchable);
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_PAGE_LIST_API;
+        String pageSearUrl = Joiner.on(StrUtil.SLASH).join(url, api);
+        List<Header> headers = getApprovalHeaders();
+        String responseJson = HttpUtil.postJSON(pageSearUrl, JSON.toJSONString(apiSearchReq), headers, null);
+        if(StringUtils.isBlank(responseJson)) {
+            return Result.fail();
+        }
+        Result<List<ApprovalPageViewDTO>> result = JSON.parseObject(responseJson, new TypeReference<Result<List<ApprovalPageViewDTO>>>() {{
+        }});
+        List<ApprovalPageViewDTO> content = result.getContent();
+        List<WorkFlowPageViewDTO> collect = content.stream().map(item -> {
+            WorkFlowPageViewDTO viewDTO = new WorkFlowPageViewDTO();
+            viewDTO.setApplyType(item.getFlowType());
+            viewDTO.setCreateTime(item.getCreateTime());
+            viewDTO.setDealOperator(item.getUnOperateUsers());
+            viewDTO.setFlowTitle(item.getProcessTitle());
+            viewDTO.setTaskName(item.getTaskName());
+            viewDTO.setApplyOrdNo(item.getApproveNo());
+            return viewDTO;
         }).collect(Collectors.toList());
-        setOperateFunction(collect);
-        return new PageImpl<>(collect,workFlowsPage.getPageable(), workFlowsPage.getTotalElements());
+        return Result.success(result.getTotalElements(), collect);
+    }
+
+    private ApiSearchReq constructApiSearch(Searchable searchable) {
+        Condition flowTitle = searchable.getSearchFilter("flowTitle", SearchOperator.like);
+        Condition applyType = searchable.getSearchFilter("applyType", SearchOperator.eq);
+        Condition createTimeGe = searchable.getSearchFilter("createTime", SearchOperator.ge);
+        Condition createTimeLe = searchable.getSearchFilter("createTime", SearchOperator.le);
+        Pageable page = searchable.getPage();
+        int pageNumber = page.getPageNumber();
+        int pageSize = page.getPageSize();
+        Map<String, SearchParam> filters = new HashMap<>();
+        ApiSearchReq apiSearchReq = new ApiSearchReq();
+        if(flowTitle != null) {
+            SearchParam searchParam = new SearchParam();
+            searchParam.setOperator(SearchOperator.like.getValue());
+            searchParam.setValue(flowTitle.getValue());
+            filters.put("processTitle", searchParam);
+        }
+        if(applyType != null) {
+            SearchParam searchParam = new SearchParam();
+            searchParam.setOperator(SearchOperator.eq.getValue());
+            searchParam.setValue(applyType.getValue());
+            filters.put("flowType", searchParam);
+        }
+        if(createTimeGe != null) {
+            SearchParam searchParam = new SearchParam();
+            searchParam.setOperator(SearchOperator.ge.getValue());
+            searchParam.setValue(createTimeGe.getValue());
+            filters.put("createTime", searchParam);
+        }
+        if(createTimeGe != null) {
+            SearchParam searchParam = new SearchParam();
+            searchParam.setOperator(SearchOperator.le.getValue());
+            searchParam.setValue(createTimeLe.getValue());
+            filters.put("createTime", searchParam);
+        }
+        String idcard = ContextUtils.getUserInfo().getIdcard();
+        log.info("approval list idcard:{}", idcard);
+        SearchParam searchParam = new SearchParam();
+        searchParam.setOperator(SearchOperator.eq.getValue());
+        searchParam.setValue(idcard);
+        filters.put("applicantIdcard", searchParam);
+
+        apiSearchReq.setFilters(filters);
+        ApiPageReq apiPageReq = new ApiPageReq();
+        apiPageReq.setFrom(pageNumber);
+        apiPageReq.setSize(pageSize);
+        apiSearchReq.setPage(apiPageReq);
+        return apiSearchReq;
     }
 
+
     @Override
-    public Boolean authApplyCancel(String id) {
-        WorkFlow workFlow = workFlowService.getById(id);
+    public ResponseStatus authApplyCancel(String applyOrdNo) {
+        WorkFlow workFlow = workFlowService.getByApplyOrdNo(applyOrdNo);
         if(null == workFlow) {
-            return false;
+            return ResponseStatus.fail("工单不存在");
         }
-        Boolean cancelResult = workFlowService.cancelWorkFlow(id);
-        if(cancelResult) {
-            approvalWorkFlowCancel(workFlow);
+        ResponseStatus status = approvalWorkFlowCancel(workFlow);
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return status;
         }
-        return true;
+        workFlowService.cancelWorkFlow(workFlow.getId());
+        return ResponseStatus.success();
     }
 
     @Override
-    public Boolean authApplyDelete(String id) {
-        WorkFlow workFlow = workFlowService.getById(id);
+    public ResponseStatus authApplyDelete(String applyOrdNo) {
+        WorkFlow workFlow = workFlowService.getByApplyOrdNo(applyOrdNo);
         if(null == workFlow) {
-            return false;
+            return ResponseStatus.fail("工单不存在");
+        }
+        ResponseStatus status = approvalWorkFlowDelete(workFlow);
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return status;
         }
-        workFlowService.delById(id);
-        funAuthApplyService.delByAuthApplyId(id);
-        approvalWorkFlowDelete(workFlow);
-        return true;
+        workFlowService.delById(workFlow.getId());
+        funAuthApplyService.delByAuthApplyId(workFlow.getId());
+        return ResponseStatus.success();
+    }
+
+    @Override
+    public List<ApprovalSuggestionDTO> approvalSuggestion(String applyOrdNo) {
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_SUGGEST_API;
+        api = api.replace("{approveNo}", applyOrdNo);
+        String suggestUrl = Joiner.on(StrUtil.SLASH).join(url, api);
+        List<Header> headers = getApprovalHeaders();
+        String get = HttpUtil.get(suggestUrl, null, headers);
+        JSONObject jsonObject = JSON.parseObject(get);
+        String statusCode = jsonObject.getString("statusCode");
+        if(!ResponseStatus.SUCCESS_CODE.equals(statusCode)) {
+            return  new ArrayList<>();
+        }
+        JSONArray jsonArray = jsonObject.getJSONArray("result");
+        return JSON.parseObject(jsonArray.toJSONString(), new TypeReference<List<ApprovalSuggestionDTO>>() {{
+        }});
+
+    }
+
+    @Override
+    public List<ProcessStatusDTO> processStatusView(String applyOrdNo) {
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_STATUS_API;
+        api = api.replace("{approveNo}", applyOrdNo);
+        String suggestUrl = Joiner.on(StrUtil.SLASH).join(url, api);
+        List<Header> headers = getApprovalHeaders();
+        String get = HttpUtil.get(suggestUrl, null, headers);
+        JSONObject jsonObject = JSON.parseObject(get);
+        String statusCode = jsonObject.getString("statusCode");
+        if(!ResponseStatus.SUCCESS_CODE.equals(statusCode)) {
+            return  new ArrayList<>();
+        }
+        JSONArray jsonArray = jsonObject.getJSONArray("result");
+        return JSON.parseObject(jsonArray.toJSONString(), new TypeReference<List<ProcessStatusDTO>>() {{
+        }});
     }
 
     /**
      * 删除审批中心工单
      * @param workFlow
+     * @return
      */
-    private void approvalWorkFlowDelete(WorkFlow workFlow) {
-
+    private ResponseStatus approvalWorkFlowDelete(WorkFlow workFlow) {
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_DELETE_API;
+        api = api.replace("{approveNo}", workFlow.getApplicantOrdNo());
+        String cancelUrl = Joiner.on(StrUtil.SLASH).join(url, api);
+        List<Header> headers = getApprovalHeaders();
+        String delete = HttpUtil.delete(cancelUrl, null, headers);
+        log.info("approvalWorkFlowDelete result:{}", delete);
+        ResponseStatus status = JSON.parseObject(delete, ResponseStatus.class);
+        return status;
     }
 
     /**
      * 撤销审批中心工单
      * @param workFlow
+     * @return
      */
-    private void approvalWorkFlowCancel(WorkFlow workFlow) {
-
+    private ResponseStatus approvalWorkFlowCancel(WorkFlow workFlow) {
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_CANCEL_API;
+        api = api.replace("{approveNo}", workFlow.getApplicantOrdNo());
+        String cancelUrl = Joiner.on(StrUtil.SLASH).join(url, api);
+        List<Header> headers = getApprovalHeaders();
+        String put = HttpUtil.put(cancelUrl, null, headers);
+        log.info("approvalWorkFlowCancel result:{}", put);
+        ResponseStatus status = JSON.parseObject(put, ResponseStatus.class);
+        return status;
     }
 
     @Override
-    public FunApplyDetailDTO funApplyDetail(String id, Boolean needFlowInfo) {
+    public FunApplyDetailDTO funApplyDetail(String applyOrdNo, Boolean needFlowInfo) {
         FunApplyDetailDTO detailDTO = new FunApplyDetailDTO();
-        WorkFlow workFlow = workFlowService.getById(id);
+        WorkFlow workFlow = workFlowService.getByApplyOrdNo(applyOrdNo);
         if(null == workFlow) {
             return detailDTO;
         }
         WorkFlowDTO workFlowDTO = new WorkFlowDTO();
         BeanUtils.copyProperties(workFlow, workFlowDTO);
         detailDTO.setWorkFlow(workFlowDTO);
-        List<AppFunApplyContent> contentList = funAuthApplyService.getByAuthApplyId(id);
+        List<AppFunApplyContent> contentList = funAuthApplyService.getByAuthApplyId(workFlow.getId());
         List<AppFunAuthResourceDTO> collect = contentList.stream().map(item -> {
             AppFunAuthResourceDTO resourceDTO = new AppFunAuthResourceDTO();
             resourceDTO.setAppId(item.getAppId());
@@ -156,16 +317,13 @@ public class AuthApplyBusiness implements IAuthApplyBusiness {
             return resourceDTO;
         }).collect(Collectors.toList());
         detailDTO.setResourceInfos(collect);
-        if(needFlowInfo) {
-            getFlowApprovalInfo(workFlow, detailDTO);
-        }
         return detailDTO;
     }
 
     @Override
     public ResponseStatus funApplyUpdate(AppFunApplyUpdateDTO updateDTO) {
-        String id = updateDTO.getId();
-        WorkFlow workFlow = workFlowService.getById(id);
+        String applyOrdNo = updateDTO.getApplyOrdNo();
+        WorkFlow workFlow = workFlowService.getByApplyOrdNo(applyOrdNo);
         if(null == workFlow) {
             return ResponseStatus.fail();
         }
@@ -213,7 +371,10 @@ public class AuthApplyBusiness implements IAuthApplyBusiness {
         appFunAuthApplyDTO.setWorkFlow(workFlowDTO);
         appFunAuthApplyDTO.setResourceInfos(resourceInfos);
         getUpdateContent(existContent, addContentList, delList);
-        return funApplyPushToApproval(appFunAuthApplyDTO, addContentList);
+        String url = authConfig.getApprovalCenterUrl();
+        String api = ApprovalApiConstance.APPROVAL_UPDATE_API;
+        url = Joiner.on(StrUtil.SLASH).join(url, api);
+        return funApplyPushToApproval(url, appFunAuthApplyDTO, addContentList);
     }
 
     private void getUpdateContent(List<AppFunApplyContent> existContent, List<AppFunApplyContent> contentList, List<AppFunApplyContent> delList) {
@@ -228,56 +389,25 @@ public class AuthApplyBusiness implements IAuthApplyBusiness {
         contentList.addAll(updateContent);
     }
 
-    private void getFlowApprovalInfo(WorkFlow workFlow, FunApplyDetailDTO detailDTO) {
-
-    }
 
-    /**
-     * 请求审批服务设置列表上的功能按钮和下一个节点信息
-     * @param collect
-     */
-    private void setOperateFunction(List<WorkFlowViewDTO> collect) {
-        collect.forEach(item->{
-            item.setShowEdit(true);
-            item.setShowRecall(true);
-            item.setTaskName("我");
-        });
-    }
-
-    private void parseTime(Searchable searchable) {
-        try {
-            Condition createTimeGe = searchable.getSearchFilter("createTime", SearchOperator.ge);
-            SimpleDateFormat format = new SimpleDateFormat();
-            if(null != createTimeGe) {
-                String timeStr = createTimeGe.getValue().toString();
-                Date parse = format.parse(timeStr);
-                searchable.removeSearchFilter("createTime",SearchOperator.ge);
-                searchable.addSearchFilter("createTime", SearchOperator.ge, parse);
-            }
-            Condition createTimeLe = searchable.getSearchFilter("createTime", SearchOperator.le);
-            if(null != createTimeLe) {
-                String timeStr = createTimeLe.getValue().toString();
-                Date parse = format.parse(timeStr);
-                searchable.removeSearchFilter("createTime",SearchOperator.le);
-                searchable.addSearchFilter("createTime", SearchOperator.le, parse);
-            }
-        }catch (Exception e) {
-            log.error("authApplySearch error.",e);
-            throw  new ApplicationException("列表查询异常");
-        }
-    }
-
-    private ResponseStatus funApplyPushToApproval(AppFunAuthApplyDTO authApplyDTO, List<AppFunApplyContent> contentList) {
+    private ResponseDTO funApplyPushToApproval(String url, AppFunAuthApplyDTO authApplyDTO, List<AppFunApplyContent> contentList) {
         ApprovalWorkFlowDTO approvalWorkFlowDTO = prepareFunApplyApprovalWorkFlow(authApplyDTO, contentList);
-        return dealPush(approvalWorkFlowDTO);
+        return dealPush(url, approvalWorkFlowDTO);
     }
 
     private ApprovalWorkFlowDTO prepareFunApplyApprovalWorkFlow(AppFunAuthApplyDTO authApplyDTO, List<AppFunApplyContent> contentList) {
         WorkFlowDTO workFlowDTO = authApplyDTO.getWorkFlow();
         ApprovalWorkFlowDTO approvalWorkFlowDTO = new ApprovalWorkFlowDTO();
         BeanUtils.copyProperties(workFlowDTO, approvalWorkFlowDTO, "resourceInfoDTO", "startTime", "endTime");
-        approvalWorkFlowDTO.setApplyContent(workFlowDTO.getFlowContent());
-        approvalWorkFlowDTO.setApplyAppCode(subSyncConfig.getAppCode());
+        setDifferentField(workFlowDTO, approvalWorkFlowDTO);
+        setResourceInfo(authApplyDTO, contentList, approvalWorkFlowDTO);
+        WorkFlowTimeUtil.setApprovalSETime(workFlowDTO, approvalWorkFlowDTO);
+        approvalWorkFlowDTO.setBusinessCode(approvalConfig.getFunAuthBusCode());
+        approvalWorkFlowDTO.setProcessType(approvalConfig.getProcessType());
+        return approvalWorkFlowDTO;
+    }
+
+    private void setResourceInfo(AppFunAuthApplyDTO authApplyDTO, List<AppFunApplyContent> contentList, ApprovalWorkFlowDTO approvalWorkFlowDTO) {
         String applicantIdcard = authApplyDTO.getWorkFlow().getApplicantIdcard();
         String applicantName = authApplyDTO.getWorkFlow().getApplicantName();
         ResourceInfoDTO resourceInfoDTO = new ResourceInfoDTO();
@@ -315,25 +445,132 @@ public class AuthApplyBusiness implements IAuthApplyBusiness {
         resourceInfoDTO.setVisitResourceCode(String.join(StrUtil.COMMA, codeList));
         resourceInfoDTO.setVisitResourceName(String.join(StrUtil.COMMA, nameList));
         approvalWorkFlowDTO.setResourceInfoDTO(resourceInfoDTO);
-        WorkFlowTimeUtil.setApprovalSETime(workFlowDTO, approvalWorkFlowDTO);
-        return approvalWorkFlowDTO;
     }
 
+    private void setDifferentField(WorkFlowDTO workFlowDTO, ApprovalWorkFlowDTO approvalWorkFlowDTO) {
+        approvalWorkFlowDTO.setApplyContent(workFlowDTO.getFlowContent());
+        approvalWorkFlowDTO.setApplyAppCode(authConfig.getAppCode());
+        approvalWorkFlowDTO.setProcessTitle(workFlowDTO.getFlowTitle());
+        approvalWorkFlowDTO.setFlowType(workFlowDTO.getApplyType());
+        approvalWorkFlowDTO.setApproveNo(workFlowDTO.getApplicantOrdNo());
+    }
 
-    private ResponseStatus dealPush(ApprovalWorkFlowDTO approvalWorkFlowDTO) {
-        ResponseStatus status;
+
+    private ResponseDTO dealPush(String url, ApprovalWorkFlowDTO approvalWorkFlowDTO) {
+        ResponseDTO status;
         try {
-            log.info("-------pushWorkFlowToServer START---------------");
-            status = workFlowService.pushToApproval(approvalWorkFlowDTO);
-            log.info("-------pushWorkFlowToServer END---------------");
+            log.info("-------pushToApprovalCenter START---------------");
+            status = pushToApproval(url, approvalWorkFlowDTO);
+            log.info("-------pushToApprovalCenter END---------------");
             if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
-                status = new ResponseStatus(ResponseStatus.FAIL_CODE,"approve service faild :"+status.getMessage());
+                status = new ResponseDTO(ResponseStatus.FAIL_CODE,"approve service faild :"+status.getMessage(), null);
             }
         } catch (Exception e) {
             log.error("work flow push error.", e);
-            status = new ResponseStatus(ResponseStatus.FAIL_CODE,"push to work flow error");
+            status = new ResponseDTO(ResponseStatus.FAIL_CODE,"push to work flow error", null);
         }
         return status;
     }
 
+
+    private ResponseDTO pushToApproval(String url, ApprovalWorkFlowDTO approvalWorkFlowDTO) {
+        List<Header> headers = getApprovalHeaders();
+        log.info("approval center push url:{}, flowType:{}",
+                url,
+                approvalWorkFlowDTO.getFlowType());
+        String postBody = JSON.toJSONString(approvalWorkFlowDTO);
+        String response = HttpUtil.postJSON(url, postBody, headers, null);
+        if(StringUtils.isBlank(response)) {
+            return new ResponseDTO(ResponseStatus.FAIL_CODE,"push to approve service failed", null);
+        }
+
+        log.info("approval center push result:{}", response);
+        return JSON.parseObject(response, ResponseDTO.class);
+    }
+
+    /**
+     * 总线调用方式
+     * 授权推送工单到审批服务
+     * @param approvalWorkFlowDTO
+     * @return
+     */
+    private ResponseDTO pushToApprovalViaBus(ApprovalWorkFlowDTO approvalWorkFlowDTO) {
+        List<Header> headers = getBusApprovalHeaders();
+        log.info("work flow push url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{},flowType:{}",
+                approvalConfig.getWorkflowUrl(),
+                approvalConfig.getBusSraId(),
+                approvalConfig.getBusServiceId(),
+                approvalConfig.getBusServiceFunc(),
+                approvalWorkFlowDTO.getFlowType());
+        String postBody = JSON.toJSONString(approvalWorkFlowDTO);
+        log.info("work flow request body:{}", postBody);
+
+        String response = HttpUtil.postJSON(approvalConfig.getWorkflowUrl(), postBody, headers, null);
+        if(org.apache.commons.lang3.StringUtils.isBlank(response)) {
+            return new ResponseDTO(ResponseStatus.FAIL_CODE,"push to approve service failed", null);
+        }
+
+        log.info("work flow push result:{}", response);
+        return JSON.parseObject(response, ResponseDTO.class);
+    }
+
+    /**
+     * 获取通过总线调用审批中心请求头
+     * @return
+     */
+    private List<Header> getBusApprovalHeaders() {
+        List<Header> headers = new ArrayList<>();
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        String userToken = "";
+        String appToken = "";
+        if (requestAttributes != null) {
+            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
+            HttpServletRequest request = servletRequestAttributes.getRequest();
+            userToken = request.getHeader(Constants.USER_TOKEN);
+            appToken = request.getHeader(Constants.APP_TOKEN);
+            BasicHeader appTokenHeader = new BasicHeader(Constants.BUS_SRA_TOKEN, appToken);
+            BasicHeader userTokenHeader = new BasicHeader(Constants.BUS_SRE_TOKEN, userToken);
+            headers.add(appTokenHeader);
+            headers.add(userTokenHeader);
+        }
+
+        String idcard = UserContextUtils.getCurrentUser().getIdcard();
+        BasicHeader busSreIdcardHeader = new BasicHeader(Constants.BUS_SRE_IDCARD , idcard);
+        BasicHeader busSraIdHeader = new BasicHeader("bus_sra_id", approvalConfig.getBusSraId());
+        BasicHeader busServiceIdHeader = new BasicHeader("bus_service_id", approvalConfig.getBusServiceId());
+        BasicHeader busServiceFuncHeader = new BasicHeader("bus_service_func", approvalConfig.getBusServiceFunc());
+        headers.add(busSraIdHeader);
+        headers.add(busSreIdcardHeader);
+        headers.add(busServiceIdHeader);
+        headers.add(busServiceFuncHeader);
+        log.info("userToken:{}, appToken:{}, idcard:{}", appToken, userToken, idcard);
+        return headers;
+    }
+
+
+    /**
+     * 获取调用审批中心请求头
+     * @return
+     */
+    private List<Header> getApprovalHeaders() {
+        List<Header> headers = new ArrayList<>();
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        if (requestAttributes != null) {
+            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
+            HttpServletRequest request = servletRequestAttributes.getRequest();
+            String userToken = request.getHeader(Constants.USER_TOKEN);
+            String appToken = request.getHeader(Constants.APP_TOKEN);
+            BasicHeader appTokenHeader = new BasicHeader(Constants.APP_TOKEN, appToken);
+            BasicHeader userTokenHeader = new BasicHeader(Constants.USER_TOKEN, userToken);
+            headers.add(appTokenHeader);
+            headers.add(userTokenHeader);
+        }
+        String idcard = UserContextUtils.getCurrentUser().getIdcard();
+        BasicHeader appCodeHeader = new BasicHeader(Constants.APP_CODE, authConfig.getAppCode());
+        BasicHeader idcardHeader = new BasicHeader(Constants.IDCARD, idcard);
+        headers.add(appCodeHeader);
+        headers.add(idcardHeader);
+        return headers;
+    }
+
 }

+ 6 - 6
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/business/impl/ServiceAuthBusinessImpl.java

@@ -18,6 +18,7 @@ import com.dragoninfo.dcuc.auth.auth.service.IAuthFlowService;
 import com.dragoninfo.dcuc.auth.auth.service.IServiceAuthResultService;
 import com.dragoninfo.dcuc.auth.auth.service.impl.AuthFlowServiceImpl;
 import com.dragoninfo.dcuc.auth.config.DcucAuthApprovalConfig;
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
 import com.dragoninfo.dcuc.auth.config.SubSyncConfig;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.http.HttpUtil;
@@ -59,6 +60,9 @@ public class ServiceAuthBusinessImpl implements IServiceAuthBusiness {
     @Autowired
     private DcucAuthApprovalConfig serviceAuthConfig;
 
+    @Autowired
+    private DcucAuthConfig authConfig;
+
     @Autowired
     private IApplyInfoFacade applyInfoFacade;
 
@@ -68,9 +72,6 @@ public class ServiceAuthBusinessImpl implements IServiceAuthBusiness {
     @Autowired
     private IOrgInfoFacade orgInfoFacade;
 
-    @Autowired
-    private SubSyncConfig subSyncConfig;
-
     @Override
     public boolean dealAuthFlowResult(WorkFlowResutlAcceptDTO dto) {
         String flowId = dto.getProcessInstanceId();
@@ -215,7 +216,7 @@ public class ServiceAuthBusinessImpl implements IServiceAuthBusiness {
         approvalWorkFlowDTO.setFlowType(dto.getFlowType());
         approvalWorkFlowDTO.setResourceInfoDTO(resourceInfoDTO);
         approvalWorkFlowDTO.setOperateType("2");
-        approvalWorkFlowDTO.setApplyAppCode(subSyncConfig.getAppCode());
+        approvalWorkFlowDTO.setApplyAppCode(authConfig.getAppCode());
         approvalWorkFlowDTO.setActivitiHolderList(dto.getActivitiHolderDTOSList());
         if (WorkFlowPermissionTypeEnum.TEMP.getValue().equals(approvalWorkFlowDTO.getPermissionValidType())) {
             Date startTime = dto.getStartTime();
@@ -260,8 +261,7 @@ public class ServiceAuthBusinessImpl implements IServiceAuthBusiness {
             return new ResponseDTO(ResponseStatus.FAIL_CODE,"push to approve service faild",null);
         }
         logger.info("work flow push result:{}", response);
-        ResponseDTO responseDTO = JSON.parseObject(response, ResponseDTO.class);
-        return responseDTO;
+        return JSON.parseObject(response, ResponseDTO.class);
     }
 
 }

+ 20 - 11
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/facade/AuthApplyFacade.java

@@ -1,10 +1,7 @@
 package com.dragoninfo.dcuc.auth.auth.facade;
 
 import com.dragoninfo.dcuc.auth.auth.business.IAuthApplyBusiness;
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunApplyUpdateDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunAuthApplyDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.FunApplyDetailDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowViewDTO;
+import com.dragoninfo.dcuc.auth.auth.dto.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +9,8 @@ import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * @author mazq
  * @date 2021/7/8
@@ -30,11 +29,11 @@ public class AuthApplyFacade implements IAuthApplyFacade {
     }
 
     @Override
-    public FunApplyDetailDTO funApplyDetail(String id, Boolean needFlowInfo) {
+    public FunApplyDetailDTO funApplyDetail(String applyOrdNo, Boolean needFlowInfo) {
         if(null == needFlowInfo) {
             needFlowInfo = false;
         }
-       return authApplyBusiness.funApplyDetail(id, needFlowInfo);
+       return authApplyBusiness.funApplyDetail(applyOrdNo, needFlowInfo);
     }
 
     @Override
@@ -43,17 +42,27 @@ public class AuthApplyFacade implements IAuthApplyFacade {
     }
 
     @Override
-    public Page<WorkFlowViewDTO> authApplySearch(SearchDTO searchDTO) {
+    public Page<WorkFlowPageViewDTO> authApplySearch(SearchDTO searchDTO) {
         return authApplyBusiness.authApplySearch(searchDTO);
     }
 
     @Override
-    public Boolean authApplyCancel(String id) {
-        return authApplyBusiness.authApplyCancel(id);
+    public ResponseStatus authApplyCancel(String applyOrdNo) {
+        return authApplyBusiness.authApplyCancel(applyOrdNo);
+    }
+
+    @Override
+    public ResponseStatus authApplyDelete(String applyOrdNo) {
+        return authApplyBusiness.authApplyDelete(applyOrdNo);
+    }
+
+    @Override
+    public List<ApprovalSuggestionDTO> approvalSuggestion(String applyOrdNo) {
+        return authApplyBusiness.approvalSuggestion(applyOrdNo);
     }
 
     @Override
-    public Boolean authApplyDelete(String id) {
-        return authApplyBusiness.authApplyDelete(id);
+    public List<ProcessStatusDTO> processStatusView(String applyOrdNo) {
+        return authApplyBusiness.processStatusView(applyOrdNo);
     }
 }

+ 7 - 10
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/service/IWorkFlowService.java

@@ -1,10 +1,7 @@
 package com.dragoninfo.dcuc.auth.auth.service;
 
-import com.dragoninfo.dcuc.auth.auth.dto.ApprovalWorkFlowDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowDTO;
-import com.dragoninfo.dcuc.auth.auth.dto.AppFunAuthApplyDTO;
 import com.dragoninfo.dcuc.auth.auth.entity.WorkFlow;
-import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.core.search.Searchable;
 import org.springframework.data.domain.Page;
 
@@ -22,13 +19,6 @@ public interface IWorkFlowService {
      */
     WorkFlow saveWorkFlow(WorkFlowDTO authApplyDTO);
 
-    /**
-     * 授权推送工单到审批服务
-     * @param approvalWorkFlowDTO
-     * @return
-     */
-    ResponseStatus pushToApproval(ApprovalWorkFlowDTO approvalWorkFlowDTO);
-
     /**
      * 根据messageId查询工单
      * @param messageId
@@ -68,4 +58,11 @@ public interface IWorkFlowService {
      * @return
      */
     Boolean cancelWorkFlow(String id);
+
+    /**
+     * 根据审批单号获取工单
+     * @param applyOrdNo
+     * @return
+     */
+    WorkFlow getByApplyOrdNo(String applyOrdNo);
 }

+ 16 - 64
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/auth/service/impl/WorkFlowServiceImpl.java

@@ -1,36 +1,22 @@
 package com.dragoninfo.dcuc.auth.auth.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.dragoninfo.dcuc.auth.auth.dto.ApprovalWorkFlowDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowDTO;
 import com.dragoninfo.dcuc.auth.auth.entity.WorkFlow;
 import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowStatusEnum;
 import com.dragoninfo.dcuc.auth.auth.repo.WorkFlowRepository;
 import com.dragoninfo.dcuc.auth.auth.service.IWorkFlowService;
 import com.dragoninfo.dcuc.auth.config.DcucAuthApprovalConfig;
-import com.dragoninfo.dcuc.common.Constants;
-import com.dragoninfo.dcuc.common.http.HttpUtil;
-import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
-import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.core.search.Searchable;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.http.Header;
-import org.apache.http.message.BasicHeader;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.context.request.RequestAttributes;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * @author mazq
@@ -41,10 +27,13 @@ import java.util.List;
 public class WorkFlowServiceImpl implements IWorkFlowService {
 
     @Autowired
-    WorkFlowRepository workFlowRepository;
+    private WorkFlowRepository workFlowRepository;
+
+    @Autowired
+    private DcucAuthApprovalConfig approvalConfig;
 
     @Autowired
-    DcucAuthApprovalConfig approvalConfig;
+    private DcucAuthConfig authConfig;
 
     @Override
     public WorkFlow saveWorkFlow(WorkFlowDTO dto) {
@@ -54,53 +43,6 @@ public class WorkFlowServiceImpl implements IWorkFlowService {
         return workFlowRepository.save(workFlow);
     }
 
-    @Override
-    public ResponseStatus pushToApproval(ApprovalWorkFlowDTO approvalWorkFlowDTO) {
-        List<Header> headers = new ArrayList<>();
-        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
-        String userToken = "";
-        String appToken = "";
-        if (requestAttributes != null) {
-            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
-            HttpServletRequest request = servletRequestAttributes.getRequest();
-            userToken = request.getHeader(Constants.USER_TOKEN);
-            appToken = request.getHeader(Constants.APP_TOKEN);
-            BasicHeader appTokenHeader = new BasicHeader(Constants.BUS_SRA_TOKEN, appToken);
-            BasicHeader userTokenHeader = new BasicHeader(Constants.BUS_SRE_TOKEN, userToken);
-            headers.add(appTokenHeader);
-            headers.add(userTokenHeader);
-        }
-
-        String idcard = UserContextUtils.getCurrentUser().getIdcard();
-        BasicHeader busSreIdcardHeader = new BasicHeader(Constants.BUS_SRE_IDCARD , idcard);
-        BasicHeader busSraIdHeader = new BasicHeader("bus_sra_id", approvalConfig.getBusSraId());
-        BasicHeader busServiceIdHeader = new BasicHeader("bus_service_id", approvalConfig.getBusServiceId());
-        BasicHeader busServiceFuncHeader = new BasicHeader("bus_service_func", approvalConfig.getBusServiceFunc());
-        headers.add(busSraIdHeader);
-        headers.add(busSreIdcardHeader);
-        headers.add(busServiceIdHeader);
-        headers.add(busServiceFuncHeader);
-        log.info("work flow push url:{}, busSraId:{}, busSreIdcard:{}, busServiceId:{}, busServiceFunc:{},userToken:{},appToken:{},flowType:{}",
-                approvalConfig.getWorkflowUrl(),
-                approvalConfig.getBusSraId(),
-                idcard,
-                approvalConfig.getBusServiceId(),
-                approvalConfig.getBusServiceFunc(),
-                userToken,
-                appToken,
-                approvalWorkFlowDTO.getFlowType());
-        String postBody = JSON.toJSONString(approvalWorkFlowDTO);
-        log.info("work flow request body:{}", postBody);
-
-        String response = HttpUtil.postJSON(approvalConfig.getWorkflowUrl(), postBody, headers, null);
-        if(StringUtils.isBlank(response)) {
-            return new ResponseStatus(ResponseStatus.FAIL_CODE,"push to approve service failed");
-        }
-
-        log.info("work flow push result:{}", response);
-        return JSON.parseObject(response, ResponseStatus.class);
-    }
-
     @Override
     public WorkFlow getByMessageId(String messageId) {
         if(StringUtils.isBlank(messageId)) {
@@ -141,4 +83,14 @@ public class WorkFlowServiceImpl implements IWorkFlowService {
        return i>0;
     }
 
+    @Override
+    public WorkFlow getByApplyOrdNo(String applyOrdNo) {
+        if(StringUtils.isBlank(applyOrdNo)) {
+            return null;
+        }
+        WorkFlow query = new WorkFlow();
+        query.setApplicantOrdNo(applyOrdNo);
+        Example<WorkFlow> example = Example.of(query);
+        return workFlowRepository.findOne(example).orElse(null);
+    }
 }

+ 21 - 1
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/DcucAuthApprovalConfig.java

@@ -10,10 +10,11 @@ import org.springframework.stereotype.Component;
  */
 @Data
 @Component
-@ConfigurationProperties(prefix = "dcuc.auth.service-auth")
+@ConfigurationProperties(prefix = "dcuc.auth.approval-center")
 public class DcucAuthApprovalConfig {
     /**
      * 审批服务推送工单url
+     * 调用总线的地址
      */
     private String workflowUrl;
     /**
@@ -38,4 +39,23 @@ public class DcucAuthApprovalConfig {
      * 是否开启kafka
      */
     private boolean kafka;
+    /**
+     * 审批中心 授权申请processType
+     */
+    private String processType;
+
+    /**
+     * 审批中心 服务授权businessCode
+     */
+    private String serviceAuthBusCode;
+
+    /**
+     * 审批中心 功能授权businessCode
+     */
+    private String funAuthBusCode;
+
+    /**
+     * 审批中心 服务授权撤销businessCode
+     */
+    private String serviceAuthCancel;
 }

+ 6 - 0
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/DcucAuthConfig.java

@@ -74,4 +74,10 @@ public class DcucAuthConfig {
      */
     private Boolean gmSelectEnable = false;
 
+    /**
+     * 审批中心Url
+     * 非总线调用地址
+     */
+    private String approvalCenterUrl;
+
 }

+ 0 - 4
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/SubSyncConfig.java

@@ -28,8 +28,4 @@ public class SubSyncConfig {
      */
     private String orgInfoUrl;
 
-    /**
-     * 请求用户中心请求头-代表权限中心的应用code
-     */
-    private String appCode;
 }

+ 39 - 0
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/constance/ApprovalApiConstance.java

@@ -0,0 +1,39 @@
+package com.dragoninfo.dcuc.auth.constance;
+
+/**
+ * @author mazq
+ * @date 2021/7/19
+ */
+public class ApprovalApiConstance {
+
+    /**
+     * 审批单列表api
+     */
+    public static final String APPROVAL_PAGE_LIST_API = "/approve-core/api/v2/approves/search";
+
+    /**
+     * 审批单创建api
+     */
+    public static final String APPROVAL_CREATE_API = "/approve-core/api/v2/approves/authorities";
+    /**
+     * 审批单更新api
+     */
+    public static final String APPROVAL_UPDATE_API = "/approve-core/api/v2/approves/authorities";
+    /**
+     * 审批单撤销api
+     */
+    public static final String APPROVAL_CANCEL_API = "/approve-core/api/v2/approves/{approveNo}/recall";
+    /**
+     * 审批单删除api
+     */
+    public static final String APPROVAL_DELETE_API = "/approve-core/api/v2/approves/{approveNo}";
+    /**
+     * 审批意见查询api
+     */
+    public static final String APPROVAL_SUGGEST_API = "/approve-core/api/v2/approves/{approveNo}/approve-comments";
+    /**
+     * 审批流程状态查询api
+     */
+    public static final String APPROVAL_STATUS_API = "/api/v2/approves/{approveNo}/process-status";
+
+}

+ 3 - 1
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/msg/WorkFlowResultListener.java

@@ -8,6 +8,8 @@ import com.dragoninfo.dcuc.auth.auth.dto.ApprovalWorkFlowDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowResutlAcceptDTO;
 import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowStatusEnum;
 import com.dragoninfo.dcuc.auth.auth.service.IApprovalService;
+import com.dragoninfo.dcuc.auth.config.DcucAuthApprovalConfig;
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
 import com.dragoninfo.dcuc.auth.config.SubSyncConfig;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
@@ -39,7 +41,7 @@ public class WorkFlowResultListener {
     private IAuthAprResultBusiness aprResultBusiness;
 
     @Autowired
-    private SubSyncConfig config;
+    private DcucAuthConfig config;
 
     @KafkaListener(topics = "${dcuc.auth.service-auth.topic}",containerFactory = "kafkaListenerContainerFactory")
     public void receiveMessage(ConsumerRecord<String, byte[]> record) {

+ 10 - 6
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/sub/business/impl/SubSyncBusiness.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.auth.auth.constance.CommonCons;
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
 import com.dragoninfo.dcuc.auth.config.SubSyncConfig;
 import com.dragoninfo.dcuc.auth.sub.business.ISubSyncBusiness;
 import com.dragoninfo.dcuc.auth.sub.dto.SyncAcceptDTO;
@@ -66,12 +67,15 @@ public class SubSyncBusiness implements ISubSyncBusiness {
     private IAuthOrgOriginalDataService orgOriginalDataService;
 
     @Autowired
-    private SubSyncConfig config;
+    private SubSyncConfig subSyncConfig;
+
+    @Autowired
+    private DcucAuthConfig authConfig;
 
     @Override
     public ResponseStatus userSync() {
         CompletableFuture.supplyAsync(()-> {
-                getUserInfoFromRemote(1, config.getPageSize());
+                getUserInfoFromRemote(1, subSyncConfig.getPageSize());
                 return true;
             }).exceptionally(e->{
                 log.error("getUserInfoFromRemote error.",e);
@@ -105,7 +109,7 @@ public class SubSyncBusiness implements ISubSyncBusiness {
         do {
             logger.info("getUserInfoFromRemote currentPage:{}", currentPage);
             pageMap.put("from", currentPage);
-            String result = HttpUtil.postJSON(config.getUserInfoUrl(), JSON.toJSONString(param), headers,null);
+            String result = HttpUtil.postJSON(subSyncConfig.getUserInfoUrl(), JSON.toJSONString(param), headers,null);
             if (StringUtils.isBlank(result)) {
                logger.info("result is null");
                break;
@@ -136,7 +140,7 @@ public class SubSyncBusiness implements ISubSyncBusiness {
 
     private List<Header> getHeards(String idcard) {
         List<Header> headers = new ArrayList<>();
-        BasicHeader appCodeHeader = new BasicHeader("appCode",config.getAppCode());
+        BasicHeader appCodeHeader = new BasicHeader("appCode", authConfig.getAppCode());
         BasicHeader idcardHeader = new BasicHeader("idcard", idcard);
         RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
         String userToken = "";
@@ -209,7 +213,7 @@ public class SubSyncBusiness implements ISubSyncBusiness {
     @Override
     public ResponseStatus orgSync() {
         CompletableFuture.supplyAsync(()-> {
-                getOrgInfoFromRemote(1,config.getPageSize());
+                getOrgInfoFromRemote(1, subSyncConfig.getPageSize());
                 return true;
         }).exceptionally(e->{
             log.error("getOrgInfoFromRemote error.",e);
@@ -281,7 +285,7 @@ public class SubSyncBusiness implements ISubSyncBusiness {
         logger.info("-------------getOrgInfoFromRemote START-----------");
         do {
             pageMap.put("from", currentPage);
-            String result = HttpUtil.postJSON(config.getOrgInfoUrl(), JSON.toJSONString(param), headers,null);
+            String result = HttpUtil.postJSON(subSyncConfig.getOrgInfoUrl(), JSON.toJSONString(param), headers,null);
             if(StringUtils.isBlank(result)) {
                 logger.info("result is null");
                 break;

+ 8 - 3
dcuc-auth-service/src/main/resources/application-auth.yml

@@ -11,8 +11,8 @@ dcuc:
       message-topic: 90120021
       message-jssq-topic: 90220013
       kafka-servers: http://192.168.10.20:9981/dcms-manager
-    #服务授权
-    service-auth:
+    #审批中心
+    approval-center:
       #是否开启kafka功能
       kafka: false
       #工作流工单推送地址
@@ -22,6 +22,10 @@ dcuc:
       busServiceFunc: saveUsingPOST
       #审批中心kafka topic
       topic: 10000027
+      process-type: auth-update
+      service-auth-bus-code: service-auth-apply
+      fun-auth-bus-code: function-auth-apply
+      service-auth-cancel: service-auth-remove
     audit-log:
       #是否开启kafka功能
       kafka: true
@@ -39,4 +43,5 @@ dcuc:
       org-info-url: http://10.11.1.237:8860/dcuc/api/user-service/v1/auth-sync/org-sync
       app-code: A-130000000000-0210
     gm-enable: false
-    gm-select-enable: false
+    gm-select-enable: false
+    approval-center-url: http://10.254.11.185:8866/approve-gateway