This commit is contained in:
2025-12-09 18:55:28 +08:00
parent 8d00d67540
commit c23ab8338b
209 changed files with 5445 additions and 3963 deletions

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminApiFieldNames = builder.RawFieldNames(&AdminApi{})
adminApiRows = strings.Join(adminApiFieldNames, ",")
adminApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminApiFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminApiFieldNames, "`create_time`", "`update_time`"), ",")
adminApiRowsWithPlaceHolder = strings.Join(stringx.Remove(adminApiFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminApiIdPrefix = "cache:ycc:adminApi:id:"
cacheHmAdminApiApiCodePrefix = "cache:ycc:adminApi:apiCode:"
cacheYccAdminApiIdPrefix = "cache:ycc:adminApi:id:"
cacheYccAdminApiApiCodePrefix = "cache:ycc:adminApi:apiCode:"
)
type (
adminApiModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminApi, error)
FindOne(ctx context.Context, id string) (*AdminApi, error)
FindOneByApiCode(ctx context.Context, apiCode string) (*AdminApi, error)
Update(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminApi) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminApi, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminApi, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminApi, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminApiModel struct {
@@ -57,7 +58,7 @@ type (
}
AdminApi struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -81,21 +82,38 @@ func newAdminApiModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminApiMode
func (m *defaultAdminApiModel) Insert(ctx context.Context, session sqlx.Session, data *AdminApi) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheHmAdminApiApiCodePrefix, data.ApiCode)
hmAdminApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, data.Id)
m.insertUUID(data)
yccAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheYccAdminApiApiCodePrefix, data.ApiCode)
yccAdminApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, data.Id)
return 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, adminApiRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminApiRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description)
}, hmAdminApiApiCodeKey, hmAdminApiIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiName, data.ApiCode, data.Method, data.Url, data.Status, data.Description)
}, yccAdminApiApiCodeKey, yccAdminApiIdKey)
}
func (m *defaultAdminApiModel) insertUUID(data *AdminApi) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminApiModel) FindOne(ctx context.Context, id int64) (*AdminApi, error) {
hmAdminApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, id)
func (m *defaultAdminApiModel) FindOne(ctx context.Context, id string) (*AdminApi, error) {
yccAdminApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, id)
var resp AdminApi
err := m.QueryRowCtx(ctx, &resp, hmAdminApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminApiRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -110,9 +128,9 @@ func (m *defaultAdminApiModel) FindOne(ctx context.Context, id int64) (*AdminApi
}
func (m *defaultAdminApiModel) FindOneByApiCode(ctx context.Context, apiCode string) (*AdminApi, error) {
hmAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheHmAdminApiApiCodePrefix, apiCode)
yccAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheYccAdminApiApiCodePrefix, apiCode)
var resp AdminApi
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminApiApiCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminApiApiCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `api_code` = ? and del_state = ? limit 1", adminApiRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, apiCode, globalkey.DelStateNo); err != nil {
return nil, err
@@ -134,15 +152,15 @@ func (m *defaultAdminApiModel) Update(ctx context.Context, session sqlx.Session,
if err != nil {
return nil, err
}
hmAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheHmAdminApiApiCodePrefix, data.ApiCode)
hmAdminApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, data.Id)
yccAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheYccAdminApiApiCodePrefix, data.ApiCode)
yccAdminApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, data.Id)
return 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, adminApiRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id)
}, hmAdminApiApiCodeKey, hmAdminApiIdKey)
}, yccAdminApiApiCodeKey, yccAdminApiIdKey)
}
func (m *defaultAdminApiModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminApi) error {
@@ -157,15 +175,15 @@ func (m *defaultAdminApiModel) UpdateWithVersion(ctx context.Context, session sq
if err != nil {
return err
}
hmAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheHmAdminApiApiCodePrefix, data.ApiCode)
hmAdminApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, data.Id)
yccAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheYccAdminApiApiCodePrefix, data.ApiCode)
yccAdminApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, adminApiRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiName, newData.ApiCode, newData.Method, newData.Url, newData.Status, newData.Description, newData.Id, oldVersion)
}, hmAdminApiApiCodeKey, hmAdminApiIdKey)
}, yccAdminApiApiCodeKey, yccAdminApiIdKey)
if err != nil {
return err
}
@@ -382,25 +400,25 @@ func (m *defaultAdminApiModel) Trans(ctx context.Context, fn func(ctx context.Co
func (m *defaultAdminApiModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminApiModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminApiModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheHmAdminApiApiCodePrefix, data.ApiCode)
hmAdminApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, id)
yccAdminApiApiCodeKey := fmt.Sprintf("%s%v", cacheYccAdminApiApiCodePrefix, data.ApiCode)
yccAdminApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminApiApiCodeKey, hmAdminApiIdKey)
}, yccAdminApiApiCodeKey, yccAdminApiIdKey)
return err
}
func (m *defaultAdminApiModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminApiIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminApiIdPrefix, primary)
}
func (m *defaultAdminApiModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminApiRows, m.table)

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminDictDataFieldNames = builder.RawFieldNames(&AdminDictData{})
adminDictDataRows = strings.Join(adminDictDataFieldNames, ",")
adminDictDataRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictDataFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminDictDataRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictDataFieldNames, "`create_time`", "`update_time`"), ",")
adminDictDataRowsWithPlaceHolder = strings.Join(stringx.Remove(adminDictDataFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminDictDataIdPrefix = "cache:ycc:adminDictycc:id:"
cacheHmAdminDictDataDictTypeDictLabelPrefix = "cache:ycc:adminDictycc:dictType:dictLabel:"
cacheHmAdminDictDataDictTypeDictValuePrefix = "cache:ycc:adminDictycc:dictType:dictValue:"
cacheYccAdminDictDataIdPrefix = "cache:ycc:adminDictData:id:"
cacheYccAdminDictDataDictTypeDictLabelPrefix = "cache:ycc:adminDictData:dictType:dictLabel:"
cacheYccAdminDictDataDictTypeDictValuePrefix = "cache:ycc:adminDictData:dictType:dictValue:"
)
type (
adminDictDataModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminDictData, error)
FindOne(ctx context.Context, id string) (*AdminDictData, error)
FindOneByDictTypeDictLabel(ctx context.Context, dictType string, dictLabel string) (*AdminDictData, error)
FindOneByDictTypeDictValue(ctx context.Context, dictType string, dictValue int64) (*AdminDictData, error)
Update(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error)
@@ -50,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictData, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictData, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictData, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminDictDataModel struct {
@@ -59,7 +60,7 @@ type (
}
AdminDictData struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -83,22 +84,39 @@ func newAdminDictDataModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminDi
func (m *defaultAdminDictDataModel) Insert(ctx context.Context, session sqlx.Session, data *AdminDictData) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
hmAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
hmAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, data.Id)
m.insertUUID(data)
yccAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
yccAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
yccAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, data.Id)
return 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, adminDictDataRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminDictDataRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark)
}, hmAdminDictDataDictTypeDictLabelKey, hmAdminDictDataDictTypeDictValueKey, hmAdminDictDataIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictLabel, data.DictValue, data.DictSort, data.Status, data.Remark)
}, yccAdminDictDataDictTypeDictLabelKey, yccAdminDictDataDictTypeDictValueKey, yccAdminDictDataIdKey)
}
func (m *defaultAdminDictDataModel) insertUUID(data *AdminDictData) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminDictDataModel) FindOne(ctx context.Context, id int64) (*AdminDictData, error) {
hmAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, id)
func (m *defaultAdminDictDataModel) FindOne(ctx context.Context, id string) (*AdminDictData, error) {
yccAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, id)
var resp AdminDictData
err := m.QueryRowCtx(ctx, &resp, hmAdminDictDataIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminDictDataIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictDataRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -113,9 +131,9 @@ func (m *defaultAdminDictDataModel) FindOne(ctx context.Context, id int64) (*Adm
}
func (m *defaultAdminDictDataModel) FindOneByDictTypeDictLabel(ctx context.Context, dictType string, dictLabel string) (*AdminDictData, error) {
hmAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictLabelPrefix, dictType, dictLabel)
yccAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictLabelPrefix, dictType, dictLabel)
var resp AdminDictData
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminDictDataDictTypeDictLabelKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminDictDataDictTypeDictLabelKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `dict_type` = ? and `dict_label` = ? and del_state = ? limit 1", adminDictDataRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, dictType, dictLabel, globalkey.DelStateNo); err != nil {
return nil, err
@@ -133,9 +151,9 @@ func (m *defaultAdminDictDataModel) FindOneByDictTypeDictLabel(ctx context.Conte
}
func (m *defaultAdminDictDataModel) FindOneByDictTypeDictValue(ctx context.Context, dictType string, dictValue int64) (*AdminDictData, error) {
hmAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictValuePrefix, dictType, dictValue)
yccAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictValuePrefix, dictType, dictValue)
var resp AdminDictData
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminDictDataDictTypeDictValueKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminDictDataDictTypeDictValueKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `dict_type` = ? and `dict_value` = ? and del_state = ? limit 1", adminDictDataRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, dictType, dictValue, globalkey.DelStateNo); err != nil {
return nil, err
@@ -157,16 +175,16 @@ func (m *defaultAdminDictDataModel) Update(ctx context.Context, session sqlx.Ses
if err != nil {
return nil, err
}
hmAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
hmAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
hmAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, data.Id)
yccAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
yccAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
yccAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, data.Id)
return 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, adminDictDataRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id)
}, hmAdminDictDataDictTypeDictLabelKey, hmAdminDictDataDictTypeDictValueKey, hmAdminDictDataIdKey)
}, yccAdminDictDataDictTypeDictLabelKey, yccAdminDictDataDictTypeDictValueKey, yccAdminDictDataIdKey)
}
func (m *defaultAdminDictDataModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminDictData) error {
@@ -181,16 +199,16 @@ func (m *defaultAdminDictDataModel) UpdateWithVersion(ctx context.Context, sessi
if err != nil {
return err
}
hmAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
hmAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
hmAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, data.Id)
yccAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
yccAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
yccAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, adminDictDataRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictLabel, newData.DictValue, newData.DictSort, newData.Status, newData.Remark, newData.Id, oldVersion)
}, hmAdminDictDataDictTypeDictLabelKey, hmAdminDictDataDictTypeDictValueKey, hmAdminDictDataIdKey)
}, yccAdminDictDataDictTypeDictLabelKey, yccAdminDictDataDictTypeDictValueKey, yccAdminDictDataIdKey)
if err != nil {
return err
}
@@ -407,26 +425,26 @@ func (m *defaultAdminDictDataModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAdminDictDataModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminDictDataModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminDictDataModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
hmAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheHmAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
hmAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, id)
yccAdminDictDataDictTypeDictLabelKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictLabelPrefix, data.DictType, data.DictLabel)
yccAdminDictDataDictTypeDictValueKey := fmt.Sprintf("%s%v:%v", cacheYccAdminDictDataDictTypeDictValuePrefix, data.DictType, data.DictValue)
yccAdminDictDataIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminDictDataDictTypeDictLabelKey, hmAdminDictDataDictTypeDictValueKey, hmAdminDictDataIdKey)
}, yccAdminDictDataDictTypeDictLabelKey, yccAdminDictDataDictTypeDictValueKey, yccAdminDictDataIdKey)
return err
}
func (m *defaultAdminDictDataModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminDictDataIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminDictDataIdPrefix, primary)
}
func (m *defaultAdminDictDataModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictDataRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminDictTypeFieldNames = builder.RawFieldNames(&AdminDictType{})
adminDictTypeRows = strings.Join(adminDictTypeFieldNames, ",")
adminDictTypeRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictTypeFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminDictTypeRowsExpectAutoSet = strings.Join(stringx.Remove(adminDictTypeFieldNames, "`create_time`", "`update_time`"), ",")
adminDictTypeRowsWithPlaceHolder = strings.Join(stringx.Remove(adminDictTypeFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminDictTypeIdPrefix = "cache:ycc:adminDictType:id:"
cacheHmAdminDictTypeDictTypePrefix = "cache:ycc:adminDictType:dictType:"
cacheYccAdminDictTypeIdPrefix = "cache:ycc:adminDictType:id:"
cacheYccAdminDictTypeDictTypePrefix = "cache:ycc:adminDictType:dictType:"
)
type (
adminDictTypeModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminDictType, error)
FindOne(ctx context.Context, id string) (*AdminDictType, error)
FindOneByDictType(ctx context.Context, dictType string) (*AdminDictType, error)
Update(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminDictType) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminDictType, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminDictType, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminDictType, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminDictTypeModel struct {
@@ -57,7 +58,7 @@ type (
}
AdminDictType struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -79,21 +80,38 @@ func newAdminDictTypeModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminDi
func (m *defaultAdminDictTypeModel) Insert(ctx context.Context, session sqlx.Session, data *AdminDictType) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeDictTypePrefix, data.DictType)
hmAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, data.Id)
m.insertUUID(data)
yccAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeDictTypePrefix, data.DictType)
yccAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, data.Id)
return 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, adminDictTypeRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminDictTypeRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark)
}, hmAdminDictTypeDictTypeKey, hmAdminDictTypeIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.DictType, data.DictName, data.Status, data.Remark)
}, yccAdminDictTypeDictTypeKey, yccAdminDictTypeIdKey)
}
func (m *defaultAdminDictTypeModel) insertUUID(data *AdminDictType) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminDictTypeModel) FindOne(ctx context.Context, id int64) (*AdminDictType, error) {
hmAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, id)
func (m *defaultAdminDictTypeModel) FindOne(ctx context.Context, id string) (*AdminDictType, error) {
yccAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, id)
var resp AdminDictType
err := m.QueryRowCtx(ctx, &resp, hmAdminDictTypeIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminDictTypeIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictTypeRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -108,9 +126,9 @@ func (m *defaultAdminDictTypeModel) FindOne(ctx context.Context, id int64) (*Adm
}
func (m *defaultAdminDictTypeModel) FindOneByDictType(ctx context.Context, dictType string) (*AdminDictType, error) {
hmAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeDictTypePrefix, dictType)
yccAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeDictTypePrefix, dictType)
var resp AdminDictType
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminDictTypeDictTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminDictTypeDictTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `dict_type` = ? and del_state = ? limit 1", adminDictTypeRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, dictType, globalkey.DelStateNo); err != nil {
return nil, err
@@ -132,15 +150,15 @@ func (m *defaultAdminDictTypeModel) Update(ctx context.Context, session sqlx.Ses
if err != nil {
return nil, err
}
hmAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeDictTypePrefix, data.DictType)
hmAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, data.Id)
yccAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeDictTypePrefix, data.DictType)
yccAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, data.Id)
return 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, adminDictTypeRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id)
}, hmAdminDictTypeDictTypeKey, hmAdminDictTypeIdKey)
}, yccAdminDictTypeDictTypeKey, yccAdminDictTypeIdKey)
}
func (m *defaultAdminDictTypeModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminDictType) error {
@@ -155,15 +173,15 @@ func (m *defaultAdminDictTypeModel) UpdateWithVersion(ctx context.Context, sessi
if err != nil {
return err
}
hmAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeDictTypePrefix, data.DictType)
hmAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, data.Id)
yccAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeDictTypePrefix, data.DictType)
yccAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, adminDictTypeRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.DictType, newData.DictName, newData.Status, newData.Remark, newData.Id, oldVersion)
}, hmAdminDictTypeDictTypeKey, hmAdminDictTypeIdKey)
}, yccAdminDictTypeDictTypeKey, yccAdminDictTypeIdKey)
if err != nil {
return err
}
@@ -380,25 +398,25 @@ func (m *defaultAdminDictTypeModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAdminDictTypeModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminDictTypeModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminDictTypeModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeDictTypePrefix, data.DictType)
hmAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, id)
yccAdminDictTypeDictTypeKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeDictTypePrefix, data.DictType)
yccAdminDictTypeIdKey := fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminDictTypeDictTypeKey, hmAdminDictTypeIdKey)
}, yccAdminDictTypeDictTypeKey, yccAdminDictTypeIdKey)
return err
}
func (m *defaultAdminDictTypeModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminDictTypeIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminDictTypeIdPrefix, primary)
}
func (m *defaultAdminDictTypeModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminDictTypeRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminMenuFieldNames = builder.RawFieldNames(&AdminMenu{})
adminMenuRows = strings.Join(adminMenuFieldNames, ",")
adminMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminMenuFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminMenuFieldNames, "`create_time`", "`update_time`"), ",")
adminMenuRowsWithPlaceHolder = strings.Join(stringx.Remove(adminMenuFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminMenuIdPrefix = "cache:ycc:adminMenu:id:"
cacheHmAdminMenuNamePathPrefix = "cache:ycc:adminMenu:name:path:"
cacheYccAdminMenuIdPrefix = "cache:ycc:adminMenu:id:"
cacheYccAdminMenuNamePathPrefix = "cache:ycc:adminMenu:name:path:"
)
type (
adminMenuModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminMenu, error)
FindOne(ctx context.Context, id string) (*AdminMenu, error)
FindOneByNamePath(ctx context.Context, name string, path string) (*AdminMenu, error)
Update(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminMenu) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminMenu, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminMenu, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminMenu, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminMenuModel struct {
@@ -57,13 +58,13 @@ type (
}
AdminMenu struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"`
Version int64 `db:"version"` // 版本号
Pid int64 `db:"pid"` // 父菜单ID
Pid sql.NullString `db:"pid"` // 父菜单ID
Name string `db:"name"` // 路由名称
Path string `db:"path"` // 路由路径
Component string `db:"component"` // 组件路径
@@ -84,21 +85,38 @@ func newAdminMenuModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminMenuMo
func (m *defaultAdminMenuModel) Insert(ctx context.Context, session sqlx.Session, data *AdminMenu) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, data.Id)
hmAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheHmAdminMenuNamePathPrefix, data.Name, data.Path)
m.insertUUID(data)
yccAdminMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, data.Id)
yccAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheYccAdminMenuNamePathPrefix, data.Name, data.Path)
return 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, adminMenuRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminMenuRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort)
}, hmAdminMenuIdKey, hmAdminMenuNamePathKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Pid, data.Name, data.Path, data.Component, data.Redirect, data.Meta, data.Status, data.Type, data.Sort)
}, yccAdminMenuIdKey, yccAdminMenuNamePathKey)
}
func (m *defaultAdminMenuModel) insertUUID(data *AdminMenu) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminMenuModel) FindOne(ctx context.Context, id int64) (*AdminMenu, error) {
hmAdminMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, id)
func (m *defaultAdminMenuModel) FindOne(ctx context.Context, id string) (*AdminMenu, error) {
yccAdminMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, id)
var resp AdminMenu
err := m.QueryRowCtx(ctx, &resp, hmAdminMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminMenuRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -113,9 +131,9 @@ func (m *defaultAdminMenuModel) FindOne(ctx context.Context, id int64) (*AdminMe
}
func (m *defaultAdminMenuModel) FindOneByNamePath(ctx context.Context, name string, path string) (*AdminMenu, error) {
hmAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheHmAdminMenuNamePathPrefix, name, path)
yccAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheYccAdminMenuNamePathPrefix, name, path)
var resp AdminMenu
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminMenuNamePathKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminMenuNamePathKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `name` = ? and `path` = ? and del_state = ? limit 1", adminMenuRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, name, path, globalkey.DelStateNo); err != nil {
return nil, err
@@ -137,15 +155,15 @@ func (m *defaultAdminMenuModel) Update(ctx context.Context, session sqlx.Session
if err != nil {
return nil, err
}
hmAdminMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, data.Id)
hmAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheHmAdminMenuNamePathPrefix, data.Name, data.Path)
yccAdminMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, data.Id)
yccAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheYccAdminMenuNamePathPrefix, data.Name, data.Path)
return 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, adminMenuRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id)
}, hmAdminMenuIdKey, hmAdminMenuNamePathKey)
}, yccAdminMenuIdKey, yccAdminMenuNamePathKey)
}
func (m *defaultAdminMenuModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminMenu) error {
@@ -160,15 +178,15 @@ func (m *defaultAdminMenuModel) UpdateWithVersion(ctx context.Context, session s
if err != nil {
return err
}
hmAdminMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, data.Id)
hmAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheHmAdminMenuNamePathPrefix, data.Name, data.Path)
yccAdminMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, data.Id)
yccAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheYccAdminMenuNamePathPrefix, data.Name, data.Path)
sqlResult, 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` = ? and version = ? ", m.table, adminMenuRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Pid, newData.Name, newData.Path, newData.Component, newData.Redirect, newData.Meta, newData.Status, newData.Type, newData.Sort, newData.Id, oldVersion)
}, hmAdminMenuIdKey, hmAdminMenuNamePathKey)
}, yccAdminMenuIdKey, yccAdminMenuNamePathKey)
if err != nil {
return err
}
@@ -385,25 +403,25 @@ func (m *defaultAdminMenuModel) Trans(ctx context.Context, fn func(ctx context.C
func (m *defaultAdminMenuModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminMenuModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminMenuModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, id)
hmAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheHmAdminMenuNamePathPrefix, data.Name, data.Path)
yccAdminMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, id)
yccAdminMenuNamePathKey := fmt.Sprintf("%s%v:%v", cacheYccAdminMenuNamePathPrefix, data.Name, data.Path)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminMenuIdKey, hmAdminMenuNamePathKey)
}, yccAdminMenuIdKey, yccAdminMenuNamePathKey)
return err
}
func (m *defaultAdminMenuModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminMenuIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminMenuIdPrefix, primary)
}
func (m *defaultAdminMenuModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminMenuRows, m.table)

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminRoleApiFieldNames = builder.RawFieldNames(&AdminRoleApi{})
adminRoleApiRows = strings.Join(adminRoleApiFieldNames, ",")
adminRoleApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleApiFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminRoleApiRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleApiFieldNames, "`create_time`", "`update_time`"), ",")
adminRoleApiRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleApiFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminRoleApiIdPrefix = "cache:ycc:adminRoleApi:id:"
cacheHmAdminRoleApiRoleIdApiIdPrefix = "cache:ycc:adminRoleApi:roleId:apiId:"
cacheYccAdminRoleApiIdPrefix = "cache:ycc:adminRoleApi:id:"
cacheYccAdminRoleApiRoleIdApiIdPrefix = "cache:ycc:adminRoleApi:roleId:apiId:"
)
type (
adminRoleApiModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminRoleApi, error)
FindOneByRoleIdApiId(ctx context.Context, roleId int64, apiId int64) (*AdminRoleApi, error)
FindOne(ctx context.Context, id string) (*AdminRoleApi, error)
FindOneByRoleIdApiId(ctx context.Context, roleId string, apiId string) (*AdminRoleApi, error)
Update(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRoleApi) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleApi, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleApi, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleApi, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminRoleApiModel struct {
@@ -57,14 +58,14 @@ type (
}
AdminRoleApi struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"`
Version int64 `db:"version"` // 版本号
RoleId int64 `db:"role_id"` // 关联到角色表的id
ApiId int64 `db:"api_id"` // 关联到接口表的id
RoleId string `db:"role_id"`
ApiId string `db:"api_id"`
}
)
@@ -77,21 +78,38 @@ func newAdminRoleApiModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRol
func (m *defaultAdminRoleApiModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRoleApi) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, data.Id)
hmAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
m.insertUUID(data)
yccAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, data.Id)
yccAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
return 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, adminRoleApiRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, adminRoleApiRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId)
}, hmAdminRoleApiIdKey, hmAdminRoleApiRoleIdApiIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.ApiId)
}, yccAdminRoleApiIdKey, yccAdminRoleApiRoleIdApiIdKey)
}
func (m *defaultAdminRoleApiModel) insertUUID(data *AdminRoleApi) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminRoleApiModel) FindOne(ctx context.Context, id int64) (*AdminRoleApi, error) {
hmAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, id)
func (m *defaultAdminRoleApiModel) FindOne(ctx context.Context, id string) (*AdminRoleApi, error) {
yccAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, id)
var resp AdminRoleApi
err := m.QueryRowCtx(ctx, &resp, hmAdminRoleApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminRoleApiIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -105,10 +123,10 @@ func (m *defaultAdminRoleApiModel) FindOne(ctx context.Context, id int64) (*Admi
}
}
func (m *defaultAdminRoleApiModel) FindOneByRoleIdApiId(ctx context.Context, roleId int64, apiId int64) (*AdminRoleApi, error) {
hmAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleApiRoleIdApiIdPrefix, roleId, apiId)
func (m *defaultAdminRoleApiModel) FindOneByRoleIdApiId(ctx context.Context, roleId string, apiId string) (*AdminRoleApi, error) {
yccAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleApiRoleIdApiIdPrefix, roleId, apiId)
var resp AdminRoleApi
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminRoleApiRoleIdApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminRoleApiRoleIdApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `role_id` = ? and `api_id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, roleId, apiId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -130,15 +148,15 @@ func (m *defaultAdminRoleApiModel) Update(ctx context.Context, session sqlx.Sess
if err != nil {
return nil, err
}
hmAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, data.Id)
hmAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
yccAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, data.Id)
yccAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
return 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, adminRoleApiRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id)
}, hmAdminRoleApiIdKey, hmAdminRoleApiRoleIdApiIdKey)
}, yccAdminRoleApiIdKey, yccAdminRoleApiRoleIdApiIdKey)
}
func (m *defaultAdminRoleApiModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRoleApi) error {
@@ -153,15 +171,15 @@ func (m *defaultAdminRoleApiModel) UpdateWithVersion(ctx context.Context, sessio
if err != nil {
return err
}
hmAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, data.Id)
hmAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
yccAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, data.Id)
yccAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
sqlResult, 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` = ? and version = ? ", m.table, adminRoleApiRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.ApiId, newData.Id, oldVersion)
}, hmAdminRoleApiIdKey, hmAdminRoleApiRoleIdApiIdKey)
}, yccAdminRoleApiIdKey, yccAdminRoleApiRoleIdApiIdKey)
if err != nil {
return err
}
@@ -378,25 +396,25 @@ func (m *defaultAdminRoleApiModel) Trans(ctx context.Context, fn func(ctx contex
func (m *defaultAdminRoleApiModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminRoleApiModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminRoleApiModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, id)
hmAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
yccAdminRoleApiIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, id)
yccAdminRoleApiRoleIdApiIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleApiRoleIdApiIdPrefix, data.RoleId, data.ApiId)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminRoleApiIdKey, hmAdminRoleApiRoleIdApiIdKey)
}, yccAdminRoleApiIdKey, yccAdminRoleApiRoleIdApiIdKey)
return err
}
func (m *defaultAdminRoleApiModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminRoleApiIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminRoleApiIdPrefix, primary)
}
func (m *defaultAdminRoleApiModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleApiRows, m.table)

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminRoleMenuFieldNames = builder.RawFieldNames(&AdminRoleMenu{})
adminRoleMenuRows = strings.Join(adminRoleMenuFieldNames, ",")
adminRoleMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleMenuFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminRoleMenuRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleMenuFieldNames, "`create_time`", "`update_time`"), ",")
adminRoleMenuRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleMenuFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminRoleMenuIdPrefix = "cache:ycc:adminRoleMenu:id:"
cacheHmAdminRoleMenuRoleIdMenuIdPrefix = "cache:ycc:adminRoleMenu:roleId:menuId:"
cacheYccAdminRoleMenuIdPrefix = "cache:ycc:adminRoleMenu:id:"
cacheYccAdminRoleMenuRoleIdMenuIdPrefix = "cache:ycc:adminRoleMenu:roleId:menuId:"
)
type (
adminRoleMenuModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminRoleMenu, error)
FindOneByRoleIdMenuId(ctx context.Context, roleId int64, menuId int64) (*AdminRoleMenu, error)
FindOne(ctx context.Context, id string) (*AdminRoleMenu, error)
FindOneByRoleIdMenuId(ctx context.Context, roleId string, menuId string) (*AdminRoleMenu, error)
Update(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRoleMenu, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRoleMenu, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRoleMenu, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminRoleMenuModel struct {
@@ -57,14 +58,14 @@ type (
}
AdminRoleMenu struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"`
Version int64 `db:"version"` // 版本号
RoleId int64 `db:"role_id"` // 关联到角色表的id
MenuId int64 `db:"menu_id"` // 关联到菜单表的id
RoleId string `db:"role_id"`
MenuId string `db:"menu_id"`
}
)
@@ -77,21 +78,38 @@ func newAdminRoleMenuModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRo
func (m *defaultAdminRoleMenuModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRoleMenu) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, data.Id)
hmAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
m.insertUUID(data)
yccAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, data.Id)
yccAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
return 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, adminRoleMenuRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, adminRoleMenuRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId)
}, hmAdminRoleMenuIdKey, hmAdminRoleMenuRoleIdMenuIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleId, data.MenuId)
}, yccAdminRoleMenuIdKey, yccAdminRoleMenuRoleIdMenuIdKey)
}
func (m *defaultAdminRoleMenuModel) insertUUID(data *AdminRoleMenu) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminRoleMenuModel) FindOne(ctx context.Context, id int64) (*AdminRoleMenu, error) {
hmAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, id)
func (m *defaultAdminRoleMenuModel) FindOne(ctx context.Context, id string) (*AdminRoleMenu, error) {
yccAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, id)
var resp AdminRoleMenu
err := m.QueryRowCtx(ctx, &resp, hmAdminRoleMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminRoleMenuIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -105,10 +123,10 @@ func (m *defaultAdminRoleMenuModel) FindOne(ctx context.Context, id int64) (*Adm
}
}
func (m *defaultAdminRoleMenuModel) FindOneByRoleIdMenuId(ctx context.Context, roleId int64, menuId int64) (*AdminRoleMenu, error) {
hmAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleMenuRoleIdMenuIdPrefix, roleId, menuId)
func (m *defaultAdminRoleMenuModel) FindOneByRoleIdMenuId(ctx context.Context, roleId string, menuId string) (*AdminRoleMenu, error) {
yccAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleMenuRoleIdMenuIdPrefix, roleId, menuId)
var resp AdminRoleMenu
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminRoleMenuRoleIdMenuIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminRoleMenuRoleIdMenuIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `role_id` = ? and `menu_id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, roleId, menuId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -130,15 +148,15 @@ func (m *defaultAdminRoleMenuModel) Update(ctx context.Context, session sqlx.Ses
if err != nil {
return nil, err
}
hmAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, data.Id)
hmAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
yccAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, data.Id)
yccAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
return 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, adminRoleMenuRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id)
}, hmAdminRoleMenuIdKey, hmAdminRoleMenuRoleIdMenuIdKey)
}, yccAdminRoleMenuIdKey, yccAdminRoleMenuRoleIdMenuIdKey)
}
func (m *defaultAdminRoleMenuModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRoleMenu) error {
@@ -153,15 +171,15 @@ func (m *defaultAdminRoleMenuModel) UpdateWithVersion(ctx context.Context, sessi
if err != nil {
return err
}
hmAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, data.Id)
hmAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
yccAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, data.Id)
yccAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
sqlResult, 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` = ? and version = ? ", m.table, adminRoleMenuRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleId, newData.MenuId, newData.Id, oldVersion)
}, hmAdminRoleMenuIdKey, hmAdminRoleMenuRoleIdMenuIdKey)
}, yccAdminRoleMenuIdKey, yccAdminRoleMenuRoleIdMenuIdKey)
if err != nil {
return err
}
@@ -378,25 +396,25 @@ func (m *defaultAdminRoleMenuModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAdminRoleMenuModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminRoleMenuModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminRoleMenuModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, id)
hmAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
yccAdminRoleMenuIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, id)
yccAdminRoleMenuRoleIdMenuIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminRoleMenuRoleIdMenuIdPrefix, data.RoleId, data.MenuId)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminRoleMenuIdKey, hmAdminRoleMenuRoleIdMenuIdKey)
}, yccAdminRoleMenuIdKey, yccAdminRoleMenuRoleIdMenuIdKey)
return err
}
func (m *defaultAdminRoleMenuModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminRoleMenuIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminRoleMenuIdPrefix, primary)
}
func (m *defaultAdminRoleMenuModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleMenuRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminRoleFieldNames = builder.RawFieldNames(&AdminRole{})
adminRoleRows = strings.Join(adminRoleFieldNames, ",")
adminRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminRoleFieldNames, "`create_time`", "`update_time`"), ",")
adminRoleRowsWithPlaceHolder = strings.Join(stringx.Remove(adminRoleFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminRoleIdPrefix = "cache:ycc:adminRole:id:"
cacheHmAdminRoleRoleCodePrefix = "cache:ycc:adminRole:roleCode:"
cacheYccAdminRoleIdPrefix = "cache:ycc:adminRole:id:"
cacheYccAdminRoleRoleCodePrefix = "cache:ycc:adminRole:roleCode:"
)
type (
adminRoleModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminRole, error)
FindOne(ctx context.Context, id string) (*AdminRole, error)
FindOneByRoleCode(ctx context.Context, roleCode string) (*AdminRole, error)
Update(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminRole) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminRole, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminRole, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminRole, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminRoleModel struct {
@@ -57,7 +58,7 @@ type (
}
AdminRole struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -80,21 +81,38 @@ func newAdminRoleModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminRoleMo
func (m *defaultAdminRoleModel) Insert(ctx context.Context, session sqlx.Session, data *AdminRole) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, data.Id)
hmAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheHmAdminRoleRoleCodePrefix, data.RoleCode)
m.insertUUID(data)
yccAdminRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, data.Id)
yccAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheYccAdminRoleRoleCodePrefix, data.RoleCode)
return 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, adminRoleRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminRoleRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort)
}, hmAdminRoleIdKey, hmAdminRoleRoleCodeKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.RoleName, data.RoleCode, data.Description, data.Status, data.Sort)
}, yccAdminRoleIdKey, yccAdminRoleRoleCodeKey)
}
func (m *defaultAdminRoleModel) insertUUID(data *AdminRole) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminRoleModel) FindOne(ctx context.Context, id int64) (*AdminRole, error) {
hmAdminRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, id)
func (m *defaultAdminRoleModel) FindOne(ctx context.Context, id string) (*AdminRole, error) {
yccAdminRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, id)
var resp AdminRole
err := m.QueryRowCtx(ctx, &resp, hmAdminRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -109,9 +127,9 @@ func (m *defaultAdminRoleModel) FindOne(ctx context.Context, id int64) (*AdminRo
}
func (m *defaultAdminRoleModel) FindOneByRoleCode(ctx context.Context, roleCode string) (*AdminRole, error) {
hmAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheHmAdminRoleRoleCodePrefix, roleCode)
yccAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheYccAdminRoleRoleCodePrefix, roleCode)
var resp AdminRole
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminRoleRoleCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminRoleRoleCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `role_code` = ? and del_state = ? limit 1", adminRoleRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, roleCode, globalkey.DelStateNo); err != nil {
return nil, err
@@ -133,15 +151,15 @@ func (m *defaultAdminRoleModel) Update(ctx context.Context, session sqlx.Session
if err != nil {
return nil, err
}
hmAdminRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, data.Id)
hmAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheHmAdminRoleRoleCodePrefix, data.RoleCode)
yccAdminRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, data.Id)
yccAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheYccAdminRoleRoleCodePrefix, data.RoleCode)
return 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, adminRoleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id)
}, hmAdminRoleIdKey, hmAdminRoleRoleCodeKey)
}, yccAdminRoleIdKey, yccAdminRoleRoleCodeKey)
}
func (m *defaultAdminRoleModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminRole) error {
@@ -156,15 +174,15 @@ func (m *defaultAdminRoleModel) UpdateWithVersion(ctx context.Context, session s
if err != nil {
return err
}
hmAdminRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, data.Id)
hmAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheHmAdminRoleRoleCodePrefix, data.RoleCode)
yccAdminRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, data.Id)
yccAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheYccAdminRoleRoleCodePrefix, data.RoleCode)
sqlResult, 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` = ? and version = ? ", m.table, adminRoleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.RoleName, newData.RoleCode, newData.Description, newData.Status, newData.Sort, newData.Id, oldVersion)
}, hmAdminRoleIdKey, hmAdminRoleRoleCodeKey)
}, yccAdminRoleIdKey, yccAdminRoleRoleCodeKey)
if err != nil {
return err
}
@@ -381,25 +399,25 @@ func (m *defaultAdminRoleModel) Trans(ctx context.Context, fn func(ctx context.C
func (m *defaultAdminRoleModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminRoleModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminRoleModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, id)
hmAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheHmAdminRoleRoleCodePrefix, data.RoleCode)
yccAdminRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, id)
yccAdminRoleRoleCodeKey := fmt.Sprintf("%s%v", cacheYccAdminRoleRoleCodePrefix, data.RoleCode)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminRoleIdKey, hmAdminRoleRoleCodeKey)
}, yccAdminRoleIdKey, yccAdminRoleRoleCodeKey)
return err
}
func (m *defaultAdminRoleModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminRoleIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminRoleIdPrefix, primary)
}
func (m *defaultAdminRoleModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminRoleRows, m.table)

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminUserFieldNames = builder.RawFieldNames(&AdminUser{})
adminUserRows = strings.Join(adminUserFieldNames, ",")
adminUserRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminUserRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserFieldNames, "`create_time`", "`update_time`"), ",")
adminUserRowsWithPlaceHolder = strings.Join(stringx.Remove(adminUserFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminUserIdPrefix = "cache:ycc:adminUser:id:"
cacheHmAdminUserRealNamePrefix = "cache:ycc:adminUser:realName:"
cacheHmAdminUserUsernamePrefix = "cache:ycc:adminUser:username:"
cacheYccAdminUserIdPrefix = "cache:ycc:adminUser:id:"
cacheYccAdminUserRealNamePrefix = "cache:ycc:adminUser:realName:"
cacheYccAdminUserUsernamePrefix = "cache:ycc:adminUser:username:"
)
type (
adminUserModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminUser, error)
FindOne(ctx context.Context, id string) (*AdminUser, error)
FindOneByRealName(ctx context.Context, realName string) (*AdminUser, error)
FindOneByUsername(ctx context.Context, username string) (*AdminUser, error)
Update(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error)
@@ -50,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUser, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUser, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUser, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminUserModel struct {
@@ -59,7 +60,7 @@ type (
}
AdminUser struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -81,22 +82,39 @@ func newAdminUserModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminUserMo
func (m *defaultAdminUserModel) Insert(ctx context.Context, session sqlx.Session, data *AdminUser) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminUserIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, data.Id)
hmAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheHmAdminUserRealNamePrefix, data.RealName)
hmAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheHmAdminUserUsernamePrefix, data.Username)
m.insertUUID(data)
yccAdminUserIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, data.Id)
yccAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheYccAdminUserRealNamePrefix, data.RealName)
yccAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheYccAdminUserUsernamePrefix, data.Username)
return 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, adminUserRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, adminUserRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status)
}, hmAdminUserIdKey, hmAdminUserRealNameKey, hmAdminUserUsernameKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Username, data.Password, data.RealName, data.Status)
}, yccAdminUserIdKey, yccAdminUserRealNameKey, yccAdminUserUsernameKey)
}
func (m *defaultAdminUserModel) insertUUID(data *AdminUser) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminUserModel) FindOne(ctx context.Context, id int64) (*AdminUser, error) {
hmAdminUserIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, id)
func (m *defaultAdminUserModel) FindOne(ctx context.Context, id string) (*AdminUser, error) {
yccAdminUserIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, id)
var resp AdminUser
err := m.QueryRowCtx(ctx, &resp, hmAdminUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -111,9 +129,9 @@ func (m *defaultAdminUserModel) FindOne(ctx context.Context, id int64) (*AdminUs
}
func (m *defaultAdminUserModel) FindOneByRealName(ctx context.Context, realName string) (*AdminUser, error) {
hmAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheHmAdminUserRealNamePrefix, realName)
yccAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheYccAdminUserRealNamePrefix, realName)
var resp AdminUser
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminUserRealNameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminUserRealNameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `real_name` = ? and del_state = ? limit 1", adminUserRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, realName, globalkey.DelStateNo); err != nil {
return nil, err
@@ -131,9 +149,9 @@ func (m *defaultAdminUserModel) FindOneByRealName(ctx context.Context, realName
}
func (m *defaultAdminUserModel) FindOneByUsername(ctx context.Context, username string) (*AdminUser, error) {
hmAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheHmAdminUserUsernamePrefix, username)
yccAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheYccAdminUserUsernamePrefix, username)
var resp AdminUser
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminUserUsernameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminUserUsernameKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `username` = ? and del_state = ? limit 1", adminUserRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, username, globalkey.DelStateNo); err != nil {
return nil, err
@@ -155,16 +173,16 @@ func (m *defaultAdminUserModel) Update(ctx context.Context, session sqlx.Session
if err != nil {
return nil, err
}
hmAdminUserIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, data.Id)
hmAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheHmAdminUserRealNamePrefix, data.RealName)
hmAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheHmAdminUserUsernamePrefix, data.Username)
yccAdminUserIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, data.Id)
yccAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheYccAdminUserRealNamePrefix, data.RealName)
yccAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheYccAdminUserUsernamePrefix, data.Username)
return 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, adminUserRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id)
}, hmAdminUserIdKey, hmAdminUserRealNameKey, hmAdminUserUsernameKey)
}, yccAdminUserIdKey, yccAdminUserRealNameKey, yccAdminUserUsernameKey)
}
func (m *defaultAdminUserModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminUser) error {
@@ -179,16 +197,16 @@ func (m *defaultAdminUserModel) UpdateWithVersion(ctx context.Context, session s
if err != nil {
return err
}
hmAdminUserIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, data.Id)
hmAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheHmAdminUserRealNamePrefix, data.RealName)
hmAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheHmAdminUserUsernamePrefix, data.Username)
yccAdminUserIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, data.Id)
yccAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheYccAdminUserRealNamePrefix, data.RealName)
yccAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheYccAdminUserUsernamePrefix, data.Username)
sqlResult, 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` = ? and version = ? ", m.table, adminUserRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Username, newData.Password, newData.RealName, newData.Status, newData.Id, oldVersion)
}, hmAdminUserIdKey, hmAdminUserRealNameKey, hmAdminUserUsernameKey)
}, yccAdminUserIdKey, yccAdminUserRealNameKey, yccAdminUserUsernameKey)
if err != nil {
return err
}
@@ -405,26 +423,26 @@ func (m *defaultAdminUserModel) Trans(ctx context.Context, fn func(ctx context.C
func (m *defaultAdminUserModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminUserModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminUserModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminUserIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, id)
hmAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheHmAdminUserRealNamePrefix, data.RealName)
hmAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheHmAdminUserUsernamePrefix, data.Username)
yccAdminUserIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, id)
yccAdminUserRealNameKey := fmt.Sprintf("%s%v", cacheYccAdminUserRealNamePrefix, data.RealName)
yccAdminUserUsernameKey := fmt.Sprintf("%s%v", cacheYccAdminUserUsernamePrefix, data.Username)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminUserIdKey, hmAdminUserRealNameKey, hmAdminUserUsernameKey)
}, yccAdminUserIdKey, yccAdminUserRealNameKey, yccAdminUserUsernameKey)
return err
}
func (m *defaultAdminUserModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminUserIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminUserIdPrefix, primary)
}
func (m *defaultAdminUserModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRows, m.table)

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
adminUserRoleFieldNames = builder.RawFieldNames(&AdminUserRole{})
adminUserRoleRows = strings.Join(adminUserRoleFieldNames, ",")
adminUserRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserRoleFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
adminUserRoleRowsExpectAutoSet = strings.Join(stringx.Remove(adminUserRoleFieldNames, "`create_time`", "`update_time`"), ",")
adminUserRoleRowsWithPlaceHolder = strings.Join(stringx.Remove(adminUserRoleFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAdminUserRoleIdPrefix = "cache:ycc:adminUserRole:id:"
cacheHmAdminUserRoleUserIdRoleIdPrefix = "cache:ycc:adminUserRole:userId:roleId:"
cacheYccAdminUserRoleIdPrefix = "cache:ycc:adminUserRole:id:"
cacheYccAdminUserRoleUserIdRoleIdPrefix = "cache:ycc:adminUserRole:userId:roleId:"
)
type (
adminUserRoleModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AdminUserRole, error)
FindOneByUserIdRoleId(ctx context.Context, userId int64, roleId int64) (*AdminUserRole, error)
FindOne(ctx context.Context, id string) (*AdminUserRole, error)
FindOneByUserIdRoleId(ctx context.Context, userId string, roleId string) (*AdminUserRole, error)
Update(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AdminUserRole) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AdminUserRole, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AdminUserRole, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AdminUserRole, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAdminUserRoleModel struct {
@@ -57,14 +58,14 @@ type (
}
AdminUserRole struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"`
Version int64 `db:"version"` // 版本号
UserId int64 `db:"user_id"` // 关联到用户表的id
RoleId int64 `db:"role_id"` // 关联到角色表的id
UserId string `db:"user_id"`
RoleId string `db:"role_id"`
}
)
@@ -77,21 +78,38 @@ func newAdminUserRoleModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAdminUs
func (m *defaultAdminUserRoleModel) Insert(ctx context.Context, session sqlx.Session, data *AdminUserRole) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, data.Id)
hmAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
m.insertUUID(data)
yccAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, data.Id)
yccAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
return 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, adminUserRoleRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, adminUserRoleRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId)
}, hmAdminUserRoleIdKey, hmAdminUserRoleUserIdRoleIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.UserId, data.RoleId)
}, yccAdminUserRoleIdKey, yccAdminUserRoleUserIdRoleIdKey)
}
func (m *defaultAdminUserRoleModel) insertUUID(data *AdminUserRole) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAdminUserRoleModel) FindOne(ctx context.Context, id int64) (*AdminUserRole, error) {
hmAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, id)
func (m *defaultAdminUserRoleModel) FindOne(ctx context.Context, id string) (*AdminUserRole, error) {
yccAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, id)
var resp AdminUserRole
err := m.QueryRowCtx(ctx, &resp, hmAdminUserRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAdminUserRoleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -105,10 +123,10 @@ func (m *defaultAdminUserRoleModel) FindOne(ctx context.Context, id int64) (*Adm
}
}
func (m *defaultAdminUserRoleModel) FindOneByUserIdRoleId(ctx context.Context, userId int64, roleId int64) (*AdminUserRole, error) {
hmAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminUserRoleUserIdRoleIdPrefix, userId, roleId)
func (m *defaultAdminUserRoleModel) FindOneByUserIdRoleId(ctx context.Context, userId string, roleId string) (*AdminUserRole, error) {
yccAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminUserRoleUserIdRoleIdPrefix, userId, roleId)
var resp AdminUserRole
err := m.QueryRowIndexCtx(ctx, &resp, hmAdminUserRoleUserIdRoleIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccAdminUserRoleUserIdRoleIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `user_id` = ? and `role_id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, userId, roleId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -130,15 +148,15 @@ func (m *defaultAdminUserRoleModel) Update(ctx context.Context, session sqlx.Ses
if err != nil {
return nil, err
}
hmAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, data.Id)
hmAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
yccAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, data.Id)
yccAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
return 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, adminUserRoleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id)
}, hmAdminUserRoleIdKey, hmAdminUserRoleUserIdRoleIdKey)
}, yccAdminUserRoleIdKey, yccAdminUserRoleUserIdRoleIdKey)
}
func (m *defaultAdminUserRoleModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *AdminUserRole) error {
@@ -153,15 +171,15 @@ func (m *defaultAdminUserRoleModel) UpdateWithVersion(ctx context.Context, sessi
if err != nil {
return err
}
hmAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, data.Id)
hmAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
yccAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, data.Id)
yccAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
sqlResult, 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` = ? and version = ? ", m.table, adminUserRoleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.RoleId, newData.Id, oldVersion)
}, hmAdminUserRoleIdKey, hmAdminUserRoleUserIdRoleIdKey)
}, yccAdminUserRoleIdKey, yccAdminUserRoleUserIdRoleIdKey)
if err != nil {
return err
}
@@ -378,25 +396,25 @@ func (m *defaultAdminUserRoleModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAdminUserRoleModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAdminUserRoleModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAdminUserRoleModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, id)
hmAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheHmAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
yccAdminUserRoleIdKey := fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, id)
yccAdminUserRoleUserIdRoleIdKey := fmt.Sprintf("%s%v:%v", cacheYccAdminUserRoleUserIdRoleIdPrefix, data.UserId, data.RoleId)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAdminUserRoleIdKey, hmAdminUserRoleUserIdRoleIdKey)
}, yccAdminUserRoleIdKey, yccAdminUserRoleUserIdRoleIdKey)
return err
}
func (m *defaultAdminUserRoleModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAdminUserRoleIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAdminUserRoleIdPrefix, primary)
}
func (m *defaultAdminUserRoleModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", adminUserRoleRows, m.table)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentCommissionFieldNames = builder.RawFieldNames(&AgentCommission{})
agentCommissionRows = strings.Join(agentCommissionFieldNames, ",")
agentCommissionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentCommissionRowsExpectAutoSet = strings.Join(stringx.Remove(agentCommissionFieldNames, "`create_time`", "`update_time`"), ",")
agentCommissionRowsWithPlaceHolder = strings.Join(stringx.Remove(agentCommissionFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentCommissionIdPrefix = "cache:ycc:agentCommission:id:"
@@ -32,7 +34,7 @@ var (
type (
agentCommissionModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentCommission, error)
FindOne(ctx context.Context, id string) (*AgentCommission, error)
Update(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentCommission) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentCommission, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentCommission, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentCommission, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentCommissionModel struct {
@@ -54,10 +56,10 @@ type (
}
AgentCommission struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
OrderId int64 `db:"order_id"` // 订单ID
ProductId int64 `db:"product_id"` // 产品ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
OrderId string `db:"order_id"`
ProductId string `db:"product_id"`
Amount float64 `db:"amount"` // 佣金金额
Status int64 `db:"status"` // 状态1=已发放2=已冻结3=已取消
CreateTime time.Time `db:"create_time"` // 创建时间
@@ -77,17 +79,34 @@ func newAgentCommissionModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgent
func (m *defaultAgentCommissionModel) Insert(ctx context.Context, session sqlx.Session, data *AgentCommission) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheYccAgentCommissionIdPrefix, data.Id)
return 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, agentCommissionRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentCommissionRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.ProductId, data.Amount, data.Status, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.ProductId, data.Amount, data.Status, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.ProductId, data.Amount, data.Status, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.ProductId, data.Amount, data.Status, data.DeleteTime, data.DelState, data.Version)
}, yccAgentCommissionIdKey)
}
func (m *defaultAgentCommissionModel) insertUUID(data *AgentCommission) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id int64) (*AgentCommission, error) {
func (m *defaultAgentCommissionModel) FindOne(ctx context.Context, id string) (*AgentCommission, error) {
yccAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheYccAgentCommissionIdPrefix, id)
var resp AgentCommission
err := m.QueryRowCtx(ctx, &resp, yccAgentCommissionIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -347,7 +366,7 @@ func (m *defaultAgentCommissionModel) Trans(ctx context.Context, fn func(ctx con
func (m *defaultAgentCommissionModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentCommissionModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentCommissionModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentCommissionIdKey := fmt.Sprintf("%s%v", cacheYccAgentCommissionIdPrefix, 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)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentConfigFieldNames = builder.RawFieldNames(&AgentConfig{})
agentConfigRows = strings.Join(agentConfigFieldNames, ",")
agentConfigRowsExpectAutoSet = strings.Join(stringx.Remove(agentConfigFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentConfigRowsExpectAutoSet = strings.Join(stringx.Remove(agentConfigFieldNames, "`create_time`", "`update_time`"), ",")
agentConfigRowsWithPlaceHolder = strings.Join(stringx.Remove(agentConfigFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentConfigIdPrefix = "cache:ycc:agentConfig:id:"
@@ -33,7 +35,7 @@ var (
type (
agentConfigModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentConfig) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentConfig, error)
FindOne(ctx context.Context, id string) (*AgentConfig, error)
FindOneByConfigKey(ctx context.Context, configKey string) (*AgentConfig, error)
Update(ctx context.Context, session sqlx.Session, data *AgentConfig) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentConfig) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentConfig, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentConfig, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentConfig, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentConfigModel struct {
@@ -56,7 +58,7 @@ type (
}
AgentConfig struct {
Id int64 `db:"id"` // 主键ID
Id string `db:"id"`
ConfigKey string `db:"config_key"` // 配置键
ConfigValue string `db:"config_value"` // 配置值
ConfigType string `db:"config_type"` // 配置类型price=价格bonus=等级加成upgrade=升级费用rebate=返佣tax=税费
@@ -78,18 +80,35 @@ func newAgentConfigModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentConf
func (m *defaultAgentConfigModel) Insert(ctx context.Context, session sqlx.Session, data *AgentConfig) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccAgentConfigConfigKeyPrefix, data.ConfigKey)
yccAgentConfigIdKey := fmt.Sprintf("%s%v", cacheYccAgentConfigIdPrefix, data.Id)
return 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, agentConfigRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentConfigRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.ConfigKey, data.ConfigValue, data.ConfigType, data.Description, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.ConfigKey, data.ConfigValue, data.ConfigType, data.Description, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.ConfigKey, data.ConfigValue, data.ConfigType, data.Description, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.ConfigKey, data.ConfigValue, data.ConfigType, data.Description, data.DeleteTime, data.DelState, data.Version)
}, yccAgentConfigConfigKeyKey, yccAgentConfigIdKey)
}
func (m *defaultAgentConfigModel) insertUUID(data *AgentConfig) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentConfigModel) FindOne(ctx context.Context, id int64) (*AgentConfig, error) {
func (m *defaultAgentConfigModel) FindOne(ctx context.Context, id string) (*AgentConfig, error) {
yccAgentConfigIdKey := fmt.Sprintf("%s%v", cacheYccAgentConfigIdPrefix, id)
var resp AgentConfig
err := m.QueryRowCtx(ctx, &resp, yccAgentConfigIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -379,7 +398,7 @@ func (m *defaultAgentConfigModel) Trans(ctx context.Context, fn func(ctx context
func (m *defaultAgentConfigModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentConfigModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentConfigModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentFreezeTaskFieldNames = builder.RawFieldNames(&AgentFreezeTask{})
agentFreezeTaskRows = strings.Join(agentFreezeTaskFieldNames, ",")
agentFreezeTaskRowsExpectAutoSet = strings.Join(stringx.Remove(agentFreezeTaskFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentFreezeTaskRowsExpectAutoSet = strings.Join(stringx.Remove(agentFreezeTaskFieldNames, "`create_time`", "`update_time`"), ",")
agentFreezeTaskRowsWithPlaceHolder = strings.Join(stringx.Remove(agentFreezeTaskFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentFreezeTaskIdPrefix = "cache:ycc:agentFreezeTask:id:"
@@ -32,7 +34,7 @@ var (
type (
agentFreezeTaskModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentFreezeTask) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentFreezeTask, error)
FindOne(ctx context.Context, id string) (*AgentFreezeTask, error)
Update(ctx context.Context, session sqlx.Session, data *AgentFreezeTask) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentFreezeTask) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentFreezeTask, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentFreezeTask, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentFreezeTask, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentFreezeTaskModel struct {
@@ -54,10 +56,10 @@ type (
}
AgentFreezeTask struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
OrderId int64 `db:"order_id"` // 订单ID
CommissionId int64 `db:"commission_id"` // 佣金记录ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
OrderId string `db:"order_id"`
CommissionId string `db:"commission_id"`
FreezeAmount float64 `db:"freeze_amount"` // 冻结金额
OrderPrice float64 `db:"order_price"` // 订单单价
FreezeRatio float64 `db:"freeze_ratio"` // 冻结比例例如0.1000表示10%
@@ -83,17 +85,34 @@ func newAgentFreezeTaskModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgent
func (m *defaultAgentFreezeTaskModel) Insert(ctx context.Context, session sqlx.Session, data *AgentFreezeTask) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentFreezeTaskIdKey := fmt.Sprintf("%s%v", cacheYccAgentFreezeTaskIdPrefix, data.Id)
return 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, agentFreezeTaskRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentFreezeTaskRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.CommissionId, data.FreezeAmount, data.OrderPrice, data.FreezeRatio, data.Status, data.FreezeTime, data.UnfreezeTime, data.ActualUnfreezeTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.CommissionId, data.FreezeAmount, data.OrderPrice, data.FreezeRatio, data.Status, data.FreezeTime, data.UnfreezeTime, data.ActualUnfreezeTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.CommissionId, data.FreezeAmount, data.OrderPrice, data.FreezeRatio, data.Status, data.FreezeTime, data.UnfreezeTime, data.ActualUnfreezeTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.CommissionId, data.FreezeAmount, data.OrderPrice, data.FreezeRatio, data.Status, data.FreezeTime, data.UnfreezeTime, data.ActualUnfreezeTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentFreezeTaskIdKey)
}
func (m *defaultAgentFreezeTaskModel) insertUUID(data *AgentFreezeTask) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentFreezeTaskModel) FindOne(ctx context.Context, id int64) (*AgentFreezeTask, error) {
func (m *defaultAgentFreezeTaskModel) FindOne(ctx context.Context, id string) (*AgentFreezeTask, error) {
yccAgentFreezeTaskIdKey := fmt.Sprintf("%s%v", cacheYccAgentFreezeTaskIdPrefix, id)
var resp AgentFreezeTask
err := m.QueryRowCtx(ctx, &resp, yccAgentFreezeTaskIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -353,7 +372,7 @@ func (m *defaultAgentFreezeTaskModel) Trans(ctx context.Context, fn func(ctx con
func (m *defaultAgentFreezeTaskModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentFreezeTaskModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentFreezeTaskModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentFreezeTaskIdKey := fmt.Sprintf("%s%v", cacheYccAgentFreezeTaskIdPrefix, 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)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentInviteCodeFieldNames = builder.RawFieldNames(&AgentInviteCode{})
agentInviteCodeRows = strings.Join(agentInviteCodeFieldNames, ",")
agentInviteCodeRowsExpectAutoSet = strings.Join(stringx.Remove(agentInviteCodeFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentInviteCodeRowsExpectAutoSet = strings.Join(stringx.Remove(agentInviteCodeFieldNames, "`create_time`", "`update_time`"), ",")
agentInviteCodeRowsWithPlaceHolder = strings.Join(stringx.Remove(agentInviteCodeFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentInviteCodeIdPrefix = "cache:ycc:agentInviteCode:id:"
@@ -33,7 +35,7 @@ var (
type (
agentInviteCodeModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentInviteCode) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentInviteCode, error)
FindOne(ctx context.Context, id string) (*AgentInviteCode, error)
FindOneByCode(ctx context.Context, code string) (*AgentInviteCode, error)
Update(ctx context.Context, session sqlx.Session, data *AgentInviteCode) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentInviteCode) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentInviteCode, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentInviteCode, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentInviteCode, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentInviteCodeModel struct {
@@ -56,21 +58,21 @@ type (
}
AgentInviteCode struct {
Id int64 `db:"id"` // 主键ID
Code string `db:"code"` // 邀请码(唯一)
AgentId sql.NullInt64 `db:"agent_id"` // 发放代理IDNULL表示平台发放的钻石邀请码
TargetLevel int64 `db:"target_level"` // 目标等级1=普通2=黄金3=钻石
Status int64 `db:"status"` // 状态0=未使用1=已使用2=已失效(所有邀请码只能使用一次,使用后立即失效)
UsedUserId sql.NullInt64 `db:"used_user_id"` // 使用用户ID
UsedAgentId sql.NullInt64 `db:"used_agent_id"` // 使用代理ID
UsedTime sql.NullTime `db:"used_time"` // 使用时间
ExpireTime sql.NullTime `db:"expire_time"` // 过期时间(可选)
Remark sql.NullString `db:"remark"` // 备注
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
Id string `db:"id"`
Code string `db:"code"` // 邀请码(唯一)
AgentId sql.NullString `db:"agent_id"`
TargetLevel int64 `db:"target_level"` // 目标等级1=普通2=黄金3=钻石
Status int64 `db:"status"` // 状态0=未使用1=已使用2=已失效(所有邀请码只能使用一次,使用后立即失效)
UsedUserId sql.NullString `db:"used_user_id"`
UsedAgentId sql.NullString `db:"used_agent_id"`
UsedTime sql.NullTime `db:"used_time"` // 使用时间
ExpireTime sql.NullTime `db:"expire_time"` // 过期时间(可选)
Remark sql.NullString `db:"remark"` // 备注
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
}
)
@@ -83,18 +85,35 @@ func newAgentInviteCodeModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgent
func (m *defaultAgentInviteCodeModel) Insert(ctx context.Context, session sqlx.Session, data *AgentInviteCode) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentInviteCodeCodeKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeCodePrefix, data.Code)
yccAgentInviteCodeIdKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeIdPrefix, data.Id)
return 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, agentInviteCodeRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentInviteCodeRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.Code, data.AgentId, data.TargetLevel, data.Status, data.UsedUserId, data.UsedAgentId, data.UsedTime, data.ExpireTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.Code, data.AgentId, data.TargetLevel, data.Status, data.UsedUserId, data.UsedAgentId, data.UsedTime, data.ExpireTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.Code, data.AgentId, data.TargetLevel, data.Status, data.UsedUserId, data.UsedAgentId, data.UsedTime, data.ExpireTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.Code, data.AgentId, data.TargetLevel, data.Status, data.UsedUserId, data.UsedAgentId, data.UsedTime, data.ExpireTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentInviteCodeCodeKey, yccAgentInviteCodeIdKey)
}
func (m *defaultAgentInviteCodeModel) insertUUID(data *AgentInviteCode) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentInviteCodeModel) FindOne(ctx context.Context, id int64) (*AgentInviteCode, error) {
func (m *defaultAgentInviteCodeModel) FindOne(ctx context.Context, id string) (*AgentInviteCode, error) {
yccAgentInviteCodeIdKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeIdPrefix, id)
var resp AgentInviteCode
err := m.QueryRowCtx(ctx, &resp, yccAgentInviteCodeIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -384,7 +403,7 @@ func (m *defaultAgentInviteCodeModel) Trans(ctx context.Context, fn func(ctx con
func (m *defaultAgentInviteCodeModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentInviteCodeModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentInviteCodeModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentInviteCodeUsageFieldNames = builder.RawFieldNames(&AgentInviteCodeUsage{})
agentInviteCodeUsageRows = strings.Join(agentInviteCodeUsageFieldNames, ",")
agentInviteCodeUsageRowsExpectAutoSet = strings.Join(stringx.Remove(agentInviteCodeUsageFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentInviteCodeUsageRowsExpectAutoSet = strings.Join(stringx.Remove(agentInviteCodeUsageFieldNames, "`create_time`", "`update_time`"), ",")
agentInviteCodeUsageRowsWithPlaceHolder = strings.Join(stringx.Remove(agentInviteCodeUsageFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentInviteCodeUsageIdPrefix = "cache:ycc:agentInviteCodeUsage:id:"
@@ -32,7 +34,7 @@ var (
type (
agentInviteCodeUsageModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentInviteCodeUsage) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentInviteCodeUsage, error)
FindOne(ctx context.Context, id string) (*AgentInviteCodeUsage, error)
Update(ctx context.Context, session sqlx.Session, data *AgentInviteCodeUsage) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentInviteCodeUsage) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentInviteCodeUsage, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentInviteCodeUsage, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentInviteCodeUsage, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentInviteCodeUsageModel struct {
@@ -54,18 +56,18 @@ type (
}
AgentInviteCodeUsage struct {
Id int64 `db:"id"` // 主键ID
InviteCodeId int64 `db:"invite_code_id"` // 邀请码ID关联agent_invite_code表
Code string `db:"code"` // 邀请码(冗余字段,便于查询)
UserId int64 `db:"user_id"` // 使用用户ID
AgentId int64 `db:"agent_id"` // 成为的代理ID
AgentLevel int64 `db:"agent_level"` // 代理等级1=普通2=黄金3=钻石
UsedTime time.Time `db:"used_time"` // 使用时间
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
Id string `db:"id"`
InviteCodeId string `db:"invite_code_id"`
Code string `db:"code"` // 邀请码(冗余字段,便于查询)
UserId string `db:"user_id"`
AgentId string `db:"agent_id"`
AgentLevel int64 `db:"agent_level"` // 代理等级1=普通2=黄金3=钻石
UsedTime time.Time `db:"used_time"` // 使用时间
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
}
)
@@ -78,17 +80,34 @@ func newAgentInviteCodeUsageModel(conn sqlx.SqlConn, c cache.CacheConf) *default
func (m *defaultAgentInviteCodeUsageModel) Insert(ctx context.Context, session sqlx.Session, data *AgentInviteCodeUsage) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentInviteCodeUsageIdKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeUsageIdPrefix, data.Id)
return 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, agentInviteCodeUsageRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentInviteCodeUsageRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.InviteCodeId, data.Code, data.UserId, data.AgentId, data.AgentLevel, data.UsedTime, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.InviteCodeId, data.Code, data.UserId, data.AgentId, data.AgentLevel, data.UsedTime, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.InviteCodeId, data.Code, data.UserId, data.AgentId, data.AgentLevel, data.UsedTime, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.InviteCodeId, data.Code, data.UserId, data.AgentId, data.AgentLevel, data.UsedTime, data.DeleteTime, data.DelState, data.Version)
}, yccAgentInviteCodeUsageIdKey)
}
func (m *defaultAgentInviteCodeUsageModel) insertUUID(data *AgentInviteCodeUsage) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentInviteCodeUsageModel) FindOne(ctx context.Context, id int64) (*AgentInviteCodeUsage, error) {
func (m *defaultAgentInviteCodeUsageModel) FindOne(ctx context.Context, id string) (*AgentInviteCodeUsage, error) {
yccAgentInviteCodeUsageIdKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeUsageIdPrefix, id)
var resp AgentInviteCodeUsage
err := m.QueryRowCtx(ctx, &resp, yccAgentInviteCodeUsageIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -348,7 +367,7 @@ func (m *defaultAgentInviteCodeUsageModel) Trans(ctx context.Context, fn func(ct
func (m *defaultAgentInviteCodeUsageModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentInviteCodeUsageModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentInviteCodeUsageModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentInviteCodeUsageIdKey := fmt.Sprintf("%s%v", cacheYccAgentInviteCodeUsageIdPrefix, 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)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentLinkFieldNames = builder.RawFieldNames(&AgentLink{})
agentLinkRows = strings.Join(agentLinkFieldNames, ",")
agentLinkRowsExpectAutoSet = strings.Join(stringx.Remove(agentLinkFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentLinkRowsExpectAutoSet = strings.Join(stringx.Remove(agentLinkFieldNames, "`create_time`", "`update_time`"), ",")
agentLinkRowsWithPlaceHolder = strings.Join(stringx.Remove(agentLinkFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentLinkIdPrefix = "cache:ycc:agentLink:id:"
@@ -34,8 +36,8 @@ var (
type (
agentLinkModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentLink) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentLink, error)
FindOneByAgentIdProductIdSetPriceDelState(ctx context.Context, agentId int64, productId int64, setPrice float64, delState int64) (*AgentLink, error)
FindOne(ctx context.Context, id string) (*AgentLink, error)
FindOneByAgentIdProductIdSetPriceDelState(ctx context.Context, agentId string, productId string, setPrice float64, delState int64) (*AgentLink, error)
FindOneByLinkIdentifier(ctx context.Context, linkIdentifier string) (*AgentLink, error)
Update(ctx context.Context, session sqlx.Session, data *AgentLink) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentLink) error
@@ -49,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentLink, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentLink, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentLink, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentLinkModel struct {
@@ -58,10 +60,10 @@ type (
}
AgentLink struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
UserId int64 `db:"user_id"` // 用户ID
ProductId int64 `db:"product_id"` // 产品ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
UserId string `db:"user_id"`
ProductId string `db:"product_id"`
LinkIdentifier string `db:"link_identifier"` // 推广链接标识(加密)
SetPrice float64 `db:"set_price"` // 代理设定价格
ActualBasePrice float64 `db:"actual_base_price"` // 实际底价(基础底价+等级加成)
@@ -82,19 +84,36 @@ func newAgentLinkModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentLinkMo
func (m *defaultAgentLinkModel) Insert(ctx context.Context, session sqlx.Session, data *AgentLink) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentLinkAgentIdProductIdSetPriceDelStateKey := fmt.Sprintf("%s%v:%v:%v:%v", cacheYccAgentLinkAgentIdProductIdSetPriceDelStatePrefix, data.AgentId, data.ProductId, data.SetPrice, data.DelState)
yccAgentLinkIdKey := fmt.Sprintf("%s%v", cacheYccAgentLinkIdPrefix, data.Id)
yccAgentLinkLinkIdentifierKey := fmt.Sprintf("%s%v", cacheYccAgentLinkLinkIdentifierPrefix, data.LinkIdentifier)
return 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, agentLinkRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentLinkRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.UserId, data.ProductId, data.LinkIdentifier, data.SetPrice, data.ActualBasePrice, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.UserId, data.ProductId, data.LinkIdentifier, data.SetPrice, data.ActualBasePrice, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.UserId, data.ProductId, data.LinkIdentifier, data.SetPrice, data.ActualBasePrice, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.UserId, data.ProductId, data.LinkIdentifier, data.SetPrice, data.ActualBasePrice, data.DeleteTime, data.DelState, data.Version)
}, yccAgentLinkAgentIdProductIdSetPriceDelStateKey, yccAgentLinkIdKey, yccAgentLinkLinkIdentifierKey)
}
func (m *defaultAgentLinkModel) insertUUID(data *AgentLink) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentLinkModel) FindOne(ctx context.Context, id int64) (*AgentLink, error) {
func (m *defaultAgentLinkModel) FindOne(ctx context.Context, id string) (*AgentLink, error) {
yccAgentLinkIdKey := fmt.Sprintf("%s%v", cacheYccAgentLinkIdPrefix, id)
var resp AgentLink
err := m.QueryRowCtx(ctx, &resp, yccAgentLinkIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -111,7 +130,7 @@ func (m *defaultAgentLinkModel) FindOne(ctx context.Context, id int64) (*AgentLi
}
}
func (m *defaultAgentLinkModel) FindOneByAgentIdProductIdSetPriceDelState(ctx context.Context, agentId int64, productId int64, setPrice float64, delState int64) (*AgentLink, error) {
func (m *defaultAgentLinkModel) FindOneByAgentIdProductIdSetPriceDelState(ctx context.Context, agentId string, productId string, setPrice float64, delState int64) (*AgentLink, error) {
yccAgentLinkAgentIdProductIdSetPriceDelStateKey := fmt.Sprintf("%s%v:%v:%v:%v", cacheYccAgentLinkAgentIdProductIdSetPriceDelStatePrefix, agentId, productId, setPrice, delState)
var resp AgentLink
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentLinkAgentIdProductIdSetPriceDelStateKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -406,7 +425,7 @@ func (m *defaultAgentLinkModel) Trans(ctx context.Context, fn func(ctx context.C
func (m *defaultAgentLinkModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentLinkModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentLinkModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,34 +8,37 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
agentFieldNames = builder.RawFieldNames(&Agent{})
agentRows = strings.Join(agentFieldNames, ",")
agentRowsExpectAutoSet = strings.Join(stringx.Remove(agentFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentRowsExpectAutoSet = strings.Join(stringx.Remove(agentFieldNames, "`create_time`", "`update_time`"), ",")
agentRowsWithPlaceHolder = strings.Join(stringx.Remove(agentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentIdPrefix = "cache:ycc:agent:id:"
cacheYccAgentUserIdPrefix = "cache:ycc:agent:userId:"
cacheYccAgentIdPrefix = "cache:ycc:agent:id:"
cacheYccAgentAgentCodePrefix = "cache:ycc:agent:agentCode:"
cacheYccAgentUserIdPrefix = "cache:ycc:agent:userId:"
)
type (
agentModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Agent, error)
FindOneByUserId(ctx context.Context, userId int64) (*Agent, error)
FindOne(ctx context.Context, id string) (*Agent, error)
FindOneByAgentCode(ctx context.Context, agentCode int64) (*Agent, error)
FindOneByUserId(ctx context.Context, userId string) (*Agent, error)
Update(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Agent) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Agent, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Agent, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Agent, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentModel struct {
@@ -57,18 +60,20 @@ type (
}
Agent struct {
Id int64 `db:"id"` // 主键ID
UserId int64 `db:"user_id"` // 用户ID
Level int64 `db:"level"` // 代理等级1=普通2=黄金3=钻石
Region sql.NullString `db:"region"` // 区域(可选)
Mobile string `db:"mobile"` // 手机号(加密
WechatId sql.NullString `db:"wechat_id"` // 微信号
TeamLeaderId sql.NullInt64 `db:"team_leader_id"` // 团队首领ID钻石代理的ID普通/黄金代理指向其团队首领)
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
Id string `db:"id"`
UserId string `db:"user_id"`
AgentCode int64 `db:"agent_code"` // 代理编码从16800开始递增
Level int64 `db:"level"` // 代理等级1=普通2=黄金3=钻石
Region sql.NullString `db:"region"` // 区域(可选
Mobile string `db:"mobile"` // 手机号(加密)
WechatId sql.NullString `db:"wechat_id"` // 微信号
TeamLeaderId sql.NullString `db:"team_leader_id"`
InviteCodeId sql.NullString `db:"invite_code_id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
}
)
@@ -81,18 +86,36 @@ func newAgentModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentModel {
func (m *defaultAgentModel) Insert(ctx context.Context, session sqlx.Session, data *Agent) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentAgentCodeKey := fmt.Sprintf("%s%v", cacheYccAgentAgentCodePrefix, data.AgentCode)
yccAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentIdPrefix, data.Id)
yccAgentUserIdKey := fmt.Sprintf("%s%v", cacheYccAgentUserIdPrefix, data.UserId)
return 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, agentRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.UserId, data.Level, data.Region, data.Mobile, data.WechatId, data.TeamLeaderId, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.UserId, data.AgentCode, data.Level, data.Region, data.Mobile, data.WechatId, data.TeamLeaderId, data.InviteCodeId, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.UserId, data.Level, data.Region, data.Mobile, data.WechatId, data.TeamLeaderId, data.DeleteTime, data.DelState, data.Version)
}, yccAgentIdKey, yccAgentUserIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.UserId, data.AgentCode, data.Level, data.Region, data.Mobile, data.WechatId, data.TeamLeaderId, data.InviteCodeId, data.DeleteTime, data.DelState, data.Version)
}, yccAgentAgentCodeKey, yccAgentIdKey, yccAgentUserIdKey)
}
func (m *defaultAgentModel) insertUUID(data *Agent) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentModel) FindOne(ctx context.Context, id int64) (*Agent, error) {
func (m *defaultAgentModel) FindOne(ctx context.Context, id string) (*Agent, error) {
yccAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentIdPrefix, id)
var resp Agent
err := m.QueryRowCtx(ctx, &resp, yccAgentIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -109,7 +132,27 @@ func (m *defaultAgentModel) FindOne(ctx context.Context, id int64) (*Agent, erro
}
}
func (m *defaultAgentModel) FindOneByUserId(ctx context.Context, userId int64) (*Agent, error) {
func (m *defaultAgentModel) FindOneByAgentCode(ctx context.Context, agentCode int64) (*Agent, error) {
yccAgentAgentCodeKey := fmt.Sprintf("%s%v", cacheYccAgentAgentCodePrefix, agentCode)
var resp Agent
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentAgentCodeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `agent_code` = ? and del_state = ? limit 1", agentRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, agentCode, globalkey.DelStateNo); 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 *defaultAgentModel) FindOneByUserId(ctx context.Context, userId string) (*Agent, error) {
yccAgentUserIdKey := fmt.Sprintf("%s%v", cacheYccAgentUserIdPrefix, userId)
var resp Agent
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentUserIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -134,15 +177,16 @@ func (m *defaultAgentModel) Update(ctx context.Context, session sqlx.Session, ne
if err != nil {
return nil, err
}
yccAgentAgentCodeKey := fmt.Sprintf("%s%v", cacheYccAgentAgentCodePrefix, data.AgentCode)
yccAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentIdPrefix, data.Id)
yccAgentUserIdKey := fmt.Sprintf("%s%v", cacheYccAgentUserIdPrefix, data.UserId)
return 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, agentRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.UserId, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id)
return session.ExecCtx(ctx, query, newData.UserId, newData.AgentCode, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.InviteCodeId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.UserId, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id)
}, yccAgentIdKey, yccAgentUserIdKey)
return conn.ExecCtx(ctx, query, newData.UserId, newData.AgentCode, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.InviteCodeId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id)
}, yccAgentAgentCodeKey, yccAgentIdKey, yccAgentUserIdKey)
}
func (m *defaultAgentModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Agent) error {
@@ -157,15 +201,16 @@ func (m *defaultAgentModel) UpdateWithVersion(ctx context.Context, session sqlx.
if err != nil {
return err
}
yccAgentAgentCodeKey := fmt.Sprintf("%s%v", cacheYccAgentAgentCodePrefix, data.AgentCode)
yccAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentIdPrefix, data.Id)
yccAgentUserIdKey := fmt.Sprintf("%s%v", cacheYccAgentUserIdPrefix, data.UserId)
sqlResult, 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` = ? and version = ? ", m.table, agentRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.UserId, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion)
return session.ExecCtx(ctx, query, newData.UserId, newData.AgentCode, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.InviteCodeId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.UserId, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion)
}, yccAgentIdKey, yccAgentUserIdKey)
return conn.ExecCtx(ctx, query, newData.UserId, newData.AgentCode, newData.Level, newData.Region, newData.Mobile, newData.WechatId, newData.TeamLeaderId, newData.InviteCodeId, newData.DeleteTime, newData.DelState, newData.Version, newData.Id, oldVersion)
}, yccAgentAgentCodeKey, yccAgentIdKey, yccAgentUserIdKey)
if err != nil {
return err
}
@@ -382,12 +427,13 @@ func (m *defaultAgentModel) Trans(ctx context.Context, fn func(ctx context.Conte
func (m *defaultAgentModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
yccAgentAgentCodeKey := fmt.Sprintf("%s%v", cacheYccAgentAgentCodePrefix, data.AgentCode)
yccAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentIdPrefix, id)
yccAgentUserIdKey := fmt.Sprintf("%s%v", cacheYccAgentUserIdPrefix, data.UserId)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
@@ -396,7 +442,7 @@ func (m *defaultAgentModel) Delete(ctx context.Context, session sqlx.Session, id
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, yccAgentIdKey, yccAgentUserIdKey)
}, yccAgentAgentCodeKey, yccAgentIdKey, yccAgentUserIdKey)
return err
}
func (m *defaultAgentModel) formatPrimary(primary interface{}) string {

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentOrderFieldNames = builder.RawFieldNames(&AgentOrder{})
agentOrderRows = strings.Join(agentOrderFieldNames, ",")
agentOrderRowsExpectAutoSet = strings.Join(stringx.Remove(agentOrderFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentOrderRowsExpectAutoSet = strings.Join(stringx.Remove(agentOrderFieldNames, "`create_time`", "`update_time`"), ",")
agentOrderRowsWithPlaceHolder = strings.Join(stringx.Remove(agentOrderFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentOrderIdPrefix = "cache:ycc:agentOrder:id:"
@@ -33,8 +35,8 @@ var (
type (
agentOrderModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentOrder) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentOrder, error)
FindOneByOrderId(ctx context.Context, orderId int64) (*AgentOrder, error)
FindOne(ctx context.Context, id string) (*AgentOrder, error)
FindOneByOrderId(ctx context.Context, orderId string) (*AgentOrder, error)
Update(ctx context.Context, session sqlx.Session, data *AgentOrder) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentOrder) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentOrder, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentOrder, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentOrder, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentOrderModel struct {
@@ -56,10 +58,10 @@ type (
}
AgentOrder struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
OrderId int64 `db:"order_id"` // 订单ID
ProductId int64 `db:"product_id"` // 产品ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
OrderId string `db:"order_id"`
ProductId string `db:"product_id"`
OrderAmount float64 `db:"order_amount"` // 订单金额(用户实际支付金额,冗余字段)
SetPrice float64 `db:"set_price"` // 代理设定价格
ActualBasePrice float64 `db:"actual_base_price"` // 实际底价(基础底价+等级加成)
@@ -85,18 +87,35 @@ func newAgentOrderModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentOrder
func (m *defaultAgentOrderModel) Insert(ctx context.Context, session sqlx.Session, data *AgentOrder) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentOrderIdKey := fmt.Sprintf("%s%v", cacheYccAgentOrderIdPrefix, data.Id)
yccAgentOrderOrderIdKey := fmt.Sprintf("%s%v", cacheYccAgentOrderOrderIdPrefix, data.OrderId)
return 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, agentOrderRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentOrderRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.ProductId, data.OrderAmount, data.SetPrice, data.ActualBasePrice, data.PriceCost, data.AgentProfit, data.ProcessStatus, data.ProcessTime, data.ProcessRemark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.ProductId, data.OrderAmount, data.SetPrice, data.ActualBasePrice, data.PriceCost, data.AgentProfit, data.ProcessStatus, data.ProcessTime, data.ProcessRemark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.OrderId, data.ProductId, data.OrderAmount, data.SetPrice, data.ActualBasePrice, data.PriceCost, data.AgentProfit, data.ProcessStatus, data.ProcessTime, data.ProcessRemark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.OrderId, data.ProductId, data.OrderAmount, data.SetPrice, data.ActualBasePrice, data.PriceCost, data.AgentProfit, data.ProcessStatus, data.ProcessTime, data.ProcessRemark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentOrderIdKey, yccAgentOrderOrderIdKey)
}
func (m *defaultAgentOrderModel) insertUUID(data *AgentOrder) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentOrderModel) FindOne(ctx context.Context, id int64) (*AgentOrder, error) {
func (m *defaultAgentOrderModel) FindOne(ctx context.Context, id string) (*AgentOrder, error) {
yccAgentOrderIdKey := fmt.Sprintf("%s%v", cacheYccAgentOrderIdPrefix, id)
var resp AgentOrder
err := m.QueryRowCtx(ctx, &resp, yccAgentOrderIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -113,7 +132,7 @@ func (m *defaultAgentOrderModel) FindOne(ctx context.Context, id int64) (*AgentO
}
}
func (m *defaultAgentOrderModel) FindOneByOrderId(ctx context.Context, orderId int64) (*AgentOrder, error) {
func (m *defaultAgentOrderModel) FindOneByOrderId(ctx context.Context, orderId string) (*AgentOrder, error) {
yccAgentOrderOrderIdKey := fmt.Sprintf("%s%v", cacheYccAgentOrderOrderIdPrefix, orderId)
var resp AgentOrder
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentOrderOrderIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -386,7 +405,7 @@ func (m *defaultAgentOrderModel) Trans(ctx context.Context, fn func(ctx context.
func (m *defaultAgentOrderModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentOrderModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentOrderModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,22 +8,25 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
agentProductConfigFieldNames = builder.RawFieldNames(&AgentProductConfig{})
agentProductConfigRows = strings.Join(agentProductConfigFieldNames, ",")
agentProductConfigRowsExpectAutoSet = strings.Join(stringx.Remove(agentProductConfigFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentProductConfigRowsExpectAutoSet = strings.Join(stringx.Remove(agentProductConfigFieldNames, "`create_time`", "`update_time`"), ",")
agentProductConfigRowsWithPlaceHolder = strings.Join(stringx.Remove(agentProductConfigFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentProductConfigIdPrefix = "cache:ycc:agentProductConfig:id:"
@@ -33,8 +36,8 @@ var (
type (
agentProductConfigModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentProductConfig) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentProductConfig, error)
FindOneByProductId(ctx context.Context, productId int64) (*AgentProductConfig, error)
FindOne(ctx context.Context, id string) (*AgentProductConfig, error)
FindOneByProductId(ctx context.Context, productId string) (*AgentProductConfig, error)
Update(ctx context.Context, session sqlx.Session, data *AgentProductConfig) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentProductConfig) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -47,7 +50,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentProductConfig, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentProductConfig, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentProductConfig, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentProductConfigModel struct {
@@ -56,8 +59,8 @@ type (
}
AgentProductConfig struct {
Id int64 `db:"id"` // 主键ID
ProductId int64 `db:"product_id"` // 产品ID
Id string `db:"id"`
ProductId string `db:"product_id"`
BasePrice float64 `db:"base_price"` // 基础底价BasePrice
SystemMaxPrice float64 `db:"system_max_price"` // 系统价格上限SystemMaxPrice
PriceThreshold sql.NullFloat64 `db:"price_threshold"` // 提价标准阈值PriceThreshold
@@ -79,18 +82,35 @@ func newAgentProductConfigModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAg
func (m *defaultAgentProductConfigModel) Insert(ctx context.Context, session sqlx.Session, data *AgentProductConfig) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentProductConfigIdKey := fmt.Sprintf("%s%v", cacheYccAgentProductConfigIdPrefix, data.Id)
yccAgentProductConfigProductIdKey := fmt.Sprintf("%s%v", cacheYccAgentProductConfigProductIdPrefix, data.ProductId)
return 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, agentProductConfigRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentProductConfigRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.ProductId, data.BasePrice, data.SystemMaxPrice, data.PriceThreshold, data.PriceFeeRate, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.ProductId, data.BasePrice, data.SystemMaxPrice, data.PriceThreshold, data.PriceFeeRate, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.ProductId, data.BasePrice, data.SystemMaxPrice, data.PriceThreshold, data.PriceFeeRate, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.ProductId, data.BasePrice, data.SystemMaxPrice, data.PriceThreshold, data.PriceFeeRate, data.DeleteTime, data.DelState, data.Version)
}, yccAgentProductConfigIdKey, yccAgentProductConfigProductIdKey)
}
func (m *defaultAgentProductConfigModel) insertUUID(data *AgentProductConfig) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentProductConfigModel) FindOne(ctx context.Context, id int64) (*AgentProductConfig, error) {
func (m *defaultAgentProductConfigModel) FindOne(ctx context.Context, id string) (*AgentProductConfig, error) {
yccAgentProductConfigIdKey := fmt.Sprintf("%s%v", cacheYccAgentProductConfigIdPrefix, id)
var resp AgentProductConfig
err := m.QueryRowCtx(ctx, &resp, yccAgentProductConfigIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -107,7 +127,7 @@ func (m *defaultAgentProductConfigModel) FindOne(ctx context.Context, id int64)
}
}
func (m *defaultAgentProductConfigModel) FindOneByProductId(ctx context.Context, productId int64) (*AgentProductConfig, error) {
func (m *defaultAgentProductConfigModel) FindOneByProductId(ctx context.Context, productId string) (*AgentProductConfig, error) {
yccAgentProductConfigProductIdKey := fmt.Sprintf("%s%v", cacheYccAgentProductConfigProductIdPrefix, productId)
var resp AgentProductConfig
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentProductConfigProductIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -380,7 +400,7 @@ func (m *defaultAgentProductConfigModel) Trans(ctx context.Context, fn func(ctx
func (m *defaultAgentProductConfigModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentProductConfigModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentProductConfigModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentRealNameFieldNames = builder.RawFieldNames(&AgentRealName{})
agentRealNameRows = strings.Join(agentRealNameFieldNames, ",")
agentRealNameRowsExpectAutoSet = strings.Join(stringx.Remove(agentRealNameFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentRealNameRowsExpectAutoSet = strings.Join(stringx.Remove(agentRealNameFieldNames, "`create_time`", "`update_time`"), ",")
agentRealNameRowsWithPlaceHolder = strings.Join(stringx.Remove(agentRealNameFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentRealNameIdPrefix = "cache:ycc:agentRealName:id:"
@@ -33,8 +35,8 @@ var (
type (
agentRealNameModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentRealName) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentRealName, error)
FindOneByAgentId(ctx context.Context, agentId int64) (*AgentRealName, error)
FindOne(ctx context.Context, id string) (*AgentRealName, error)
FindOneByAgentId(ctx context.Context, agentId string) (*AgentRealName, error)
Update(ctx context.Context, session sqlx.Session, data *AgentRealName) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentRealName) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentRealName, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentRealName, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentRealName, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentRealNameModel struct {
@@ -56,8 +58,8 @@ type (
}
AgentRealName struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
Name string `db:"name"` // 真实姓名
IdCard string `db:"id_card"` // 身份证号(加密)
Mobile string `db:"mobile"` // 手机号(加密)
@@ -79,18 +81,35 @@ func newAgentRealNameModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentRe
func (m *defaultAgentRealNameModel) Insert(ctx context.Context, session sqlx.Session, data *AgentRealName) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentRealNameAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentRealNameAgentIdPrefix, data.AgentId)
yccAgentRealNameIdKey := fmt.Sprintf("%s%v", cacheYccAgentRealNameIdPrefix, data.Id)
return 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, agentRealNameRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentRealNameRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.Name, data.IdCard, data.Mobile, data.VerifyTime, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.Name, data.IdCard, data.Mobile, data.VerifyTime, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.Name, data.IdCard, data.Mobile, data.VerifyTime, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.Name, data.IdCard, data.Mobile, data.VerifyTime, data.DeleteTime, data.DelState, data.Version)
}, yccAgentRealNameAgentIdKey, yccAgentRealNameIdKey)
}
func (m *defaultAgentRealNameModel) insertUUID(data *AgentRealName) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentRealNameModel) FindOne(ctx context.Context, id int64) (*AgentRealName, error) {
func (m *defaultAgentRealNameModel) FindOne(ctx context.Context, id string) (*AgentRealName, error) {
yccAgentRealNameIdKey := fmt.Sprintf("%s%v", cacheYccAgentRealNameIdPrefix, id)
var resp AgentRealName
err := m.QueryRowCtx(ctx, &resp, yccAgentRealNameIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -107,7 +126,7 @@ func (m *defaultAgentRealNameModel) FindOne(ctx context.Context, id int64) (*Age
}
}
func (m *defaultAgentRealNameModel) FindOneByAgentId(ctx context.Context, agentId int64) (*AgentRealName, error) {
func (m *defaultAgentRealNameModel) FindOneByAgentId(ctx context.Context, agentId string) (*AgentRealName, error) {
yccAgentRealNameAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentRealNameAgentIdPrefix, agentId)
var resp AgentRealName
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentRealNameAgentIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -380,7 +399,7 @@ func (m *defaultAgentRealNameModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAgentRealNameModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentRealNameModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentRealNameModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentRebateFieldNames = builder.RawFieldNames(&AgentRebate{})
agentRebateRows = strings.Join(agentRebateFieldNames, ",")
agentRebateRowsExpectAutoSet = strings.Join(stringx.Remove(agentRebateFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentRebateRowsExpectAutoSet = strings.Join(stringx.Remove(agentRebateFieldNames, "`create_time`", "`update_time`"), ",")
agentRebateRowsWithPlaceHolder = strings.Join(stringx.Remove(agentRebateFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentRebateIdPrefix = "cache:ycc:agentRebate:id:"
@@ -32,7 +34,7 @@ var (
type (
agentRebateModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentRebate) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentRebate, error)
FindOne(ctx context.Context, id string) (*AgentRebate, error)
Update(ctx context.Context, session sqlx.Session, data *AgentRebate) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentRebate) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentRebate, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentRebate, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentRebate, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentRebateModel struct {
@@ -54,20 +56,20 @@ type (
}
AgentRebate struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 获得返佣的代理ID
SourceAgentId int64 `db:"source_agent_id"` // 来源代理ID推广订单的代理
OrderId int64 `db:"order_id"` // 订单ID
ProductId int64 `db:"product_id"` // 产品ID
RebateType int64 `db:"rebate_type"` // 返佣类型1=直接上级返佣2=钻石上级返佣3=黄金上级返佣
LevelBonus float64 `db:"level_bonus"` // 等级加成金额(来源代理的等级加成)
RebateAmount float64 `db:"rebate_amount"` // 返佣金额
Status int64 `db:"status"` // 状态1=已发放2=已冻结3=已取消
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
Id string `db:"id"`
AgentId string `db:"agent_id"`
SourceAgentId string `db:"source_agent_id"`
OrderId string `db:"order_id"`
ProductId string `db:"product_id"`
RebateType int64 `db:"rebate_type"` // 返佣类型1=直接上级返佣2=钻石上级返佣3=黄金上级返佣
LevelBonus float64 `db:"level_bonus"` // 等级加成金额(来源代理的等级加成)
RebateAmount float64 `db:"rebate_amount"` // 返佣金额
Status int64 `db:"status"` // 状态1=已发放2=已冻结3=已取消
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
}
)
@@ -80,17 +82,34 @@ func newAgentRebateModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentReba
func (m *defaultAgentRebateModel) Insert(ctx context.Context, session sqlx.Session, data *AgentRebate) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentRebateIdKey := fmt.Sprintf("%s%v", cacheYccAgentRebateIdPrefix, data.Id)
return 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, agentRebateRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentRebateRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.SourceAgentId, data.OrderId, data.ProductId, data.RebateType, data.LevelBonus, data.RebateAmount, data.Status, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.SourceAgentId, data.OrderId, data.ProductId, data.RebateType, data.LevelBonus, data.RebateAmount, data.Status, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.SourceAgentId, data.OrderId, data.ProductId, data.RebateType, data.LevelBonus, data.RebateAmount, data.Status, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.SourceAgentId, data.OrderId, data.ProductId, data.RebateType, data.LevelBonus, data.RebateAmount, data.Status, data.DeleteTime, data.DelState, data.Version)
}, yccAgentRebateIdKey)
}
func (m *defaultAgentRebateModel) insertUUID(data *AgentRebate) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentRebateModel) FindOne(ctx context.Context, id int64) (*AgentRebate, error) {
func (m *defaultAgentRebateModel) FindOne(ctx context.Context, id string) (*AgentRebate, error) {
yccAgentRebateIdKey := fmt.Sprintf("%s%v", cacheYccAgentRebateIdPrefix, id)
var resp AgentRebate
err := m.QueryRowCtx(ctx, &resp, yccAgentRebateIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -350,7 +369,7 @@ func (m *defaultAgentRebateModel) Trans(ctx context.Context, fn func(ctx context
func (m *defaultAgentRebateModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentRebateModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentRebateModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentRebateIdKey := fmt.Sprintf("%s%v", cacheYccAgentRebateIdPrefix, 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)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentRelationFieldNames = builder.RawFieldNames(&AgentRelation{})
agentRelationRows = strings.Join(agentRelationFieldNames, ",")
agentRelationRowsExpectAutoSet = strings.Join(stringx.Remove(agentRelationFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentRelationRowsExpectAutoSet = strings.Join(stringx.Remove(agentRelationFieldNames, "`create_time`", "`update_time`"), ",")
agentRelationRowsWithPlaceHolder = strings.Join(stringx.Remove(agentRelationFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentRelationIdPrefix = "cache:ycc:agentRelation:id:"
@@ -33,8 +35,8 @@ var (
type (
agentRelationModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentRelation) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentRelation, error)
FindOneByParentIdChildIdRelationType(ctx context.Context, parentId int64, childId int64, relationType int64) (*AgentRelation, error)
FindOne(ctx context.Context, id string) (*AgentRelation, error)
FindOneByParentIdChildIdRelationType(ctx context.Context, parentId string, childId string, relationType int64) (*AgentRelation, error)
Update(ctx context.Context, session sqlx.Session, data *AgentRelation) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentRelation) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentRelation, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentRelation, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentRelation, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentRelationModel struct {
@@ -56,9 +58,9 @@ type (
}
AgentRelation struct {
Id int64 `db:"id"` // 主键ID
ParentId int64 `db:"parent_id"` // 上级代理ID
ChildId int64 `db:"child_id"` // 下级代理ID
Id string `db:"id"`
ParentId string `db:"parent_id"`
ChildId string `db:"child_id"`
RelationType int64 `db:"relation_type"` // 关系类型1=直接关系2=已脱离(历史记录)
DetachReason sql.NullString `db:"detach_reason"` // 脱离原因upgrade=升级脱离
DetachTime sql.NullTime `db:"detach_time"` // 脱离时间
@@ -79,18 +81,35 @@ func newAgentRelationModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentRe
func (m *defaultAgentRelationModel) Insert(ctx context.Context, session sqlx.Session, data *AgentRelation) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentRelationIdKey := fmt.Sprintf("%s%v", cacheYccAgentRelationIdPrefix, data.Id)
yccAgentRelationParentIdChildIdRelationTypeKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentRelationParentIdChildIdRelationTypePrefix, data.ParentId, data.ChildId, data.RelationType)
return 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, agentRelationRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentRelationRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.ParentId, data.ChildId, data.RelationType, data.DetachReason, data.DetachTime, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.ParentId, data.ChildId, data.RelationType, data.DetachReason, data.DetachTime, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.ParentId, data.ChildId, data.RelationType, data.DetachReason, data.DetachTime, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.ParentId, data.ChildId, data.RelationType, data.DetachReason, data.DetachTime, data.DeleteTime, data.DelState, data.Version)
}, yccAgentRelationIdKey, yccAgentRelationParentIdChildIdRelationTypeKey)
}
func (m *defaultAgentRelationModel) insertUUID(data *AgentRelation) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentRelationModel) FindOne(ctx context.Context, id int64) (*AgentRelation, error) {
func (m *defaultAgentRelationModel) FindOne(ctx context.Context, id string) (*AgentRelation, error) {
yccAgentRelationIdKey := fmt.Sprintf("%s%v", cacheYccAgentRelationIdPrefix, id)
var resp AgentRelation
err := m.QueryRowCtx(ctx, &resp, yccAgentRelationIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -107,7 +126,7 @@ func (m *defaultAgentRelationModel) FindOne(ctx context.Context, id int64) (*Age
}
}
func (m *defaultAgentRelationModel) FindOneByParentIdChildIdRelationType(ctx context.Context, parentId int64, childId int64, relationType int64) (*AgentRelation, error) {
func (m *defaultAgentRelationModel) FindOneByParentIdChildIdRelationType(ctx context.Context, parentId string, childId string, relationType int64) (*AgentRelation, error) {
yccAgentRelationParentIdChildIdRelationTypeKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentRelationParentIdChildIdRelationTypePrefix, parentId, childId, relationType)
var resp AgentRelation
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentRelationParentIdChildIdRelationTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -380,7 +399,7 @@ func (m *defaultAgentRelationModel) Trans(ctx context.Context, fn func(ctx conte
func (m *defaultAgentRelationModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentRelationModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentRelationModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -1,6 +1,10 @@
package model
import (
"context"
"database/sql"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
@@ -12,6 +16,7 @@ type (
// and implement the added methods in customAgentShortLinkModel.
AgentShortLinkModel interface {
agentShortLinkModel
FindOneByInviteCodeTypeDelState(ctx context.Context, inviteCode sql.NullString, tp int64, delState int64) (*AgentShortLink, error)
}
customAgentShortLinkModel struct {
@@ -25,3 +30,17 @@ func NewAgentShortLinkModel(conn sqlx.SqlConn, c cache.CacheConf) AgentShortLink
defaultAgentShortLinkModel: newAgentShortLinkModel(conn, c),
}
}
func (m *customAgentShortLinkModel) FindOneByInviteCodeTypeDelState(ctx context.Context, inviteCode sql.NullString, tp int64, delState int64) (*AgentShortLink, error) {
builder := m.SelectBuilder().
Where("invite_code = ? AND type = ? AND del_state = ?", inviteCode, tp, delState).
Limit(1)
rows, err := m.FindAll(ctx, builder, "")
if err != nil {
return nil, errors.Wrapf(err, "query short link by invite_code failed")
}
if len(rows) == 0 {
return nil, ErrNotFound
}
return rows[0], nil
}

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentShortLinkFieldNames = builder.RawFieldNames(&AgentShortLink{})
agentShortLinkRows = strings.Join(agentShortLinkFieldNames, ",")
agentShortLinkRowsExpectAutoSet = strings.Join(stringx.Remove(agentShortLinkFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentShortLinkRowsExpectAutoSet = strings.Join(stringx.Remove(agentShortLinkFieldNames, "`create_time`", "`update_time`"), ",")
agentShortLinkRowsWithPlaceHolder = strings.Join(stringx.Remove(agentShortLinkFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentShortLinkIdPrefix = "cache:ycc:agentShortLink:id:"
@@ -35,9 +37,9 @@ var (
type (
agentShortLinkModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentShortLink) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentShortLink, error)
FindOneByInviteCodeIdTypeDelState(ctx context.Context, inviteCodeId sql.NullInt64, tp int64, delState int64) (*AgentShortLink, error)
FindOneByLinkIdTypeDelState(ctx context.Context, linkId sql.NullInt64, tp int64, delState int64) (*AgentShortLink, error)
FindOne(ctx context.Context, id string) (*AgentShortLink, error)
FindOneByInviteCodeIdTypeDelState(ctx context.Context, inviteCodeId sql.NullString, tp int64, delState int64) (*AgentShortLink, error)
FindOneByLinkIdTypeDelState(ctx context.Context, linkId sql.NullString, tp int64, delState int64) (*AgentShortLink, error)
FindOneByShortCodeDelState(ctx context.Context, shortCode string, delState int64) (*AgentShortLink, error)
Update(ctx context.Context, session sqlx.Session, data *AgentShortLink) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentShortLink) error
@@ -51,7 +53,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentShortLink, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentShortLink, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentShortLink, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentShortLinkModel struct {
@@ -60,10 +62,10 @@ type (
}
AgentShortLink struct {
Id int64 `db:"id"` // 主键ID
Type int64 `db:"type"` // 类型1=推广报告(promotion)2=邀请好友(invite)
LinkId sql.NullInt64 `db:"link_id"` // 推广链接ID关联agent_link表仅推广报告类型使用
InviteCodeId sql.NullInt64 `db:"invite_code_id"` // 邀请码ID关联agent_invite_code表仅邀请好友类型使用
Id string `db:"id"`
Type int64 `db:"type"` // 类型1=推广报告(promotion)2=邀请好友(invite)
LinkId sql.NullString `db:"link_id"`
InviteCodeId sql.NullString `db:"invite_code_id"`
LinkIdentifier sql.NullString `db:"link_identifier"` // 推广链接标识(加密,仅推广报告类型使用)
InviteCode sql.NullString `db:"invite_code"` // 邀请码(仅邀请好友类型使用)
ShortCode string `db:"short_code"` // 短链标识6位随机字符串
@@ -86,20 +88,37 @@ func newAgentShortLinkModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentS
func (m *defaultAgentShortLinkModel) Insert(ctx context.Context, session sqlx.Session, data *AgentShortLink) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentShortLinkIdKey := fmt.Sprintf("%s%v", cacheYccAgentShortLinkIdPrefix, data.Id)
yccAgentShortLinkInviteCodeIdTypeDelStateKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentShortLinkInviteCodeIdTypeDelStatePrefix, data.InviteCodeId, data.Type, data.DelState)
yccAgentShortLinkLinkIdTypeDelStateKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentShortLinkLinkIdTypeDelStatePrefix, data.LinkId, data.Type, data.DelState)
yccAgentShortLinkShortCodeDelStateKey := fmt.Sprintf("%s%v:%v", cacheYccAgentShortLinkShortCodeDelStatePrefix, data.ShortCode, data.DelState)
return 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, agentShortLinkRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentShortLinkRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.Type, data.LinkId, data.InviteCodeId, data.LinkIdentifier, data.InviteCode, data.ShortCode, data.TargetPath, data.PromotionDomain, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.Type, data.LinkId, data.InviteCodeId, data.LinkIdentifier, data.InviteCode, data.ShortCode, data.TargetPath, data.PromotionDomain, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.Type, data.LinkId, data.InviteCodeId, data.LinkIdentifier, data.InviteCode, data.ShortCode, data.TargetPath, data.PromotionDomain, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.Type, data.LinkId, data.InviteCodeId, data.LinkIdentifier, data.InviteCode, data.ShortCode, data.TargetPath, data.PromotionDomain, data.DeleteTime, data.DelState, data.Version)
}, yccAgentShortLinkIdKey, yccAgentShortLinkInviteCodeIdTypeDelStateKey, yccAgentShortLinkLinkIdTypeDelStateKey, yccAgentShortLinkShortCodeDelStateKey)
}
func (m *defaultAgentShortLinkModel) insertUUID(data *AgentShortLink) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentShortLinkModel) FindOne(ctx context.Context, id int64) (*AgentShortLink, error) {
func (m *defaultAgentShortLinkModel) FindOne(ctx context.Context, id string) (*AgentShortLink, error) {
yccAgentShortLinkIdKey := fmt.Sprintf("%s%v", cacheYccAgentShortLinkIdPrefix, id)
var resp AgentShortLink
err := m.QueryRowCtx(ctx, &resp, yccAgentShortLinkIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -116,7 +135,7 @@ func (m *defaultAgentShortLinkModel) FindOne(ctx context.Context, id int64) (*Ag
}
}
func (m *defaultAgentShortLinkModel) FindOneByInviteCodeIdTypeDelState(ctx context.Context, inviteCodeId sql.NullInt64, tp int64, delState int64) (*AgentShortLink, error) {
func (m *defaultAgentShortLinkModel) FindOneByInviteCodeIdTypeDelState(ctx context.Context, inviteCodeId sql.NullString, tp int64, delState int64) (*AgentShortLink, error) {
yccAgentShortLinkInviteCodeIdTypeDelStateKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentShortLinkInviteCodeIdTypeDelStatePrefix, inviteCodeId, tp, delState)
var resp AgentShortLink
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentShortLinkInviteCodeIdTypeDelStateKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -136,7 +155,7 @@ func (m *defaultAgentShortLinkModel) FindOneByInviteCodeIdTypeDelState(ctx conte
}
}
func (m *defaultAgentShortLinkModel) FindOneByLinkIdTypeDelState(ctx context.Context, linkId sql.NullInt64, tp int64, delState int64) (*AgentShortLink, error) {
func (m *defaultAgentShortLinkModel) FindOneByLinkIdTypeDelState(ctx context.Context, linkId sql.NullString, tp int64, delState int64) (*AgentShortLink, error) {
yccAgentShortLinkLinkIdTypeDelStateKey := fmt.Sprintf("%s%v:%v:%v", cacheYccAgentShortLinkLinkIdTypeDelStatePrefix, linkId, tp, delState)
var resp AgentShortLink
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentShortLinkLinkIdTypeDelStateKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -433,7 +452,7 @@ func (m *defaultAgentShortLinkModel) Trans(ctx context.Context, fn func(ctx cont
func (m *defaultAgentShortLinkModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentShortLinkModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentShortLinkModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentUpgradeFieldNames = builder.RawFieldNames(&AgentUpgrade{})
agentUpgradeRows = strings.Join(agentUpgradeFieldNames, ",")
agentUpgradeRowsExpectAutoSet = strings.Join(stringx.Remove(agentUpgradeFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentUpgradeRowsExpectAutoSet = strings.Join(stringx.Remove(agentUpgradeFieldNames, "`create_time`", "`update_time`"), ",")
agentUpgradeRowsWithPlaceHolder = strings.Join(stringx.Remove(agentUpgradeFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentUpgradeIdPrefix = "cache:ycc:agentUpgrade:id:"
@@ -32,7 +34,7 @@ var (
type (
agentUpgradeModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentUpgrade) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentUpgrade, error)
FindOne(ctx context.Context, id string) (*AgentUpgrade, error)
Update(ctx context.Context, session sqlx.Session, data *AgentUpgrade) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentUpgrade) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentUpgrade, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentUpgrade, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentUpgrade, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentUpgradeModel struct {
@@ -54,23 +56,23 @@ type (
}
AgentUpgrade struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 被升级的代理ID
FromLevel int64 `db:"from_level"` // 原等级1=普通2=黄金3=钻石
ToLevel int64 `db:"to_level"` // 目标等级1=普通2=黄金3=钻石
UpgradeType int64 `db:"upgrade_type"` // 升级类型1=自主付费2=钻石升级下级
UpgradeFee float64 `db:"upgrade_fee"` // 升级费用
RebateAmount float64 `db:"rebate_amount"` // 返佣金额(给原直接上级)
RebateAgentId sql.NullInt64 `db:"rebate_agent_id"` // 返佣代理ID原直接上级
OperatorAgentId sql.NullInt64 `db:"operator_agent_id"` // 操作代理ID如果是钻石升级下级记录操作者
OrderNo sql.NullString `db:"order_no"` // 支付订单号(如果是自主付费)
Status int64 `db:"status"` // 状态1=待处理2=已完成3=已失败
Remark sql.NullString `db:"remark"` // 备注
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
Id string `db:"id"`
AgentId string `db:"agent_id"`
FromLevel int64 `db:"from_level"` // 原等级1=普通2=黄金3=钻石
ToLevel int64 `db:"to_level"` // 目标等级1=普通2=黄金3=钻石
UpgradeType int64 `db:"upgrade_type"` // 升级类型1=自主付费2=钻石升级下级
UpgradeFee float64 `db:"upgrade_fee"` // 升级费用
RebateAmount float64 `db:"rebate_amount"` // 返佣金额(给原直接上级)
RebateAgentId sql.NullString `db:"rebate_agent_id"`
OperatorAgentId sql.NullString `db:"operator_agent_id"`
OrderNo sql.NullString `db:"order_no"` // 支付订单号(如果是自主付费)
Status int64 `db:"status"` // 状态1=待处理2=已完成3=已失败
Remark sql.NullString `db:"remark"` // 备注
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0=未删除1=已删除
Version int64 `db:"version"` // 版本号(乐观锁)
}
)
@@ -83,17 +85,34 @@ func newAgentUpgradeModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentUpg
func (m *defaultAgentUpgradeModel) Insert(ctx context.Context, session sqlx.Session, data *AgentUpgrade) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentUpgradeIdKey := fmt.Sprintf("%s%v", cacheYccAgentUpgradeIdPrefix, data.Id)
return 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, agentUpgradeRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentUpgradeRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.FromLevel, data.ToLevel, data.UpgradeType, data.UpgradeFee, data.RebateAmount, data.RebateAgentId, data.OperatorAgentId, data.OrderNo, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.FromLevel, data.ToLevel, data.UpgradeType, data.UpgradeFee, data.RebateAmount, data.RebateAgentId, data.OperatorAgentId, data.OrderNo, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.FromLevel, data.ToLevel, data.UpgradeType, data.UpgradeFee, data.RebateAmount, data.RebateAgentId, data.OperatorAgentId, data.OrderNo, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.FromLevel, data.ToLevel, data.UpgradeType, data.UpgradeFee, data.RebateAmount, data.RebateAgentId, data.OperatorAgentId, data.OrderNo, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentUpgradeIdKey)
}
func (m *defaultAgentUpgradeModel) insertUUID(data *AgentUpgrade) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentUpgradeModel) FindOne(ctx context.Context, id int64) (*AgentUpgrade, error) {
func (m *defaultAgentUpgradeModel) FindOne(ctx context.Context, id string) (*AgentUpgrade, error) {
yccAgentUpgradeIdKey := fmt.Sprintf("%s%v", cacheYccAgentUpgradeIdPrefix, id)
var resp AgentUpgrade
err := m.QueryRowCtx(ctx, &resp, yccAgentUpgradeIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -353,7 +372,7 @@ func (m *defaultAgentUpgradeModel) Trans(ctx context.Context, fn func(ctx contex
func (m *defaultAgentUpgradeModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentUpgradeModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentUpgradeModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentUpgradeIdKey := fmt.Sprintf("%s%v", cacheYccAgentUpgradeIdPrefix, 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)

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentWalletFieldNames = builder.RawFieldNames(&AgentWallet{})
agentWalletRows = strings.Join(agentWalletFieldNames, ",")
agentWalletRowsExpectAutoSet = strings.Join(stringx.Remove(agentWalletFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentWalletRowsExpectAutoSet = strings.Join(stringx.Remove(agentWalletFieldNames, "`create_time`", "`update_time`"), ",")
agentWalletRowsWithPlaceHolder = strings.Join(stringx.Remove(agentWalletFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentWalletIdPrefix = "cache:ycc:agentWallet:id:"
@@ -33,8 +35,8 @@ var (
type (
agentWalletModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentWallet, error)
FindOneByAgentId(ctx context.Context, agentId int64) (*AgentWallet, error)
FindOne(ctx context.Context, id string) (*AgentWallet, error)
FindOneByAgentId(ctx context.Context, agentId string) (*AgentWallet, error)
Update(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentWallet) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWallet, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentWallet, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentWallet, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentWalletModel struct {
@@ -56,8 +58,8 @@ type (
}
AgentWallet struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
Balance float64 `db:"balance"` // 可用余额
FrozenBalance float64 `db:"frozen_balance"` // 冻结余额
TotalEarnings float64 `db:"total_earnings"` // 累计收益
@@ -79,18 +81,35 @@ func newAgentWalletModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgentWall
func (m *defaultAgentWalletModel) Insert(ctx context.Context, session sqlx.Session, data *AgentWallet) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentWalletAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentWalletAgentIdPrefix, data.AgentId)
yccAgentWalletIdKey := fmt.Sprintf("%s%v", cacheYccAgentWalletIdPrefix, data.Id)
return 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, agentWalletRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentWalletRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.Balance, data.FrozenBalance, data.TotalEarnings, data.WithdrawnAmount, data.DeleteTime, data.DelState, data.Version)
}, yccAgentWalletAgentIdKey, yccAgentWalletIdKey)
}
func (m *defaultAgentWalletModel) insertUUID(data *AgentWallet) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentWalletModel) FindOne(ctx context.Context, id int64) (*AgentWallet, error) {
func (m *defaultAgentWalletModel) FindOne(ctx context.Context, id string) (*AgentWallet, error) {
yccAgentWalletIdKey := fmt.Sprintf("%s%v", cacheYccAgentWalletIdPrefix, id)
var resp AgentWallet
err := m.QueryRowCtx(ctx, &resp, yccAgentWalletIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -107,7 +126,7 @@ func (m *defaultAgentWalletModel) FindOne(ctx context.Context, id int64) (*Agent
}
}
func (m *defaultAgentWalletModel) FindOneByAgentId(ctx context.Context, agentId int64) (*AgentWallet, error) {
func (m *defaultAgentWalletModel) FindOneByAgentId(ctx context.Context, agentId string) (*AgentWallet, error) {
yccAgentWalletAgentIdKey := fmt.Sprintf("%s%v", cacheYccAgentWalletAgentIdPrefix, agentId)
var resp AgentWallet
err := m.QueryRowIndexCtx(ctx, &resp, yccAgentWalletAgentIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
@@ -380,7 +399,7 @@ func (m *defaultAgentWalletModel) Trans(ctx context.Context, fn func(ctx context
func (m *defaultAgentWalletModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentWalletModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentWalletModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentWithdrawalFieldNames = builder.RawFieldNames(&AgentWithdrawal{})
agentWithdrawalRows = strings.Join(agentWithdrawalFieldNames, ",")
agentWithdrawalRowsExpectAutoSet = strings.Join(stringx.Remove(agentWithdrawalFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentWithdrawalRowsExpectAutoSet = strings.Join(stringx.Remove(agentWithdrawalFieldNames, "`create_time`", "`update_time`"), ",")
agentWithdrawalRowsWithPlaceHolder = strings.Join(stringx.Remove(agentWithdrawalFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentWithdrawalIdPrefix = "cache:ycc:agentWithdrawal:id:"
@@ -33,7 +35,7 @@ var (
type (
agentWithdrawalModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentWithdrawal) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentWithdrawal, error)
FindOne(ctx context.Context, id string) (*AgentWithdrawal, error)
FindOneByWithdrawNo(ctx context.Context, withdrawNo string) (*AgentWithdrawal, error)
Update(ctx context.Context, session sqlx.Session, data *AgentWithdrawal) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentWithdrawal) error
@@ -47,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWithdrawal, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentWithdrawal, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentWithdrawal, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentWithdrawalModel struct {
@@ -56,8 +58,8 @@ type (
}
AgentWithdrawal struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
WithdrawNo string `db:"withdraw_no"` // 提现单号
PayeeAccount string `db:"payee_account"` // 收款账户
PayeeName string `db:"payee_name"` // 收款人姓名
@@ -83,18 +85,35 @@ func newAgentWithdrawalModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAgent
func (m *defaultAgentWithdrawalModel) Insert(ctx context.Context, session sqlx.Session, data *AgentWithdrawal) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentWithdrawalIdKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalIdPrefix, data.Id)
yccAgentWithdrawalWithdrawNoKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalWithdrawNoPrefix, data.WithdrawNo)
return 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, agentWithdrawalRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentWithdrawalRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.WithdrawNo, data.PayeeAccount, data.PayeeName, data.Amount, data.ActualAmount, data.TaxAmount, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.WithdrawNo, data.PayeeAccount, data.PayeeName, data.Amount, data.ActualAmount, data.TaxAmount, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.WithdrawNo, data.PayeeAccount, data.PayeeName, data.Amount, data.ActualAmount, data.TaxAmount, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.WithdrawNo, data.PayeeAccount, data.PayeeName, data.Amount, data.ActualAmount, data.TaxAmount, data.Status, data.Remark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentWithdrawalIdKey, yccAgentWithdrawalWithdrawNoKey)
}
func (m *defaultAgentWithdrawalModel) insertUUID(data *AgentWithdrawal) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentWithdrawalModel) FindOne(ctx context.Context, id int64) (*AgentWithdrawal, error) {
func (m *defaultAgentWithdrawalModel) FindOne(ctx context.Context, id string) (*AgentWithdrawal, error) {
yccAgentWithdrawalIdKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalIdPrefix, id)
var resp AgentWithdrawal
err := m.QueryRowCtx(ctx, &resp, yccAgentWithdrawalIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -384,7 +403,7 @@ func (m *defaultAgentWithdrawalModel) Trans(ctx context.Context, fn func(ctx con
func (m *defaultAgentWithdrawalModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentWithdrawalModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentWithdrawalModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,9 +8,11 @@ import (
"fmt"
"strings"
"reflect"
"time"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/cache"
@@ -23,7 +25,7 @@ import (
var (
agentWithdrawalTaxFieldNames = builder.RawFieldNames(&AgentWithdrawalTax{})
agentWithdrawalTaxRows = strings.Join(agentWithdrawalTaxFieldNames, ",")
agentWithdrawalTaxRowsExpectAutoSet = strings.Join(stringx.Remove(agentWithdrawalTaxFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
agentWithdrawalTaxRowsExpectAutoSet = strings.Join(stringx.Remove(agentWithdrawalTaxFieldNames, "`create_time`", "`update_time`"), ",")
agentWithdrawalTaxRowsWithPlaceHolder = strings.Join(stringx.Remove(agentWithdrawalTaxFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccAgentWithdrawalTaxIdPrefix = "cache:ycc:agentWithdrawalTax:id:"
@@ -32,7 +34,7 @@ var (
type (
agentWithdrawalTaxModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AgentWithdrawalTax) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AgentWithdrawalTax, error)
FindOne(ctx context.Context, id string) (*AgentWithdrawalTax, error)
Update(ctx context.Context, session sqlx.Session, data *AgentWithdrawalTax) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AgentWithdrawalTax) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -45,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AgentWithdrawalTax, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AgentWithdrawalTax, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AgentWithdrawalTax, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAgentWithdrawalTaxModel struct {
@@ -54,9 +56,9 @@ type (
}
AgentWithdrawalTax struct {
Id int64 `db:"id"` // 主键ID
AgentId int64 `db:"agent_id"` // 代理ID
WithdrawalId int64 `db:"withdrawal_id"` // 提现记录ID
Id string `db:"id"`
AgentId string `db:"agent_id"`
WithdrawalId string `db:"withdrawal_id"`
YearMonth int64 `db:"year_month"` // 年月格式YYYYMM
WithdrawalAmount float64 `db:"withdrawal_amount"` // 提现金额
TaxableAmount float64 `db:"taxable_amount"` // 应税金额
@@ -83,17 +85,34 @@ func newAgentWithdrawalTaxModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultAg
func (m *defaultAgentWithdrawalTaxModel) Insert(ctx context.Context, session sqlx.Session, data *AgentWithdrawalTax) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccAgentWithdrawalTaxIdKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalTaxIdPrefix, data.Id)
return 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, agentWithdrawalTaxRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, agentWithdrawalTaxRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.AgentId, data.WithdrawalId, data.YearMonth, data.WithdrawalAmount, data.TaxableAmount, data.TaxRate, data.TaxAmount, data.ActualAmount, data.TaxStatus, data.TaxTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.AgentId, data.WithdrawalId, data.YearMonth, data.WithdrawalAmount, data.TaxableAmount, data.TaxRate, data.TaxAmount, data.ActualAmount, data.TaxStatus, data.TaxTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.AgentId, data.WithdrawalId, data.YearMonth, data.WithdrawalAmount, data.TaxableAmount, data.TaxRate, data.TaxAmount, data.ActualAmount, data.TaxStatus, data.TaxTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
return conn.ExecCtx(ctx, query, data.Id, data.AgentId, data.WithdrawalId, data.YearMonth, data.WithdrawalAmount, data.TaxableAmount, data.TaxRate, data.TaxAmount, data.ActualAmount, data.TaxStatus, data.TaxTime, data.Remark, data.DeleteTime, data.DelState, data.Version)
}, yccAgentWithdrawalTaxIdKey)
}
func (m *defaultAgentWithdrawalTaxModel) insertUUID(data *AgentWithdrawalTax) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAgentWithdrawalTaxModel) FindOne(ctx context.Context, id int64) (*AgentWithdrawalTax, error) {
func (m *defaultAgentWithdrawalTaxModel) FindOne(ctx context.Context, id string) (*AgentWithdrawalTax, error) {
yccAgentWithdrawalTaxIdKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalTaxIdPrefix, id)
var resp AgentWithdrawalTax
err := m.QueryRowCtx(ctx, &resp, yccAgentWithdrawalTaxIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -353,7 +372,7 @@ func (m *defaultAgentWithdrawalTaxModel) Trans(ctx context.Context, fn func(ctx
func (m *defaultAgentWithdrawalTaxModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAgentWithdrawalTaxModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultAgentWithdrawalTaxModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAgentWithdrawalTaxIdKey := fmt.Sprintf("%s%v", cacheYccAgentWithdrawalTaxIdPrefix, 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)

View File

@@ -14,7 +14,7 @@ type (
// and implement the added methods in customAuthorizationDocumentModel.
AuthorizationDocumentModel interface {
authorizationDocumentModel
FindByOrderId(ctx context.Context, orderId int64) ([]*AuthorizationDocument, error)
FindByOrderId(ctx context.Context, orderId string) ([]*AuthorizationDocument, error)
}
customAuthorizationDocumentModel struct {
@@ -30,14 +30,14 @@ func NewAuthorizationDocumentModel(conn sqlx.SqlConn, c cache.CacheConf) Authori
}
// FindByOrderId 根据订单ID查询授权书列表
func (m *customAuthorizationDocumentModel) FindByOrderId(ctx context.Context, orderId int64) ([]*AuthorizationDocument, error) {
func (m *customAuthorizationDocumentModel) FindByOrderId(ctx context.Context, orderId string) ([]*AuthorizationDocument, error) {
query := `SELECT * FROM authorization_document WHERE order_id = ? AND del_state = 0 ORDER BY create_time DESC`
var authDocs []*AuthorizationDocument
err := m.QueryRowsNoCacheCtx(ctx, &authDocs, query, orderId)
if err != nil {
return nil, err
}
return authDocs, nil
}

View File

@@ -8,32 +8,33 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
authorizationDocumentFieldNames = builder.RawFieldNames(&AuthorizationDocument{})
authorizationDocumentRows = strings.Join(authorizationDocumentFieldNames, ",")
authorizationDocumentRowsExpectAutoSet = strings.Join(stringx.Remove(authorizationDocumentFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
authorizationDocumentRowsExpectAutoSet = strings.Join(stringx.Remove(authorizationDocumentFieldNames, "`create_time`", "`update_time`"), ",")
authorizationDocumentRowsWithPlaceHolder = strings.Join(stringx.Remove(authorizationDocumentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmAuthorizationDocumentIdPrefix = "cache:ycc:authorizationDocument:id:"
cacheYccAuthorizationDocumentIdPrefix = "cache:ycc:authorizationDocument:id:"
)
type (
authorizationDocumentModel interface {
Insert(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*AuthorizationDocument, error)
FindOne(ctx context.Context, id string) (*AuthorizationDocument, error)
Update(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -46,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*AuthorizationDocument, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*AuthorizationDocument, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*AuthorizationDocument, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultAuthorizationDocumentModel struct {
@@ -55,10 +56,10 @@ type (
}
AuthorizationDocument struct {
Id int64 `db:"id"` // 主键ID
UserId int64 `db:"user_id"` // 用户ID
OrderId int64 `db:"order_id"` // 订单ID
QueryId int64 `db:"query_id"` // 查询ID
Id string `db:"id"`
UserId string `db:"user_id"`
OrderId string `db:"order_id"`
QueryId string `db:"query_id"`
FileName string `db:"file_name"` // 文件名
FilePath string `db:"file_path"` // 文件路径
FileUrl string `db:"file_url"` // 文件访问URL
@@ -83,20 +84,37 @@ func newAuthorizationDocumentModel(conn sqlx.SqlConn, c cache.CacheConf) *defaul
func (m *defaultAuthorizationDocumentModel) Insert(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, data.Id)
m.insertUUID(data)
yccAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, data.Id)
return 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, authorizationDocumentRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, authorizationDocumentRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version)
return session.ExecCtx(ctx, query, data.Id, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version)
}
return conn.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version)
}, hmAuthorizationDocumentIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version)
}, yccAuthorizationDocumentIdKey)
}
func (m *defaultAuthorizationDocumentModel) insertUUID(data *AuthorizationDocument) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultAuthorizationDocumentModel) FindOne(ctx context.Context, id int64) (*AuthorizationDocument, error) {
hmAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, id)
func (m *defaultAuthorizationDocumentModel) FindOne(ctx context.Context, id string) (*AuthorizationDocument, error) {
yccAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, id)
var resp AuthorizationDocument
err := m.QueryRowCtx(ctx, &resp, hmAuthorizationDocumentIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccAuthorizationDocumentIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", authorizationDocumentRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -111,14 +129,14 @@ func (m *defaultAuthorizationDocumentModel) FindOne(ctx context.Context, id int6
}
func (m *defaultAuthorizationDocumentModel) Update(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) (sql.Result, error) {
hmAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, data.Id)
yccAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, data.Id)
return 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, authorizationDocumentRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version, data.Id)
}
return conn.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version, data.Id)
}, hmAuthorizationDocumentIdKey)
}, yccAuthorizationDocumentIdKey)
}
func (m *defaultAuthorizationDocumentModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *AuthorizationDocument) error {
@@ -129,14 +147,14 @@ func (m *defaultAuthorizationDocumentModel) UpdateWithVersion(ctx context.Contex
var sqlResult sql.Result
var err error
hmAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, data.Id)
yccAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, authorizationDocumentRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, data.UserId, data.OrderId, data.QueryId, data.FileName, data.FilePath, data.FileUrl, data.FileSize, data.FileType, data.Status, data.ExpireTime, data.DeleteTime, data.DelState, data.Version, data.Id, oldVersion)
}, hmAuthorizationDocumentIdKey)
}, yccAuthorizationDocumentIdKey)
if err != nil {
return err
}
@@ -353,19 +371,19 @@ func (m *defaultAuthorizationDocumentModel) Trans(ctx context.Context, fn func(c
func (m *defaultAuthorizationDocumentModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultAuthorizationDocumentModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
hmAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, id)
func (m *defaultAuthorizationDocumentModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccAuthorizationDocumentIdKey := fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmAuthorizationDocumentIdKey)
}, yccAuthorizationDocumentIdKey)
return err
}
func (m *defaultAuthorizationDocumentModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmAuthorizationDocumentIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccAuthorizationDocumentIdPrefix, primary)
}
func (m *defaultAuthorizationDocumentModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", authorizationDocumentRows, m.table)

View File

@@ -8,36 +8,37 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
exampleFieldNames = builder.RawFieldNames(&Example{})
exampleRows = strings.Join(exampleFieldNames, ",")
exampleRowsExpectAutoSet = strings.Join(stringx.Remove(exampleFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
exampleRowsExpectAutoSet = strings.Join(stringx.Remove(exampleFieldNames, "`create_time`", "`update_time`"), ",")
exampleRowsWithPlaceHolder = strings.Join(stringx.Remove(exampleFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmExampleIdPrefix = "cache:ycc:example:id:"
cacheHmExampleApiIdPrefix = "cache:ycc:example:apiId:"
cacheHmExampleFeatureIdPrefix = "cache:ycc:example:featureId:"
cacheYccExampleIdPrefix = "cache:ycc:example:id:"
cacheYccExampleApiIdPrefix = "cache:ycc:example:apiId:"
cacheYccExampleFeatureIdPrefix = "cache:ycc:example:featureId:"
)
type (
exampleModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Example) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Example, error)
FindOne(ctx context.Context, id string) (*Example, error)
FindOneByApiId(ctx context.Context, apiId string) (*Example, error)
FindOneByFeatureId(ctx context.Context, featureId int64) (*Example, error)
FindOneByFeatureId(ctx context.Context, featureId string) (*Example, error)
Update(ctx context.Context, session sqlx.Session, data *Example) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Example) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -50,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Example, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Example, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Example, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultExampleModel struct {
@@ -59,15 +60,17 @@ type (
}
Example struct {
Id int64 `db:"id"` // 主键ID
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态
Version int64 `db:"version"` // 版本号
ApiId string `db:"api_id"` // API标识
FeatureId int64 `db:"feature_id"` // 关联feature表的ID
Content string `db:"content"` // 内容
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态
Version int64 `db:"version"` // 版本号
ApiId string `db:"api_id"` // API标识
FeatureId string `db:"feature_id"`
Content string `db:"content"` // 内容
ProductIdUuid sql.NullString `db:"product_id_uuid"`
FeatureIdUuid sql.NullString `db:"feature_id_uuid"`
}
)
@@ -80,22 +83,39 @@ func newExampleModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultExampleModel
func (m *defaultExampleModel) Insert(ctx context.Context, session sqlx.Session, data *Example) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmExampleApiIdKey := fmt.Sprintf("%s%v", cacheHmExampleApiIdPrefix, data.ApiId)
hmExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheHmExampleFeatureIdPrefix, data.FeatureId)
hmExampleIdKey := fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, data.Id)
m.insertUUID(data)
yccExampleApiIdKey := fmt.Sprintf("%s%v", cacheYccExampleApiIdPrefix, data.ApiId)
yccExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheYccExampleFeatureIdPrefix, data.FeatureId)
yccExampleIdKey := fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, data.Id)
return 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, exampleRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, exampleRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.FeatureId, data.Content)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.FeatureId, data.Content, data.ProductIdUuid, data.FeatureIdUuid)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.FeatureId, data.Content)
}, hmExampleApiIdKey, hmExampleFeatureIdKey, hmExampleIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.FeatureId, data.Content, data.ProductIdUuid, data.FeatureIdUuid)
}, yccExampleApiIdKey, yccExampleFeatureIdKey, yccExampleIdKey)
}
func (m *defaultExampleModel) insertUUID(data *Example) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultExampleModel) FindOne(ctx context.Context, id int64) (*Example, error) {
hmExampleIdKey := fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, id)
func (m *defaultExampleModel) FindOne(ctx context.Context, id string) (*Example, error) {
yccExampleIdKey := fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, id)
var resp Example
err := m.QueryRowCtx(ctx, &resp, hmExampleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccExampleIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", exampleRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -110,9 +130,9 @@ func (m *defaultExampleModel) FindOne(ctx context.Context, id int64) (*Example,
}
func (m *defaultExampleModel) FindOneByApiId(ctx context.Context, apiId string) (*Example, error) {
hmExampleApiIdKey := fmt.Sprintf("%s%v", cacheHmExampleApiIdPrefix, apiId)
yccExampleApiIdKey := fmt.Sprintf("%s%v", cacheYccExampleApiIdPrefix, apiId)
var resp Example
err := m.QueryRowIndexCtx(ctx, &resp, hmExampleApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccExampleApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `api_id` = ? and del_state = ? limit 1", exampleRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, apiId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -129,10 +149,10 @@ func (m *defaultExampleModel) FindOneByApiId(ctx context.Context, apiId string)
}
}
func (m *defaultExampleModel) FindOneByFeatureId(ctx context.Context, featureId int64) (*Example, error) {
hmExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheHmExampleFeatureIdPrefix, featureId)
func (m *defaultExampleModel) FindOneByFeatureId(ctx context.Context, featureId string) (*Example, error) {
yccExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheYccExampleFeatureIdPrefix, featureId)
var resp Example
err := m.QueryRowIndexCtx(ctx, &resp, hmExampleFeatureIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccExampleFeatureIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `feature_id` = ? and del_state = ? limit 1", exampleRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, featureId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -154,16 +174,16 @@ func (m *defaultExampleModel) Update(ctx context.Context, session sqlx.Session,
if err != nil {
return nil, err
}
hmExampleApiIdKey := fmt.Sprintf("%s%v", cacheHmExampleApiIdPrefix, data.ApiId)
hmExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheHmExampleFeatureIdPrefix, data.FeatureId)
hmExampleIdKey := fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, data.Id)
yccExampleApiIdKey := fmt.Sprintf("%s%v", cacheYccExampleApiIdPrefix, data.ApiId)
yccExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheYccExampleFeatureIdPrefix, data.FeatureId)
yccExampleIdKey := fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, data.Id)
return 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, exampleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.Id)
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.ProductIdUuid, newData.FeatureIdUuid, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.Id)
}, hmExampleApiIdKey, hmExampleFeatureIdKey, hmExampleIdKey)
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.ProductIdUuid, newData.FeatureIdUuid, newData.Id)
}, yccExampleApiIdKey, yccExampleFeatureIdKey, yccExampleIdKey)
}
func (m *defaultExampleModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Example) error {
@@ -178,16 +198,16 @@ func (m *defaultExampleModel) UpdateWithVersion(ctx context.Context, session sql
if err != nil {
return err
}
hmExampleApiIdKey := fmt.Sprintf("%s%v", cacheHmExampleApiIdPrefix, data.ApiId)
hmExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheHmExampleFeatureIdPrefix, data.FeatureId)
hmExampleIdKey := fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, data.Id)
yccExampleApiIdKey := fmt.Sprintf("%s%v", cacheYccExampleApiIdPrefix, data.ApiId)
yccExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheYccExampleFeatureIdPrefix, data.FeatureId)
yccExampleIdKey := fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, exampleRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.Id, oldVersion)
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.ProductIdUuid, newData.FeatureIdUuid, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.Id, oldVersion)
}, hmExampleApiIdKey, hmExampleFeatureIdKey, hmExampleIdKey)
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.FeatureId, newData.Content, newData.ProductIdUuid, newData.FeatureIdUuid, newData.Id, oldVersion)
}, yccExampleApiIdKey, yccExampleFeatureIdKey, yccExampleIdKey)
if err != nil {
return err
}
@@ -404,26 +424,26 @@ func (m *defaultExampleModel) Trans(ctx context.Context, fn func(ctx context.Con
func (m *defaultExampleModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultExampleModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultExampleModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmExampleApiIdKey := fmt.Sprintf("%s%v", cacheHmExampleApiIdPrefix, data.ApiId)
hmExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheHmExampleFeatureIdPrefix, data.FeatureId)
hmExampleIdKey := fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, id)
yccExampleApiIdKey := fmt.Sprintf("%s%v", cacheYccExampleApiIdPrefix, data.ApiId)
yccExampleFeatureIdKey := fmt.Sprintf("%s%v", cacheYccExampleFeatureIdPrefix, data.FeatureId)
yccExampleIdKey := fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmExampleApiIdKey, hmExampleFeatureIdKey, hmExampleIdKey)
}, yccExampleApiIdKey, yccExampleFeatureIdKey, yccExampleIdKey)
return err
}
func (m *defaultExampleModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmExampleIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccExampleIdPrefix, primary)
}
func (m *defaultExampleModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", exampleRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
featureFieldNames = builder.RawFieldNames(&Feature{})
featureRows = strings.Join(featureFieldNames, ",")
featureRowsExpectAutoSet = strings.Join(stringx.Remove(featureFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
featureRowsExpectAutoSet = strings.Join(stringx.Remove(featureFieldNames, "`create_time`", "`update_time`"), ",")
featureRowsWithPlaceHolder = strings.Join(stringx.Remove(featureFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmFeatureIdPrefix = "cache:ycc:feature:id:"
cacheHmFeatureApiIdPrefix = "cache:ycc:feature:apiId:"
cacheYccFeatureIdPrefix = "cache:ycc:feature:id:"
cacheYccFeatureApiIdPrefix = "cache:ycc:feature:apiId:"
)
type (
featureModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Feature) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Feature, error)
FindOne(ctx context.Context, id string) (*Feature, error)
FindOneByApiId(ctx context.Context, apiId string) (*Feature, error)
Update(ctx context.Context, session sqlx.Session, data *Feature) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Feature) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Feature, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Feature, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Feature, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultFeatureModel struct {
@@ -57,7 +58,7 @@ type (
}
Feature struct {
Id int64 `db:"id"` // 主键ID
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -77,21 +78,38 @@ func newFeatureModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultFeatureModel
func (m *defaultFeatureModel) Insert(ctx context.Context, session sqlx.Session, data *Feature) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmFeatureApiIdKey := fmt.Sprintf("%s%v", cacheHmFeatureApiIdPrefix, data.ApiId)
hmFeatureIdKey := fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, data.Id)
m.insertUUID(data)
yccFeatureApiIdKey := fmt.Sprintf("%s%v", cacheYccFeatureApiIdPrefix, data.ApiId)
yccFeatureIdKey := fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, data.Id)
return 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, featureRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?)", m.table, featureRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.Name)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.Name)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.Name)
}, hmFeatureApiIdKey, hmFeatureIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ApiId, data.Name)
}, yccFeatureApiIdKey, yccFeatureIdKey)
}
func (m *defaultFeatureModel) insertUUID(data *Feature) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultFeatureModel) FindOne(ctx context.Context, id int64) (*Feature, error) {
hmFeatureIdKey := fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, id)
func (m *defaultFeatureModel) FindOne(ctx context.Context, id string) (*Feature, error) {
yccFeatureIdKey := fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, id)
var resp Feature
err := m.QueryRowCtx(ctx, &resp, hmFeatureIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccFeatureIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", featureRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -106,9 +124,9 @@ func (m *defaultFeatureModel) FindOne(ctx context.Context, id int64) (*Feature,
}
func (m *defaultFeatureModel) FindOneByApiId(ctx context.Context, apiId string) (*Feature, error) {
hmFeatureApiIdKey := fmt.Sprintf("%s%v", cacheHmFeatureApiIdPrefix, apiId)
yccFeatureApiIdKey := fmt.Sprintf("%s%v", cacheYccFeatureApiIdPrefix, apiId)
var resp Feature
err := m.QueryRowIndexCtx(ctx, &resp, hmFeatureApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccFeatureApiIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `api_id` = ? and del_state = ? limit 1", featureRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, apiId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -130,15 +148,15 @@ func (m *defaultFeatureModel) Update(ctx context.Context, session sqlx.Session,
if err != nil {
return nil, err
}
hmFeatureApiIdKey := fmt.Sprintf("%s%v", cacheHmFeatureApiIdPrefix, data.ApiId)
hmFeatureIdKey := fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, data.Id)
yccFeatureApiIdKey := fmt.Sprintf("%s%v", cacheYccFeatureApiIdPrefix, data.ApiId)
yccFeatureIdKey := fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, data.Id)
return 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, featureRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.Name, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.Name, newData.Id)
}, hmFeatureApiIdKey, hmFeatureIdKey)
}, yccFeatureApiIdKey, yccFeatureIdKey)
}
func (m *defaultFeatureModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Feature) error {
@@ -153,15 +171,15 @@ func (m *defaultFeatureModel) UpdateWithVersion(ctx context.Context, session sql
if err != nil {
return err
}
hmFeatureApiIdKey := fmt.Sprintf("%s%v", cacheHmFeatureApiIdPrefix, data.ApiId)
hmFeatureIdKey := fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, data.Id)
yccFeatureApiIdKey := fmt.Sprintf("%s%v", cacheYccFeatureApiIdPrefix, data.ApiId)
yccFeatureIdKey := fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, featureRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.Name, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ApiId, newData.Name, newData.Id, oldVersion)
}, hmFeatureApiIdKey, hmFeatureIdKey)
}, yccFeatureApiIdKey, yccFeatureIdKey)
if err != nil {
return err
}
@@ -378,25 +396,25 @@ func (m *defaultFeatureModel) Trans(ctx context.Context, fn func(ctx context.Con
func (m *defaultFeatureModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultFeatureModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultFeatureModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmFeatureApiIdKey := fmt.Sprintf("%s%v", cacheHmFeatureApiIdPrefix, data.ApiId)
hmFeatureIdKey := fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, id)
yccFeatureApiIdKey := fmt.Sprintf("%s%v", cacheYccFeatureApiIdPrefix, data.ApiId)
yccFeatureIdKey := fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmFeatureApiIdKey, hmFeatureIdKey)
}, yccFeatureApiIdKey, yccFeatureIdKey)
return err
}
func (m *defaultFeatureModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmFeatureIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccFeatureIdPrefix, primary)
}
func (m *defaultFeatureModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", featureRows, m.table)

View File

@@ -8,32 +8,33 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
globalNotificationsFieldNames = builder.RawFieldNames(&GlobalNotifications{})
globalNotificationsRows = strings.Join(globalNotificationsFieldNames, ",")
globalNotificationsRowsExpectAutoSet = strings.Join(stringx.Remove(globalNotificationsFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
globalNotificationsRowsExpectAutoSet = strings.Join(stringx.Remove(globalNotificationsFieldNames, "`create_time`", "`update_time`"), ",")
globalNotificationsRowsWithPlaceHolder = strings.Join(stringx.Remove(globalNotificationsFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmGlobalNotificationsIdPrefix = "cache:ycc:globalNotifications:id:"
cacheYccGlobalNotificationsIdPrefix = "cache:ycc:globalNotifications:id:"
)
type (
globalNotificationsModel interface {
Insert(ctx context.Context, session sqlx.Session, data *GlobalNotifications) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*GlobalNotifications, error)
FindOne(ctx context.Context, id string) (*GlobalNotifications, error)
Update(ctx context.Context, session sqlx.Session, data *GlobalNotifications) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *GlobalNotifications) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -46,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*GlobalNotifications, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*GlobalNotifications, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*GlobalNotifications, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultGlobalNotificationsModel struct {
@@ -55,7 +56,7 @@ type (
}
GlobalNotifications struct {
Id int64 `db:"id"`
Id string `db:"id"`
Title string `db:"title"`
Content string `db:"content"`
NotificationPage string `db:"notification_page"`
@@ -81,20 +82,37 @@ func newGlobalNotificationsModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultG
func (m *defaultGlobalNotificationsModel) Insert(ctx context.Context, session sqlx.Session, data *GlobalNotifications) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, data.Id)
m.insertUUID(data)
yccGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, data.Id)
return 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, globalNotificationsRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, globalNotificationsRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime)
return session.ExecCtx(ctx, query, data.Id, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime)
}
return conn.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime)
}, hmGlobalNotificationsIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime)
}, yccGlobalNotificationsIdKey)
}
func (m *defaultGlobalNotificationsModel) insertUUID(data *GlobalNotifications) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultGlobalNotificationsModel) FindOne(ctx context.Context, id int64) (*GlobalNotifications, error) {
hmGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, id)
func (m *defaultGlobalNotificationsModel) FindOne(ctx context.Context, id string) (*GlobalNotifications, error) {
yccGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, id)
var resp GlobalNotifications
err := m.QueryRowCtx(ctx, &resp, hmGlobalNotificationsIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccGlobalNotificationsIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", globalNotificationsRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -109,14 +127,14 @@ func (m *defaultGlobalNotificationsModel) FindOne(ctx context.Context, id int64)
}
func (m *defaultGlobalNotificationsModel) Update(ctx context.Context, session sqlx.Session, data *GlobalNotifications) (sql.Result, error) {
hmGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, data.Id)
yccGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, data.Id)
return 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, globalNotificationsRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime, data.Id)
}
return conn.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime, data.Id)
}, hmGlobalNotificationsIdKey)
}, yccGlobalNotificationsIdKey)
}
func (m *defaultGlobalNotificationsModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *GlobalNotifications) error {
@@ -127,14 +145,14 @@ func (m *defaultGlobalNotificationsModel) UpdateWithVersion(ctx context.Context,
var sqlResult sql.Result
var err error
hmGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, data.Id)
yccGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, globalNotificationsRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime, data.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, data.Title, data.Content, data.NotificationPage, data.StartDate, data.EndDate, data.StartTime, data.EndTime, data.Status, data.DelState, data.Version, data.DeleteTime, data.Id, oldVersion)
}, hmGlobalNotificationsIdKey)
}, yccGlobalNotificationsIdKey)
if err != nil {
return err
}
@@ -351,19 +369,19 @@ func (m *defaultGlobalNotificationsModel) Trans(ctx context.Context, fn func(ctx
func (m *defaultGlobalNotificationsModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultGlobalNotificationsModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
hmGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, id)
func (m *defaultGlobalNotificationsModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccGlobalNotificationsIdKey := fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmGlobalNotificationsIdKey)
}, yccGlobalNotificationsIdKey)
return err
}
func (m *defaultGlobalNotificationsModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmGlobalNotificationsIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccGlobalNotificationsIdPrefix, primary)
}
func (m *defaultGlobalNotificationsModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", globalNotificationsRows, m.table)

View File

@@ -1,6 +1,10 @@
package model
import (
"context"
"database/sql"
"fmt"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
@@ -12,6 +16,7 @@ type (
// and implement the added methods in customOrderModel.
OrderModel interface {
orderModel
UpdateUserIDWithSession(ctx context.Context, session sqlx.Session, sourceUserID, targetUserID string) error
}
customOrderModel struct {
@@ -25,3 +30,26 @@ func NewOrderModel(conn sqlx.SqlConn, c cache.CacheConf) OrderModel {
defaultOrderModel: newOrderModel(conn, c),
}
}
func (m *customOrderModel) UpdateUserIDWithSession(ctx context.Context, session sqlx.Session, sourceUserID, targetUserID string) error {
builder := m.defaultOrderModel.SelectBuilder().Where("user_id = ?", sourceUserID)
rows, err := m.defaultOrderModel.FindAll(ctx, builder, "")
if err != nil {
return err
}
keys := make([]string, 0, len(rows)*2)
for _, r := range rows {
keys = append(keys, fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, r.Id))
keys = append(keys, fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, r.OrderNo))
}
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("UPDATE %s SET user_id = ? WHERE user_id = ?", m.defaultOrderModel.tableName())
if session != nil {
return session.ExecCtx(ctx, query, targetUserID, sourceUserID)
}
return conn.ExecCtx(ctx, query, targetUserID, sourceUserID)
}, keys...)
return err
}

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
orderFieldNames = builder.RawFieldNames(&Order{})
orderRows = strings.Join(orderFieldNames, ",")
orderRowsExpectAutoSet = strings.Join(stringx.Remove(orderFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
orderRowsExpectAutoSet = strings.Join(stringx.Remove(orderFieldNames, "`create_time`", "`update_time`"), ",")
orderRowsWithPlaceHolder = strings.Join(stringx.Remove(orderFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmOrderIdPrefix = "cache:ycc:order:id:"
cacheHmOrderOrderNoPrefix = "cache:ycc:order:orderNo:"
cacheYccOrderIdPrefix = "cache:ycc:order:id:"
cacheYccOrderOrderNoPrefix = "cache:ycc:order:orderNo:"
)
type (
orderModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Order) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Order, error)
FindOne(ctx context.Context, id string) (*Order, error)
FindOneByOrderNo(ctx context.Context, orderNo string) (*Order, error)
Update(ctx context.Context, session sqlx.Session, data *Order) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Order) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Order, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Order, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Order, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultOrderModel struct {
@@ -57,10 +58,10 @@ type (
}
Order struct {
Id int64 `db:"id"` // 主键ID
OrderNo string `db:"order_no"` // 自生成的订单号
UserId int64 `db:"user_id"` // 用户ID
ProductId int64 `db:"product_id"` // 产品ID软关联到产品表
Id string `db:"id"`
OrderNo string `db:"order_no"` // 自生成的订单号
UserId string `db:"user_id"`
ProductId string `db:"product_id"`
PaymentPlatform string `db:"payment_platform"` // 支付平台(支付宝、微信、苹果内购、其他)
PaymentScene string `db:"payment_scene"` // 支付场景App、H5、微信小程序、公众号
PlatformOrderId sql.NullString `db:"platform_order_id"` // 支付平台订单号
@@ -86,21 +87,38 @@ func newOrderModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultOrderModel {
func (m *defaultOrderModel) Insert(ctx context.Context, session sqlx.Session, data *Order) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmOrderIdKey := fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, data.Id)
hmOrderOrderNoKey := fmt.Sprintf("%s%v", cacheHmOrderOrderNoPrefix, data.OrderNo)
m.insertUUID(data)
yccOrderIdKey := fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, data.Id)
yccOrderOrderNoKey := fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, data.OrderNo)
return 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, orderRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, orderRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.OrderNo, data.UserId, data.ProductId, data.PaymentPlatform, data.PaymentScene, data.PlatformOrderId, data.Amount, data.Status, data.DelState, data.Version, data.PayTime, data.RefundTime, data.CloseTime, data.DeleteTime)
return session.ExecCtx(ctx, query, data.Id, data.OrderNo, data.UserId, data.ProductId, data.PaymentPlatform, data.PaymentScene, data.PlatformOrderId, data.Amount, data.Status, data.DelState, data.Version, data.PayTime, data.RefundTime, data.CloseTime, data.DeleteTime)
}
return conn.ExecCtx(ctx, query, data.OrderNo, data.UserId, data.ProductId, data.PaymentPlatform, data.PaymentScene, data.PlatformOrderId, data.Amount, data.Status, data.DelState, data.Version, data.PayTime, data.RefundTime, data.CloseTime, data.DeleteTime)
}, hmOrderIdKey, hmOrderOrderNoKey)
return conn.ExecCtx(ctx, query, data.Id, data.OrderNo, data.UserId, data.ProductId, data.PaymentPlatform, data.PaymentScene, data.PlatformOrderId, data.Amount, data.Status, data.DelState, data.Version, data.PayTime, data.RefundTime, data.CloseTime, data.DeleteTime)
}, yccOrderIdKey, yccOrderOrderNoKey)
}
func (m *defaultOrderModel) insertUUID(data *Order) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultOrderModel) FindOne(ctx context.Context, id int64) (*Order, error) {
hmOrderIdKey := fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, id)
func (m *defaultOrderModel) FindOne(ctx context.Context, id string) (*Order, error) {
yccOrderIdKey := fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, id)
var resp Order
err := m.QueryRowCtx(ctx, &resp, hmOrderIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccOrderIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", orderRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -115,9 +133,9 @@ func (m *defaultOrderModel) FindOne(ctx context.Context, id int64) (*Order, erro
}
func (m *defaultOrderModel) FindOneByOrderNo(ctx context.Context, orderNo string) (*Order, error) {
hmOrderOrderNoKey := fmt.Sprintf("%s%v", cacheHmOrderOrderNoPrefix, orderNo)
yccOrderOrderNoKey := fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, orderNo)
var resp Order
err := m.QueryRowIndexCtx(ctx, &resp, hmOrderOrderNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccOrderOrderNoKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `order_no` = ? and del_state = ? limit 1", orderRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, orderNo, globalkey.DelStateNo); err != nil {
return nil, err
@@ -139,15 +157,15 @@ func (m *defaultOrderModel) Update(ctx context.Context, session sqlx.Session, ne
if err != nil {
return nil, err
}
hmOrderIdKey := fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, data.Id)
hmOrderOrderNoKey := fmt.Sprintf("%s%v", cacheHmOrderOrderNoPrefix, data.OrderNo)
yccOrderIdKey := fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, data.Id)
yccOrderOrderNoKey := fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, data.OrderNo)
return 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, orderRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.OrderNo, newData.UserId, newData.ProductId, newData.PaymentPlatform, newData.PaymentScene, newData.PlatformOrderId, newData.Amount, newData.Status, newData.DelState, newData.Version, newData.PayTime, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.OrderNo, newData.UserId, newData.ProductId, newData.PaymentPlatform, newData.PaymentScene, newData.PlatformOrderId, newData.Amount, newData.Status, newData.DelState, newData.Version, newData.PayTime, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id)
}, hmOrderIdKey, hmOrderOrderNoKey)
}, yccOrderIdKey, yccOrderOrderNoKey)
}
func (m *defaultOrderModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Order) error {
@@ -162,15 +180,15 @@ func (m *defaultOrderModel) UpdateWithVersion(ctx context.Context, session sqlx.
if err != nil {
return err
}
hmOrderIdKey := fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, data.Id)
hmOrderOrderNoKey := fmt.Sprintf("%s%v", cacheHmOrderOrderNoPrefix, data.OrderNo)
yccOrderIdKey := fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, data.Id)
yccOrderOrderNoKey := fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, data.OrderNo)
sqlResult, 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` = ? and version = ? ", m.table, orderRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.OrderNo, newData.UserId, newData.ProductId, newData.PaymentPlatform, newData.PaymentScene, newData.PlatformOrderId, newData.Amount, newData.Status, newData.DelState, newData.Version, newData.PayTime, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.OrderNo, newData.UserId, newData.ProductId, newData.PaymentPlatform, newData.PaymentScene, newData.PlatformOrderId, newData.Amount, newData.Status, newData.DelState, newData.Version, newData.PayTime, newData.RefundTime, newData.CloseTime, newData.DeleteTime, newData.Id, oldVersion)
}, hmOrderIdKey, hmOrderOrderNoKey)
}, yccOrderIdKey, yccOrderOrderNoKey)
if err != nil {
return err
}
@@ -387,25 +405,25 @@ func (m *defaultOrderModel) Trans(ctx context.Context, fn func(ctx context.Conte
func (m *defaultOrderModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultOrderModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultOrderModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmOrderIdKey := fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, id)
hmOrderOrderNoKey := fmt.Sprintf("%s%v", cacheHmOrderOrderNoPrefix, data.OrderNo)
yccOrderIdKey := fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, id)
yccOrderOrderNoKey := fmt.Sprintf("%s%v", cacheYccOrderOrderNoPrefix, data.OrderNo)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmOrderIdKey, hmOrderOrderNoKey)
}, yccOrderIdKey, yccOrderOrderNoKey)
return err
}
func (m *defaultOrderModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmOrderIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccOrderIdPrefix, primary)
}
func (m *defaultOrderModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", orderRows, m.table)

View File

@@ -8,23 +8,24 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
orderRefundFieldNames = builder.RawFieldNames(&OrderRefund{})
orderRefundRows = strings.Join(orderRefundFieldNames, ",")
orderRefundRowsExpectAutoSet = strings.Join(stringx.Remove(orderRefundFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
orderRefundRowsExpectAutoSet = strings.Join(stringx.Remove(orderRefundFieldNames, "`create_time`", "`update_time`"), ",")
orderRefundRowsWithPlaceHolder = strings.Join(stringx.Remove(orderRefundFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheYccOrderRefundIdPrefix = "cache:ycc:orderRefund:id:"
@@ -35,7 +36,7 @@ var (
type (
orderRefundModel interface {
Insert(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*OrderRefund, error)
FindOne(ctx context.Context, id string) (*OrderRefund, error)
FindOneByPlatformRefundId(ctx context.Context, platformRefundId sql.NullString) (*OrderRefund, error)
FindOneByRefundNo(ctx context.Context, refundNo string) (*OrderRefund, error)
Update(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error)
@@ -50,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*OrderRefund, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*OrderRefund, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*OrderRefund, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultOrderRefundModel struct {
@@ -59,11 +60,11 @@ type (
}
OrderRefund struct {
Id int64 `db:"id"` // 主键ID
RefundNo string `db:"refund_no"` // 退款单号
OrderId int64 `db:"order_id"` // 关联的订单ID
UserId int64 `db:"user_id"` // 用户ID
ProductId int64 `db:"product_id"` // 产品ID
Id string `db:"id"`
RefundNo string `db:"refund_no"` // 退款单号
OrderId string `db:"order_id"`
UserId string `db:"user_id"`
ProductId string `db:"product_id"`
PlatformRefundId sql.NullString `db:"platform_refund_id"` // 支付平台退款单号
RefundAmount float64 `db:"refund_amount"` // 退款金额
RefundReason sql.NullString `db:"refund_reason"` // 退款原因
@@ -87,19 +88,36 @@ func newOrderRefundModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultOrderRefu
func (m *defaultOrderRefundModel) Insert(ctx context.Context, session sqlx.Session, data *OrderRefund) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
m.insertUUID(data)
yccOrderRefundIdKey := fmt.Sprintf("%s%v", cacheYccOrderRefundIdPrefix, data.Id)
yccOrderRefundPlatformRefundIdKey := fmt.Sprintf("%s%v", cacheYccOrderRefundPlatformRefundIdPrefix, data.PlatformRefundId)
yccOrderRefundRefundNoKey := fmt.Sprintf("%s%v", cacheYccOrderRefundRefundNoPrefix, data.RefundNo)
return 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, orderRefundRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, orderRefundRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime)
return session.ExecCtx(ctx, query, data.Id, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime)
}
return conn.ExecCtx(ctx, query, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime)
return conn.ExecCtx(ctx, query, data.Id, data.RefundNo, data.OrderId, data.UserId, data.ProductId, data.PlatformRefundId, data.RefundAmount, data.RefundReason, data.Status, data.DelState, data.Version, data.RefundTime, data.CloseTime, data.DeleteTime)
}, yccOrderRefundIdKey, yccOrderRefundPlatformRefundIdKey, yccOrderRefundRefundNoKey)
}
func (m *defaultOrderRefundModel) insertUUID(data *OrderRefund) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultOrderRefundModel) FindOne(ctx context.Context, id int64) (*OrderRefund, error) {
func (m *defaultOrderRefundModel) FindOne(ctx context.Context, id string) (*OrderRefund, error) {
yccOrderRefundIdKey := fmt.Sprintf("%s%v", cacheYccOrderRefundIdPrefix, id)
var resp OrderRefund
err := m.QueryRowCtx(ctx, &resp, yccOrderRefundIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
@@ -411,7 +429,7 @@ func (m *defaultOrderRefundModel) Trans(ctx context.Context, fn func(ctx context
func (m *defaultOrderRefundModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultOrderRefundModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultOrderRefundModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err

View File

@@ -8,34 +8,33 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
productFeatureFieldNames = builder.RawFieldNames(&ProductFeature{})
productFeatureRows = strings.Join(productFeatureFieldNames, ",")
productFeatureRowsExpectAutoSet = strings.Join(stringx.Remove(productFeatureFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
productFeatureRowsExpectAutoSet = strings.Join(stringx.Remove(productFeatureFieldNames, "`create_time`", "`update_time`"), ",")
productFeatureRowsWithPlaceHolder = strings.Join(stringx.Remove(productFeatureFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmProductFeatureIdPrefix = "cache:ycc:productFeature:id:"
cacheHmProductFeatureProductIdFeatureIdPrefix = "cache:ycc:productFeature:productId:featureId:"
cacheYccProductFeatureIdPrefix = "cache:ycc:productFeature:id:"
)
type (
productFeatureModel interface {
Insert(ctx context.Context, session sqlx.Session, data *ProductFeature) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*ProductFeature, error)
FindOneByProductIdFeatureId(ctx context.Context, productId int64, featureId int64) (*ProductFeature, error)
FindOne(ctx context.Context, id string) (*ProductFeature, error)
Update(ctx context.Context, session sqlx.Session, data *ProductFeature) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *ProductFeature) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*ProductFeature, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*ProductFeature, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*ProductFeature, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultProductFeatureModel struct {
@@ -57,17 +56,19 @@ type (
}
ProductFeature struct {
Id int64 `db:"id"` // 主键ID
ProductId int64 `db:"product_id"` // 产品ID
FeatureId int64 `db:"feature_id"` // 功能ID
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态
Version int64 `db:"version"` // 版本号
Sort int64 `db:"sort"`
IsImportant int64 `db:"is_important"`
Enable int64 `db:"enable"`
Id string `db:"id"`
ProductId string `db:"product_id"`
FeatureId string `db:"feature_id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态
Version int64 `db:"version"` // 版本号
Sort int64 `db:"sort"`
IsImportant int64 `db:"is_important"`
Enable int64 `db:"enable"`
ProductIdUuid sql.NullString `db:"product_id_uuid"`
FeatureIdUuid sql.NullString `db:"feature_id_uuid"`
}
)
@@ -80,21 +81,37 @@ func newProductFeatureModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultProduc
func (m *defaultProductFeatureModel) Insert(ctx context.Context, session sqlx.Session, data *ProductFeature) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmProductFeatureIdKey := fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, data.Id)
hmProductFeatureProductIdFeatureIdKey := fmt.Sprintf("%s%v:%v", cacheHmProductFeatureProductIdFeatureIdPrefix, data.ProductId, data.FeatureId)
m.insertUUID(data)
yccProductFeatureIdKey := fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, data.Id)
return 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, productFeatureRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, productFeatureRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable)
return session.ExecCtx(ctx, query, data.Id, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid)
}
return conn.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable)
}, hmProductFeatureIdKey, hmProductFeatureProductIdFeatureIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid)
}, yccProductFeatureIdKey)
}
func (m *defaultProductFeatureModel) insertUUID(data *ProductFeature) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultProductFeatureModel) FindOne(ctx context.Context, id int64) (*ProductFeature, error) {
hmProductFeatureIdKey := fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, id)
func (m *defaultProductFeatureModel) FindOne(ctx context.Context, id string) (*ProductFeature, error) {
yccProductFeatureIdKey := fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, id)
var resp ProductFeature
err := m.QueryRowCtx(ctx, &resp, hmProductFeatureIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccProductFeatureIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", productFeatureRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -108,63 +125,33 @@ func (m *defaultProductFeatureModel) FindOne(ctx context.Context, id int64) (*Pr
}
}
func (m *defaultProductFeatureModel) FindOneByProductIdFeatureId(ctx context.Context, productId int64, featureId int64) (*ProductFeature, error) {
hmProductFeatureProductIdFeatureIdKey := fmt.Sprintf("%s%v:%v", cacheHmProductFeatureProductIdFeatureIdPrefix, productId, featureId)
var resp ProductFeature
err := m.QueryRowIndexCtx(ctx, &resp, hmProductFeatureProductIdFeatureIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `product_id` = ? and `feature_id` = ? and del_state = ? limit 1", productFeatureRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, productId, featureId, globalkey.DelStateNo); 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 *defaultProductFeatureModel) Update(ctx context.Context, session sqlx.Session, newData *ProductFeature) (sql.Result, error) {
data, err := m.FindOne(ctx, newData.Id)
if err != nil {
return nil, err
}
hmProductFeatureIdKey := fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, data.Id)
hmProductFeatureProductIdFeatureIdKey := fmt.Sprintf("%s%v:%v", cacheHmProductFeatureProductIdFeatureIdPrefix, data.ProductId, data.FeatureId)
func (m *defaultProductFeatureModel) Update(ctx context.Context, session sqlx.Session, data *ProductFeature) (sql.Result, error) {
yccProductFeatureIdKey := fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, data.Id)
return 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, productFeatureRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.ProductId, newData.FeatureId, newData.DeleteTime, newData.DelState, newData.Version, newData.Sort, newData.IsImportant, newData.Enable, newData.Id)
return session.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid, data.Id)
}
return conn.ExecCtx(ctx, query, newData.ProductId, newData.FeatureId, newData.DeleteTime, newData.DelState, newData.Version, newData.Sort, newData.IsImportant, newData.Enable, newData.Id)
}, hmProductFeatureIdKey, hmProductFeatureProductIdFeatureIdKey)
return conn.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid, data.Id)
}, yccProductFeatureIdKey)
}
func (m *defaultProductFeatureModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *ProductFeature) error {
func (m *defaultProductFeatureModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *ProductFeature) error {
oldVersion := newData.Version
newData.Version += 1
oldVersion := data.Version
data.Version += 1
var sqlResult sql.Result
var err error
data, err := m.FindOne(ctx, newData.Id)
if err != nil {
return err
}
hmProductFeatureIdKey := fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, data.Id)
hmProductFeatureProductIdFeatureIdKey := fmt.Sprintf("%s%v:%v", cacheHmProductFeatureProductIdFeatureIdPrefix, data.ProductId, data.FeatureId)
yccProductFeatureIdKey := fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, productFeatureRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.ProductId, newData.FeatureId, newData.DeleteTime, newData.DelState, newData.Version, newData.Sort, newData.IsImportant, newData.Enable, newData.Id, oldVersion)
return session.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid, data.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.ProductId, newData.FeatureId, newData.DeleteTime, newData.DelState, newData.Version, newData.Sort, newData.IsImportant, newData.Enable, newData.Id, oldVersion)
}, hmProductFeatureIdKey, hmProductFeatureProductIdFeatureIdKey)
return conn.ExecCtx(ctx, query, data.ProductId, data.FeatureId, data.DeleteTime, data.DelState, data.Version, data.Sort, data.IsImportant, data.Enable, data.ProductIdUuid, data.FeatureIdUuid, data.Id, oldVersion)
}, yccProductFeatureIdKey)
if err != nil {
return err
}
@@ -381,25 +368,19 @@ func (m *defaultProductFeatureModel) Trans(ctx context.Context, fn func(ctx cont
func (m *defaultProductFeatureModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultProductFeatureModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmProductFeatureIdKey := fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, id)
hmProductFeatureProductIdFeatureIdKey := fmt.Sprintf("%s%v:%v", cacheHmProductFeatureProductIdFeatureIdPrefix, data.ProductId, data.FeatureId)
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
func (m *defaultProductFeatureModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccProductFeatureIdKey := fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmProductFeatureIdKey, hmProductFeatureProductIdFeatureIdKey)
}, yccProductFeatureIdKey)
return err
}
func (m *defaultProductFeatureModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmProductFeatureIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccProductFeatureIdPrefix, primary)
}
func (m *defaultProductFeatureModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", productFeatureRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
productFieldNames = builder.RawFieldNames(&Product{})
productRows = strings.Join(productFieldNames, ",")
productRowsExpectAutoSet = strings.Join(stringx.Remove(productFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
productRowsExpectAutoSet = strings.Join(stringx.Remove(productFieldNames, "`create_time`", "`update_time`"), ",")
productRowsWithPlaceHolder = strings.Join(stringx.Remove(productFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmProductIdPrefix = "cache:ycc:product:id:"
cacheHmProductProductEnPrefix = "cache:ycc:product:productEn:"
cacheYccProductIdPrefix = "cache:ycc:product:id:"
cacheYccProductProductEnPrefix = "cache:ycc:product:productEn:"
)
type (
productModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Product) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Product, error)
FindOne(ctx context.Context, id string) (*Product, error)
FindOneByProductEn(ctx context.Context, productEn string) (*Product, error)
Update(ctx context.Context, session sqlx.Session, data *Product) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Product) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Product, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Product, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Product, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultProductModel struct {
@@ -57,7 +58,7 @@ type (
}
Product struct {
Id int64 `db:"id"` // 主键ID
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -81,21 +82,38 @@ func newProductModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultProductModel
func (m *defaultProductModel) Insert(ctx context.Context, session sqlx.Session, data *Product) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmProductIdKey := fmt.Sprintf("%s%v", cacheHmProductIdPrefix, data.Id)
hmProductProductEnKey := fmt.Sprintf("%s%v", cacheHmProductProductEnPrefix, data.ProductEn)
m.insertUUID(data)
yccProductIdKey := fmt.Sprintf("%s%v", cacheYccProductIdPrefix, data.Id)
yccProductProductEnKey := fmt.Sprintf("%s%v", cacheYccProductProductEnPrefix, data.ProductEn)
return 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, productRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, productRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ProductName, data.ProductEn, data.Description, data.Notes, data.CostPrice, data.SellPrice)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ProductName, data.ProductEn, data.Description, data.Notes, data.CostPrice, data.SellPrice)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ProductName, data.ProductEn, data.Description, data.Notes, data.CostPrice, data.SellPrice)
}, hmProductIdKey, hmProductProductEnKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ProductName, data.ProductEn, data.Description, data.Notes, data.CostPrice, data.SellPrice)
}, yccProductIdKey, yccProductProductEnKey)
}
func (m *defaultProductModel) insertUUID(data *Product) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultProductModel) FindOne(ctx context.Context, id int64) (*Product, error) {
hmProductIdKey := fmt.Sprintf("%s%v", cacheHmProductIdPrefix, id)
func (m *defaultProductModel) FindOne(ctx context.Context, id string) (*Product, error) {
yccProductIdKey := fmt.Sprintf("%s%v", cacheYccProductIdPrefix, id)
var resp Product
err := m.QueryRowCtx(ctx, &resp, hmProductIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccProductIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", productRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -110,9 +128,9 @@ func (m *defaultProductModel) FindOne(ctx context.Context, id int64) (*Product,
}
func (m *defaultProductModel) FindOneByProductEn(ctx context.Context, productEn string) (*Product, error) {
hmProductProductEnKey := fmt.Sprintf("%s%v", cacheHmProductProductEnPrefix, productEn)
yccProductProductEnKey := fmt.Sprintf("%s%v", cacheYccProductProductEnPrefix, productEn)
var resp Product
err := m.QueryRowIndexCtx(ctx, &resp, hmProductProductEnKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccProductProductEnKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `product_en` = ? and del_state = ? limit 1", productRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, productEn, globalkey.DelStateNo); err != nil {
return nil, err
@@ -134,15 +152,15 @@ func (m *defaultProductModel) Update(ctx context.Context, session sqlx.Session,
if err != nil {
return nil, err
}
hmProductIdKey := fmt.Sprintf("%s%v", cacheHmProductIdPrefix, data.Id)
hmProductProductEnKey := fmt.Sprintf("%s%v", cacheHmProductProductEnPrefix, data.ProductEn)
yccProductIdKey := fmt.Sprintf("%s%v", cacheYccProductIdPrefix, data.Id)
yccProductProductEnKey := fmt.Sprintf("%s%v", cacheYccProductProductEnPrefix, data.ProductEn)
return 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, productRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ProductName, newData.ProductEn, newData.Description, newData.Notes, newData.CostPrice, newData.SellPrice, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ProductName, newData.ProductEn, newData.Description, newData.Notes, newData.CostPrice, newData.SellPrice, newData.Id)
}, hmProductIdKey, hmProductProductEnKey)
}, yccProductIdKey, yccProductProductEnKey)
}
func (m *defaultProductModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Product) error {
@@ -157,15 +175,15 @@ func (m *defaultProductModel) UpdateWithVersion(ctx context.Context, session sql
if err != nil {
return err
}
hmProductIdKey := fmt.Sprintf("%s%v", cacheHmProductIdPrefix, data.Id)
hmProductProductEnKey := fmt.Sprintf("%s%v", cacheHmProductProductEnPrefix, data.ProductEn)
yccProductIdKey := fmt.Sprintf("%s%v", cacheYccProductIdPrefix, data.Id)
yccProductProductEnKey := fmt.Sprintf("%s%v", cacheYccProductProductEnPrefix, data.ProductEn)
sqlResult, 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` = ? and version = ? ", m.table, productRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ProductName, newData.ProductEn, newData.Description, newData.Notes, newData.CostPrice, newData.SellPrice, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ProductName, newData.ProductEn, newData.Description, newData.Notes, newData.CostPrice, newData.SellPrice, newData.Id, oldVersion)
}, hmProductIdKey, hmProductProductEnKey)
}, yccProductIdKey, yccProductProductEnKey)
if err != nil {
return err
}
@@ -382,25 +400,25 @@ func (m *defaultProductModel) Trans(ctx context.Context, fn func(ctx context.Con
func (m *defaultProductModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultProductModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultProductModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmProductIdKey := fmt.Sprintf("%s%v", cacheHmProductIdPrefix, id)
hmProductProductEnKey := fmt.Sprintf("%s%v", cacheHmProductProductEnPrefix, data.ProductEn)
yccProductIdKey := fmt.Sprintf("%s%v", cacheYccProductIdPrefix, id)
yccProductProductEnKey := fmt.Sprintf("%s%v", cacheYccProductProductEnPrefix, data.ProductEn)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmProductIdKey, hmProductProductEnKey)
}, yccProductIdKey, yccProductProductEnKey)
return err
}
func (m *defaultProductModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmProductIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccProductIdPrefix, primary)
}
func (m *defaultProductModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", productRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
queryCleanupConfigFieldNames = builder.RawFieldNames(&QueryCleanupConfig{})
queryCleanupConfigRows = strings.Join(queryCleanupConfigFieldNames, ",")
queryCleanupConfigRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupConfigFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
queryCleanupConfigRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupConfigFieldNames, "`create_time`", "`update_time`"), ",")
queryCleanupConfigRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupConfigFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmQueryCleanupConfigIdPrefix = "cache:ycc:queryCleanupConfig:id:"
cacheHmQueryCleanupConfigConfigKeyPrefix = "cache:ycc:queryCleanupConfig:configKey:"
cacheYccQueryCleanupConfigIdPrefix = "cache:ycc:queryCleanupConfig:id:"
cacheYccQueryCleanupConfigConfigKeyPrefix = "cache:ycc:queryCleanupConfig:configKey:"
)
type (
queryCleanupConfigModel interface {
Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*QueryCleanupConfig, error)
FindOne(ctx context.Context, id string) (*QueryCleanupConfig, error)
FindOneByConfigKey(ctx context.Context, configKey string) (*QueryCleanupConfig, error)
Update(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupConfig, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupConfig, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupConfig, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultQueryCleanupConfigModel struct {
@@ -57,7 +58,7 @@ type (
}
QueryCleanupConfig struct {
Id int64 `db:"id"` // 主键ID
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -79,21 +80,38 @@ func newQueryCleanupConfigModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQu
func (m *defaultQueryCleanupConfigModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupConfig) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
hmQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, data.Id)
m.insertUUID(data)
yccQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
yccQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, data.Id)
return 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, queryCleanupConfigRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupConfigRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status)
}, hmQueryCleanupConfigConfigKeyKey, hmQueryCleanupConfigIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.ConfigKey, data.ConfigValue, data.ConfigDesc, data.Status)
}, yccQueryCleanupConfigConfigKeyKey, yccQueryCleanupConfigIdKey)
}
func (m *defaultQueryCleanupConfigModel) insertUUID(data *QueryCleanupConfig) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultQueryCleanupConfigModel) FindOne(ctx context.Context, id int64) (*QueryCleanupConfig, error) {
hmQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, id)
func (m *defaultQueryCleanupConfigModel) FindOne(ctx context.Context, id string) (*QueryCleanupConfig, error) {
yccQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, id)
var resp QueryCleanupConfig
err := m.QueryRowCtx(ctx, &resp, hmQueryCleanupConfigIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccQueryCleanupConfigIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -108,9 +126,9 @@ func (m *defaultQueryCleanupConfigModel) FindOne(ctx context.Context, id int64)
}
func (m *defaultQueryCleanupConfigModel) FindOneByConfigKey(ctx context.Context, configKey string) (*QueryCleanupConfig, error) {
hmQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigConfigKeyPrefix, configKey)
yccQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigConfigKeyPrefix, configKey)
var resp QueryCleanupConfig
err := m.QueryRowIndexCtx(ctx, &resp, hmQueryCleanupConfigConfigKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccQueryCleanupConfigConfigKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `config_key` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, configKey, globalkey.DelStateNo); err != nil {
return nil, err
@@ -132,15 +150,15 @@ func (m *defaultQueryCleanupConfigModel) Update(ctx context.Context, session sql
if err != nil {
return nil, err
}
hmQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
hmQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, data.Id)
yccQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
yccQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, data.Id)
return 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, queryCleanupConfigRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id)
}, hmQueryCleanupConfigConfigKeyKey, hmQueryCleanupConfigIdKey)
}, yccQueryCleanupConfigConfigKeyKey, yccQueryCleanupConfigIdKey)
}
func (m *defaultQueryCleanupConfigModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *QueryCleanupConfig) error {
@@ -155,15 +173,15 @@ func (m *defaultQueryCleanupConfigModel) UpdateWithVersion(ctx context.Context,
if err != nil {
return err
}
hmQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
hmQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, data.Id)
yccQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
yccQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, queryCleanupConfigRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.ConfigKey, newData.ConfigValue, newData.ConfigDesc, newData.Status, newData.Id, oldVersion)
}, hmQueryCleanupConfigConfigKeyKey, hmQueryCleanupConfigIdKey)
}, yccQueryCleanupConfigConfigKeyKey, yccQueryCleanupConfigIdKey)
if err != nil {
return err
}
@@ -380,25 +398,25 @@ func (m *defaultQueryCleanupConfigModel) Trans(ctx context.Context, fn func(ctx
func (m *defaultQueryCleanupConfigModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultQueryCleanupConfigModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultQueryCleanupConfigModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
hmQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, id)
yccQueryCleanupConfigConfigKeyKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigConfigKeyPrefix, data.ConfigKey)
yccQueryCleanupConfigIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmQueryCleanupConfigConfigKeyKey, hmQueryCleanupConfigIdKey)
}, yccQueryCleanupConfigConfigKeyKey, yccQueryCleanupConfigIdKey)
return err
}
func (m *defaultQueryCleanupConfigModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmQueryCleanupConfigIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccQueryCleanupConfigIdPrefix, primary)
}
func (m *defaultQueryCleanupConfigModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupConfigRows, m.table)

View File

@@ -8,32 +8,33 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
queryCleanupDetailFieldNames = builder.RawFieldNames(&QueryCleanupDetail{})
queryCleanupDetailRows = strings.Join(queryCleanupDetailFieldNames, ",")
queryCleanupDetailRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupDetailFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
queryCleanupDetailRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupDetailFieldNames, "`create_time`", "`update_time`"), ",")
queryCleanupDetailRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupDetailFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmQueryCleanupDetailIdPrefix = "cache:ycc:queryCleanupDetail:id:"
cacheYccQueryCleanupDetailIdPrefix = "cache:ycc:queryCleanupDetail:id:"
)
type (
queryCleanupDetailModel interface {
Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*QueryCleanupDetail, error)
FindOne(ctx context.Context, id string) (*QueryCleanupDetail, error)
Update(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -46,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupDetail, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupDetail, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupDetail, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultQueryCleanupDetailModel struct {
@@ -55,17 +56,17 @@ type (
}
QueryCleanupDetail struct {
Id int64 `db:"id"` // 主键ID
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0-未删除1-已删除
Version int64 `db:"version"` // 版本号
CleanupLogId int64 `db:"cleanup_log_id"` // 关联的清理日志ID
QueryId int64 `db:"query_id"` // 被清理的查询记录ID
OrderId int64 `db:"order_id"` // 关联的订单ID
UserId int64 `db:"user_id"` // 关联的用户ID
ProductId int64 `db:"product_id"` // 关联的产品ID
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"` // 删除状态0-未删除1-已删除
Version int64 `db:"version"` // 版本号
CleanupLogId string `db:"cleanup_log_id"`
QueryId string `db:"query_id"`
OrderId string `db:"order_id"`
UserId string `db:"user_id"`
ProductId string `db:"product_id"`
QueryState string `db:"query_state"` // 查询状态
CreateTimeOld time.Time `db:"create_time_old"` // 原记录创建时间
}
@@ -80,20 +81,37 @@ func newQueryCleanupDetailModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQu
func (m *defaultQueryCleanupDetailModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, data.Id)
m.insertUUID(data)
yccQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, data.Id)
return 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, queryCleanupDetailRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupDetailRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld)
}, hmQueryCleanupDetailIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld)
}, yccQueryCleanupDetailIdKey)
}
func (m *defaultQueryCleanupDetailModel) insertUUID(data *QueryCleanupDetail) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultQueryCleanupDetailModel) FindOne(ctx context.Context, id int64) (*QueryCleanupDetail, error) {
hmQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, id)
func (m *defaultQueryCleanupDetailModel) FindOne(ctx context.Context, id string) (*QueryCleanupDetail, error) {
yccQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, id)
var resp QueryCleanupDetail
err := m.QueryRowCtx(ctx, &resp, hmQueryCleanupDetailIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccQueryCleanupDetailIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupDetailRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -108,14 +126,14 @@ func (m *defaultQueryCleanupDetailModel) FindOne(ctx context.Context, id int64)
}
func (m *defaultQueryCleanupDetailModel) Update(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) (sql.Result, error) {
hmQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, data.Id)
yccQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, data.Id)
return 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, queryCleanupDetailRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id)
}, hmQueryCleanupDetailIdKey)
}, yccQueryCleanupDetailIdKey)
}
func (m *defaultQueryCleanupDetailModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupDetail) error {
@@ -126,14 +144,14 @@ func (m *defaultQueryCleanupDetailModel) UpdateWithVersion(ctx context.Context,
var sqlResult sql.Result
var err error
hmQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, data.Id)
yccQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, queryCleanupDetailRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupLogId, data.QueryId, data.OrderId, data.UserId, data.ProductId, data.QueryState, data.CreateTimeOld, data.Id, oldVersion)
}, hmQueryCleanupDetailIdKey)
}, yccQueryCleanupDetailIdKey)
if err != nil {
return err
}
@@ -350,19 +368,19 @@ func (m *defaultQueryCleanupDetailModel) Trans(ctx context.Context, fn func(ctx
func (m *defaultQueryCleanupDetailModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultQueryCleanupDetailModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
hmQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, id)
func (m *defaultQueryCleanupDetailModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccQueryCleanupDetailIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmQueryCleanupDetailIdKey)
}, yccQueryCleanupDetailIdKey)
return err
}
func (m *defaultQueryCleanupDetailModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmQueryCleanupDetailIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccQueryCleanupDetailIdPrefix, primary)
}
func (m *defaultQueryCleanupDetailModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupDetailRows, m.table)

