Commit cac2304e by “zcwang”

add: 工单转交

parent 07591178
...@@ -11,10 +11,12 @@ import java.io.IOException; ...@@ -11,10 +11,12 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -38,11 +40,11 @@ import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService; ...@@ -38,11 +40,11 @@ import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService; import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService; import com.netease.mail.yanxuan.change.biz.service.change.ChangeTypeService;
import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService; import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants; import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean; import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode; import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCodeEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeResultEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeResultEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum;
...@@ -50,6 +52,7 @@ import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum; ...@@ -50,6 +52,7 @@ import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum; import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum;
import com.netease.mail.yanxuan.change.common.enums.NeedFileEnum; import com.netease.mail.yanxuan.change.common.enums.NeedFileEnum;
import com.netease.mail.yanxuan.change.common.enums.OperateTypeEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils; import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.dal.entity.ChangeConfig; import com.netease.mail.yanxuan.change.dal.entity.ChangeConfig;
import com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord; import com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord;
...@@ -72,15 +75,12 @@ import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowVO; ...@@ -72,15 +75,12 @@ import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowVO;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ItemVO; import com.netease.mail.yanxuan.change.dal.meta.model.vo.ItemVO;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.PageVO; import com.netease.mail.yanxuan.change.dal.meta.model.vo.PageVO;
import com.netease.mail.yanxuan.change.integration.excel.ChangeFlowExcelDTO; import com.netease.mail.yanxuan.change.integration.excel.ChangeFlowExcelDTO;
import com.netease.mail.yanxuan.change.integration.flow.FlowRpcService;
import com.netease.mail.yanxuan.change.integration.todo.TaskCreateDTO; import com.netease.mail.yanxuan.change.integration.todo.TaskCreateDTO;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO; import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.UserReachDTO; import com.netease.yanxuan.flowx.sdk.meta.dto.base.UserReachDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.exec.InterfaceInputDTO; import com.netease.yanxuan.flowx.sdk.meta.dto.exec.InterfaceInputDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.exec.UserBaseContainerDTO; import com.netease.yanxuan.flowx.sdk.meta.dto.exec.UserBaseContainerDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO; import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.NodeSubmitReqDTO;
import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ExportParams;
...@@ -107,7 +107,7 @@ public class ChangeFlowBiz { ...@@ -107,7 +107,7 @@ public class ChangeFlowBiz {
private AppConfig appConfig; private AppConfig appConfig;
@Autowired @Autowired
private FlowRpcService flowRpcService; private FlowService flowService;
@Autowired @Autowired
private ChangeFileService changeFileService; private ChangeFileService changeFileService;
...@@ -151,9 +151,9 @@ public class ChangeFlowBiz { ...@@ -151,9 +151,9 @@ public class ChangeFlowBiz {
FlowCreateReqDTO flowCreateReqDTO = buildFlowCreateReqDTO(ChangeFlowEnum.CHANGE_FLOW_START.getTopoId(), uid, FlowCreateReqDTO flowCreateReqDTO = buildFlowCreateReqDTO(ChangeFlowEnum.CHANGE_FLOW_START.getTopoId(), uid,
JSON.toJSONString(content), FlowxOperationEnum.CREATE.getName()); JSON.toJSONString(content), FlowxOperationEnum.CREATE.getName());
// 创建工单 // 创建工单
String flowId = createFlow(flowCreateReqDTO); String flowId = flowService.createFlow(flowCreateReqDTO);
// 查询工单详情 // 查询工单详情
FlowDataDTO flowDataDTO = flowDetail(flowId); FlowDataDTO flowDataDTO = flowService.flowDetail(flowId);
String nodeId = flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId(); String nodeId = flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId();
// todo: 根据类型查询负责人详情,格式邮箱 // todo: 根据类型查询负责人详情,格式邮箱
String changeCommander = appConfig.getTestEmail(); String changeCommander = appConfig.getTestEmail();
...@@ -176,7 +176,7 @@ public class ChangeFlowBiz { ...@@ -176,7 +176,7 @@ public class ChangeFlowBiz {
// 如果发起人=变更负责人 // 如果发起人=变更负责人
if (changeCommander.equals(uid)) { if (changeCommander.equals(uid)) {
log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid); log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid);
String nextNodeId = submitFlow(flowId, flowDataDTO, uid, String nextNodeId = flowService.submitFlow(flowId, flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true);
if (null == nextNodeId) { if (null == nextNodeId) {
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败"); throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败");
...@@ -258,21 +258,6 @@ public class ChangeFlowBiz { ...@@ -258,21 +258,6 @@ public class ChangeFlowBiz {
} }
} }
public FlowDataDTO flowDetail(String flowId) {
// 查询工单详情,根据详情提交
FlowDataDTO flowDataDTO;
AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId);
if (ResponseCodeEnum.SUCCESS.getCode() == flowDetailResponse.getCode()) {
flowDataDTO = flowDetailResponse.getData();
log.info("[detailFlow] flowDataDTO={}", JSON.toJSONString(flowDataDTO));
} else {
log.error("[detailFlow] get flow detail failed, query={}, errMsg={}", JSON.toJSONString(flowId),
JSON.toJSONString(flowDetailResponse));
throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "查询工单详情错误");
}
return flowDataDTO;
}
private FlowCreateReqDTO buildFlowCreateReqDTO(String topoId, String uid, String content, String operateResult) { private FlowCreateReqDTO buildFlowCreateReqDTO(String topoId, String uid, String content, String operateResult) {
FlowCreateReqDTO flowCreateReqDTO = new FlowCreateReqDTO(); FlowCreateReqDTO flowCreateReqDTO = new FlowCreateReqDTO();
flowCreateReqDTO.setTopoId(topoId); flowCreateReqDTO.setTopoId(topoId);
...@@ -284,53 +269,9 @@ public class ChangeFlowBiz { ...@@ -284,53 +269,9 @@ public class ChangeFlowBiz {
return flowCreateReqDTO; return flowCreateReqDTO;
} }
public String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content, boolean approved) {
NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
nodeSubmitReqDTO.setUid(uid);
nodeSubmitReqDTO.setUserName(uid);
nodeSubmitReqDTO.setTopoId(topoId);
nodeSubmitReqDTO.setContent(content);
nodeSubmitReqDTO.setOperateResult(FlowxOperationEnum.SUBMIT.getName());
nodeSubmitReqDTO.setCreateTime(System.currentTimeMillis());
nodeSubmitReqDTO.setApproved(approved);
nodeSubmitReqDTO.setOccLock(flowDataDTO.getOccLock() + 1);
log.info("[submitFlow] nodeSubmitReqDTO={}", JSON.toJSONString(nodeSubmitReqDTO));
List<String> nextNodeIdList;
// 提交工单
AjaxResponse<List<String>> submitResponse = flowRpcService.submit(CommonConstants.FLOWX_PRODUCT,
nodeSubmitReqDTO);
if (ResponseCodeEnum.SUCCESS.getCode() == submitResponse.getCode()) {
nextNodeIdList = submitResponse.getData();
log.info("[submitFlow] nextNodeIdList={}", JSON.toJSONString(nextNodeIdList));
} else {
log.error("[submitFlow] submit flow failed, query={}, errMsg={}", JSON.toJSONString(nodeSubmitReqDTO),
JSON.toJSONString(submitResponse));
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "提交工单错误");
}
if (CollectionUtils.isEmpty(nextNodeIdList)) {
return ChangeFlowEnum.END.getNodeId();
}
return nextNodeIdList.get(0);
}
private String createFlow(FlowCreateReqDTO flowCreateReqDTO) {
// 先创建工单,创建完成后直接提交
log.info("[createFlow] flowCreateReqDTO={}", flowCreateReqDTO);
AjaxResponse<String> flowCreateResponse = flowRpcService.create(CommonConstants.FLOWX_PRODUCT,
flowCreateReqDTO);
String flowId;
if (ResponseCodeEnum.SUCCESS.getCode() == flowCreateResponse.getCode()) {
flowId = flowCreateResponse.getData();
log.info("[createFlow] flowId ={}", JSON.toJSONString(flowId));
} else {
log.error("[createFlow] create flow failed, query={}, errMsg={}", JSON.toJSONString(flowCreateReqDTO),
JSON.toJSONString(flowCreateResponse));
throw ExceptionFactory.createBiz(ResponseCode.CREATE_FLOW_ERROR, "创建工单错误");
}
return flowId;
}
private ChangeRecord buildChangeRecord(String flowId, String nodeId, ChangeFlowCreateReq changeFlowCreateReq, private ChangeRecord buildChangeRecord(String flowId, String nodeId, ChangeFlowCreateReq changeFlowCreateReq,
String changeCommander, String uid) { String changeCommander, String uid) {
...@@ -376,7 +317,7 @@ public class ChangeFlowBiz { ...@@ -376,7 +317,7 @@ public class ChangeFlowBiz {
// 查询工单有效性 // 查询工单有效性
ChangeRecord changeRecord = this.getFlowInfo(flowId); ChangeRecord changeRecord = this.getFlowInfo(flowId);
// 检查工单节点 // 检查工单节点
this.checkNode(changeRecord.getFlowNode(), changeFlowSubmitReq.getCurrentNodeId()); this.checkNode(changeRecord.getFlowNode(), Collections.singletonList(changeFlowSubmitReq.getCurrentNodeId()));
// todo:检验操作权限 // todo:检验操作权限
String uid = RequestLocalBean.getUid(); String uid = RequestLocalBean.getUid();
String changeCommander = changeRecord.getChangeCommander(); String changeCommander = changeRecord.getChangeCommander();
...@@ -384,7 +325,7 @@ public class ChangeFlowBiz { ...@@ -384,7 +325,7 @@ public class ChangeFlowBiz {
throw ExceptionFactory.createBiz(ResponseCode.NO_AUTH, ResponseCode.NO_AUTH.getMsg()); throw ExceptionFactory.createBiz(ResponseCode.NO_AUTH, ResponseCode.NO_AUTH.getMsg());
}*/ }*/
// 获取工单详情 // 获取工单详情
FlowDataDTO flowDataDTO = this.flowDetail(flowId.toString()); FlowDataDTO flowDataDTO = flowService.flowDetail(flowId.toString());
if (flowDataDTO == null) { if (flowDataDTO == null) {
throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "工单查询错误,不存在"); throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "工单查询错误,不存在");
} }
...@@ -431,7 +372,7 @@ public class ChangeFlowBiz { ...@@ -431,7 +372,7 @@ public class ChangeFlowBiz {
changeRecord.setChangeConfirmResultTime(changeFlowSubmitReq.getChangeConfirmResultTime()); changeRecord.setChangeConfirmResultTime(changeFlowSubmitReq.getChangeConfirmResultTime());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
// 提交工单 // 提交工单
String submitNode = this.submitFlow(flowId.toString(), flowDataDTO, uid, String submitNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true);
// 更新工单数据 // 更新工单数据
changeRecord.setFlowNode(submitNode); changeRecord.setFlowNode(submitNode);
...@@ -478,13 +419,13 @@ public class ChangeFlowBiz { ...@@ -478,13 +419,13 @@ public class ChangeFlowBiz {
return changeExecRecord; return changeExecRecord;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 完成直接完结 // 完成直接完结
String confirmNode = this.submitFlow(flowId.toString(), flowDataDTO, uid, String confirmNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true);
changeRecord.setFlowNode(confirmNode); changeRecord.setFlowNode(confirmNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
changeExecRecordList.forEach(exec->changeFlowExecService.update(exec)); changeExecRecordList.forEach(exec->changeFlowExecService.update(exec));
todoService.finishTodoTask(changeRecord); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
// todo:完结工单,发送邮件 // todo:完结工单,发送邮件
return confirmNode; return confirmNode;
case CANCEL: case CANCEL:
...@@ -492,13 +433,12 @@ public class ChangeFlowBiz { ...@@ -492,13 +433,12 @@ public class ChangeFlowBiz {
String cancelReason = changeFlowSubmitReq.getCancelReason(); String cancelReason = changeFlowSubmitReq.getCancelReason();
Assert.isTrue(StringUtils.isNotBlank(cancelReason), "变更取消原因不可为空"); Assert.isTrue(StringUtils.isNotBlank(cancelReason), "变更取消原因不可为空");
changeRecord.setCancelReason(cancelReason); changeRecord.setCancelReason(cancelReason);
String cancelNode = this.submitFlow(flowId.toString(), flowDataDTO, uid, String cancelNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true);
changeRecord.setFlowNode(cancelNode); changeRecord.setFlowNode(cancelNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
// todo: 完成代办 todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
todoService.finishTodoTask(changeRecord);
// todo:完结工单,发送邮件 // todo:完结工单,发送邮件
return cancelNode; return cancelNode;
case DELAY: case DELAY:
...@@ -546,11 +486,12 @@ public class ChangeFlowBiz { ...@@ -546,11 +486,12 @@ public class ChangeFlowBiz {
return changeRecord; return changeRecord;
} }
private void checkNode(String recordNode, String currentNodeId){ private void checkNode(String recordNode, List<String> checkNode){
if (!recordNode.equals(currentNodeId)) { Optional<String> nodeOptional = checkNode.stream().filter(check -> check.equals(recordNode)).findAny();
if (!nodeOptional.isPresent()) {
throw ExceptionFactory.createBiz(ResponseCode.NODE_ERROR, "工单已流转至其他节点"); throw ExceptionFactory.createBiz(ResponseCode.NODE_ERROR, "工单已流转至其他节点");
} }
}; }
public Boolean cancel(ChangeFlowCancelReq req) { public Boolean cancel(ChangeFlowCancelReq req) {
log.info("[cancel] req:{}", JSON.toJSONString(req)); log.info("[cancel] req:{}", JSON.toJSONString(req));
...@@ -559,7 +500,7 @@ public class ChangeFlowBiz { ...@@ -559,7 +500,7 @@ public class ChangeFlowBiz {
ChangeRecord changeRecord = getFlowInfo(flowId); ChangeRecord changeRecord = getFlowInfo(flowId);
log.info("[cancel] nodeId:{}", changeRecord.getFlowNode()); log.info("[cancel] nodeId:{}", changeRecord.getFlowNode());
// 检查工单节点 // 检查工单节点
this.checkNode(changeRecord.getFlowNode(), ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getNodeId()); this.checkNode(changeRecord.getFlowNode(), Collections.singletonList(ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getNodeId()));
String uid = RequestLocalBean.getUid(); String uid = RequestLocalBean.getUid();
// todo:检查审核人 // todo:检查审核人
String changeCommander = changeRecord.getChangeCommander(); String changeCommander = changeRecord.getChangeCommander();
...@@ -567,7 +508,7 @@ public class ChangeFlowBiz { ...@@ -567,7 +508,7 @@ public class ChangeFlowBiz {
throw ExceptionFactory.createBiz(ResponseCode.NO_AUTH, ResponseCode.NO_AUTH.getMsg()); throw ExceptionFactory.createBiz(ResponseCode.NO_AUTH, ResponseCode.NO_AUTH.getMsg());
}*/ }*/
// 获取工单详情 // 获取工单详情
FlowDataDTO flowDataDTO = this.flowDetail(flowId.toString()); FlowDataDTO flowDataDTO = flowService.flowDetail(flowId.toString());
if (flowDataDTO == null) { if (flowDataDTO == null) {
throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "工单查询错误,不存在"); throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "工单查询错误,不存在");
} }
...@@ -575,7 +516,7 @@ public class ChangeFlowBiz { ...@@ -575,7 +516,7 @@ public class ChangeFlowBiz {
Map<String, Object> content = new HashMap<>(CommonConstants.INIT_HASH_MAP_SIZE); Map<String, Object> content = new HashMap<>(CommonConstants.INIT_HASH_MAP_SIZE);
content.put("updateTime", System.currentTimeMillis()); content.put("updateTime", System.currentTimeMillis());
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.REFUSE.getValue()); content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.REFUSE.getValue());
String nextNodeId = this.submitFlow(String.valueOf(flowId), flowDataDTO, uid, String nextNodeId = flowService.submitFlow(String.valueOf(flowId), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), false); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), false);
log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId); log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId);
// 填充更新数据 // 填充更新数据
...@@ -583,8 +524,7 @@ public class ChangeFlowBiz { ...@@ -583,8 +524,7 @@ public class ChangeFlowBiz {
changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus()); changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus());
changeRecord.setCancelReason(req.getCancelReason()); changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
// todo: 完成代办 todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
todoService.finishTodoTask(changeRecord);
// todo:取消501节点,取消工单,发送邮件 // todo:取消501节点,取消工单,发送邮件
return changeFlowService.updateRecord(changeRecord); return changeFlowService.updateRecord(changeRecord);
} }
...@@ -639,7 +579,7 @@ public class ChangeFlowBiz { ...@@ -639,7 +579,7 @@ public class ChangeFlowBiz {
changeFlowVO.setChangeState(changeRecord.getState()); changeFlowVO.setChangeState(changeRecord.getState());
changeFlowVO.setChangeCreator(changeRecord.getCreator()); changeFlowVO.setChangeCreator(changeRecord.getCreator());
List<ChangeFlowExecVO> changeFlowExecRecord = changeFlowExecService.getChangeFlowExecRecord(changeRecord.getId()); List<ChangeFlowExecVO> changeFlowExecRecord = changeFlowExecService.getChangeFlowExecRecord(changeRecord.getId());
changeFlowVO.setChangeExecDepartment(changeFlowExecRecord); changeFlowVO.setChangeExecProjectList(changeFlowExecRecord);
changeFlowVO.setCreateTime(changeRecord.getCreateTime()); changeFlowVO.setCreateTime(changeRecord.getCreateTime());
changeFlowVO.setChangeConfirmResultTime(changeRecord.getChangeConfirmResultTime()); changeFlowVO.setChangeConfirmResultTime(changeRecord.getChangeConfirmResultTime());
changeFlowVO.setChangeResult(changeRecord.getChangeResult()); changeFlowVO.setChangeResult(changeRecord.getChangeResult());
...@@ -793,7 +733,20 @@ public class ChangeFlowBiz { ...@@ -793,7 +733,20 @@ public class ChangeFlowBiz {
} }
public void deliver(@Valid ChangeFlowDeliverReq req) { public void deliver(@Valid ChangeFlowDeliverReq req) {
log.info("[deliver] req:{}", JSON.toJSONString(req));
// todo:501节点,转交工单,发送邮箱 Long flowId = req.getFlowId();
// 查询工单有效性
ChangeRecord changeRecord = getFlowInfo(flowId);
log.info("[deliver] nodeId:{}", changeRecord.getFlowNode());
// 检查工单节点
List<String> nodeList = Arrays.asList(ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getNodeId(),
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId());
this.checkNode(changeRecord.getFlowNode(), nodeList);
// 待办转交
todoService.progressTodoTask(changeRecord, OperateTypeEnum.DELIVER.getType());
// 更新工单负责人
changeRecord.setChangeCommander(req.getDeliverUser());
changeRecord.setRemark(req.getRemark());
changeFlowService.updateRecord(changeRecord);
} }
} }
/**
* @(#)FlowService.java, 2022/11/29.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.service.rpc;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.bean.ResponseCode;
import com.netease.mail.yanxuan.change.common.bean.ResponseCodeEnum;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum;
import com.netease.mail.yanxuan.change.integration.flow.FlowRpcService;
import com.netease.yanxuan.flowx.sdk.meta.controller.communal.AjaxResponse;
import com.netease.yanxuan.flowx.sdk.meta.dto.base.FlowDataDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.FlowCreateReqDTO;
import com.netease.yanxuan.flowx.sdk.meta.dto.flow.NodeSubmitReqDTO;
import lombok.extern.slf4j.Slf4j;
/**
* @Author zcwang
* @Date 2022/11/29
* 工单流转相关操作
*/
@Slf4j
@Component
public class FlowService {
@Autowired
private FlowRpcService flowRpcService;
/**
* 创建工单
* @param flowCreateReqDTO
* @return
*/
public String createFlow(FlowCreateReqDTO flowCreateReqDTO) {
// 先创建工单,创建完成后直接提交
log.info("[createFlow] flowCreateReqDTO={}", flowCreateReqDTO);
AjaxResponse<String> flowCreateResponse = flowRpcService.create(CommonConstants.FLOWX_PRODUCT,
flowCreateReqDTO);
String flowId;
if (ResponseCodeEnum.SUCCESS.getCode() == flowCreateResponse.getCode()) {
flowId = flowCreateResponse.getData();
log.info("[createFlow] flowId ={}", JSON.toJSONString(flowId));
} else {
log.error("[createFlow] create flow failed, query={}, errMsg={}", JSON.toJSONString(flowCreateReqDTO),
JSON.toJSONString(flowCreateResponse));
throw ExceptionFactory.createBiz(ResponseCode.CREATE_FLOW_ERROR, "创建工单错误");
}
return flowId;
}
/**
* 提交工单
* @param flowId
* @param flowDataDTO
* @param uid
* @param topoId
* @param content
* @param approved
* @return
*/
public String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content, boolean approved) {
NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
nodeSubmitReqDTO.setUid(uid);
nodeSubmitReqDTO.setUserName(uid);
nodeSubmitReqDTO.setTopoId(topoId);
nodeSubmitReqDTO.setContent(content);
nodeSubmitReqDTO.setOperateResult(FlowxOperationEnum.SUBMIT.getName());
nodeSubmitReqDTO.setCreateTime(System.currentTimeMillis());
nodeSubmitReqDTO.setApproved(approved);
nodeSubmitReqDTO.setOccLock(flowDataDTO.getOccLock() + 1);
log.info("[submitFlow] nodeSubmitReqDTO={}", JSON.toJSONString(nodeSubmitReqDTO));
List<String> nextNodeIdList;
// 提交工单
AjaxResponse<List<String>> submitResponse = flowRpcService.submit(CommonConstants.FLOWX_PRODUCT,
nodeSubmitReqDTO);
if (ResponseCodeEnum.SUCCESS.getCode() == submitResponse.getCode()) {
nextNodeIdList = submitResponse.getData();
log.info("[submitFlow] nextNodeIdList={}", JSON.toJSONString(nextNodeIdList));
} else {
log.error("[submitFlow] submit flow failed, query={}, errMsg={}", JSON.toJSONString(nodeSubmitReqDTO),
JSON.toJSONString(submitResponse));
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "提交工单错误");
}
if (CollectionUtils.isEmpty(nextNodeIdList)) {
return ChangeFlowEnum.END.getNodeId();
}
return nextNodeIdList.get(0);
}
/**
* 查询工单详情
* @param flowId
* @return
*/
public FlowDataDTO flowDetail(String flowId) {
// 查询工单详情,根据详情提交
FlowDataDTO flowDataDTO;
AjaxResponse<FlowDataDTO> flowDetailResponse = flowRpcService.getDetail(CommonConstants.FLOWX_PRODUCT, flowId);
if (ResponseCodeEnum.SUCCESS.getCode() == flowDetailResponse.getCode()) {
flowDataDTO = flowDetailResponse.getData();
log.info("[detailFlow] flowDataDTO={}", JSON.toJSONString(flowDataDTO));
} else {
log.error("[detailFlow] get flow detail failed, query={}, errMsg={}", JSON.toJSONString(flowId),
JSON.toJSONString(flowDetailResponse));
throw ExceptionFactory.createBiz(ResponseCode.DETAIL_FLOW_ERROR, "查询工单详情错误");
}
return flowDataDTO;
}
}
\ No newline at end of file
...@@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; ...@@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j;
/** /**
* @Author zcwang * @Author zcwang
* @Date 2022/11/29 * @Date 2022/11/29
* 待办相关操作
*/ */
@Component @Component
@Slf4j @Slf4j
...@@ -78,10 +79,12 @@ public class TodoService { ...@@ -78,10 +79,12 @@ public class TodoService {
} }
/** /**
* 完成代 * 处理待
* @param entity * @param entity
* @param operateType
* @see OperateTypeEnum
*/ */
public void finishTodoTask(ChangeRecord entity) { public void progressTodoTask(ChangeRecord entity, Integer operateType) {
String changeCommander = entity.getChangeCommander(); String changeCommander = entity.getChangeCommander();
String flowId = String.valueOf(entity.getFlowId()); String flowId = String.valueOf(entity.getFlowId());
log.info("[finishSupplierTodoTask] taskFlowId={}, supplierId={}", flowId, changeCommander); log.info("[finishSupplierTodoTask] taskFlowId={}, supplierId={}", flowId, changeCommander);
......
...@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component; ...@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz; import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants; import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
...@@ -44,7 +45,7 @@ public class AutoSubmit extends IJobHandler { ...@@ -44,7 +45,7 @@ public class AutoSubmit extends IJobHandler {
private ChangeFlowService changeFlowService; private ChangeFlowService changeFlowService;
@Autowired @Autowired
private ChangeFlowBiz changeFlowBiz; private FlowService flowService;
@Override @Override
public ReturnT<String> execute(String... strings) throws Exception { public ReturnT<String> execute(String... strings) throws Exception {
...@@ -80,7 +81,7 @@ public class AutoSubmit extends IJobHandler { ...@@ -80,7 +81,7 @@ public class AutoSubmit extends IJobHandler {
// 执行变更节点,提交节点 // 执行变更节点,提交节点
if (ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId().equals(flowNode)) { if (ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId().equals(flowNode)) {
// 获取工单详情 // 获取工单详情
FlowDataDTO flowDataDTO = changeFlowBiz.flowDetail(flowId.toString()); FlowDataDTO flowDataDTO = flowService.flowDetail(flowId.toString());
if (flowDataDTO == null) { if (flowDataDTO == null) {
log.debug("[progressRecord] get flowDataDTO error, flowId{}", flowId); log.debug("[progressRecord] get flowDataDTO error, flowId{}", flowId);
} }
...@@ -89,7 +90,7 @@ public class AutoSubmit extends IJobHandler { ...@@ -89,7 +90,7 @@ public class AutoSubmit extends IJobHandler {
content.put("updateTime", System.currentTimeMillis()); content.put("updateTime", System.currentTimeMillis());
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue()); content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue());
try { try {
String execNode = changeFlowBiz.submitFlow(flowId.toString(), flowDataDTO, uid, String execNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_EXE.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_EXE.getTopoId(), JSON.toJSONString(content), true);
// 更新工单数据 // 更新工单数据
changeRecord.setFlowNode(execNode); changeRecord.setFlowNode(execNode);
......
...@@ -110,7 +110,7 @@ public class ChangeFlowVO { ...@@ -110,7 +110,7 @@ public class ChangeFlowVO {
/** /**
* 变更行动部门 * 变更行动部门
*/ */
private List<ChangeFlowExecVO> changeExecDepartment; private List<ChangeFlowExecVO> changeExecProjectList;
/** /**
* 变更行动部门列表 * 变更行动部门列表
......
...@@ -12,9 +12,9 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -12,9 +12,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService; import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult; import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.enums.OperateTypeEnum;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord; import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -38,10 +38,10 @@ public class TestController { ...@@ -38,10 +38,10 @@ public class TestController {
return AjaxResult.success(); return AjaxResult.success();
} }
@PostMapping("/finishToDo") @PostMapping("/progressTodo")
public AjaxResult<Void> finishTodoTask(ChangeRecord entity) { public AjaxResult<Void> progressTodoTask(ChangeRecord entity, Integer operateType) {
log.info("[createToDoTask] entity:{}", JSON.toJSONString(entity)); log.info("[createToDoTask] entity:{}, operateType:{}", JSON.toJSONString(entity), operateType);
todoService.finishTodoTask(entity); todoService.progressTodoTask(entity, operateType);
return AjaxResult.success(); return AjaxResult.success();
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment