Files
meta-kit/src/main/java/net/tccn/service/_FileService.java
lxyer 9623b70875 1、修改Mysql线程池逻辑
2、新增数据表信息查询接口
3、优化前端代码逻辑
4、新增业面业务功能提示信息窗口
2019-04-10 16:32:13 +08:00

244 lines
8.2 KiB
Java

package net.tccn.service;
import com.lxyer.excel.poi.ExcelKit;
import net.tccn.base.JBean;
import net.tccn.base.Kv;
import net.tccn.dbq.Field;
import net.tccn.meta.MetaTable;
import net.tccn.plat.SysPlat;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static java.util.Arrays.asList;
/**
* @author: liangxianyou at 2018/10/24 10:57.
*/
@RestService(automapping = true, comment = "文件服务")
public class _FileService extends BaseService {
private final static String[] FIELDS = {"field", "cate", "must", "remark1", "remark2", "tag", "selects", "column", "filter", "ck", "edit"};
@Resource
private QtaskService qtaskService;
@RestMapping(name = "sheets", comment = "得到所有的sheetName")
public List<String> sheets(String filePath) {
List<String> sheets = new ArrayList<>();
try {
File file = new File(webroot, filePath);
if (file.exists()) {
sheets = ExcelKit.getSheetNames(file);
}
} catch (IOException e) {
e.printStackTrace();
}
return sheets.stream().filter(x -> {
return !x.contains("版本记录") && !x.contains("表说明") && !x.contains("表名称");
}).collect(Collectors.toList());
}
@RestMapping(name = "data", comment = "得到文件数据")
public JBean data(String filePath, @RestParam(name = "platToken") String token) {
JBean jBean = new JBean();
SysPlat sysPlat = qtaskService.getSysPlat(token);
File file = new File(webroot, filePath);
if (file.exists()) {
try {
Map<String, List<Map>> map = ExcelKit.readExcelAll(file, FIELDS);
Kv<String, MetaTable> data = Kv.of();
map.forEach((k, v) -> {
if (v.size() > 2) {
data.put(k.replace(" ", ""), toCols(v));
}
});
StringBuffer buf = new StringBuffer();
buf.append("for d in meta_cols\n" +
" filter d.name in [");
data.values().forEach(x -> {
buf.append("'").append(x.getName()).append("',");
});
buf.deleteCharAt(buf.length() - 1);
buf.append("] and d.sysPlatId=='" + sysPlat.getKey() + "'\n" +
" return d.name");
List<String> hv = MetaTable.dao.find(buf.toString(), String.class);
Kv res = Kv.of();
data.forEach((k, v) -> {
Kv kv = Kv.of();
res.put(k,
kv.set("name", v.getName())
.set("hv", hv.contains(v.getName()) ? 1 : 0)
.set("comment", v.getComment())
);
});
jBean.setBody(res);
} catch (IOException e) {
e.printStackTrace();
}
}
return jBean;
}
@RestMapping(name = "sheet_data", comment = "得到sheet数据")
public JBean sheetData(String filePath, String sheetName, @RestParam(name = "platToken") String token) {
JBean jBean = new JBean();
SysPlat sysPlat = qtaskService.getSysPlat(token);
File file = new File(webroot, filePath);
try {
List<Map> list = ExcelKit.readExcel(file, FIELDS, sheetName);
MetaTable metaTable = toCols(list);
jBean.setBody(metaTable);
} catch (IOException e) {
e.printStackTrace();
jBean.set(-1, String.format("读取sheet[%s]失败", sheetName));
}
return jBean;
}
@RestMapping(name = "import_metatable", comment = "导入excel数据到metatable")
public JBean importMetaTable(@RestParam(name = "sheetArr", comment = "sheet名") String[] sheetArr,
@RestParam(name = "filePath", comment = "文件路径") String filePath,
@RestParam(name = "platToken") String token) {
JBean jBean = new JBean();
SysPlat sysPlat = qtaskService.getSysPlat(token);
File file = new File(webroot, filePath);
String[] fields = {"field", "cate", "must", "remark1", "remark2", "tag", "selects", "column", "filter", "ck", "edit"};
try {
Map<String, List<Map>> map = ExcelKit.readExcelAll(file, fields);
map.forEach((k, v) -> {
if (v.size() > 2) {
MetaTable table = toCols(v);
for (String sn : sheetArr) {
if (table.getName().equals(sn)) { //在选中列表中
MetaTable metaTable = new MetaTable();
metaTable.setSysPlatId(sysPlat.getKey());
metaTable.setName(table.getName());
MetaTable _metaTable = MetaTable.dao.findFirst(metaTable);
if (_metaTable == null) {//库里没有数据保存
table.setSysPlatId(sysPlat.getKey());
table.save();
}
break;
}
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
return jBean;
}
/**
* 组装元数据
*/
private MetaTable toCols(List<Map> list) {
//Kv col = Kv.of();
MetaTable metaTable = new MetaTable();
list.remove(1);//list[0] head info
Map rowHead = list.remove(0);
String comment = getComment(rowHead);//list[1] comment,
String tableName = getTableName(rowHead);
//col.set("name", tableName).set("comment", comment);
metaTable.setName(tableName);
metaTable.setComment(comment);
//所有字段
List<Field> items = new ArrayList<>();
//展示的字段
List<String> shows = new ArrayList<>();
//编辑的字段
List<Map> edits = new ArrayList<>();
//查询过滤用字段
List<Map> filters = new ArrayList<>();
list.forEach(x -> {
String colName = x.getOrDefault("field", "") + "";
Field item = new Field();
item.setName(colName);
item.setLabel(x.getOrDefault("remark1", "") + "");
item.setType(x.getOrDefault("cate", "") + "");
item.setInType(x.getOrDefault("tag", "") + "");
item.setInExt(x.getOrDefault("selects", "") + "");
items.add(item);
if ("1".equals(x.getOrDefault("column", "") + "")) {
shows.add(colName);
}
if ("1".equals(x.getOrDefault("edit", "") + "")) {
edits.add(Kv.of("col", colName));
}
if (x.get("filter") != null && !"".equals(x.get("filter") + "")) {
String filter = x.getOrDefault("filter", "") + "";
filter = filter.replace("1", "EQUAL");
filter = filter.replace("!1", "NOTEQUAL");
filter = filter.replace("like", "LIKE");
filters.add(Kv.of("name", item).set("filterType", asList(filter.split(","))));
}
});
metaTable.setItems(items);
//metaTable.setShows(shows);
//metaTable.setEdits(edits);
//metaTable.setFilters(filters);
return metaTable;
}
private String getTableName(Map rowHead) {
String field = rowHead.get("field") + "";
int s = field.indexOf("(");
if (s > 0) {
return field.substring(0, s);
}
return field;
}
private String getComment(Map rowHead) {
String field = rowHead.get("field") + "";
int s = field.indexOf("(");
int e = field.indexOf(")");
if (s > 0) {
return field.substring(s + 1, e > 0 ? e : field.length());
}
return "";
}
}