Переглянути джерело

添加PageSearch及TreeSearch方法

zhangjq 6 роки тому
батько
коміт
2db6eb2633

+ 14 - 36
controllers/partial/SystemController.go

@@ -71,35 +71,13 @@ func System_GetMenuTree(c *entitys.CtrlContext) {
 // @Failure 403 :id is empty
 func System_GetOrgTree(c *entitys.CtrlContext) {
 
-	ret := __none_func_system__()
-
-	var orgs []sysmodel.SysOrgTree
-	c.Db.SQL(sysmodel.Selectall_sys_org).Find(&orgs)
-
-	var orgtree []sysmodel.SysOrgTree
-	finChildrenOrg(&orgs, "", nil, &orgtree)
-	for i := 0; i < len(orgtree); i++ {
-		finChildrenOrg(&orgs, orgtree[i].Id, &orgtree[i], &orgtree)
-	}
+	paramMap_i_t := map[string]interface{}{"sort": "name"}
+	result, err := utils.TreeSearch(c.Db, "system","get_org_tree", "sys_org", paramMap_i_t)
 
-	if ret {
-		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", orgtree})
-	} else {
-		c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
-	}
-}
-
-func finChildrenOrg(menus *[]sysmodel.SysOrgTree, parent string, parent_menu *sysmodel.SysOrgTree, menutree *[]sysmodel.SysOrgTree) {
-	for _, m := range *menus {
-		if m.Parent == parent {
-			if parent_menu == nil {
-				*menutree = append(*menutree, m)
-				//finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
-			} else {
-				parent_menu.Children = append(parent_menu.Children, m)
-				finChildrenOrg(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
-			}
-		}
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
+	}else{
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
 	}
 }
 
@@ -129,15 +107,15 @@ func finChildrenMenu(menus *[]sysmodel.SysMenuTree, parent string, parent_menu *
 // @Failure 403 :id is empty
 func System_FindUserPage(c *entitys.CtrlContext) {
 
-	var getpageinfo sysmodel.GetPageInfo
-	c.Ctx.BindJSON(&getpageinfo)
-	err := __none_func_system__(getpageinfo)
-
+	var page int64  = c.Ctx.GetInt64("page")
+	var rows int64 = c.Ctx.GetInt64("rows")
 
-	if err {
-		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
-	} else {
-		c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
+	paramMap_i_t := map[string]interface{}{"page": page, "rows": rows}
+	result, err := utils.PageSearch(c.Db,"system","find_user_page", "sys_user", paramMap_i_t)
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", result})
+	}else{
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
 	}
 
 }

+ 1 - 1
models/PageResult_gen.go

@@ -14,7 +14,7 @@ type PageResult struct {
 	//单页数
 	PageSize   int `json:"pageSize"`
 	//总页数
-	TotalSize   int `json:"totalSize"`
+	TotalSize   int64 `json:"totalSize"`
 	//内容
 	Content   interface{} `json:"content"`
 

+ 21 - 0
models/TreeNode_gen.go

@@ -0,0 +1,21 @@
+
+package models
+import (
+
+//
+)
+
+
+
+type TreeNode struct {
+	
+	//ID
+	Id   string `json:"id"`
+	//标题
+	Text   string `json:"text"`
+	//父结点
+	Parent   string `json:"parent"`
+	//子结点
+	Nodes   []*TreeNode `json:"nodes"`
+
+}

+ 0 - 0
sqlconfig/system_controller/find_user_page_count_gen.tpl → sqlconfig/system_controller/system_find_user_page_count_gen.tpl


+ 0 - 0
sqlconfig/system_controller/find_user_page_select_gen.tpl → sqlconfig/system_controller/system_find_user_page_select_gen.tpl


+ 0 - 0
sqlconfig/system_controller/get_org_tree_gen.tpl → sqlconfig/system_controller/system_get_org_tree_gen.tpl


+ 43 - 0
utils/page_util.go

@@ -0,0 +1,43 @@
+package utils
+
+import (
+	"github.com/xormplus/xorm"
+	"fmt"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+)
+
+// 分页查询
+func PageSearch(engine *xorm.Engine, controllername string, apiname string, tableName string, paramMap map[string]interface{})(*models.PageResult, error){
+	page := paramMap["page"].(int)
+	rows := paramMap["rows"].(int)
+
+	stplkey := fmt.Sprintf("%s_%s_%s_select_gen.stpl",controllername, apiname, tableName)
+	result, err := engine.SqlTemplateClient(stplkey, &paramMap).Query().List()
+	if err != nil{
+		fmt.Println(err)
+		return nil, err
+	}
+
+	stplkey = fmt.Sprintf("%s_%s_count_gen.stpl", tableName)
+	cresult, err := engine.SqlTemplateClient(stplkey, &paramMap).Query().List()
+	if err != nil{
+		fmt.Println(err)
+		return nil, err
+	}
+	records := cresult[0]["records"].(int64)
+
+	var totalSize int64 = 0
+	if records%int64(rows) == 0 {
+		totalSize = records / int64(rows)
+	}else{
+		totalSize = records / int64(rows + 1)
+	}
+
+	presult := models.PageResult{}
+	presult.PageNum = (page)
+	presult.PageSize = (rows)
+	presult.Content = result
+	presult.TotalSize = totalSize
+
+	return &presult, nil
+}

+ 91 - 0
utils/tree_util.go

@@ -0,0 +1,91 @@
+package utils
+
+import (
+	"github.com/xormplus/xorm"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+	"fmt"
+	"container/list"
+)
+
+// 树形结构
+func TreeSearch(engine *xorm.Engine, controllername string, apiname string, tableName string, paramMap map[string]interface{})([]*models.TreeNode, error){
+	stplkey := fmt.Sprintf("%s_%s_%s_gen.stpl",controllername, apiname, tableName)
+	result, err := engine.SqlTemplateClient(stplkey, &paramMap).Query().List()
+	if err != nil{
+		fmt.Println(err)
+		return nil, err
+	}
+
+	return buildTree("", result)
+}
+
+func buildTree(root string, treeSrcs []map[string]interface{}) ([]*models.TreeNode, error) {
+	rootArr := []*models.TreeNode{}
+
+	paramsArr := treeSrcs
+	valueFiled := "id"
+	parentField := "parent"
+	textFiled := "name"
+	parentValue := root
+
+	treeNodeList := list.New()
+	originNodeList := list.New()
+
+	// 区分root节点和子节点数组
+	for _, params := range paramsArr {
+		value := toString(params[valueFiled], "")
+		parent := toString(params[parentField], "")
+		text := toString(params[textFiled], "")
+		// 如果根节点root为空,则从parent为空中获取root节点数组
+		// 如果root不为空,则获取id等于的节点为root节点数组
+		if (parentValue == "" && parent == "") || value == parentValue {
+			node := &models.TreeNode{
+				Id:     value,
+				Text:   text,
+				Parent: parent,
+			}
+			treeNodeList.PushBack(node)
+			rootArr = append(rootArr, node)
+		} else {
+			originNodeList.PushBack(&models.TreeNode{
+				Id:     value,
+				Text:   text,
+				Parent: parent,
+			})
+		}
+	}
+
+	// 把子节点根据parent分配到对应的父节点上
+	for ele := treeNodeList.Front(); ele != nil; ele = ele.Next() {
+		treeNode := ele.Value.(*models.TreeNode)
+		originEle := originNodeList.Front()
+		if originEle == nil {
+			break
+		}
+		for originEle != nil {
+			originNextEle := originEle.Next()
+			originNode := originEle.Value.(*models.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 toString(v interface{}, defaultValue string)string{
+	if v == nil{
+		return defaultValue
+	}
+	strv, flag := v.(string)
+	if !flag{
+		return defaultValue
+	}else{
+		return strv
+	}
+}