client_node.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package bo
  2. import (
  3. "scd_check_tools/logger"
  4. "scd_check_tools/models/enum"
  5. "errors"
  6. "fmt"
  7. "strconv"
  8. "strings"
  9. "github.com/astaxie/beego/orm"
  10. )
  11. type ClientNode struct {
  12. DeviceBaseModel
  13. field map[string]interface{}
  14. }
  15. var Nodes = make(map[string]string)
  16. //判断节点,如果存在不处理,不存在则入库
  17. func (c *ClientNode) CheckNodes(node string) {
  18. if len(Nodes) == 0 {
  19. db := orm.NewOrm()
  20. var tableData []orm.Params
  21. var sqlCommandText = "select device_sn from global_client_node;"
  22. _, err := db.Raw(sqlCommandText).Values(&tableData)
  23. if err == nil {
  24. for _, record := range tableData {
  25. sn := record["device_sn"].(string)
  26. Nodes[sn] = sn
  27. }
  28. }
  29. }
  30. if _, ok2 := Nodes[node]; !ok2 { //如果不存在节点并添加节点
  31. err := c.SaveNode(0, 1, "", node)
  32. if err == nil {
  33. Nodes[node] = node
  34. }
  35. }
  36. }
  37. func (c *ClientNode) SaveNode(id, sync int, orgId, deviceSN string) error {
  38. db := orm.NewOrm()
  39. exists, err := check_exist_node(id, deviceSN)
  40. if err != nil {
  41. return err
  42. } else {
  43. if exists {
  44. return errors.New("已存在客户端节点:" + deviceSN)
  45. }
  46. }
  47. dblog := new(SystemLog)
  48. dblog.SetUserInfo(map[string]interface{}{"name": "", "ip": "127.0.0.1"})
  49. dblog.Audittype = enum.AuditType_Client
  50. dblog.Logtype = enum.LogType_Update
  51. dblog.Eventtype = enum.OptEventType_System
  52. dblog.Eventlevel = enum.OptEventLevel_Low
  53. var sqlCommandText string
  54. var sqlParameter []interface{}
  55. if id == 0 {
  56. dblog.Logtype = enum.LogType_Insert
  57. sqlCommandText = "insert into global_client_node(orgid,device_sn,is_sync)values(?,?,?);"
  58. sqlParameter = append(sqlParameter, orgId, deviceSN, sync)
  59. } else {
  60. sqlCommandText = "update global_client_node set orgid=?,device_sn=? where id=?;"
  61. sqlParameter = append(sqlParameter, orgId, deviceSN, id)
  62. }
  63. _, err = db.Raw(sqlCommandText, sqlParameter).Exec()
  64. if err != nil {
  65. dblog.Description = fmt.Sprintf("保存客户节点|%s失败,错误原因:%s", deviceSN, err.Error())
  66. dblog.Fail2()
  67. logger.Logger.Error(err)
  68. } else {
  69. dblog.Description = fmt.Sprintf("保存客户节点%s成功", deviceSN)
  70. dblog.Success2()
  71. }
  72. return err
  73. }
  74. func check_exist_node(id int, deviceSN string) (bool, error) {
  75. o := orm.NewOrm()
  76. var sqlCommandText string
  77. var sqlParameter []interface{}
  78. var exists bool
  79. if id == 0 {
  80. sqlCommandText = "select * from global_client_node where device_sn=?;"
  81. sqlParameter = append(sqlParameter, deviceSN)
  82. } else {
  83. sqlCommandText = "select * from global_client_node where device_sn=? and id!=?;"
  84. sqlParameter = append(sqlParameter, deviceSN, id)
  85. }
  86. var tableData []orm.Params
  87. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData)
  88. if err == nil {
  89. if len(tableData) > 0 {
  90. exists = true
  91. } else {
  92. exists = false
  93. }
  94. } else {
  95. exists = true
  96. }
  97. return exists, err
  98. }
  99. func (c *ClientNode) SearchNode(orgId, device_sn string, pageIndex, pageSize int) ([]orm.Params, int, error) {
  100. o := orm.NewOrm()
  101. var sqlCommandText, totalSql string
  102. var sqlCondition []string
  103. var sqlParameter []interface{}
  104. sqlCommandText = "select id,device_sn,orgid,(select name from t_data_organization b where a.orgid=b.id) orgname,case when status=1 then '在用' else '停用' end status,is_sync,`date` " +
  105. "from global_client_node a "
  106. if device_sn != "" {
  107. sqlCondition = append(sqlCondition, "a.device_sn like concat('%',?,'%')")
  108. sqlParameter = append(sqlParameter, device_sn)
  109. }
  110. if orgId != "" && orgId != "0" {
  111. sqlCondition = append(sqlCondition, "a.orgid=?")
  112. sqlParameter = append(sqlParameter, orgId)
  113. }
  114. if len(sqlCondition) > 0 {
  115. conditionStr := " where " + strings.Join(sqlCondition, " and ")
  116. sqlCommandText += conditionStr
  117. totalSql = "select count(1) number from global_client_node a " + conditionStr
  118. } else {
  119. totalSql = "select count(1) number from global_client_node a "
  120. }
  121. var limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize)
  122. sqlCommandText += " order by a.id desc " + limit
  123. dblog := new(SystemLog)
  124. dblog.SetUserInfo(c.GetUserInfo())
  125. dblog.Audittype = enum.AuditType_Client
  126. dblog.Logtype = enum.LogType_Query
  127. dblog.Eventtype = enum.OptEventType_Bus
  128. dblog.Eventlevel = enum.OptEventLevel_Low
  129. var tableData []orm.Params
  130. var number int
  131. _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData)
  132. dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, sqlParameter)
  133. if err == nil {
  134. dblog.Success2()
  135. var totalData []orm.Params
  136. _, err = o.Raw(totalSql, sqlParameter).Values(&totalData)
  137. if err == nil {
  138. number, _ = strconv.Atoi(totalData[0]["number"].(string))
  139. }
  140. } else {
  141. dblog.Fail2()
  142. logger.Logger.Error(err, dblog.Description)
  143. }
  144. return tableData, number, err
  145. }