|
@@ -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);
|
|
|
+ }
|
|
|
}
|