// Code generated by goctl. DO NOT EDIT. // versions: // goctl version: 1.10.0 package product import ( "context" "database/sql" "fmt" "strings" "github.com/zeromicro/go-zero/core/stores/builder" "github.com/zeromicro/go-zero/core/stores/cache" "github.com/zeromicro/go-zero/core/stores/sqlc" "github.com/zeromicro/go-zero/core/stores/sqlx" "github.com/zeromicro/go-zero/core/stringx" ) var ( sysProductFieldNames = builder.RawFieldNames(&SysProduct{}) sysProductRows = strings.Join(sysProductFieldNames, ",") sysProductRowsExpectAutoSet = strings.Join(stringx.Remove(sysProductFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",") sysProductRowsWithPlaceHolder = strings.Join(stringx.Remove(sysProductFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?" cacheSysProductIdPrefix = "cache:sysProduct:id:" cacheSysProductAppKeyPrefix = "cache:sysProduct:appKey:" cacheSysProductCodePrefix = "cache:sysProduct:code:" ) type ( sysProductModel interface { Insert(ctx context.Context, data *SysProduct) (sql.Result, error) InsertWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) (sql.Result, error) BatchInsert(ctx context.Context, dataList []*SysProduct) error BatchInsertWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error TransactCtx(ctx context.Context, fn func(context.Context, sqlx.Session) error) error FindOne(ctx context.Context, id int64) (*SysProduct, error) FindOneWithTx(ctx context.Context, session sqlx.Session, id int64) (*SysProduct, error) FindOneByAppKey(ctx context.Context, appKey string) (*SysProduct, error) FindOneByAppKeyWithTx(ctx context.Context, session sqlx.Session, appKey string) (*SysProduct, error) FindOneByCode(ctx context.Context, code string) (*SysProduct, error) FindOneByCodeWithTx(ctx context.Context, session sqlx.Session, code string) (*SysProduct, error) Update(ctx context.Context, data *SysProduct) error UpdateWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) error BatchUpdate(ctx context.Context, dataList []*SysProduct) error BatchUpdateWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error Delete(ctx context.Context, id int64) error DeleteWithTx(ctx context.Context, session sqlx.Session, id int64) error BatchDelete(ctx context.Context, ids []int64) error BatchDeleteWithTx(ctx context.Context, session sqlx.Session, ids []int64) error TableName() string } defaultSysProductModel struct { sqlc.CachedConn table string } SysProduct struct { Id int64 `db:"id"` // ID Code string `db:"code"` // 产品编码(唯一标识) Name string `db:"name"` // 产品名称 AppKey string `db:"appKey"` // 产品接入密钥 AppSecret string `db:"appSecret"` // 产品接入签名密钥 Remark string `db:"remark"` // 备注 Status int64 `db:"status"` // 状态 1启用 2禁用 CreateTime int64 `db:"createTime"` // 创建时间 UpdateTime int64 `db:"updateTime"` // 修改时间 } ) func newSysProductModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) *defaultSysProductModel { if cachePrefix != "" { cacheSysProductIdPrefix = cachePrefix + ":" + "cache:sysProduct:id:" cacheSysProductAppKeyPrefix = cachePrefix + ":" + "cache:sysProduct:appKey:" cacheSysProductCodePrefix = cachePrefix + ":" + "cache:sysProduct:code:" } return &defaultSysProductModel{ CachedConn: sqlc.NewConn(conn, c, opts...), table: "`sys_product`", } } func (m *defaultSysProductModel) Delete(ctx context.Context, id int64) error { data, err := m.FindOne(ctx, id) if err != nil { return err } sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("DELETE FROM %s WHERE `id` = ?", m.table) return conn.ExecCtx(ctx, query, id) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return err } func (m *defaultSysProductModel) DeleteWithTx(ctx context.Context, session sqlx.Session, id int64) error { data, err := m.FindOne(ctx, id) if err != nil { return err } sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("DELETE FROM %s WHERE `id` = ?", m.table) return session.ExecCtx(ctx, query, id) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return err } func (m *defaultSysProductModel) BatchDelete(ctx context.Context, ids []int64) error { if len(ids) == 0 { return nil } primaryKeys := make([]interface{}, 0, len(ids)) for _, key := range ids { primaryKeys = append(primaryKeys, key) } oldDataList, err := m.findListByPrimaryKeys(ctx, primaryKeys) if err != nil { return err } keys := make([]string, 0) for _, data := range oldDataList { id := m.getPrimaryKeyValue(data) sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } placeholders := make([]string, 0, len(ids)) args := make([]interface{}, 0, len(ids)) for _, id := range ids { placeholders = append(placeholders, "?") args = append(args, id) } _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("DELETE FROM %s WHERE `id` IN (%s)", m.table, strings.Join(placeholders, ",")) return conn.ExecCtx(ctx, query, args...) }, keys...) return err } func (m *defaultSysProductModel) BatchDeleteWithTx(ctx context.Context, session sqlx.Session, ids []int64) error { if len(ids) == 0 { return nil } primaryKeys := make([]interface{}, 0, len(ids)) for _, key := range ids { primaryKeys = append(primaryKeys, key) } oldDataList, err := m.findListByPrimaryKeys(ctx, primaryKeys) if err != nil { return err } keys := make([]string, 0) for _, data := range oldDataList { id := m.getPrimaryKeyValue(data) sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } placeholders := make([]string, 0, len(ids)) args := make([]interface{}, 0, len(ids)) for _, id := range ids { placeholders = append(placeholders, "?") args = append(args, id) } query := fmt.Sprintf("DELETE FROM %s WHERE `id` IN (%s)", m.table, strings.Join(placeholders, ",")) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { return session.ExecCtx(ctx, query, args...) }, keys...) return err } func (m *defaultSysProductModel) FindOne(ctx context.Context, id int64) (*SysProduct, error) { sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, id) var resp SysProduct err := m.QueryRowCtx(ctx, &resp, sysProductIdKey, func(ctx context.Context, conn sqlx.SqlConn, v any) error { query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table) return conn.QueryRowCtx(ctx, v, query, id) }) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) FindOneWithTx(ctx context.Context, session sqlx.Session, id int64) (*SysProduct, error) { var resp SysProduct query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table) err := session.QueryRowCtx(ctx, &resp, query, id) switch err { case nil: return &resp, nil case sqlx.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) FindOneByAppKey(ctx context.Context, appKey string) (*SysProduct, error) { sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, appKey) var resp SysProduct err := m.QueryRowIndexCtx(ctx, &resp, sysProductAppKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) { query := fmt.Sprintf("SELECT %s FROM %s WHERE `appKey` = ? LIMIT 1", sysProductRows, m.table) if err := conn.QueryRowCtx(ctx, &resp, query, appKey); err != nil { return nil, err } return resp.Id, nil }, m.queryPrimary) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) FindOneByAppKeyWithTx(ctx context.Context, session sqlx.Session, appKey string) (*SysProduct, error) { var resp SysProduct query := fmt.Sprintf("SELECT %s FROM %s WHERE `appKey` = ? LIMIT 1", sysProductRows, m.table) err := session.QueryRowCtx(ctx, &resp, query, appKey) switch err { case nil: return &resp, nil case sqlx.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) FindOneByCode(ctx context.Context, code string) (*SysProduct, error) { sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, code) var resp SysProduct err := m.QueryRowIndexCtx(ctx, &resp, sysProductCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) { query := fmt.Sprintf("SELECT %s FROM %s WHERE `code` = ? LIMIT 1", sysProductRows, m.table) if err := conn.QueryRowCtx(ctx, &resp, query, code); err != nil { return nil, err } return resp.Id, nil }, m.queryPrimary) switch err { case nil: return &resp, nil case sqlc.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) FindOneByCodeWithTx(ctx context.Context, session sqlx.Session, code string) (*SysProduct, error) { var resp SysProduct query := fmt.Sprintf("SELECT %s FROM %s WHERE `code` = ? LIMIT 1", sysProductRows, m.table) err := session.QueryRowCtx(ctx, &resp, query, code) switch err { case nil: return &resp, nil case sqlx.ErrNotFound: return nil, ErrNotFound default: return nil, err } } func (m *defaultSysProductModel) Insert(ctx context.Context, data *SysProduct) (sql.Result, error) { sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysProductRowsExpectAutoSet) return conn.ExecCtx(ctx, query, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return ret, err } func (m *defaultSysProductModel) InsertWithTx(ctx context.Context, session sqlx.Session, data *SysProduct) (sql.Result, error) { sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("INSERT INTO %s (%s) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysProductRowsExpectAutoSet) return session.ExecCtx(ctx, query, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return ret, err } func (m *defaultSysProductModel) BatchInsert(ctx context.Context, dataList []*SysProduct) error { if len(dataList) == 0 { return nil } keys := make([]string, 0, len(dataList)) valueSets := make([]string, 0, len(dataList)) args := make([]interface{}, 0) for _, data := range dataList { valueSets = append(valueSets, "(?, ?, ?, ?, ?, ?, ?, ?)") args = append(args, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime) sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } query := fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", m.table, sysProductRowsExpectAutoSet, strings.Join(valueSets, ",")) _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { return conn.ExecCtx(ctx, query, args...) }, keys...) return err } func (m *defaultSysProductModel) BatchInsertWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error { if len(dataList) == 0 { return nil } keys := make([]string, 0, len(dataList)) valueSets := make([]string, 0, len(dataList)) args := make([]interface{}, 0) for _, data := range dataList { valueSets = append(valueSets, "(?, ?, ?, ?, ?, ?, ?, ?)") args = append(args, data.Code, data.Name, data.AppKey, data.AppSecret, data.Remark, data.Status, data.CreateTime, data.UpdateTime) sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } query := fmt.Sprintf("INSERT INTO %s (%s) VALUES %s", m.table, sysProductRowsExpectAutoSet, strings.Join(valueSets, ",")) _, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { return session.ExecCtx(ctx, query, args...) }, keys...) return err } func (m *defaultSysProductModel) Update(ctx context.Context, newData *SysProduct) error { data, err := m.FindOne(ctx, newData.Id) if err != nil { return err } sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` = ?", m.table, sysProductRowsWithPlaceHolder) return conn.ExecCtx(ctx, query, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return err } func (m *defaultSysProductModel) UpdateWithTx(ctx context.Context, session sqlx.Session, newData *SysProduct) error { data, err := m.FindOne(ctx, newData.Id) if err != nil { return err } sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` = ?", m.table, sysProductRowsWithPlaceHolder) return session.ExecCtx(ctx, query, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id) }, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) return err } func (m *defaultSysProductModel) BatchUpdate(ctx context.Context, dataList []*SysProduct) error { if len(dataList) == 0 { return nil } keys := make([]string, 0) primaryKeys := make([]interface{}, 0, len(dataList)) for _, item := range dataList { primaryKeys = append(primaryKeys, item.Id) } oldList, err := m.findListByPrimaryKeys(ctx, primaryKeys) if err != nil { return err } for _, data := range oldList { sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } query, vals := m.buildBatchUpdateQuery(dataList) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { return conn.ExecCtx(ctx, query, vals...) }, keys...) return err } func (m *defaultSysProductModel) BatchUpdateWithTx(ctx context.Context, session sqlx.Session, dataList []*SysProduct) error { if len(dataList) == 0 { return nil } keys := make([]string, 0) primaryKeys := make([]interface{}, 0, len(dataList)) for _, item := range dataList { primaryKeys = append(primaryKeys, item.Id) } oldList, err := m.findListByPrimaryKeys(ctx, primaryKeys) if err != nil { return err } for _, data := range oldList { sysProductAppKeyKey := fmt.Sprintf("%s%v", cacheSysProductAppKeyPrefix, data.AppKey) sysProductCodeKey := fmt.Sprintf("%s%v", cacheSysProductCodePrefix, data.Code) sysProductIdKey := fmt.Sprintf("%s%v", cacheSysProductIdPrefix, data.Id) keys = append(keys, sysProductAppKeyKey, sysProductCodeKey, sysProductIdKey) } query, vals := m.buildBatchUpdateQuery(dataList) _, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) { return session.ExecCtx(ctx, query, vals...) }, keys...) return err } func (m *defaultSysProductModel) buildBatchUpdateQuery(dataList []*SysProduct) (string, []interface{}) { fields := strings.Split(strings.ReplaceAll(sysProductRowsWithPlaceHolder, "=?", ""), ",") listValues := make([][]interface{}, 0, len(dataList)) for _, newData := range dataList { values := make([]interface{}, 0, len(fields)+1) values = append(values, newData.Code, newData.Name, newData.AppKey, newData.AppSecret, newData.Remark, newData.Status, newData.CreateTime, newData.UpdateTime, newData.Id) listValues = append(listValues, values) } vals := make([]interface{}, 0, len(dataList)*(len(fields)*2+1)) setClauses := make([]string, len(fields)) for i, field := range fields { caseClauses := make([]string, len(dataList)) for j, item := range dataList { caseClauses[j] = "WHEN `id` = ? THEN ?" vals = append(vals, item.Id, listValues[j][i]) } setClauses[i] = fmt.Sprintf("%s = CASE %s ELSE %s END", field, strings.Join(caseClauses, " "), field) } wherePlaceholders := make([]string, len(dataList)) for i, item := range dataList { wherePlaceholders[i] = "?" vals = append(vals, item.Id) } query := fmt.Sprintf("UPDATE %s SET %s WHERE `id` IN (%s)", m.table, strings.Join(setClauses, ", "), strings.Join(wherePlaceholders, ",")) return query, vals } func (m *defaultSysProductModel) formatPrimary(primary any) string { return fmt.Sprintf("%s%v", cacheSysProductIdPrefix, primary) } func (m *defaultSysProductModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error { query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` = ? LIMIT 1", sysProductRows, m.table) return conn.QueryRowCtx(ctx, v, query, primary) } func (m *defaultSysProductModel) TableName() string { return m.table } func (m *defaultSysProductModel) findListByPrimaryKeys(ctx context.Context, ids []interface{}) ([]*SysProduct, error) { if len(ids) == 0 { return []*SysProduct{}, nil } placeholders := make([]string, len(ids)) args := make([]interface{}, len(ids)) for i, id := range ids { placeholders[i] = "?" args[i] = id } var resp []*SysProduct query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` IN (%s)", sysProductRows, m.table, strings.Join(placeholders, ",")) err := m.QueryRowsNoCacheCtx(ctx, &resp, query, args...) if err != nil { return nil, err } return resp, nil } func (m *defaultSysProductModel) getPrimaryKeyValue(data *SysProduct) interface{} { return data.Id }