Преглед на файлове

[Feature] 工单增加 挂起、激活、终止 操作

AA преди 7 месеца
родител
ревизия
beafa58843

+ 19 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ApproveWorkFlowOperationEnum.java

@@ -26,6 +26,25 @@ public enum ApproveWorkFlowOperationEnum implements ICodeEnum {
      * 撤回
      */
     RECALL("recall", "撤回"),
+
+
+    //TODO add wanghao
+    /**
+     * 挂起
+     */
+    SUSPEND("suspend", "挂起"),
+
+    /**
+     * 激活
+     */
+    ACTIVATE("activate", "激活"),
+
+    /**
+     * 终止
+     */
+    REDO("redo", "终止"),
+
+
     ;
 
     public final String value;

+ 7 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/OperateOptionEnum.java

@@ -52,6 +52,13 @@ public enum OperateOptionEnum implements ICodeEnum {
      * 挂起
      */
     _SUSPEND_COMMIT("_SuspendCommit", "挂起"),
+
+    //TODO add wanghao
+    /**
+     * 挂起
+     */
+    _BTN_SUSPEND_COMMIT("_btnSuspend", "挂起"),
+
     /**
      * 撤回
      */

+ 19 - 3
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/QmApproveTypeEnumV2.java

@@ -19,9 +19,25 @@ public enum QmApproveTypeEnumV2 implements ICodeEnum {
     /**
      * 审批
      */
-    APPROVE("15", "审批");
-	
-    
+    APPROVE("15", "审批"),
+
+
+    //TODO addwanghao  未知字典码  随机写了
+    /**
+     * 挂起
+     */
+    SUSPEND("17", "挂起"),
+
+    /**
+     * 激活
+     */
+    ACTIVATE("18", "激活"),
+
+    /**
+     * 终止
+     */
+    REDO("19", "终止");
+
 
     private final String value;
 

+ 5 - 0
approve-api/src/main/java/com/dragonsoft/dcuc/approve/enumresources/ZeroTrustApproveManageEnum.java

@@ -52,12 +52,17 @@ public enum ZeroTrustApproveManageEnum implements ICodeEnum {
     }
 
     public ApproveWorkFlowOperationEnum toApproveWorkFlowOperationEnum() {
+
+        //TODO add  wanghao
         switch (this) {
             case CANCEL:
                 return ApproveWorkFlowOperationEnum.RECALL;
             case HOLD:
+                return ApproveWorkFlowOperationEnum.SUSPEND;        //新加
             case STOP:
+                return ApproveWorkFlowOperationEnum.REDO;           //新加
             case ACTIVE:
+                return ApproveWorkFlowOperationEnum.ACTIVATE;       //新加
             default:
                 return null;
         }

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

@@ -157,4 +157,38 @@ public interface IApiV2ApproveFacade {
     @RequestMapping(value = "api/v2/approve-operate", method = RequestMethod.PUT)
     ResponseDTO<OperateRespVO> operate(@Validated @RequestBody ApproveOperateV2ReqVO approveOperateV2ReqVO);
 
+
+
+    //TODO add wanghao   挂起 suspend
+    /**
+     * 挂起审批流程
+     *
+     * @param approveNo 审批单号
+     * @return 结果
+     */
+    @ApiOperation(value = "挂起审批流程", notes = "挂起审批流程")
+    @PutMapping(value = "api/v2/approves/{approveNo}/suspend")
+    ResponseStatus suspendApprove(@PathVariable String approveNo);
+
+
+    /**
+     * 终止审批流程
+     *
+     * @param approveNo 审批单号
+     * @return 结果
+     */
+    @ApiOperation(value = "终止审批流程", notes = "终止审批流程")
+    @PutMapping(value = "api/v2/approves/{approveNo}/redo")
+    ResponseStatus redoApprove(@PathVariable String approveNo);
+
+    /**
+     * 激活审批流程
+     *
+     * @param approveNo 审批单号
+     * @return 结果
+     */
+    @ApiOperation(value = "激活审批流程", notes = "激活审批流程")
+    @PutMapping(value = "api/v2/approves/{approveNo}/activate")
+    ResponseStatus activateApprove(@PathVariable String approveNo);
+    //TODO add wanghao   end
 }

+ 92 - 13
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveCommonBusinessImpl.java

@@ -588,8 +588,8 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
         OperateRespVO operateRespVO = null;
         try {
             //根据实例id或任务id获取申请表单并构建成旧ApprovalInfo对象
-            ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);
-            approvalInfoDTO = approveRecordInfo.toApprovalInfo();
+            ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstanceId);  //获取表单数据
+            approvalInfoDTO = approveRecordInfo.toApprovalInfo();       //构建为旧表单数据 建成旧ApprovalInfo对象
             if (approvalInfoDTO == null) {
                 approveResultEnum = ApproveResultEnum.FAIL;
                 failMsg = "审批单不存在";
@@ -600,24 +600,24 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
             ResourceInfoDTO resourceInfoVo = updateResourceInfo(operateReqDTO, approvalInfoDTO.getResourceInfoVo());
             approvalInfoDTO.setResourceInfoVo(resourceInfoVo);
 
-            String flowType = approvalInfoDTO.getFlowType();
+            String flowType = approvalInfoDTO.getFlowType();    //权限申请类型   重要?      应用功能授权  数据授权  任务等
             FlowTypeEnum flowTypeEnum = EnumUtils.enumOf(FlowTypeEnum.class, flowType);
-            ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoVo);
-            approvalInfoDTO.setApplyContent(JSON.toJSONString(contentRespDTO));
+            ContentRespDTO contentRespDTO = approveBusiness.generalContentRespVO(flowTypeEnum, resourceInfoVo);//响应的界面显示信息
+            approvalInfoDTO.setApplyContent(JSON.toJSONString(contentRespDTO));      //申请内容记录
 
             String alreadyRedListApprove = approvalInfoDTO.getAlreadyRedListApprove();
-            TaskHistoryDetailVo taskHistoryDetailVo = workflowClientFactory.getWorkflowTaskClient().queryTaskDetail(taskId);
+            TaskHistoryDetailVo taskHistoryDetailVo = workflowClientFactory.getWorkflowTaskClient().queryTaskDetail(taskId);    //历史审批信息
             String taskHistoryDetailVoName = taskHistoryDetailVo.getName();
             String taskCode = taskHistoryDetailVo.getTaskCode();
 
             String approvalInfoTaskId = approvalInfoDTO.getTaskId();
             String approvalInfoId = approvalInfoDTO.getId();
             String approveNo = approvalInfoDTO.getApproveNo();
-            String businessCode = approvalInfoDTO.getBusinessCode();
+            String businessCode = approvalInfoDTO.getBusinessCode();    //流程编号
             String applicantIdcard = approvalInfoDTO.getApplicantIdcard();
 
             //判断操作类型是否支持
-
+            //如果是  回退  或者 撤回,需要先看下  当前审批流程实例 是否支持
             if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.RECALL)
                     || approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.BACK)) {
                 boolean enableOperate = isEnableOperateRecallBack(operateReqDTO, approvalInfoTaskId, taskCode);
@@ -629,12 +629,29 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
                 }
             }
 
