package model import ( "context" "errors" "fmt" "github.com/zeromicro/go-zero/core/stores/sqlx" ) var _ MsMergeServersModel = (*customMsMergeServersModel)(nil) type ( // MsMergeServersModel is an interface to be customized, add more methods here, // and implement the added methods in customMsMergeServersModel. MsMergeServersModel interface { msMergeServersModel withSession(session sqlx.Session) MsMergeServersModel FinalServer(ctx context.Context, childAgentId, childServerId int64) (FinalAgentId, FinalServerServerId int64, err error) } customMsMergeServersModel struct { *defaultMsMergeServersModel } ) func (m *customMsMergeServersModel) FinalServer(ctx context.Context, childAgentId, childServerId int64) (FinalAgentId, FinalServerServerId int64, err error) { query := fmt.Sprintf("select final_agent_id, final_server_id from %s where child_agent_id = ? and child_server_id = ?", m.table) var result struct { FinalServerServerId int64 `db:"final_server_server_id"` // 物理服务器ID,来自mg_servers的自增ID FinalAgentId int64 `db:"final_agent_id"` // 最终被合到了此agent_id下 } err = m.conn.QueryRowCtx(ctx, &result, query, childAgentId, childServerId) switch { case err == nil: return result.FinalAgentId, result.FinalServerServerId, nil case errors.Is(err, sqlx.ErrNotFound): return childAgentId, childServerId, nil default: return 0, 0, err } } // NewMsMergeServersModel returns a model for the database table. func NewMsMergeServersModel(conn sqlx.SqlConn) MsMergeServersModel { return &customMsMergeServersModel{ defaultMsMergeServersModel: newMsMergeServersModel(conn), } } func (m *customMsMergeServersModel) withSession(session sqlx.Session) MsMergeServersModel { return NewMsMergeServersModel(sqlx.NewSqlConnFromSession(session)) }