guoguo 发表于 2021-8-31 11:11:01

【树形字典系列】如何在后台通过几张表格拼接出树形字典

本帖最后由 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;
    }
五、总结(可选)
可以任意拼接自己的项目树,只要按照上面的模板即可。
六、关键字

查询树,树形字典,左侧查询树,树形拼接

wwb5 发表于 2023-8-18 19:16:37

前端怎么传参数
页: [1]
查看完整版本: 【树形字典系列】如何在后台通过几张表格拼接出树形字典