浏览代码

Merge branch 'huangzqa-fix-20230302' into 'develop'

Huangzqa fix 20230302

See merge request dcuc-tjdsj/approve-core!97
马志强 2 年之前
父节点
当前提交
cdbdf54d7f
共有 38 个文件被更改,包括 2280 次插入178 次删除
  1. 12 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/api/IApiV2ApproveFacade.java
  2. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoAuthReqVO.java
  3. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoAuthUpdateReqVO.java
  4. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java
  5. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoUpdateReqVO.java
  6. 1 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApproveOperateReqVO.java
  7. 1 1
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ResourceInfoReqVO.java
  8. 37 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v2/ApproveOperateV2ReqVO.java
  9. 1 2
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoRespVO.java
  10. 1 2
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoV2RespVO.java
  11. 42 0
      approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ResourceInfoRespVO.java
  12. 15 5
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveBusiness.java
  13. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IDcucAuthBusiness.java
  14. 81 30
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveBusinessImpl.java
  15. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/DcucAuthBusinessImpl.java
  16. 17 4
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/WorkFlowBusinessImpl.java
  17. 62 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/BaseOperateReqDTO.java
  18. 14 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ContentRespDTO.java
  19. 77 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/OperateReqDTO.java
  20. 58 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ResourceInfoDTO.java
  21. 30 6
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveFacade.java
  22. 30 5
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java
  23. 76 8
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java
  24. 1 1
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApprovalInfo.java
  25. 38 7
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java
  26. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApprovalInfoMsgItemDTO.java
  27. 2 2
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApproveMessageInfoDTO.java
  28. 5 18
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveService.java
  29. 4 15
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveRecordServiceImpl.java
  30. 179 58
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java
  31. 164 0
      approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ResponseUtil.java
  32. 1 1
      approve-core-service/src/main/resources/application-approve.yml
  33. 2 2
      approve-core-service/src/main/resources/application-base.yml
  34. 5 0
      approve-core-service/src/main/resources/config/mysql/V1_1_0014__add_disagree_resource_.sql
  35. 399 0
      approve-core-service/src/main/resources/workflow/一级审批1000000662(_)-20220825.xml
  36. 515 0
      approve-core-service/src/main/resources/workflow/二级审批1000000680(_)-20220825.xml
  37. 400 0
      approve-core-service/src/main/resources/workflow/应用功能权限申请1000000698(_)-20220825.xml
  38. 2 1
      approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/DcucAuthBusinessImplTest.java

+ 12 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/facade/api/IApiV2ApproveFacade.java

@@ -5,7 +5,9 @@ import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoAuthReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoAuthUpdateReqVO;
+import com.dragonsoft.dcuc.approve.model.req.v2.ApproveOperateV2ReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoV2RespVO;
+import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.ProcessStatusVo;
 import com.dragonsoft.dcuc.approve.model.resp.TaskOperateRespVO;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
@@ -145,4 +147,14 @@ public interface IApiV2ApproveFacade {
     ResponseDTO<TaskOperateRespVO> approveOperateType(@PathVariable(value = "approveNo") String approveNo,
                                                       @PathVariable(value = "pageType") String pageType);
 
+    /**
+     * 审批操作
+     *
+     * @param approveOperateV2ReqVO 审批操作
+     * @return 结果
+     */
+    @ApiOperation(value = "审批操作", notes = "审批操作")
+    @RequestMapping(value = "api/v2/approve-operate", method = RequestMethod.PUT)
+    ResponseDTO<OperateRespVO> operate(@Validated @RequestBody ApproveOperateV2ReqVO approveOperateV2ReqVO);
+
 }

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoAuthReqVO.java

@@ -87,7 +87,7 @@ public class ApprovalInfoAuthReqVO implements Serializable {
     @ApiModelProperty(value = "访问资源信息")
     @Valid
     @NotNull
-    private ResourceInfoDTO resourceInfo;
+    private ResourceInfoReqVO resourceInfo;
 
 
 }

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoAuthUpdateReqVO.java

@@ -82,6 +82,6 @@ public class ApprovalInfoAuthUpdateReqVO {
     @ApiModelProperty(value = "访问资源信息")
     @Valid
     @NotNull
-    private ResourceInfoDTO resourceInfo;
+    private ResourceInfoReqVO resourceInfo;
 
 }

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoReqVO.java

