逐步替换代码
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// AdminRole 平台角色表 yz_admin_role
|
||||
type AdminRole struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Cid uint8 `orm:"column(cid);default(1)" json:"cid"` // 1平台角色 2租户角色
|
||||
Name string `orm:"column(name);size(32)" json:"name"`
|
||||
Status uint8 `orm:"column(status);default(1)" json:"status"`
|
||||
Rights *string `orm:"column(rights);type(text);null" json:"rights"`
|
||||
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);auto_now;null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *AdminRole) TableName() string {
|
||||
return "yz_admin_role"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// AdminUser 平台管理员信息表 yz_admin_user
|
||||
type AdminUser struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Account string `orm:"column(account);size(64)" json:"account"`
|
||||
Password string `orm:"column(password);size(32)" json:"-"`
|
||||
Name *string `orm:"column(name);size(32);null" json:"name"`
|
||||
Phone *string `orm:"column(phone);size(18);null" json:"phone"`
|
||||
Email *string `orm:"column(email);size(255);null" json:"email"`
|
||||
Qq *string `orm:"column(qq);size(16);null" json:"qq"`
|
||||
Sex uint8 `orm:"column(sex);default(0)" json:"sex"`
|
||||
Avatar *string `orm:"column(avatar);size(255);null" json:"avatar"`
|
||||
RoleID uint64 `orm:"column(role_id)" json:"group_id"`
|
||||
LoginCount uint64 `orm:"column(login_count);default(0)" json:"login_count"`
|
||||
LastLoginIP *string `orm:"column(last_login_ip);size(255);null" json:"last_login_ip"`
|
||||
Status uint8 `orm:"column(status);default(1)" json:"status"`
|
||||
CreateTime time.Time `orm:"column(create_time);type(datetime);auto_now_add" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);type(datetime);auto_now;null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *AdminUser) TableName() string {
|
||||
return "yz_admin_user"
|
||||
}
|
||||
|
||||
func md5Hex(s string) string {
|
||||
sum := md5.Sum([]byte(s))
|
||||
return hex.EncodeToString(sum[:])
|
||||
}
|
||||
|
||||
func NormalizeAccount(s string) string {
|
||||
return strings.TrimSpace(s)
|
||||
}
|
||||
|
||||
// CreateAdminUser 创建平台管理员用户(password 会被 md5)
|
||||
func CreateAdminUser(account, password string, name, phone, email, qq, avatar *string, sex uint8, roleID uint64, status uint8) (uint64, error) {
|
||||
u := &AdminUser{
|
||||
Account: NormalizeAccount(account),
|
||||
Password: md5Hex(strings.TrimSpace(password)),
|
||||
Name: name,
|
||||
Phone: phone,
|
||||
Email: email,
|
||||
Qq: qq,
|
||||
Avatar: avatar,
|
||||
Sex: sex,
|
||||
RoleID: roleID,
|
||||
Status: status,
|
||||
}
|
||||
id, err := Orm.Insert(u)
|
||||
return uint64(id), err
|
||||
}
|
||||
|
||||
func GetAdminUserByID(id uint64) (*AdminUser, error) {
|
||||
u := &AdminUser{ID: id}
|
||||
if err := Orm.Read(u); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return u, nil
|
||||
}
|
||||
|
||||
// UpdateAdminUser 更新用户基础信息(不含 password)
|
||||
func UpdateAdminUser(id uint64, fields map[string]interface{}) error {
|
||||
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Update(fields)
|
||||
return err
|
||||
}
|
||||
|
||||
func DeleteAdminUser(id uint64) error {
|
||||
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Delete()
|
||||
return err
|
||||
}
|
||||
|
||||
func ChangeAdminUserPassword(id uint64, newPassword string) error {
|
||||
_, err := Orm.QueryTable(new(AdminUser)).Filter("id", id).Update(map[string]interface{}{
|
||||
"password": md5Hex(strings.TrimSpace(newPassword)),
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func ListAdminUsers() ([]AdminUser, int64, error) {
|
||||
var rows []AdminUser
|
||||
total, err := Orm.QueryTable(new(AdminUser)).Count()
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
_, err = Orm.QueryTable(new(AdminUser)).OrderBy("-id").All(&rows)
|
||||
return rows, total, err
|
||||
}
|
||||
|
||||
+41
-3
@@ -1,8 +1,46 @@
|
||||
package models
|
||||
|
||||
// Init 初始化模型层资源(如:数据库连接、模型注册)。
|
||||
// 目前仅做占位以支持当前结构编译通过;后续按实际数据库/模型重写。
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"github.com/beego/beego/v2/client/orm"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
// Orm 全局 ORM 对象,供业务层和控制器使用
|
||||
var Orm orm.Ormer
|
||||
|
||||
// Init 初始化模型层资源(数据库连接、模型注册等)。
|
||||
func Init(_ string) {
|
||||
// TODO: 初始化数据库连接等
|
||||
// 从配置读取数据库连接信息
|
||||
user, _ := beego.AppConfig.String("mysqluser")
|
||||
pass, _ := beego.AppConfig.String("mysqlpass")
|
||||
urls, _ := beego.AppConfig.String("mysqlurls")
|
||||
dbname, _ := beego.AppConfig.String("mysqldb")
|
||||
|
||||
if user == "" || urls == "" || dbname == "" {
|
||||
panic("数据库配置(mysqluser/mysqlurls/mysqldb) 未正确设置")
|
||||
}
|
||||
|
||||
// 组装 DSN:user:pass@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", user, pass, urls, dbname)
|
||||
|
||||
// 注册默认数据库
|
||||
if err := orm.RegisterDataBase("default", "mysql", dsn); err != nil {
|
||||
panic("注册数据库失败: " + err.Error())
|
||||
}
|
||||
|
||||
// 注册模型
|
||||
orm.RegisterModel(
|
||||
new(Tenant),
|
||||
new(TenantUser),
|
||||
new(SystemMenu),
|
||||
new(AdminUser),
|
||||
new(AdminRole),
|
||||
)
|
||||
|
||||
// 创建全局 Ormer
|
||||
Orm = orm.NewOrm()
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// SystemMenu 系统菜单表 yz_system_menu
|
||||
type SystemMenu struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"` // 菜单ID
|
||||
Pid int64 `orm:"column(pid);default(0)" json:"pid"` // 上级菜单ID
|
||||
Title string `orm:"column(title);size(50)" json:"title"` // 菜单名称
|
||||
Path *string `orm:"column(path);size(200);null" json:"path"` // 路由路径
|
||||
ComponentPath *string `orm:"column(component_path);size(255);null" json:"componentPath"` // 组件路径
|
||||
Icon *string `orm:"column(icon);size(100);null" json:"icon"` // 菜单图标
|
||||
Sort int64 `orm:"column(sort);default(0)" json:"sort"` // 排序号
|
||||
Status int8 `orm:"column(status);default(0)" json:"status"` // 状态:1-启用,0-禁用
|
||||
IsVisible *int8 `orm:"column(is_visible);null" json:"isVisible"` // 是否显示:1-显示 0-不显示
|
||||
IsPlatform *int8 `orm:"column(is_platform);null" json:"isPlatform"` // 是否平台:1-是 0-否
|
||||
Type int8 `orm:"column(type)" json:"type"` // 菜单类型:1-目录,2-页面,3-接口
|
||||
Permission *string `orm:"column(permission);size(100);null" json:"permission"` // 权限标识(按钮类型时填写)
|
||||
Creater *string `orm:"column(creater);size(50);null" json:"creater"` // 创建者
|
||||
Remark *string `orm:"column(remark);size(500);null" json:"remark"` // 备注
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"createTime"` // 创建时间
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"updateTime"` // 更新时间
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"deleteTime"` // 删除时间
|
||||
}
|
||||
|
||||
// TableName 自定义表名
|
||||
func (m *SystemMenu) TableName() string {
|
||||
return "yz_system_menu"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// TenantUser 租户用户绑定关系表 yz_tenant_user
|
||||
type TenantUser struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid uint64 `orm:"column(tid)" json:"tid"` // 租户ID
|
||||
Uid uint64 `orm:"column(uid)" json:"uid"` // 用户ID
|
||||
Account *string `orm:"column(account);size(64);null" json:"account"` // 用户账号(冗余)
|
||||
Name *string `orm:"column(name);size(64);null" json:"name"` // 用户名称(冗余)
|
||||
Phone *string `orm:"column(phone);size(20);null" json:"phone"` // 手机号(冗余)
|
||||
Email *string `orm:"column(email);size(128);null" json:"email"` // 邮箱(冗余)
|
||||
Password *string `orm:"column(password);size(255);null" json:"password"` // 密码(冗余/可选)
|
||||
IsDefault int8 `orm:"column(is_default);default(0)" json:"is_default"` // 是否默认租户
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"` // 状态:1启用,0禁用
|
||||
Remark *string `orm:"column(remark);size(255);null" json:"remark"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime *time.Time `orm:"column(update_time);auto_now;type(datetime);null" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
// TableName 自定义表名
|
||||
func (m *TenantUser) TableName() string {
|
||||
return "yz_tenant_user"
|
||||
}
|
||||
|
||||
// BindTenantUser 绑定用户到租户(若已存在则更新状态/默认值)
|
||||
func BindTenantUser(tid, uid uint64, account, name, phone, email, password *string, isDefault, status int8, remark *string) (uint64, error) {
|
||||
var existed TenantUser
|
||||
err := Orm.QueryTable(new(TenantUser)).
|
||||
Filter("tid", tid).
|
||||
Filter("uid", uid).
|
||||
One(&existed)
|
||||
if err == nil {
|
||||
update := map[string]interface{}{
|
||||
"account": account,
|
||||
"name": name,
|
||||
"phone": phone,
|
||||
"email": email,
|
||||
"password": password,
|
||||
"status": status,
|
||||
"is_default": isDefault,
|
||||
"remark": remark,
|
||||
}
|
||||
_, uErr := Orm.QueryTable(new(TenantUser)).Filter("id", existed.ID).Update(update)
|
||||
return existed.ID, uErr
|
||||
}
|
||||
|
||||
m := &TenantUser{
|
||||
Tid: tid,
|
||||
Uid: uid,
|
||||
Account: account,
|
||||
Name: name,
|
||||
Phone: phone,
|
||||
Email: email,
|
||||
Password: password,
|
||||
IsDefault: isDefault,
|
||||
Status: status,
|
||||
Remark: remark,
|
||||
}
|
||||
id, iErr := Orm.Insert(m)
|
||||
return uint64(id), iErr
|
||||
}
|
||||
|
||||
// UnbindTenantUser 删除绑定关系
|
||||
func UnbindTenantUser(id uint64) error {
|
||||
_, err := Orm.QueryTable(new(TenantUser)).Filter("id", id).Delete()
|
||||
return err
|
||||
}
|
||||
|
||||
// ListTenantUsersByTid 根据租户ID查询绑定关系
|
||||
func ListTenantUsersByTid(tid uint64) ([]TenantUser, error) {
|
||||
var rows []TenantUser
|
||||
_, err := Orm.QueryTable(new(TenantUser)).
|
||||
Filter("tid", tid).
|
||||
OrderBy("-is_default", "-id").
|
||||
All(&rows)
|
||||
return rows, err
|
||||
}
|
||||
|
||||
// ListTenantBindingsByUid 根据用户ID查询绑定关系
|
||||
func ListTenantBindingsByUid(uid uint64) ([]TenantUser, error) {
|
||||
var rows []TenantUser
|
||||
_, err := Orm.QueryTable(new(TenantUser)).
|
||||
Filter("uid", uid).
|
||||
OrderBy("-is_default", "-id").
|
||||
All(&rows)
|
||||
return rows, err
|
||||
}
|
||||
|
||||
// SetDefaultTenant 设置用户默认租户(同一用户仅一个默认)
|
||||
func SetDefaultTenant(uid, tid uint64) error {
|
||||
_, err := Orm.QueryTable(new(TenantUser)).Filter("uid", uid).Update(map[string]interface{}{
|
||||
"is_default": 0,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = Orm.QueryTable(new(TenantUser)).
|
||||
Filter("uid", uid).
|
||||
Filter("tid", tid).
|
||||
Update(map[string]interface{}{"is_default": 1})
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user