| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | /* * @description: 项目节模板 * @Author: CP * @Date: 2020-10-29 09:44:20 * @FilePath: \construction_management\lib\item_section.go */package libimport (	"encoding/json"	"io/ioutil"	"log")type ItemSection struct {	TemplateTree1 *ItemSectionTemplateTree	TemplateList1 []*ItemSectionTemplateTree	TemplateRule1 string	TemplateTree2 *ItemSectionTemplateTree	TemplateList2 []*ItemSectionTemplateTree	TemplateRule2 string}// 初始化项目节-树结构func NewItemSection() *ItemSection {	return &ItemSection{		TemplateTree1: makeItemSectionTemplateTree("1"),		TemplateRule1: "-",		TemplateTree2: makeItemSectionTemplateTree("2"),		TemplateRule2: "-",	}}func NewItemSectionData() *ItemSection {	return &ItemSection{		TemplateList1: makeTemplateData("1"),		TemplateRule1: "-",		TemplateList2: makeTemplateData("2"),		TemplateRule2: "-",	}}// 项目节模板type ItemSectionTemplateTree struct {	Id          int                        `form:"id" json:"id" `	ParentId    int                        `form:"parentId" json:"parentId"`	Name        string                     `form:"name" json:"name"`	Depth       int                        `form:"depth" json:"depth"`	Serial      int                        `form:"serial" json:"serial"`	Attribution string                     `form:"attribution" json:"attribution"`	Leaf        bool                       `json:"leaf" `	Children    []*ItemSectionTemplateTree `json:"children"`	IsEnd bool `json:"isEnd"`}// 获得项目节模板数据func makeTemplateData(templateNumber string) []*ItemSectionTemplateTree {	templateList := make([]*ItemSectionTemplateTree, 0)	// 读取模板文件	data, err := ioutil.ReadFile("../lib/section_template" + templateNumber + ".json")	if err != nil {		log.Println("项目节模板文件读取出错:err=", err)		return nil	}	err = json.Unmarshal(data, &templateList)	if err != nil {		log.Println("项目节模板Json转换出错:err=", err)		return nil	}	return templateList}// 初始化项目节模板// func NewTemplate() Template {// 	return nil// }// 生成树func makeItemSectionTemplateTree(templateNumber string) *ItemSectionTemplateTree {	// templateList := make([]*ItemSectionTemplateTree, 0)	// // 读取模板文件	// data, err := ioutil.ReadFile("../lib/" + fileName)	// if err != nil {	// 	log.Println("项目节模板文件读取出错:err=", err)	// 	return nil	// }	// err = json.Unmarshal(data, &templateList)	// if err != nil {	// 	log.Println("项目节模板Json转换出错:err=", err)	// 	return nil	// }	templateList := makeTemplateData(templateNumber)	// 生成根	template := &ItemSectionTemplateTree{}	template.Id = 0	template.Name = "root"	template.ParentId = -1	templateList = append(templateList, template)	node := template             //父节点	maketree(templateList, node) //调用生成tree	return node}// 创建一颗树...interface{}func maketree(Data []*ItemSectionTemplateTree, node *ItemSectionTemplateTree) { //参数为父节点,添加父节点的子节点指针切片	childs, _ := havechild(Data, node) //判断节点是否有子节点并返回	if childs != nil {		// 子节点总数		Total := len(childs)		// 标记最后一个元素		end := Total - 1		childs[end].IsEnd = true		// 往父节点添加子节点		node.Children = append(node.Children, childs[0:]...) //添加子节点		for _, v := range childs {                           //查询子节点的子节点,并添加到子节点			_, has := havechild(Data, v)			if has {				// 递归添加节点				maketree(Data, v)			}			// else {			// 	// 叶子节点			// 	node.Leaf = false			// }		}	}}// 是否有子树func havechild(Data []*ItemSectionTemplateTree, node *ItemSectionTemplateTree) (child []*ItemSectionTemplateTree, yes bool) {	for _, v := range Data {		if v.ParentId == node.Id {			child = append(child, v)		}	}	if child != nil {		yes = true	}	return}
 |