123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /*
- * @description: 项目节模板
- * @Author: CP
- * @Date: 2020-10-29 09:44:20
- * @FilePath: \construction_management\lib\item_section.go
- */
- package lib
- import (
- "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"`
- Code2 string `josn:"code2"`
- 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
- }
|