mirror of
https://gitee.com/orangeform/orange-admin.git
synced 2026-01-17 18:46:36 +08:00
commit:支持后台扩展类
This commit is contained in:
@@ -53,6 +53,10 @@ public class CacheConfig {
|
|||||||
* 在线表单组件渲染数据缓存。
|
* 在线表单组件渲染数据缓存。
|
||||||
*/
|
*/
|
||||||
ONLINE_FORM_RENDER_CACCHE(300, 100),
|
ONLINE_FORM_RENDER_CACCHE(300, 100),
|
||||||
|
/**
|
||||||
|
* 在线表单扩展执行器对象的缓存。
|
||||||
|
*/
|
||||||
|
ONLINE_EXTEND_EXECUTOR_CACHE(300, 100),
|
||||||
/**
|
/**
|
||||||
* 报表表单组件渲染数据缓存。
|
* 报表表单组件渲染数据缓存。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ public class FlowOnlineOperationController {
|
|||||||
}
|
}
|
||||||
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
||||||
}
|
}
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
||||||
if (StrUtil.isBlank(dataId)) {
|
if (StrUtil.isBlank(dataId)) {
|
||||||
return this.submitNewTask(processInstanceId, taskId,
|
return this.submitNewTask(processInstanceId, taskId,
|
||||||
@@ -653,6 +654,7 @@ public class FlowOnlineOperationController {
|
|||||||
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
||||||
}
|
}
|
||||||
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
// 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。
|
// 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
flowOnlineOperationService.saveNewAndStartProcess(
|
flowOnlineOperationService.saveNewAndStartProcess(
|
||||||
@@ -846,6 +848,7 @@ public class FlowOnlineOperationController {
|
|||||||
|
|
||||||
private JSONObject buildUserTaskData(
|
private JSONObject buildUserTaskData(
|
||||||
String businessKey, OnlineDatasource datasource, List<OnlineDatasourceRelation> relationList) {
|
String businessKey, OnlineDatasource datasource, List<OnlineDatasourceRelation> relationList) {
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
JSONObject jsonData = new JSONObject();
|
JSONObject jsonData = new JSONObject();
|
||||||
List<OnlineDatasourceRelation> oneToOneRelationList = relationList.stream()
|
List<OnlineDatasourceRelation> oneToOneRelationList = relationList.stream()
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import cn.hutool.core.text.StrFormatter;
|
|||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.*;
|
import cn.hutool.core.util.*;
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.orangeforms.common.core.annotation.MyRequestBody;
|
import com.orangeforms.common.core.annotation.MyRequestBody;
|
||||||
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
||||||
@@ -110,6 +109,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||||
}
|
}
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
onlineOperationService.saveNew(masterTable, masterData);
|
onlineOperationService.saveNew(masterTable, masterData);
|
||||||
} else {
|
} else {
|
||||||
@@ -145,8 +145,8 @@ public class OnlineOperationController {
|
|||||||
if (!verifyResult.isSuccess()) {
|
if (!verifyResult.isSuccess()) {
|
||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
onlineOperationService.saveNew(relation.getSlaveTable(), slaveData);
|
onlineOperationService.saveNew(verifyResult.getData().getSlaveTable(), slaveData);
|
||||||
return ResponseResult.success();
|
return ResponseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,6 +178,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||||
}
|
}
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
if (!onlineOperationService.update(masterTable, masterData)) {
|
if (!onlineOperationService.update(masterTable, masterData)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
@@ -217,6 +218,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineTable slaveTable = verifyResult.getData().getSlaveTable();
|
OnlineTable slaveTable = verifyResult.getData().getSlaveTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (!onlineOperationService.update(slaveTable, slaveData)) {
|
if (!onlineOperationService.update(slaveTable, slaveData)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
}
|
}
|
||||||
@@ -328,6 +330,7 @@ public class OnlineOperationController {
|
|||||||
List<OnlineDatasourceRelation> allRelationList = relationListResult.getData();
|
List<OnlineDatasourceRelation> allRelationList = relationListResult.getData();
|
||||||
List<OnlineDatasourceRelation> oneToOneRelationList = allRelationList.stream()
|
List<OnlineDatasourceRelation> oneToOneRelationList = allRelationList.stream()
|
||||||
.filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList());
|
.filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList());
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
Map<String, Object> result = onlineOperationService.getMasterData(
|
Map<String, Object> result = onlineOperationService.getMasterData(
|
||||||
datasource.getMasterTable(), oneToOneRelationList, allRelationList, dataId);
|
datasource.getMasterTable(), oneToOneRelationList, allRelationList, dataId);
|
||||||
return ResponseResult.success(result);
|
return ResponseResult.success(result);
|
||||||
@@ -354,6 +357,7 @@ public class OnlineOperationController {
|
|||||||
if (!verifyResult.isSuccess()) {
|
if (!verifyResult.isSuccess()) {
|
||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
Map<String, Object> result = onlineOperationService.getSlaveData(verifyResult.getData(), dataId);
|
Map<String, Object> result = onlineOperationService.getSlaveData(verifyResult.getData(), dataId);
|
||||||
return ResponseResult.success(result);
|
return ResponseResult.success(result);
|
||||||
}
|
}
|
||||||
@@ -546,6 +550,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(orderByResult);
|
return ResponseResult.errorFrom(orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, pageParam);
|
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, pageParam);
|
||||||
return ResponseResult.success(pageData);
|
return ResponseResult.success(pageData);
|
||||||
@@ -605,6 +610,7 @@ public class OnlineOperationController {
|
|||||||
ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST, orderByResult);
|
ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST, orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, null);
|
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, null);
|
||||||
Map<String, String> headerMap = this.makeExportHeaderMap(masterTable, allRelationList, exportInfoList);
|
Map<String, String> headerMap = this.makeExportHeaderMap(masterTable, allRelationList, exportInfoList);
|
||||||
@@ -663,6 +669,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(orderByResult);
|
return ResponseResult.errorFrom(orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, pageParam);
|
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, pageParam);
|
||||||
return ResponseResult.success(pageData);
|
return ResponseResult.success(pageData);
|
||||||
@@ -715,6 +722,7 @@ public class OnlineOperationController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, null);
|
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, null);
|
||||||
Map<String, String> headerMap =
|
Map<String, String> headerMap =
|
||||||
@@ -812,6 +820,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(relationListResult);
|
return ResponseResult.errorFrom(relationListResult);
|
||||||
}
|
}
|
||||||
List<OnlineDatasourceRelation> relationList = relationListResult.getData();
|
List<OnlineDatasourceRelation> relationList = relationListResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
for (String dataId : dataIdList) {
|
for (String dataId : dataIdList) {
|
||||||
if (!onlineOperationService.delete(masterTable, relationList, dataId)) {
|
if (!onlineOperationService.delete(masterTable, relationList, dataId)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
@@ -828,6 +837,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
OnlineDatasourceRelation relation = verifyResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
for (String dataId : dataIdList) {
|
for (String dataId : dataIdList) {
|
||||||
if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) {
|
if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<result column="page_code" jdbcType="VARCHAR" property="pageCode"/>
|
<result column="page_code" jdbcType="VARCHAR" property="pageCode"/>
|
||||||
<result column="page_name" jdbcType="VARCHAR" property="pageName"/>
|
<result column="page_name" jdbcType="VARCHAR" property="pageName"/>
|
||||||
<result column="page_type" jdbcType="INTEGER" property="pageType"/>
|
<result column="page_type" jdbcType="INTEGER" property="pageType"/>
|
||||||
|
<result column="extra_json" jdbcType="VARCHAR" property="extraJson"/>
|
||||||
<result column="status" jdbcType="INTEGER" property="status"/>
|
<result column="status" jdbcType="INTEGER" property="status"/>
|
||||||
<result column="published" jdbcType="BOOLEAN" property="published"/>
|
<result column="published" jdbcType="BOOLEAN" property="published"/>
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
||||||
@@ -61,10 +62,10 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getOnlinePageListByDatasourceId" resultMap="BaseResultMap">
|
<select id="getOnlinePageListByDatasourceId" resultMap="BaseResultMap">
|
||||||
SELECT a.* FROM zz_online_page a, zz_online_page_datasource b
|
SELECT zz_online_page.* FROM zz_online_page, zz_online_page_datasource b
|
||||||
<where>
|
<where>
|
||||||
<include refid="filterRef"/>
|
<include refid="filterRef"/>
|
||||||
AND b.datasource_id = #{datasourceI} AND b.page_id = a.page_id
|
AND b.datasource_id = #{datasourceId} AND b.page_id = zz_online_page.page_id
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ public class OnlinePageDto {
|
|||||||
@ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!")
|
@ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@Schema(description = "扩展数据")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -55,6 +55,12 @@ public class OnlinePage {
|
|||||||
@Column(value = "page_type")
|
@Column(value = "page_type")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@Column(value = "extra_json")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
package com.orangeforms.common.online.object;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.object.CallResult;
|
||||||
|
import com.orangeforms.common.online.dto.OnlineFilterDto;
|
||||||
|
import com.orangeforms.common.online.model.OnlineTable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单后台扩展可执行接口,所有在线表单的后台扩展类都需要继承该接口。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
public class BaseOnlineExtendExecutor {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之前执行的操作。通常可以做一些数据插入之前的验证操作,或者是对待插入的数据,根据需要进行调整和计算。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
*/
|
||||||
|
public void afterInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据插入之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeInsert(OnlineTable table, JSONObject data) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
*/
|
||||||
|
public void afterInsert(OnlineTable table, JSONObject data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeUpdateWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
*/
|
||||||
|
public void afterUpdateWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
*/
|
||||||
|
public void afterUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。对象类型和实际字段值类型一致。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeDelete(OnlineTable table, Object dataId) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。对象类型和实际字段值类型一致。
|
||||||
|
*/
|
||||||
|
public void afterDelete(OnlineTable table, Object dataId) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param filterList 过滤条件。如果有新的过滤条件,可直接添加到该过滤列表。
|
||||||
|
*/
|
||||||
|
public void beforeSelectList(OnlineTable table, List<OnlineFilterDto> filterList) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param resultList 查询结果。如果有修改,可直接在当前参数修改后即可生效。
|
||||||
|
*/
|
||||||
|
public void afterSelectList(OnlineTable table, List<Map<String, Object>> resultList) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据单条详情查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param result 查询结果。如果有修改,可直接在当前参数修改后即可生效。
|
||||||
|
*/
|
||||||
|
public void afterSelectOne(OnlineTable table, Map<String, Object> result) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.orangeforms.common.online.object;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单页面的扩展数据对象。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OnlinePageExtra {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后台扩展类。
|
||||||
|
*/
|
||||||
|
private String extendClass;
|
||||||
|
}
|
||||||
@@ -95,6 +95,8 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
private CacheManager cacheManager;
|
private CacheManager cacheManager;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OnlineDataSourceUtil dataSourceUtil;
|
private OnlineDataSourceUtil dataSourceUtil;
|
||||||
|
@Autowired
|
||||||
|
private OnlineExtendExecutorUtil onlineExtendExecutorUtil;
|
||||||
|
|
||||||
private static final String DICT_MAP_SUFFIX = "DictMap";
|
private static final String DICT_MAP_SUFFIX = "DictMap";
|
||||||
private static final String DICT_MAP_LIST_SUFFIX = "DictMapList";
|
private static final String DICT_MAP_LIST_SUFFIX = "DictMapList";
|
||||||
@@ -148,6 +150,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doBeforeInsert(table, data);
|
||||||
onlineOperationMapper.insert(table.getTableName(), columnNames, columnValueList);
|
onlineOperationMapper.insert(table.getTableName(), columnNames, columnValueList);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -159,25 +162,27 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
OnlineTable masterTable,
|
OnlineTable masterTable,
|
||||||
JSONObject masterData,
|
JSONObject masterData,
|
||||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||||
|
onlineExtendExecutorUtil.doBeforeInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||||
Object id = this.saveNew(masterTable, masterData);
|
Object id = this.saveNew(masterTable, masterData);
|
||||||
if (slaveDataListMap == null) {
|
if (slaveDataListMap != null) {
|
||||||
return id;
|
// 迭代多个关联列表。
|
||||||
}
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||||
// 迭代多个关联列表。
|
Long masterColumnId = entry.getKey().getMasterColumnId();
|
||||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
||||||
Long masterColumnId = entry.getKey().getMasterColumnId();
|
Object columnValue = masterData.get(masterColumn.getColumnName());
|
||||||
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
||||||
Object columnValue = masterData.get(masterColumn.getColumnName());
|
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
||||||
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
// 迭代关联中的数据集合
|
||||||
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
for (JSONObject slaveData : entry.getValue()) {
|
||||||
// 迭代关联中的数据集合
|
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
||||||
for (JSONObject slaveData : entry.getValue()) {
|
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
||||||
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
this.saveNew(slaveTable, slaveData);
|
||||||
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
}
|
||||||
this.saveNew(slaveTable, slaveData);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +224,10 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String dataPermFilter = this.buildDataPermFilter(table);
|
String dataPermFilter = this.buildDataPermFilter(table);
|
||||||
return this.doUpdate(table, updateColumnList, filterList, dataPermFilter);
|
onlineExtendExecutorUtil.doBeforeUpdate(table, data);
|
||||||
|
boolean r = this.doUpdate(table, updateColumnList, filterList, dataPermFilter);
|
||||||
|
onlineExtendExecutorUtil.doAfterUpdate(table, data);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MultiDatabaseWriteMethod
|
@MultiDatabaseWriteMethod
|
||||||
@@ -244,16 +252,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
JSONObject masterData,
|
JSONObject masterData,
|
||||||
Long datasourceId,
|
Long datasourceId,
|
||||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||||
|
onlineExtendExecutorUtil.doBeforeUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||||
this.update(masterTable, masterData);
|
this.update(masterTable, masterData);
|
||||||
if (slaveDataListMap == null) {
|
if (slaveDataListMap != null) {
|
||||||
return;
|
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
||||||
}
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
||||||
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
Long relationId = relationEntry.getKey().getRelationId();
|
||||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
this.updateRelationData(
|
||||||
Long relationId = relationEntry.getKey().getRelationId();
|
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
||||||
this.updateRelationData(
|
}
|
||||||
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MultiDatabaseWriteMethod
|
@MultiDatabaseWriteMethod
|
||||||
@@ -296,6 +306,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
List<OnlineFilterDto> filterList =
|
List<OnlineFilterDto> filterList =
|
||||||
this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId);
|
this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId);
|
||||||
String dataPermFilter = this.buildDataPermFilter(table);
|
String dataPermFilter = this.buildDataPermFilter(table);
|
||||||
|
OnlineColumn pkCol = table.getPrimaryKeyColumn();
|
||||||
|
Object id = onlineOperationHelper.convertToTypeValue(pkCol, dataId);
|
||||||
|
onlineExtendExecutorUtil.doBeforeDelete(table, id);
|
||||||
if (table.getLogicDeleteColumn() == null) {
|
if (table.getLogicDeleteColumn() == null) {
|
||||||
if (this.doDelete(table, filterList, dataPermFilter) != 1) {
|
if (this.doDelete(table, filterList, dataPermFilter) != 1) {
|
||||||
return false;
|
return false;
|
||||||
@@ -304,6 +317,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter);
|
this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter);
|
||||||
}
|
}
|
||||||
if (CollUtil.isEmpty(relationList)) {
|
if (CollUtil.isEmpty(relationList)) {
|
||||||
|
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Map<String, Object> masterData = getMasterData(table, null, null, dataId);
|
Map<String, Object> masterData = getMasterData(table, null, null, dataId);
|
||||||
@@ -327,6 +341,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.doLogicDelete(slaveTable, slaveColumn, columnValue, null);
|
this.doLogicDelete(slaveTable, slaveColumn, columnValue, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,7 +402,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||||
}
|
}
|
||||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||||
return resultList.get(0);
|
Map<String, Object> result = resultList.get(0);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectOne(table, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -402,7 +419,11 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
slaveTable, null, selectFields, filterList, dataPermFilter, null, null);
|
slaveTable, null, selectFields, filterList, dataPermFilter, null, null);
|
||||||
List<Map<String, Object>> resultList = pageData.getDataList();
|
List<Map<String, Object>> resultList = pageData.getDataList();
|
||||||
this.buildDataListWithDict(resultList, slaveTable);
|
this.buildDataListWithDict(resultList, slaveTable);
|
||||||
return CollUtil.isEmpty(resultList) ? null : resultList.get(0);
|
Map<String, Object> result = CollUtil.isEmpty(resultList) ? null : resultList.get(0);
|
||||||
|
if (result != null) {
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectOne(slaveTable, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -414,6 +435,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
String orderBy,
|
String orderBy,
|
||||||
MyPageParam pageParam) {
|
MyPageParam pageParam) {
|
||||||
this.normalizeFilterList(table, oneToOneRelationList, filterList);
|
this.normalizeFilterList(table, oneToOneRelationList, filterList);
|
||||||
|
onlineExtendExecutorUtil.doBeforeSelectList(table, filterList);
|
||||||
// 组件表关联数据。
|
// 组件表关联数据。
|
||||||
List<JoinTableInfo> joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList);
|
List<JoinTableInfo> joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList);
|
||||||
// 拼接关联表的select fields字段。
|
// 拼接关联表的select fields字段。
|
||||||
@@ -433,6 +455,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||||
}
|
}
|
||||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectList(table, resultList);
|
||||||
return pageData;
|
return pageData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -440,6 +463,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
public MyPageData<Map<String, Object>> getSlaveDataList(
|
public MyPageData<Map<String, Object>> getSlaveDataList(
|
||||||
OnlineDatasourceRelation relation, List<OnlineFilterDto> filterList, String orderBy, MyPageParam pageParam) {
|
OnlineDatasourceRelation relation, List<OnlineFilterDto> filterList, String orderBy, MyPageParam pageParam) {
|
||||||
OnlineTable slaveTable = relation.getSlaveTable();
|
OnlineTable slaveTable = relation.getSlaveTable();
|
||||||
|
onlineExtendExecutorUtil.doBeforeSelectList(slaveTable, filterList);
|
||||||
this.normalizeFilterList(slaveTable, null, filterList);
|
this.normalizeFilterList(slaveTable, null, filterList);
|
||||||
// 拼接关联表的select fields字段。
|
// 拼接关联表的select fields字段。
|
||||||
String selectFields = this.makeSelectFields(slaveTable, null);
|
String selectFields = this.makeSelectFields(slaveTable, null);
|
||||||
@@ -447,6 +471,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
this.getList(slaveTable, null, selectFields, filterList, dataPermFilter, orderBy, pageParam);
|
this.getList(slaveTable, null, selectFields, filterList, dataPermFilter, orderBy, pageParam);
|
||||||
this.buildDataListWithDict(pageData.getDataList(), slaveTable);
|
this.buildDataListWithDict(pageData.getDataList(), slaveTable);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectList(slaveTable, pageData.getDataList());
|
||||||
return pageData;
|
return pageData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1232,6 +1257,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
return joinInfoList;
|
return joinInfoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<OnlineTable, List<JSONObject>> convertToSlaveTableAndDataList(
|
||||||
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> resultMap = MapUtil.newHashMap();
|
||||||
|
if (slaveDataListMap == null) {
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||||
|
resultMap.put(entry.getKey().getSlaveTable(), entry.getValue());
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
private String makeSelectFields(OnlineTable table, String relationVariable) {
|
private String makeSelectFields(OnlineTable table, String relationVariable) {
|
||||||
DataSourceProvider provider = dataSourceUtil.getProvider(table.getDblinkId());
|
DataSourceProvider provider = dataSourceUtil.getProvider(table.getDblinkId());
|
||||||
StringBuilder selectFieldBuider = new StringBuilder(512);
|
StringBuilder selectFieldBuider = new StringBuilder(512);
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
package com.orangeforms.common.online.util;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.object.CallResult;
|
||||||
|
import com.orangeforms.common.core.util.ContextUtil;
|
||||||
|
import com.orangeforms.common.online.dto.OnlineFilterDto;
|
||||||
|
import com.orangeforms.common.online.exception.OnlineRuntimeException;
|
||||||
|
import com.orangeforms.common.online.model.OnlineTable;
|
||||||
|
import com.orangeforms.common.online.object.BaseOnlineExtendExecutor;
|
||||||
|
import com.orangeforms.common.online.service.OnlineTableService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单后台扩展执行接口工具类。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class OnlineExtendExecutorUtil {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OnlineTableService onlineTableService;
|
||||||
|
@Autowired
|
||||||
|
private OnlineOperationHelper onlineOperationHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置后台扩展执行器到线程本地化对象。
|
||||||
|
*
|
||||||
|
* @param e 后台扩展执行器。
|
||||||
|
*/
|
||||||
|
public static void setOnlineExtendExecutorToLocal(BaseOnlineExtendExecutor e) {
|
||||||
|
ContextUtil.getHttpRequest().setAttribute(BaseOnlineExtendExecutor.class.getSimpleName(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前线程的后台扩展执行器。
|
||||||
|
*
|
||||||
|
* @return 当前线程的后台扩展执行器。
|
||||||
|
*/
|
||||||
|
public static BaseOnlineExtendExecutor getOnlineExtendExecutorFromLocal() {
|
||||||
|
return (BaseOnlineExtendExecutor) ContextUtil.getHttpRequest().getAttribute(BaseOnlineExtendExecutor.class.getSimpleName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行插入前操作。
|
||||||
|
*
|
||||||
|
* @param table 数据表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doBeforeInsert(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeInsert(table, data);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行插入后操作。
|
||||||
|
*
|
||||||
|
* @param table 数据表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doAfterInsert(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterInsert(table, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doBeforeInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeInsertWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doAfterInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterInsertWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doBeforeUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeUpdate(table, data);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doAfterUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterUpdate(table, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doBeforeUpdateWithRelationn(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeUpdateWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doAfterUpdateWithRelationn(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterUpdateWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。
|
||||||
|
*/
|
||||||
|
public void doBeforeDelete(OnlineTable table, Object dataId) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeDelete(table, dataId);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。
|
||||||
|
*/
|
||||||
|
public void doAfterDelete(OnlineTable table, Object dataId) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterDelete(table, dataId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据单条详情查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param result 即将返回给前端的结果数据。
|
||||||
|
*/
|
||||||
|
public void doAfterSelectOne(OnlineTable table, Map<String, Object> result) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterSelectOne(table, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param filterList 过滤条件,如果有新的过滤条件,可直接添加到该过滤列表。
|
||||||
|
*/
|
||||||
|
public void doBeforeSelectList(OnlineTable table, List<OnlineFilterDto> filterList) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.beforeSelectList(table, filterList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param resultList 即将返回给前端的结果数据。
|
||||||
|
*/
|
||||||
|
public void doAfterSelectList(OnlineTable table, List<Map<String, Object>> resultList) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterSelectList(table, resultList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,35 +6,40 @@ import cn.hutool.core.map.MapUtil;
|
|||||||
import cn.hutool.core.util.BooleanUtil;
|
import cn.hutool.core.util.BooleanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.cache.CacheConfig;
|
||||||
import com.orangeforms.common.core.constant.ObjectFieldType;
|
import com.orangeforms.common.core.constant.ObjectFieldType;
|
||||||
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
||||||
|
import com.orangeforms.common.core.exception.MyRuntimeException;
|
||||||
import com.orangeforms.common.core.object.ResponseResult;
|
import com.orangeforms.common.core.object.ResponseResult;
|
||||||
import com.orangeforms.common.core.object.TokenData;
|
import com.orangeforms.common.core.object.TokenData;
|
||||||
import com.orangeforms.common.core.upload.BaseUpDownloader;
|
import com.orangeforms.common.core.upload.BaseUpDownloader;
|
||||||
import com.orangeforms.common.core.upload.UpDownloaderFactory;
|
import com.orangeforms.common.core.upload.UpDownloaderFactory;
|
||||||
import com.orangeforms.common.core.upload.UploadResponseInfo;
|
import com.orangeforms.common.core.upload.UploadResponseInfo;
|
||||||
import com.orangeforms.common.core.upload.UploadStoreTypeEnum;
|
import com.orangeforms.common.core.upload.UploadStoreTypeEnum;
|
||||||
|
import com.orangeforms.common.core.util.ApplicationContextHolder;
|
||||||
import com.orangeforms.common.online.config.OnlineProperties;
|
import com.orangeforms.common.online.config.OnlineProperties;
|
||||||
import com.orangeforms.common.online.model.OnlineColumn;
|
import com.orangeforms.common.online.model.*;
|
||||||
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.model.constant.FieldKind;
|
||||||
import com.orangeforms.common.online.model.constant.RelationType;
|
import com.orangeforms.common.online.model.constant.RelationType;
|
||||||
|
import com.orangeforms.common.online.object.BaseOnlineExtendExecutor;
|
||||||
import com.orangeforms.common.online.object.ColumnData;
|
import com.orangeforms.common.online.object.ColumnData;
|
||||||
import com.orangeforms.common.online.service.OnlineDatasourceRelationService;
|
import com.orangeforms.common.online.object.OnlinePageExtra;
|
||||||
import com.orangeforms.common.online.service.OnlineDatasourceService;
|
import com.orangeforms.common.online.service.*;
|
||||||
import com.orangeforms.common.online.service.OnlineOperationService;
|
|
||||||
import com.orangeforms.common.online.service.OnlineTableService;
|
|
||||||
import com.orangeforms.common.redis.cache.SessionCacheHelper;
|
import com.orangeforms.common.redis.cache.SessionCacheHelper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.cache.Cache;
|
||||||
|
import org.springframework.cache.CacheManager;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -57,6 +62,8 @@ public class OnlineOperationHelper {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private OnlineTableService onlineTableService;
|
private OnlineTableService onlineTableService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private OnlinePageService onlinePageService;
|
||||||
|
@Autowired
|
||||||
private OnlineOperationService onlineOperationService;
|
private OnlineOperationService onlineOperationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OnlineProperties onlineProperties;
|
private OnlineProperties onlineProperties;
|
||||||
@@ -64,6 +71,8 @@ public class OnlineOperationHelper {
|
|||||||
private UpDownloaderFactory upDownloaderFactory;
|
private UpDownloaderFactory upDownloaderFactory;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SessionCacheHelper cacheHelper;
|
private SessionCacheHelper cacheHelper;
|
||||||
|
@Resource(name = "caffeineCacheManager")
|
||||||
|
private CacheManager cacheManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证并获取数据源数据。
|
* 验证并获取数据源数据。
|
||||||
@@ -361,6 +370,37 @@ public class OnlineOperationHelper {
|
|||||||
ResponseResult.output(ResponseResult.success(responseInfo));
|
ResponseResult.output(ResponseResult.success(responseInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将与指定数据源Id关联的OnlinePage对象中,配置的在线表单后台扩展执行器对象写入本地现成。
|
||||||
|
*
|
||||||
|
* @param datasourceId 数据源Id。
|
||||||
|
*/
|
||||||
|
public void enableOnlineExtendExecutor(Long datasourceId) {
|
||||||
|
Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.ONLINE_EXTEND_EXECUTOR_CACHE.name());
|
||||||
|
Assert.notNull(cache, "Cache ONLINE_EXTEND_EXECUTOR_CACHE can't be NULL");
|
||||||
|
BaseOnlineExtendExecutor executor = cache.get(datasourceId, BaseOnlineExtendExecutor.class);
|
||||||
|
if (executor != null) {
|
||||||
|
OnlineExtendExecutorUtil.setOnlineExtendExecutorToLocal(executor);
|
||||||
|
}
|
||||||
|
OnlinePage page = onlinePageService.getOnlinePageListByDatasourceId(datasourceId).get(0);
|
||||||
|
if (StrUtil.isNotBlank(page.getExtraJson())) {
|
||||||
|
OnlinePageExtra pageExtra = JSON.parseObject(page.getExtraJson(), OnlinePageExtra.class);
|
||||||
|
if (StrUtil.isNotBlank(pageExtra.getExtendClass())) {
|
||||||
|
try {
|
||||||
|
Object extendClass = ApplicationContextHolder.getBean(Class.forName(pageExtra.getExtendClass()));
|
||||||
|
if (!(extendClass instanceof BaseOnlineExtendExecutor)) {
|
||||||
|
throw new MyRuntimeException("在线表单扩展类没有实现 [BaseOnlineExtendExecutor] 接口!");
|
||||||
|
}
|
||||||
|
executor = (BaseOnlineExtendExecutor) extendClass;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new MyRuntimeException("在线表单扩展类没有实现 [BaseOnlineExtendExecutor] 接口!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache.put(datasourceId, executor);
|
||||||
|
OnlineExtendExecutorUtil.setOnlineExtendExecutorToLocal(executor);
|
||||||
|
}
|
||||||
|
|
||||||
private ResponseResult<OnlineColumn> doVerifyUpDownloadFileColumn(
|
private ResponseResult<OnlineColumn> doVerifyUpDownloadFileColumn(
|
||||||
OnlineTable table, String fieldName, Boolean asImage) {
|
OnlineTable table, String fieldName, Boolean asImage) {
|
||||||
OnlineColumn column = this.getOnlineColumnByName(table, fieldName);
|
OnlineColumn column = this.getOnlineColumnByName(table, fieldName);
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ public class OnlinePageVo {
|
|||||||
@Schema(description = "页面类型")
|
@Schema(description = "页面类型")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@Schema(description = "扩展数据")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,19 +1,3 @@
|
|||||||
/*
|
|
||||||
Navicat Premium Data Transfer
|
|
||||||
|
|
||||||
Source Server : hw-test
|
|
||||||
Source Server Type : MySQL
|
|
||||||
Source Server Version : 80024
|
|
||||||
Source Host : localhost:3306
|
|
||||||
Source Schema : zzdemo-online-open
|
|
||||||
|
|
||||||
Target Server Type : MySQL
|
|
||||||
Target Server Version : 80024
|
|
||||||
File Encoding : 65001
|
|
||||||
|
|
||||||
Date: 05/07/2024 22:26:38
|
|
||||||
*/
|
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
@@ -1896,6 +1880,7 @@ CREATE TABLE `zz_online_page` (
|
|||||||
`page_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '页面编码',
|
`page_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '页面编码',
|
||||||
`page_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称',
|
`page_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称',
|
||||||
`page_type` int NOT NULL COMMENT '页面类型',
|
`page_type` int NOT NULL COMMENT '页面类型',
|
||||||
|
`extra_json` varchar(2048) COLLATE utf8mb4_bin COMMENT '扩展数据',
|
||||||
`status` int NOT NULL COMMENT '页面编辑状态',
|
`status` int NOT NULL COMMENT '页面编辑状态',
|
||||||
`published` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否发布',
|
`published` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否发布',
|
||||||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ public class CacheConfig {
|
|||||||
* 在线表单组件渲染数据缓存。
|
* 在线表单组件渲染数据缓存。
|
||||||
*/
|
*/
|
||||||
ONLINE_FORM_RENDER_CACCHE(300, 100),
|
ONLINE_FORM_RENDER_CACCHE(300, 100),
|
||||||
|
/**
|
||||||
|
* 在线表单扩展执行器对象的缓存。
|
||||||
|
*/
|
||||||
|
ONLINE_EXTEND_EXECUTOR_CACHE(300, 100),
|
||||||
/**
|
/**
|
||||||
* 报表表单组件渲染数据缓存。
|
* 报表表单组件渲染数据缓存。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ public class FlowOnlineOperationController {
|
|||||||
}
|
}
|
||||||
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
||||||
}
|
}
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
||||||
if (StrUtil.isBlank(dataId)) {
|
if (StrUtil.isBlank(dataId)) {
|
||||||
return this.submitNewTask(processInstanceId, taskId,
|
return this.submitNewTask(processInstanceId, taskId,
|
||||||
@@ -660,6 +661,7 @@ public class FlowOnlineOperationController {
|
|||||||
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
taskVariableData.put(FlowConstant.COPY_DATA_KEY, copyData);
|
||||||
}
|
}
|
||||||
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
FlowTaskComment flowTaskComment = BeanUtil.copyProperties(flowTaskCommentDto, FlowTaskComment.class);
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
// 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。
|
// 保存在线表单提交的数据,同时启动流程和自动完成第一个用户任务。
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
flowOnlineOperationService.saveNewAndStartProcess(
|
flowOnlineOperationService.saveNewAndStartProcess(
|
||||||
@@ -853,6 +855,7 @@ public class FlowOnlineOperationController {
|
|||||||
|
|
||||||
private JSONObject buildUserTaskData(
|
private JSONObject buildUserTaskData(
|
||||||
String businessKey, OnlineDatasource datasource, List<OnlineDatasourceRelation> relationList) {
|
String businessKey, OnlineDatasource datasource, List<OnlineDatasourceRelation> relationList) {
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasource.getDatasourceId());
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
JSONObject jsonData = new JSONObject();
|
JSONObject jsonData = new JSONObject();
|
||||||
List<OnlineDatasourceRelation> oneToOneRelationList = relationList.stream()
|
List<OnlineDatasourceRelation> oneToOneRelationList = relationList.stream()
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||||
}
|
}
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
onlineOperationService.saveNew(masterTable, masterData);
|
onlineOperationService.saveNew(masterTable, masterData);
|
||||||
} else {
|
} else {
|
||||||
@@ -146,8 +147,8 @@ public class OnlineOperationController {
|
|||||||
if (!verifyResult.isSuccess()) {
|
if (!verifyResult.isSuccess()) {
|
||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
onlineOperationService.saveNew(relation.getSlaveTable(), slaveData);
|
onlineOperationService.saveNew(verifyResult.getData().getSlaveTable(), slaveData);
|
||||||
return ResponseResult.success();
|
return ResponseResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,6 +180,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||||
}
|
}
|
||||||
OnlineTable masterTable = datasource.getMasterTable();
|
OnlineTable masterTable = datasource.getMasterTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (slaveData == null) {
|
if (slaveData == null) {
|
||||||
if (!onlineOperationService.update(masterTable, masterData)) {
|
if (!onlineOperationService.update(masterTable, masterData)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
@@ -218,6 +220,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineTable slaveTable = verifyResult.getData().getSlaveTable();
|
OnlineTable slaveTable = verifyResult.getData().getSlaveTable();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
if (!onlineOperationService.update(slaveTable, slaveData)) {
|
if (!onlineOperationService.update(slaveTable, slaveData)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
}
|
}
|
||||||
@@ -329,6 +332,7 @@ public class OnlineOperationController {
|
|||||||
List<OnlineDatasourceRelation> allRelationList = relationListResult.getData();
|
List<OnlineDatasourceRelation> allRelationList = relationListResult.getData();
|
||||||
List<OnlineDatasourceRelation> oneToOneRelationList = allRelationList.stream()
|
List<OnlineDatasourceRelation> oneToOneRelationList = allRelationList.stream()
|
||||||
.filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList());
|
.filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList());
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
Map<String, Object> result = onlineOperationService.getMasterData(
|
Map<String, Object> result = onlineOperationService.getMasterData(
|
||||||
datasource.getMasterTable(), oneToOneRelationList, allRelationList, dataId);
|
datasource.getMasterTable(), oneToOneRelationList, allRelationList, dataId);
|
||||||
return ResponseResult.success(result);
|
return ResponseResult.success(result);
|
||||||
@@ -355,6 +359,7 @@ public class OnlineOperationController {
|
|||||||
if (!verifyResult.isSuccess()) {
|
if (!verifyResult.isSuccess()) {
|
||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
Map<String, Object> result = onlineOperationService.getSlaveData(verifyResult.getData(), dataId);
|
Map<String, Object> result = onlineOperationService.getSlaveData(verifyResult.getData(), dataId);
|
||||||
return ResponseResult.success(result);
|
return ResponseResult.success(result);
|
||||||
}
|
}
|
||||||
@@ -547,6 +552,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(orderByResult);
|
return ResponseResult.errorFrom(orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, pageParam);
|
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, pageParam);
|
||||||
return ResponseResult.success(pageData);
|
return ResponseResult.success(pageData);
|
||||||
@@ -606,6 +612,7 @@ public class OnlineOperationController {
|
|||||||
ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST, orderByResult);
|
ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST, orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, null);
|
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, null);
|
||||||
Map<String, String> headerMap = this.makeExportHeaderMap(masterTable, allRelationList, exportInfoList);
|
Map<String, String> headerMap = this.makeExportHeaderMap(masterTable, allRelationList, exportInfoList);
|
||||||
@@ -664,6 +671,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(orderByResult);
|
return ResponseResult.errorFrom(orderByResult);
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, pageParam);
|
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, pageParam);
|
||||||
return ResponseResult.success(pageData);
|
return ResponseResult.success(pageData);
|
||||||
@@ -716,6 +724,7 @@ public class OnlineOperationController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String orderBy = orderByResult.getData();
|
String orderBy = orderByResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, null);
|
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, null);
|
||||||
Map<String, String> headerMap =
|
Map<String, String> headerMap =
|
||||||
@@ -813,6 +822,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(relationListResult);
|
return ResponseResult.errorFrom(relationListResult);
|
||||||
}
|
}
|
||||||
List<OnlineDatasourceRelation> relationList = relationListResult.getData();
|
List<OnlineDatasourceRelation> relationList = relationListResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
for (String dataId : dataIdList) {
|
for (String dataId : dataIdList) {
|
||||||
if (!onlineOperationService.delete(masterTable, relationList, dataId)) {
|
if (!onlineOperationService.delete(masterTable, relationList, dataId)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
@@ -829,6 +839,7 @@ public class OnlineOperationController {
|
|||||||
return ResponseResult.errorFrom(verifyResult);
|
return ResponseResult.errorFrom(verifyResult);
|
||||||
}
|
}
|
||||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
OnlineDatasourceRelation relation = verifyResult.getData();
|
||||||
|
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||||
for (String dataId : dataIdList) {
|
for (String dataId : dataIdList) {
|
||||||
if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) {
|
if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) {
|
||||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<result column="page_code" jdbcType="VARCHAR" property="pageCode"/>
|
<result column="page_code" jdbcType="VARCHAR" property="pageCode"/>
|
||||||
<result column="page_name" jdbcType="VARCHAR" property="pageName"/>
|
<result column="page_name" jdbcType="VARCHAR" property="pageName"/>
|
||||||
<result column="page_type" jdbcType="INTEGER" property="pageType"/>
|
<result column="page_type" jdbcType="INTEGER" property="pageType"/>
|
||||||
|
<result column="extra_json" jdbcType="VARCHAR" property="extraJson"/>
|
||||||
<result column="status" jdbcType="INTEGER" property="status"/>
|
<result column="status" jdbcType="INTEGER" property="status"/>
|
||||||
<result column="published" jdbcType="BOOLEAN" property="published"/>
|
<result column="published" jdbcType="BOOLEAN" property="published"/>
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
||||||
@@ -61,10 +62,10 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getOnlinePageListByDatasourceId" resultMap="BaseResultMap">
|
<select id="getOnlinePageListByDatasourceId" resultMap="BaseResultMap">
|
||||||
SELECT a.* FROM zz_online_page a, zz_online_page_datasource b
|
SELECT zz_online_page.* FROM zz_online_page, zz_online_page_datasource b
|
||||||
<where>
|
<where>
|
||||||
<include refid="filterRef"/>
|
<include refid="filterRef"/>
|
||||||
AND b.datasource_id = #{datasourceI} AND b.page_id = a.page_id
|
AND b.datasource_id = #{datasourceId} AND b.page_id = zz_online_page.page_id
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ public class OnlinePageDto {
|
|||||||
@ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!")
|
@ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@Schema(description = "扩展数据")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -55,6 +55,12 @@ public class OnlinePage {
|
|||||||
@TableField(value = "page_type")
|
@TableField(value = "page_type")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@TableField(value = "extra_json")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
package com.orangeforms.common.online.object;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.object.CallResult;
|
||||||
|
import com.orangeforms.common.online.dto.OnlineFilterDto;
|
||||||
|
import com.orangeforms.common.online.model.OnlineTable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单后台扩展可执行接口,所有在线表单的后台扩展类都需要继承该接口。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
public class BaseOnlineExtendExecutor {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之前执行的操作。通常可以做一些数据插入之前的验证操作,或者是对待插入的数据,根据需要进行调整和计算。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
*/
|
||||||
|
public void afterInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据插入之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeInsert(OnlineTable table, JSONObject data) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
*/
|
||||||
|
public void afterInsert(OnlineTable table, JSONObject data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeUpdateWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。key是字段名,value是字段值。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。key是关联从表对象。
|
||||||
|
* value是关联的从表数据列表。value是JSONObject对象列表,每个JSONObject的key是从表字段名,value是从表字段值。
|
||||||
|
*/
|
||||||
|
public void afterUpdateWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。key是字段名,value是字段值。
|
||||||
|
*/
|
||||||
|
public void afterUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。对象类型和实际字段值类型一致。
|
||||||
|
* @return 返回调用结果对象,成功则继续执行,否则调用时会抛出异常,异常信息为具体的错误信息。
|
||||||
|
*/
|
||||||
|
public CallResult beforeDelete(OnlineTable table, Object dataId) {
|
||||||
|
return CallResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。对象类型和实际字段值类型一致。
|
||||||
|
*/
|
||||||
|
public void afterDelete(OnlineTable table, Object dataId) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param filterList 过滤条件。如果有新的过滤条件,可直接添加到该过滤列表。
|
||||||
|
*/
|
||||||
|
public void beforeSelectList(OnlineTable table, List<OnlineFilterDto> filterList) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param resultList 查询结果。如果有修改,可直接在当前参数修改后即可生效。
|
||||||
|
*/
|
||||||
|
public void afterSelectList(OnlineTable table, List<Map<String, Object>> resultList) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据单条详情查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param result 查询结果。如果有修改,可直接在当前参数修改后即可生效。
|
||||||
|
*/
|
||||||
|
public void afterSelectOne(OnlineTable table, Map<String, Object> result) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.orangeforms.common.online.object;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单页面的扩展数据对象。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OnlinePageExtra {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 后台扩展类。
|
||||||
|
*/
|
||||||
|
private String extendClass;
|
||||||
|
}
|
||||||
@@ -97,6 +97,8 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
private CacheManager cacheManager;
|
private CacheManager cacheManager;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OnlineDataSourceUtil dataSourceUtil;
|
private OnlineDataSourceUtil dataSourceUtil;
|
||||||
|
@Autowired
|
||||||
|
private OnlineExtendExecutorUtil onlineExtendExecutorUtil;
|
||||||
|
|
||||||
private static final String DICT_MAP_SUFFIX = "DictMap";
|
private static final String DICT_MAP_SUFFIX = "DictMap";
|
||||||
private static final String DICT_MAP_LIST_SUFFIX = "DictMapList";
|
private static final String DICT_MAP_LIST_SUFFIX = "DictMapList";
|
||||||
@@ -150,7 +152,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doBeforeInsert(table, data);
|
||||||
onlineOperationMapper.insert(table.getTableName(), columnNames, columnValueList);
|
onlineOperationMapper.insert(table.getTableName(), columnNames, columnValueList);
|
||||||
|
onlineExtendExecutorUtil.doAfterInsert(table, data);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,25 +165,27 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
OnlineTable masterTable,
|
OnlineTable masterTable,
|
||||||
JSONObject masterData,
|
JSONObject masterData,
|
||||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||||
|
onlineExtendExecutorUtil.doBeforeInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||||
Object id = this.saveNew(masterTable, masterData);
|
Object id = this.saveNew(masterTable, masterData);
|
||||||
if (slaveDataListMap == null) {
|
if (slaveDataListMap != null) {
|
||||||
return id;
|
// 迭代多个关联列表。
|
||||||
}
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||||
// 迭代多个关联列表。
|
Long masterColumnId = entry.getKey().getMasterColumnId();
|
||||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
||||||
Long masterColumnId = entry.getKey().getMasterColumnId();
|
Object columnValue = masterData.get(masterColumn.getColumnName());
|
||||||
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
||||||
Object columnValue = masterData.get(masterColumn.getColumnName());
|
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
||||||
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
// 迭代关联中的数据集合
|
||||||
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
for (JSONObject slaveData : entry.getValue()) {
|
||||||
// 迭代关联中的数据集合
|
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
||||||
for (JSONObject slaveData : entry.getValue()) {
|
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
||||||
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
this.saveNew(slaveTable, slaveData);
|
||||||
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
}
|
||||||
this.saveNew(slaveTable, slaveData);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,7 +227,10 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String dataPermFilter = this.buildDataPermFilter(table);
|
String dataPermFilter = this.buildDataPermFilter(table);
|
||||||
return this.doUpdate(table, updateColumnList, filterList, dataPermFilter);
|
onlineExtendExecutorUtil.doBeforeUpdate(table, data);
|
||||||
|
boolean r = this.doUpdate(table, updateColumnList, filterList, dataPermFilter);
|
||||||
|
onlineExtendExecutorUtil.doAfterUpdate(table, data);
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@MultiDatabaseWriteMethod
|
@MultiDatabaseWriteMethod
|
||||||
@@ -246,16 +255,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
JSONObject masterData,
|
JSONObject masterData,
|
||||||
Long datasourceId,
|
Long datasourceId,
|
||||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||||
|
onlineExtendExecutorUtil.doBeforeUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||||
this.update(masterTable, masterData);
|
this.update(masterTable, masterData);
|
||||||
if (slaveDataListMap == null) {
|
if (slaveDataListMap != null) {
|
||||||
return;
|
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
||||||
}
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
||||||
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
Long relationId = relationEntry.getKey().getRelationId();
|
||||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
this.updateRelationData(
|
||||||
Long relationId = relationEntry.getKey().getRelationId();
|
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
||||||
this.updateRelationData(
|
}
|
||||||
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@MultiDatabaseWriteMethod
|
@MultiDatabaseWriteMethod
|
||||||
@@ -298,6 +309,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
List<OnlineFilterDto> filterList =
|
List<OnlineFilterDto> filterList =
|
||||||
this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId);
|
this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId);
|
||||||
String dataPermFilter = this.buildDataPermFilter(table);
|
String dataPermFilter = this.buildDataPermFilter(table);
|
||||||
|
OnlineColumn pkCol = table.getPrimaryKeyColumn();
|
||||||
|
Object id = onlineOperationHelper.convertToTypeValue(pkCol, dataId);
|
||||||
|
onlineExtendExecutorUtil.doBeforeDelete(table, id);
|
||||||
if (table.getLogicDeleteColumn() == null) {
|
if (table.getLogicDeleteColumn() == null) {
|
||||||
if (this.doDelete(table, filterList, dataPermFilter) != 1) {
|
if (this.doDelete(table, filterList, dataPermFilter) != 1) {
|
||||||
return false;
|
return false;
|
||||||
@@ -306,6 +320,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter);
|
this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter);
|
||||||
}
|
}
|
||||||
if (CollUtil.isEmpty(relationList)) {
|
if (CollUtil.isEmpty(relationList)) {
|
||||||
|
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Map<String, Object> masterData = getMasterData(table, null, null, dataId);
|
Map<String, Object> masterData = getMasterData(table, null, null, dataId);
|
||||||
@@ -329,6 +344,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.doLogicDelete(slaveTable, slaveColumn, columnValue, null);
|
this.doLogicDelete(slaveTable, slaveColumn, columnValue, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,7 +405,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||||
}
|
}
|
||||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||||
return resultList.get(0);
|
Map<String, Object> result = resultList.get(0);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectOne(table, result);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -404,7 +422,11 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
slaveTable, null, selectFields, filterList, dataPermFilter, null, null);
|
slaveTable, null, selectFields, filterList, dataPermFilter, null, null);
|
||||||
List<Map<String, Object>> resultList = pageData.getDataList();
|
List<Map<String, Object>> resultList = pageData.getDataList();
|
||||||
this.buildDataListWithDict(resultList, slaveTable);
|
this.buildDataListWithDict(resultList, slaveTable);
|
||||||
return CollUtil.isEmpty(resultList) ? null : resultList.get(0);
|
Map<String, Object> result = CollUtil.isEmpty(resultList) ? null : resultList.get(0);
|
||||||
|
if (result != null) {
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectOne(slaveTable, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -416,6 +438,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
String orderBy,
|
String orderBy,
|
||||||
MyPageParam pageParam) {
|
MyPageParam pageParam) {
|
||||||
this.normalizeFilterList(table, oneToOneRelationList, filterList);
|
this.normalizeFilterList(table, oneToOneRelationList, filterList);
|
||||||
|
onlineExtendExecutorUtil.doBeforeSelectList(table, filterList);
|
||||||
// 组件表关联数据。
|
// 组件表关联数据。
|
||||||
List<JoinTableInfo> joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList);
|
List<JoinTableInfo> joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList);
|
||||||
// 拼接关联表的select fields字段。
|
// 拼接关联表的select fields字段。
|
||||||
@@ -435,6 +458,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||||
}
|
}
|
||||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectList(table, resultList);
|
||||||
return pageData;
|
return pageData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,6 +466,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
public MyPageData<Map<String, Object>> getSlaveDataList(
|
public MyPageData<Map<String, Object>> getSlaveDataList(
|
||||||
OnlineDatasourceRelation relation, List<OnlineFilterDto> filterList, String orderBy, MyPageParam pageParam) {
|
OnlineDatasourceRelation relation, List<OnlineFilterDto> filterList, String orderBy, MyPageParam pageParam) {
|
||||||
OnlineTable slaveTable = relation.getSlaveTable();
|
OnlineTable slaveTable = relation.getSlaveTable();
|
||||||
|
onlineExtendExecutorUtil.doBeforeSelectList(slaveTable, filterList);
|
||||||
this.normalizeFilterList(slaveTable, null, filterList);
|
this.normalizeFilterList(slaveTable, null, filterList);
|
||||||
// 拼接关联表的select fields字段。
|
// 拼接关联表的select fields字段。
|
||||||
String selectFields = this.makeSelectFields(slaveTable, null);
|
String selectFields = this.makeSelectFields(slaveTable, null);
|
||||||
@@ -449,6 +474,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
MyPageData<Map<String, Object>> pageData =
|
MyPageData<Map<String, Object>> pageData =
|
||||||
this.getList(slaveTable, null, selectFields, filterList, dataPermFilter, orderBy, pageParam);
|
this.getList(slaveTable, null, selectFields, filterList, dataPermFilter, orderBy, pageParam);
|
||||||
this.buildDataListWithDict(pageData.getDataList(), slaveTable);
|
this.buildDataListWithDict(pageData.getDataList(), slaveTable);
|
||||||
|
onlineExtendExecutorUtil.doAfterSelectList(slaveTable, pageData.getDataList());
|
||||||
return pageData;
|
return pageData;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1234,6 +1260,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
|||||||
return joinInfoList;
|
return joinInfoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<OnlineTable, List<JSONObject>> convertToSlaveTableAndDataList(
|
||||||
|
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||||
|
Map<OnlineTable, List<JSONObject>> resultMap = MapUtil.newHashMap();
|
||||||
|
if (slaveDataListMap == null) {
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||||
|
resultMap.put(entry.getKey().getSlaveTable(), entry.getValue());
|
||||||
|
}
|
||||||
|
return resultMap;
|
||||||
|
}
|
||||||
|
|
||||||
private String makeSelectFields(OnlineTable table, String relationVariable) {
|
private String makeSelectFields(OnlineTable table, String relationVariable) {
|
||||||
DataSourceProvider provider = dataSourceUtil.getProvider(table.getDblinkId());
|
DataSourceProvider provider = dataSourceUtil.getProvider(table.getDblinkId());
|
||||||
StringBuilder selectFieldBuider = new StringBuilder(512);
|
StringBuilder selectFieldBuider = new StringBuilder(512);
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
package com.orangeforms.common.online.util;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.object.CallResult;
|
||||||
|
import com.orangeforms.common.core.util.ContextUtil;
|
||||||
|
import com.orangeforms.common.online.dto.OnlineFilterDto;
|
||||||
|
import com.orangeforms.common.online.exception.OnlineRuntimeException;
|
||||||
|
import com.orangeforms.common.online.model.OnlineTable;
|
||||||
|
import com.orangeforms.common.online.object.BaseOnlineExtendExecutor;
|
||||||
|
import com.orangeforms.common.online.service.OnlineTableService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在线表单后台扩展执行接口工具类。
|
||||||
|
*
|
||||||
|
* @author Jerry
|
||||||
|
* @date 2024-04-15
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class OnlineExtendExecutorUtil {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private OnlineTableService onlineTableService;
|
||||||
|
@Autowired
|
||||||
|
private OnlineOperationHelper onlineOperationHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置后台扩展执行器到线程本地化对象。
|
||||||
|
*
|
||||||
|
* @param e 后台扩展执行器。
|
||||||
|
*/
|
||||||
|
public static void setOnlineExtendExecutorToLocal(BaseOnlineExtendExecutor e) {
|
||||||
|
ContextUtil.getHttpRequest().setAttribute(BaseOnlineExtendExecutor.class.getSimpleName(), e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前线程的后台扩展执行器。
|
||||||
|
*
|
||||||
|
* @return 当前线程的后台扩展执行器。
|
||||||
|
*/
|
||||||
|
public static BaseOnlineExtendExecutor getOnlineExtendExecutorFromLocal() {
|
||||||
|
return (BaseOnlineExtendExecutor) ContextUtil.getHttpRequest().getAttribute(BaseOnlineExtendExecutor.class.getSimpleName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行插入前操作。
|
||||||
|
*
|
||||||
|
* @param table 数据表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doBeforeInsert(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeInsert(table, data);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行插入后操作。
|
||||||
|
*
|
||||||
|
* @param table 数据表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doAfterInsert(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterInsert(table, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doBeforeInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeInsertWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联插入之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doAfterInsertWithRelation(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterInsertWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doBeforeUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeUpdate(table, data);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param data 表数据。
|
||||||
|
*/
|
||||||
|
public void doAfterUpdate(OnlineTable table, JSONObject data) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterUpdate(table, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doBeforeUpdateWithRelationn(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeUpdateWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主从表数据级联更新之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param masterTable 主表对象。
|
||||||
|
* @param masterData 主表数据。
|
||||||
|
* @param slaveTableAndDataMap 从表对象和数据的映射关系。
|
||||||
|
*/
|
||||||
|
public void doAfterUpdateWithRelationn(
|
||||||
|
OnlineTable masterTable, JSONObject masterData, Map<OnlineTable, List<JSONObject>> slaveTableAndDataMap) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterUpdateWithRelation(masterTable, masterData, slaveTableAndDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。
|
||||||
|
*/
|
||||||
|
public void doBeforeDelete(OnlineTable table, Object dataId) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
CallResult r = executor.beforeDelete(table, dataId);
|
||||||
|
if (!r.isSuccess()) {
|
||||||
|
throw new OnlineRuntimeException(r.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据删除之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param dataId 表数据主键Id。
|
||||||
|
*/
|
||||||
|
public void doAfterDelete(OnlineTable table, Object dataId) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterDelete(table, dataId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据单条详情查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param result 即将返回给前端的结果数据。
|
||||||
|
*/
|
||||||
|
public void doAfterSelectOne(OnlineTable table, Map<String, Object> result) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterSelectOne(table, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之前执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param filterList 过滤条件,如果有新的过滤条件,可直接添加到该过滤列表。
|
||||||
|
*/
|
||||||
|
public void doBeforeSelectList(OnlineTable table, List<OnlineFilterDto> filterList) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.beforeSelectList(table, filterList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表数据列表查询之后执行的操作。
|
||||||
|
*
|
||||||
|
* @param table 表对象。
|
||||||
|
* @param resultList 即将返回给前端的结果数据。
|
||||||
|
*/
|
||||||
|
public void doAfterSelectList(OnlineTable table, List<Map<String, Object>> resultList) {
|
||||||
|
BaseOnlineExtendExecutor executor = getOnlineExtendExecutorFromLocal();
|
||||||
|
if (executor != null) {
|
||||||
|
executor.afterSelectList(table, resultList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,35 +6,39 @@ import cn.hutool.core.map.MapUtil;
|
|||||||
import cn.hutool.core.util.BooleanUtil;
|
import cn.hutool.core.util.BooleanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.orangeforms.common.core.cache.CacheConfig;
|
||||||
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
import com.orangeforms.common.core.constant.ErrorCodeEnum;
|
||||||
import com.orangeforms.common.core.constant.ObjectFieldType;
|
import com.orangeforms.common.core.constant.ObjectFieldType;
|
||||||
|
import com.orangeforms.common.core.exception.MyRuntimeException;
|
||||||
import com.orangeforms.common.core.object.ResponseResult;
|
import com.orangeforms.common.core.object.ResponseResult;
|
||||||
import com.orangeforms.common.core.object.TokenData;
|
import com.orangeforms.common.core.object.TokenData;
|
||||||
import com.orangeforms.common.core.upload.BaseUpDownloader;
|
import com.orangeforms.common.core.upload.BaseUpDownloader;
|
||||||
import com.orangeforms.common.core.upload.UpDownloaderFactory;
|
import com.orangeforms.common.core.upload.UpDownloaderFactory;
|
||||||
import com.orangeforms.common.core.upload.UploadResponseInfo;
|
import com.orangeforms.common.core.upload.UploadResponseInfo;
|
||||||
import com.orangeforms.common.core.upload.UploadStoreTypeEnum;
|
import com.orangeforms.common.core.upload.UploadStoreTypeEnum;
|
||||||
|
import com.orangeforms.common.core.util.ApplicationContextHolder;
|
||||||
import com.orangeforms.common.online.config.OnlineProperties;
|
import com.orangeforms.common.online.config.OnlineProperties;
|
||||||
import com.orangeforms.common.online.model.OnlineColumn;
|
import com.orangeforms.common.online.model.*;
|
||||||
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.model.constant.FieldKind;
|
||||||
import com.orangeforms.common.online.model.constant.RelationType;
|
import com.orangeforms.common.online.model.constant.RelationType;
|
||||||
|
import com.orangeforms.common.online.object.BaseOnlineExtendExecutor;
|
||||||
import com.orangeforms.common.online.object.ColumnData;
|
import com.orangeforms.common.online.object.ColumnData;
|
||||||
import com.orangeforms.common.online.service.OnlineDatasourceRelationService;
|
import com.orangeforms.common.online.object.OnlinePageExtra;
|
||||||
import com.orangeforms.common.online.service.OnlineDatasourceService;
|
import com.orangeforms.common.online.service.*;
|
||||||
import com.orangeforms.common.online.service.OnlineOperationService;
|
|
||||||
import com.orangeforms.common.online.service.OnlineTableService;
|
|
||||||
import com.orangeforms.common.redis.cache.SessionCacheHelper;
|
import com.orangeforms.common.redis.cache.SessionCacheHelper;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.cache.Cache;
|
||||||
|
import org.springframework.cache.CacheManager;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -57,6 +61,8 @@ public class OnlineOperationHelper {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private OnlineTableService onlineTableService;
|
private OnlineTableService onlineTableService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private OnlinePageService onlinePageService;
|
||||||
|
@Autowired
|
||||||
private OnlineOperationService onlineOperationService;
|
private OnlineOperationService onlineOperationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OnlineProperties onlineProperties;
|
private OnlineProperties onlineProperties;
|
||||||
@@ -64,6 +70,8 @@ public class OnlineOperationHelper {
|
|||||||
private UpDownloaderFactory upDownloaderFactory;
|
private UpDownloaderFactory upDownloaderFactory;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SessionCacheHelper cacheHelper;
|
private SessionCacheHelper cacheHelper;
|
||||||
|
@Resource(name = "caffeineCacheManager")
|
||||||
|
private CacheManager cacheManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证并获取数据源数据。
|
* 验证并获取数据源数据。
|
||||||
@@ -361,6 +369,37 @@ public class OnlineOperationHelper {
|
|||||||
ResponseResult.output(ResponseResult.success(responseInfo));
|
ResponseResult.output(ResponseResult.success(responseInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将与指定数据源Id关联的OnlinePage对象中,配置的在线表单后台扩展执行器对象写入本地现成。
|
||||||
|
*
|
||||||
|
* @param datasourceId 数据源Id。
|
||||||
|
*/
|
||||||
|
public void enableOnlineExtendExecutor(Long datasourceId) {
|
||||||
|
Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.ONLINE_EXTEND_EXECUTOR_CACHE.name());
|
||||||
|
Assert.notNull(cache, "Cache ONLINE_EXTEND_EXECUTOR_CACHE can't be NULL");
|
||||||
|
BaseOnlineExtendExecutor executor = cache.get(datasourceId, BaseOnlineExtendExecutor.class);
|
||||||
|
if (executor != null) {
|
||||||
|
OnlineExtendExecutorUtil.setOnlineExtendExecutorToLocal(executor);
|
||||||
|
}
|
||||||
|
OnlinePage page = onlinePageService.getOnlinePageListByDatasourceId(datasourceId).get(0);
|
||||||
|
if (StrUtil.isNotBlank(page.getExtraJson())) {
|
||||||
|
OnlinePageExtra pageExtra = JSON.parseObject(page.getExtraJson(), OnlinePageExtra.class);
|
||||||
|
if (StrUtil.isNotBlank(pageExtra.getExtendClass())) {
|
||||||
|
try {
|
||||||
|
Object extendClass = ApplicationContextHolder.getBean(Class.forName(pageExtra.getExtendClass()));
|
||||||
|
if (!(extendClass instanceof BaseOnlineExtendExecutor)) {
|
||||||
|
throw new MyRuntimeException("在线表单扩展类没有实现 [BaseOnlineExtendExecutor] 接口!");
|
||||||
|
}
|
||||||
|
executor = (BaseOnlineExtendExecutor) extendClass;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new MyRuntimeException("在线表单扩展类没有实现 [BaseOnlineExtendExecutor] 接口!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cache.put(datasourceId, executor);
|
||||||
|
OnlineExtendExecutorUtil.setOnlineExtendExecutorToLocal(executor);
|
||||||
|
}
|
||||||
|
|
||||||
private ResponseResult<OnlineColumn> doVerifyUpDownloadFileColumn(
|
private ResponseResult<OnlineColumn> doVerifyUpDownloadFileColumn(
|
||||||
OnlineTable table, String fieldName, Boolean asImage) {
|
OnlineTable table, String fieldName, Boolean asImage) {
|
||||||
OnlineColumn column = this.getOnlineColumnByName(table, fieldName);
|
OnlineColumn column = this.getOnlineColumnByName(table, fieldName);
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ public class OnlinePageVo {
|
|||||||
@Schema(description = "页面类型")
|
@Schema(description = "页面类型")
|
||||||
private Integer pageType;
|
private Integer pageType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据。
|
||||||
|
*/
|
||||||
|
@Schema(description = "扩展数据")
|
||||||
|
private String extraJson;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 页面编辑状态。
|
* 页面编辑状态。
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,19 +1,3 @@
|
|||||||
/*
|
|
||||||
Navicat Premium Data Transfer
|
|
||||||
|
|
||||||
Source Server : hw-test
|
|
||||||
Source Server Type : MySQL
|
|
||||||
Source Server Version : 80024
|
|
||||||
Source Host : localhost:3306
|
|
||||||
Source Schema : zzdemo-online-open
|
|
||||||
|
|
||||||
Target Server Type : MySQL
|
|
||||||
Target Server Version : 80024
|
|
||||||
File Encoding : 65001
|
|
||||||
|
|
||||||
Date: 05/07/2024 22:26:38
|
|
||||||
*/
|
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
@@ -1896,6 +1880,7 @@ CREATE TABLE `zz_online_page` (
|
|||||||
`page_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '页面编码',
|
`page_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '页面编码',
|
||||||
`page_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称',
|
`page_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称',
|
||||||
`page_type` int NOT NULL COMMENT '页面类型',
|
`page_type` int NOT NULL COMMENT '页面类型',
|
||||||
|
`extra_json` varchar(2048) COLLATE utf8mb4_bin COMMENT '扩展数据',
|
||||||
`status` int NOT NULL COMMENT '页面编辑状态',
|
`status` int NOT NULL COMMENT '页面编辑状态',
|
||||||
`published` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否发布',
|
`published` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否发布',
|
||||||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||||||
|
|||||||
Reference in New Issue
Block a user