【树形字典系列】如何在后台通过几张表格拼接出树形字典
本帖最后由 guoguo 于 2021-8-31 11:15 编辑一、实现效果
如图1所示,通过几张普通表拼接成树形表。:
二、实现思路
1、创建数据字典
2、后台拼接该字典
三、具体操作
1、创建树形数据字典,选择自定义,只需要写明java bean的名称和方法名即可,如图2:
2、如图3所示,代码分析如下:
1)树形数据字典要求返回的是JSONTreeNode类型。
2)参数固定是DicInfoVo的格式,前端会将参数传过来,并封装到java该类中。
3)取出所有基础数据
4)将取出的普通数据拼接成可树形模式的数据加入到主数据中
3、如图4,代码分析如下:
1)获取根节点数据集合
2)定义一个集合,用来存放根节点信息
3)循环根节点,并且封装根节点以下节点
4)把根节点放入集合中
四、相关代码(可选)
@Component("dictXmsService")
public class DictXmsServiceImpl implements DictXmsService {
@Autowired
private PCDynaServiceTemplate serviceTemplate;
@Override
public JSONTreeNode getDictXmsTree(DicInfoVo dicInfoVo) {
JSONTreeNode rootNode = TreeUtil.buildRootNode();
EndUser currentUser = SecurityUserHolder.getCurrentUser();
//获取自定义字典表中数据集合,主数据树
List<DynaBean> zhjDynaBeanList = serviceTemplate.selectList("BFSY_BASE_XM", "AND 1 = 1 AND INSTR((SELECT JDGSINFO_JGGS_ID FROM JE_CORE_JDGSINFO WHERE JE_CORE_YWCJ_ID='rMHNXUwdwZ1G102goeK' AND JDGSINFO_TYPE_CODE='SHOW' AND JDGSINFO_JGGS_ID IS NOT NULL AND JDGSINFO_JGGS_ID!='' AND SY_JTGSID = '"+currentUser.getJtgsId()+"'),SY_JTGSID)>0 order by SY_ORDERINDEX");
//AND INSTR((SELECT JDGSINFO_JGGS_ID FROM JE_CORE_JDGSINFO WHERE JE_CORE_YWCJ_ID='rMHNXUwdwZ1G102goeK' AND JDGSINFO_TYPE_CODE='SHOW' AND JDGSINFO_JGGS_ID IS NOT NULL AND JDGSINFO_JGGS_ID!='' AND SY_JTGSID = currentUser.getJtgsId()),SY_JTGSID)>0
//获取区域数据集合
List<DynaBean> qyDynaBeanList = serviceTemplate.selectList("BFSY_XS_QY", "AND BFSY_XS_QY_ID != 'ROOT' order by QY_CODE");
//获取栋楼数据集合
List<DynaBean> dlDynaBeanList = serviceTemplate.selectList("BFSY_XS_LD", "AND 1 = 1 order by LD_CODE");
//获取单元数据集合
List<DynaBean> dyDynaBeanList = serviceTemplate.selectList("BFSY_XS_DY", "AND 1 = 1 order by DY_NUMBER");
for(DynaBean zhj : zhjDynaBeanList){
zhj.set("nodeInfo", "SY_XMID"); //点左侧项目树查询功能查询字段
}
//区域数据加入主数据
for(DynaBean qy : qyDynaBeanList){
DynaBean bean = new DynaBean("BFSY_BASE_XM", true);
bean.set("BFSY_BASE_XM_ID", qy.getStr("BFSY_XS_QY_ID")); //主键赋值
bean.set("SY_PARENT", qy.getStr("SY_XMID")); //父节点赋值
bean.set("XM_XMBM", qy.getStr("QY_CODE")); //区域编码
bean.set("XM_NAME", qy.getStr("QY_NAME")); //区域名称
bean.set("nodeInfo", "QY_ID"); //点左侧项目树查询功能查询字段
zhjDynaBeanList.add(bean);
}
//栋楼数据加入主数据
for(DynaBean dl : dlDynaBeanList){
DynaBean bean = new DynaBean("BFSY_BASE_XM", true);
bean.set("BFSY_BASE_XM_ID", dl.getStr("BFSY_XS_LD_ID")); //主键赋值
bean.set("SY_PARENT", dl.getStr("QY_ID")); //父节点赋值
bean.set("XM_XMBM", dl.getStr("LD_CODE")); //栋楼编码
bean.set("XM_NAME", dl.getStr("LD_NAME")); //栋楼名称
bean.set("nodeInfo", "LD_ID"); //点左侧项目树查询功能查询字段
zhjDynaBeanList.add(bean);
}
//单元数据加入主数据
for(DynaBean dy : dyDynaBeanList){
DynaBean bean = new DynaBean("BFSY_BASE_XM", true);
bean.set("BFSY_BASE_XM_ID", dy.getStr("BFSY_XS_DY_ID")); //主键赋值
bean.set("SY_PARENT", dy.getStr("LD_ID")); //父节点赋值
bean.set("XM_XMBM", dy.getStr("DY_CODE")); //栋楼编码
bean.set("XM_NAME", dy.getStr("DY_NAME")); //栋楼名称
bean.set("nodeInfo", "DY_ID"); //点左侧项目树查询功能查询字段
zhjDynaBeanList.add(bean);
}
//获取根节点数据集合
List<DynaBean> dynaBeanNodeList = this.getRootNode(zhjDynaBeanList);
//定义一个集合,用来存放根节点信息
List<JSONTreeNode> childrenList = new ArrayList<>();
//循环根节点,并且封装根节点以下节点
for(DynaBean dynaBean : dynaBeanNodeList){
JSONTreeNode node = TreeUtil.buildRootNode();
node.setId((String)dynaBean.get("XM_XMBM"));//主键ID
node.setCode((String)dynaBean.get("BFSY_BASE_XM_ID"));//编码
node.setText((String)dynaBean.get("XM_NAME"));//名称
node.setParent((String)dynaBean.get("SY_PARENT"));//父节点信息
node.setNodeInfo((String)dynaBean.get("nodeInfo"));//左侧项目树查询字段
node.setIcon("fe icon-book-alt");//图标自己看着定义
//看是否有下级节点
buildChilNode(node, zhjDynaBeanList);
childrenList.add(node);
}
//把根节点放入集合中
rootNode.setChildren(childrenList);
rootNode.setText("项目");
rootNode.setNodeInfo("SY_XMID");
return rootNode;
}
五、总结(可选)
可以任意拼接自己的项目树,只要按照上面的模板即可。
六、关键字
查询树,树形字典,左侧查询树,树形拼接
前端怎么传参数
页:
[1]