commit:升级到vue3,更新最近工作流技术栈,支持sa-token

This commit is contained in:
Jerry
2024-07-05 22:42:33 +08:00
parent bbcc608584
commit 565ecb6371
1751 changed files with 236790 additions and 0 deletions

View File

@@ -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>

View File

@@ -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 {
}

View File

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

View File

@@ -0,0 +1,136 @@
package com.orangeforms.common.flow.online.service;
import com.alibaba.fastjson.JSONObject;
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.flow.model.FlowWorkOrder;
import com.orangeforms.common.flow.model.FlowTaskComment;
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);
}

View File

@@ -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.OnlineTable;
import com.orangeforms.common.online.model.OnlineDatasource;
import com.orangeforms.common.online.model.OnlineDatasourceRelation;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.PostConstruct;
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);
}
}

View File

@@ -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.object.CallResult;
import com.orangeforms.common.core.constant.ApplicationConstant;
import com.orangeforms.common.core.annotation.MyDataSource;
import com.orangeforms.common.core.annotation.MultiDatabaseWriteMethod;
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 com.orangeforms.common.flow.config.FlowProperties;
import com.orangeforms.common.flow.constant.FlowConstant;
import com.orangeforms.common.flow.constant.FlowApprovalType;
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.FlowWorkOrder;
import com.orangeforms.common.flow.model.FlowTaskComment;
import com.orangeforms.common.flow.service.FlowEntryService;
import com.orangeforms.common.flow.service.FlowApiService;
import com.orangeforms.common.flow.service.FlowWorkOrderService;
import com.orangeforms.common.flow.online.service.FlowOnlineOperationService;
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;
}
}

View File

@@ -0,0 +1 @@
com.orangeforms.common.flow.online.config.FlowOnlineAutoConfig