mirror of
https://gitee.com/orangeform/orange-admin.git
synced 2026-01-17 10:36:31 +08:00
commit:升级到vue3,更新最近工作流技术栈,支持sa-token
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>common</artifactId>
|
||||
<groupId>com.orangeforms</groupId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>common-flow-online</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<name>common-flow-online</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.orangeforms</groupId>
|
||||
<artifactId>common-flow</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.orangeforms</groupId>
|
||||
<artifactId>common-online</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.orangeforms.common.flow.online.config;
|
||||
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
|
||||
/**
|
||||
* common-flow-online模块的自动配置引导类。
|
||||
*
|
||||
* @author Jerry
|
||||
* @date 2024-07-02
|
||||
*/
|
||||
@EnableConfigurationProperties({FlowOnlineProperties.class})
|
||||
public class FlowOnlineAutoConfig {
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.orangeforms.common.flow.online.config;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
/**
|
||||
* 在线表单工作流模块的配置对象。
|
||||
*
|
||||
* @author Jerry
|
||||
* @date 2024-07-02
|
||||
*/
|
||||
@Data
|
||||
@ConfigurationProperties(prefix = "common-flow-online")
|
||||
public class FlowOnlineProperties {
|
||||
|
||||
/**
|
||||
* 在线表单的URL前缀。
|
||||
*/
|
||||
private String urlPrefix;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,136 @@
|
||||
package com.orangeforms.common.flow.online.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.orangeforms.common.flow.model.FlowTaskComment;
|
||||
import com.orangeforms.common.flow.model.FlowWorkOrder;
|
||||
import com.orangeforms.common.online.model.OnlineDatasource;
|
||||
import com.orangeforms.common.online.model.OnlineDatasourceRelation;
|
||||
import com.orangeforms.common.online.model.OnlineTable;
|
||||
import org.flowable.task.api.Task;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 流程操作服务接口。
|
||||
*
|
||||
* @author Jerry
|
||||
* @date 2024-07-02
|
||||
*/
|
||||
public interface FlowOnlineOperationService {
|
||||
|
||||
/**
|
||||
* 保存在线表单的数据,同时启动流程。如果当前用户是第一个用户任务的Assignee,
|
||||
* 或者第一个用户任务的Assignee是流程发起人变量,该方法还会自动Take第一个任务。
|
||||
*
|
||||
* @param processDefinitionId 流程定义Id。
|
||||
* @param flowTaskComment 流程审批批注对象。
|
||||
* @param taskVariableData 流程任务的变量数据。
|
||||
* @param table 表对象。
|
||||
* @param data 表数据。
|
||||
*/
|
||||
void saveNewAndStartProcess(
|
||||
String processDefinitionId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable table,
|
||||
JSONObject data);
|
||||
|
||||
/**
|
||||
* 保存在线表单的数据,同时启动流程。如果当前用户是第一个用户任务的Assignee,
|
||||
* 或者第一个用户任务的Assignee是流程发起人变量,该方法还会自动Take第一个任务。
|
||||
*
|
||||
* @param processDefinitionId 流程定义Id。
|
||||
* @param flowTaskComment 流程审批批注对象。
|
||||
* @param taskVariableData 流程任务的变量数据。
|
||||
* @param masterTable 主表对象。
|
||||
* @param masterData 主表数据。
|
||||
* @param slaveDataListMap 关联从表数据Map。
|
||||
*/
|
||||
void saveNewAndStartProcess(
|
||||
String processDefinitionId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable masterTable,
|
||||
JSONObject masterData,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap);
|
||||
|
||||
/**
|
||||
* 保存在线表单的草稿数据,同时启动一个流程实例。
|
||||
*
|
||||
* @param processDefinitionId 流程定义Id。
|
||||
* @param tableId 在线表单主表Id。
|
||||
* @param masterData 主表数据。
|
||||
* @param slaveData 所有关联从表数据。
|
||||
* @return 流程工单对象。
|
||||
*/
|
||||
FlowWorkOrder saveNewDraftAndStartProcess(
|
||||
String processDefinitionId, Long tableId, JSONObject masterData, JSONObject slaveData);
|
||||
|
||||
/**
|
||||
* 保存在线表单的数据,同时Take用户任务。
|
||||
*
|
||||
* @param processInstanceId 流程实例Id。
|
||||
* @param taskId 流程任务Id。
|
||||
* @param flowTaskComment 流程审批批注对象。
|
||||
* @param taskVariableData 流程任务的变量数据。
|
||||
* @param table 表对象。
|
||||
* @param data 表数据。
|
||||
*/
|
||||
void saveNewAndTakeTask(
|
||||
String processInstanceId,
|
||||
String taskId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable table,
|
||||
JSONObject data);
|
||||
|
||||
/**
|
||||
* 保存在线表单的数据,同时Take用户任务。
|
||||
*
|
||||
* @param processInstanceId 流程实例Id。
|
||||
* @param taskId 流程任务Id。
|
||||
* @param flowTaskComment 流程审批批注对象。
|
||||
* @param taskVariableData 流程任务的变量数据。
|
||||
* @param masterTable 主表对象。
|
||||
* @param masterData 主表数据。
|
||||
* @param slaveDataListMap 关联从表数据Map。
|
||||
*/
|
||||
void saveNewAndTakeTask(
|
||||
String processInstanceId,
|
||||
String taskId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable masterTable,
|
||||
JSONObject masterData,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap);
|
||||
|
||||
/**
|
||||
* 保存业务表数据,同时接收流程任务。
|
||||
*
|
||||
* @param task 流程任务。
|
||||
* @param flowTaskComment 流程审批批注对象。
|
||||
* @param taskVariableData 流程任务的变量数据。
|
||||
* @param datasource 主表所在数据源。
|
||||
* @param masterData 主表数据。
|
||||
* @param masterDataId 主表数据主键。
|
||||
* @param slaveDataListMap 从表数据。
|
||||
*/
|
||||
void updateAndTakeTask(
|
||||
Task task,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineDatasource datasource,
|
||||
JSONObject masterData,
|
||||
String masterDataId,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap);
|
||||
|
||||
/**
|
||||
* 获取在线表单工作流Id所关联的权限数据,包括权限字列表和权限资源列表。
|
||||
*
|
||||
* @param onlineFormEntryIds 在线表单工作流Id集合。
|
||||
* @return 参数中在线表单工作流Id集合所关联的权限数据。
|
||||
*/
|
||||
List<Map<String, Object>> calculatePermData(Set<Long> onlineFormEntryIds);
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.orangeforms.common.flow.online.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.orangeforms.common.core.annotation.MyDataSource;
|
||||
import com.orangeforms.common.core.constant.ApplicationConstant;
|
||||
import com.orangeforms.common.flow.base.service.BaseFlowOnlineService;
|
||||
import com.orangeforms.common.flow.model.FlowWorkOrder;
|
||||
import com.orangeforms.common.flow.util.FlowCustomExtFactory;
|
||||
import com.orangeforms.common.online.exception.OnlineRuntimeException;
|
||||
import com.orangeforms.common.online.model.OnlineColumn;
|
||||
import com.orangeforms.common.online.model.OnlineDatasource;
|
||||
import com.orangeforms.common.online.model.OnlineDatasourceRelation;
|
||||
import com.orangeforms.common.online.model.OnlineTable;
|
||||
import com.orangeforms.common.online.model.constant.FieldKind;
|
||||
import com.orangeforms.common.online.service.OnlineDatasourceRelationService;
|
||||
import com.orangeforms.common.online.service.OnlineDatasourceService;
|
||||
import com.orangeforms.common.online.service.OnlineOperationService;
|
||||
import com.orangeforms.common.online.service.OnlineTableService;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 在线表单和流程监听器进行数据对接时的服务实现类。
|
||||
*
|
||||
* @author Jerry
|
||||
* @date 2024-07-02
|
||||
*/
|
||||
@Slf4j
|
||||
@MyDataSource(ApplicationConstant.COMMON_FLOW_AND_ONLINE_DATASOURCE_TYPE)
|
||||
@Service("flowOnlineBusinessService")
|
||||
public class FlowOnlineBusinessServiceImpl implements BaseFlowOnlineService {
|
||||
|
||||
@Autowired
|
||||
private FlowCustomExtFactory flowCustomExtFactory;
|
||||
@Autowired
|
||||
private OnlineTableService onlineTableService;
|
||||
@Autowired
|
||||
private OnlineDatasourceService onlineDatasourceService;
|
||||
@Autowired
|
||||
private OnlineDatasourceRelationService onlineDatasourceRelationService;
|
||||
@Autowired
|
||||
private OnlineOperationService onlineOperationService;
|
||||
|
||||
@PostConstruct
|
||||
public void doRegister() {
|
||||
flowCustomExtFactory.getOnlineBusinessDataExtHelper().setOnlineBusinessService(this);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void updateFlowStatus(FlowWorkOrder workOrder) {
|
||||
OnlineTable onlineTable = onlineTableService.getOnlineTableFromCache(workOrder.getOnlineTableId());
|
||||
if (onlineTable == null) {
|
||||
log.error("OnlineTableId [{}] doesn't exist while calling FlowOnlineBusinessServiceImpl.updateFlowStatus",
|
||||
workOrder.getOnlineTableId());
|
||||
return;
|
||||
}
|
||||
String dataId = workOrder.getBusinessKey();
|
||||
for (OnlineColumn column : onlineTable.getColumnMap().values()) {
|
||||
if (ObjectUtil.equals(column.getFieldKind(), FieldKind.FLOW_FINISHED_STATUS)) {
|
||||
onlineOperationService.updateColumn(onlineTable, dataId, column, workOrder.getFlowStatus());
|
||||
}
|
||||
if (ObjectUtil.equals(column.getFieldKind(), FieldKind.FLOW_APPROVAL_STATUS)) {
|
||||
onlineOperationService.updateColumn(onlineTable, dataId, column, workOrder.getLatestApprovalStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteBusinessData(FlowWorkOrder workOrder) {
|
||||
OnlineTable onlineTable = onlineTableService.getOnlineTableFromCache(workOrder.getOnlineTableId());
|
||||
if (onlineTable == null) {
|
||||
log.error("OnlineTableId [{}] doesn't exist while calling FlowOnlineBusinessServiceImpl.deleteBusinessData",
|
||||
workOrder.getOnlineTableId());
|
||||
return;
|
||||
}
|
||||
OnlineDatasource datasource =
|
||||
onlineDatasourceService.getOnlineDatasourceByMasterTableId(onlineTable.getTableId());
|
||||
List<OnlineDatasourceRelation> relationList =
|
||||
onlineDatasourceRelationService.getOnlineDatasourceRelationListFromCache(CollUtil.newHashSet(datasource.getDatasourceId()));
|
||||
String dataId = workOrder.getBusinessKey();
|
||||
for (OnlineDatasourceRelation relation : relationList) {
|
||||
OnlineTable slaveTable = onlineTableService.getOnlineTableFromCache(relation.getSlaveTableId());
|
||||
if (slaveTable == null) {
|
||||
throw new OnlineRuntimeException("数据验证失败,数据源关联 [" + relation.getRelationName() + "] 的从表Id不存在!");
|
||||
}
|
||||
relation.setSlaveTable(slaveTable);
|
||||
}
|
||||
onlineOperationService.delete(onlineTable, relationList, dataId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,287 @@
|
||||
package com.orangeforms.common.flow.online.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.orangeforms.common.core.annotation.MultiDatabaseWriteMethod;
|
||||
import com.orangeforms.common.core.annotation.MyDataSource;
|
||||
import com.orangeforms.common.core.constant.ApplicationConstant;
|
||||
import com.orangeforms.common.core.object.CallResult;
|
||||
import com.orangeforms.common.flow.config.FlowProperties;
|
||||
import com.orangeforms.common.flow.constant.FlowApprovalType;
|
||||
import com.orangeforms.common.flow.constant.FlowConstant;
|
||||
import com.orangeforms.common.flow.constant.FlowTaskStatus;
|
||||
import com.orangeforms.common.flow.exception.FlowOperationException;
|
||||
import com.orangeforms.common.flow.model.FlowEntry;
|
||||
import com.orangeforms.common.flow.model.FlowTaskComment;
|
||||
import com.orangeforms.common.flow.model.FlowWorkOrder;
|
||||
import com.orangeforms.common.flow.online.service.FlowOnlineOperationService;
|
||||
import com.orangeforms.common.flow.service.FlowApiService;
|
||||
import com.orangeforms.common.flow.service.FlowEntryService;
|
||||
import com.orangeforms.common.flow.service.FlowWorkOrderService;
|
||||
import com.orangeforms.common.online.config.OnlineProperties;
|
||||
import com.orangeforms.common.online.model.OnlineDatasource;
|
||||
import com.orangeforms.common.online.model.OnlineDatasourceRelation;
|
||||
import com.orangeforms.common.online.model.OnlineTable;
|
||||
import com.orangeforms.common.online.service.OnlineDatasourceService;
|
||||
import com.orangeforms.common.online.service.OnlineOperationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@MyDataSource(ApplicationConstant.COMMON_FLOW_AND_ONLINE_DATASOURCE_TYPE)
|
||||
@Service("flowOnlineOperationService")
|
||||
public class FlowOnlineOperationServiceImpl implements FlowOnlineOperationService {
|
||||
|
||||
@Autowired
|
||||
private FlowApiService flowApiService;
|
||||
@Autowired
|
||||
private FlowWorkOrderService flowWorkOrderService;
|
||||
@Autowired
|
||||
private FlowEntryService flowEntryService;
|
||||
@Autowired
|
||||
private OnlineOperationService onlineOperationService;
|
||||
@Autowired
|
||||
private OnlineDatasourceService onlineDatasourceService;
|
||||
@Autowired
|
||||
private OnlineProperties onlineProperties;
|
||||
@Autowired
|
||||
private FlowProperties flowProperties;
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void saveNewAndStartProcess(
|
||||
String processDefinitionId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable table,
|
||||
JSONObject data) {
|
||||
this.saveNewAndStartProcess(processDefinitionId, flowTaskComment, taskVariableData, table, data, null);
|
||||
}
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void saveNewAndStartProcess(
|
||||
String processDefinitionId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable masterTable,
|
||||
JSONObject masterData,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
Object dataId = onlineOperationService.saveNewWithRelation(masterTable, masterData, slaveDataListMap);
|
||||
Assert.notNull(dataId);
|
||||
if (taskVariableData == null) {
|
||||
taskVariableData = new JSONObject();
|
||||
}
|
||||
taskVariableData.put(FlowConstant.MASTER_DATA_KEY, masterData);
|
||||
taskVariableData.put(FlowConstant.SLAVE_DATA_KEY, this.normailizeSlaveDataListMap(slaveDataListMap));
|
||||
taskVariableData.put(FlowConstant.MASTER_TABLE_KEY, masterTable);
|
||||
ProcessInstance instance = flowApiService.start(processDefinitionId, dataId);
|
||||
flowWorkOrderService.saveNew(instance, dataId, masterTable.getTableId(), null);
|
||||
flowApiService.takeFirstTask(instance.getProcessInstanceId(), flowTaskComment, taskVariableData);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public FlowWorkOrder saveNewDraftAndStartProcess(
|
||||
String processDefinitionId, Long tableId, JSONObject masterData, JSONObject slaveData) {
|
||||
ProcessInstance instance = flowApiService.start(processDefinitionId, null);
|
||||
return flowWorkOrderService.saveNewWithDraft(
|
||||
instance, tableId, null, JSON.toJSONString(masterData), JSON.toJSONString(slaveData));
|
||||
}
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void saveNewAndTakeTask(
|
||||
String processInstanceId,
|
||||
String taskId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable table,
|
||||
JSONObject data) {
|
||||
this.saveNewAndTakeTask(
|
||||
processInstanceId, taskId, flowTaskComment, taskVariableData, table, data, null);
|
||||
}
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void saveNewAndTakeTask(
|
||||
String processInstanceId,
|
||||
String taskId,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineTable masterTable,
|
||||
JSONObject masterData,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
Object dataId = onlineOperationService.saveNewWithRelation(masterTable, masterData, slaveDataListMap);
|
||||
Assert.notNull(dataId);
|
||||
Task task = flowApiService.getProcessInstanceActiveTask(processInstanceId, taskId);
|
||||
flowApiService.setBusinessKeyForProcessInstance(processInstanceId, dataId);
|
||||
Map<String, Object> variables =
|
||||
flowApiService.initAndGetProcessInstanceVariables(task.getProcessDefinitionId());
|
||||
if (taskVariableData == null) {
|
||||
taskVariableData = new JSONObject();
|
||||
}
|
||||
taskVariableData.putAll(variables);
|
||||
taskVariableData.put(FlowConstant.MASTER_DATA_KEY, masterData);
|
||||
taskVariableData.put(FlowConstant.SLAVE_DATA_KEY, this.normailizeSlaveDataListMap(slaveDataListMap));
|
||||
taskVariableData.put(FlowConstant.MASTER_TABLE_KEY, masterTable);
|
||||
flowApiService.completeTask(task, flowTaskComment, taskVariableData);
|
||||
ProcessInstance instance = flowApiService.getProcessInstance(processInstanceId);
|
||||
FlowWorkOrder flowWorkOrder =
|
||||
flowWorkOrderService.getFlowWorkOrderByProcessInstanceId(instance.getProcessInstanceId());
|
||||
if (flowWorkOrder == null) {
|
||||
flowWorkOrderService.saveNew(instance, dataId, masterTable.getTableId(), null);
|
||||
} else {
|
||||
flowWorkOrder.setBusinessKey(dataId.toString());
|
||||
flowWorkOrder.setUpdateTime(new Date());
|
||||
flowWorkOrder.setFlowStatus(FlowTaskStatus.SUBMITTED);
|
||||
flowWorkOrderService.updateById(flowWorkOrder);
|
||||
}
|
||||
}
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void updateAndTakeTask(
|
||||
Task task,
|
||||
FlowTaskComment flowTaskComment,
|
||||
JSONObject taskVariableData,
|
||||
OnlineDatasource datasource,
|
||||
JSONObject masterData,
|
||||
String masterDataId,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
int flowStatus = FlowTaskStatus.APPROVING;
|
||||
if (flowTaskComment.getApprovalType().equals(FlowApprovalType.REFUSE)) {
|
||||
flowStatus = FlowTaskStatus.REFUSED;
|
||||
} else if (flowTaskComment.getApprovalType().equals(FlowApprovalType.STOP)) {
|
||||
flowStatus = FlowTaskStatus.FINISHED;
|
||||
}
|
||||
OnlineTable masterTable = datasource.getMasterTable();
|
||||
Long datasourceId = datasource.getDatasourceId();
|
||||
flowWorkOrderService.updateFlowStatusByProcessInstanceId(task.getProcessInstanceId(), flowStatus);
|
||||
this.updateMasterData(masterTable, masterData, masterDataId);
|
||||
if (slaveDataListMap != null) {
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
||||
Long relationId = relationEntry.getKey().getRelationId();
|
||||
onlineOperationService.updateRelationData(
|
||||
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
||||
}
|
||||
}
|
||||
if (flowTaskComment.getApprovalType().equals(FlowApprovalType.STOP)) {
|
||||
Integer s = MapUtil.getInt(taskVariableData, FlowConstant.LATEST_APPROVAL_STATUS_KEY);
|
||||
flowWorkOrderService.updateLatestApprovalStatusByProcessInstanceId(task.getProcessInstanceId(), s);
|
||||
CallResult stopResult = flowApiService.stopProcessInstance(
|
||||
task.getProcessInstanceId(), flowTaskComment.getTaskComment(), flowStatus);
|
||||
if (!stopResult.isSuccess()) {
|
||||
throw new FlowOperationException(stopResult.getErrorMessage());
|
||||
}
|
||||
} else {
|
||||
if (taskVariableData == null) {
|
||||
taskVariableData = new JSONObject();
|
||||
}
|
||||
taskVariableData.put(FlowConstant.MASTER_DATA_KEY, masterData);
|
||||
taskVariableData.put(FlowConstant.SLAVE_DATA_KEY, this.normailizeSlaveDataListMap(slaveDataListMap));
|
||||
taskVariableData.put(FlowConstant.MASTER_TABLE_KEY, masterTable);
|
||||
flowApiService.completeTask(task, flowTaskComment, taskVariableData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> calculatePermData(Set<Long> onlineFormEntryIds) {
|
||||
if (CollUtil.isEmpty(onlineFormEntryIds)) {
|
||||
return new LinkedList<>();
|
||||
}
|
||||
List<Map<String, Object>> permDataList = new LinkedList<>();
|
||||
List<FlowEntry> flowEntries = flowEntryService.getInList(onlineFormEntryIds);
|
||||
Set<Long> pageIds = flowEntries.stream().map(FlowEntry::getPageId).collect(Collectors.toSet());
|
||||
Map<Long, String> pageAndVariableNameMap =
|
||||
onlineDatasourceService.getPageIdAndVariableNameMapByPageIds(pageIds);
|
||||
for (FlowEntry flowEntry : flowEntries) {
|
||||
JSONObject permData = new JSONObject();
|
||||
permData.put("entryId", flowEntry.getEntryId());
|
||||
String key = StrUtil.upperFirst(flowEntry.getProcessDefinitionKey());
|
||||
List<String> permCodeList = new LinkedList<>();
|
||||
String formPermCode = "form" + key;
|
||||
permCodeList.add(formPermCode);
|
||||
permCodeList.add(formPermCode + ":fragment" + key);
|
||||
permData.put("permCodeList", permCodeList);
|
||||
String flowUrlPrefix = flowProperties.getUrlPrefix();
|
||||
String onlineUrlPrefix = onlineProperties.getUrlPrefix();
|
||||
List<String> permList = CollUtil.newLinkedList(
|
||||
onlineUrlPrefix + "/onlineForm/view",
|
||||
onlineUrlPrefix + "/onlineForm/render",
|
||||
onlineUrlPrefix + "/onlineOperation/listByOneToManyRelationId/" + pageAndVariableNameMap.get(flowEntry.getPageId()),
|
||||
onlineUrlPrefix + "/onlineOperation/uploadByOneToManyRelationId/" + pageAndVariableNameMap.get(flowEntry.getPageId()),
|
||||
onlineUrlPrefix + "/onlineOperation/dowloadByOneToManyRelationId/" + pageAndVariableNameMap.get(flowEntry.getPageId()),
|
||||
flowUrlPrefix + "/flowOperation/viewInitialHistoricTaskInfo",
|
||||
flowUrlPrefix + "/flowOperation/startOnly",
|
||||
flowUrlPrefix + "/flowOperation/viewInitialTaskInfo",
|
||||
flowUrlPrefix + "/flowOperation/viewRuntimeTaskInfo",
|
||||
flowUrlPrefix + "/flowOperation/viewProcessBpmn",
|
||||
flowUrlPrefix + "/flowOperation/viewHighlightFlowData",
|
||||
flowUrlPrefix + "/flowOperation/listFlowTaskComment",
|
||||
flowUrlPrefix + "/flowOperation/cancelWorkOrder",
|
||||
flowUrlPrefix + "/flowOperation/listRuntimeTask",
|
||||
flowUrlPrefix + "/flowOperation/listHistoricProcessInstance",
|
||||
flowUrlPrefix + "/flowOperation/listHistoricTask",
|
||||
flowUrlPrefix + "/flowOperation/freeJumpTo",
|
||||
flowUrlPrefix + "/flowOnlineOperation/startPreview",
|
||||
flowUrlPrefix + "/flowOnlineOperation/viewUserTask",
|
||||
flowUrlPrefix + "/flowOnlineOperation/viewHistoricProcessInstance",
|
||||
flowUrlPrefix + "/flowOnlineOperation/submitUserTask",
|
||||
flowUrlPrefix + "/flowOnlineOperation/upload",
|
||||
flowUrlPrefix + "/flowOnlineOperation/download",
|
||||
flowUrlPrefix + "/flowOperation/submitConsign",
|
||||
flowUrlPrefix + "/flowOnlineOperation/startAndTakeUserTask/" + flowEntry.getProcessDefinitionKey(),
|
||||
flowUrlPrefix + "/flowOnlineOperation/startAndSaveDraft/" + flowEntry.getProcessDefinitionKey(),
|
||||
flowUrlPrefix + "/flowOnlineOperation/listWorkOrder/" + flowEntry.getProcessDefinitionKey(),
|
||||
flowUrlPrefix + "/flowOnlineOperation/printWorkOrder/" + flowEntry.getProcessDefinitionKey()
|
||||
);
|
||||
permData.put("permList", permList);
|
||||
permDataList.add(permData);
|
||||
}
|
||||
return permDataList;
|
||||
}
|
||||
|
||||
private void updateMasterData(OnlineTable masterTable, JSONObject masterData, String dataId) {
|
||||
if (masterData == null) {
|
||||
return;
|
||||
}
|
||||
// 如果存在主表数据,就执行主表数据的更新。
|
||||
Map<String, Object> originalMasterData =
|
||||
onlineOperationService.getMasterData(masterTable, null, null, dataId);
|
||||
for (Map.Entry<String, Object> entry : originalMasterData.entrySet()) {
|
||||
masterData.putIfAbsent(entry.getKey(), entry.getValue());
|
||||
}
|
||||
if (!onlineOperationService.update(masterTable, masterData)) {
|
||||
throw new FlowOperationException("主表数据不存在!");
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, List<JSONObject>> normailizeSlaveDataListMap(
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
if (slaveDataListMap == null || slaveDataListMap.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
Map<String, List<JSONObject>> resultMap = new HashMap<>(slaveDataListMap.size());
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||
resultMap.put(entry.getKey().getSlaveTable().getTableName(), entry.getValue());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
com.orangeforms.common.flow.online.config.FlowOnlineAutoConfig
|
||||
Reference in New Issue
Block a user