'新增导出功能'
This commit is contained in:
@@ -369,15 +369,13 @@ public class MetaKit {
|
||||
}
|
||||
|
||||
@Comment("业务导出表头配置")
|
||||
public Kv cfgExport(String name, String token) {
|
||||
public static Kv cfgExport(String name, String token) {
|
||||
MetaService metaService = getMetaService(name, token);
|
||||
|
||||
Kv<String, MetaTable> tables = getMetaTables(metaService, true);
|
||||
List<Map<String,String>> exports = metaService.getExports();
|
||||
|
||||
Kv kv = Kv.of();
|
||||
Kv kv = Kv.of(); // {col:label}
|
||||
exports.forEach(x -> {
|
||||
kv.put(x.get("col"), x.get("lable"));
|
||||
kv.put(x.get("col"), x.get("label"));
|
||||
});
|
||||
return kv;
|
||||
}
|
||||
|
||||
58
src/main/java/net/tccn/base/MetaRender.java
Normal file
58
src/main/java/net/tccn/base/MetaRender.java
Normal file
@@ -0,0 +1,58 @@
|
||||
package net.tccn.base;
|
||||
|
||||
import com.lxyer.excel.poi.ExcelKit;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.redkale.convert.Convert;
|
||||
import org.redkale.net.http.*;
|
||||
import org.redkale.util.AnyValue;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author: liangxianyou
|
||||
*/
|
||||
public class MetaRender implements HttpRender<HttpScope> {
|
||||
@Override
|
||||
public void init(HttpContext context, AnyValue config) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public <V extends HttpScope> void renderTo(HttpRequest request, HttpResponse response, Convert convert, V scope) {
|
||||
Map<String, Object> attr = scope.getAttributes();
|
||||
if ("excel".equals(scope.getReferid())) {
|
||||
List list = (List) attr.get("data");
|
||||
Kv heads = (Kv) attr.get("heads");
|
||||
String fileName = (String) attr.get("fileName");
|
||||
|
||||
try {
|
||||
Workbook workbook = ExcelKit.exportExcel(list, heads);
|
||||
|
||||
File file = new File(String.format("tmp/%s.xls", fileName));
|
||||
file.getParentFile().mkdirs();
|
||||
if (file.exists()) file.delete();
|
||||
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
workbook.write(fos);
|
||||
try {
|
||||
fos.close();
|
||||
workbook.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
response.finish(file);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<HttpScope> getType() {
|
||||
return HttpScope.class;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,9 +8,9 @@ import java.util.List;
|
||||
*/
|
||||
public class FBean {
|
||||
|
||||
private String platToken; //plat token
|
||||
String name; // service key
|
||||
private String type; // 操作类型 list,export
|
||||
private String platToken; // 平台token
|
||||
private String name; // 业务名称
|
||||
private String type; // 操作类型 list:列表,export:导出
|
||||
|
||||
private List<Filter> filters;//[{f:xx, v: v, type:t}] -- t,
|
||||
private List<Order> orders;//{f1: 1, f2: -1}
|
||||
@@ -34,6 +34,14 @@ public class FBean {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public List<Filter> getFilters() {
|
||||
return filters;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import net.tccn.meta.MetaTable;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -36,57 +35,6 @@ public class ParseMysql implements Parser {
|
||||
return false;
|
||||
};
|
||||
|
||||
BiFunction<Filter, String, String> buildFilter = (f, cate) -> {
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
@Deprecated
|
||||
/*Function<FBean, Kv<String, MetaTable>> tablesFun = fbean -> {
|
||||
MetaService metaService = MetaKit.getMetaService(fbean.getName());
|
||||
List<Filter> filters = fbean.getFilters();
|
||||
List<String> shows = metaService.getShows();
|
||||
|
||||
Kv tables = Kv.of();
|
||||
|
||||
shows.forEach(x-> {
|
||||
String table = x.split("[.]")[0];
|
||||
tables.set(table, MetaKit.getMetaTableByAlias(table));
|
||||
});
|
||||
filters.forEach(f -> {
|
||||
String table = f.getCol().split("[.]")[0];
|
||||
if (!tables.containsKey(table)) {
|
||||
tables.set(table, MetaKit.getMetaTableByAlias(table));
|
||||
}
|
||||
});
|
||||
|
||||
metaService.getShows();
|
||||
|
||||
//查询用的过滤条件
|
||||
Map<String, List<Filter>> filterMap = filters.stream().collect(Collectors.groupingBy(x -> x.getCol().split("[.]")[0]));
|
||||
//要展示的数据
|
||||
Map<String, List<String>> showMap = shows.stream().collect(Collectors.groupingBy(x -> x.split("[.]")[0]));
|
||||
|
||||
|
||||
StringBuffer bufWhere = new StringBuffer();
|
||||
|
||||
filterMap.getOrDefault(metaService.getTable(), asList()).forEach(f -> {
|
||||
|
||||
|
||||
bufWhere.append(f.getCol()).append(f.getType()).append(f.getValue());
|
||||
});
|
||||
|
||||
|
||||
//select * from tableA a left join tableB b on a.xx = b.yy where b.zz = xxx;
|
||||
//where tableB where b.
|
||||
|
||||
//是否跨库
|
||||
|
||||
|
||||
|
||||
return tables;
|
||||
};*/
|
||||
|
||||
Predicate<Kv<String, MetaTable>> sameDbFun = (kv) -> {
|
||||
String dbPlatId = null;
|
||||
for (MetaTable metaTable : kv.values()) {
|
||||
@@ -105,7 +53,8 @@ public class ParseMysql implements Parser {
|
||||
|
||||
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService, false);//所有的关联表信息
|
||||
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据
|
||||
List<Map<String, String>> shows = metaService.getShows();//查询的属性
|
||||
List<Map<String, String>> shows = metaService.getShows();//查询的属性-列表
|
||||
List<Map<String, String>> exports = metaService.getExports();//查询的属性-导出
|
||||
|
||||
List<String> _filters = fBean.getFilters().stream().map(Filter::getCol).collect(Collectors.toList());
|
||||
List<MetaLink> links = MetaKit.getMetaLinks(
|
||||
@@ -132,9 +81,14 @@ public class ParseMysql implements Parser {
|
||||
//select a.x, b.y, c.z
|
||||
StringBuffer bufSelect = new StringBuffer();
|
||||
bufSelect.append("select ");
|
||||
if (!isEmpty.test(shows)) {
|
||||
if ("export".equals(fBean.getType()) && !isEmpty.test(exports)) {
|
||||
exports.forEach(x -> {
|
||||
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
|
||||
});
|
||||
bufSelect.deleteCharAt(bufSelect.length() - 1);
|
||||
}
|
||||
else if ("list".equals(fBean.getType()) && !isEmpty.test(shows)) {
|
||||
shows.forEach(x -> {
|
||||
//buf.append("`").append("x").append("`").append(",");
|
||||
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
|
||||
});
|
||||
bufSelect.deleteCharAt(bufSelect.length() - 1);
|
||||
@@ -178,31 +132,4 @@ public class ParseMysql implements Parser {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/*@Override
|
||||
public String parse(Filter filter) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String parseSave(MetaService ms, Map data) {
|
||||
MetaTable metaTable = MetaKit.getMetaTableByAlias(ms.getName());//基础元数据
|
||||
|
||||
String sqlTpl = "insert %s (%s) value (%s)";
|
||||
StringBuilder bufK = new StringBuilder();
|
||||
StringBuilder bufV = new StringBuilder();
|
||||
data.forEach((k,v) -> {
|
||||
if (v != null || !String.valueOf(v).isEmpty()) {
|
||||
bufK.append("`").append(k).append("`,");
|
||||
if (v instanceof Number) {
|
||||
bufV.append(v).append(",");
|
||||
} else {
|
||||
bufV.append("'").append(v).append("',");
|
||||
}
|
||||
}
|
||||
});
|
||||
bufK.deleteCharAt(bufK.length() - 1);
|
||||
bufV.deleteCharAt(bufV.length() - 1);
|
||||
return String.format(sqlTpl, metaTable.getName(), bufK.toString(), bufV.toString());
|
||||
}*/
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.tccn.service;
|
||||
|
||||
import com.lxyer.excel.poi.ExcelKit;
|
||||
import net.tccn.base.JBean;
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.base.MetaKit;
|
||||
import net.tccn.base.PageBean;
|
||||
import net.tccn.dbq.DbExecutors;
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
@@ -32,6 +32,7 @@ public class DataService extends BaseService {
|
||||
JBean jBean = new JBean();
|
||||
try {
|
||||
fBean.setPlatToken(token);
|
||||
fBean.setType("list");
|
||||
PageBean page = DbExecutors.findPage(fBean);
|
||||
jBean.setBody(page);
|
||||
} catch (Exception e) {
|
||||
@@ -52,15 +53,23 @@ public class DataService extends BaseService {
|
||||
}
|
||||
|
||||
@Comment("数据导出excel")
|
||||
public HttpScope export(FBean fBean, @RestParam(name = "platToken") String token) {
|
||||
public HttpScope export(FBean fBean, String fileName, @RestParam(name = "platToken") String token) {
|
||||
try {
|
||||
fBean.setPlatToken(token);
|
||||
fBean.setType("export");
|
||||
PageBean page = DbExecutors.findPage(fBean);
|
||||
Kv heads = MetaKit.cfgExport(fBean.getName(), token);
|
||||
|
||||
ExcelKit.exportExcel(page.getRows(), Kv.of());
|
||||
if (isEmpty.test(fileName)) {
|
||||
fileName = String.format("export_excel_%s", System.currentTimeMillis());
|
||||
}
|
||||
|
||||
Kv attrs = Kv.of();
|
||||
attrs.put("data", page.getRows());
|
||||
attrs.put("heads", heads);
|
||||
attrs.put("fileName", fileName);
|
||||
|
||||
return HttpScope.refer("excel").attr("data", page.getRows()).attr("heads", null);
|
||||
return HttpScope.refer("excel").attr(attrs);
|
||||
} catch (ExecutionException | InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
|
||||
Reference in New Issue
Block a user