| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- package jnpf.flowable.util;
- import cn.hutool.core.util.ObjectUtil;
- import com.baomidou.dynamic.datasource.annotation.DSTransactional;
- import jnpf.base.ActionResult;
- import jnpf.constant.MsgCode;
- import jnpf.exception.WorkFlowException;
- import jnpf.flowable.entity.*;
- import jnpf.flowable.enums.EventEnum;
- import jnpf.flowable.enums.NodeStateEnum;
- import jnpf.flowable.enums.RecordEnum;
- import jnpf.flowable.model.flowable.CompleteFo;
- import jnpf.flowable.model.flowable.FlowAbleUrl;
- import jnpf.flowable.model.message.FlowMsgModel;
- import jnpf.flowable.model.record.NodeRecordModel;
- import jnpf.flowable.model.task.FlowMethod;
- import jnpf.flowable.model.task.FlowModel;
- import jnpf.flowable.model.templatenode.nodejson.NodeModel;
- import jnpf.flowable.model.templatenode.nodejson.TemplateJsonModel;
- import jnpf.flowable.model.util.FlowContextHolder;
- import jnpf.flowable.model.util.FlowNature;
- import jnpf.flowable.service.*;
- import jnpf.model.visualJson.FieLdsModel;
- import jnpf.util.JsonUtil;
- import jnpf.util.StringUtil;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.*;
- /**
- * 类的描述
- *
- * @author JNPF@YinMai Info. Co., Ltd
- * @version 5.0.x
- * @since 2025/1/9 14:19
- */
- @Component
- public class OutsideUtil {
- @Autowired
- private TaskUtil taskUtil;
- @Autowired
- private ServiceUtil serviceUtil;
- @Autowired
- private OperatorUtil operatorUtil;
- @Autowired
- private FlowAbleUrl flowAbleUrl;
- @Autowired
- private RecordUtil recordUtil;
- @Autowired
- private MsgUtil msgUtil;
- @Autowired
- private TaskLineService taskLineService;
- @Autowired
- private OperatorService operatorService;
- @Autowired
- private ConditionService conditionService;
- @Autowired
- private EventLogService eventLogService;
- @Autowired
- private CandidatesService candidatesService;
- @Autowired
- private NodeRecordService nodeRecordService;
- /**
- * 外部节点重试
- */
- public boolean retry(String id) throws WorkFlowException {
- EventLogEntity entity = eventLogService.getById(id);
- if (entity == null) {
- throw new WorkFlowException(MsgCode.FA001.get());
- }
- String eventId = entity.getId();
- String taskId = entity.getTaskId();
- FlowModel flowModel = new FlowModel();
- taskUtil.setFlowModel(taskId, flowModel);
- String upNodeCode = entity.getUpNode();
- String nodeCode = entity.getNodeCode();
- String interfaceId = entity.getInterfaceId();
- Map<String, NodeModel> nodes = flowModel.getNodes();
- NodeModel nodeModel = nodes.get(nodeCode);
- if (nodeModel == null) {
- throw new WorkFlowException(MsgCode.WF076.get());
- }
- Map<String, Object> formData = StringUtil.isNotEmpty(entity.getData()) ? JsonUtil.stringToMap(entity.getData()) : new HashMap<>();
- flowModel.setFormData(formData);
- flowModel.setNodeCode(entity.getNodeCode());
- Map<String, List<TemplateJsonModel>> outsideOptions = nodeModel.getOutsideOptions();
- List<TemplateJsonModel> templateJsonModelList = outsideOptions.get(upNodeCode) != null ? outsideOptions.get(upNodeCode) : new ArrayList<>();
- Map<String, String> parameterData = operatorUtil.outsideData(flowModel, templateJsonModelList, new HashMap<>(), entity.getUpNode(), eventId);
- ActionResult result = serviceUtil.infoToId(interfaceId, parameterData);
- boolean retryResult = Objects.equals(200, result.getCode());
- entity.setStatus(retryResult ? FlowNature.Success : FlowNature.Lose);
- entity.setResult(JsonUtil.getObjectToString(result));
- eventLogService.updateById(entity);
- return retryResult;
- }
- /**
- * 外部节点审批
- */
- @DSTransactional
- public FlowModel outsideAudit(FlowModel flowModel, EventLogEntity eventLog) throws Exception {
- if (eventLog == null) {
- throw new WorkFlowException(MsgCode.FA001.get());
- }
- String taskId = eventLog.getTaskId();
- //赋值审批对象
- taskUtil.setFlowModel(taskId, flowModel);
- List<TemplateNodeEntity> nodeEntityList = flowModel.getNodeEntityList();
- TemplateNodeEntity nodeEntity = nodeEntityList.stream()
- .filter(e -> StringUtil.equals(e.getNodeCode(), eventLog.getNodeCode())).findFirst().orElse(null);
- if (nodeEntity == null) {
- throw new WorkFlowException(MsgCode.WF076.get());
- }
- String nodeId = eventLog.getNodeId();
- flowModel.setNodeEntity(nodeEntity);
- TaskEntity taskEntity = flowModel.getTaskEntity();
- taskUtil.isSuspend(taskEntity);
- taskUtil.isCancel(taskEntity);
- String deploymentId = flowModel.getDeploymentId();
- flowModel.setFlowableTaskId(nodeId);
- Map<String, NodeModel> nodes = flowModel.getNodes();
- String nodeCode = nodeEntity.getNodeCode();
- FlowMethod flowMethod = new FlowMethod();
- flowMethod.setType(RecordEnum.audit.getCode());
- flowModel.setEventStatus(EventEnum.Approve.getStatus());
- flowMethod.setTaskEntity(taskEntity);
- flowMethod.setNodeEntity(nodeEntity);
- NodeModel nodeModel = JsonUtil.getJsonToBean(nodeEntity.getNodeJson(), NodeModel.class);
- //接口表单数据
- Map<String, Object> formData = new HashMap<>();
- List<FieLdsModel> formFieldList = nodeModel.getFormFieldList();
- Map<String, Object> dataMap = flowModel.getFormData();
- for (FieLdsModel fieLdsModel : formFieldList) {
- String id = fieLdsModel.getId();
- formData.put(id, dataMap.get(id));
- }
- flowModel.setFormData(formData);
- flowMethod.setNodeModel(nodeModel);
- flowMethod.setFlowableTaskId(nodeId);
- flowMethod.setFormData(formData);
- flowMethod.setSignFor(false);
- flowMethod.setFlowModel(flowModel);
- OperatorEntity operator = JsonUtil.getJsonToBean(eventLog, OperatorEntity.class);
- operator.setHandleId(eventLog.getCreatorUserId());
- Integer handleStatus = FlowNature.AuditCompletion;
- flowMethod.setTaskEntity(taskEntity);
- flowMethod.setNodeEntity(nodeEntity);
- flowMethod.setNodeEntityList(nodeEntityList);
- flowMethod.setDeploymentId(deploymentId);
- flowMethod.setNodes(nodes);
- flowMethod.setNodeCode(nodeCode);
- flowMethod.setHandleStatus(handleStatus);
- flowModel.setEventStatus(EventEnum.Approve.getStatus());
- Map<String, Boolean> resMap = conditionService.handleCondition(flowMethod);
- conditionService.checkCondition(resMap, nodes);
- taskLineService.create(taskEntity.getId(), resMap);
- // 完成
- CompleteFo fo = new CompleteFo();
- fo.setTaskId(operator.getNodeId());
- fo.setVariables(new HashMap<>(resMap));
- flowAbleUrl.complete(fo);
- // 记录
- FlowMethod method = new FlowMethod();
- method.setFlowModel(flowModel);
- method.setType(RecordEnum.audit.getCode());
- method.setOperatorEntity(operator);
- recordUtil.createRecord(method);
- // 节点记录
- NodeRecordModel nodeRecordModel = new NodeRecordModel();
- nodeRecordModel.setTaskId(operator.getTaskId());
- nodeRecordModel.setNodeId(operator.getNodeId());
- nodeRecordModel.setNodeCode(operator.getNodeCode());
- nodeRecordModel.setNodeName(operator.getNodeName());
- nodeRecordModel.setNodeStatus(ObjectUtil.equals(handleStatus, FlowNature.AuditCompletion) ? NodeStateEnum.pass.getCode() : NodeStateEnum.reject.getCode());
- nodeRecordService.create(nodeRecordModel);
- // 生成下一节点
- List<OperatorEntity> entityList = operatorService.handleOperator(flowModel);
- // 删除选择分支
- candidatesService.deleteBranch(operator.getTaskId(), operator.getNodeCode());
- // 判断任务是否结束
- taskUtil.isFinished(flowModel);
- // 消息
- FlowMsgModel flowMsgModel = new FlowMsgModel();
- flowMsgModel.setNodeList(nodeEntityList);
- flowMsgModel.setCirculateList(new ArrayList<>());
- flowMsgModel.setFlowModel(flowModel);
- flowMsgModel.setTaskEntity(taskEntity);
- flowMsgModel.setNodeCode(nodeEntity.getNodeCode());
- flowMsgModel.setOperatorList(entityList);
- if (flowModel.getCopyMsgFlag()) {
- flowMsgModel.setCopy(true);
- }
- if (handleStatus.equals(FlowNature.AuditCompletion)) {
- flowMsgModel.setApprove(true);
- } else {
- flowMsgModel.setReject(true);
- }
- flowMsgModel.setFormData(FlowContextHolder.getAllData());
- msgUtil.message(flowMsgModel);
- // 系统审批
- operatorUtil.systemAudit();
- FlowContextHolder.deleteFormOperator();
- serviceUtil.handleFormData(taskEntity.getFlowId(), true);
- return flowModel;
- }
- }
|