+            //TODO 增加 挂起(Suspend),激活(Activate),终止(Redo)  哪种情况的支持操作
+            //TODO add wanghao
+            if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.SUSPEND)
+                    || approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.ACTIVATE)
+                    || approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.REDO) ) {
+                boolean enableOperate = isEnableOperateSuspendActivateRedo(operateReqDTO, approvalInfoTaskId, taskCode);
+                if (!enableOperate) {
+                    return ResponseUtil.dtoFail("该节点不支持此项操作");
+                }
+                if (StringUtils.isNotEmpty(approvalInfoTaskId)) {
+                    taskId = approvalInfoTaskId;
+                }
+            }
+
+
             operateRespVO = dcucAuthBusiness.checkHitRedList(applicantIdcard, flowTypeEnum, resourceInfoVo);
             String redListTip = operateRespVO.getRedListTip();
             Boolean hitRedList = operateRespVO.getHitRedList();
 
             // 判断是否红名单审批
             boolean alreadyRedListApproveBoolean = EnumUtils.enumOf(BooleanEnum.class, alreadyRedListApprove).booleanValue;
+
+            //开始执行操作内容--同意
             if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.COMPLETE_AGREE)) {
                 // 需要检查红名单且还未进行红名单审批
                 if (needCheckRedList && (!alreadyRedListApproveBoolean)) {
@@ -654,7 +671,7 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
 
             //构建工作流请求体
             this.buildTaskRequest(taskRequest, approvalInfoDTO, taskRequestUserInfoDTO, activitiHolderList, null, operateRespVO.getHitRedList());
-            //节点提交
+            //节点构建
             BaseOperateReqDTO baseOperateReqDTO = BaseOperateReqDTO.builder()
                     .operateIdcard(ProofsUtil.getIdcard())
                     .taskId(taskId)
@@ -668,7 +685,9 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
                     .hitRedList(operateRespVO.getHitRedList())
                     .build();
 
-            processInstanceVO = baseApproveOperate(baseOperateReqDTO);
+            //节点信息提交
+            processInstanceVO = baseApproveOperate(baseOperateReqDTO);  //执行审批操作           //TODO 主要改这里
+
             List<TaskHistoryDetailVo> afterTaskRunDetailVos = processInstanceVO.getTaskRunDetailVos();
 
             if (CollectionUtils.isNotEmpty(afterTaskRunDetailVos)) {
@@ -686,10 +705,11 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
             //生成待办&已办
             logger.info("=====节点提交后开始生成待办和已办=====");
 
+            //删除代办---新增已办,  用的两张表记录的,不是状态位?
             approveBusiness.afterTaskCommitTask(taskId, approveWorkFlowOperationEnum, taskRequestUserInfoDTO.getIdCard(), taskRequestUserInfoDTO.getUserName(), afterTaskRunDetailVos);
 
             logger.info("====是否发送消息标志位:{}====", sendMessageFlag);
-            if (sendMessageFlag) {
+            if (sendMessageFlag) {      //往kafka 推送消息  给下一步审批人?
                 ApproveMessage approveMessage = taskRequest.getApproveMessage();
                 String message = approveMessage.getMessage();
                 //构建消息体并发送
@@ -707,6 +727,8 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
                 }
                 approveRecordInfo.setFinalApprovalResult(approvalInfoDTO.getApproveResult());
             }
+
+            //更新任务信息
             //构建任务id、任务标识码、任务名称字段,多个均以,相隔
             approveBusiness.buildTaskInfoByProcessInstanceId(approvalInfoDTO, afterTaskRunDetailVos);
             logger.info("====当前任务详情:{}====", JSONObject.toJSON(afterTaskRunDetailVos));
@@ -786,7 +808,7 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
 
         logger.info("=====approveInfo->workflowClientFactory taskRequest:{}", JsonUtils.toJSONString(taskRequest));
 
-        switch (approveWorkFlowOperationEnum) {
+        switch (approveWorkFlowOperationEnum) {     // TODO 增加调用  挂起等判断
             case COMPLETE_AGREE:
                 vo = workflowClientFactory.getWorkflowTaskClient().commitTask(taskId, taskRequest, WorkFlowOprationEnum.COMPLETE_AGREE, operateIdcard);
                 //保存任务指派人记录信息
@@ -803,10 +825,23 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
             case RECALL:
                 vo = workflowClientFactory.getWorkflowTaskClient().recallTask(taskId, taskRequest, operateIdcard);
                 break;
+
+            //TODO add wanghao
+            case SUSPEND:
+                vo = workflowClientFactory.getWorkflowTaskClient().handleTaskForSuspend(taskId, operateIdcard);
+                break;
+            case ACTIVATE:
+                vo = workflowClientFactory.getWorkflowTaskClient().handleTaskForActivate(taskId, operateIdcard);
+                break;
+            case REDO:
+                vo = workflowClientFactory.getWorkflowTaskClient().handleTaskForRedo(taskId, operateIdcard);
+                break;
+
             default:
                 break;
         }
         //构建审批记录表
+        System.err.println(JSONObject.toJSONString(vo));
         buildApproveCirculationInfoAndSave(approveRecordId, vo, approveWorkFlowOperationEnum.getValue(), taskRequestUserInfoDTO, taskRequest.getApproveMessage().getMessage(), approveNo, processNo);
         return vo;
     }
@@ -823,6 +858,7 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
      * @param processNo              流程编号
      */
     private void buildApproveCirculationInfoAndSave(String approveRecordId, ProcessInstanceVO vo, String operateType, TaskRequestUserInfoDTO taskRequestUserInfoDTO, String msg, String approveNo, String processNo) {
+
         ApproveCirculationInfo approveCirculationInfo = new ApproveCirculationInfo();
         approveCirculationInfo.setApproveRecordId(approveRecordId);
         approveCirculationInfo.setApproveNo(approveNo);
@@ -837,7 +873,14 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
         approveCirculationInfo.setOperateUserOrg(taskRequestUserInfoDTO.getOrgName());
         approveCirculationInfo.setOperateUserOrgId(taskRequestUserInfoDTO.getOrgCode());
         approveCirculationInfo.setApproveOpinion(msg);
-        approveCirculationInfo.setOperateTimeConsuming(String.valueOf(DateUtil.between(vo.getTaskHistoryDetailVo().getEndTime(), vo.getTaskHistoryDetailVo().getStartTime(), DateUnit.SECOND)));
+
+        //TODO add wanghao  解决 挂起 无endtime 问题
+        Date tmpDate = new Date();
+        if(vo.getTaskHistoryDetailVo().getEndTime() != null){
+            tmpDate =  vo.getTaskHistoryDetailVo().getEndTime();
+        }
+
+        approveCirculationInfo.setOperateTimeConsuming(String.valueOf(DateUtil.between(tmpDate, vo.getTaskHistoryDetailVo().getStartTime(), DateUnit.SECOND)));
         //TODO 电子签名内容待定,先设置个null
         approveCirculationInfo.setElectronicSignature(null);
         approveCirculationInfo.setIsDeleted(BooleanEnum.FALSE.getValue());
@@ -1218,4 +1261,40 @@ public class ApproveCommonBusinessImpl implements IApproveCommonBusiness {
     }
 
 
+
+
+    //TODO 增加 挂起(Suspend),激活(Activate),终止(Redo)  哪种情况的支持操作
+    //TODO add wanghao
+    /**
+     * 是否支持挂起、激活、终止操作
+     *
+     * @param operateReqDTO      请求
+     * @param approvalInfoTaskId 当前任务ID
+     * @param taskCode           任务代码
+     * @return 是否支持
+     */
+    protected boolean isEnableOperateSuspendActivateRedo(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 = false;
+        if (approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.SUSPEND)) {
+            //查询当前任务是否支持挂起操作(工作流节点是否有配置 挂起 操作) 以及业务逻辑是否支持
+            isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_SUSPEND_COMMIT);
+        } else if(approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.ACTIVATE)){
+            //查询当前任务是否支持挂起操作(工作流节点是否有配置 激活 操作) 以及业务逻辑是否支持
+            isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_RECOVER);
+        } else if(approveWorkFlowOperationEnum.equals(ApproveWorkFlowOperationEnum.REDO)){
+            //查询当前任务是否支持挂起操作(工作流节点是否有配置 终止 操作) 以及业务逻辑是否支持
+            isEnable = workFlowBusiness.checkOperateOptionOfCurrentStep(taskId, processInstanceId, taskCode, OperateOptionEnum._BTN_REDO_COMMIT);
+        }
+
+        logger.info("=====节点的{}操作权限判断结果为:{}======", approveWorkFlowOperationEnum, isEnable);
+        return isEnable && !approvalInfoTaskId.equalsIgnoreCase(ApproveConstants.END_STR);
+    }
 }

+ 96 - 2
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/business/impl/ApproveLogBusinessImpl.java

@@ -187,6 +187,15 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
                 //审批操作日志
                 buildOperateLogAndSend(logDto, OperateDisposeTypeEnum.COMPLETE_AGREE, processInstanceInfoDTO, flowFinish);
                 break;
+
+            //TODO add wanghao 新增对接bu日志处理    都是作为   审批请求日志
+            case SUSPEND:
+            case ACTIVATE:
+            case REDO:
+                buildRequestLog(workFlowOperationEnum, logDto, flowNodeCode, flowNodeName, taskKey, flowKey, processInstanceId, "22");
+                break;
+            //TODO add wanghao 新增对接bu日志处理   end
+
             case RECALL:
                 //审批请求日志
                 buildRequestLog(RequestDisposeTypeEnum.RECALL, logDto, flowNodeCode, flowNodeName, taskKey, flowKey, processInstanceId, "22");
@@ -258,8 +267,12 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         }else if(RequestDisposeTypeEnum.RECALL.equals(disposeTypeEnum)) {
         	logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.RECALL.getValue());
         }
-		
-        
+
+
+        System.err.println("========原有recall 撤回--bu日志requestLog Content:"+JSON.toJSONString(requestLog));
+        System.err.println("========原有recall 撤回--bu日志logInfoMetaDTO :"+JSON.toJSONString(logInfoMetaDTO));
+
+
         sendInfo(JSON.toJSONString(requestLog), "审批请求日志", logInfoMetaDTO);
     }
 
