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 (
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)