recursion.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package util
  2. import (
  3. "app.yhyue.com/moapp/jyResourcesCenter/rpc/resourcesCenter"
  4. "bytes"
  5. "encoding/binary"
  6. "fmt"
  7. )
  8. func MakeTree(Allnode []*resourcesCenter.Organ, node *resourcesCenter.Organ) { //参数为父节点,添加父节点的子节点指针切片
  9. childs, _ := haveChild(Allnode, node) //判断节点是否有子节点并返回
  10. if childs != nil {
  11. node.Data = append(node.Data, childs[0:]...) //添加子节点
  12. for _, v := range childs { //查询子节点的子节点,并添加到子节点
  13. _, has := haveChild(Allnode, v)
  14. if has {
  15. MakeTree(Allnode, v) //递归添加节点
  16. }
  17. }
  18. }
  19. }
  20. //判断是否有子节点
  21. func haveChild(Allnode []*resourcesCenter.Organ, node *resourcesCenter.Organ) (childs []*resourcesCenter.Organ, yes bool) {
  22. for _, v := range Allnode {
  23. if v.ParentId == node.Id {
  24. childs = append(childs, v)
  25. }
  26. }
  27. if childs != nil {
  28. yes = true
  29. }
  30. return
  31. }
  32. //字节数(大端)组转成int(有符号)
  33. func bytesToIntS(b []byte) (int, error) {
  34. if len(b) == 3 {
  35. b = append([]byte{0}, b...)
  36. }
  37. bytesBuffer := bytes.NewBuffer(b)
  38. switch len(b) {
  39. case 1:
  40. var tmp int8
  41. err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
  42. return int(tmp), err
  43. case 2:
  44. var tmp int16
  45. err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
  46. return int(tmp), err
  47. case 4:
  48. var tmp int32
  49. err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
  50. return int(tmp), err
  51. default:
  52. return 0, fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!")
  53. }
  54. }