1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- package utils
- import (
- "container/list"
- "fmt"
- "git.i2edu.net/i2/i2-bill-erp/transform"
- "github.com/xormplus/xorm"
- )
- func TreeSearch(engine *xorm.Engine, controllername string, apiname string, tableName string, paramMap map[string]interface{}) ([]*transform.TreeNode, error) {
- stplkey := fmt.Sprintf("%s_%s.tpl", controllername, apiname)
- result, err := engine.SqlTemplateClient(stplkey, ¶mMap).Query().List()
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- var nodes = new([]*transform.TreeNode)
- if err != nil {
- return nil, err
- }
- for _, n := range result {
- fmt.Printf("++++++++%T\n", n["parent"])
- node := new(transform.TreeNode)
- node.Id = n["id"].(int64)
- node.Parent, _ = n["parent"].(int64)
- node.Text = n["name"].(string)
- *nodes = append(*nodes, node)
- }
- return BuildTree(nodes)
- }
- func BuildTree(nodes *[]*transform.TreeNode) ([]*transform.TreeNode, error) {
- originNodeList := list.New()
- treeNodeList := list.New()
- var rootArr []*transform.TreeNode
- for _, node := range *nodes {
- if node.Parent == 0 {
- treeNodeList.PushBack(node)
- rootArr = append(rootArr, node)
- } else {
- originNodeList.PushBack(node)
- }
- }
- // 把子节点根据parent分配到对应的父节点上
- for ele := treeNodeList.Front(); ele != nil; ele = ele.Next() {
- treeNode := ele.Value.(*transform.TreeNode)
- originEle := originNodeList.Front()
- if originEle == nil {
- break
- }
- for originEle != nil {
- originNextEle := originEle.Next()
- originNode := originEle.Value.(*transform.TreeNode)
- if originNode.Parent == treeNode.Id {
- treeNodeList.InsertAfter(originNode, ele)
- treeNode.Nodes = append(treeNode.Nodes, originNode)
- originNodeList.Remove(originEle)
- }
- originEle = originNextEle
- }
- }
- return rootArr, nil
- }
- func SqlTemplateSearch(engine *xorm.Engine, controllername string, apiname string, tableName string, paramMap map[string]interface{}) ([]map[string]interface{}, error) {
- stplkey := fmt.Sprintf("%s_%s.tpl", controllername, apiname)
- result, err := engine.SqlTemplateClient(stplkey, ¶mMap).Query().List()
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- return result, nil
- }
|