@@ -887,4 +900,85 @@ public class ApproveLogBusinessImpl implements IApproveLogBusiness {
         logDto.setRedListOperateRespVO(operateRespVO);
         return logDto;
     }
+
+
+
+    // TODO add wanghao  对接bu日志
+    /**
+     * 构建审批请求日志对象
+     *
+     * @param workFlowOperationEnum  处理类型
+     * @param logDto       日志Dto
+     * @param flowNodeCode 流程节点代码
+     * @param flowNodeName 流程节点名称
+     * @param taskKey      任务key
+     * @param flowKey      流程key
+     */
+    private void buildRequestLog(ApproveWorkFlowOperationEnum  workFlowOperationEnum, LogDto logDto, String flowNodeCode, String flowNodeName,
+                                 String taskKey, String flowKey, String processInstanceId, String businessCode) {
+
+        ApprovalInfoDTO approvalInfoDTO = logDto.getApprovalInfoDTO();
+        RequestLog requestLog = new RequestLog();
+        requestLog.setIdcard(approvalInfoDTO.getApplicantIdcard());
+        requestLog.setOrgName(approvalInfoDTO.getApplicantOrgName());
+        requestLog.setOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        requestLog.setBusinessCode(approvalInfoDTO.getBusinessCode());
+        requestLog.setTitle(approvalInfoDTO.getProcessTitle());
+
+        requestLog.setDisposeType(workFlowOperationEnum.getValue());        //  字典包,没有我们新 审批动作???,直接存其他字符?  bu标有标准吗   日志内容里面的 处理类型
+
+        requestLog.setResult(logDto.getResult());
+        requestLog.setFailMsg(logDto.getFailMsg());
+        requestLog.setCreateIp(logDto.getCreateIp());
+        //操作内容策划不知道要存什么,暂时放空
+//        requestLog.setOperateContent(JSON.toJSONString(logDto.getApprovalInfo()));
+        requestLog.setCreateUser(logDto.getCreateUser());
+        requestLog.setCreateUserName(logDto.getCreateUserName());
+        Date date = new Date();
+        requestLog.setCreateTime(date);
+        requestLog.setFlowNodeCode(flowNodeCode);
+        requestLog.setFlowNodeName(flowNodeName);
+        requestLog.setApproveRecordId(approvalInfoDTO.getId());
+        requestLog.setProcessInstanceId(processInstanceId);
+        requestLog.setApproveNo(approvalInfoDTO.getApproveNo());
+        //发送审批请求日志到消息中心
+        logger.info("=====发送审批申请请求日志-发起消息,消息体为:{}====", JSON.toJSONString(requestLog));
+        LogInfoMetaDTO logInfoMetaDTO = new LogInfoMetaDTO();
+        logInfoMetaDTO.setLogType(LogTypeEnum.REQUEST_LOG.getValue());
+        logInfoMetaDTO.setTaskKey(taskKey);
+        logInfoMetaDTO.setFlowKey(flowKey);
+        logInfoMetaDTO.setProcessInstanceId(processInstanceId);
+        logInfoMetaDTO.setTerminalIp(logDto.getCreateIp());
+        // 请求发起
+        logInfoMetaDTO.setBusinessType(businessCode);
+
+
+        // 2024-8-21 对接BU新规范
+        logInfoMetaDTO.setTaskId(approvalInfoDTO.getTaskId());
+        logInfoMetaDTO.setTaskName(approvalInfoDTO.getTaskName());
+        logInfoMetaDTO.setAppName(approvalInfoDTO.getAppName());
+        logInfoMetaDTO.setOperatorCertNo(approvalInfoDTO.getApplicantIdcard());
+        logInfoMetaDTO.setOperatorName(approvalInfoDTO.getApplicantName());
+        logInfoMetaDTO.setOperatorOrgCode(approvalInfoDTO.getApplicantOrgCode());
+        logInfoMetaDTO.setOperatorOrgName(approvalInfoDTO.getApplicantOrgName());
+        logInfoMetaDTO.setOperateTime(DateUtil.format(date, "yyyy-MM-dd HH:mm:ss"));
+
+
+        // 缺少 bu标 日志元数据  字典编码 QmApproveTypeEnumV2
+        if (ApproveWorkFlowOperationEnum.SUSPEND.equals(workFlowOperationEnum)) {
+//            logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.START.getValue());
+            logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.SUSPEND.getValue());
+        }else if(ApproveWorkFlowOperationEnum.ACTIVATE.equals(workFlowOperationEnum)) {
+            logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.ACTIVATE.getValue());
+        }else if(ApproveWorkFlowOperationEnum.REDO.equals(workFlowOperationEnum)){
+            logInfoMetaDTO.setOperateType(QmApproveTypeEnumV2.REDO.getValue());
+        }
+
+        System.err.println("========新增挂起、激活、终止--bu日志requestLog Content:"+JSON.toJSONString(requestLog));
+        System.err.println("========新增挂起、激活、终止--bu日志logInfoMetaDTO :"+JSON.toJSONString(logInfoMetaDTO));
+
+        sendInfo(JSON.toJSONString(requestLog), "审批请求日志", logInfoMetaDTO);
+    }
+
+
 }

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

