新增 字典支持从静态文件加载

This commit is contained in:
2019-07-01 15:47:33 +08:00
parent 560c07f3d2
commit 97e7b47213
6 changed files with 84 additions and 45 deletions

View File

@@ -22,4 +22,5 @@ arango.database=db_dev
tplPath=/tpl
# file|db
dcate=db
dataCate=db
dataPath=${APP_HOME}/conf/data/

View File

@@ -5,7 +5,7 @@ import net.tccn.base.arango.Doc;
import net.tccn.dbq.jdbc.api.DbAccount;
import net.tccn.dbq.jdbc.api.DbKit;
import net.tccn.dbq.table.Field;
import net.tccn.dict.DictKit;
import net.tccn.dict.Dict;
import net.tccn.meta.*;
import net.tccn.plat.DbPlat;
import net.tccn.plat.SysPlat;
@@ -45,8 +45,11 @@ public final class MetaKit {
private static List<User> users;
@Getter
private static List<TaskEntity> taskEntities;
@Getter
private static List<Dict> dicts;
protected static String dcate;
protected static String dcate = "db";
protected static String dataPath;
private static final JsonConvert convert = JsonConvert.root();
// -----------------------------------
@@ -58,8 +61,7 @@ public final class MetaKit {
reload(SysPlat.class);
reload(User.class);
reload(TaskEntity.class);
DictKit dictKit = DictKit.use("");
reload(Dict.class);
}
@@ -74,7 +76,7 @@ public final class MetaKit {
public static <T extends Doc> void reload(Class<T> clazz, String key) {
try {
File file = new File(String.format("tmp/%s.json", clazz.getSimpleName()));
File file = new File(String.format("%s%s.json", dataPath, clazz.getSimpleName()));
if ("file".equals(dcate)) {
if (MetaTable.class == clazz) {
Type type = new TypeToken<List<MetaTable>>() {
@@ -108,6 +110,10 @@ public final class MetaKit {
Type type = new TypeToken<List<TaskEntity>>() {
}.getType();
taskEntities = convert.convertFrom(type, new FileInputStream(file));
} else if (Dict.class == clazz) {
Type type = new TypeToken<List<Dict>>() {
}.getType();
dicts = convert.convertFrom(type, new FileInputStream(file));
}
} else {
if (MetaTable.class == clazz) metaTables = MetaTable.dao.find();
@@ -120,6 +126,8 @@ public final class MetaKit {
else if (TaskEntity.class == clazz) {
taskEntities = TaskEntity.dao.find();
TaskKit.init();
} else if (Dict.class == clazz) {
dicts = Dict.dao.find();
}
}
@@ -129,13 +137,14 @@ public final class MetaKit {
}
public static void cacheSave() {
cacheSave(MetaTable.class);
cacheSave(MetaLink.class);
cacheSave(MetaService.class);
cacheSave(DbAccount.class);
cacheSave(DbPlat.class);
cacheSave(SysPlat.class);
cacheSave(User.class);
cacheSave(TaskEntity.class);
cacheSave(Dict.class);
}
private static void cacheSave(Class clazz) {
@@ -144,13 +153,14 @@ public final class MetaKit {
else if (MetaLink.class == clazz) list = metaLinks;
else if (MetaService.class == clazz) list = metaServices;
else if (DbAccount.class == clazz) list = dbPlats;
else if (DbPlat.class == clazz) list = dbPlats;
else if (SysPlat.class == clazz) list = sysPlats;
else if (User.class == clazz) list = users;
else if (TaskEntity.class == clazz) list = taskEntities;
else if (Dict.class == clazz) list = dicts;
if (list == null || list.size() == 0) return;
File file = new File(String.format("tmp/%s.json", list.get(0).getClass().getSimpleName()));
File file = new File(String.format("%s%s.json", dataPath, list.get(0).getClass().getSimpleName()));
file.getParentFile().mkdirs();
FileKit.strToFile(MetaKit.convert.convertTo(list), file);
}
@@ -167,10 +177,20 @@ public final class MetaKit {
return MetaKit.getMetaTableByAlias(metaService.getTable());
}
/**
* 通过平台token 得到平台字典数据
*
* @param platToken
*/
public static Map<String, List<Dict>> getDictData(String platToken) {
String platId = MetaKit.getPlatId(platToken);
Map<String, List<Dict>> dicts = MetaKit.dicts.stream().filter(x -> x.getSysPlatId().equals(platId)).collect(Collectors.groupingBy(Dict::getType));
return dicts;
}
// -----------------------------------
public void cleanData() {
}
/**
@@ -204,7 +224,8 @@ public final class MetaKit {
List<Field> items = t.getItems();
//x 是跨越值
a:for (int i = 0, x = 0; i < arr.length; i++) {
a:
for (int i = 0, x = 0; i < arr.length; i++) {
int inx = i - x;
if (!items.get(inx).equals(arr[i])) {

View File

@@ -13,10 +13,13 @@ import java.util.concurrent.CompletableFuture;
*/
public class MetaListenter implements ApplicationListener {
@Resource(name = "property.dcate")
@Resource(name = "property.dataCate")
private String dcate;
@Resource(name = "property.tplPath")
private String tplPath;
@Resource(name = "property.dataPath")
private String dataPath;
@Override
public void preStart(Application application) {
@@ -25,6 +28,7 @@ public class MetaListenter implements ApplicationListener {
rf.inject(this);
MetaKit.dcate = dcate;
MetaKit.dataPath = dataPath;
MetaKit.init();
TplKit.use(true).addTpl(new File(FileKit.rootPath(), tplPath));
});

View File

@@ -1,16 +1,23 @@
package net.tccn.dict;
import lombok.Data;
import net.tccn.base.arango.Doc;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author: liangxianyou
*/
@Data
@Table(name = "Dict", catalog = "db_demo")
public class Dict extends Doc<Dict> implements Serializable {
private String type; // 字典类型
private String value; // 字典值
private String label; // 中文名
private String pValue; // 父级字典值
private String code; //
public static Dict dao = Doc.dao(Dict.class);
private String type; // 字典类型
private String value; // 字典值
private String label; // 中文名
private String pValue; // 父级字典值
private String code; //
private String sysPlatId; // 系统平台id
}

View File

@@ -1,10 +1,6 @@
package net.tccn.dict;
import com.arangodb.ArangoDB;
import com.arangodb.ArangoDatabase;
import net.tccn.base.Kv;
import net.tccn.base.MetaKit;
import net.tccn.base.PropKit;
import java.util.*;
@@ -15,9 +11,12 @@ import java.util.*;
* @author: liangxianyou
*/
public final class DictKit {
private static String dcate = "db";
private static String dataPath;
private static Map<String, DictKit> kits = new HashMap<>();
private String platToken;
private Map<String, List<Map>> dicts = new HashMap<>();
private Map<String, List<Dict>> dicts;
private DictKit() {
}
@@ -27,29 +26,27 @@ public final class DictKit {
if (dictKit == null) {
dictKit = new DictKit();
dictKit.platToken = platToken;
dictKit.init();
dictKit.dicts = MetaKit.getDictData(platToken);
kits.put(platToken, dictKit);
}
return dictKit;
}
// 初始化字典,不同模式下,数据来源不同
private void init() {
// arangodb 加载模式
loadByArangodb();
// 文件数据模式
private void stop() {
//文件模式下将 字典数据写入到json文件
}
// excel 加载数据
private void loadByFile() {
// mysql 加载数据
}
/**
* 通过arangodb 加载字典数据
*/
private void loadByArangodb() {
String host = PropKit.getProperty("arango.host");
/*String host = PropKit.getProperty("arango.host");
int port = Kv.toAs(PropKit.getProperty("arango.port", "8529"), int.class);
String user = PropKit.getProperty("arango.user");
String passwd = PropKit.getProperty("arango.passwd");
@@ -57,21 +54,21 @@ public final class DictKit {
ArangoDB arangoDb = new ArangoDB.Builder().host(host, port).user(user).password(passwd).build();
ArangoDatabase dbDemo = arangoDb.db("db_demo");
String platId = MetaKit.getPlatId(platToken);
String platId = "28121369";//MetaKit.getPlatId(platToken);
String dictAQL = String.format("for d in Dict filter d.sysPlatId=='%s'return d", platId);
List<Map<String, String>> list = (List) dbDemo.query(dictAQL, Map.class).asListRemaining();
List<Dict> list = (List) dbDemo.query(dictAQL, Map.class).asListRemaining();
String[] fields = {"label", "value", "pValue"};
list.forEach(x -> {
String type = x.get("type");
List<Map> items = dicts.getOrDefault(type, new ArrayList<>());
List<Dict> items = dicts.getOrDefault(type, new ArrayList<>());
Map dict = new HashMap();
for (String field : fields) {
dict.put(field, x.get(field));
}
items.add(dict);
dicts.put(type, items);
});
});*/
}
/**
@@ -121,33 +118,34 @@ public final class DictKit {
/**
* 查询指定类别的字典
*
* @param code
* @return
*/
public List<Map> getDicts(String code) {
public List<Dict> getDicts(String code) {
Objects.requireNonNull(code, "code 不能为空");
return dicts.getOrDefault(code, new ArrayList<>());
}
public Map<String, List<Map>> getDicts() {
public Map<String, List<Dict>> getDicts() {
return dicts;
}
public String getDictLabel(String code, String value) {
Objects.requireNonNull(code, "code 不能为空");
Objects.requireNonNull(value, "value 不能为空");
List<Map> dicts = getDicts(code);
Optional<Map> any = dicts.stream().filter(x -> value.equals(x.get("value"))).findAny();
return any.isPresent() ? any.get().get("label") + "" : "";
List<Dict> dicts = getDicts(code);
Optional<Dict> any = dicts.stream().filter(x -> value.equals(x.getValue())).findAny();
return any.isPresent() ? any.get().getLabel() : "";
}
public String getDictValue(String code, String label) {
Objects.requireNonNull(code, "code 不能为空");
Objects.requireNonNull(label, "label 不能为空");
List<Map> dicts = getDicts(code);
Optional<Map> any = dicts.stream().filter(x -> label.equals(x.get("label"))).findAny();
return any.isPresent() ? any.get().get("value") + "" : "";
List<Dict> dicts = getDicts(code);
Optional<Dict> any = dicts.stream().filter(x -> label.equals(x.get("label"))).findAny();
return any.isPresent() ? any.get().getValue() : "";
}
//@Test

View File

@@ -1,28 +1,36 @@
package net.tccn.service;
import net.tccn.base.JBean;
import net.tccn.dict.Dict;
import net.tccn.dict.DictKit;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
import java.util.List;
import java.util.Map;
/**
* 字典服务
*
* @author: liangxianyou
*/
@RestService(name = "dict", automapping = true, comment = "字典服务")
public class DictService extends BaseService {
@RestMapping(name = "list")
public JBean list(@RestParam(name = "platToken") String token) {
public JBean list(@RestParam(name = "platToken") String token, String type) {
JBean jBean = new JBean();
DictKit dictKit = DictKit.use(token);
if (!isEmpty(type)) {
List<Dict> dicts = dictKit.getDicts(type);
jBean.setBody(dicts);
} else {
Map dicts = dictKit.getDicts();
jBean.setBody(dicts);
}
Map dicts = dictKit.getDicts();
jBean.setBody(dicts);
return jBean;
}
}