@@ -109,7 +109,7 @@ public class ApprovalInfoReqVO implements Serializable {
     @ApiModelProperty(value = "访问资源信息")
     @Valid
     @NotNull
-    private ResourceInfoDTO resourceInfoDTO;
+    private ResourceInfoReqVO resourceInfoDTO;
 
     /**
      * @see FlowTypeEnum

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApprovalInfoUpdateReqVO.java

@@ -105,7 +105,7 @@ public class ApprovalInfoUpdateReqVO {
     @ApiModelProperty(value = "访问资源信息")
     @Valid
     @NotNull
-    private ResourceInfoDTO resourceInfoDTO;
+    private ResourceInfoReqVO resourceInfoDTO;
 
     @ApiModelProperty(value = "下一任务对象信息")
     private List<ActivitiHolder> activitiHolderList;

+ 1 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ApproveOperateReqVO.java

@@ -36,6 +36,7 @@ public class ApproveOperateReqVO {
     /**
      * 审批信息
      */
+    @NotBlank
     @ApiModelProperty(value = "审批信息")
     private String message;
 

+ 1 - 1
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ResourceInfoDTO.java → approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/ResourceInfoReqVO.java

@@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank;
  */
 @Data
 @ApiModel(description = "资源信息")
-public class ResourceInfoDTO {
+public class ResourceInfoReqVO {
 
     @ApiModelProperty(value = "申请方编码")
     @NotBlank

+ 37 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/req/v2/ApproveOperateV2ReqVO.java

@@ -0,0 +1,37 @@
+package com.dragonsoft.dcuc.approve.model.req.v2;
+
+import com.dragonsoft.dcuc.approve.model.req.ApproveOperateReqVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/3/2
+ */
+@ApiModel(description = "V2审批操作")
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ApproveOperateV2ReqVO extends ApproveOperateReqVO {
+
+    @NotBlank
+    @ApiModelProperty(value = "访问资源编码,多个以,分割")
+    private String visitResourceCode;
+
+    @NotBlank
+    @ApiModelProperty(value = "访问资源名称,多个以,分割")
+    private String visitResourceName;
+
+    @ApiModelProperty(value = "不同意访问资源编码,多个以,分割")
+    private String disagreeVisitResourceCode;
+
+    @ApiModelProperty(value = "不同意访问资源名称,多个以,分割")
+    private String disagreeVisitResourceName;
+}

+ 1 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoRespVO.java

@@ -1,7 +1,6 @@
 package com.dragonsoft.dcuc.approve.model.resp;
 
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -80,7 +79,7 @@ public class ApprovalInfoRespVO {
     private Date endTime;
 
     @ApiModelProperty(value = "访问资源信息")
-    private ResourceInfoDTO resourceInfoVo;
+    private ResourceInfoRespVO resourceInfoVo;
 
     @ApiModelProperty(value = "节点名称")
     private String taskName;

+ 1 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ApprovalInfoV2RespVO.java

@@ -1,7 +1,6 @@
 package com.dragonsoft.dcuc.approve.model.resp;
 
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -71,7 +70,7 @@ public class ApprovalInfoV2RespVO {
     private Date endTime;
 
     @ApiModelProperty(value = "访问资源信息")
-    private ResourceInfoDTO resourceInfoVo;
+    private ResourceInfoRespVO resourceInfoVo;
 
     @ApiModelProperty(value = "当前任务节点名称")
     private String taskName;

+ 42 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ResourceInfoRespVO.java

@@ -0,0 +1,42 @@
+package com.dragonsoft.dcuc.approve.model.resp;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author lidr
+ * @date 2021/2/4
+ */
+@Data
+@ApiModel(description = "资源信息")
+public class ResourceInfoRespVO {
+
+    @ApiModelProperty(value = "申请方编码")
+    @NotBlank
+    private String visitorCode;
+
+    @ApiModelProperty(value = "申请方名称")
+    @NotBlank
+    private String visitorName;
+
+    @ApiModelProperty(value = "访问资源编码,多个以,分割")
+    private String visitResourceCode;
+
+    @ApiModelProperty(value = "访问资源名称,多个以,分割")
+    private String visitResourceName;
+
+    @ApiModelProperty(value = "不同意访问资源编码,多个以,分割")
+    private String disagreeVisitResourceCode;
+
+    @ApiModelProperty(value = "不同意访问资源名称,多个以,分割")
+    private String disagreeVisitResourceName;
+
+    @ApiModelProperty(value = "撤销资源编码,多个以,分割")
+    private String removeVisitResourceCode;
+
+    @ApiModelProperty(value = "撤销资源名称,多个以,分割")
+    private String removeVisitResourceName;
+}

+ 15 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IApproveBusiness.java

@@ -1,14 +1,16 @@
 package com.dragonsoft.dcuc.approve.business;
 
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveActRunIdentityLink;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.BatchTaskOperateRespVO;
-import com.dragonsoft.dcuc.approve.model.resp.ContentRespVO;
+import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.duwf.api.model.ProcessInstanceVO;
@@ -81,10 +83,10 @@ public interface IApproveBusiness {
      * 检查资源
      *
      * @param flowTypeEnum 资源类型
-     * @param resourceInfo 资源信息
+     * @param resourceInfoReqVO 资源信息
      * @return 状态
      */
-    ResponseStatus checkResource(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfo);
+    ResponseStatus checkResource(FlowTypeEnum flowTypeEnum, ResourceInfoReqVO resourceInfoReqVO);
 
     /**
      * 获取任务支持的操作对象信息
@@ -102,7 +104,7 @@ public interface IApproveBusiness {
      * @param resourceInfoDTO 资源
      * @return 内容
      */
-    ContentRespVO generalContentRespVO(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfoDTO);
+    ContentRespDTO generalContentRespVO(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfoDTO);
 
     /**
      * 获取当前任务处理人
@@ -140,4 +142,12 @@ public interface IApproveBusiness {
      * @param approvalInfo 审批信息
      */
     void buildTaskInfoByProcessInstanceId(ApprovalInfo approvalInfo, List<TaskHistoryDetailVo> list);
+
+    /**
+     * 设置资源信息
+     *
+     * @param approveRecordInfo 审批记录表
+     * @param resourceInfoDTO   资源信息
+     */
+    void setResourceInfoData(ApproveRecordInfo approveRecordInfo, ResourceInfoDTO resourceInfoDTO);
 }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/IDcucAuthBusiness.java

@@ -1,8 +1,8 @@
 package com.dragonsoft.dcuc.approve.business;
 
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.vo.AuthAppFunApiVO;
 

+ 81 - 30
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveBusinessImpl.java

@@ -14,6 +14,8 @@ import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
+import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.CandidateTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
@@ -21,10 +23,9 @@ import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
 import com.dragonsoft.dcuc.approve.model.*;
 import com.dragonsoft.dcuc.approve.model.req.AppFunctionResourceNameReqVO;
 import com.dragonsoft.dcuc.approve.model.req.AppFunctionResourceReqVO;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.BatchTaskOperateRespVO;
-import com.dragonsoft.dcuc.approve.model.resp.ContentRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.TaskOperateRespVO;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
 import com.dragonsoft.dcuc.approve.model.vo.AuthAppFunApiVO;
@@ -313,11 +314,11 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     }
 
     @Override
-    public ResponseStatus checkResource(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfo) {
-        String visitResourceCode = resourceInfo.getVisitResourceCode();
-        String visitResourceName = resourceInfo.getVisitResourceName();
-        String removeResourceCode = resourceInfo.getRemoveVisitResourceCode();
-        String removeResourceName = resourceInfo.getRemoveVisitResourceName();
+    public ResponseStatus checkResource(FlowTypeEnum flowTypeEnum, ResourceInfoReqVO resourceInfoReqVO) {
+        String visitResourceCode = resourceInfoReqVO.getVisitResourceCode();
+        String visitResourceName = resourceInfoReqVO.getVisitResourceName();
+        String removeResourceCode = resourceInfoReqVO.getRemoveVisitResourceCode();
+        String removeResourceName = resourceInfoReqVO.getRemoveVisitResourceName();
 
         if (StrUtil.isBlank(visitResourceCode) && StrUtil.isBlank(removeResourceCode)) {
             return ResponseUtil.dtoFail("访问资源、撤销资源必须有一个不能有空");
@@ -426,18 +427,24 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     }
 
     @Override
-    public ContentRespVO generalContentRespVO(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfoDTO) {
+    public ContentRespDTO generalContentRespVO(FlowTypeEnum flowTypeEnum, ResourceInfoDTO resourceInfoDTO) {
         List<String> visitResourceCodes = new ArrayList<>();
         List<String> visitResourceNames = new ArrayList<>();
         List<String> removeVisitResourceCodes = new ArrayList<>();
         List<String> removeVisitResourceNames = new ArrayList<>();
 
+        List<String> disagreeVisitResourceCodes = new ArrayList<>();
+        List<String> disagreeVisitResourceNames = new ArrayList<>();
+
         String visitResourceName = resourceInfoDTO.getVisitResourceName();
         String visitResourceCode = resourceInfoDTO.getVisitResourceCode();
 
         String removeVisitResourceCode = resourceInfoDTO.getRemoveVisitResourceCode();
         String removeVisitResourceName = resourceInfoDTO.getRemoveVisitResourceName();
 
+        String disagreeVisitResourceCode = resourceInfoDTO.getDisagreeVisitResourceCode();
+        String disagreeVisitResourceName = resourceInfoDTO.getDisagreeVisitResourceName();
+
         if (flowTypeEnum.equals(FlowTypeEnum.APP_FUN_AUTH)) {
             ObjectMapper objectMapper = new ObjectMapper();
 
@@ -516,37 +523,50 @@ public class ApproveBusinessImpl implements IApproveBusiness {
 
         } else if (flowTypeEnum.equals(FlowTypeEnum.SERVICE_AUTH) || flowTypeEnum.equals(FlowTypeEnum.SERVICE_AUTH_CANCEL)) {
             if (StrUtil.isNotBlank(visitResourceCode)) {
-                String[] resourceCode = visitResourceCode.split(",");
+                String[] resourceCode = visitResourceCode.split(StrUtil.COMMA);
                 visitResourceCodes.addAll(Arrays.asList(resourceCode));
             }
 
             if (StrUtil.isNotBlank(visitResourceName)) {
-                String[] resourceName = visitResourceName.split(",");
+                String[] resourceName = visitResourceName.split(StrUtil.COMMA);
                 visitResourceNames.addAll(Arrays.asList(resourceName));
             }
 
             if (StrUtil.isNotBlank(removeVisitResourceCode)) {
-                String[] removeResourceCode = removeVisitResourceCode.split(",");
+                String[] removeResourceCode = removeVisitResourceCode.split(StrUtil.COMMA);
                 removeVisitResourceCodes.addAll(Arrays.asList(removeResourceCode));
             }
 
             if (StrUtil.isNotBlank(removeVisitResourceName)) {
-                String[] removeResourceName = removeVisitResourceName.split(",");
+                String[] removeResourceName = removeVisitResourceName.split(StrUtil.COMMA);
                 removeVisitResourceNames.addAll(Arrays.asList(removeResourceName));
             }
 
+            if (StrUtil.isNotBlank(disagreeVisitResourceCode)) {
+                String[] strings = disagreeVisitResourceCode.split(StrUtil.COMMA);
+                disagreeVisitResourceCodes.addAll(Arrays.asList(strings));
+            }
+
+            if (StrUtil.isNotBlank(disagreeVisitResourceName)) {
+                String[] strings = disagreeVisitResourceName.split(StrUtil.COMMA);
+                disagreeVisitResourceNames.addAll(Arrays.asList(strings));
+            }
+
         }
 
         @NotBlank String visitorName = resourceInfoDTO.getVisitorName();
         @NotBlank String visitorCode = resourceInfoDTO.getVisitorCode();
-        ContentRespVO contentRespVO = new ContentRespVO();
-        contentRespVO.setVisitorNames(Collections.singletonList(visitorName));
-        contentRespVO.setVisitorCodes(Collections.singletonList(visitorCode));
-        contentRespVO.setVisitResourceNames(visitResourceNames);
-        contentRespVO.setVisitResourceCodes(visitResourceCodes);
-        contentRespVO.setRemoveVisitResourceCodes(removeVisitResourceCodes);
-        contentRespVO.setRemoveVisitResourceNames(removeVisitResourceNames);
-        return contentRespVO;
+        ContentRespDTO contentRespDTO = new ContentRespDTO();
+        contentRespDTO.setVisitorNames(Collections.singletonList(visitorName));
+        contentRespDTO.setVisitorCodes(Collections.singletonList(visitorCode));
+        contentRespDTO.setVisitResourceNames(visitResourceNames);
+        contentRespDTO.setVisitResourceCodes(visitResourceCodes);
+        contentRespDTO.setRemoveVisitResourceCodes(removeVisitResourceCodes);
+        contentRespDTO.setRemoveVisitResourceNames(removeVisitResourceNames);
+        contentRespDTO.setDisagreeVisitResourceCodes(disagreeVisitResourceCodes);
+        contentRespDTO.setDisagreeVisitResourceNames(disagreeVisitResourceNames);
+
+        return contentRespDTO;
     }
 
     @Override
@@ -554,7 +574,7 @@ public class ApproveBusinessImpl implements IApproveBusiness {
         //设置当前任务ID
         StringBuilder unOperator = new StringBuilder();
         if (StringUtils.isNotEmpty(currentTaskId) && !ApproveConstants.END_STR.equalsIgnoreCase(currentTaskId)) {
-            String[] tasks = currentTaskId.split(",");
+            String[] tasks = currentTaskId.split(StrUtil.COMMA);
             for (String task : tasks) {
                 List<ApproveActRunIdentityLink> taskInfo = approveActRunIdentityLinkService.findByTaskId(task);
                 if (CollectionUtils.isEmpty(taskInfo)) {
@@ -563,23 +583,23 @@ public class ApproveBusinessImpl implements IApproveBusiness {
                 for (ApproveActRunIdentityLink item : taskInfo) {
                     String groupNameList = item.getGroupNameList();
                     if (StrUtil.isNotBlank(groupNameList)) {
-                        unOperator.append(groupNameList).append(",");
+                        unOperator.append(groupNameList).append(StrUtil.COMMA);
                     }
 
                     String deptNameList = item.getDeptNameList();
                     if (StrUtil.isNotBlank(deptNameList)) {
-                        unOperator.append(deptNameList).append(",");
+                        unOperator.append(deptNameList).append(StrUtil.COMMA);
                     }
                     String userNameList = item.getUserNameList();
                     if (StrUtil.isNotBlank(userNameList)) {
-                        unOperator.append(userNameList).append(",");
+                        unOperator.append(userNameList).append(StrUtil.COMMA);
                     }
                 }
             }
         }
         String string = unOperator.toString();
         if (StrUtil.isNotBlank(string)) {
-            string = LangUtil.subLastSymbol(string, ",");
+            string = LangUtil.subLastSymbol(string, StrUtil.COMMA);
         }
         return string;
     }
@@ -594,7 +614,7 @@ public class ApproveBusinessImpl implements IApproveBusiness {
         if (StringUtils.isEmpty(kxList)) {
             return false;
         }
-        String[] users = kxList.split(",");
+        String[] users = kxList.split(StrUtil.COMMA);
         for (String user : users) {
             //判断当前身份证号是否为科信人员
             if (idCard.equalsIgnoreCase(user)) {
@@ -658,6 +678,8 @@ public class ApproveBusinessImpl implements IApproveBusiness {
     public ApprovalInfoRespVO fillTaskInfoToApplyInfo(ApprovalInfo approvalInfo) {
         ApprovalInfoRespVO approvalInfoRespVo = new ApprovalInfoRespVO();
         BeanUtil.copyProperties(approvalInfo, approvalInfoRespVo);
+        approvalInfoRespVo.setResourceInfoVo(approvalInfo.getResourceInfoVo().toResourceInfoRespVO());
+
         try {
             String taskId = approvalInfo.getTaskId();
             if (ApproveConstants.END_STR.equalsIgnoreCase(taskId)) {
@@ -705,7 +727,7 @@ public class ApproveBusinessImpl implements IApproveBusiness {
             result.putAll(candidateVo.getAssignee());
         }
         for (Map.Entry<String, String> stringStringEntry : result.entrySet()) {
-            unOperateUsers.append(stringStringEntry.getValue()).append(",");
+            unOperateUsers.append(stringStringEntry.getValue()).append(StrUtil.COMMA);
         }
 
         return StringUtils.isNotEmpty(unOperateUsers.toString())
@@ -726,15 +748,15 @@ public class ApproveBusinessImpl implements IApproveBusiness {
             for (TaskHistoryDetailVo taskDetailVo : list) {
                 taskId.append(taskDetailVo.getId());
                 if (StringUtils.isNotEmpty(taskDetailVo.getId())) {
-                    taskId.append(",");
+                    taskId.append(StrUtil.COMMA);
                 }
                 taskCode.append(taskDetailVo.getTaskCode());
                 if (StringUtils.isNotEmpty(taskDetailVo.getTaskCode())) {
-                    taskCode.append(",");
+                    taskCode.append(StrUtil.COMMA);
                 }
                 taskName.append(taskDetailVo.getName());
                 if (StringUtils.isNotEmpty(taskDetailVo.getName())) {
-                    taskName.append(",");
+                    taskName.append(StrUtil.COMMA);
                 }
             }
             if (taskCode.length() > 0) {
@@ -757,4 +779,33 @@ public class ApproveBusinessImpl implements IApproveBusiness {
         approvalInfo.setUpdateTime(new Date());
         approvalInfo.setUpdateUser(ProofsUtil.getIdcard());
     }
+
+
+    @Override
+    public void setResourceInfoData(ApproveRecordInfo approveRecordInfo, ResourceInfoDTO resourceInfoDTO) {
+        Map<String, String> accessResources = new HashMap<>(1);
+        accessResources.put(resourceInfoDTO.getVisitorName(), resourceInfoDTO.getVisitResourceName());
+        approveRecordInfo.setAccessResources(JSON.toJSONString(accessResources));
+
+        Map<String, String> accessResourcesNo = new HashMap<>(1);
+        accessResourcesNo.put(resourceInfoDTO.getVisitorCode(), resourceInfoDTO.getVisitResourceCode());
+        approveRecordInfo.setAccessResourcesNo(JSON.toJSONString(accessResourcesNo));
+
+        Map<String, String> removeAccessResourcesNo = new HashMap<>(1);
+        removeAccessResourcesNo.put(resourceInfoDTO.getVisitorCode(), resourceInfoDTO.getRemoveVisitResourceCode());
+        approveRecordInfo.setRemoveAccessResourcesNo(JSON.toJSONString(removeAccessResourcesNo));
+
+        Map<String, String> removeAccessResources = new HashMap<>(1);
+        removeAccessResources.put(resourceInfoDTO.getVisitorName(), resourceInfoDTO.getRemoveVisitResourceName());
+        approveRecordInfo.setRemoveAccessResources(JSON.toJSONString(removeAccessResources));
+
+        Map<String, String> disagreeAccessResources = new HashMap<>(1);
+        disagreeAccessResources.put(resourceInfoDTO.getVisitorName(), resourceInfoDTO.getDisagreeVisitResourceName());
+        approveRecordInfo.setDisagreeAccessResources(JSON.toJSONString(disagreeAccessResources));
+
+        Map<String, String> disagreeAccessResourcesNo = new HashMap<>(1);
+        disagreeAccessResourcesNo.put(resourceInfoDTO.getVisitorCode(), resourceInfoDTO.getDisagreeVisitResourceCode());
+        approveRecordInfo.setDisagreeAccessResourcesNo(JSON.toJSONString(disagreeAccessResourcesNo));
+
+    }
 }

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

@@ -5,11 +5,11 @@ import com.dragoninfo.dcuc.common.entity.*;
 import com.dragonsoft.auditlog.collection.qmtj.provider.IRestTemplateProvider;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListResourceTypeEnum;
 import com.dragonsoft.dcuc.approve.model.req.AppFunctionResourceReqVO;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import com.dragonsoft.dcuc.approve.model.vo.AppFunRedListVo;
 import com.dragonsoft.dcuc.approve.model.vo.AuthAppFunApiVO;

+ 17 - 4
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/WorkFlowBusinessImpl.java

@@ -1,6 +1,8 @@
 package com.dragonsoft.dcuc.approve.business.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.EnumUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -220,14 +222,25 @@ public class WorkFlowBusinessImpl implements IWorkFlowBusiness {
 
         boolean showBack = false;
         List<String> taskDefinitionKeyList = new ArrayList<>();
-        for (TaskDefinitionVo taskDefinitionVo : outgoingVo.getTaskDefinitionVoList()) {
-            taskDefinitionKeyList.add(taskDefinitionVo.getTaskDefinitionKey());
+        List<TaskDefinitionVo> taskDefinitionVoList = new ArrayList<>();
+        if (outgoingVo != null) {
+            taskDefinitionVoList = outgoingVo.getTaskDefinitionVoList();
+            if (CollUtil.isNotEmpty(taskDefinitionKeyList)) {
+                for (TaskDefinitionVo taskDefinitionVo : taskDefinitionVoList) {
+                    if (ObjectUtil.isNotNull(taskDefinitionVo)) {
+                        taskDefinitionKeyList.add(taskDefinitionVo.getTaskDefinitionKey());
+                    }
+                }
+            }
         }
 
+
         if (!taskId.equalsIgnoreCase(ApproveConstants.END_STR)) {
-            String historyTaskDefinitionKey;
+            String historyTaskDefinitionKey = "";
             if (pageTypeEnum != null && pageTypeEnum.equals(PageTypeEnum.REQUEST)) {
-                historyTaskDefinitionKey = outgoingVo.getTaskDefinitionVoList().get(0).getTaskDefinitionKey();
+                if (!taskDefinitionVoList.isEmpty()) {
+                    historyTaskDefinitionKey = taskDefinitionVoList.get(0).getTaskDefinitionKey();
+                }
 
             } else {
                 TaskHistoryDetailVo currentTask = workflowClientFactory.getWorkflowTaskClient().queryTaskDetail(taskId);

+ 62 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/BaseOperateReqDTO.java

@@ -0,0 +1,62 @@
+package com.dragonsoft.dcuc.approve.dto;
+
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
+import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
+import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
+import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * <p>
+ * 基础操作请求
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/3/2
+ */
+@Data
+@Builder
+public class BaseOperateReqDTO {
+    /**
+     * 操作人Idcard
+     */
+    private String operateIdcard;
+    /**
+     * 任务ID
+     */
+    private String taskId;
+    /**
+     * 提交类型
+     */
+    private ApproveWorkFlowOperationEnum operationEnum;
+    /**
+     * 请求体
+     */
+    private TaskRequest<ApproveTaskRequestVo> taskRequest;
+    /**
+     * 审批信息
+     */
+    private ApprovalInfo approvalInfo;
+    /**
+     * 请求人信息
+     */
+    private TaskRequestUserInfoDTO taskRequestUserInfoDTO;
+    /**
+     * 审批单号
+     */
+    private String approveNo;
+    /**
+     * 处理单号
+     */
+    private String processNo;
+    /**
+     * 审批记录单号
+     */
+    private String approveRecordId;
+    /**
+     * 是否命中红名单
+     */
+    private Boolean hitRedList;
+}

+ 14 - 2
approve-api/src/main/java/com/dragonsoft/dcuc/approve/model/resp/ContentRespVO.java → approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ContentRespDTO.java

@@ -1,4 +1,4 @@
-package com.dragonsoft.dcuc.approve.model.resp;
+package com.dragonsoft.dcuc.approve.dto;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -16,7 +16,7 @@ import java.util.List;
  */
 @Data
 @ApiModel(description = "审批内容")
-public class ContentRespVO {
+public class ContentRespDTO {
 
     /**
      * 访问者名称列表
@@ -55,4 +55,16 @@ public class ContentRespVO {
     @ApiModelProperty("撤销访问资源代码列表")
     private List<String> removeVisitResourceCodes;
 
+    /**
+     * 不同意访问资源编码
+     */
+    @ApiModelProperty(value = "不同意访问资源编码")
+    private List<String> disagreeVisitResourceCodes;
+
+    /**
+     * 不同意访问资源名称
+     */
+    @ApiModelProperty(value = "不同意访问资源名称")
+    private List<String> disagreeVisitResourceNames;
+
 }

+ 77 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/OperateReqDTO.java

@@ -0,0 +1,77 @@
+package com.dragonsoft.dcuc.approve.dto;
+
+import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
+import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
+import com.dragonsoft.duceap.duwf.api.model.ActivitiHolder;
+import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2023/3/2
+ */
+@Builder
+@Data
+public class OperateReqDTO {
+
+    /**
+     * 任务ID
+     */
+    private String taskId;
+    /**
+     * 实例ID
+     */
+    private String processInstanceId;
+
+    /**
+     * 审批操作
+     */
+    private ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum;
+    /**
+     * 任务请求
+     */
+    private TaskRequest<ApproveTaskRequestVo> taskRequest;
+
+    /**
+     * 用户数据
+     */
+    private TaskRequestUserInfoDTO taskRequestUserInfoDTO;
+
+    /**
+     * 下一个人员指定
+     */
+    private List<ActivitiHolder> activitiHolderList;
+
+    /**
+     * 是否需要检查红名单
+     */
+    private Boolean needCheckRedList;
+
+    /**
+     * 访问资源编码,多个以,分割
+     */
+    private String visitResourceCode;
+
+    /**
+     * 访问资源名称,多个以,分割
+     */
+    private String visitResourceName;
+
+    /**
+     * 不同意访问资源编码,多个以,分割
+     */
+    private String disagreeVisitResourceCode;
+
+    /**
+     * 不同意访问资源名称,多个以,分割
+     */
+    private String disagreeVisitResourceName;
+}

+ 58 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/dto/ResourceInfoDTO.java

@@ -0,0 +1,58 @@
+package com.dragonsoft.dcuc.approve.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
+import com.dragonsoft.dcuc.approve.model.resp.ResourceInfoRespVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author lidr
+ * @date 2021/2/4
+ */
+@Data
+@ApiModel(description = "资源信息")
+public class ResourceInfoDTO {
+
+    @ApiModelProperty(value = "申请方编码")
+    @NotBlank
+    private String visitorCode;
+
+    @ApiModelProperty(value = "申请方名称")
+    @NotBlank
+    private String visitorName;
+
+    @ApiModelProperty(value = "访问资源编码,多个以,分割")
+    private String visitResourceCode;
+
+    @ApiModelProperty(value = "访问资源名称,多个以,分割")
+    private String visitResourceName;
+
+    @ApiModelProperty(value = "不同意访问资源编码,多个以,分割")
+    private String disagreeVisitResourceCode;
+
+    @ApiModelProperty(value = "不同意访问资源名称,多个以,分割")
+    private String disagreeVisitResourceName;
+
+    @ApiModelProperty(value = "撤销资源编码,多个以,分割")
+    private String removeVisitResourceCode;
+
+    @ApiModelProperty(value = "撤销资源名称,多个以,分割")
+    private String removeVisitResourceName;
+
+
+    public static ResourceInfoDTO parseResourceInfoReqVO(ResourceInfoReqVO resourceInfoReqVO) {
+        ResourceInfoDTO resourceInfoDTO = new ResourceInfoDTO();
+        BeanUtil.copyProperties(resourceInfoReqVO, resourceInfoDTO);
+        return resourceInfoDTO;
+    }
+
+    public ResourceInfoRespVO toResourceInfoRespVO() {
+        ResourceInfoRespVO resourceInfoRespVO = new ResourceInfoRespVO();
+        BeanUtil.copyProperties(this, resourceInfoRespVO);
+        return resourceInfoRespVO;
+    }
+}

+ 30 - 6
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/ApproveFacade.java

@@ -4,6 +4,8 @@ import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
+import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowTaskStateEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
@@ -93,11 +95,22 @@ public class ApproveFacade implements IApproveFacade {
         approveMessage.setMessage(approveOperateReqVO.getMessage());
         approveMessage.setApproveState(approveOperateReqVO.getOperateType());
         taskRequest.setApproveMessage(approveMessage);
+
         BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
         TaskRequestUserInfoDTO taskRequestUserInfoDTO = TaskRequestUserInfoDTO.parseBaseSecurityUser(currentUser);
-        return approveService.approveOperate(approveOperateReqVO.getTaskId(), approveOperateReqVO.getProcessInstanceId(),
-                EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType()),
-                taskRequest, taskRequestUserInfoDTO, approveOperateReqVO.getActivitiHolderList(), true);
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType());
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(approveOperateReqVO.getTaskId())
+                .processInstanceId(approveOperateReqVO.getProcessInstanceId())
+                .approveWorkFlowOperationEnum(approveWorkFlowOperationEnum)
+                .taskRequest(taskRequest)
+                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                .activitiHolderList(approveOperateReqVO.getActivitiHolderList())
+                .needCheckRedList(true)
+                .build();
+
+        return approveService.approveOperate(operateReqDTO);
     }
 
     @Override
@@ -127,9 +140,20 @@ public class ApproveFacade implements IApproveFacade {
         taskRequest.setApproveMessage(approveMessage);
         BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
         TaskRequestUserInfoDTO taskRequestUserInfoDTO = TaskRequestUserInfoDTO.parseBaseSecurityUser(currentUser);
-        return approveService.approveOperate(approveOperateReqVO.getTaskId(), approveOperateReqVO.getProcessInstanceId(),
-                EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType()),
-                taskRequest, taskRequestUserInfoDTO, approveOperateReqVO.getActivitiHolderList(), false);
+
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType());
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(approveOperateReqVO.getTaskId())
+                .processInstanceId(approveOperateReqVO.getProcessInstanceId())
+                .approveWorkFlowOperationEnum(approveWorkFlowOperationEnum)
+                .taskRequest(taskRequest)
+                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                .activitiHolderList(approveOperateReqVO.getActivitiHolderList())
+                .needCheckRedList(false)
+                .build();
+
+        return approveService.approveOperate(operateReqDTO);
     }
 
     @Override

+ 30 - 5
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV1ApproveFacade.java

@@ -11,6 +11,7 @@ import com.dragoninfo.dcuc.common.utils.SearchableUtil;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.business.IApproveUploadBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
+import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PageTypeEnum;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
@@ -20,6 +21,7 @@ import com.dragonsoft.dcuc.approve.model.req.ApproveRecordReportReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
 import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
+import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.IApproveService;
 import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
@@ -27,10 +29,12 @@ import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 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.dragonsoft.duceap.duwf.api.model.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -42,6 +46,7 @@ import java.util.Map;
 /**
  * @author huangzqa
  */
+@Slf4j
 @RestController
 public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
     @Autowired
@@ -56,9 +61,15 @@ public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
 
     @Autowired
     private IApproveBusiness approveBusiness;
+    @Autowired
+    private ApproveProperties approveProperties;
 
     @Override
     public ResponseDTO<String> save(ApprovalInfoReqVO approvalInfoReqVO) {
+        String appCode = approvalInfoReqVO.getAppCode();
+        if (StrUtil.isBlank(appCode)) {
+            approvalInfoReqVO.setAppCode(approveProperties.getAppCode());
+        }
         return approveService.save(approvalInfoReqVO);
     }
 
@@ -111,18 +122,32 @@ public class ApiV1ApproveFacade implements IApiV1ApproveFacade {
 
     @Override
     public ResponseDTO<OperateRespVO> approveOperate(ApproveOperateReqVO approveOperateReqVO) {
-
+        log.info("approveOperateReqVO req:{}", JsonUtils.toJSONString(approveOperateReqVO));
         TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
         ApproveMessage approveMessage = new ApproveMessage();
         approveMessage.setMessage(approveOperateReqVO.getMessage());
         approveMessage.setApproveState(approveOperateReqVO.getOperateType());
         taskRequest.setApproveMessage(approveMessage);
         BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
-        TaskRequestUserInfoDTO taskRequestUserInfoDTO = TaskRequestUserInfoDTO.parseBaseSecurityUser(currentUser);
 
-        return approveService.approveOperate(approveOperateReqVO.getTaskId(), approveOperateReqVO.getProcessInstanceId(),
-                EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType()),
-                taskRequest, taskRequestUserInfoDTO, approveOperateReqVO.getActivitiHolderList(), false);
+        log.info("BaseSecurityUser req:{}", JsonUtils.toJSONString(currentUser));
+
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = TaskRequestUserInfoDTO.parseBaseSecurityUser(currentUser);
+        taskRequestUserInfoDTO.setIdCard(approveOperateReqVO.getIdCard());
+        taskRequestUserInfoDTO.setUserName(approveOperateReqVO.getUserName());
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateReqVO.getOperateType());
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(approveOperateReqVO.getTaskId())
+                .processInstanceId(approveOperateReqVO.getProcessInstanceId())
+                .approveWorkFlowOperationEnum(approveWorkFlowOperationEnum)
+                .taskRequest(taskRequest)
+                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                .activitiHolderList(approveOperateReqVO.getActivitiHolderList())
+                .needCheckRedList(false)
+                .build();
+
+        return approveService.approveOperate(operateReqDTO);
     }
 
     @Override

+ 76 - 8
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/ApiV2ApproveFacade.java

@@ -11,10 +11,12 @@ import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
+import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.req.*;
+import com.dragonsoft.dcuc.approve.model.req.v2.ApproveOperateV2ReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
 import com.dragonsoft.dcuc.approve.model.vo.OauthUserVO;
@@ -24,13 +26,13 @@ import com.dragonsoft.dcuc.approve.service.IApproveService;
 import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.core.search.Searchable;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
-import com.dragonsoft.duceap.duwf.api.model.ActivityNodeInfoVo;
-import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
-import com.dragonsoft.duceap.duwf.api.model.TraceProcessAndOverVo;
-import com.dragonsoft.duceap.duwf.api.model.WorkflowProcessVo;
+import com.dragonsoft.duceap.duwf.api.model.*;
 import lombok.extern.slf4j.Slf4j;
 import org.hibernate.validator.constraints.Length;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,7 +79,7 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
         if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
             return ResponseUtil.dtoFail("请传入凭据");
         }
-        @Valid @NotNull ResourceInfoDTO resourceInfo = approvalInfoAuthReqVO.getResourceInfo();
+        @Valid @NotNull ResourceInfoReqVO resourceInfo = approvalInfoAuthReqVO.getResourceInfo();
 
         ApprovalInfoReqVO approvalInfoReqVO = new ApprovalInfoReqVO();
         BeanUtil.copyProperties(approvalInfoAuthReqVO, approvalInfoReqVO);
@@ -173,7 +175,7 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
         String processTypeCode = processDetailRespVO.getProcessTypeCode();
         approvalInfoUpdateReqVO.setProcessType(processTypeCode);
 
-        @Valid @NotNull ResourceInfoDTO resourceInfo = approvalInfoAuthUpdateReqVO.getResourceInfo();
+        @Valid @NotNull ResourceInfoReqVO resourceInfo = approvalInfoAuthUpdateReqVO.getResourceInfo();
 
         BeanUtil.copyProperties(approvalInfoAuthUpdateReqVO, approvalInfoUpdateReqVO);
         approvalInfoUpdateReqVO.setAppCode(appCode);
@@ -280,8 +282,18 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
         TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
 
-        ResponseDTO<OperateRespVO> responseDTO = approveService.approveOperate(taskId, processInstanceId, ApproveWorkFlowOperationEnum.RECALL, taskRequest,
-                taskRequestUserInfoDTO, Collections.emptyList(), false);
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(taskId)
+                .processInstanceId(processInstanceId)
+                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.RECALL)
+                .taskRequest(taskRequest)
+                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                .activitiHolderList(Collections.emptyList())
+                .needCheckRedList(false)
+                .build();
+
+        ResponseDTO<OperateRespVO> responseDTO = approveService.approveOperate(operateReqDTO);
         if (ResponseUtil.isFail(responseDTO)) {
             return ResponseStatus.fail(responseDTO.getMessage());
         }
@@ -443,4 +455,60 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
         TaskOperateRespVO taskOperateRespVO = workFlowBusiness.getTaskSupportOperate(taskId, pageTypeEnum);
         return ResponseUtil.newInstance(taskOperateRespVO);
     }
+
+    @Override
+    public ResponseDTO<OperateRespVO> operate(ApproveOperateV2ReqVO approveOperateV2ReqVO) {
+        log.info("approveOperateReqVO req:{}", JsonUtils.toJSONString(approveOperateV2ReqVO));
+        TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
+        ApproveMessage approveMessage = new ApproveMessage();
+        approveMessage.setMessage(approveOperateV2ReqVO.getMessage());
+        approveMessage.setApproveState(approveOperateV2ReqVO.getOperateType());
+        taskRequest.setApproveMessage(approveMessage);
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+
+        log.info("BaseSecurityUser req:{}", JsonUtils.toJSONString(currentUser));
+        ApproveWorkFlowOperationEnum flowOperationEnum = EnumUtils.enumOf(ApproveWorkFlowOperationEnum.class, approveOperateV2ReqVO.getOperateType());
+
+        String visitResourceCode = approveOperateV2ReqVO.getVisitResourceCode();
+        // 访问资源为空,且为同意
+        if (StrUtil.isBlank(visitResourceCode)
+                && flowOperationEnum.equals(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)) {
+            return ResponseUtil.dtoFail("同意时,必须有一个访问资源");
+        }
+        String visitResourceName = approveOperateV2ReqVO.getVisitResourceName();
+        if (StrUtil.isNotBlank(visitResourceCode) && StrUtil.isBlank(visitResourceName)) {
+            return ResponseUtil.dtoFail("visitResourceCode不为空时,visitResourceName不允许为空");
+        }
+
+        String disagreeVisitResourceCode = approveOperateV2ReqVO.getDisagreeVisitResourceCode();
+        String disagreeVisitResourceName = approveOperateV2ReqVO.getDisagreeVisitResourceName();
+        if (StrUtil.isNotBlank(disagreeVisitResourceCode) && StrUtil.isBlank(disagreeVisitResourceName)) {
+            return ResponseUtil.dtoFail("disagreeVisitResourceCode为空时disagreeVisitResourceName不允许为空");
+        }
+        if (StrUtil.isNotBlank(disagreeVisitResourceName) && StrUtil.isBlank(disagreeVisitResourceCode)) {
+            return ResponseUtil.dtoFail("disagreeVisitResourceName为空时disagreeVisitResourceCode不允许为空");
+        }
+
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = TaskRequestUserInfoDTO.parseBaseSecurityUser(currentUser);
+        taskRequestUserInfoDTO.setIdCard(approveOperateV2ReqVO.getIdCard());
+        taskRequestUserInfoDTO.setUserName(approveOperateV2ReqVO.getUserName());
+
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(approveOperateV2ReqVO.getTaskId())
+                .processInstanceId(approveOperateV2ReqVO.getProcessInstanceId())
+                .approveWorkFlowOperationEnum(flowOperationEnum)
+                .taskRequest(taskRequest)
+                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                .activitiHolderList(approveOperateV2ReqVO.getActivitiHolderList())
+                .needCheckRedList(false)
+                .visitResourceCode(visitResourceCode)
+                .visitResourceName(visitResourceName)
+                .disagreeVisitResourceCode(disagreeVisitResourceCode)
+                .disagreeVisitResourceName(disagreeVisitResourceName)
+                .build();
+
+        return approveService.approveOperate(operateReqDTO);
+    }
 }

+ 1 - 1
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApprovalInfo.java

@@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;

+ 38 - 7
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/ApproveRecordInfo.java

@@ -1,13 +1,13 @@
 package com.dragonsoft.dcuc.approve.model;
 
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.*;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.PermissionValidTypeEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.ibatis.type.JdbcType;
 import org.springframework.beans.BeanUtils;
@@ -134,6 +134,16 @@ public class ApproveRecordInfo {
      */
     private String removeAccessResourcesNo;
 
+    /**
+     * 不同意访问资源
+     */
+    private String disagreeAccessResources;
+
+    /**
+     * 不同意访问资源编号
+     */
+    private String disagreeAccessResourcesNo;
+
 
     /**
      * @see PermissionValidTypeEnum
@@ -173,19 +183,29 @@ public class ApproveRecordInfo {
      */
     private String attachmentUrl;
 
-    @ApiModelProperty(value = "流程实例ID")
+    /**
+     * 流程实例ID
+     */
     private String processInstanceId;
 
-    @ApiModelProperty(value = "任务标识(Code)")
+    /**
+     * 任务标识(Code)
+     */
     private String taskCode;
 
-    @ApiModelProperty(value = "任务ID")
+    /**
+     * 任务ID
+     */
     private String taskId;
 
-    @ApiModelProperty(value = "任务名称")
+    /**
+     * 任务名称
+     */
     private String taskName;
 
-    @ApiModelProperty(value = "消息ID")
+    /**
+     * 消息ID
+     */
     private String messageId;
 
     /**
@@ -287,6 +307,17 @@ public class ApproveRecordInfo {
             resourceInfoVo.setVisitorName(removeNameMap.entrySet().stream().findFirst().get().getKey());
             resourceInfoVo.setRemoveVisitResourceName(removeNameMap.entrySet().stream().findFirst().get().getValue());
         }
+
+        Map<String, String> disagreeAccessResourcesNoMap = (Map) JSON.parse(this.getDisagreeAccessResourcesNo());
+        if (CollUtil.isNotEmpty(disagreeAccessResourcesNoMap)) {
+            resourceInfoVo.setDisagreeVisitResourceCode(disagreeAccessResourcesNoMap.entrySet().stream().findFirst().get().getValue());
+        }
+
+        Map<String, String> disagreeAccessResourcesMap = (Map) JSON.parse(this.getDisagreeAccessResources());
+        if (CollUtil.isNotEmpty(disagreeAccessResourcesMap)) {
+            resourceInfoVo.setDisagreeVisitResourceName(disagreeAccessResourcesMap.entrySet().stream().findFirst().get().getValue());
+        }
+
         approvalInfo.setResourceInfoVo(resourceInfoVo);
         approvalInfo.setAppCode(this.getAppCode());
         return approvalInfo;

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApprovalInfoMsgItemDTO.java

@@ -1,6 +1,6 @@
 package com.dragonsoft.dcuc.approve.model.vo;
 
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.resp.ResourceInfoRespVO;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -67,7 +67,7 @@ public class ApprovalInfoMsgItemDTO {
     private Date endTime;
 
     @ApiModelProperty(value = "访问资源信息")
-    private ResourceInfoDTO resourceInfo;
+    private ResourceInfoRespVO resourceInfo;
 
     @ApiModelProperty(value = "当前任务节点名称")
     private String taskName;

+ 2 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/model/vo/ApproveMessageInfoDTO.java

@@ -1,9 +1,9 @@
 package com.dragonsoft.dcuc.approve.model.vo;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import lombok.Data;
 
 /**
@@ -58,7 +58,7 @@ public class ApproveMessageInfoDTO {
         ApprovalInfoMsgItemDTO approvalInfoMsgItemDTO = new ApprovalInfoMsgItemDTO();
         BeanUtil.copyProperties(approvalInfo, approvalInfoMsgItemDTO);
         ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
-        approvalInfoMsgItemDTO.setResourceInfo(resourceInfoVo);
+        approvalInfoMsgItemDTO.setResourceInfo(resourceInfoVo.toResourceInfoRespVO());
 
         ApproveMessageInfoDTO approveMessageInfoDTO = new ApproveMessageInfoDTO();
         approveMessageInfoDTO.setApproveNo(approveNo);

+ 5 - 18
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/IApproveService.java

@@ -1,19 +1,15 @@
 package com.dragonsoft.dcuc.approve.service;
 
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
-import com.dragonsoft.dcuc.approve.enumresources.ApproveWorkFlowOperationEnum;
+import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
 import com.dragonsoft.dcuc.approve.model.req.AgentReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoUpdateReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
-import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
-import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.core.search.Searchable;
-import com.dragonsoft.duceap.duwf.api.model.ActivitiHolder;
-import com.dragonsoft.duceap.duwf.api.model.TaskRequest;
 import org.springframework.data.domain.Page;
 
 import java.util.Date;
@@ -57,27 +53,18 @@ public interface IApproveService {
     /**
      * 表单申请提交/保存
      *
-     * @param approvalInfoDTO 审批信息
+     * @param approvalInfoUpdateReqVO 审批信息
      * @return 状态
      */
-    ResponseDTO<String> update(ApprovalInfoUpdateReqVO approvalInfoDTO);
+    ResponseDTO<String> update(ApprovalInfoUpdateReqVO approvalInfoUpdateReqVO);
 
     /**
      * 审批操作
      *
-     * @param taskId                       任务ID
-     * @param processInstanceId            实例ID
-     * @param approveWorkFlowOperationEnum 审批操作
-     * @param taskRequest                  任务请求
-     * @param taskRequestUserInfoDTO       用户数据
-     * @param activitiHolderList           下一个人员指定
-     * @param needCheckRedList             是否需要检查红名单
+     * @param operateReqDTO 操作请求
      * @return 状态
      */
-    ResponseDTO<OperateRespVO> approveOperate(String taskId, String processInstanceId,
-                                              ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum,
-                                              TaskRequest<ApproveTaskRequestVo> taskRequest, TaskRequestUserInfoDTO taskRequestUserInfoDTO,
-                                              List<ActivitiHolder> activitiHolderList, Boolean needCheckRedList);
+    ResponseDTO<OperateRespVO> approveOperate(OperateReqDTO operateReqDTO);
 
     /**
      * 转办

+ 4 - 15
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveRecordServiceImpl.java

@@ -10,13 +10,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveResultEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ApproveTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.mapper.ApproveRecordMapper;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveRecordInfo;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.model.resp.ApprovalInfoRespVO;
 import com.dragonsoft.dcuc.approve.service.IApproveRecordService;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
@@ -191,21 +191,8 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
         }
         ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
         approveRecordInfo.setApproveContent(approvalInfo.getApplyContent());
-        Map<String, String> accessResources = new HashMap<>(1);
-        accessResources.put(resourceInfoVo.getVisitorName(), resourceInfoVo.getVisitResourceName());
-        approveRecordInfo.setAccessResources(JSON.toJSONString(accessResources));
 
-        Map<String, String> accessResourcesNo = new HashMap<>();
-        accessResourcesNo.put(resourceInfoVo.getVisitorCode(), resourceInfoVo.getVisitResourceCode());
-        approveRecordInfo.setAccessResourcesNo(JSON.toJSONString(accessResourcesNo));
-
-        Map<String, String> removeAccessResourcesNo = new HashMap<>();
-        removeAccessResourcesNo.put(resourceInfoVo.getVisitorCode(), resourceInfoVo.getRemoveVisitResourceCode());
-        approveRecordInfo.setRemoveAccessResourcesNo(JSON.toJSONString(removeAccessResourcesNo));
-
-        Map<String, String> removeAccessResources = new HashMap<>();
-        removeAccessResources.put(resourceInfoVo.getVisitorName(), resourceInfoVo.getRemoveVisitResourceName());
-        approveRecordInfo.setRemoveAccessResources(JSON.toJSONString(removeAccessResources));
+        approveBusiness.setResourceInfoData(approveRecordInfo, resourceInfoVo);
 
         approveRecordInfo.setPermissionValidType(approvalInfo.getPermissionValidType());
         approveRecordInfo.setStartTime(approvalInfo.getStartTime());
@@ -259,4 +246,6 @@ public class ApproveRecordServiceImpl implements IApproveRecordService {
 
         return approveRecordMapper.selectOne(where);
     }
+
+
 }

+ 179 - 58
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/service/impl/ApproveServiceImpl.java

@@ -3,12 +3,12 @@ package com.dragonsoft.dcuc.approve.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.dragoninfo.dcuc.common.entity.Proofs;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
 import com.dragonsoft.dcuc.approve.business.IApproveBusiness;
@@ -16,6 +16,10 @@ import com.dragonsoft.dcuc.approve.business.IApproveLogBusiness;
 import com.dragonsoft.dcuc.approve.business.IDcucAuthBusiness;
 import com.dragonsoft.dcuc.approve.business.IWorkFlowBusiness;
 import com.dragonsoft.dcuc.approve.constants.ApproveConstants;
+import com.dragonsoft.dcuc.approve.dto.BaseOperateReqDTO;
+import com.dragonsoft.dcuc.approve.dto.ContentRespDTO;
+import com.dragonsoft.dcuc.approve.dto.OperateReqDTO;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.*;
 import com.dragonsoft.dcuc.approve.model.ApprovalInfo;
 import com.dragonsoft.dcuc.approve.model.ApproveCirculationInfo;
@@ -24,7 +28,7 @@ import com.dragonsoft.dcuc.approve.model.TaskAssignRecord;
 import com.dragonsoft.dcuc.approve.model.req.AgentReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.req.ApprovalInfoUpdateReqVO;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.req.ResourceInfoReqVO;
 import com.dragonsoft.dcuc.approve.model.resp.*;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveMessageInfoDTO;
 import com.dragonsoft.dcuc.approve.model.vo.ApproveTaskRequestVo;
@@ -32,17 +36,17 @@ import com.dragonsoft.dcuc.approve.model.vo.LogDto;
 import com.dragonsoft.dcuc.approve.model.vo.TaskRequestUserInfoDTO;
 import com.dragonsoft.dcuc.approve.properties.ApproveProperties;
 import com.dragonsoft.dcuc.approve.service.*;
-import com.dragonsoft.dcuc.approve.threadlocal.ThreadLocalProofsHolder;
 import com.dragonsoft.dcuc.approve.utils.ProofsUtil;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
+import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.dragonsoft.duceap.commons.util.date.DateConst;
 import com.dragonsoft.duceap.commons.util.date.DateUtils;
 import com.dragonsoft.duceap.commons.util.enums.EnumUtils;
-import com.dragonsoft.duceap.core.context.ContextUtils;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.core.search.Searchable;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
 import com.dragonsoft.duceap.duwf.api.model.*;
@@ -154,9 +158,10 @@ public class ApproveServiceImpl implements IApproveService {
             if (StrUtil.isBlank(applyContent)) {
                 String flowType = approvalInfo.getFlowType();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
-                @Valid @NotNull ResourceInfoDTO resourceInfoDTO = approvalInfoReqVO.getResourceInfoDTO();
-                ContentRespVO contentRespVO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoDTO);
-                approvalInfo.setApplyContent(JSON.toJSONString(contentRespVO));
+                @Valid @NotNull ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
+                ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
+                ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoDTO);
+                approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
             }
             //构建ApprovalResourceInfo资源对象
             // 生成审批单号
@@ -193,8 +198,9 @@ public class ApproveServiceImpl implements IApproveService {
                 taskRequestUserInfoDTO.setIdCard(approvalInfoReqVO.getApplicantIdcard());
                 taskRequestUserInfoDTO.setUserName(approvalInfoReqVO.getApplicantName());
                 String applicantIdcard = approvalInfoReqVO.getApplicantIdcard();
-                @Valid @NotNull ResourceInfoDTO resourceInfoDTO = approvalInfoReqVO.getResourceInfoDTO();
+                @Valid @NotNull ResourceInfoReqVO resourceInfoReqVO = approvalInfoReqVO.getResourceInfoDTO();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
+                ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
                 OperateRespVO operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoDTO);
 
                 //构建流转的taskRequest
@@ -206,10 +212,22 @@ public class ApproveServiceImpl implements IApproveService {
                 ApproveResultEnum approveResult = ApproveResultEnum.APPROVE_ING;
                 if (CollectionUtils.isNotEmpty(taskRunDetailVos)) {
                     for (TaskHistoryDetailVo taskDetailVo : taskRunDetailVos) {
+
+                        BaseOperateReqDTO baseOperateReqDTO = BaseOperateReqDTO.builder()
+                                .operateIdcard(applicantIdcard)
+                                .taskId(taskDetailVo.getId())
+                                .operationEnum(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)
+                                .taskRequest(commitTaskRequest)
+                                .approvalInfo(approvalInfo)
+                                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                                .approveNo(approveNo)
+                                .processNo(approvalInfo.getBusinessCode())
+                                .approveRecordId(approvalInfo.getId())
+                                .hitRedList(operateRespVO.getHitRedList())
+                                .build();
+
                         //调用工作流提交节点,审批时使用申请人的身份证号码
-                        processInstanceVO = baseApproveOperate(applicantIdcard, taskDetailVo.getId(), ApproveWorkFlowOperationEnum.COMPLETE_AGREE,
-                                commitTaskRequest, approvalInfo, taskRequestUserInfoDTO, approveNo, approvalInfo.getBusinessCode(), approvalInfo.getId(),
-                                operateRespVO.getHitRedList());
+                        processInstanceVO = baseApproveOperate(baseOperateReqDTO);
                         if (CollectionUtils.isNotEmpty(taskRunDetailVos)) {
                             sendMessageFlag = false;
                         }
@@ -309,8 +327,9 @@ public class ApproveServiceImpl implements IApproveService {
                 if (StrUtil.isBlank(approvalInfoUpdateReqVO.getFlowType())) {
                     approvalInfoUpdateReqVO.setFlowType(approvalInfo.getFlowType());
                 }
-
-                approvalInfo.setResourceInfoVo(approvalInfoUpdateReqVO.getResourceInfoDTO());
+                ResourceInfoReqVO resourceInfoReqVO = approvalInfoUpdateReqVO.getResourceInfoDTO();
+                ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoReqVO);
+                approvalInfo.setResourceInfoVo(resourceInfoDTO);
                 BeanUtils.copyProperties(approvalInfoUpdateReqVO, approvalInfo);
                 //判断有效期类型
                 String permissionValidType = approvalInfoUpdateReqVO.getPermissionValidType();
@@ -328,9 +347,9 @@ public class ApproveServiceImpl implements IApproveService {
                 approvalInfo.setUpdateUser(ProofsUtil.getIdcard());
                 String flowType = approvalInfo.getFlowType();
                 FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
-                @Valid @NotNull ResourceInfoDTO resourceInfoDTO = approvalInfo.getResourceInfoVo();
-                ContentRespVO contentRespVO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoDTO);
-                approvalInfo.setApplyContent(JSON.toJSONString(contentRespVO));
+                @Valid @NotNull ResourceInfoDTO resourceInfoRespVO = approvalInfo.getResourceInfoVo();
+                ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoRespVO);
+                approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
                 //构建模式3新表单表对象
                 approveRecordInfo = approveRecordService.buildApproveRecordInfo(approvalInfo, approvalInfo.getApproveNo());
                 approveRecordInfo.setAlreadyRedListApprove(BooleanEnum.FALSE.value);
@@ -353,17 +372,28 @@ public class ApproveServiceImpl implements IApproveService {
                     taskRequestUserInfoDTO.setOrgCode(approvalInfoUpdateReqVO.getApplicantOrgCode());
                     taskRequestUserInfoDTO.setOrgName(approvalInfoUpdateReqVO.getApplicantOrgName());
 
-                    OperateRespVO operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoDTO);
+                    OperateRespVO operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoRespVO);
 
                     //构建工作流请求体
                     this.buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, approvalInfoUpdateReqVO.getActivitiHolderList(), null, operateRespVO.getHitRedList());
 
                     for (TaskHistoryDetailVo taskDetailVo : list) {
                         String taskDetailVoId = taskDetailVo.getId();
+                        BaseOperateReqDTO baseOperateReqDTO = BaseOperateReqDTO.builder()
+                                .operateIdcard(ProofsUtil.getIdcard())
+                                .taskId(taskDetailVoId)
+                                .operationEnum(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)
+                                .taskRequest(taskRequest)
+                                .approvalInfo(approvalInfo)
+                                .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                                .approveNo(approveRecordInfo.getApproveNo())
+                                .processNo(approvalInfo.getBusinessCode())
+                                .approveRecordId(approvalInfo.getId())
+                                .hitRedList(operateRespVO.getHitRedList())
+                                .build();
+
                         //循环提交当前待办任务
-                        processInstanceVO = baseApproveOperate(ProofsUtil.getIdcard(), taskDetailVoId, ApproveWorkFlowOperationEnum.COMPLETE_AGREE,
-                                taskRequest, approvalInfo, taskRequestUserInfoDTO, approveRecordInfo.getApproveNo(), approveRecordInfo.getBusinessCode(),
-                                approveRecordInfo.getId(), operateRespVO.getHitRedList());
+                        processInstanceVO = baseApproveOperate(baseOperateReqDTO);
                         List<TaskHistoryDetailVo> taskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
                         if (CollectionUtils.isNotEmpty(taskRunDetailVos)) {
                             //若存在待办任务,说明流程未结束,无需发送消息给权限中心
@@ -452,7 +482,7 @@ public class ApproveServiceImpl implements IApproveService {
         String appCode = approveProperties.getAppCode();
         approveTaskRequestVo.setBusinessSystem(appCode);
         approveTaskRequestVo.setBusinessType(approvalInfo.getBusinessCode());
-        BaseSecurityUser userInfo = ContextUtils.getUserInfo();
+        BaseSecurityUser userInfo = UserContextUtils.getCurrentUser();
         approveTaskRequestVo.setHandleUser(userInfo == null ? taskRequestUserInfoDTO.getIdCard() : userInfo.getIdcard());
         approveTaskRequestVo.setHandleUserName(userInfo == null ? taskRequestUserInfoDTO.getUserName() : userInfo.getUserName());
         taskRequest.setData(approveTaskRequestVo);
@@ -477,9 +507,16 @@ public class ApproveServiceImpl implements IApproveService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public ResponseDTO<OperateRespVO> approveOperate(String taskId, String processInstanceId, ApproveWorkFlowOperationEnum
-            approveWorkFlowOperationEnum, TaskRequest<ApproveTaskRequestVo> taskRequest, TaskRequestUserInfoDTO taskRequestUserInfoDTO,
-                                                     List<ActivitiHolder> activitiHolderList, Boolean needCheckRedList) {
+    public ResponseDTO<OperateRespVO> approveOperate(OperateReqDTO operateReqDTO) {
+
+        String taskId = operateReqDTO.getTaskId();
+        String processInstanceId = operateReqDTO.getProcessInstanceId();
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = operateReqDTO.getApproveWorkFlowOperationEnum();
+        TaskRequest<ApproveTaskRequestVo> taskRequest = operateReqDTO.getTaskRequest();
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = operateReqDTO.getTaskRequestUserInfoDTO();
+        List<ActivitiHolder> activitiHolderList = operateReqDTO.getActivitiHolderList();
+        Boolean needCheckRedList = operateReqDTO.getNeedCheckRedList();
+
         ApprovalInfo approvalInfo = null;
         ProcessInstanceVO processInstanceVO = null;
         ApproveResultEnum approveResultEnum = ApproveResultEnum.SUCCESS;
@@ -499,7 +536,15 @@ public class ApproveServiceImpl implements IApproveService {
                 return ResponseUtil.dtoFail("审批单不存在");
             }
 
-            ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
+            // 更新审批操作设置的资源信息
+            ResourceInfoDTO resourceInfoVo = updateResourceInfo(operateReqDTO, approvalInfo.getResourceInfoVo());
+            approvalInfo.setResourceInfoVo(resourceInfoVo);
+
+            String flowType = approvalInfo.getFlowType();
+            FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
+            ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoVo);
+            approvalInfo.setApplyContent(JSON.toJSONString(contentRespDTO));
+
             String alreadyRedListApprove = approvalInfo.getAlreadyRedListApprove();
             TaskHistoryDetailVo taskHistoryDetailVo = workflowClientFactory.getWorkflowTaskClient().queryTaskDetail(taskId);
             String taskHistoryDetailVoName = taskHistoryDetailVo.getName();
@@ -507,25 +552,16 @@ public class ApproveServiceImpl implements IApproveService {
 
             String approvalInfoTaskId = approvalInfo.getTaskId();
             String approvalInfoId = approvalInfo.getId();
-            String flowType = approvalInfo.getFlowType();
             String approveNo = approvalInfo.getApproveNo();
             String businessCode = approvalInfo.getBusinessCode();
             String applicantIdcard = approvalInfo.getApplicantIdcard();
 
             //判断操作类型是否支持
+
             if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.RECALL)
                     || approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.BACK)) {
-                //通过任务id获取任务详情
-                boolean isEnable;
-                if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.RECALL)) {
-                    //查询当前任务是否支持撤回操作(工作流节点是否有配置撤回操作)
-                    isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_WITH_DRAW_COMMIT);
-                } else {
-                    //查询当前任务是否支持退回操作(工作流节点是否有配置退回操作)
-                    isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_BACK_COMMIT);
-                }
-                logger.info("=====节点的{}操作权限判断结果为:{}======", approveWorkFlowOperationEnum, isEnable);
-                if (!isEnable || approvalInfoTaskId.equalsIgnoreCase(ApproveConstants.END_STR)) {
+                boolean enableOperate = isEnableOperateRecallBack(operateReqDTO, approvalInfoTaskId, taskCode);
+                if (!enableOperate) {
                     return ResponseUtil.dtoFail("该节点不支持此项操作");
                 }
                 if (StringUtils.isNotEmpty(approvalInfoTaskId)) {
@@ -533,7 +569,6 @@ public class ApproveServiceImpl implements IApproveService {
                 }
             }
 
-            FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
             operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoVo);
             String redListTip = operateRespVO.getRedListTip();
             Boolean hitRedList = operateRespVO.getHitRedList();
@@ -560,9 +595,20 @@ public class ApproveServiceImpl implements IApproveService {
             //构建工作流请求体
             this.buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, activitiHolderList, null, operateRespVO.getHitRedList());
             //节点提交
-            Proofs proofs = ThreadLocalProofsHolder.getProofs();
-            processInstanceVO = baseApproveOperate(proofs.getIdcard(), taskId, approveWorkFlowOperationEnum,
-                    taskRequest, approvalInfo, taskRequestUserInfoDTO, approveNo, businessCode, approvalInfoId, operateRespVO.getHitRedList());
+            BaseOperateReqDTO baseOperateReqDTO = BaseOperateReqDTO.builder()
+                    .operateIdcard(ProofsUtil.getIdcard())
+                    .taskId(taskId)
+                    .operationEnum(approveWorkFlowOperationEnum)
+                    .taskRequest(taskRequest)
+                    .approvalInfo(approvalInfo)
+                    .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
+                    .approveNo(approveNo)
+                    .processNo(businessCode)
+                    .approveRecordId(approvalInfoId)
+                    .hitRedList(operateRespVO.getHitRedList())
+                    .build();
+
+            processInstanceVO = baseApproveOperate(baseOperateReqDTO);
             List<TaskHistoryDetailVo> afterTaskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
 
             if (CollectionUtils.isNotEmpty(afterTaskRunDetailVos)) {
@@ -585,8 +631,8 @@ public class ApproveServiceImpl implements IApproveService {
             logger.info("====是否发送消息标志位:{}====", sendMessageFlag);
             if (sendMessageFlag) {
                 //构建消息体并发送
-                ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, approveWorkFlowOperationEnum);
-                approveBusiness.sendApproveResultMessage(approveMessageInfoDTO);
+                sendMessage(approveWorkFlowOperationEnum, approvalInfo);
+
                 //设置流程状态结果
                 switch (approveWorkFlowOperationEnum) {
                     case COMPLETE_AGREE:
@@ -598,13 +644,13 @@ public class ApproveServiceImpl implements IApproveService {
                     default:
                         break;
                 }
-
             }
             //构建任务id、任务标识码、任务名称字段,多个均以,相隔
             approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfo, afterTaskRunDetailVos);
             logger.info("====当前任务详情:{}====", JSONObject.toJSON(afterTaskRunDetailVos));
             logger.info("====开始更新审批单信息====");
             //设置表单信息
+
             buildUpdateInfo(approveRecordInfo, approvalInfo);
             //修改表单
             approveRecordService.updateById(approveRecordInfo);
@@ -639,25 +685,32 @@ public class ApproveServiceImpl implements IApproveService {
         approveRecordInfo.setAlreadyRedListApprove(approvalInfo.getAlreadyRedListApprove());
         approveRecordInfo.setUpdateTime(new Date());
         approveRecordInfo.setUpdateUser(ProofsUtil.getIdcard());
+
+        ResourceInfoDTO resourceInfoVo = approvalInfo.getResourceInfoVo();
+        approveBusiness.setResourceInfoData(approveRecordInfo, resourceInfoVo);
+
     }
 
     /**
      * 基础提交
      *
-     * @param operateIdcard                操作人Idcard
-     * @param taskId                       任务ID
-     * @param approveWorkFlowOperationEnum 提交类型
-     * @param taskRequest                  请求体
-     * @param approvalInfo                 审批信息
-     * @param approveNo                    审批单号
-     * @param processNo                    处理单号
-     * @param approveRecordId              审批记录单号
+     * @param baseOperateReqDTO 基础提交请求
      * @return 流程信息
      */
-    public ProcessInstanceVO baseApproveOperate(String operateIdcard, String taskId, ApproveWorkFlowOperationEnum
-            approveWorkFlowOperationEnum, TaskRequest<ApproveTaskRequestVo> taskRequest, ApprovalInfo approvalInfo,
-                                                TaskRequestUserInfoDTO taskRequestUserInfoDTO, String approveNo,
-                                                String processNo, String approveRecordId, boolean hitRedList) {
+    public ProcessInstanceVO baseApproveOperate(BaseOperateReqDTO baseOperateReqDTO) {
+        Assert.notNull(baseOperateReqDTO);
+
+        String operateIdcard = baseOperateReqDTO.getOperateIdcard();
+        String taskId = baseOperateReqDTO.getTaskId();
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = baseOperateReqDTO.getOperationEnum();
+        TaskRequest<ApproveTaskRequestVo> taskRequest = baseOperateReqDTO.getTaskRequest();
+        ApprovalInfo approvalInfo = baseOperateReqDTO.getApprovalInfo();
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = baseOperateReqDTO.getTaskRequestUserInfoDTO();
+        String approveNo = baseOperateReqDTO.getApproveNo();
+        String processNo = baseOperateReqDTO.getProcessNo();
+        String approveRecordId = baseOperateReqDTO.getApproveRecordId();
+        boolean hitRedList = baseOperateReqDTO.getHitRedList();
+
         taskRequest = buildTaskRequest(taskRequest, approvalInfo, taskRequestUserInfoDTO, null, null, hitRedList);
         //判断是否有审批信息,若无,默认设置
         if (null == taskRequest.getApproveMessage()) {
@@ -669,6 +722,9 @@ public class ApproveServiceImpl implements IApproveService {
 
         ProcessInstanceVO vo = null;
         logger.info("=====approveInfo->applicantIdCard:{},传入的idCard是:{}=====", approvalInfo.getApplicantIdcard(), operateIdcard);
+
+        logger.info("=====approveInfo->workflowClientFactory taskRequest:{}", JsonUtils.toJSONString(taskRequest));
+
         switch (approveWorkFlowOperationEnum) {
             case COMPLETE_AGREE:
                 vo = workflowClientFactory.getWorkflowTaskClient().commitTask(taskId, taskRequest, WorkFlowOprationEnum.COMPLETE_AGREE, operateIdcard);
@@ -963,7 +1019,7 @@ public class ApproveServiceImpl implements IApproveService {
         //获取表单信息
         ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);
         if (approveRecordInfo == null) {
-            throw new IllegalArgumentException(String.format("processInstanceId:%s con't find ApprovalInfo", processInstanceId));
+            throw new IllegalArgumentException(String.format("processInstanceId:%s can't find ApprovalInfo", processInstanceId));
         }
         String approvalInfoId = approveRecordInfo.getId();
         //通过表单id查询审批记录
@@ -1023,12 +1079,77 @@ public class ApproveServiceImpl implements IApproveService {
         approvalInfo.setId(UUIDUtils.getUUID());
         approvalInfo.setCreateTime(new Date());
 
-        @Valid @NotNull ResourceInfoDTO resourceInfoDTO = approvalInfoReqVO.getResourceInfoDTO();
+        @Valid @NotNull ResourceInfoReqVO resourceInfoRespVO = approvalInfoReqVO.getResourceInfoDTO();
 
+        ResourceInfoDTO resourceInfoDTO = ResourceInfoDTO.parseResourceInfoReqVO(resourceInfoRespVO);
         approvalInfo.setResourceInfoVo(resourceInfoDTO);
 
         return approvalInfo;
     }
 
 
+    /**
+     * 是否支持撤回、退回操作
+     *
+     * @param operateReqDTO      请求
+     * @param approvalInfoTaskId 当前任务ID
+     * @param taskCode           任务代码
+     * @return 是否支持
+     */
+    protected boolean isEnableOperateRecallBack(OperateReqDTO operateReqDTO, String approvalInfoTaskId, String taskCode) {
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = operateReqDTO.getApproveWorkFlowOperationEnum();
+        String taskId = operateReqDTO.getTaskId();
+        String processInstanceId = operateReqDTO.getProcessInstanceId();
+
+        Assert.notNull(approveWorkFlowOperationEnum);
+        Assert.notBlank(taskId);
+        Assert.notBlank(processInstanceId);
+
+        boolean isEnable;
+        if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.RECALL)) {
+            //查询当前任务是否支持撤回操作(工作流节点是否有配置撤回操作)
+            isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_WITH_DRAW_COMMIT);
+        } else {
+            //查询当前任务是否支持退回操作(工作流节点是否有配置退回操作)
+            isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_BACK_COMMIT);
+        }
+        logger.info("=====节点的{}操作权限判断结果为:{}======", approveWorkFlowOperationEnum, isEnable);
+        return isEnable && !approvalInfoTaskId.equalsIgnoreCase(ApproveConstants.END_STR);
+    }
+
+    /**
+     * 发生消息
+     *
+     * @param approveWorkFlowOperationEnum 操作类型
+     * @param approvalInfo                 审批信息
+     */
+    protected void sendMessage(ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum, ApprovalInfo approvalInfo) {
+        //构建消息体并发送
+        ApproveMessageInfoDTO approveMessageInfoDTO = ApproveMessageInfoDTO.newInstance(approvalInfo, approveWorkFlowOperationEnum);
+        approveBusiness.sendApproveResultMessage(approveMessageInfoDTO);
+    }
+
+    /**
+     * 更新审批操作设置的资源信息
+     *
+     * @param operateReqDTO   操作请求
+     * @param resourceInfoDTO 资源信息
+     * @return 资源信息
+     */
+    protected ResourceInfoDTO updateResourceInfo(OperateReqDTO operateReqDTO, ResourceInfoDTO resourceInfoDTO) {
+        Assert.notNull(operateReqDTO);
+        String visitResourceCode = operateReqDTO.getVisitResourceCode();
+        String visitResourceName = operateReqDTO.getVisitResourceName();
+        // 如果没有设置访问资源则为空
+        if (StrUtil.isNotBlank(visitResourceCode)
+                && StrUtil.isNotBlank(visitResourceName)) {
+            resourceInfoDTO.setVisitResourceCode(visitResourceCode);
+            resourceInfoDTO.setVisitResourceName(visitResourceName);
+            resourceInfoDTO.setDisagreeVisitResourceCode(operateReqDTO.getDisagreeVisitResourceCode());
+            resourceInfoDTO.setDisagreeVisitResourceName(operateReqDTO.getDisagreeVisitResourceName());
+        }
+        return resourceInfoDTO;
+    }
+
+
 }

+ 164 - 0
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/utils/ResponseUtil.java

@@ -0,0 +1,164 @@
+package com.dragonsoft.dcuc.approve.utils;
+
+import com.dragoninfo.dcuc.common.entity.ApiResult;
+import com.dragoninfo.dcuc.common.enums.ErrorCodeEnum;
+import com.dragoninfo.duceap.core.enums.ResultEnum;
+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.commons.util.json.JsonUtils;
+
+/**
+ * 返回值工具类
+ *
+ * @author huangzqa
+ * @date 2021/3/9
+ **/
+public class ResponseUtil {
+
+    private ResponseUtil() {
+    }
+
+    /**
+     * 判断返回值是否成功
+     *
+     * @param responseStatus 返回状态
+     * @return 是否成功
+     */
+    public static boolean isSuccess(ResponseStatus responseStatus) {
+        return responseStatus.getStatusCode().equals(ResponseStatus.SUCCESS_CODE);
+    }
+
+    /**
+     * 判断返回值是否失败
+     *
+     * @param responseStatus 返回状态
+     * @return 是否失败
+     */
+    public static boolean isFail(ResponseStatus responseStatus) {
+        return !isSuccess(responseStatus);
+    }
+
+    /**
+     * 返回 ResponseDTO 错误信息
+     *
+     * @param message 消息
+     * @return ResponseDTO
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> ResponseDTO<T> dtoFail(String message) {
+        return ResponseDTO.fail(ResponseStatus.FAIL_CODE, message, null);
+    }
+
+    /**
+     * 返回 ResponseDTO 信息
+     *
+     * @param statusCode 状态
+     * @param message    消息
+     * @return ResponseDTO
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> ResponseDTO<T> message(String statusCode, String message) {
+        return ResponseDTO.fail(statusCode, message, null);
+    }
+
+    /**
+     * 获取泛型返回值
+     *
+     * @param responseDTO 返回类
+     * @param <T>         泛型
+     * @return 返回值
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getResult(ResponseDTO<T> responseDTO) {
+        return (T) responseDTO.getResult();
+    }
+
+    /**
+     * 新实体
+     *
+     * @param result 结果
+     * @param <T>    泛型
+     * @return 结果
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> ResponseDTO<T> newInstance(T result) {
+        return ResponseDTO.newInstance(result);
+    }
+
+    /**
+     * 错误代码
+     *
+     * @param errorCodeEnum 错误枚举
+     * @return 错误代码返回
+     */
+    public static ResponseStatus errorCode(ErrorCodeEnum errorCodeEnum) {
+        return ResponseStatus.fail(errorCodeEnum.getValue(), errorCodeEnum.getLabel());
+    }
+
+    /**
+     * 错误代码转换为JSON
+     *
+     * @param errorCodeEnum 错误枚举
+     * @return 错误代码JSON
+     */
+    public static String errorCodeJson(ErrorCodeEnum errorCodeEnum) {
+        return JsonUtils.toJSONString(errorCode(errorCodeEnum));
+    }
+
+    /**
+     * 判断是否成功
+     *
+     * @param result 结果
+     * @param <T>    泛型
+     * @return 是否成功
+     */
+    public static <T> boolean isSuccess(Result<T> result) {
+        String resultStatus = result.getResult();
+        return resultStatus.equalsIgnoreCase(ResultEnum.SUCCESS.getValue());
+    }
+
+    /**
+     * 判断返回值是否失败
+     *
+     * @param result 返回状态
+     * @return 是否失败
+     */
+    public static <T> boolean isFail(Result<T> result) {
+        return !isSuccess(result);
+    }
+
+    /**
+     * 获取泛型返回值
+     *
+     * @param result 返回类
+     * @param <T>    泛型
+     * @return 返回值
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getContent(Result<T> result) {
+        return (T) result.getContent();
+    }
+
+    /**
+     * 判断是否成功
+     *
+     * @param result 结果
+     * @param <T>    泛型
+     * @return 是否成功
+     */
+    public static <T> boolean isSuccess(ApiResult result) {
+        String statusCode = result.getStatusCode();
+        return statusCode.equalsIgnoreCase(ResultEnum.SUCCESS.getValue());
+    }
+
+    /**
+     * 判断返回值是否失败
+     *
+     * @param result 返回状态
+     * @return 是否失败
+     */
+    public static <T> boolean isFail(ApiResult result) {
+        return !isSuccess(result);
+    }
+}

+ 1 - 1
approve-core-service/src/main/resources/application-approve.yml

@@ -7,7 +7,7 @@ approve:
     app-key: dcuc69000787
     app-secret: dcuc01494668
     auth-service-apply-topic: 10000027
-    kafka-servers: http://192.168.10.20:9981/dcms-manager
+    kafka-servers: http://10.201.2.14:9981/dcms-manager
     approve-log-topic: 10000034
   audit-sys-id: test
   kx-people-list: 371082197703267600

+ 2 - 2
approve-core-service/src/main/resources/application-base.yml

@@ -21,7 +21,7 @@ spring:
   kafka:
     #kafka消费者配置
     consumer:
-      bootstrap-servers: 192.168.10.20:9093
+      bootstrap-servers: 10.201.2.14:9092
       enable-auto-commit: true
       auto-commit-interval: 1000
       group-id: approveServiceGroup
@@ -67,7 +67,7 @@ duceap:
     client:
       type: http
     http:
-      url: 10.254.10.17:8880/duceap-duwf-core
+      url: 10.254.10.29:8880/duceap-duwf-core
   swagger:
     enabled: true
     packagePath: com.dragonsoft.dcuc.approve.facade.api

+ 5 - 0
approve-core-service/src/main/resources/config/mysql/V1_1_0014__add_disagree_resource_.sql

@@ -0,0 +1,5 @@
+ALTER TABLE `T_APPROVE_RECORD_INFO`
+    ADD COLUMN `DISAGREE_ACCESS_RESOURCES` varchar(2048) NULL COMMENT '不同意访问资源' AFTER `REMOVE_ACCESS_RESOURCES_NO`;
+
+ALTER TABLE `T_APPROVE_RECORD_INFO`
+    ADD COLUMN `DISAGREE_ACCESS_RESOURCES_NO` varchar(2048) NULL COMMENT '不同意访问资源编号' AFTER `DISAGREE_ACCESS_RESOURCES`;

文件差异内容过多而无法显示
+ 399 - 0
approve-core-service/src/main/resources/workflow/一级审批1000000662(_)-20220825.xml


文件差异内容过多而无法显示
+ 515 - 0
approve-core-service/src/main/resources/workflow/二级审批1000000680(_)-20220825.xml


文件差异内容过多而无法显示
+ 400 - 0
approve-core-service/src/main/resources/workflow/应用功能权限申请1000000698(_)-20220825.xml


+ 2 - 1
approve-core-service/src/test/java/com/dragonsoft/dcuc/approve/business/DcucAuthBusinessImplTest.java

@@ -1,9 +1,10 @@
 package com.dragonsoft.dcuc.approve.business;
 
 import com.dragonsoft.dcuc.approve.business.impl.DcucAuthBusinessImpl;
+import com.dragonsoft.dcuc.approve.dto.ResourceInfoDTO;
 import com.dragonsoft.dcuc.approve.enumresources.FlowTypeEnum;
 import com.dragonsoft.dcuc.approve.enumresources.ListLevelEnum;
-import com.dragonsoft.dcuc.approve.model.req.ResourceInfoDTO;
+import com.dragonsoft.dcuc.approve.model.resp.ResourceInfoRespVO;
 import com.dragonsoft.dcuc.approve.model.resp.OperateRespVO;
 import org.junit.Assert;
 import org.junit.jupiter.api.Test;

部分文件因为文件数量过多而无法显示