@@ -216,6 +216,9 @@ public class WorkFlowBusinessImpl implements IWorkFlowBusiness {
         taskOperateRespVO.setShowBack(showBack);
         taskOperateRespVO.setShowEdit(showEdit);
         taskOperateRespVO.setShowRecall(showRecall);
+
+
+        System.err.println(JSONObject.toJSONString(taskOperateRespVO));
         return taskOperateRespVO;
     }
 
@@ -233,7 +236,7 @@ public class WorkFlowBusinessImpl implements IWorkFlowBusiness {
         List<TaskDefinitionVo> taskDefinitionVoList = new ArrayList<>();
         if (outgoingVo != null) {
             taskDefinitionVoList = outgoingVo.getTaskDefinitionVoList();
-            if (CollUtil.isNotEmpty(taskDefinitionKeyList)) {
+            if (CollUtil.isNotEmpty(taskDefinitionVoList)) {    //TODO add  wanghao
                 for (TaskDefinitionVo taskDefinitionVo : taskDefinitionVoList) {
                     if (ObjectUtil.isNotNull(taskDefinitionVo)) {
                         taskDefinitionKeyList.add(taskDefinitionVo.getTaskDefinitionKey());

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

@@ -548,4 +548,163 @@ public class ApiV2ApproveFacade implements IApiV2ApproveFacade {
 
         return approveService.approveOperate(operateReqDTO);
     }
+
+
+    //TODO add wanghao   挂起 suspend
+    @Override
+    public ResponseStatus suspendApprove(String approveNo) {
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
+        if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
+            return ResponseStatus.fail("请传入凭据");
+        }
+        ApproveRecordInfo approveRecordInfo = approveRecordService.selectByApproveNo(approveNo);
+
+        if (approveRecordInfo == null) {
+            return ResponseStatus.fail("审批单号不存在");
+        }
+
+        String applicantIdcard = approveRecordInfo.getApplicantIdcard();
+        if (!idcard.equals(applicantIdcard)) {
+            return ResponseStatus.fail("非本人申请审批单无法操作");
+        }
+
+        String recordInfoAppCode = approveRecordInfo.getAppCode();
+        if (!appCode.equals(recordInfoAppCode)) {
+            return ResponseStatus.fail("非本应用申请审批单无法操作");
+        }
+
+        String taskId = approveRecordInfo.getTaskId();
+        String processInstanceId = approveRecordInfo.getProcessInstanceId();
+
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = new TaskRequestUserInfoDTO();
+        taskRequestUserInfoDTO.setIdCard(idcard);
+
+        TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
+
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(taskId)
+                .processInstanceId(processInstanceId)
+                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.SUSPEND)
+                .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());
+        }
+        return ResponseStatus.success();
+    }
+
+
+    //TODO add wanghao   终止 redo
+    @Override
+    public ResponseStatus redoApprove(String approveNo) {
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
+        if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
+            return ResponseStatus.fail("请传入凭据");
+        }
+        ApproveRecordInfo approveRecordInfo = approveRecordService.selectByApproveNo(approveNo);
+
+        if (approveRecordInfo == null) {
+            return ResponseStatus.fail("审批单号不存在");
+        }
+
+        String applicantIdcard = approveRecordInfo.getApplicantIdcard();
+        if (!idcard.equals(applicantIdcard)) {
+            return ResponseStatus.fail("非本人申请审批单无法操作");
+        }
+
+        String recordInfoAppCode = approveRecordInfo.getAppCode();
+        if (!appCode.equals(recordInfoAppCode)) {
+            return ResponseStatus.fail("非本应用申请审批单无法操作");
+        }
+
+        String taskId = approveRecordInfo.getTaskId();
+        String processInstanceId = approveRecordInfo.getProcessInstanceId();
+
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = new TaskRequestUserInfoDTO();
+        taskRequestUserInfoDTO.setIdCard(idcard);
+
+        TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
+
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(taskId)
+                .processInstanceId(processInstanceId)
+                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.REDO)
+                .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());
+        }
+        return ResponseStatus.success();
+    }
+
+
+    //TODO add wanghao   激活 activate
+    @Override
+    public ResponseStatus activateApprove(String approveNo) {
+
+        BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
+        String idcard = currentUser.getIdcard();
+        String appCode = SecurityUserUtil.getSecurityAppCode();
+        if (StrUtil.isBlank(idcard) || StrUtil.isBlank(appCode)) {
+            return ResponseStatus.fail("请传入凭据");
+        }
+        ApproveRecordInfo approveRecordInfo = approveRecordService.selectByApproveNo(approveNo);
+
+        if (approveRecordInfo == null) {
+            return ResponseStatus.fail("审批单号不存在");
+        }
+
+        String applicantIdcard = approveRecordInfo.getApplicantIdcard();
+        if (!idcard.equals(applicantIdcard)) {
+            return ResponseStatus.fail("非本人申请审批单无法操作");
+        }
+
+        String recordInfoAppCode = approveRecordInfo.getAppCode();
+        if (!appCode.equals(recordInfoAppCode)) {
+            return ResponseStatus.fail("非本应用申请审批单无法操作");
+        }
+
+        String taskId = approveRecordInfo.getTaskId();
+        String processInstanceId = approveRecordInfo.getProcessInstanceId();
+
+        TaskRequestUserInfoDTO taskRequestUserInfoDTO = new TaskRequestUserInfoDTO();
+        taskRequestUserInfoDTO.setIdCard(idcard);
+
+        TaskRequest<ApproveTaskRequestVo> taskRequest = new TaskRequest<>();
+
+
+        OperateReqDTO operateReqDTO = OperateReqDTO.builder()
+                .taskId(taskId)
+                .processInstanceId(processInstanceId)
+                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.ACTIVATE)
+                .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());
+        }
+        return ResponseStatus.success();
+    }
 }