View File

@@ -8,32 +8,33 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
queryCleanupLogFieldNames = builder.RawFieldNames(&QueryCleanupLog{})
queryCleanupLogRows = strings.Join(queryCleanupLogFieldNames, ",")
queryCleanupLogRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupLogFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
queryCleanupLogRowsExpectAutoSet = strings.Join(stringx.Remove(queryCleanupLogFieldNames, "`create_time`", "`update_time`"), ",")
queryCleanupLogRowsWithPlaceHolder = strings.Join(stringx.Remove(queryCleanupLogFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmQueryCleanupLogIdPrefix = "cache:ycc:queryCleanupLog:id:"
cacheYccQueryCleanupLogIdPrefix = "cache:ycc:queryCleanupLog:id:"
)
type (
queryCleanupLogModel interface {
Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*QueryCleanupLog, error)
FindOne(ctx context.Context, id string) (*QueryCleanupLog, error)
Update(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -46,7 +47,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*QueryCleanupLog, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*QueryCleanupLog, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*QueryCleanupLog, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultQueryCleanupLogModel struct {
@@ -55,7 +56,7 @@ type (
}
QueryCleanupLog struct {
Id int64 `db:"id"` // 主键ID
Id string `db:"id"`
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -79,20 +80,37 @@ func newQueryCleanupLogModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQuery
func (m *defaultQueryCleanupLogModel) Insert(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, data.Id)
m.insertUUID(data)
yccQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, data.Id)
return 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, queryCleanupLogRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryCleanupLogRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark)
}, hmQueryCleanupLogIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark)
}, yccQueryCleanupLogIdKey)
}
func (m *defaultQueryCleanupLogModel) insertUUID(data *QueryCleanupLog) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultQueryCleanupLogModel) FindOne(ctx context.Context, id int64) (*QueryCleanupLog, error) {
hmQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, id)
func (m *defaultQueryCleanupLogModel) FindOne(ctx context.Context, id string) (*QueryCleanupLog, error) {
yccQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, id)
var resp QueryCleanupLog
err := m.QueryRowCtx(ctx, &resp, hmQueryCleanupLogIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccQueryCleanupLogIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupLogRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -107,14 +125,14 @@ func (m *defaultQueryCleanupLogModel) FindOne(ctx context.Context, id int64) (*Q
}
func (m *defaultQueryCleanupLogModel) Update(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) (sql.Result, error) {
hmQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, data.Id)
yccQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, data.Id)
return 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, queryCleanupLogRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id)
}, hmQueryCleanupLogIdKey)
}, yccQueryCleanupLogIdKey)
}
func (m *defaultQueryCleanupLogModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, data *QueryCleanupLog) error {
@@ -125,14 +143,14 @@ func (m *defaultQueryCleanupLogModel) UpdateWithVersion(ctx context.Context, ses
var sqlResult sql.Result
var err error
hmQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, data.Id)
yccQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, data.Id)
sqlResult, 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` = ? and version = ? ", m.table, queryCleanupLogRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.CleanupTime, data.CleanupBefore, data.AffectedRows, data.Status, data.ErrorMsg, data.Remark, data.Id, oldVersion)
}, hmQueryCleanupLogIdKey)
}, yccQueryCleanupLogIdKey)
if err != nil {
return err
}
@@ -349,19 +367,19 @@ func (m *defaultQueryCleanupLogModel) Trans(ctx context.Context, fn func(ctx con
func (m *defaultQueryCleanupLogModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultQueryCleanupLogModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
hmQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, id)
func (m *defaultQueryCleanupLogModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
yccQueryCleanupLogIdKey := fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmQueryCleanupLogIdKey)
}, yccQueryCleanupLogIdKey)
return err
}
func (m *defaultQueryCleanupLogModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmQueryCleanupLogIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccQueryCleanupLogIdPrefix, primary)
}
func (m *defaultQueryCleanupLogModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryCleanupLogRows, m.table)

View File

@@ -1,24 +1,26 @@
package model
import (
"context"
"ycc-server/common/globalkey"
"fmt"
"time"
"context"
"database/sql"
"ycc-server/common/globalkey"
"fmt"
"time"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stores/cache"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
var _ QueryModel = (*customQueryModel)(nil)
type (
// QueryModel is an interface to be customized, add more methods here,
// and implement the added methods in customQueryModel.
QueryModel interface {
queryModel
DeleteBefore(ctx context.Context, before time.Time) (int64, error)
}
// QueryModel is an interface to be customized, add more methods here,
// and implement the added methods in customQueryModel.
QueryModel interface {
queryModel
DeleteBefore(ctx context.Context, before time.Time) (int64, error)
UpdateUserIDWithSession(ctx context.Context, session sqlx.Session, sourceUserID, targetUserID string) error
}
customQueryModel struct {
*defaultQueryModel
@@ -27,9 +29,9 @@ type (
// NewQueryModel returns a model for the database table.
func NewQueryModel(conn sqlx.SqlConn, c cache.CacheConf) QueryModel {
return &customQueryModel{
defaultQueryModel: newQueryModel(conn, c),
}
return &customQueryModel{
defaultQueryModel: newQueryModel(conn, c),
}
}
func (m *customQueryModel) DeleteBefore(ctx context.Context, before time.Time) (int64, error) {
@@ -58,3 +60,26 @@ func (m *customQueryModel) DeleteBefore(ctx context.Context, before time.Time) (
return affected, nil
}
func (m *customQueryModel) UpdateUserIDWithSession(ctx context.Context, session sqlx.Session, sourceUserID, targetUserID string) error {
builder := m.defaultQueryModel.SelectBuilder().Where("user_id = ?", sourceUserID)
rows, err := m.defaultQueryModel.FindAll(ctx, builder, "")
if err != nil {
return err
}
keys := make([]string, 0, len(rows)*2)
for _, r := range rows {
keys = append(keys, fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, r.Id))
keys = append(keys, fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, r.OrderId))
}
_, err = m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
query := fmt.Sprintf("UPDATE %s SET user_id = ? WHERE user_id = ?", m.defaultQueryModel.tableName())
if session != nil {
return session.ExecCtx(ctx, query, targetUserID, sourceUserID)
}
return conn.ExecCtx(ctx, query, targetUserID, sourceUserID)
}, keys...)
return err
}

View File

@@ -8,34 +8,35 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
queryFieldNames = builder.RawFieldNames(&Query{})
queryRows = strings.Join(queryFieldNames, ",")
queryRowsExpectAutoSet = strings.Join(stringx.Remove(queryFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
queryRowsExpectAutoSet = strings.Join(stringx.Remove(queryFieldNames, "`create_time`", "`update_time`"), ",")
queryRowsWithPlaceHolder = strings.Join(stringx.Remove(queryFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmQueryIdPrefix = "cache:ycc:query:id:"
cacheHmQueryOrderIdPrefix = "cache:ycc:query:orderId:"
cacheYccQueryIdPrefix = "cache:ycc:query:id:"
cacheYccQueryOrderIdPrefix = "cache:ycc:query:orderId:"
)
type (
queryModel interface {
Insert(ctx context.Context, session sqlx.Session, data *Query) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*Query, error)
FindOneByOrderId(ctx context.Context, orderId int64) (*Query, error)
FindOne(ctx context.Context, id string) (*Query, error)
FindOneByOrderId(ctx context.Context, orderId string) (*Query, error)
Update(ctx context.Context, session sqlx.Session, data *Query) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *Query) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*Query, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*Query, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*Query, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultQueryModel struct {
@@ -57,10 +58,10 @@ type (
}
Query struct {
Id int64 `db:"id"` // 主键ID
OrderId int64 `db:"order_id"` // 订单ID软关联到订单表
UserId int64 `db:"user_id"` // 用户ID直接关联到用户
ProductId int64 `db:"product_id"` // 产品ID直接关联到产品
Id string `db:"id"`
OrderId string `db:"order_id"`
UserId string `db:"user_id"`
ProductId string `db:"product_id"`
QueryParams string `db:"query_params"` // 查询params数据
QueryData sql.NullString `db:"query_data"` // 查询结果数据
QueryState string `db:"query_state"` // 查询状态
@@ -81,21 +82,38 @@ func newQueryModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultQueryModel {
func (m *defaultQueryModel) Insert(ctx context.Context, session sqlx.Session, data *Query) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmQueryIdKey := fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, data.Id)
hmQueryOrderIdKey := fmt.Sprintf("%s%v", cacheHmQueryOrderIdPrefix, data.OrderId)
m.insertUUID(data)
yccQueryIdKey := fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, data.Id)
yccQueryOrderIdKey := fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, data.OrderId)
return 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, queryRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, queryRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.OrderId, data.UserId, data.ProductId, data.QueryParams, data.QueryData, data.QueryState, data.DelState, data.Version, data.DeleteTime)
return session.ExecCtx(ctx, query, data.Id, data.OrderId, data.UserId, data.ProductId, data.QueryParams, data.QueryData, data.QueryState, data.DelState, data.Version, data.DeleteTime)
}
return conn.ExecCtx(ctx, query, data.OrderId, data.UserId, data.ProductId, data.QueryParams, data.QueryData, data.QueryState, data.DelState, data.Version, data.DeleteTime)
}, hmQueryIdKey, hmQueryOrderIdKey)
return conn.ExecCtx(ctx, query, data.Id, data.OrderId, data.UserId, data.ProductId, data.QueryParams, data.QueryData, data.QueryState, data.DelState, data.Version, data.DeleteTime)
}, yccQueryIdKey, yccQueryOrderIdKey)
}
func (m *defaultQueryModel) insertUUID(data *Query) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultQueryModel) FindOne(ctx context.Context, id int64) (*Query, error) {
hmQueryIdKey := fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, id)
func (m *defaultQueryModel) FindOne(ctx context.Context, id string) (*Query, error) {
yccQueryIdKey := fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, id)
var resp Query
err := m.QueryRowCtx(ctx, &resp, hmQueryIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccQueryIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -109,10 +127,10 @@ func (m *defaultQueryModel) FindOne(ctx context.Context, id int64) (*Query, erro
}
}
func (m *defaultQueryModel) FindOneByOrderId(ctx context.Context, orderId int64) (*Query, error) {
hmQueryOrderIdKey := fmt.Sprintf("%s%v", cacheHmQueryOrderIdPrefix, orderId)
func (m *defaultQueryModel) FindOneByOrderId(ctx context.Context, orderId string) (*Query, error) {
yccQueryOrderIdKey := fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, orderId)
var resp Query
err := m.QueryRowIndexCtx(ctx, &resp, hmQueryOrderIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccQueryOrderIdKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `order_id` = ? and del_state = ? limit 1", queryRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, orderId, globalkey.DelStateNo); err != nil {
return nil, err
@@ -134,15 +152,15 @@ func (m *defaultQueryModel) Update(ctx context.Context, session sqlx.Session, ne
if err != nil {
return nil, err
}
hmQueryIdKey := fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, data.Id)
hmQueryOrderIdKey := fmt.Sprintf("%s%v", cacheHmQueryOrderIdPrefix, data.OrderId)
yccQueryIdKey := fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, data.Id)
yccQueryOrderIdKey := fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, data.OrderId)
return 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, queryRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.OrderId, newData.UserId, newData.ProductId, newData.QueryParams, newData.QueryData, newData.QueryState, newData.DelState, newData.Version, newData.DeleteTime, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.OrderId, newData.UserId, newData.ProductId, newData.QueryParams, newData.QueryData, newData.QueryState, newData.DelState, newData.Version, newData.DeleteTime, newData.Id)
}, hmQueryIdKey, hmQueryOrderIdKey)
}, yccQueryIdKey, yccQueryOrderIdKey)
}
func (m *defaultQueryModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *Query) error {
@@ -157,15 +175,15 @@ func (m *defaultQueryModel) UpdateWithVersion(ctx context.Context, session sqlx.
if err != nil {
return err
}
hmQueryIdKey := fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, data.Id)
hmQueryOrderIdKey := fmt.Sprintf("%s%v", cacheHmQueryOrderIdPrefix, data.OrderId)
yccQueryIdKey := fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, data.Id)
yccQueryOrderIdKey := fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, data.OrderId)
sqlResult, 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` = ? and version = ? ", m.table, queryRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.OrderId, newData.UserId, newData.ProductId, newData.QueryParams, newData.QueryData, newData.QueryState, newData.DelState, newData.Version, newData.DeleteTime, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.OrderId, newData.UserId, newData.ProductId, newData.QueryParams, newData.QueryData, newData.QueryState, newData.DelState, newData.Version, newData.DeleteTime, newData.Id, oldVersion)
}, hmQueryIdKey, hmQueryOrderIdKey)
}, yccQueryIdKey, yccQueryOrderIdKey)
if err != nil {
return err
}
@@ -382,25 +400,25 @@ func (m *defaultQueryModel) Trans(ctx context.Context, fn func(ctx context.Conte
func (m *defaultQueryModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultQueryModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultQueryModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmQueryIdKey := fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, id)
hmQueryOrderIdKey := fmt.Sprintf("%s%v", cacheHmQueryOrderIdPrefix, data.OrderId)
yccQueryIdKey := fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, id)
yccQueryOrderIdKey := fmt.Sprintf("%s%v", cacheYccQueryOrderIdPrefix, data.OrderId)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmQueryIdKey, hmQueryOrderIdKey)
}, yccQueryIdKey, yccQueryOrderIdKey)
return err
}
func (m *defaultQueryModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmQueryIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccQueryIdPrefix, primary)
}
func (m *defaultQueryModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", queryRows, m.table)

View File

@@ -8,36 +8,37 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
userAuthFieldNames = builder.RawFieldNames(&UserAuth{})
userAuthRows = strings.Join(userAuthFieldNames, ",")
userAuthRowsExpectAutoSet = strings.Join(stringx.Remove(userAuthFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
userAuthRowsExpectAutoSet = strings.Join(stringx.Remove(userAuthFieldNames, "`create_time`", "`update_time`"), ",")
userAuthRowsWithPlaceHolder = strings.Join(stringx.Remove(userAuthFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmUserAuthIdPrefix = "cache:ycc:userAuth:id:"
cacheHmUserAuthAuthTypeAuthKeyPrefix = "cache:ycc:userAuth:authType:authKey:"
cacheHmUserAuthUserIdAuthTypePrefix = "cache:ycc:userAuth:userId:authType:"
cacheYccUserAuthIdPrefix = "cache:ycc:userAuth:id:"
cacheYccUserAuthAuthTypeAuthKeyPrefix = "cache:ycc:userAuth:authType:authKey:"
cacheYccUserAuthUserIdAuthTypePrefix = "cache:ycc:userAuth:userId:authType:"
)
type (
userAuthModel interface {
Insert(ctx context.Context, session sqlx.Session, data *UserAuth) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*UserAuth, error)
FindOne(ctx context.Context, id string) (*UserAuth, error)
FindOneByAuthTypeAuthKey(ctx context.Context, authType string, authKey string) (*UserAuth, error)
FindOneByUserIdAuthType(ctx context.Context, userId int64, authType string) (*UserAuth, error)
FindOneByUserIdAuthType(ctx context.Context, userId string, authType string) (*UserAuth, error)
Update(ctx context.Context, session sqlx.Session, data *UserAuth) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *UserAuth) error
Trans(ctx context.Context, fn func(context context.Context, session sqlx.Session) error) error
@@ -50,7 +51,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*UserAuth, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*UserAuth, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*UserAuth, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultUserAuthModel struct {
@@ -59,13 +60,13 @@ type (
}
UserAuth struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
DelState int64 `db:"del_state"`
Version int64 `db:"version"` // 版本号
UserId int64 `db:"user_id"`
UserId string `db:"user_id"`
AuthKey string `db:"auth_key"` // 平台唯一id
AuthType string `db:"auth_type"` // 平台类型
}
@@ -80,22 +81,39 @@ func newUserAuthModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultUserAuthMode
func (m *defaultUserAuthModel) Insert(ctx context.Context, session sqlx.Session, data *UserAuth) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
hmUserAuthIdKey := fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, data.Id)
hmUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
m.insertUUID(data)
yccUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
yccUserAuthIdKey := fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, data.Id)
yccUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
return 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, userAuthRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?)", m.table, userAuthRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.AuthKey, data.AuthType)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.UserId, data.AuthKey, data.AuthType)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.UserId, data.AuthKey, data.AuthType)
}, hmUserAuthAuthTypeAuthKeyKey, hmUserAuthIdKey, hmUserAuthUserIdAuthTypeKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.UserId, data.AuthKey, data.AuthType)
}, yccUserAuthAuthTypeAuthKeyKey, yccUserAuthIdKey, yccUserAuthUserIdAuthTypeKey)
}
func (m *defaultUserAuthModel) insertUUID(data *UserAuth) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultUserAuthModel) FindOne(ctx context.Context, id int64) (*UserAuth, error) {
hmUserAuthIdKey := fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, id)
func (m *defaultUserAuthModel) FindOne(ctx context.Context, id string) (*UserAuth, error) {
yccUserAuthIdKey := fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, id)
var resp UserAuth
err := m.QueryRowCtx(ctx, &resp, hmUserAuthIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccUserAuthIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", userAuthRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -110,9 +128,9 @@ func (m *defaultUserAuthModel) FindOne(ctx context.Context, id int64) (*UserAuth
}
func (m *defaultUserAuthModel) FindOneByAuthTypeAuthKey(ctx context.Context, authType string, authKey string) (*UserAuth, error) {
hmUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthAuthTypeAuthKeyPrefix, authType, authKey)
yccUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthAuthTypeAuthKeyPrefix, authType, authKey)
var resp UserAuth
err := m.QueryRowIndexCtx(ctx, &resp, hmUserAuthAuthTypeAuthKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccUserAuthAuthTypeAuthKeyKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `auth_type` = ? and `auth_key` = ? and del_state = ? limit 1", userAuthRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, authType, authKey, globalkey.DelStateNo); err != nil {
return nil, err
@@ -129,10 +147,10 @@ func (m *defaultUserAuthModel) FindOneByAuthTypeAuthKey(ctx context.Context, aut
}
}
func (m *defaultUserAuthModel) FindOneByUserIdAuthType(ctx context.Context, userId int64, authType string) (*UserAuth, error) {
hmUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthUserIdAuthTypePrefix, userId, authType)
func (m *defaultUserAuthModel) FindOneByUserIdAuthType(ctx context.Context, userId string, authType string) (*UserAuth, error) {
yccUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthUserIdAuthTypePrefix, userId, authType)
var resp UserAuth
err := m.QueryRowIndexCtx(ctx, &resp, hmUserAuthUserIdAuthTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccUserAuthUserIdAuthTypeKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `user_id` = ? and `auth_type` = ? and del_state = ? limit 1", userAuthRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, userId, authType, globalkey.DelStateNo); err != nil {
return nil, err
@@ -154,16 +172,16 @@ func (m *defaultUserAuthModel) Update(ctx context.Context, session sqlx.Session,
if err != nil {
return nil, err
}
hmUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
hmUserAuthIdKey := fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, data.Id)
hmUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
yccUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
yccUserAuthIdKey := fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, data.Id)
yccUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
return 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, userAuthRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.AuthKey, newData.AuthType, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.AuthKey, newData.AuthType, newData.Id)
}, hmUserAuthAuthTypeAuthKeyKey, hmUserAuthIdKey, hmUserAuthUserIdAuthTypeKey)
}, yccUserAuthAuthTypeAuthKeyKey, yccUserAuthIdKey, yccUserAuthUserIdAuthTypeKey)
}
func (m *defaultUserAuthModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *UserAuth) error {
@@ -178,16 +196,16 @@ func (m *defaultUserAuthModel) UpdateWithVersion(ctx context.Context, session sq
if err != nil {
return err
}
hmUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
hmUserAuthIdKey := fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, data.Id)
hmUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
yccUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
yccUserAuthIdKey := fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, data.Id)
yccUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
sqlResult, 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` = ? and version = ? ", m.table, userAuthRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.AuthKey, newData.AuthType, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.UserId, newData.AuthKey, newData.AuthType, newData.Id, oldVersion)
}, hmUserAuthAuthTypeAuthKeyKey, hmUserAuthIdKey, hmUserAuthUserIdAuthTypeKey)
}, yccUserAuthAuthTypeAuthKeyKey, yccUserAuthIdKey, yccUserAuthUserIdAuthTypeKey)
if err != nil {
return err
}
@@ -404,26 +422,26 @@ func (m *defaultUserAuthModel) Trans(ctx context.Context, fn func(ctx context.Co
func (m *defaultUserAuthModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultUserAuthModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultUserAuthModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
hmUserAuthIdKey := fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, id)
hmUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheHmUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
yccUserAuthAuthTypeAuthKeyKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthAuthTypeAuthKeyPrefix, data.AuthType, data.AuthKey)
yccUserAuthIdKey := fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, id)
yccUserAuthUserIdAuthTypeKey := fmt.Sprintf("%s%v:%v", cacheYccUserAuthUserIdAuthTypePrefix, data.UserId, data.AuthType)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmUserAuthAuthTypeAuthKeyKey, hmUserAuthIdKey, hmUserAuthUserIdAuthTypeKey)
}, yccUserAuthAuthTypeAuthKeyKey, yccUserAuthIdKey, yccUserAuthUserIdAuthTypeKey)
return err
}
func (m *defaultUserAuthModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmUserAuthIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccUserAuthIdPrefix, primary)
}
func (m *defaultUserAuthModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", userAuthRows, m.table)

View File

@@ -8,33 +8,34 @@ import (
"fmt"
"strings"
"reflect"
"time"
"ycc-server/common/globalkey"
"github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/pkg/errors"
"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"
"ycc-server/common/globalkey"
)
var (
userFieldNames = builder.RawFieldNames(&User{})
userRows = strings.Join(userFieldNames, ",")
userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
userRowsExpectAutoSet = strings.Join(stringx.Remove(userFieldNames, "`create_time`", "`update_time`"), ",")
userRowsWithPlaceHolder = strings.Join(stringx.Remove(userFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
cacheHmUserIdPrefix = "cache:ycc:user:id:"
cacheHmUserMobilePrefix = "cache:ycc:user:mobile:"
cacheYccUserIdPrefix = "cache:ycc:user:id:"
cacheYccUserMobilePrefix = "cache:ycc:user:mobile:"
)
type (
userModel interface {
Insert(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*User, error)
FindOne(ctx context.Context, id string) (*User, error)
FindOneByMobile(ctx context.Context, mobile sql.NullString) (*User, error)
Update(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error)
UpdateWithVersion(ctx context.Context, session sqlx.Session, data *User) error
@@ -48,7 +49,7 @@ type (
FindPageListByPageWithTotal(ctx context.Context, rowBuilder squirrel.SelectBuilder, page, pageSize int64, orderBy string) ([]*User, int64, error)
FindPageListByIdDESC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMinId, pageSize int64) ([]*User, error)
FindPageListByIdASC(ctx context.Context, rowBuilder squirrel.SelectBuilder, preMaxId, pageSize int64) ([]*User, error)
Delete(ctx context.Context, session sqlx.Session, id int64) error
Delete(ctx context.Context, session sqlx.Session, id string) error
}
defaultUserModel struct {
@@ -57,7 +58,7 @@ type (
}
User struct {
Id int64 `db:"id"`
Id string `db:"id"`
CreateTime time.Time `db:"create_time"`
UpdateTime time.Time `db:"update_time"`
DeleteTime sql.NullTime `db:"delete_time"` // 删除时间
@@ -80,21 +81,38 @@ func newUserModel(conn sqlx.SqlConn, c cache.CacheConf) *defaultUserModel {
func (m *defaultUserModel) Insert(ctx context.Context, session sqlx.Session, data *User) (sql.Result, error) {
data.DelState = globalkey.DelStateNo
hmUserIdKey := fmt.Sprintf("%s%v", cacheHmUserIdPrefix, data.Id)
hmUserMobileKey := fmt.Sprintf("%s%v", cacheHmUserMobilePrefix, data.Mobile)
m.insertUUID(data)
yccUserIdKey := fmt.Sprintf("%s%v", cacheYccUserIdPrefix, data.Id)
yccUserMobileKey := fmt.Sprintf("%s%v", cacheYccUserMobilePrefix, data.Mobile)
return 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, userRowsExpectAutoSet)
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, userRowsExpectAutoSet)
if session != nil {
return session.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside)
return session.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside)
}
return conn.ExecCtx(ctx, query, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside)
}, hmUserIdKey, hmUserMobileKey)
return conn.ExecCtx(ctx, query, data.Id, data.DeleteTime, data.DelState, data.Version, data.Mobile, data.Password, data.Nickname, data.Info, data.Inside)
}, yccUserIdKey, yccUserMobileKey)
}
func (m *defaultUserModel) insertUUID(data *User) {
t := reflect.TypeOf(data).Elem()
v := reflect.ValueOf(data).Elem()
for i := 0; i < t.NumField(); i++ {
sf := t.Field(i)
if sf.Tag.Get("db") == "id" {
f := v.Field(i)
if f.IsValid() && f.CanSet() && f.Kind() == reflect.String {
if f.String() == "" {
f.SetString(uuid.NewString())
}
}
break
}
}
}
func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error) {
hmUserIdKey := fmt.Sprintf("%s%v", cacheHmUserIdPrefix, id)
func (m *defaultUserModel) FindOne(ctx context.Context, id string) (*User, error) {
yccUserIdKey := fmt.Sprintf("%s%v", cacheYccUserIdPrefix, id)
var resp User
err := m.QueryRowCtx(ctx, &resp, hmUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
err := m.QueryRowCtx(ctx, &resp, yccUserIdKey, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", userRows, m.table)
return conn.QueryRowCtx(ctx, v, query, id, globalkey.DelStateNo)
})
@@ -109,9 +127,9 @@ func (m *defaultUserModel) FindOne(ctx context.Context, id int64) (*User, error)
}
func (m *defaultUserModel) FindOneByMobile(ctx context.Context, mobile sql.NullString) (*User, error) {
hmUserMobileKey := fmt.Sprintf("%s%v", cacheHmUserMobilePrefix, mobile)
yccUserMobileKey := fmt.Sprintf("%s%v", cacheYccUserMobilePrefix, mobile)
var resp User
err := m.QueryRowIndexCtx(ctx, &resp, hmUserMobileKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
err := m.QueryRowIndexCtx(ctx, &resp, yccUserMobileKey, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v interface{}) (i interface{}, e error) {
query := fmt.Sprintf("select %s from %s where `mobile` = ? and del_state = ? limit 1", userRows, m.table)
if err := conn.QueryRowCtx(ctx, &resp, query, mobile, globalkey.DelStateNo); err != nil {
return nil, err
@@ -133,15 +151,15 @@ func (m *defaultUserModel) Update(ctx context.Context, session sqlx.Session, new
if err != nil {
return nil, err
}
hmUserIdKey := fmt.Sprintf("%s%v", cacheHmUserIdPrefix, data.Id)
hmUserMobileKey := fmt.Sprintf("%s%v", cacheHmUserMobilePrefix, data.Mobile)
yccUserIdKey := fmt.Sprintf("%s%v", cacheYccUserIdPrefix, data.Id)
yccUserMobileKey := fmt.Sprintf("%s%v", cacheYccUserMobilePrefix, data.Mobile)
return 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, userRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id)
}, hmUserIdKey, hmUserMobileKey)
}, yccUserIdKey, yccUserMobileKey)
}
func (m *defaultUserModel) UpdateWithVersion(ctx context.Context, session sqlx.Session, newData *User) error {
@@ -156,15 +174,15 @@ func (m *defaultUserModel) UpdateWithVersion(ctx context.Context, session sqlx.S
if err != nil {
return err
}
hmUserIdKey := fmt.Sprintf("%s%v", cacheHmUserIdPrefix, data.Id)
hmUserMobileKey := fmt.Sprintf("%s%v", cacheHmUserMobilePrefix, data.Mobile)
yccUserIdKey := fmt.Sprintf("%s%v", cacheYccUserIdPrefix, data.Id)
yccUserMobileKey := fmt.Sprintf("%s%v", cacheYccUserMobilePrefix, data.Mobile)
sqlResult, 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` = ? and version = ? ", m.table, userRowsWithPlaceHolder)
if session != nil {
return session.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id, oldVersion)
}
return conn.ExecCtx(ctx, query, newData.DeleteTime, newData.DelState, newData.Version, newData.Mobile, newData.Password, newData.Nickname, newData.Info, newData.Inside, newData.Id, oldVersion)
}, hmUserIdKey, hmUserMobileKey)
}, yccUserIdKey, yccUserMobileKey)
if err != nil {
return err
}
@@ -381,25 +399,25 @@ func (m *defaultUserModel) Trans(ctx context.Context, fn func(ctx context.Contex
func (m *defaultUserModel) SelectBuilder() squirrel.SelectBuilder {
return squirrel.Select().From(m.table)
}
func (m *defaultUserModel) Delete(ctx context.Context, session sqlx.Session, id int64) error {
func (m *defaultUserModel) Delete(ctx context.Context, session sqlx.Session, id string) error {
data, err := m.FindOne(ctx, id)
if err != nil {
return err
}
hmUserIdKey := fmt.Sprintf("%s%v", cacheHmUserIdPrefix, id)
hmUserMobileKey := fmt.Sprintf("%s%v", cacheHmUserMobilePrefix, data.Mobile)
yccUserIdKey := fmt.Sprintf("%s%v", cacheYccUserIdPrefix, id)
yccUserMobileKey := fmt.Sprintf("%s%v", cacheYccUserMobilePrefix, data.Mobile)
_, 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)
if session != nil {
return session.ExecCtx(ctx, query, id)
}
return conn.ExecCtx(ctx, query, id)
}, hmUserIdKey, hmUserMobileKey)
}, yccUserIdKey, yccUserMobileKey)
return err
}
func (m *defaultUserModel) formatPrimary(primary interface{}) string {
return fmt.Sprintf("%s%v", cacheHmUserIdPrefix, primary)
return fmt.Sprintf("%s%v", cacheYccUserIdPrefix, primary)
}
func (m *defaultUserModel) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary interface{}) error {
query := fmt.Sprintf("select %s from %s where `id` = ? and del_state = ? limit 1", userRows, m.table)