mirror of
https://gitee.com/orangeform/orange-admin.git
synced 2026-01-17 18:46:36 +08:00
commit:支持后台扩展类
This commit is contained in:
@@ -111,6 +111,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||
}
|
||||
OnlineTable masterTable = datasource.getMasterTable();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
if (slaveData == null) {
|
||||
onlineOperationService.saveNew(masterTable, masterData);
|
||||
} else {
|
||||
@@ -146,8 +147,8 @@ public class OnlineOperationController {
|
||||
if (!verifyResult.isSuccess()) {
|
||||
return ResponseResult.errorFrom(verifyResult);
|
||||
}
|
||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
||||
onlineOperationService.saveNew(relation.getSlaveTable(), slaveData);
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
onlineOperationService.saveNew(verifyResult.getData().getSlaveTable(), slaveData);
|
||||
return ResponseResult.success();
|
||||
}
|
||||
|
||||
@@ -179,6 +180,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION);
|
||||
}
|
||||
OnlineTable masterTable = datasource.getMasterTable();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
if (slaveData == null) {
|
||||
if (!onlineOperationService.update(masterTable, masterData)) {
|
||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||
@@ -218,6 +220,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.errorFrom(verifyResult);
|
||||
}
|
||||
OnlineTable slaveTable = verifyResult.getData().getSlaveTable();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
if (!onlineOperationService.update(slaveTable, slaveData)) {
|
||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||
}
|
||||
@@ -329,6 +332,7 @@ public class OnlineOperationController {
|
||||
List<OnlineDatasourceRelation> allRelationList = relationListResult.getData();
|
||||
List<OnlineDatasourceRelation> oneToOneRelationList = allRelationList.stream()
|
||||
.filter(r -> r.getRelationType().equals(RelationType.ONE_TO_ONE)).collect(Collectors.toList());
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
Map<String, Object> result = onlineOperationService.getMasterData(
|
||||
datasource.getMasterTable(), oneToOneRelationList, allRelationList, dataId);
|
||||
return ResponseResult.success(result);
|
||||
@@ -355,6 +359,7 @@ public class OnlineOperationController {
|
||||
if (!verifyResult.isSuccess()) {
|
||||
return ResponseResult.errorFrom(verifyResult);
|
||||
}
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
Map<String, Object> result = onlineOperationService.getSlaveData(verifyResult.getData(), dataId);
|
||||
return ResponseResult.success(result);
|
||||
}
|
||||
@@ -547,6 +552,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.errorFrom(orderByResult);
|
||||
}
|
||||
String orderBy = orderByResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, pageParam);
|
||||
return ResponseResult.success(pageData);
|
||||
@@ -606,6 +612,7 @@ public class OnlineOperationController {
|
||||
ResponseResult.output(HttpServletResponse.SC_BAD_REQUEST, orderByResult);
|
||||
}
|
||||
String orderBy = orderByResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
MyPageData<Map<String, Object>> pageData = onlineOperationService.getMasterDataList(
|
||||
masterTable, oneToOneRelationList, allRelationList, filterDtoList, orderBy, null);
|
||||
Map<String, String> headerMap = this.makeExportHeaderMap(masterTable, allRelationList, exportInfoList);
|
||||
@@ -664,6 +671,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.errorFrom(orderByResult);
|
||||
}
|
||||
String orderBy = orderByResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
MyPageData<Map<String, Object>> pageData =
|
||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, pageParam);
|
||||
return ResponseResult.success(pageData);
|
||||
@@ -716,6 +724,7 @@ public class OnlineOperationController {
|
||||
return;
|
||||
}
|
||||
String orderBy = orderByResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
MyPageData<Map<String, Object>> pageData =
|
||||
onlineOperationService.getSlaveDataList(relation, filterDtoList, orderBy, null);
|
||||
Map<String, String> headerMap =
|
||||
@@ -813,6 +822,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.errorFrom(relationListResult);
|
||||
}
|
||||
List<OnlineDatasourceRelation> relationList = relationListResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
for (String dataId : dataIdList) {
|
||||
if (!onlineOperationService.delete(masterTable, relationList, dataId)) {
|
||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||
@@ -829,6 +839,7 @@ public class OnlineOperationController {
|
||||
return ResponseResult.errorFrom(verifyResult);
|
||||
}
|
||||
OnlineDatasourceRelation relation = verifyResult.getData();
|
||||
onlineOperationHelper.enableOnlineExtendExecutor(datasourceId);
|
||||
for (String dataId : dataIdList) {
|
||||
if (!onlineOperationService.delete(relation.getSlaveTable(), null, dataId)) {
|
||||
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<result column="page_code" jdbcType="VARCHAR" property="pageCode"/>
|
||||
<result column="page_name" jdbcType="VARCHAR" property="pageName"/>
|
||||
<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="published" jdbcType="BOOLEAN" property="published"/>
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
|
||||
@@ -61,10 +62,10 @@
|
||||
</select>
|
||||
|
||||
<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>
|
||||
<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>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -48,6 +48,12 @@ public class OnlinePageDto {
|
||||
@ConstDictRef(constDictClass = PageType.class, message = "数据验证失败,页面类型为无效值!")
|
||||
private Integer pageType;
|
||||
|
||||
/**
|
||||
* 扩展数据。
|
||||
*/
|
||||
@Schema(description = "扩展数据")
|
||||
private String extraJson;
|
||||
|
||||
/**
|
||||
* 页面编辑状态。
|
||||
*/
|
||||
|
||||
@@ -55,6 +55,12 @@ public class OnlinePage {
|
||||
@TableField(value = "page_type")
|
||||
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;
|
||||
@Autowired
|
||||
private OnlineDataSourceUtil dataSourceUtil;
|
||||
@Autowired
|
||||
private OnlineExtendExecutorUtil onlineExtendExecutorUtil;
|
||||
|
||||
private static final String DICT_MAP_SUFFIX = "DictMap";
|
||||
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);
|
||||
onlineExtendExecutorUtil.doAfterInsert(table, data);
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -161,25 +165,27 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
OnlineTable masterTable,
|
||||
JSONObject masterData,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||
onlineExtendExecutorUtil.doBeforeInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||
Object id = this.saveNew(masterTable, masterData);
|
||||
if (slaveDataListMap == null) {
|
||||
return id;
|
||||
}
|
||||
// 迭代多个关联列表。
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||
Long masterColumnId = entry.getKey().getMasterColumnId();
|
||||
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
||||
Object columnValue = masterData.get(masterColumn.getColumnName());
|
||||
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
||||
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
||||
// 迭代关联中的数据集合
|
||||
for (JSONObject slaveData : entry.getValue()) {
|
||||
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
||||
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
||||
this.saveNew(slaveTable, slaveData);
|
||||
if (slaveDataListMap != null) {
|
||||
// 迭代多个关联列表。
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> entry : slaveDataListMap.entrySet()) {
|
||||
Long masterColumnId = entry.getKey().getMasterColumnId();
|
||||
OnlineColumn masterColumn = masterTable.getColumnMap().get(masterColumnId);
|
||||
Object columnValue = masterData.get(masterColumn.getColumnName());
|
||||
OnlineTable slaveTable = entry.getKey().getSlaveTable();
|
||||
OnlineColumn slaveColumn = slaveTable.getColumnMap().get(entry.getKey().getSlaveColumnId());
|
||||
// 迭代关联中的数据集合
|
||||
for (JSONObject slaveData : entry.getValue()) {
|
||||
if (!slaveData.containsKey(slaveTable.getPrimaryKeyColumn().getColumnName())) {
|
||||
slaveData.put(slaveColumn.getColumnName(), columnValue);
|
||||
this.saveNew(slaveTable, slaveData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
onlineExtendExecutorUtil.doAfterInsertWithRelation(masterTable, masterData, slaveDataMap);
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -221,7 +227,10 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
return true;
|
||||
}
|
||||
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
|
||||
@@ -246,16 +255,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
JSONObject masterData,
|
||||
Long datasourceId,
|
||||
Map<OnlineDatasourceRelation, List<JSONObject>> slaveDataListMap) {
|
||||
Map<OnlineTable, List<JSONObject>> slaveDataMap = this.convertToSlaveTableAndDataList(slaveDataListMap);
|
||||
onlineExtendExecutorUtil.doBeforeUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||
this.update(masterTable, masterData);
|
||||
if (slaveDataListMap == null) {
|
||||
return;
|
||||
}
|
||||
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
||||
Long relationId = relationEntry.getKey().getRelationId();
|
||||
this.updateRelationData(
|
||||
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
||||
if (slaveDataListMap != null) {
|
||||
String masterDataId = masterData.get(masterTable.getPrimaryKeyColumn().getColumnName()).toString();
|
||||
for (Map.Entry<OnlineDatasourceRelation, List<JSONObject>> relationEntry : slaveDataListMap.entrySet()) {
|
||||
Long relationId = relationEntry.getKey().getRelationId();
|
||||
this.updateRelationData(
|
||||
masterTable, masterData, masterDataId, datasourceId, relationId, relationEntry.getValue());
|
||||
}
|
||||
}
|
||||
onlineExtendExecutorUtil.doAfterUpdateWithRelationn(masterTable, masterData, slaveDataMap);
|
||||
}
|
||||
|
||||
@MultiDatabaseWriteMethod
|
||||
@@ -298,6 +309,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
List<OnlineFilterDto> filterList =
|
||||
this.makeDefaultFilter(table, table.getPrimaryKeyColumn(), dataId);
|
||||
String dataPermFilter = this.buildDataPermFilter(table);
|
||||
OnlineColumn pkCol = table.getPrimaryKeyColumn();
|
||||
Object id = onlineOperationHelper.convertToTypeValue(pkCol, dataId);
|
||||
onlineExtendExecutorUtil.doBeforeDelete(table, id);
|
||||
if (table.getLogicDeleteColumn() == null) {
|
||||
if (this.doDelete(table, filterList, dataPermFilter) != 1) {
|
||||
return false;
|
||||
@@ -306,6 +320,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
this.doLogicDelete(table, table.getPrimaryKeyColumn(), dataId, dataPermFilter);
|
||||
}
|
||||
if (CollUtil.isEmpty(relationList)) {
|
||||
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||
return true;
|
||||
}
|
||||
Map<String, Object> masterData = getMasterData(table, null, null, dataId);
|
||||
@@ -329,6 +344,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
this.doLogicDelete(slaveTable, slaveColumn, columnValue, null);
|
||||
}
|
||||
}
|
||||
onlineExtendExecutorUtil.doAfterDelete(table, id);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -389,7 +405,9 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||
}
|
||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||
return resultList.get(0);
|
||||
Map<String, Object> result = resultList.get(0);
|
||||
onlineExtendExecutorUtil.doAfterSelectOne(table, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -404,7 +422,11 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
slaveTable, null, selectFields, filterList, dataPermFilter, null, null);
|
||||
List<Map<String, Object>> resultList = pageData.getDataList();
|
||||
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
|
||||
@@ -416,6 +438,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
String orderBy,
|
||||
MyPageParam pageParam) {
|
||||
this.normalizeFilterList(table, oneToOneRelationList, filterList);
|
||||
onlineExtendExecutorUtil.doBeforeSelectList(table, filterList);
|
||||
// 组件表关联数据。
|
||||
List<JoinTableInfo> joinInfoList = this.makeJoinInfoList(table, oneToOneRelationList);
|
||||
// 拼接关联表的select fields字段。
|
||||
@@ -435,6 +458,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
this.buildVirtualColumn(resultList, table, toManyRelationList);
|
||||
}
|
||||
this.reformatResultListWithOneToOneRelation(resultList, oneToOneRelationList);
|
||||
onlineExtendExecutorUtil.doAfterSelectList(table, resultList);
|
||||
return pageData;
|
||||
}
|
||||
|
||||
@@ -442,6 +466,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
public MyPageData<Map<String, Object>> getSlaveDataList(
|
||||
OnlineDatasourceRelation relation, List<OnlineFilterDto> filterList, String orderBy, MyPageParam pageParam) {
|
||||
OnlineTable slaveTable = relation.getSlaveTable();
|
||||
onlineExtendExecutorUtil.doBeforeSelectList(slaveTable, filterList);
|
||||
this.normalizeFilterList(slaveTable, null, filterList);
|
||||
// 拼接关联表的select fields字段。
|
||||
String selectFields = this.makeSelectFields(slaveTable, null);
|
||||
@@ -449,6 +474,7 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
MyPageData<Map<String, Object>> pageData =
|
||||
this.getList(slaveTable, null, selectFields, filterList, dataPermFilter, orderBy, pageParam);
|
||||
this.buildDataListWithDict(pageData.getDataList(), slaveTable);
|
||||
onlineExtendExecutorUtil.doAfterSelectList(slaveTable, pageData.getDataList());
|
||||
return pageData;
|
||||
}
|
||||
|
||||
@@ -1234,6 +1260,18 @@ public class OnlineOperationServiceImpl implements OnlineOperationService {
|
||||
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) {
|
||||
DataSourceProvider provider = dataSourceUtil.getProvider(table.getDblinkId());
|
||||
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.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
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.ObjectFieldType;
|
||||
import com.orangeforms.common.core.exception.MyRuntimeException;
|
||||
import com.orangeforms.common.core.object.ResponseResult;
|
||||
import com.orangeforms.common.core.object.TokenData;
|
||||
import com.orangeforms.common.core.upload.BaseUpDownloader;
|
||||
import com.orangeforms.common.core.upload.UpDownloaderFactory;
|
||||
import com.orangeforms.common.core.upload.UploadResponseInfo;
|
||||
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.model.OnlineColumn;
|
||||
import com.orangeforms.common.online.model.OnlineDatasource;
|
||||
import com.orangeforms.common.online.model.OnlineDatasourceRelation;
|
||||
import com.orangeforms.common.online.model.OnlineTable;
|
||||
import com.orangeforms.common.online.model.*;
|
||||
import com.orangeforms.common.online.model.constant.FieldKind;
|
||||
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.service.OnlineDatasourceRelationService;
|
||||
import com.orangeforms.common.online.service.OnlineDatasourceService;
|
||||
import com.orangeforms.common.online.service.OnlineOperationService;
|
||||
import com.orangeforms.common.online.service.OnlineTableService;
|
||||
import com.orangeforms.common.online.object.OnlinePageExtra;
|
||||
import com.orangeforms.common.online.service.*;
|
||||
import com.orangeforms.common.redis.cache.SessionCacheHelper;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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.util.Assert;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import jakarta.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
@@ -57,6 +61,8 @@ public class OnlineOperationHelper {
|
||||
@Autowired
|
||||
private OnlineTableService onlineTableService;
|
||||
@Autowired
|
||||
private OnlinePageService onlinePageService;
|
||||
@Autowired
|
||||
private OnlineOperationService onlineOperationService;
|
||||
@Autowired
|
||||
private OnlineProperties onlineProperties;
|
||||
@@ -64,6 +70,8 @@ public class OnlineOperationHelper {
|
||||
private UpDownloaderFactory upDownloaderFactory;
|
||||
@Autowired
|
||||
private SessionCacheHelper cacheHelper;
|
||||
@Resource(name = "caffeineCacheManager")
|
||||
private CacheManager cacheManager;
|
||||
|
||||
/**
|
||||
* 验证并获取数据源数据。
|
||||
@@ -361,6 +369,37 @@ public class OnlineOperationHelper {
|
||||
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(
|
||||
OnlineTable table, String fieldName, Boolean asImage) {
|
||||
OnlineColumn column = this.getOnlineColumnByName(table, fieldName);
|
||||
|
||||
@@ -46,6 +46,12 @@ public class OnlinePageVo {
|
||||
@Schema(description = "页面类型")
|
||||
private Integer pageType;
|
||||
|
||||
/**
|
||||
* 扩展数据。
|
||||
*/
|
||||
@Schema(description = "扩展数据")
|
||||
private String extraJson;
|
||||
|
||||
/**
|
||||
* 页面编辑状态。
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user