package bo import ( "scd_check_tools/logger" "scd_check_tools/models/enum" "errors" "fmt" "strconv" "strings" "github.com/astaxie/beego/orm" ) type ClientNode struct { DeviceBaseModel field map[string]interface{} } var Nodes = make(map[string]string) //判断节点,如果存在不处理,不存在则入库 func (c *ClientNode) CheckNodes(node string) { if len(Nodes) == 0 { db := orm.NewOrm() var tableData []orm.Params var sqlCommandText = "select device_sn from global_client_node;" _, err := db.Raw(sqlCommandText).Values(&tableData) if err == nil { for _, record := range tableData { sn := record["device_sn"].(string) Nodes[sn] = sn } } } if _, ok2 := Nodes[node]; !ok2 { //如果不存在节点并添加节点 err := c.SaveNode(0, 1, "", node) if err == nil { Nodes[node] = node } } } func (c *ClientNode) SaveNode(id, sync int, orgId, deviceSN string) error { db := orm.NewOrm() exists, err := check_exist_node(id, deviceSN) if err != nil { return err } else { if exists { return errors.New("已存在客户端节点:" + deviceSN) } } dblog := new(SystemLog) dblog.SetUserInfo(map[string]interface{}{"name": "", "ip": "127.0.0.1"}) dblog.Audittype = enum.AuditType_Client dblog.Logtype = enum.LogType_Update dblog.Eventtype = enum.OptEventType_System dblog.Eventlevel = enum.OptEventLevel_Low var sqlCommandText string var sqlParameter []interface{} if id == 0 { dblog.Logtype = enum.LogType_Insert sqlCommandText = "insert into global_client_node(orgid,device_sn,is_sync)values(?,?,?);" sqlParameter = append(sqlParameter, orgId, deviceSN, sync) } else { sqlCommandText = "update global_client_node set orgid=?,device_sn=? where id=?;" sqlParameter = append(sqlParameter, orgId, deviceSN, id) } _, err = db.Raw(sqlCommandText, sqlParameter).Exec() if err != nil { dblog.Description = fmt.Sprintf("保存客户节点|%s失败,错误原因:%s", deviceSN, err.Error()) dblog.Fail2() logger.Logger.Error(err) } else { dblog.Description = fmt.Sprintf("保存客户节点%s成功", deviceSN) dblog.Success2() } return err } func check_exist_node(id int, deviceSN string) (bool, error) { o := orm.NewOrm() var sqlCommandText string var sqlParameter []interface{} var exists bool if id == 0 { sqlCommandText = "select * from global_client_node where device_sn=?;" sqlParameter = append(sqlParameter, deviceSN) } else { sqlCommandText = "select * from global_client_node where device_sn=? and id!=?;" sqlParameter = append(sqlParameter, deviceSN, id) } var tableData []orm.Params _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData) if err == nil { if len(tableData) > 0 { exists = true } else { exists = false } } else { exists = true } return exists, err } func (c *ClientNode) SearchNode(orgId, device_sn string, pageIndex, pageSize int) ([]orm.Params, int, error) { o := orm.NewOrm() var sqlCommandText, totalSql string var sqlCondition []string var sqlParameter []interface{} 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` " + "from global_client_node a " if device_sn != "" { sqlCondition = append(sqlCondition, "a.device_sn like concat('%',?,'%')") sqlParameter = append(sqlParameter, device_sn) } if orgId != "" && orgId != "0" { sqlCondition = append(sqlCondition, "a.orgid=?") sqlParameter = append(sqlParameter, orgId) } if len(sqlCondition) > 0 { conditionStr := " where " + strings.Join(sqlCondition, " and ") sqlCommandText += conditionStr totalSql = "select count(1) number from global_client_node a " + conditionStr } else { totalSql = "select count(1) number from global_client_node a " } var limit = " limit " + strconv.Itoa((pageIndex-1)*pageSize) + "," + strconv.Itoa(pageSize) sqlCommandText += " order by a.id desc " + limit dblog := new(SystemLog) dblog.SetUserInfo(c.GetUserInfo()) dblog.Audittype = enum.AuditType_Client dblog.Logtype = enum.LogType_Query dblog.Eventtype = enum.OptEventType_Bus dblog.Eventlevel = enum.OptEventLevel_Low var tableData []orm.Params var number int _, err := o.Raw(sqlCommandText, sqlParameter).Values(&tableData) dblog.Description = fmt.Sprintf("SQL:%s,参数:%+v", sqlCommandText, sqlParameter) if err == nil { dblog.Success2() var totalData []orm.Params _, err = o.Raw(totalSql, sqlParameter).Values(&totalData) if err == nil { number, _ = strconv.Atoi(totalData[0]["number"].(string)) } } else { dblog.Fail2() logger.Logger.Error(err, dblog.Description) } return tableData, number, err }