+ 49 - 11
approve-core-service/src/main/java/com/dragonsoft/dcuc/approve/facade/api/v3/ApiV3ApproveFacade.java

@@ -1,6 +1,7 @@
 package com.dragonsoft.dcuc.approve.facade.api.v3;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.common.utils.LangUtil;
 import com.dragoninfo.dcuc.common.utils.ResponseUtil;
 import com.dragoninfo.dcuc.duceap.enums.ManageDisposeTypeEnum;
@@ -202,8 +203,11 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 
     @Override
     public ZeroTrustMessageRespVO manage(ZeroTrustApproveManagerReqV3VO zeroTrustApproveManagerReqV3VO) {
+        System.err.println(JSONObject.toJSONString(zeroTrustApproveManagerReqV3VO));
+
+
         String appTokenId = zeroTrustApproveManagerReqV3VO.getAppTokenId();
-        String processInstId = zeroTrustApproveManagerReqV3VO.getProcessInstId();
+        String processInstId = zeroTrustApproveManagerReqV3VO.getProcessInstId();   //流程实例Id
         String actionType = zeroTrustApproveManagerReqV3VO.getActionType();
 
         if (LangUtil.isAnyBlank(appTokenId, processInstId, actionType)) {
@@ -218,7 +222,11 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
 //        if (ObjectUtil.isNull(approveWorkFlowOperationEnum)) {
 //            return ZeroTrustResultDataVO.operateFailMessage("暂不支持该操作");
 //        }
-        
+
+
+        //TODO wanghao  注释掉以前V3 假的 挂起 激活 终止
+        /*
+
         System.out.println("======================================20240909=========================");
         if(statusMap.get(processInstId) == null) {
         	statusMap.put(processInstId, actionType);
@@ -228,7 +236,7 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         	
         	if("01".equals(actionType)) {//
         		
-        		if("01".equals(oldStatus)) {//chexiao
+        		if("01".equals(oldStatus)) {//撤销
         			return ZeroTrustResultDataVO.operateFailMessage("已经是撤销状态无法操作");
             	}else if("02".equals(oldStatus)){//挂起
                 	statusMap.put(processInstId, actionType);
@@ -242,7 +250,7 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         		
         		
         		
-        	}else if("02".equals(actionType)) {
+        	}else if("02".equals(actionType)) {//挂起
         		if("01".equals(oldStatus)) {//chexiao
         			return ZeroTrustResultDataVO.operateFailMessage("撤销状态下无法执行挂起操作");
             	}else if("02".equals(oldStatus)){//挂起
@@ -253,7 +261,7 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             		statusMap.put(processInstId, actionType);
             		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
             	}
-        	}else if("03".equals(actionType)) {
+        	}else if("03".equals(actionType)) {//终止
         		if("01".equals(oldStatus)) {//chexiao
         			statusMap.put(processInstId, actionType);
             		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
@@ -266,7 +274,7 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
             		statusMap.put(processInstId, actionType);
             		return ZeroTrustMessageRespVO.messageEnumMessage(ZeroTrustBusinessRespEnum.SUCCESS);
             	}
-        	}else if("04".equals(actionType)) {
+        	}else if("04".equals(actionType)) {//激活
         		if("01".equals(oldStatus)) {//chexiao
         			return ZeroTrustResultDataVO.operateFailMessage("撤销状态下无法执行激活操作");
             	}else if("02".equals(oldStatus)){//挂起
@@ -284,16 +292,33 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         }
         
         System.out.println("======================================20240909=========================");
-        //  查询应用令牌信息,获取人员信息
+
+        */
+
+        //TODO add  wanghao
+        ZeroTrustApproveManageEnum zeroTrustApproveManageEnum = EnumUtils.enumOf(ZeroTrustApproveManageEnum.class, actionType);
+        if (ObjectUtil.isNull(zeroTrustApproveManageEnum)) {
+            return ZeroTrustResultDataVO.operateFailMessage("actionType,参数不正确");
+        }
+        ApproveWorkFlowOperationEnum approveWorkFlowOperationEnum = zeroTrustApproveManageEnum.toApproveWorkFlowOperationEnum();
+        if (ObjectUtil.isNull(approveWorkFlowOperationEnum)) {
+            return ZeroTrustResultDataVO.operateFailMessage("暂不支持该操作");
+        }
+
+
+        //  查询应用令牌信息,获取人员信息------------自测 V3api,需注释代码,测完 打开   wanghao  start
+
         ZeroTrustAppTokenInfoRespVO appTokenInfo = bimBusiness.getAppTokenInfo(appTokenId);
         if (ObjectUtil.isNull(appTokenInfo)) {
             return ZeroTrustResultDataVO.resultEnumMessage(ZeroTrustBusinessRespEnum.TOKEN_FAIL);
         }
         ZeroTrustAppItemUserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
+
+
+
         String appCode = appTokenInfo.getAppId();
         String applicantIdcard = userToken.getPid();
 
-
         ResponseDTO<SecurityUser> securityUserResp = securityUserBusiness.getSecurityUser(applicantIdcard, appCode);
         if (ResponseUtil.isFail(securityUserResp)) {
             log.error("令牌信息异常:{}", securityUserResp.getMessage());
@@ -303,10 +328,21 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         SecurityUser securityUser = ResponseUtil.getResult(securityUserResp);
         securityUserBusiness.setUserExtInfo(securityUser, appTokenInfo);
         UserContextUtils.setCurrentUser(securityUser);
+        String idcard = userToken.getPid();
 
+        // 以上都是用户 令牌--用户信息   end
+        //  查询应用令牌信息,获取人员信息-------------自测 V3api,需注释代码,测完 打开 wanghao  end
 
-        String idcard = userToken.getPid();
-        ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstId);
+
+
+
+        //TODO add wanghao  自测 v3api添加代码,  使用测试用户,测完注释掉
+//        SecurityUser securityUser = UserContextUtils.getCurrentUser();
+//        String idcard = securityUser.getIdcard();
+
+
+
+        ApproveRecordInfo approveRecordInfo = approveRecordService.findByProcessInstanceId(processInstId);      //根据实例id、应用代码 获取审批信息   流程实例Id
         if (ObjectUtil.isNull(approveRecordInfo)) {
             return ZeroTrustResultDataVO.operateFailMessage("流程实例不存在");
         }
@@ -320,13 +356,15 @@ public class ApiV3ApproveFacade implements IApiV3ApproveFacade {
         OperateReqDTO operateReqDTO = OperateReqDTO.builder()
                 .taskId(currentFlowTaskId)
                 .processInstanceId(processInstId)
-                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.RECALL)
+//                .approveWorkFlowOperationEnum(ApproveWorkFlowOperationEnum.RECALL)
+                .approveWorkFlowOperationEnum(approveWorkFlowOperationEnum)      //TODO add wanghao   改为实际的操作动作
                 .taskRequest(taskRequest)
                 .taskRequestUserInfoDTO(taskRequestUserInfoDTO)
                 .activitiHolderList(Collections.emptyList())
                 .needCheckRedList(false)
                 .build();
 
+
         ResponseDTO<OperateRespVO> responseDTO = approveService.approveOperate(operateReqDTO);
         if (ResponseUtil.isFail(responseDTO)) {
             return ZeroTrustResultDataVO.operateFailMessage(responseDTO.getMessage());