package domain import ( "git.sxidc.com/go-framework/baize/infrastructure/database/sql" "git.sxidc.com/go-framework/baize/tag/sql/sql_mapping" "git.sxidc.com/go-tools/utils/strutils" "git.sxidc.com/service-supports/fserr" ) type ConditionFieldCallback func(conditions *sql.Conditions, fieldName string, columnName string, value any) (hasDeal bool) type Entity interface { Object DomainCNName() string GenerateID() error GetID() string CheckID(errCode int) error IDColumnName() string QueryDBConditions(callback ConditionFieldCallback) (*sql.Conditions, error) } type BaseEntity struct { ID string `sqlmapping:"column:id;key;" sqlresult:"column:id;"` } func (e *BaseEntity) DomainCNName() string { return "基础实体" } func (e *BaseEntity) GenerateID() error { e.ID = strutils.SimpleUUID() return nil } func (e *BaseEntity) GetID() string { return e.ID } func (e *BaseEntity) CheckID(errCode int) error { if strutils.IsStringEmpty(e.ID) { return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID为空")) } if len([]byte(e.ID)) != FieldIDLen { return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID长度不正确")) } return nil } func (e *BaseEntity) IDColumnName() string { return ColumnID } func (e *BaseEntity) QueryDBConditions(callback ConditionFieldCallback) (*sql.Conditions, error) { fields, err := sql_mapping.DefaultUsage(e) if err != nil { return nil, err } conditions := sql.NewConditions() for _, field := range fields { hasDeal := false if callback != nil { hasDeal = callback(conditions, field.FieldName, field.ColumnName, field.Value) } if !hasDeal { conditions.Equal(field.ColumnName, field.Value) } } return conditions, nil }