|
@@ -0,0 +1,145 @@
|
|
|
+/*
|
|
|
+ * @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"`
|
|
|
+
|
|
|
+ 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
|
|
|
+}
|