package foundation.help;
|
|
import java.io.File;
|
import java.io.FileNotFoundException;
|
import java.io.FileOutputStream;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.EntityTree;
|
import foundation.data.entity.Filter;
|
import foundation.data.entity.OrderBy;
|
import foundation.data.meta.field.Field;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.data.meta.field.TableFieldLoader;
|
import foundation.data.object.DataObject;
|
import foundation.json.JSONBuilder;
|
import foundation.persist.NamedSQL;
|
import foundation.persist.SQLRunner;
|
import foundation.persist.source.DataSourceManager;
|
import foundation.persist.source.NamedDataSource;
|
import foundation.util.Util;
|
import foundation.workflow.ActionProvider;
|
|
public class DocumentCreator extends ActionProvider {
|
|
private static String Path_Root = "D:/Data/itemSet/0A瀚潮/demo/8-诺和诺德";
|
private static Set<String> excludeTables;
|
|
private DataObject outlineObject;
|
private DataObject tableObject;
|
private DataObject fieldObject;
|
|
static {
|
excludeTables = new HashSet<String>();
|
excludeTables.add("temp_");
|
excludeTables.add("workflow_");
|
excludeTables.add("z_");
|
excludeTables.add("jimu_");
|
}
|
|
public DocumentCreator() {
|
outlineObject = DataObject.getInstance("help_direction_outline");
|
tableObject = DataObject.getInstance("help_direction_table");
|
fieldObject = DataObject.getInstance("help_direction_field");
|
}
|
|
@Override
|
protected void publishMethod() {
|
//1. 创建数据字典——数据库记录(全部)
|
addMethod("createTableDirectionRecords");
|
|
//2. 创建数据字典——数据库记录(单一)
|
addMethod("createOneTableDirectionRecords");
|
|
//3. 创建数据字典——文件生成(全部)
|
addMethod("createTableDirectionFiles");
|
|
//4. 创建数据字典——文件生成(单一)
|
addMethod("createOutlineFile");
|
}
|
|
public void createTableDirectionRecords() throws Exception {
|
//1. 添加表、字段
|
NamedDataSource dataSource = NamedDataSource.getInstance();
|
List<String> tables = SQLRunner.getTableList(dataSource, "dms_demo");
|
|
for (String table: tables) {
|
doCreateOneTableDirectionRecords(table);
|
}
|
|
//2. 运行补充SQL
|
execAfterCreateTableDirectionSQL();
|
}
|
|
public void createOneTableDirectionRecords() throws Exception {
|
String table = dataReader.getString("table_name");
|
|
if (Util.isEmpty(table)) {
|
logger.error("table name is empty, skip");
|
return;
|
}
|
|
doCreateOneTableDirectionRecords(table);
|
}
|
|
private void doCreateOneTableDirectionRecords(String table) throws Exception {
|
for (String exclude: excludeTables) {
|
if (table.startsWith(exclude) || table.startsWith(exclude.toUpperCase()) ) {
|
return;
|
}
|
}
|
|
//1. 添加--分组
|
String groupCode = getGroupCode(table);
|
tryAppendOneTableGroup(groupCode);
|
|
//2. 添加--表
|
tryAppendOneTable(groupCode, table);
|
|
//3. 添加--字段
|
TableFieldLoader metaLoader = new TableFieldLoader(DataSourceManager.getMain(), table);
|
FieldsRuntime fieldsMeta = metaLoader.getFieldsByTableMeta();
|
|
tryAppendOneTableFields(table, fieldsMeta);
|
}
|
|
private void execAfterCreateTableDirectionSQL() throws Exception {
|
NamedSQL namedSQL;
|
|
namedSQL = NamedSQL.getInstance("setDirectionFieldLabel_id");
|
namedSQL.execute();
|
|
namedSQL = NamedSQL.getInstance("setDirectionFieldLabel_stateCode");
|
namedSQL.execute();
|
|
namedSQL = NamedSQL.getInstance("setDirectionFieldLabel_stateDetailCode");
|
namedSQL.execute();
|
|
namedSQL = NamedSQL.getInstance("setDirectionFieldLabel_creatorId");
|
namedSQL.execute();
|
}
|
|
private void tryAppendOneTableGroup(String groupCode) throws Exception {
|
boolean exists = outlineObject.existsEntity(groupCode);
|
|
if (exists) {
|
return;
|
}
|
|
Entity entity = outlineObject.createTableEntity(false);
|
entity.set("id", groupCode);
|
entity.set("type_code", "leaf");
|
entity.set("code", groupCode);
|
entity.set("title", groupCode);
|
|
outlineObject.insertEntity(entity);
|
}
|
|
private void tryAppendOneTable(String groupCode, String table) throws Exception {
|
boolean exists = tableObject.existsEntity(table);
|
|
if (exists) {
|
return;
|
}
|
|
Entity entity = tableObject.createTableEntity(false);
|
entity.set("id", table);
|
entity.set("parent_id", groupCode);
|
entity.set("name", table);
|
entity.set("title", table);
|
|
tableObject.insertEntity(entity);
|
}
|
|
private void tryAppendOneTableFields(String table, FieldsRuntime fieldsMeta) throws Exception {
|
//1. 添加字段
|
EntitySet oldFields = fieldObject.getTableEntitySet(new Filter("table_id", table));
|
EntitySet newFields = fieldObject.createTableEntitySet();
|
|
String fieldName; int index = oldFields.size() + 1;
|
|
for (Field field: fieldsMeta) {
|
fieldName = field.getName();
|
|
if ("idx".equalsIgnoreCase(fieldName)) {
|
continue;
|
}
|
|
if (oldFields.contains("name", fieldName)) {
|
continue;
|
}
|
|
Entity entity = newFields.append();
|
entity.set("table_id", table);
|
entity.set("name", fieldName);
|
entity.set("title", field.getLabelChinese());
|
entity.set("remark", field.getRemark());
|
entity.set("type_code", field.getTypeSQLSegment());
|
entity.set("order_no", index++);
|
}
|
|
fieldObject.insertEntitySet(newFields);
|
|
//2. 从property定义中,更新字段中文标签
|
NamedSQL namedSQL = NamedSQL.getInstance("setDirectionFieldLabel");
|
namedSQL.setTableName(table);
|
namedSQL.execute();
|
|
namedSQL = NamedSQL.getInstance("setDirectionFieldLabelOnTableName");
|
namedSQL.setTableName(table);
|
namedSQL.execute();
|
|
namedSQL = NamedSQL.getInstance("setFieldCommentFromDB");
|
namedSQL.setTableName(table);
|
namedSQL.execute();
|
}
|
|
private void createOutlineFile() throws Exception {
|
NamedSQL namedSQL = NamedSQL.getInstance("getDirectionOutline");
|
EntityTree entityTree = SQLRunner.getEntityTree(namedSQL);
|
|
//1. 检查跟目录是否存在
|
File data = new File(Path_Root, "data");
|
if (!data.exists()) {
|
data.mkdirs();
|
}
|
|
//2. 创建文件
|
File file = new File(data, "tree.js");
|
if (file.exists()) {
|
file.delete();
|
}
|
|
file.createNewFile();
|
|
//3. 输出JSON
|
JSONBuilder content = new JSONBuilder("var tree =");
|
entityTree.writeJSON(content);
|
|
writeOneDirectionFile(file, content);
|
}
|
|
public void createTableDirectionFiles() throws Exception {
|
//1. 输出表分类文件
|
createOutlineFile();
|
|
//2. 创建文件
|
File data = new File(Path_Root, "data");
|
if (!data.exists()) {
|
data.mkdirs();
|
}
|
|
File file = new File(data, "tables.js");
|
if (file.exists()) {
|
file.delete();
|
}
|
|
file.createNewFile();
|
|
//3. 输出表字段文件
|
JSONBuilder content = new JSONBuilder("var tables =");
|
content.beginObject();
|
|
EntitySet groupSet = outlineObject.getTableEntitySet(new Filter("type_code", "leaf"));
|
|
String groupCode;
|
for (Entity groupEntity: groupSet) {
|
groupCode = groupEntity.getString("code");
|
EntitySet tableSet = tableObject.getTableEntitySet(new Filter("parent_id", groupCode));
|
|
for (Entity tableEntity: tableSet) {
|
createOneTableDirectionFile(content, tableEntity);
|
}
|
}
|
|
content.endObject();
|
|
//4. 保存JSON到文件
|
writeOneDirectionFile(file, content);
|
}
|
|
private void createOneTableDirectionFile(JSONBuilder content, Entity tableEntity) throws Exception {
|
String tableId = tableEntity.getString("id");
|
String tableName = tableEntity.getString("name");
|
|
//1. 获取字段定义
|
EntitySet fieldSet = fieldObject.getTableEntitySet(new Filter("table_id", tableId), new OrderBy("order_no, name"));
|
|
//2. 输出成JSON
|
content.beginObject(tableName);
|
|
content.beginObject("table");
|
tableEntity.writeJSONBody(content);
|
content.endObject();
|
|
content.beginArray("fields");
|
fieldSet.writeJSONBody(content);
|
content.endArray();
|
|
content.endObject();
|
}
|
|
private void writeOneDirectionFile(File file, JSONBuilder content) throws FileNotFoundException {
|
FileOutputStream output = new FileOutputStream(file);
|
try {
|
output.write(content.getBytes());
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
finally{
|
try {
|
output.close();
|
} catch (Exception e) {
|
}
|
}
|
}
|
|
private String getGroupCode(String table) {
|
int pos = table.indexOf("_");
|
return table.substring(0, pos);
|
}
|
}
|