1、新增输出到文件和直接入库
This commit is contained in:
parent
b47195550b
commit
cb271391de
@ -1,21 +1,25 @@
|
||||
package org.spiderflow.core.executor.shape;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.apache.ibatis.jdbc.SQL;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.spiderflow.ExpressionEngine;
|
||||
import org.spiderflow.context.RunnableTreeNode;
|
||||
import org.spiderflow.context.SpiderContext;
|
||||
import org.spiderflow.core.executor.function.FileFunctionExecutor;
|
||||
import org.spiderflow.core.serializer.FastJsonSerializer;
|
||||
import org.spiderflow.core.utils.DataSourceUtils;
|
||||
import org.spiderflow.executor.ShapeExecutor;
|
||||
import org.spiderflow.io.SpiderResponse;
|
||||
import org.spiderflow.model.SpiderNode;
|
||||
import org.spiderflow.model.SpiderOutput;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
@ -32,6 +36,16 @@ public class OutputExecutor implements ShapeExecutor{
|
||||
|
||||
public static final String OUTPUT_VALUE = "output-value";
|
||||
|
||||
public static final String DATASOURCE_ID = "datasourceId";
|
||||
|
||||
public static final String OUTPUT_DATABASE = "output-database";
|
||||
|
||||
public static final String OUTPUT_CSV = "output-csv";
|
||||
|
||||
public static final String TABLE_NAME = "tableName";
|
||||
|
||||
public static final String CSV_NAME = "csvName";
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(OutputExecutor.class);
|
||||
|
||||
@Autowired
|
||||
@ -43,10 +57,16 @@ public class OutputExecutor implements ShapeExecutor{
|
||||
output.setNodeName(node.getNodeName());
|
||||
output.setNodeId(node.getNodeId());
|
||||
boolean outputAll = "1".equals(node.getStringJsonValue(OUTPUT_ALL));
|
||||
boolean databaseFlag = "1".equals(node.getStringJsonValue(OUTPUT_DATABASE));
|
||||
boolean csvFlag = "1".equals(node.getStringJsonValue(OUTPUT_CSV));
|
||||
if (outputAll) {
|
||||
outputAll(output, variables);
|
||||
}
|
||||
List<Map<String, String>> outputs = node.getListJsonValue(OUTPUT_NAME, OUTPUT_VALUE);
|
||||
Map<String, Object> outputData = null;
|
||||
if (databaseFlag || csvFlag) {
|
||||
outputData = new HashMap<>(outputs.size());
|
||||
}
|
||||
for (Map<String, String> item : outputs) {
|
||||
Object value = null;
|
||||
String outputValue = item.get(OUTPUT_VALUE);
|
||||
@ -58,6 +78,18 @@ public class OutputExecutor implements ShapeExecutor{
|
||||
logger.error("输出{}出错,异常信息:{}", outputName,e);
|
||||
}
|
||||
output.addOutput(outputName, value);
|
||||
if ((databaseFlag || csvFlag) && value != null) {
|
||||
outputData.put(outputName, value.toString());
|
||||
}
|
||||
}
|
||||
if(databaseFlag){
|
||||
String dsId = node.getStringJsonValue(DATASOURCE_ID);
|
||||
String tableName = node.getStringJsonValue(TABLE_NAME);
|
||||
outputDB(dsId, tableName, outputData);
|
||||
}
|
||||
if (csvFlag) {
|
||||
String csvName = node.getStringJsonValue(CSV_NAME);
|
||||
outputCSV(csvName, outputData);
|
||||
}
|
||||
context.addOutput(output);
|
||||
}
|
||||
@ -90,6 +122,58 @@ public class OutputExecutor implements ShapeExecutor{
|
||||
}
|
||||
}
|
||||
|
||||
private void outputDB(String databaseId, String tableName, Map<String, Object> data) {
|
||||
if (data == null || data.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
JdbcTemplate template = new JdbcTemplate(DataSourceUtils.getDataSource(databaseId));
|
||||
Set<String> keySet = data.keySet();
|
||||
Object[] params = new Object[data.size()];
|
||||
SQL sql = new SQL();
|
||||
//设置表名
|
||||
sql.INSERT_INTO(tableName);
|
||||
int index = 0;
|
||||
//设置字段名
|
||||
for (String key : keySet) {
|
||||
sql.VALUES(key, "?");
|
||||
params[index] = data.get(key);
|
||||
index++;
|
||||
}
|
||||
try {
|
||||
//执行sql
|
||||
int update = template.update(sql.toString(), params);
|
||||
} catch (Exception e) {
|
||||
logger.error("执行sql出错,异常信息:{}", e.getMessage(), e);
|
||||
ExceptionUtils.wrapAndThrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void outputCSV(String csvName, Map<String, Object> data) {
|
||||
if (data == null || data.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<Map.Entry<String, Object>> entries = data.entrySet();
|
||||
StringBuffer sb = new StringBuffer();
|
||||
int i = 1 ;
|
||||
for (Map.Entry<String,Object> item : entries) {
|
||||
if (item.getValue() != null) {
|
||||
sb.append(item.getValue().toString());
|
||||
}
|
||||
if (i < data.size()) {
|
||||
sb.append(",");
|
||||
}
|
||||
i++;
|
||||
}
|
||||
sb.append("\r\n");
|
||||
System.out.println(sb.toString());
|
||||
try {
|
||||
FileFunctionExecutor.write(csvName, sb.toString().getBytes(),true);
|
||||
} catch (IOException e) {
|
||||
logger.error("文件输出错误,异常信息:{}", e.getMessage(), e);
|
||||
ExceptionUtils.wrapAndThrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String supportShape() {
|
||||
return "output";
|
||||
|
@ -37,6 +37,39 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-row layui-col-space20">
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">数据输出</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="checkbox" target-div="databaseDiv" title="输出到数据库" value="output-database" lay-skin="primary" {{d.data.object['output-database'] == '1' ? 'checked' : ''}} lay-filter="targetCheck"/>
|
||||
<input type="checkbox" class="oCheckbox" target-div="csvDiv" title="输出到CSV文件" value="output-csv" lay-skin="primary" {{d.data.object['output-csv'] == '1' ? 'checked' : ''}} lay-filter="targetCheck"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3 databaseDiv" {{d.data.object['output-database'] == '1' ? '' : 'style="display: none;"'}}>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">数据源</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="datasourceId">
|
||||
{{# layui.each(d.datasources,function(index,datasource){ }}
|
||||
<option value="{{=datasource.id}}" {{datasource.id == d.data.object.datasourceId ? 'selected': ''}}>{{datasource.name}}</option>
|
||||
{{# }) }}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md2 databaseDiv" {{d.data.object['output-database'] == '1' ? '' : 'style="display: none;"'}}>
|
||||
<div class="layui-form-item">
|
||||
<input type="text" name="tableName" placeholder="请输入表名" autocomplete="off" class="layui-input input-default" value="{{=d.data.object.tableName}}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md2 csvDiv" {{d.data.object['output-csv'] == '1' ? '' : 'style="display: none;"'}}>
|
||||
<div class="layui-form-item">
|
||||
<input type="text" name="csvName" placeholder="请输入文件名" autocomplete="off" class="layui-input input-default" value="{{=d.data.object.csvName}}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="layui-table" id="spider-output" data-cell="{{=d.cell.id}}" data-keys="output-name,output-value"></table>
|
||||
<hr>
|
||||
<div class="layui-form-item">
|
||||
@ -52,6 +85,7 @@
|
||||
function renderSpiderOutput(data){
|
||||
layui.table.render({
|
||||
elem : '#spider-output',
|
||||
limit: 50,
|
||||
cols : [[{
|
||||
title : '输出项',
|
||||
width : 150,
|
||||
@ -72,4 +106,19 @@
|
||||
})
|
||||
}
|
||||
renderSpiderOutput(getCellData({{d.cell.id}},$("#spider-output").data('keys').split(",")));
|
||||
|
||||
$.ajax({
|
||||
url : 'datasource/all',
|
||||
success : function(datasources){
|
||||
for(var i =0;i<datasources.length;i++){
|
||||
var ds = datasources[i];
|
||||
$('select[name=datasourceId]').append('<option value="'+ds.id+'">'+ds.name+'</option>');
|
||||
}
|
||||
layui.form.render();
|
||||
var selectDataSourceId = '{{=d.data.object.datasourceId}}';
|
||||
if(selectDataSourceId != ''){
|
||||
$('.layui-form-select dd[lay-value='+selectDataSourceId+']').trigger('click');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
Loading…
Reference in New Issue
Block a user