DHTMLXtree:datamap_search.js initTree()
由前台JS可以看出,后台要做的工作:
- 返回值是json类型
- json内有一个元素是msg,树结构会通过msg展现
XMLString拼接规则:DataMapSearchImpl.java initTree
头部信息固定
<?xml version="1.0" encoding="utf-8"?>对于XML本身的自有的斜线是是"/",需要对引用进行转义的字符是""。
节点三要素是id,text,open。
1. id是节点id,不能重复。如果当前节点没有id,可按顺序生成一个(必须要)
2. text是节点展示的名字
3. open表示当前节点是否自动打开这里只有两层树结构所以可以这么简单的写出来,如果有不确定的树结构的时候可以尝试使用递归方法调用
数据地图查询代码解析
有两次查询,一次是echart图表查询(loadEchartData方法),另外一个是datagrid查询(searchDataMap方法)。为了保证这两个查询的数据的一致性,我将这两个查询的关键代码抽成一个公共方法,共享拼装sql(fourLevelQuery方法)。
fourLevelQuery是一个四阶查询方法
-
第一阶:获取查询结果落在表名以及表字段上的结果集
- 涉及表:
- stnd_area_rela 模式与地域关系表
- stnd_dict dict_code为region_domain的部分,为地域字典的配置
- stnd_data_distri 数据地图分布表
- stnd_dict dict_code为business_domain的部分,为业务域的部分
stnd_dict dict_code为system_domain的部分,为系统域的部分
- 代码片段解析:
1. stnd_area_rela表是一个模式对应数个地域代码
2. stnd_dict dict_code为region_domain的部分 配置一个地域代码对应一个地域名称
3. group_concat 将一个schema_id对应的dict_text拼接,按逗号分隔。
4. 将结果作为area视图
这个操作的数据量很少,应该不会影响效率。
片段 2 .
1.将stnd_data_distri表跟片段1以及stnd_dict表的业务部分三个表关联起来。有一个大表stnd_data_distri里面有1W条左右的数据 2.如果查询结果落在db_name,scheme_name,table_name,table_coments,busi_type,area_val上,认为是有效的。
- 涉及表:
片段 3
对于一阶查询,只取查询结果落在表名和表备注上的。
-
第二阶:获取查询结果落在表级,但是没有落在表名和表字段上的结果集
- 涉及表: 跟一阶查询一致
* 思路:先获取全集,再获取第一阶的结果,最后求差集。mysql求差集的方式是利用left join
- 涉及表: 跟一阶查询一致
代码片段解析:
片段1 :
-
1. 求全集与第一阶查询的差别在于没有加最后那个and限制条件
片段2:
1 . 获取全集的id
2 . 获取限制集id
3 . 两个id不能相同(使用别名)
4 . 将两个结果集相同的放到同一行(id相同即可)
5 . 取全集与限制集未公共的部分--即为补集
6 . 千万不可对结果集排序(排序后会打乱原有次序)
- 第三阶 获取查询结果落在字段名为用语的部分
1. 关键代码是ter_name
2. 为什么会有蓝色部分?如果只有term_name,假如没有输入用语,会有什么现象?
- 第三阶 获取查询结果落在字段名为字段名以及字段备注的部分
1. 关键代码是colum_name,colum_comments
2. 为什么蓝色部分也要加?思考一下。